source: trunk/source/visualization/gMocren/include/G4GMocrenIO.hh@ 1307

Last change on this file since 1307 was 1228, checked in by garnier, 16 years ago

update geant4.9.3 tag

File size: 13.8 KB
Line 
1//
2// File I/O manager class for writing or reading calcuated dose
3// distribution and some event information
4//
5//
6// Mar. 31, 2009 : release for the gMocrenFile driver
7//
8// Akinori Kimura
9//
10// gMocren home page:
11// http://geant4.kek.jp/gMocren/
12//
13#ifndef GMOCRENIO_HH
14#define GMOCRENIO_HH
15
16#include <vector>
17#include <string>
18#include <fstream>
19#include <map>
20
21//
22//----- GMocrenDataPrimitive class -----//
23// data primitive class for volume data
24//
25template <typename T> class GMocrenDataPrimitive {
26protected:
27 int kSize[3];
28 double kScale;
29 T kMinmax[2];
30 float kCenter[3];
31 std::vector<T *> kImage;
32 std::string kDataName;
33 //std::vector<std::vector<T>> image;
34
35public:
36 GMocrenDataPrimitive();
37 //GMocrenDataPrimitive(GMocrenDataPrimitive<T> & _prim);
38 ~GMocrenDataPrimitive();
39
40 GMocrenDataPrimitive<T> & operator = (const GMocrenDataPrimitive<T> & _right);
41 GMocrenDataPrimitive<T> & operator + (const GMocrenDataPrimitive<T> & _right);
42 GMocrenDataPrimitive<T> & operator += (const GMocrenDataPrimitive<T> & _right);
43
44 void clear();
45 void clearImage();
46 void setSize(int _size[3]);
47 void getSize(int _size[3]);
48 void setScale(double & _scale);
49 double getScale();
50 void setMinMax(T _minmax[2]);
51 void getMinMax(T _minmax[2]);
52 void setImage(std::vector<T *> & _image);
53 void addImage(T * _image);
54 std::vector<T *> & getImage();
55 T * getImage(int _z); // get image of each layer
56 void setCenterPosition(float _center[3]);
57 void getCenterPosition(float _center[3]);
58 void setName(std::string & _name);
59 std::string getName();
60};
61
62
63//
64//----- GMocrenTrack class -----//
65//
66class GMocrenTrack {
67public:
68 struct Step {
69 float startPoint[3];
70 float endPoint[3];
71 };
72protected:
73 std::vector<struct Step> kTrack;
74 unsigned char kColor[3];
75
76public:
77 GMocrenTrack();
78 ~GMocrenTrack(){;}
79
80
81 int getNumberOfSteps() {return (int)kTrack.size();}
82 void addStep(float _startx, float _starty, float _startz,
83 float _endx, float _endy, float _endz);
84 void getStep(float & _startx, float & _starty, float & _startz,
85 float & _endx, float & _endy, float & _endz,
86 int _num);
87 void setTrack(std::vector<struct Step> & _aTrack) {kTrack = _aTrack;}
88 void setColor(unsigned char _color[3]) {
89 for(int i = 0; i < 3; i++) kColor[i] = _color[i];
90 }
91 void getColor(unsigned char _color[3]) {
92 for(int i = 0; i < 3; i++) _color[i] = kColor[i];
93 }
94 void translate(std::vector<float> & _tranlate);
95};
96
97
98
99//
100//----- GMocrenDetector class -----//
101//
102class GMocrenDetector {
103public:
104 struct Edge {
105 float startPoint[3];
106 float endPoint[3];
107 };
108protected:
109 std::vector<struct Edge> kDetector;
110 unsigned char kColor[3];
111 std::string kName;
112
113public:
114 GMocrenDetector();
115 ~GMocrenDetector(){;}
116
117
118 int getNumberOfEdges() {return (int)kDetector.size();}
119 void addEdge(float _startx, float _starty, float _startz,
120 float _endx, float _endy, float _endz);
121 void getEdge(float & _startx, float & _starty, float & _startz,
122 float & _endx, float & _endy, float & _endz,
123 int _num);
124 void setDetector(std::vector<struct Edge> & _aDetector) {kDetector = _aDetector;}
125 void setColor(unsigned char _color[3]) {
126 for(int i = 0; i < 3; i++) kColor[i] = _color[i];
127 }
128 void getColor(unsigned char _color[3]) {
129 for(int i = 0; i < 3; i++) _color[i] = kColor[i];
130 }
131 void setName(std::string & _name) { kName = _name;}
132 std::string getName() {return kName;}
133
134 void translate(std::vector<float> & _tranlate);
135};
136
137
138//
139//----- G4GMocrenIO class -----//
140//
141class G4GMocrenIO {
142public:
143 // file id
144 static std::string kId;
145
146 // file version
147 static std::string kVersion;
148
149 // data file name
150 static std::string kFileName;
151
152 // file data endian: little or not
153 static char kLittleEndianInput;
154 static char kLittleEndianOutput;
155
156 static std::string kComment;
157
158 // number of events
159 static int kNumberOfEvents;
160
161 // pointer to the modality image data
162 static unsigned int kPointerToModalityData;
163 // pointer to the dose distribution image data
164 static std::vector<unsigned int> kPointerToDoseDistData;
165 // pointer to the ROI image data
166 static unsigned int kPointerToROIData;
167 // pointer to the track data
168 static unsigned int kPointerToTrackData;
169 // pointer to the detector data
170 static unsigned int kPointerToDetectorData;
171
172 // voxel spacing (universal size)
173 static float kVoxelSpacing[3];
174
175 //----- modality image -----//
176 static class GMocrenDataPrimitive<short> kModality;
177 // density map to modality (CT) values
178 static std::vector<float> kModalityImageDensityMap;
179 static std::string kModalityUnit;
180
181 //----- dose distribution -----//
182 static std::vector<class GMocrenDataPrimitive<double> > kDose;
183 //std::vector<short *> kShortDose;
184 static std::string kDoseUnit;
185
186 //----- RoI -----//
187 static std::vector<class GMocrenDataPrimitive<short> > kRoi;
188
189 //----- track information -----//
190 static std::vector<float *> kSteps; // begin (x,y,z), end (x,y,z)
191 static std::vector<unsigned char *> kStepColors; // r, g, b
192
193 static std::vector<class GMocrenTrack> kTracks;
194 bool kTracksWillBeStored;
195
196 //----- detector information -----//
197 static std::vector<class GMocrenDetector> kDetectors;
198
199 //----- verbose information -----//
200 static int kVerbose; // verbose level : 0 - 5 (none - overtalk)
201
202public:
203 // constructor
204 G4GMocrenIO();
205 // destructor
206 ~G4GMocrenIO();
207
208 // initialize
209 void initialize();
210
211 // set the gMocren data file name
212 void setFileName(std::string & _filename) {kFileName = _filename;}
213 void setFileName(char * _filename) {kFileName = _filename;}
214 // get the gMocren data file name
215 std::string & getFileName() {return kFileName;}
216 // store all data in the gMocren data file
217 bool storeData(char * _filename); // interface for version 4
218 bool storeData();
219 bool storeData2(char * _filename); // version 2
220 bool storeData2();
221 bool storeData3(char * _filename); // version 3
222 bool storeData3();
223 bool storeData4(char * _filename); // version 4
224 bool storeData4();
225 // retrieve all data from the gMocren data file
226 bool retrieveData(char * _filename); // interface
227 bool retrieveData();
228 bool retrieveData2(char * _filename); //version 2
229 bool retrieveData2();
230 bool retrieveData3(char * _filename); // version 3
231 bool retrieveData3();
232 bool retrieveData4(char * _filename); // version 4
233 bool retrieveData4();
234
235 // get & set the file id
236 std::string & getID() {return kId;}
237 void setID();
238 void setID(std::string & _id) {kId = _id;}
239
240 // get & set the file version
241 std::string & getVersion();
242 void setVersion(std::string & _version);
243
244 // set endians of input/output data
245 void setLittleEndianInput(bool _little);
246 void setLittleEndianOutput(bool _little);
247
248 // get & set comment
249 std::string & getComment() {return kComment;}
250 void setComment(std::string & _comment) {kComment = _comment;}
251
252
253 // voxel spacing
254 void setVoxelSpacing(float _spacing[3]);
255 void getVoxelSpacing(float _spacing[3]);
256
257 // get & set number of events
258 int & getNumberOfEvents();
259 void setNumberOfEvents(int & _numberOfEvents);
260 void addOneEvent();
261
262 // set pointer the modality image data
263 void setPointerToModalityData(unsigned int & _pointer);
264 unsigned int getPointerToModalityData();
265 // set pointer the dose distribution image data
266 void addPointerToDoseDistData(unsigned int & _pointer);
267 unsigned int getPointerToDoseDistData(int _elem = 0);
268 // set pointer the ROI image data
269 void setPointerToROIData(unsigned int & _pointer);
270 unsigned int getPointerToROIData();
271 // set pointer the track data
272 void setPointerToTrackData(unsigned int & _pointer);
273 unsigned int getPointerToTrackData();
274private:
275 // calculate pointers
276 void calcPointers4();
277 void calcPointers3();
278 void calcPointers2();
279
280
281 //----- Modality image -----//
282public:
283 // get & set the modality image size
284 void getModalityImageSize(int _size[3]);
285 void setModalityImageSize(int _size[3]);
286 // get & set the modality image spacing size
287 void getModalityImageVoxelSpacing(float _size[3]); // un-usable
288 void setModalityImageVoxelSpacing(float _size[3]); // un-usable
289 // get & set the modality image size
290 void setModalityImageScale(double & _scale);
291 double getModalityImageScale();
292 // set the modality image in CT
293 void setModalityImage(short * _image);
294 short * getModalityImage(int _z);
295 void clearModalityImage();
296 // set/get the modality image density map
297 void setModalityImageDensityMap(std::vector<float> & _map);
298 std::vector<float> & getModalityImageDensityMap();
299 // set the modality image min./max.
300 void setModalityImageMinMax(short _minmax[2]);
301 // get min. & max. of the modality image
302 void getModalityImageMinMax(short _minmax[2]);
303 short getModalityImageMax();
304 short getModalityImageMin();
305 // set center of the modality image position
306 void setModalityCenterPosition(float _center[3]);
307 void getModalityCenterPosition(float _center[3]);
308 // get & set the modality image unit
309 std::string getModalityImageUnit();
310 void setModalityImageUnit(std::string & _unit);
311
312 short convertDensityToHU(float & _dens);
313
314 //----- Dose distribution -----//
315
316 // instanciate a dose distribution data object
317 void newDoseDist();
318 // get number of dose distribion data
319 int getNumDoseDist();
320 // get & set the dose distribution unit
321 std::string getDoseDistUnit(int _num = 0);
322 void setDoseDistUnit(std::string & _unit, int _num = 0);
323 // get & set the dose distribution image size
324 void getDoseDistSize(int _size[3], int _num = 0);
325 void setDoseDistSize(int _size[3], int _num = 0);
326 // get min. & max. of the dose distribution image
327 void setDoseDistMinMax(short _minmax[2], int _num = 0);
328 void getDoseDistMinMax(short _minmax[2], int _num = 0);
329 // get min. & max. of the dose distribution
330 void setDoseDistMinMax(double _minmax[2], int _num = 0);
331 void getDoseDistMinMax(double _minmax[2], int _num = 0);
332 // get & set scale value of the dose distribution for the image
333 void setDoseDistScale(double & _scale, int _num = 0);
334 double getDoseDistScale(int _num = 0);
335 // set the dose distribution image
336 void setShortDoseDist(short * _image, int _num = 0);
337 void getShortDoseDist(short * _data, int _z, int _num = 0);
338 void getShortDoseDistMinMax(short _minmax[2], int _num = 0);
339 // set the dose distribution
340 void setDoseDist(double * _image, int _num = 0);
341 double * getDoseDist(int _z, int _num = 0);
342 // add another dose ditribution map to this map
343 bool addDoseDist(std::vector<double *> & _image, int _num = 0);
344
345 // get & get center position of calculated dose region
346 void getDoseDistCenterPosition(float _center[3], int _num = 0);
347 void setDoseDistCenterPosition(float _center[3], int _num = 0);
348
349 // get & get name of calculated dose distribution
350 std::string getDoseDistName(int _num = 0);
351 void setDoseDistName(std::string _name, int _num = 0);
352
353 // copy dose distributions
354 void copyDoseDist(std::vector<class GMocrenDataPrimitive<double> > & _dose);
355 // merge two dose distributions
356 bool mergeDoseDist(std::vector<class GMocrenDataPrimitive<double> > & _dose);
357
358 // clear all dose distributions
359 void clearDoseDistAll();
360protected:
361 // check whether dose variable is empty or not
362 bool isDoseEmpty();
363 // calcuated scale value to convert dose distribution into image
364 void calcDoseDistScale();
365
366public:
367 //----- RoI -----//
368
369 // instanciate an RoI data object
370 void newROI();
371 // get number of RoI data
372 int getNumROI();
373 // get & set the ROI image scale
374 double getROIScale(int _num = 0);
375 void setROIScale(double & _scale, int _num = 0);
376 // get & set the ROI image
377 short * getROI(int _z, int _num = 0);
378 void setROI(short * _image, int _num = 0);
379 // get & set the ROI image size
380 void getROISize(int _size[3], int _num = 0);
381 void setROISize(int _size[3], int _num = 0);
382 // get & set position of the ROI region center
383 void getROICenterPosition(float _center[3], int _num = 0);
384 void setROICenterPosition(float _center[3], int _num = 0);
385 // get & set the ROI image min. and max.
386 void getROIMinMax(short _minmax[2], int _num = 0);
387 void setROIMinMax(short _minmax[2], int _num = 0);
388 void clearROIAll();
389protected:
390 // check whether RoI variable is empty or not
391 bool isROIEmpty();
392
393
394public:
395 //----- Track -----//
396 // get number of tracks
397 int getNumTracks();
398 int getNumTracks4();
399 // get & set tracks
400 std::vector<float *> & getTracks();
401 void getTrack(int _num, std::vector<float *> & _steps,
402 std::vector<unsigned char * > & _color);
403 void addTrack(float * _tracks);
404 void setTracks(std::vector<float *> & _tracks);
405 std::vector<unsigned char *> & getTrackColors();
406 void addTrackColor(unsigned char * _colors);
407 void setTrackColors(std::vector<unsigned char *> & _trackColors);
408 void copyTracks(std::vector<float *> & _tracks, std::vector<unsigned char *> & _colors);
409 void mergeTracks(std::vector<float *> & _tracks, std::vector<unsigned char *> & _colors);
410 void addTrack(std::vector<float *> & _steps, unsigned char _color[3]);
411
412 void notStoredTracks() {kTracksWillBeStored = false;};
413 void translateTracks(std::vector<float> & _translateo);
414 void clearTracks() {kTracks.clear();}
415
416
417 //----- Detectors -----//
418 // get number of detectors
419 int getNumberOfDetectors();
420 // add one detector which consists of edges (float[6])
421 void addDetector(std::string & _name, std::vector<float *> & _det, unsigned char _color[3]);
422 void getDetector(int _num, std::vector<float *> & _edges,
423 std::vector<unsigned char *> & _color,
424 std::string & _detectorName);
425 void translateDetector(std::vector<float> & _translate);
426 void clearDetector() {kDetectors.clear();}
427
428protected:
429 // endian conversion
430 template <typename Type> void convertEndian(char *, Type &);
431 // byte order inversion
432 template <typename T> void invertByteOrder(char * _val, T & _rval);
433
434
435public:
436 //----- verbose information -----//
437 void setVerboseLevel(int _level);
438
439};
440
441#endif
442
Note: See TracBrowser for help on using the repository browser.