00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00038 #ifndef __vtkBruker2DSEQReader_h
00039 #define __vtkBruker2DSEQReader_h
00040
00041
00042 typedef enum
00043 {
00044 MAGNITUDE_IMAGE=1,
00045 REAL_IMAGE,
00046 IMAGINARY_IMAGE,
00047 COMPLEX_IMAGE,
00048 PHASE_IMAGE,
00049 IR_IMAGE,
00050 UNKNOWN
00051 } RECO_TYPE;
00052
00053 #include "vtkMedicalImageReader2.h"
00054 #include "vtkCNMRRIOWin32Header.h"
00055
00056 class VTK_CNMRR_IO_EXPORT vtkBruker2DSEQReader : public vtkMedicalImageReader2
00057 {
00058 public:
00059 static vtkBruker2DSEQReader *New();
00060 vtkTypeRevisionMacro(vtkBruker2DSEQReader,vtkMedicalImageReader2);
00061 virtual void PrintSelf(ostream& os, vtkIndent indent);
00062
00063 virtual int CanReadFile(const char* fname);
00064
00066
00067 virtual const char* GetDescriptiveName()
00068 {
00069 return "Bruker image";
00070 }
00072
00074
00075 vtkGetMacro(NumSlices, int);
00077
00079
00080 vtkGetMacro(Nechoes, int);
00082
00084
00085 vtkGetMacro(ACQ_n_echo_images, int);
00087
00089
00090 vtkGetMacro(NumRepetitions, int);
00092
00094
00095 vtkGetVectorMacro(Nucleus,char,9);
00097
00099
00100 vtkGetVector3Macro(RECO_fov, double);
00102
00104
00105 vtkGetVector3Macro(RECO_size, int);
00107
00109
00110 vtkGetMacro(RECO_image_type, RECO_TYPE);
00112
00114
00115 vtkGetVector3Macro(ACQ_grad_matrixX, double);
00117
00119
00120 vtkGetVector3Macro(ACQ_grad_matrixY, double);
00122
00124
00125 vtkGetVector3Macro(ACQ_grad_matrixZ, double);
00127
00129
00130 vtkGetMacro(ACQ_echo_timeArraySize, int);
00132
00134 double *GetACQ_echo_time() {return this->ACQ_echo_time;};
00135
00137
00138 vtkGetMacro(ACQ_repetition_timeArraySize, int);
00140
00142 double *GetACQ_repetition_time() {return this->ACQ_repetition_time;};
00143
00145
00146 vtkGetMacro(ACQ_inversion_timeArraySize, int);
00148
00150 double *GetACQ_inversion_time() {return this->ACQ_inversion_time;};
00151
00153
00154 vtkGetMacro(ACQ_slice_thick, double);
00156
00158
00160 vtkSetMacro(SortByBlock, int);
00161 vtkGetMacro(SortByBlock, int);
00162 vtkBooleanMacro(SortByBlock, int);
00164
00167 int *GetImageBlockSliceIndex(){return this->SliceIndex;};
00168
00169 protected:
00170 vtkBruker2DSEQReader();
00171 ~vtkBruker2DSEQReader();
00172
00173 virtual void ExecuteInformation();
00174 virtual void ExecuteData(vtkDataObject *out);
00175 virtual void ComputeDataIncrements();
00176
00177 int NumRepetitions;
00178 int NumSlices;
00179 int Nechoes;
00180 int ACQ_n_echo_images;
00181 char Nucleus[9];
00182 double *ACQ_echo_time;
00183 int ACQ_echo_timeArraySize;
00184 double *ACQ_repetition_time;
00185 int ACQ_repetition_timeArraySize;
00186 double *ACQ_inversion_time;
00187 int ACQ_inversion_timeArraySize;
00188 double ACQ_slice_thick;
00189 double *ACQ_slice_sepn;
00190 int ACQ_slice_sepnArraySize;
00191 double RECO_fov[3];
00192 int RECO_size[3];
00193 RECO_TYPE RECO_image_type;
00194 double ACQ_grad_matrixX[3];
00195 double ACQ_grad_matrixY[3];
00196 double ACQ_grad_matrixZ[3];
00197 int SortByBlock;
00198 int *SliceIndex;
00199
00200 private:
00201 vtkBruker2DSEQReader(const vtkBruker2DSEQReader&);
00202 void operator=(const vtkBruker2DSEQReader&);
00203 };
00204 #endif