L1phase shift corrected
[u/mrichter/AliRoot.git] / PHOS / AliPHOS.h
index 1234290..f1ce3c4 100644 (file)
-#ifndef PHOS_H
-#define PHOS_H
-////////////////////////////////////////////////
-//  Manager and hits classes for set:PHOS     //
-////////////////////////////////////////////////
-// --- ROOT system ---
-#include <TArray.h> 
-#include <TRandom.h> 
-#include <TH2.h>
-#include <TVector3.h>
-
-// --- galice header files ---
-#include "AliDetector.h"
-#include "AliHit.h"
-#include "AliRun.h"
-
-class AliPHOSgamma : public TObject {
-
-  public:
-                        virtual ~AliPHOSgamma(void) {}
-                        AliPHOSgamma(void) {}
-                        AliPHOSgamma(const AliPHOSgamma &g) { *this=g; }
-                        AliPHOSgamma(Float_t X,  Float_t Y,  Float_t E, 
-                                     Float_t Px, Float_t Py, Float_t Pz,
-                                     Int_t Ipart) :
-                          fX(X),   fY(Y),   fE(E), 
-                          fPx(Px), fPy(Py), fPz(Pz),
-                          fIpart(Ipart)
-                        {}
-
-    Float_t             fX;             // cm. x-coordinate (in beam direction)
-    Float_t             fY;             // cm. y-coordinate (around beam)
-
-    Float_t             fE;             // GeV. energy
-
-    Float_t             fPx;            // GeV. Gamma momentum Px
-    Float_t             fPy;            // GeV. Gamma momentum Py
-    Float_t             fPz;            // GeV. Gamma momentum Pz
-
-    Int_t               fIpart;         // Current particle number (GEANT particle code)
-
-    void                Print(Option_t *options=NULL);
-    AliPHOSgamma       &operator=(const AliPHOSgamma &g);
-
- private:
-
-    ClassDef(AliPHOSgamma,1)            // Gamma particle in PHOS cradle
-};
-
-//______________________________________________________________________________
-
-class AliPHOShit : public AliHit {
-   
-public:
-  Int_t     fVolume[5];  //array of volumes
-  Float_t   fELOS;       //ELOS
-public:
-  AliPHOShit() {}
-  AliPHOShit(Int_t shunt, Int_t track, Int_t *vol, Float_t *hits);
-  virtual ~AliPHOShit() {}
-  ClassDef(AliPHOShit,1)  //Hits object for set:PHOS
-};
-//______________________________________________________________________________
-
-
-class AliPHOSCradle : public TObject {
-
-  public:
-
-    virtual            ~AliPHOSCradle(void);
-                        AliPHOSCradle(void);
-                        AliPHOSCradle(int   Geometry           ,
-                                      float CrystalSideSize    ,
-                                      float CrystalLength      ,
-                                      float WrapThickness      ,
-                                      float AirThickness       ,
-                                      float PIN_SideSize       ,
-                                      float PIN_Length         ,
-                                      float Radius             ,
-                                      float CPV_Thickness      ,
-                                      float CPV_PHOS_Distance  ,
-                                      int   Nz                 ,
-                                      int   Nphi               ,
-                                      float Angle );
-
-    void                AddCPVHit(float x, float y);
-
-    Float_t             GetCrystalSideSize     (void) const {return fCrystalSideSize;}
-    Float_t             GetCellSideSize        (void) const {return fCrystalSideSize+2*fWrapThickness+2*fAirThickness;}
-    Float_t             GetCrystalLength       (void) const {return fCrystalLength;}
-    Float_t             GetWrapThickness       (void) const {return fWrapThickness;}
-    Float_t             GetAirThickness        (void) const {return fAirThickness;}
-    Float_t             GetPIN_SideSize        (void) const {return fPIN_SideSize;}
-    Float_t             GetPIN_Length          (void) const {return fPIN_Length;}
-    Float_t             GetRadius              (void) const {return fRadius;}
-    Float_t             GetCPV_PHOS_Distance   (void) const {return fCPV_PHOS_Distance;}
-    Float_t             GetCPV_Thikness        (void) const {return fCPV_Thickness;}
-    Int_t               GetNz                  (void) const {return fNz;}
-    Int_t               GetNphi                (void) const {return fNphi;}
-    Float_t             GetPhi                 (void) const {return fPhi;}
-
-    void                Clear(Option_t *opt="");                            // Clear all data.
-    void                Print(Option_t *opt="");
-    void                Distortion(const TH2F *Noise=NULL, const TH2F *Stochastic=NULL, const TH2F *Calibration=NULL);
-    TH2F               *CreateHistForDistortion(const char *name, const char *title, Int_t Nx, Int_t Ny, 
-                                                Float_t MU_mu, Float_t MU_sigma, Float_t SIGMA_mu, Float_t SIGMA_sigma);
-    Float_t             GetDistortedValue(const TH2F *h, UInt_t n);
-
-    void                Reconstruction(Float_t signal_step, UInt_t min_signal_reject);
-
-    void                GetXY(const TVector3 &p,const TVector3 &v,float R,float &x,float &y,float &l) const;
-
-    TObjArray          &GetGammasReconstructed (void)       {return fGammasReconstructed;}
-    TObjArray          &GetParticles           (void)       {return fParticles;}
-
-    TH2F                fCellEnergy;                            // GeV. Energy in cells
-    TH2S                fChargedTracksInPIN;                    // amount. hits in PIN
+#ifndef ALIPHOS_H
+#define ALIPHOS_H
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice     */
+/* $Id$ */
+
+/* History of cvs commits:
+ *
+ * $Log$
+ * Revision 1.73  2007/08/07 14:12:03  kharlov
+ * Quality assurance added (Yves Schutz)
+ *
+ * Revision 1.72  2007/02/13 10:52:08  policheh
+ * Raw2SDigits() implemented
+ *
+ * Revision 1.71  2007/02/05 10:43:25  hristov
+ * Changes for correct initialization of Geant4 (Mihaela)
+ *
+ * Revision 1.70  2007/01/17 17:28:56  kharlov
+ * Extract ALTRO sample generation to a separate class AliPHOSPulseGenerator
+ *
+ * Revision 1.69  2006/11/14 17:11:15  hristov
+ * Removing inheritances from TAttLine, TAttMarker and AliRndm in AliModule. The copy constructor and assignment operators are moved to the private part of the class and not implemented. The corresponding changes are propagated to the detectors
+ *
+ * Revision 1.68  2006/08/11 12:36:25  cvetan
+ * Update of the PHOS code needed in order to read and reconstruct the beam test raw data (i.e. without an existing galice.root)
+ *
+ * Revision 1.67  2006/04/07 08:42:00  hristov
+ * Follow AliAlignObj framework and remove AliPHOSAlignData (Yu.Kharlov)
+ *
+ * Revision 1.66  2006/03/24 21:39:33  schutz
+ * Modification needed to include PHOS in the global trigger framework
+ *
+ * Revision 1.65  2006/03/07 18:56:25  kharlov
+ * CDB is passed via environment variable
+ *
+ * Revision 1.64  2005/11/03 13:09:19  hristov
+ * Removing meaningless const declarations (linuxicc)
+ *
+ * Revision 1.63  2005/07/26 13:32:39  kharlov
+ * Restoring raw data fit from version of 29-Aug-2004
+ *
+ * Revision 1.62  2005/07/06 10:10:32  hristov
+ * Moving the functions used to initialize TF1 and TF2 to the pivate part of the class
+ *
+ * Revision 1.61  2005/05/28 12:10:07  schutz
+ * Copy constructor is corrected (by T.P.)
+ *
+ */
+
+
+//_________________________________________________________________________
+//  Base Class for PHOS     
+//                  
+//*-- Author: Laurent Aphecetche & Yves Schutz (SUBATECH)
 
-    TArrayF             fCPV_hitsX;                             // cm. X-hits in CPV detector. (0 - cradle center)
-    TArrayF             fCPV_hitsY;                             // cm. Y-hits in CPV detector. (0 - cradle center)
 
-  private:
-
-    Int_t               fGeometry;                              // Geometry type: 1 or 2
-    Float_t             fCrystalSideSize;                       // cm.
-    Float_t             fCrystalLength;                         // cm.
-    Float_t             fWrapThickness;                         // cm.
-    Float_t             fAirThickness;                          // cm.
-    Float_t             fPIN_SideSize;                          // cm.
-    Float_t             fPIN_Length;                            // cm.
-
-    Float_t             fRadius;                                // cm. Distance to PHOS
-
-    Float_t             fCPV_PHOS_Distance;                     // cm. Distance from CPV to PHOS.
-    Float_t             fCPV_Thickness;                         // cm. CPV thikness.
-
-    Int_t               fNz;                                    // Cells amount in beam direction
-    Int_t               fNphi;                                  // Cells amount around beam
-
-    Float_t             fPhi;                                   // degree. Position of CRADLE center
-
-    TObjArray           fGammasReconstructed;                   // List of reconstructed gammas
-    TObjArray           fParticles;                             // List of particles in the direction of this cradle
-
-    TRandom             r;                                      //! Random number class, do not stream
-
-//  friend class AliPHOS;
-
-    ClassDef(AliPHOSCradle,1)   // PHOS cradle
-};
+// --- ROOT system ---
+class TString ; 
+class TFolder ;
+class TTree ; 
+class TRandom ; 
+
+// --- AliRoot header files ---
+#include "AliDetector.h" 
+#include "AliLog.h"
+#include "AliPHOSGeometry.h" 
+#include "AliPHOSTrigger.h"
+class AliPHOSCalibData ;
 
 class AliPHOS : public AliDetector {
 
- public:
-
-    enum {CradlesBranch_Bit=1};
-
-                        AliPHOS();
-                        AliPHOS(const char *name, const char *title);
-  virtual              ~AliPHOS();
-  virtual void          AddHit(Int_t, Int_t*, Float_t*);
-  virtual void          BuildGeometry();
-  virtual void          CreateGeometry() {}
-  virtual void          CreateMaterials();
-  Int_t                 DistancetoPrimitive(Int_t px, Int_t py);
-  void                  FinishEvent(void);
-
-  virtual void          Init();
-  virtual Int_t         IsVersion() const =0;
-  void                  MakeBranch(Option_t *option);
-  void                  SetTreeAddress(void);
-  void                  FinishRun(void);
-  void                  ResetDigits(void);
-  void                  Print(Option_t *opt="");
-  AliPHOSCradle        *GetCradleOfTheParticle(const TVector3 &p,const TVector3 &v) const;
-  AliPHOSCradle        &GetCradle(int n) {return *(AliPHOSCradle*)fCradles->operator[](n);}
-  //  AliPHOSCradle        &GetCradle(int n) {return *((AliPHOSCradle*) (*fCradles)[n]) ;}
-  void                  Reconstruction(Float_t signal_step, UInt_t min_signal_reject);
-  virtual void          SetFlags(Float_t p1,Float_t p2=0,Float_t p3=0,Float_t p4=0,
-                               Float_t p5=0,Float_t p6=0,Float_t p7=0,Float_t p8=0,Float_t p9=0);
-  virtual void          SetCell(Float_t p1,Float_t p2=0,Float_t p3=0,Float_t p4=0,
-                               Float_t p5=0,Float_t p6=0,Float_t p7=0,Float_t p8=0,Float_t p9=0);
-  virtual void          SetRadius(Float_t radius);
-  virtual void          SetCradleSize(Int_t nz, Int_t nphi, Int_t ncradles);
-  virtual void          SetCradleA(Float_t angle);
-  virtual void          SetCPV(Float_t p1,Float_t p2=0,Float_t p3=0,Float_t p4=0,
-                               Float_t p5=0,Float_t p6=0,Float_t p7=0,Float_t p8=0,Float_t p9=0);
-  virtual void          SetExtra(Float_t p1,Float_t p2=0,Float_t p3=0,Float_t p4=0,
-                               Float_t p5=0,Float_t p6=0,Float_t p7=0,Float_t p8=0,Float_t p9=0);
-  virtual void          SetTextolitWall(Float_t dx, Float_t dy, Float_t dz);
-  virtual void          SetInnerAir(Float_t dx, Float_t dy, Float_t dz);
-  virtual void          SetFoam(Float_t dx, Float_t dy, Float_t dz, Float_t dr);
-  virtual void          StepManager()=0;
-  virtual void          DefPars();
-  virtual void          AddPHOSCradles();
-
-
-
-  virtual Int_t GetPHOS_IDTMED_PbWO4         (void){return gAlice->Idtmed()[700-1];}
-  virtual Int_t GetPHOS_IDTMED_CPV           (void){return gAlice->Idtmed()[701-1];}
-  virtual Int_t GetPHOS_IDTMED_Al            (void){return gAlice->Idtmed()[702-1];}
-  virtual Int_t GetPHOS_IDTMED_Tyvek         (void){return gAlice->Idtmed()[703-1];}
-  virtual Int_t GetPHOS_IDTMED_PIN           (void){return gAlice->Idtmed()[706-1];}
-  virtual Int_t GetPHOS_IDTMED_AIR           (void){return gAlice->Idtmed()[799-1];}
-  
-  
-  virtual Int_t   &GetPHOS_Ndiv_magic    (void) {return PHOS_Ndiv_magic;}
-  virtual Float_t  GetCrystalSideSize    (void) const {return PHOScell[0]; }
-  virtual Float_t  GetCrystalLength      (void) const {return PHOScell[1]; }
-  virtual Float_t  GetWrapThickness      (void) const {return PHOScell[2]; }
-  virtual Float_t  GetAirThickness       (void) const {return PHOScell[3]; }
-  virtual Float_t  GetPIN_SideSize       (void) const {return PHOScell[4]; }
-  virtual Float_t  GetPIN_Length         (void) const {return PHOScell[5]; }
-  virtual Float_t  GetRadius             (void) const {return PHOSradius;  }
-  virtual Float_t  GetCPV_Thickness      (void) const {return PHOSCPV[0];  }
-  virtual Float_t  GetCPV_PHOS_Distance  (void) const {return PHOSCPV[1];  }
-  virtual Int_t    GetNz                 (void) const {return PHOSsize[0]; }
-  virtual Int_t    GetNphi               (void) const {return PHOSsize[1]; }
-  virtual Int_t    GetCradlesAmount      (void) const {return PHOSsize[2]; }
-  virtual Float_t  GetAngleBetweenCradles(void) const {return PHOScradlesA;}
-  virtual Float_t  GetPHOS_flag          (Int_t n) const {return PHOSflags[n];}
-  virtual Float_t  GetPHOSextra          (Int_t n) const {return PHOSextra[n];}
-  virtual Float_t  GetPHOSFoam           (Int_t n) const {return PHOSFTI[n];}
-  virtual Float_t  GetPHOStxwall         (Int_t n) const {return PHOSTXW[n];}
-  virtual Float_t  GetPHOSAir            (Int_t n) const {return PHOSAIR[n];}
-  virtual Float_t &GetCradleAngle        (Int_t n) {return PHOSangle[n];}
-
-
-  TObjArray            *fCradles;               //!  Cradles in PHOS
-  Int_t                 fDebugLevel;
-
-  TTree                *fTreePHOS;              //! Pointer to PHOS tree.
-
-private:
-
-  TString               fBranchNameOfCradles;   // 
-  TString               fTreeName;              // Name of PHOS tree: "PHOS"
-
-#define MAXCRAD 100
-
-  Float_t PHOSflags[9], PHOScell[9], PHOSradius, PHOSCPV[9];
-  Int_t   PHOSsize[3];
-  Float_t PHOScradlesA,PHOSTXW[3],PHOSAIR[3],PHOSFTI[4],PHOSextra[9],
-        PHOSangle[MAXCRAD];
-  Int_t   PHOS_Ndiv_magic;
-
- ClassDef(AliPHOS,1)  //Hits manager for set:PHOS
-};
-#endif
+public:
 
+  AliPHOS() ;
+  AliPHOS(const char* name, const char* title="") ;  
+  virtual ~AliPHOS() ; 
+  virtual void   AddHit(Int_t, Int_t*, Float_t *) {
+    // do not use this definition but the one below
+    AliFatal(Form("do not use")) ;
+    
+  }
+  virtual void   AddHit( Int_t shunt, Int_t primary, Int_t track, 
+                        Int_t id, Float_t *hits ) = 0 ;   
+  virtual AliDigitizer* CreateDigitizer(AliDigitizationInput* digInput) const;
+  virtual void  CreateMaterials() ;            
+  virtual void  Digits2Raw();
+  virtual Bool_t Raw2SDigits(AliRawReader* rawReader);
+  virtual void  FinishRun() {;}
+  virtual AliPHOSGeometry * GetGeometry() const 
+  {return AliPHOSGeometry::GetInstance(GetTitle(),"") ;  }
+
+  virtual void    Hits2SDigits();
+  virtual Int_t   IsVersion(void) const = 0 ;  
+  virtual void    Init();
+  virtual AliTriggerDetector* CreateTriggerDetector() const 
+    { return new AliPHOSTrigger(); }
+
+  virtual AliLoader* MakeLoader(const char* topfoldername);
+  virtual void    SetTreeAddress();   
+  virtual const TString Version() const {return TString(" ") ; } 
+
+ private:                                        
+  AliPHOS(AliPHOS & phos);
+  AliPHOS & operator = (const AliPHOS & /*rvalue*/);
+
+ protected:
+  AliPHOSCalibData * fgCalibData ; //!  Pointer to Calibration DB
+
+  ClassDef(AliPHOS,6) // Photon Spectrometer Detector (base class)
+} ;
+
+#endif // ALIPHOS_H