2f614988 |
1 | #ifndef AliRICH_h |
2 | #define AliRICH_h |
3da30618 |
3 | /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * |
4 | * See cxx source for full Copyright notice */ |
5 | |
0fe8fa07 |
6 | #include <AliDetector.h> |
853634d3 |
7 | #include <TClonesArray.h> |
1c349ae5 |
8 | #include <TObjArray.h> |
9 | #include <TVector.h> |
d4c94996 |
10 | #include <TVector3.h> |
1c349ae5 |
11 | |
3582c1f9 |
12 | #include "AliRICHDigitizer.h" |
cb8189e7 |
13 | #include "AliRICHParam.h" |
0fe8fa07 |
14 | #include "AliRICHCluster.h" |
15 | #include "AliRICHHit.h" |
d4c94996 |
16 | |
c021cb15 |
17 | //__________________AliRICH_________________________________________________________________________ |
e42a7b46 |
18 | class AliESD; |
3ea9cb08 |
19 | |
2f614988 |
20 | class AliRICH : public AliDetector |
21 | { |
2f614988 |
22 | public: |
a25b3368 |
23 | //ctor & dtor |
853634d3 |
24 | AliRICH(); |
af3d25a6 |
25 | AliRICH(const char *name, const char *title); |
d4c94996 |
26 | AliRICH(const AliRICH& RICH):AliDetector(RICH) {;} //copy ctor |
853634d3 |
27 | virtual ~AliRICH(); |
dfb4e77d |
28 | |
942194a4 |
29 | AliRICH& operator=(const AliRICH&) {return *this;} |
d4c94996 |
30 | //framework part |
e42a7b46 |
31 | virtual Int_t IsVersion() const =0; //interface from |
32 | virtual void StepManager() =0; //interface from AliMC |
33 | virtual void Hits2SDigits(); //interface from AliSimulation |
d3eb6079 |
34 | virtual void Digits2Raw(); //interface from AliSimulation |
e42a7b46 |
35 | virtual AliDigitizer* CreateDigitizer(AliRunDigitizer* man) const {return new AliRICHDigitizer(man);} //interface from AliSimulation |
e42a7b46 |
36 | virtual void SetTreeAddress(); //interface from AliLoader |
37 | virtual void MakeBranch(Option_t *opt=" "); //interface from AliLoader |
38 | virtual void CreateMaterials(); //interface from AliMC |
39 | virtual void CreateGeometry(); //interface from AliMC |
0fe8fa07 |
40 | virtual void BuildGeometry(); //interface |
41 | virtual void Print(Option_t *option="") const; //prints current RICH status |
42 | //private part |
d3eb6079 |
43 | void GeomPadPanelFrame()const; //defines PPF geometry |
44 | void GeomAmpGap() const; //defines gap geometry + anod wires |
45 | void GeomRadiators() const; //defines radiators geometry |
46 | void GeomSandBox() const; //defines sandbox geometry |
47 | void GeomRadioSrc() const; //defines radio source geometry |
48 | void GeomAerogel() const; //defines aerogel geometry |
a25b3368 |
49 | static Float_t Fresnel(Float_t ene,Float_t pdoti, Bool_t pola); //deals with Fresnel absorption |
0fe8fa07 |
50 | |
51 | AliRICHHit* Hit (Int_t tid )const; //first hit of given TID |
52 | inline void HitAdd (Int_t c,Int_t tid,TVector3 in,TVector3 out,Double_t e=0); //add new hit |
53 | inline void HitsCreate ( ); //create hits container |
54 | void HitsPrint (Int_t iEvent=0 )const; //prints hits |
55 | |
56 | TClonesArray* SDigits ( )const{return fSdigits;} //pointer to sdigits list |
57 | inline void SDigitAdd (Int_t c,TVector pad,Double_t q,Int_t pid,Int_t tid ) ; //add new sdigit |
58 | inline void SDigitsCreate ( ) ; //create sdigits container |
59 | void SDigitsReset ( ) {fNsdigits=0; if(fSdigits) fSdigits ->Clear();} //clean a list of sdigits |
60 | void SDigitsPrint (Int_t iEvent=0 )const; //prints sdigits |
61 | |
62 | using AliDetector::Digits; |
63 | TClonesArray* Digits (Int_t iC )const{return fDigs ? (TClonesArray *)fDigs->At(iC-1):0;} |
64 | inline void DigitAdd (Int_t c,TVector pad,int q,int cfm,int *tid ) ; //add new digit |
65 | inline void DigitsCreate ( ) ; //create digits |
66 | void DigitsReset ( ) {if(fDigs)for(int i=0;i<kNchambers;i++){fDigs->At(i)->Clear();fNdigs[i]=0;}} //virtual |
67 | void DigitsPrint (Int_t iEvent=0 )const; //prints digits |
68 | |
69 | TClonesArray* Clusters (Int_t iC )const{if(fClus) return (TClonesArray *)fClus->At(iC-1);else return 0;} |
70 | inline void ClusterAdd (AliRICHCluster &cl ) ; //add new cluster |
71 | inline void ClustersCreate( ) ; //create clusters container |
72 | void ClustersReset ( ) {if(fClus)for(int i=0;i<kNchambers;i++){fClus ->At(i)->Clear();fNclus[i]=0;}} |
73 | void ClustersPrint (Int_t iEvent=0 )const; //prints a list of clusters for a given event |
74 | |
75 | AliRICHChamber* C(Int_t iC) const{return fParam->C(iC);} //provides pointer to a given chamber |
76 | AliRICHParam* P() const{return fParam;} //provides pointer to a RICH params |
a25b3368 |
77 | AliRICH* R() {return this;} //provides pointer to RICH main object |
78 | TVector Counters() const{return fCounters;} //provides a set of counters |
79 | void ControlPlots(); //creates ~/RCP.root with a set of QA plots |
0fe8fa07 |
80 | void Display()const; //Display event |
81 | void DisplayEvent(Int_t,Int_t)const; //Display event |
82 | static Int_t Nparticles(Int_t iPid,Int_t iEventN,AliRunLoader *pRunLoader); //counts total number of particle with iPid |
a25b3368 |
83 | void PrintTracks (Int_t iEvent=0); //prints a list of tracks for a given event |
d3eb6079 |
84 | void CheckPR ()const; //utility-> run staff for stack ?????? |
c60862bf |
85 | protected: |
d3eb6079 |
86 | enum EMedia {kAir=1,kRoha,kSiO2,kC6F14,kCH4,kCsI,kGridCu,kOpSiO2,kGap,kAl,kGlass,kCu,kW,kSteel,kPerpex,kSr90,kMylar,kGel,kReflector}; |
a25b3368 |
87 | enum ECounters {kStepManager=0,kCerProdTot,kCerProdRad,kCerKillTot,kCerKillRad,kCerKillRef,kEleProdTot}; |
0fe8fa07 |
88 | AliRICHParam *fParam; //main RICH parametrization |
a25b3368 |
89 | //fHits and fDigits belong to AliDetector |
90 | TClonesArray *fSdigits; //! list of sdigits |
91 | Int_t fNsdigits; //! current number of sdigits |
84365c70 |
92 | |
0fe8fa07 |
93 | TObjArray *fDigs; //! each chamber holds it's one lists of digits |
94 | Int_t fNdigs[7]; //! array of current numbers of digits |
84365c70 |
95 | |
0fe8fa07 |
96 | TObjArray *fClus; //! each chamber holds it's one lists of clusters |
97 | Int_t fNclus[7]; //! array of current numbers of raw clusters |
84365c70 |
98 | |
a25b3368 |
99 | TVector fCounters; //Particle history counters, explanation in StepManager() |
100 | |
0fe8fa07 |
101 | ClassDef(AliRICH,9) //Main RICH class |
c60862bf |
102 | };//class AliRICH |
ed3ceb24 |
103 | |
c1863e3c |
104 | //__________________________________________________________________________________________________ |
0fe8fa07 |
105 | void AliRICH::HitsCreate() |
c60862bf |
106 | { |
107 | if(fHits) return; |
998b831f |
108 | AliDebug(1,"creating hits container."); |
0fe8fa07 |
109 | fHits=new TClonesArray("AliRICHHit",10000); fNhits=0; |
543d5224 |
110 | } |
c60862bf |
111 | //__________________________________________________________________________________________________ |
0fe8fa07 |
112 | void AliRICH::HitAdd(Int_t c,Int_t tid,TVector3 i3,TVector3 o3,Double_t eloss) |
a25b3368 |
113 | { |
114 | //add new RICH hit to the list of hits |
115 | TClonesArray &tmp=*fHits; |
0fe8fa07 |
116 | new(tmp[fNhits++])AliRICHHit(c,tid,i3,o3,eloss); |
a25b3368 |
117 | }//AddHit() |
118 | //__________________________________________________________________________________________________ |
0fe8fa07 |
119 | void AliRICH::SDigitsCreate() |
120 | { |
121 | if(fSdigits) return; |
122 | AliDebug(1,"creating sdigits container."); |
123 | fSdigits=new TClonesArray("AliRICHDigit",10000); fNsdigits=0; |
124 | } |
125 | //__________________________________________________________________________________________________ |
126 | void AliRICH::SDigitAdd(Int_t c,TVector pad,Double_t q,Int_t pid,Int_t tid) |
e42a7b46 |
127 | { |
128 | Int_t cfm; |
ed3ceb24 |
129 | switch(pid){ |
e42a7b46 |
130 | case 50000050: cfm=1000000;break;//cerenkov |
131 | case 50000051: cfm=1000; break;//feedback |
132 | default: cfm=1; break;//mip |
ed3ceb24 |
133 | } |
0fe8fa07 |
134 | TClonesArray &tmp=*fSdigits; new(tmp[fNsdigits++])AliRICHDigit(c,pad,q,cfm,tid,-1,-1); |
e42a7b46 |
135 | } |
d4c94996 |
136 | //__________________________________________________________________________________________________ |
0fe8fa07 |
137 | void AliRICH::DigitsCreate() |
a25b3368 |
138 | { |
0fe8fa07 |
139 | if(fDigs) return; |
140 | AliDebug(1,"creating digits containers."); |
141 | fDigs = new TObjArray(kNchambers); |
142 | for(Int_t i=0;i<kNchambers;i++) {fDigs->AddAt(new TClonesArray("AliRICHDigit",10000), i); fNdigs[i]=0;} |
143 | } |
144 | //__________________________________________________________________________________________________ |
145 | void AliRICH::DigitAdd(int c,TVector pad,int q,int cfm,int *tid) |
146 | { |
147 | TClonesArray &tmp=*((TClonesArray*)fDigs->At(c-1)); |
148 | new(tmp[fNdigs[c-1]++])AliRICHDigit(c,pad,q,cfm,tid[0],tid[1],tid[2]); |
a25b3368 |
149 | } |
150 | //__________________________________________________________________________________________________ |
0fe8fa07 |
151 | void AliRICH::ClustersCreate() |
152 | { |
153 | if(fClus) return; |
154 | AliDebug(1,"creating clusters containers."); |
155 | fClus = new TObjArray(kNchambers); |
156 | for(Int_t i=0;i<kNchambers;i++) {fClus->AddAt(new TClonesArray("AliRICHCluster",10000), i); fNclus[i]=0;} |
157 | } |
158 | //__________________________________________________________________________________________________ |
159 | void AliRICH::ClusterAdd(AliRICHCluster &cl) |
a25b3368 |
160 | { |
0fe8fa07 |
161 | Int_t c=cl.C()-1;TClonesArray &tmp=*((TClonesArray*)fClus->At(c)); |
162 | new(tmp[fNclus[c]++])AliRICHCluster(cl); |
a25b3368 |
163 | } |
0fe8fa07 |
164 | //__________________________________________________________________________________________________ |
c60862bf |
165 | #endif//#ifndef AliRICH_h |