X-Git-Url: http://git.kpe.io/?p=ctsim.git;a=blobdiff_plain;f=include%2Fprojections.h;h=a09f481c351db0006168b1743b6a83a2b1ad89ce;hp=eb1c3c7d03b852b4e2085eb976ab259b31e1ba8b;hb=9f29c8b32c972db1178d6f8551d5cd57ceb67083;hpb=484b9ac2ebf8f88dbe36bdc1d3a9c1b6a2b242eb diff --git a/include/projections.h b/include/projections.h index eb1c3c7..a09f481 100644 --- a/include/projections.h +++ b/include/projections.h @@ -7,9 +7,9 @@ ** Date Started: July 1, 1984 ** ** This is part of the CTSim program -** Copyright (C) 1983-2000 Kevin Rosenberg +** Copyright (c) 1983-2001 Kevin Rosenberg ** -** $Id: projections.h,v 1.17 2000/12/16 03:29:02 kevin Exp $ +** $Id: projections.h,v 1.21 2001/01/28 19:10:18 kevin Exp $ ** ** ** This program is free software; you can redistribute it and/or modify @@ -32,30 +32,53 @@ class Scanner; class DetectorArray; class Array2dFileLabel; +class fnetorderstream; +#include "array2dfile.h" +#include "imagefile.h" +#include // Projections class Projections { public: + + static const int POLAR_INTERP_INVALID; + static const int POLAR_INTERP_NEAREST; + static const int POLAR_INTERP_BILINEAR; + static const int POLAR_INTERP_BICUBIC; + Projections (const int nView, const int nDet); Projections (const Scanner& scanner); Projections (); ~Projections (); + static const int getInterpCount() {return s_iInterpCount;} + static const char** getInterpNameArray() {return s_aszInterpName;} + static const char** getInterpTitleArray() {return s_aszInterpTitle;} + static int convertInterpNameToID (const char* const interpName); + static const char* convertInterpIDToName (const int interpID); + static const char* convertInterpIDToTitle (const int interpID); + void initFromScanner (const Scanner& scanner); void printProjectionData (int startView, int endView); void printProjectionData (); - void printScanInfo (ostringstream& os) const; + void printScanInfo (std::ostringstream& os) const; - bool read (const string& fname); + bool read (const std::string& fname); bool read (const char* fname); bool write (const char* fname); - bool write (const string& fname); + bool write (const std::string& fname); bool detarrayRead (fnetorderstream& fs, DetectorArray& darray, const int view_num); bool detarrayWrite (fnetorderstream& fs, const DetectorArray& darray, const int view_num); + bool convertPolar (ImageFile& rIF, int iInterpolation); + bool convertFFTPolar (ImageFile& rIF, int iInterpolation, int iZeropad); + void calcArrayPolarCoordinates (unsigned int nx, unsigned int ny, double** ppdView, double** ppdDet); + void interpolatePolar (ImageFileArray& v, ImageFileArray& vImag, unsigned int nx, unsigned int ny, std::complex** ppcDetValue, + double** ppdDet, double** ppdView, unsigned int nView, unsigned int nDet, int iInterpolate); + bool reconstruct (ImageFile& im, const char* const filterName, double filt_param, const char* const filterMethodName, const int zeropad, const char* frequencyFilterName, const char* const interpName, int interp_param, const char* const backprojName, const int trace) const; void setNView (int nView); // used in MPI to restrict # of views @@ -64,7 +87,7 @@ class Projections void setPhmLen (double phmLen) { m_phmLen = phmLen;} void setCalcTime (double calcTime) {m_calcTime = calcTime;} void setRemark (const char* remark) {m_remark = remark; m_label.setLabelString(remark);} - void setRemark (const string& remark) {setRemark(remark.c_str());} + void setRemark (const std::string& remark) {setRemark(remark.c_str());} double detStart() const {return m_detStart;} double rotStart() const {return m_rotStart;} @@ -79,7 +102,7 @@ class Projections double focalLength() const {return m_focalLength;} double fieldOfView() const {return m_fieldOfView;} - const string& getFilename() const {return m_filename;} + const std::string& getFilename() const {return m_filename;} Array2dFileLabel& getLabel() {return m_label;} const Array2dFileLabel& getLabel() const {return m_label;} @@ -90,16 +113,16 @@ class Projections { return (*m_projData[iview]); } static bool copyHeader (const char* const filename, std::ostream& os); - static bool copyHeader (const string& filename, std::ostream& os); + static bool copyHeader (const std::string& filename, std::ostream& os); static bool copyViewData (const char* const filename, std::ostream& os, int startView, int endView); - static bool copyViewData (const string& filename, std::ostream& os, int startView, int endView); + static bool copyViewData (const std::string& filename, std::ostream& os, int startView, int endView); private: int m_headerSize; // Size of disk file header int m_geometry; // Geometry of scanner class DetectorArray **m_projData; // Pointer to array of detarray_st pointers - string m_remark; // description of raysum data + std::string m_remark; // description of raysum data int m_nDet; // number of detectors in array int m_nView; // number of rotated views double m_calcTime; // time required to calculate raysums @@ -116,11 +139,15 @@ class Projections kuint32 m_hour; kuint32 m_minute; kuint32 m_second; - string m_filename; + std::string m_filename; Array2dFileLabel m_label; const static kuint16 m_signature; + static const char* s_aszInterpName[]; + static const char* s_aszInterpTitle[]; + static const int s_iInterpCount; + bool headerWrite (fnetorderstream& fs); bool headerRead (fnetorderstream& fs); void newProjData ();