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