Subversion Repositories f9daq

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. //
  2. // ********************************************************************
  3. // * License and Disclaimer                                           *
  4. // *                                                                  *
  5. // * The  GAMOS software  is  copyright of the Copyright  Holders  of *
  6. // * the GAMOS Collaboration.  It is provided  under  the  terms  and *
  7. // * conditions of the GAMOS Software License,  included in the  file *
  8. // * LICENSE and available at  http://fismed.ciemat.es/GAMOS/license .*
  9. // * These include a list of copyright holders.                       *
  10. // *                                                                  *
  11. // * Neither the authors of this software system, nor their employing *
  12. // * institutes,nor the agencies providing financial support for this *
  13. // * work  make  any representation or  warranty, express or implied, *
  14. // * regarding  this  software system or assume any liability for its *
  15. // * use.  Please see the license in the file  LICENSE  and URL above *
  16. // * for the full disclaimer and the limitation of liability.         *
  17. // *                                                                  *
  18. // * This  code  implementation is the result of  the  scientific and *
  19. // * technical work of the GAMOS collaboration.                       *
  20. // * By using,  copying,  modifying or  distributing the software (or *
  21. // * any work based  on the software)  you  agree  to acknowledge its *
  22. // * use  in  resulting  scientific  publications,  and indicate your *
  23. // * acceptance of all terms of the GAMOS Software license.           *
  24. // ********************************************************************
  25. //
  26.  
  27. #ifndef PETProjDataMgr_h
  28. #define PETProjDataMgr_h
  29.  
  30. /*---------------------------------------------------------------------------  
  31. ClassName:   PETProjDataMgr
  32. Author:      M. Canadas, P. Arce
  33. Changes:     01/11: creation
  34.  
  35. -------------------------------------------------------------------------
  36. // Description
  37.          
  38.     PET output (List-mode X Y Z) into projection data (sinograms).
  39.  
  40.     Output data: Sinograms for PET image reconstruction. Interfile format, STIR compatible (.hs/.s),
  41.                  STIR Software for Tomographic Image Reconstruction: http://stir.sourceforge.net/main.htm    
  42.  
  43. -----------------------------------------------------------------------*/
  44.  
  45. #include <iostream>
  46. #include "TVector3.h"
  47. class TH2F;
  48.  
  49. //#include <math.h>
  50. #include <map>
  51. #include <vector>
  52. #include <set>
  53. #include <string>
  54.  
  55. class TH1;
  56. class TH2F;
  57. class TH3F;
  58. class TRandom3;
  59.  
  60.  typedef unsigned short SINO_TYPE;  //!!NOTE:  Check "Write_sino3D" (.hv file) if SINO_TYPE changes !!
  61.  
  62. //------------------------------------------------------------------------
  63. class PETProjDataMgr
  64. {
  65.  private:
  66.   PETProjDataMgr();
  67.   int m_Debug;
  68.  public:
  69.   ~PETProjDataMgr();
  70.  
  71.   //! Get the only instance
  72.   static PETProjDataMgr* GetInstance();
  73.   void AddEvent(const TVector3& pos1, const TVector3& pos2);
  74.   //void ReadFile();
  75.   //PETOutput ReadEvent( G4bool& bEof );
  76.   void SetProjection(int axialplane, TH2F*h);
  77.   void WriteInterfile();
  78.   void SetNPlanes(int n){m_NOfPlanes=n;};
  79.   void SetNBin(int n){m_NOfBins=n;};
  80.   void SetNAng(int n){m_NOfAngles=n;};
  81.   void SetDebug(int n){m_Debug=n;};
  82.   void SetNumberOfChannels(int n){m_nch=n;};
  83.   void SetFilename( const char *fname){ m_Filename= TString(fname); };
  84.   void SetRingDiameter( double x){ m_RingDiameter = x; };
  85.   void SetAxialDistance( double x){ m_AxialDistance = x; };
  86.   TH2F *Phantom(int kaj);
  87.   int FwdProject(TH2F *img, TH2F *h=NULL);
  88.   int FwdProject(TH3F *img, TH3F *h=NULL);
  89.  
  90.   int FwdProject(double x,double y, double z, int nmax, TH1 *h=NULL);
  91.   TVector3 Hits2Digits(const TVector3 &r);
  92.  
  93. private:
  94.   static PETProjDataMgr* m_Instance;
  95.  
  96.   double m_AxialDistance;
  97.   double m_RingDiameter;
  98.   int m_NOfPlanes;
  99.   int m_NOfBins;
  100.   int m_NOfAngles;
  101.   int m_MaxRingDifference;
  102.   int m_OutFormat;
  103.   int m_nch;
  104.   int m_TotalAxialPlanes;
  105.   TString m_Filename;
  106.   TRandom3 * m_rnd;
  107.   //G4bool bDumpCout;
  108.  
  109.   SINO_TYPE ***m_projections;
  110.   SINO_TYPE *m_Buffer;
  111.  
  112.   unsigned long int m_TotalCoincidences;
  113.   unsigned long int m_TotalProjectionCoincidences;
  114.  
  115.  
  116.   FILE *fp;
  117. };
  118.  
  119. #endif
  120.  
  121.