3 ////////////////////////////////////////////////
4 // Manager and hits classes for set:PHOS //
5 ////////////////////////////////////////////////
13 // --- galice header files ---
14 #include "AliDetector.h"
18 class AliPHOSgamma : public TObject {
21 virtual ~AliPHOSgamma(void) {}
23 AliPHOSgamma(const AliPHOSgamma &g) { *this=g; }
24 AliPHOSgamma(Float_t X, Float_t Y, Float_t E,
25 Float_t Px, Float_t Py, Float_t Pz,
28 fPx(Px), fPy(Py), fPz(Pz),
32 Float_t fX; // cm. x-coordinate (in beam direction)
33 Float_t fY; // cm. y-coordinate (around beam)
35 Float_t fE; // GeV. energy
37 Float_t fPx; // GeV. Gamma momentum Px
38 Float_t fPy; // GeV. Gamma momentum Py
39 Float_t fPz; // GeV. Gamma momentum Pz
41 Int_t fIpart; // Current particle number (GEANT particle code)
43 void Print(Option_t *options=NULL);
44 AliPHOSgamma &operator=(const AliPHOSgamma &g);
48 ClassDef(AliPHOSgamma,1) // Gamma particle in PHOS cradle
51 //______________________________________________________________________________
53 class AliPHOShit : public AliHit {
56 Int_t fVolume[5]; //array of volumes
61 AliPHOShit(Int_t shunt, Int_t track, Int_t *vol, Float_t *hits);
62 virtual ~AliPHOShit() {}
64 ClassDef(AliPHOShit,1) //Hits object for set:PHOS
67 //______________________________________________________________________________
70 class AliPHOSCradle : public TObject {
74 virtual ~AliPHOSCradle(void);
76 AliPHOSCradle(int Geometry ,
77 float CrystalSideSize ,
87 Float_t GetCrystalSideSize (void) const {return fCrystalSideSize;}
88 Float_t GetCellSideSize (void) const {return fCrystalSideSize+2*fWrapThickness+2*fAirThickness;}
89 Float_t GetCrystalLength (void) const {return fCrystalLength;}
90 Float_t GetWrapThickness (void) const {return fWrapThickness;}
91 Float_t GetAirThickness (void) const {return fAirThickness;}
92 Float_t GetPIN_SideSize (void) const {return fPIN_SideSize;}
93 Float_t GetPIN_Length (void) const {return fPIN_Length;}
94 Float_t GetRadius (void) const {return fRadius;}
95 Int_t GetNz (void) const {return fNz;}
96 Int_t GetNphi (void) const {return fNphi;}
97 Float_t GetPhi (void) const {return fPhi;}
99 void Clear(Option_t *opt=""); // Clear all data.
100 void Print(Option_t *opt="");
101 void Distortion(const TH2F *Noise=NULL, const TH2F *Stochastic=NULL, const TH2F *Calibration=NULL);
102 TH2F *CreateHistForDistortion(const char *name, const char *title, Int_t Nx, Int_t Ny,
103 Float_t MU_mu, Float_t MU_sigma, Float_t SIGMA_mu, Float_t SIGMA_sigma);
104 Float_t GetDistortedValue(const TH2F *h, UInt_t n);
106 void Reconstruction(Float_t signal_step, UInt_t min_signal_reject);
108 void GetXY(const TVector3 &p,const TVector3 &v,float R,float &x,float &y,float &l) const;
110 TObjArray &GetGammasReconstructed (void) {return fGammasReconstructed;}
111 TObjArray &GetParticles (void) {return fParticles;}
113 TH2F fCellEnergy; // GeV. Energy in cells
114 TH2S fChargedTracksInPIN; // amount. hits in PIN
119 Int_t fGeometry; // Geometry type: 1 or 2
120 Float_t fCrystalSideSize; // cm.
121 Float_t fCrystalLength; // cm.
122 Float_t fWrapThickness; // cm.
123 Float_t fAirThickness; // cm.
124 Float_t fPIN_SideSize; // cm.
125 Float_t fPIN_Length; // cm.
127 Float_t fRadius; // cm. Distance to PHOS
130 Int_t fNz; // Cells amount in beam direction
131 Int_t fNphi; // Cells amount around beam
133 Float_t fPhi; // degree. Position of CRADLE center
135 TObjArray fGammasReconstructed; // List of reconstructed gammas
136 TObjArray fParticles; // List of particles in the direction of this cradle
138 TRandom r; //! Random number class, do not stream
140 // friend class AliPHOS;
142 ClassDef(AliPHOSCradle,1) // PHOS cradle
145 class AliPHOS : public AliDetector {
149 enum {CradlesBranch_Bit=1};
152 AliPHOS(const char *name, const char *title);
154 virtual void AddHit(Int_t, Int_t*, Float_t*);
155 virtual void BuildGeometry();
156 virtual void CreateGeometry() {}
157 virtual void CreateMaterials();
158 Int_t DistancetoPrimitive(Int_t px, Int_t py);
159 void FinishEvent(void);
162 virtual Int_t IsVersion() const =0;
163 void MakeBranch(Option_t *option);
164 void SetTreeAddress(void);
165 void FinishRun(void);
166 void ResetDigits(void);
167 void Print(Option_t *opt="");
168 AliPHOSCradle *GetCradleOfTheParticle(const TVector3 &p,const TVector3 &v) const;
169 AliPHOSCradle &GetCradle(int n) {return *(AliPHOSCradle*)fCradles->operator[](n);}
170 // AliPHOSCradle &GetCradle(int n) {return *((AliPHOSCradle*) (*fCradles)[n]) ;}
171 void Reconstruction(Float_t signal_step, UInt_t min_signal_reject);
172 virtual void SetFlags(Float_t p1,Float_t p2=0,Float_t p3=0,Float_t p4=0,
173 Float_t p5=0,Float_t p6=0,Float_t p7=0,Float_t p8=0,Float_t p9=0);
174 virtual void SetCell(Float_t p1,Float_t p2=0,Float_t p3=0,Float_t p4=0,
175 Float_t p5=0,Float_t p6=0,Float_t p7=0,Float_t p8=0,Float_t p9=0);
176 virtual void SetRadius(Float_t radius);
177 virtual void SetCradleSize(Int_t nz, Int_t nphi, Int_t ncradles);
178 virtual void SetCradleA(Float_t angle);
179 virtual void SetExtra(Float_t p1,Float_t p2=0,Float_t p3=0,Float_t p4=0,
180 Float_t p5=0,Float_t p6=0,Float_t p7=0,Float_t p8=0,Float_t p9=0);
181 virtual void SetTextolitWall(Float_t dx, Float_t dy, Float_t dz);
182 virtual void SetInnerAir(Float_t dx, Float_t dy, Float_t dz);
183 virtual void SetFoam(Float_t dx, Float_t dy, Float_t dz, Float_t dr);
184 virtual void StepManager()=0;
185 virtual void DefPars();
186 virtual void AddPHOSCradles();
189 virtual Int_t GetPHOS_IDTMED_PbWO4 (void){return (*fIdtmed)[0];}
190 virtual Int_t GetPHOS_IDTMED_Al (void){return (*fIdtmed)[2];}
191 virtual Int_t GetPHOS_IDTMED_Tyvek (void){return (*fIdtmed)[3];}
192 virtual Int_t GetPHOS_IDTMED_PIN (void){return (*fIdtmed)[4];}
193 virtual Int_t GetPHOS_IDTMED_AIR (void){return (*fIdtmed)[99];}
195 virtual Int_t &GetPHOS_Ndiv_magic (void) {return PHOS_Ndiv_magic;}
196 virtual Float_t GetCrystalSideSize (void) const {return PHOScell[0]; }
197 virtual Float_t GetCrystalLength (void) const {return PHOScell[1]; }
198 virtual Float_t GetWrapThickness (void) const {return PHOScell[2]; }
199 virtual Float_t GetAirThickness (void) const {return PHOScell[3]; }
200 virtual Float_t GetPIN_SideSize (void) const {return PHOScell[4]; }
201 virtual Float_t GetPIN_Length (void) const {return PHOScell[5]; }
202 virtual Float_t GetRadius (void) const {return PHOSradius; }
203 virtual Int_t GetNz (void) const {return PHOSsize[0]; }
204 virtual Int_t GetNphi (void) const {return PHOSsize[1]; }
205 virtual Int_t GetCradlesAmount (void) const {return PHOSsize[2]; }
206 virtual Float_t GetAngleBetweenCradles(void) const {return PHOScradlesA;}
207 virtual Float_t GetPHOS_flag (Int_t n) const {return PHOSflags[n];}
208 virtual Float_t GetPHOSextra (Int_t n) const {return PHOSextra[n];}
209 virtual Float_t GetPHOSFoam (Int_t n) const {return PHOSFTI[n];}
210 virtual Float_t GetPHOStxwall (Int_t n) const {return PHOSTXW[n];}
211 virtual Float_t GetPHOSAir (Int_t n) const {return PHOSAIR[n];}
212 virtual Float_t &GetCradleAngle (Int_t n) {return PHOSangle[n];}
215 TObjArray *fCradles; //! Cradles in PHOS
218 TTree *fTreePHOS; //! Pointer to PHOS tree.
222 TString fBranchNameOfCradles; //
223 TString fTreeName; // Name of PHOS tree: "PHOS"
227 Float_t PHOSflags[9], PHOScell[9], PHOSradius;
229 Float_t PHOScradlesA,PHOSTXW[3],PHOSAIR[3],PHOSFTI[4],PHOSextra[9],
231 Int_t PHOS_Ndiv_magic;
233 ClassDef(AliPHOS,1) //Hits manager for set:PHOS