/usr/include/InsightToolkit/Review/itkBruker2DSEQImageIO.h is in libinsighttoolkit3-dev 3.20.1+git20120521-6build1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 | /*=========================================================================
Program: Insight Segmentation & Registration Toolkit
Module: itkBruker2DSEQImageIO.h
Language: C++
Date: $Date$
Version: $Revision$
Copyright (c) Insight Software Consortium. All rights reserved.
See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notices for more information.
=========================================================================*/
/**
* \file The code for this file reader was written based on
* Bruker image file sets generated at the Center for NMR Research
* at the Penn State Milton S. Hershey Medical Center.
*
* NOTE: Currently this only reads in the "necessary" information,
* but eventually it should read the hundreds of Bruker specific
* parameters and encapsulate them in the meta dictionary.
*
* \author Don C. Bigler
* The Pennsylvania State University 2004
*
* This implementation was contributed as a paper to the Insight Journal
* http://insight-journal.org/midas/handle.php?handle=1926/1381
*
*/
#ifndef __itkBruker2DSEQImageIO_h
#define __itkBruker2DSEQImageIO_h
#ifdef _MSC_VER
#pragma warning ( disable : 4786 )
#endif
#include "itkImageIOBase.h"
#include "itkVectorContainer.h"
namespace itk
{
/** \class Bruker2DSEQImageIO
* \ingroup IOFilters
* \author Don C. Bigler
* \brief Class that defines how to read Bruker file format.
* Bruker IMAGE FILE FORMAT - The following is a brief description of the Bruker
* file format taken from:
*
* http://www.mrc-cbu.cam.ac.uk/Imaging/Common/brukerformat.shtml.
*
* For the Bruker format, a single scanning session is stored in its own
* directory. The directory is named according to the subject name or number, as
* typed in by the scanner operator. The directory name usually specifies the
* subject name/number and which session this is for that subject. Thus, a
* typical directory name would be
*
* 010005-m00.5X1
*
* where '010005' is the WBIC subject number of the subject, the 00 of 'm00'
* means this is the first scanning session that subject number of the session
* for that subject, on that day (1). The first two letters specify the day,
* since some arbitrary base date - set in the Bruker software.
*
* The WBIC number (e.g. 010005) in turn is made up of the year the subject was
* first scanned (01 = 2001) and where that subject is in the sequence of new
* numbers allocated (5 = 5th subject in the year 2001 who has needed a new
* subject number).
*
* Within the session directory (e.g 010005-m00.5X1), there are:
* 1. a text file, named 'subject'
* 2. A subdirectory numbered 1, 2, 3 etc, for each saved run of data
* acquisition in that session
*
* Within each of the run directories (e.g. 010005-m00.5X1/5) there are the
* following:
* 1. an 'imnd' or 'method' text file, containing parameters used in
* setting up and acquiring the data from the scanner
* 2. an 'acqp' (ACquisition Parameter) text file, with further details
* of the acquisition parameters used for that run
* 3. a large 'fid' file, that contains the raw, unreconstructed MR
* Free Induction Decay data
* 4. a subdirectory 'pdata' (Processed Data), that contains any
* reconstructions of the data into images
* 5. various other files, including the 'pulseprogram' and 'grdprog.r'
* gradient programs
*
* Within each of the 'pdata' subdirectories (e.g 01001-m00.5X1/5/pdata), there
* are numbered subdirectories (1,2,3 etc) for each new reconstruction of the raw
* data into images. There is usually only one such reconstruction, in
* subdirectory '1'.
*
* Within each reconstruction directory (e.g 01001-m00.5X1/5/pdata/1), there are:
* 1. a '2dseq' file. This is the 3D (structural etc) or 4D (FMRI)
* image file. It is simply a binary block of data, which could
* simply be renamed as 'myscan.img' to make an acceptable Analyze
* .img file.
* 2. a 'reco' text file, containing some details of the
* reconstruction.
* 3. a 'meta' text file, which I think contains information for the
* display of the 2dseq file within ParaVision.
* 4. a 'd3proc' file, containing image size definition parameters,
* inter alia.
*
* The 'reco', 'acqp', 'd3proc', and '2dseq' files are required for this reader.
* It will look for these files in the directory structure described above. The
* path and filename of the '2dseq' file must be the name of the file to read
* (see CanReadFile). This class supports reading only.
*/
class ITK_EXPORT Bruker2DSEQImageIO : public ImageIOBase
{
public:
/** Standard class typedefs. */
typedef Bruker2DSEQImageIO Self;
typedef ImageIOBase Superclass;
typedef SmartPointer<Self> Pointer;
/** Method for creation through the object factory. */
itkNewMacro(Self);
/** Run-time type information (and related methods). */
itkTypeMacro(Bruker2DSEQImageIO, Superclass);
/** Special types used for Bruker meta data. */
typedef VectorContainer< unsigned int, double > RECOFOVContainerType;
typedef VectorContainer< unsigned int, int > RECOTranspositionContainerType;
typedef VectorContainer< unsigned int, double > ACQEchoTimeContainerType;
typedef VectorContainer< unsigned int, double > ACQRepetitionTimeContainerType;
typedef VectorContainer< unsigned int, double > ACQInversionTimeContainerType;
typedef VectorContainer< unsigned int, double > ACQSliceSepnContainerType;
/*-------- This part of the interfaces deals with reading data. ----- */
/** Determine if the file can be read with this ImageIO implementation.
* \author Don C. Bigler
* \param FileNameToRead The name of the file to test for reading.
* \return Returns true if this ImageIO can read the file specified.
*/
virtual bool CanReadFile(const char* FileNameToRead);
/** Set the spacing and dimension information for the set filename. */
virtual void ReadImageInformation();
/** Reads the data from disk into the memory buffer provided. */
virtual void Read(void* buffer);
/*-------- This part of the interfaces deals with writing data. ----- */
/** Determine if the file can be written with this ImageIO implementation.
* FileNameToWrite The name of the file to test for writing.
* \author Don C. Bigler
* \post This function will always return false (Not implemented).
* \return Returns true if this ImageIO can write the file specified.
*/
virtual bool CanWriteFile( const char * itkNotUsed(FileNameToWrite) )
{
return false;
}
/** Set the spacing and dimension information for the set filename. */
virtual void WriteImageInformation()
{
return;
}
/** Writes the data to disk from the memory buffer provided. Make sure
* that the IORegions has been set properly. */
virtual void Write( const void * itkNotUsed( buffer ) )
{
return;
}
protected:
Bruker2DSEQImageIO();
~Bruker2DSEQImageIO();
void PrintSelf(std::ostream& os, Indent indent) const;
private:
Bruker2DSEQImageIO(const Self&); //purposely not implemented
void operator=(const Self&); //purposely not implemented
void SwapBytesIfNecessary(void * buffer, unsigned long numberOfPixels);
ImageIOBase::ByteOrder m_MachineByteOrder;
};
extern const char *const RECO_BYTE_ORDER;
extern const char *const RECO_FOV;
extern const char *const RECO_SIZE;
extern const char *const RECO_WORDTYPE;
extern const char *const RECO_IMAGE_TYPE;
extern const char *const RECO_TRANSPOSITION;
extern const char *const ACQ_DIM;
extern const char *const NI/*IMND_N_SLICES*/;
extern const char *const NR;
extern const char *const ACQ_SLICE_THICK/*IMND_SLICE_THICK*/;
extern const char *const NECHOES/*IMND_N_ECHO_IMAGES*/;
extern const char *const ACQ_SLICE_SEPN/*IMND_SLICE_SEPN*/;
extern const char *const ACQ_SLICE_SEPN_MODE;
extern const char *const ACQ_ECHO_TIME;
extern const char *const ACQ_REPETITION_TIME;
extern const char *const ACQ_INVERSION_TIME;
} // end namespace itk
#endif // __itkBruker2DSEQImageIO_h
|