File: itkArchetypeSeriesFileNames.h

package info (click to toggle)
insighttoolkit4 4.12.2-dfsg1-4
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 424,944 kB
  • sloc: cpp: 556,475; ansic: 145,857; fortran: 34,788; python: 17,383; sh: 2,120; lisp: 2,070; tcl: 993; java: 362; perl: 200; makefile: 121; csh: 81; pascal: 69; xml: 19; ruby: 10
file content (127 lines) | stat: -rw-r--r-- 4,289 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
/*=========================================================================
 *
 *  Copyright Insight Software Consortium
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *         http://www.apache.org/licenses/LICENSE-2.0.txt
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 *
 *=========================================================================*/
#ifndef itkArchetypeSeriesFileNames_h
#define itkArchetypeSeriesFileNames_h
#include "ITKIOImageBaseExport.h"


#include "itkObject.h"
#include "itkObjectFactory.h"
#include <vector>
#include <string>

namespace itk
{
/** \class ArchetypeSeriesFileNames
 * \brief Generate an ordered sequence of filenames.
 *
 * This class generates an ordered sequence of files based on an
 * archetypical filename.  From the archetypical filename, a set of
 * regular expressions is created to group filenames based on numeric
 * substrings.  There can be multiple numeric substrings in the
 * archetype.  When this occurs, ArchetypeSeriesFileNames can not
 * determine which numeric substring refers to the "image number" and
 * which numeric substring refers to the "series" or "study". By
 * default, the ArchetypeSeriesFileNames assumes the rightmost numeric
 * substring refers to the image number, and this is the group of
 * filenames returned by default.  However, the other groupings of
 * filenames can also be queried by passing in a group number to the
 * GetFileNames() method. Groups are numbered by the numeric
 * substrings from right to left in the archetype.
 *
 * For example, if a directory contains the files
 *
 *         foo_5_1.png
 *         foo_5_2.png
 *         foo_5_3.png
 *         foo_6_1.png
 *         foo_6_2.png
 *         foo_6_3.png
 *
 * and specifying an archetypical file foo_5_1.png, the filename list
 * will contain
 *
 *         foo_5_1.png
 *         foo_5_2.png
 *         foo_5_3.png
 *
 *  \ingroup IOFilters
 *
 * \ingroup ITKIOImageBase
 */

class ITKIOImageBase_EXPORT ArchetypeSeriesFileNames:public Object
{
public:
  /** Standard class typedefs. */
  typedef ArchetypeSeriesFileNames Self;
  typedef Object                   Superclass;
  typedef SmartPointer< Self >     Pointer;

  /** Method for creation through the object factory. */
  itkNewMacro(Self);

  /** Run-time type information (and related methods). */
  itkTypeMacro(ArchetypeSeriesFileNames, Object);

  /* -------- Define the API for ArchetypeSeriesFileNames ----------- */

  // The archetypical filename from which to generate the regular
  // expressions
  void SetArchetype(const std::string & archetype);

  itkGetStringMacro(Archetype);

  typedef  size_t VectorSizeType;

  /** Get the number of groupings that match the Archetype */
  VectorSizeType GetNumberOfGroupings();

  /** Helper types for managing the groups of filenames and their sizes */
  typedef std::vector< int >         IntVectorType;
  typedef std::vector< std::string > StringVectorType;

  /** Returns a vector containing the series' file names. The file
    * names are ordered by Index. Defaults to returning the filenames
    * to the rightmost grouping. */
  const StringVectorType & GetFileNames(VectorSizeType group = 0);

protected:
  ArchetypeSeriesFileNames();
  ~ArchetypeSeriesFileNames() {}
  virtual void PrintSelf(std::ostream & os, Indent indent) const ITK_OVERRIDE;

  /** Method that actually does the archetype matching/grouping */
  void Scan();

private:
  ITK_DISALLOW_COPY_AND_ASSIGN(ArchetypeSeriesFileNames);

  /** A string for formatting the names of files in the series. */
  std::string m_Archetype;

  std::vector< StringVectorType > m_Groupings;
  StringVectorType                m_FileNames; // ivar for returning by
                                               // reference

  TimeStamp m_ArchetypeMTime;
  TimeStamp m_ScanTime;
};
} //namespace ITK

#endif // itkArchetypeSeriesFileNames_h