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