File: itkBruker2dseqImageIO.h

package info (click to toggle)
insighttoolkit4 4.13.3withdata-dfsg2-4
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 491,256 kB
  • sloc: cpp: 557,600; ansic: 180,546; fortran: 34,788; python: 16,572; sh: 2,187; lisp: 2,070; tcl: 993; java: 362; perl: 200; makefile: 133; csh: 81; pascal: 69; xml: 19; ruby: 10
file content (139 lines) | stat: -rw-r--r-- 5,028 bytes parent folder | download | duplicates (3)
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
128
129
130
131
132
133
134
135
136
137
138
139
/*=========================================================================
 *
 *  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 itkBruker2dseqImageIO_h
#define itkBruker2dseqImageIO_h

#include "ITKIOBrukerExport.h"

#include "itkImageIOBase.h"
#include "itkVectorContainer.h"

namespace itk
{
/** \class Bruker2dseqImageIO
 * \brief Class that defines how to read Bruker file format.
 *
 * The following is a brief description of the Bruker file format.
 *
 * Within the directory representing a 'session' on the scanner, data is laid
 * out thus:
 *
 * session/
 *     1/                          <- Series/Acquisition number
 *         method                  <- An important header file
 *         acqp                    <- Another important header
 *         fid                     <- Raw data
 *         **other unimportant files**
 *         pdata/
 *             1/                  <- Reconstruction number (may be multiple)
 *                 2dseq           <- Reconstructed data
 *                 visu_pars       <- Most important header
 *                 reco            <- Mostly duplicated in visu_pars
 *                 procs           <- Unimportant header
 *                 id              <- Unimportant header
 *             2/
 *                 ...
 *
 * The minimum required data to read the image is the '2dseq' and 'visu_pars'
 * file. To use this reader, specify the 2dseq file as the filename. It will
 * check for the existence of the visu_pars file. If both these exist, the file
 * is opened. If the other header files exist (method, acqp, etc.) in the
 * correct locations then they will be read and added to the meta-data
 * dictionary, but they are  not used to read the image data itself.
 *
 * This class supports reading only.
 *
 * This file reader has been updated for ParaVision 6 2dseq files. The original
 * code was written by Don C. Bigler at Penn State in 2004. It has been
 * significantly changed, as Bruker also changed the format for ParaVision 6.
 * In particular a new header file, 'visu_pars' was introduced that means that
 * multiple headers no longer need to be read in order to read the '2dseq'
 * file. However, if the other Bruker headers are still present they are read
 * and added to the meta-data in case users wish to extract data from them.
 *
 * The original implementation was contributed as a paper to the Insight Journal
 * https://hdl.handle.net/1926/1381
 *
 * \ingroup ITKIOBruker
 *
 * \author Tobias C Wood, King's College London 2017
 */

class ITKIOBruker_EXPORT Bruker2dseqImageIO : public ImageIOBase
{
public:
  /* Standard class typedefs. */
  typedef Bruker2dseqImageIO          Self;
  typedef ImageIOBase                 Superclass;
  typedef SmartPointer< Self >        Pointer;
  typedef SmartPointer< const Self >  ConstPointer;

  /** New macro for creation of through a SmartPointer. */
  itkNewMacro(Self);

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

  /** Determine if the necessary files exist to read the specified 2dseq file.
   * Returns true if all required files exist. */
  virtual bool CanReadFile(const char *FileNameToRead) ITK_OVERRIDE;

  /** Set the spacing and dimension information for the set filename. */
  virtual void ReadImageInformation() ITK_OVERRIDE;

  /** Reads the data from disk into the memory buffer provided. */
  virtual void Read(void *buffer) ITK_OVERRIDE;

  /** Writing files has not been implemented for Bruker 2dseq.
   * This function will always return false. */
  virtual bool CanWriteFile( const char *itkNotUsed(FileNameToWrite) ) ITK_OVERRIDE
    {
    return false;
    }

  /** Not implemented. */
  virtual void WriteImageInformation() ITK_OVERRIDE
    {
    return;
    }

  /** Not implemented - does nothing */
  virtual void Write( const void *itkNotUsed(buffer) ) ITK_OVERRIDE
    {
    return;
    }

protected:
  Bruker2dseqImageIO();
  ~Bruker2dseqImageIO() ITK_OVERRIDE;

  virtual void PrintSelf(std::ostream & os, Indent indent) const ITK_OVERRIDE;

private:
  ITK_DISALLOW_COPY_AND_ASSIGN(Bruker2dseqImageIO);

  void SwapBytesIfNecessary(void *buffer, SizeValueType numberOfPixels);

  ImageIOBase::IOComponentType  m_OnDiskComponentType;
  ImageIOBase::ByteOrder        m_MachineByteOrder;
};

} // end namespace itk

#endif // itkBruker2dseqImageIO_h