]> git.uio.no Git - u/mrichter/AliRoot.git/blob - RICH/AliRICH.h
StepManager moved to v? classes, pure virtual method added instead
[u/mrichter/AliRoot.git] / RICH / AliRICH.h
1 #ifndef AliRICH_h
2 #define AliRICH_h
3
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5  * See cxx source for full Copyright notice                               */
6
7 /* $Id$ */
8
9
10 #include <TObjArray.h>
11 #include <AliDetector.h>
12 #include "AliRICHConst.h"
13 #include "AliRICHChamber.h"
14 static const int kNCH=7;
15
16 class TFile;
17
18 class AliRICHHit;
19 class AliRICHSDigit;
20 class AliRICHRawCluster;
21 class AliRICHRecHit1D;
22 class AliRICHRecHit3D;
23 class AliRICHClusterFinder;
24 class AliRICHDetect;
25 class AliRICHChamber;
26 class AliRICHCerenkov;
27 class AliSegmentation;
28 class AliRICHResponse;
29 class AliRICHGeometry;
30 class AliRICHMerger;
31
32 class AliRICH : public AliDetector 
33 {
34 public:
35                     AliRICH();                                            //default ctor
36                     AliRICH(const char *name, const char *title);         //named ctor
37   inline            AliRICH(const AliRICH& RICH)                    {;}   //copy ctor  
38           virtual  ~AliRICH();                                            //dtor
39           
40   inline  AliRICH& operator=(const AliRICH& rhs) { return *this;}
41           virtual Int_t  IsVersion() const =0;
42           
43   virtual void  AddHit(Int_t track, Int_t *vol, Float_t *hits);
44           void  AddCerenkov(Int_t track, Int_t *vol, Float_t *cerenkovs);
45           void  AddSDigit(Int_t *clhits);
46           void  AddDigits(Int_t id, Int_t *tracks, Int_t *charges, Int_t *digits);
47           void  AddRawCluster(Int_t id, const AliRICHRawCluster& cluster);
48           void  AddRecHit1D(Int_t id, Float_t* rechit, Float_t* photons, Int_t* padsx, Int_t* padsy);
49           void  AddRecHit3D(Int_t id, Float_t* rechit, Float_t omega, Float_t theta, Float_t phi);
50   virtual void  ResetHits();
51   virtual void  ResetDigits();
52           void  ResetRawClusters();
53           void  ResetRecHits1D();
54           void  ResetRecHits3D();
55   virtual void  FindClusters(Int_t nev,Int_t lastEntry);
56   virtual void  Hits2SDigits();
57           Int_t Hits2SDigits(Float_t xhit,Float_t yhit,Float_t eloss,Int_t id, ResponseType res);
58   virtual void  SDigits2Digits();
59   virtual void  Digits2Reco();
60
61   virtual void    CreateMaterials(); //GEANT materials definition
62           Float_t AbsoCH4(Float_t x);
63           Float_t Fresnel(Float_t ene,Float_t pdoti, Bool_t pola);
64   virtual void    BuildGeometry();   //TNode ROOT variant for event display
65   virtual void    CreateGeometry();  //GEANT volumes tree for simulation  
66   virtual void    StepManager()=0;
67    
68   inline Int_t    DistancetoPrimitive(Int_t px, Int_t py)      {return 9999;}
69    
70   virtual void   MakeBranch(Option_t *opt=" ");
71   virtual void   MakeBranchInTreeD(TTree *treeD, const char *file=0);
72   virtual void   SetTreeAddress();
73    
74   
75    
76    
77   AliRICHSDigit* FirstPad(AliRICHHit *hit, TClonesArray *clusters);
78   AliRICHSDigit* NextPad(TClonesArray *clusters);
79    
80
81   void     SetGeometryModel(Int_t iChamberN, AliRICHGeometry *pRICHGeo)    {       GetChamber(iChamberN)->SetGeometryModel(pRICHGeo);}
82   AliRICHGeometry* GetGeometryModel(Int_t iChamberN=0)                        const{return GetChamber(iChamberN)->GetGeometryModel();}    
83   void     SetSegmentationModel(Int_t iChamberN, AliSegmentation *pAliSeg) {       GetChamber(iChamberN)->SetSegmentationModel(pAliSeg);}
84   AliSegmentation* GetSegmentationModel(Int_t iChamberN=0)                    const{return GetChamber(iChamberN)->GetSegmentationModel();}
85   void     SetResponseModel(Int_t iChamberN, AliRICHResponse *pRICHRes)    {       GetChamber(iChamberN)->SetResponseModel(pRICHRes);}
86   AliRICHResponse* GetResponseModel(Int_t iChamberN)                          const{return GetChamber(iChamberN)->GetResponseModel();}
87   void     SetReconstructionModel(Int_t iChamberN, AliRICHClusterFinder *pRICHReco){GetChamber(iChamberN)->SetReconstructionModel(pRICHReco);}
88
89   virtual void   SetMerger(AliRICHMerger* thisMerger) {fMerger=thisMerger;}  
90   AliRICHChamber& Chamber(Int_t id) {return *((AliRICHChamber *) (*fChambers)[id]);}
91   AliRICHChamber* GetChamber(Int_t iChamberN)     const{return (AliRICHChamber*) (*fChambers)[iChamberN];}
92   
93   inline TObjArray     *Dchambers()                     {return fDchambers;}
94   inline TObjArray     *RecHits3D()                const{return fRecHits3D;}
95   inline TObjArray     *RecHits1D()                const{return fRecHits1D;}
96   inline Int_t         *Ndch()                          {return fNdch;}
97   inline Int_t         *Nrechits1D()                    {return fNrechits1D;} 
98   inline Int_t         *Nrechits3D()                    {return fNrechits3D;} 
99   inline TClonesArray  *SDigits()                  const{return fSDigits;}
100   inline TClonesArray  *Cerenkovs()                const{return fCerenkovs;}
101   inline TClonesArray  *DigitsAddress(Int_t id)         {return ((TClonesArray *) (*fDchambers)[id]);}
102   inline TClonesArray  *RecHitsAddress1D(Int_t id) const{return ((TClonesArray *) (*fRecHits1D)[id]);}
103   inline TClonesArray  *RecHitsAddress3D(Int_t id) const{return ((TClonesArray *) (*fRecHits3D)[id]);}
104   inline TClonesArray  *RawClustAddress(Int_t id)  const{return ((TClonesArray *) (*fRawClusters)[id]);}    
105
106   void DiagnosticsFE(Int_t evNumber1=0,Int_t evNumber2=0);    // Full events
107   void DiagnosticsSE(Int_t diaglevel,Int_t evNumber1=0,Int_t evNumber2=0);    // Single events
108  
109   virtual void Print(Option_t *option)const; // Prints debug information
110     
111 protected:
112   TObjArray            *fChambers;           //! List of RICH chambers
113   Int_t                 fNSDigits;           //Current number of sdigits
114   Int_t                 fNcerenkovs;         //Current number of cerenkovs
115   TClonesArray         *fSDigits;            //! List of sdigits
116   TObjArray            *fDchambers;          //! Array of lists of digits
117   TClonesArray         *fCerenkovs;          //! List of cerenkovs
118   Int_t                 fNdch[kNCH];         //Array of current numbers of digits
119   TObjArray            *fRawClusters;        // !List of raw clusters
120   TObjArray            *fRecHits1D;          // !List of rec. hits
121   TObjArray            *fRecHits3D;          // !List of rec. hits
122   Int_t                 fNrawch[kNCH];       //Array of current numbers of raw clusters
123   Int_t                 fNrechits1D[kNCH];   //Array of current numbers of rec hits 1D
124   Int_t                 fNrechits3D[kNCH];   //Array of current numbers of rec hits 3D 
125
126   Int_t fCkovNumber;                         // Number of Cerenkov photons
127   Int_t fCkovQuarz;                          // Cerenkovs crossing quartz
128   Int_t fCkovGap;                            // Cerenkovs crossing gap
129   Int_t fCkovCsi;                            // Cerenkovs crossing csi
130   Int_t fLostRfreo;                          // Cerenkovs reflected in freon
131   Int_t fLostRquar;                          // Cerenkovs reflected in quartz
132   Int_t fLostAfreo;                          // Cerenkovs absorbed in freon 
133   Int_t fLostAquarz;                         // Cerenkovs absorbed in quartz
134   Int_t fLostAmeta;                          // Cerenkovs absorbed in methane
135   Int_t fLostCsi;                            // Cerenkovs below csi quantum efficiency 
136   Int_t fLostWires;                          // Cerenkovs lost in wires
137   Int_t fFreonProd;                          // Cerenkovs produced in freon
138   Float_t fMipx;                             // x coord. of MIP
139   Float_t fMipy;                             // y coord. of MIP
140   Int_t fFeedbacks;                          // Number of feedback photons
141   Int_t fLostFresnel;                        // Cerenkovs lost by Fresnel reflection
142
143 // Background event for event mixing
144   Text_t *fFileName;                         //! File with background hits
145   AliRICHMerger *fMerger;                    //! pointer to merger
146     
147   ClassDef(AliRICH,2)                        //Main RICH class 
148 };//class AliRICH
149     
150 #endif