1 #ifndef DIG_FILE_SNARK_PRJ_H
2 #define DIG_FILE_SNARK_PRJ_H
7 #include <DIGFile/DIGFile.h>
9 enum DetectorTypeEnum {
23 enum GeometryTypeEnum {
33 GeometryTypeEnum GeometryType;
34 DetectorTypeEnum DetectorType;
38 double SrcDetDistance;
41 ProjTypeEnum ProjType;
44 ProjGeometry(double, double, DetectorTypeEnum);
45 ProjGeometry(DetectorTypeEnum, ProjTypeEnum);
58 double QuantumCalibration;
69 double AdditiveStdDev;
73 double MultiplicativeMean;
74 double MultiplicativeStdDev;
79 void SetQuantum(double, double, int);
80 void SetScatter(double, double);
81 void SetAdditive(double, double);
82 void SetMultiplicative(double, double);
86 int GetQuantum(double&, double&, double&);
87 int GetScatter(double&, double&);
88 int GetAdditive(double&, double&);
89 int GetMultiplicative(double&, double&);
97 unsigned int NumberOfEnergies;
102 ProjSpectrum(unsigned int eNum);
103 int SetEnergy(int, int, double, double);
106 int SetSpectrum(int* e, double* r, double* bg);
109 int GetNumberOfEnergies(unsigned int* eNum);
110 int GetEnergy(int, int*, double*, double*);
114 ///////////////////////////////////////////////////////////////////////////////
115 // DIGFileSnarkPrj main header
116 ///////////////////////////////////////////////////////////////////////////////
122 unsigned int Dimensions;
127 ///////////////////////////////////////////////////////////////////////////////
128 // DIGFileSnarkPrj application header
129 ///////////////////////////////////////////////////////////////////////////////
138 GeometryTypeEnum GeometryType;
139 DetectorTypeEnum DetectorType;
142 double SrcDetDistance;
144 ProjTypeEnum ProjType;
148 unsigned int NoOfEnergies;
169 bool MultiplicativeFlag;
170 double MultiplicativeM;
171 double MultiplicativeSD;
174 ///////////////////////////////////////////////////////////////////////////////
175 // DIGFileSnarkPrj projection header
176 ///////////////////////////////////////////////////////////////////////////////
188 class DIGFileSnarkProj: protected DIGFile {
191 static const char* TypeStr;
192 static const char* SchemaStr;
194 static bool XMLStringsInitialized;
196 static const XMLCh* AppHeaderXMLStr;
197 static const XMLCh* GeomHeaderXMLStr;
198 static const XMLCh* DivergentXMLStr;
199 static const XMLCh* RadiusXMLStr;
200 static const XMLCh* SourceDetXMLStr;
201 static const XMLCh* DetTypeXMLStr;
202 static const XMLCh* ParallelXMLStr;
203 static const XMLCh* ProjTypeXMLStr;
204 static const XMLCh* NoiseHeaderXMLStr;
205 static const XMLCh* QuantumXMLStr;
206 static const XMLCh* MeanXMLStr;
207 static const XMLCh* CalibMeasXMLStr;
208 static const XMLCh* GantryXMLStr;
209 static const XMLCh* ScatterXMLStr;
210 static const XMLCh* PeakXMLStr;
211 static const XMLCh* WidthXMLStr;
212 static const XMLCh* AdditiveXMLStr;
213 static const XMLCh* StdDevXMLStr;
214 static const XMLCh* MultipXMLStr;
215 static const XMLCh* SpectrumHeaderXMLStr;
216 static const XMLCh* NumOfEnerXMLStr;
217 static const XMLCh* EnergyLevelXMLStr;
218 static const XMLCh* EnergyXMLStr;
219 static const XMLCh* RatioXMLStr;
220 static const XMLCh* BackgroundXMLStr;
222 DIGString AppComment;
223 ProjSpectrum* Spectrum;
224 ProjGeometry* Geometry;
236 int Open(const char* pFileName, ProjFileMH* pMainHeader);
238 const char* pFileName, // File Name
239 const char* pTitle, // Title
240 unsigned int pNumberOfRays, // USRAYS
241 double pSampling, // PINC
242 const char* pComment // Comment
245 // updating main header after opening file to write
247 int SetTitle(const char* pTitle) {
248 return DIGFile::SetTitle(pTitle);
251 int SetComment(const char* pComment) {
252 return DIGFile::SetComment(pComment);
255 // writing application header
257 int SetAppHeader(ProjFileAH* pAppHeader);
260 int SetAppComment(const char* pComment);
263 int SetGeometry(double r, double d, DetectorTypeEnum t); // divergent
264 int SetGeometry(DetectorTypeEnum t, ProjTypeEnum p); // parallel
267 int SetSpectrum(unsigned int eNum, int* e, double* r, double* bg);
270 int SetNoiseQuantum(double, double, int);
271 int SetNoiseScatter(double, double);
272 int SetNoiseAdditive(double, double);
273 int SetNoiseMultiplicative(double, double);
275 // Appending Projection
277 int AppendProj(ProjFilePrjH* pProjHeader, const double* pData);
279 unsigned int pProjNo,
281 const char* pComment,
289 int Open(const char* pFileName);
291 // Reading file parameters
293 int GetNoOfRays(unsigned int* pNoOfRays) {
294 return DIGFile::GetArrayNoOfItems(pNoOfRays);
297 int GetNoOfProjs(unsigned int* pProjections) {
298 return DIGFile::GetNoOfArraySets(pProjections);
303 int SelectProj(unsigned int No) {
306 if((ret = SelectArraySet(No)) != 0) {
310 return SelectArray(0);
313 // Reading main header
315 int GetMainHeader(ProjFileMH* pMainHeader);
317 int GetTitle(const char** pTitle) {
318 return DIGFile::GetTitle(pTitle);
321 int GetEndian(DIGEndian* pEndian) {
322 return DIGFile::GetEndian(pEndian);
325 int GetDimensions(unsigned int* pDimensions) {
326 const DIGDimensions* Dimensions;
329 if((ret = DIGFile::GetDimensions(&Dimensions)) != 0) {
333 *pDimensions = Dimensions->x;
338 int GetSampling(double* pSampling) {
339 const DIGSampling* Sampling;
342 if((ret = DIGFile::GetSamplingX(&Sampling)) != 0) {
346 *pSampling = Sampling->x;
351 int GetComment(const char** pComment) {
352 return DIGFile::GetComment(pComment);
355 // Reading application header
357 int GetAppHeader(ProjFileAH* pAppHeader);
360 int GetAppComment(const char** pComment);
363 int GetGeometryType(GeometryTypeEnum* gt);
364 int GetGeometry(double* r, double* d, DetectorTypeEnum* t); // divergent
365 int GetGeometry(DetectorTypeEnum* t, ProjTypeEnum* p); // parallel
368 int GetNoOfEnergies(unsigned int* NumbOfEnergies);
369 int GetSpectrum(unsigned int i, int* e, double* r, double* bg);
372 int HasNoiseQuantum(bool* a);
373 int GetNoiseQuantum(double* m, double* cm, int* ga);
374 int HasNoiseScatter(bool* a);
375 int GetNoiseScatter(double* p, double* w);
376 int HasNoiseAdditive(bool* a);
377 int GetNoiseAdditive(double* m, double* sd);
378 int HasNoiseMultiplicative(bool* a);
379 int GetNoiseMultiplicative(double* m, double* sd);
382 // Reading projection header
384 int GetProjHeader(ProjFilePrjH* pProjHeader);
386 int GetProjNo(unsigned int* pProjNo)
389 const char* ProjNoStr;
391 if((ret = DIGFile::GetArraySetTitle(&ProjNoStr)) != 0) {
395 *pProjNo = atoi(ProjNoStr);
400 int GetProjAngle(double* pAngle) {
402 const char* Parameters;
404 if((ret = DIGFile::GetArraySetParameters(&Parameters)) != 0) {
408 *pAngle = atof(Parameters);
413 int GetProjComment(const char** pComments) {
414 return DIGFile::GetArraySetComment(pComments);
417 // Reading projection data
419 int GetProjData(void* pArrayData) {
420 return DIGFile::GetArrayData(pArrayData);
424 int ret = DIGFile::Close();
426 if(Geometry != NULL) {
431 if(Spectrum != NULL) {
441 int ParseApplicationHeader();
442 int CreateApplicationHeader();
445 #endif // SNARK_PRJ_FILE_H