3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * See cxx source for full Copyright notice */
6 #include <AliDetector.h> //base class
7 #include <TClonesArray.h>
12 #include "AliRICHCluster.h"
13 #include "AliRICHHit.h"
15 //__________________AliRICH_________________________________________________________________________
18 class AliRICH : public AliDetector //TObject-TNamed-AliModule-AliDetector-AliRICH
23 AliRICH(const char *name, const char *title);
24 AliRICH(const AliRICH& RICH ):AliDetector(RICH) {;} //copy ctor
27 AliRICH& operator=(const AliRICH&) {return *this;}
29 void BuildGeometry ( ); //from AliModule invoked from AliMC::InitGeometry() to build geometry for event display
30 virtual void CreateMaterials ( )=0; //from AliModule invoked from AliMC::ConstructGeometry() to define detector materials
31 virtual void CreateGeometry ( )=0; //from AliModule invoked from AliMC::ConstructGeometry() to build detector for simulation
32 virtual Int_t IsVersion ( )const=0; //from AliModule not used
33 virtual void Init ( )=0; //from AliModule invoked from AliMC::InitGeometry() after CreateGeometry() to do VolID initialization
34 void MakeBranch (Option_t *opt="" ); //from AliModule invokde from AliRun::Tree2Tree() to make requested RICH branch
35 // virtual void Print (const Option_t *opt)const=0; //from TObject
36 virtual void StepManager ( )=0; //from AliModule invoked from AliMC
37 void SetTreeAddress ( ); //from AliModule invoked from AliRun::GetEvent(), AliLoader::SetTAddrInDet()
39 void HitAdd (Int_t c,Int_t tid,Int_t pid,TVector3 in,TVector3 out,Double_t e=0 ){new((*fHits)[fNhits++])AliRICHHit(c,tid,in,out,e,pid); }
40 void HitAdd (Int_t tid,Double_t e,Int_t pad,Double_t x,Double_t y,Double_t z,Int_t pid){new((*fHits)[fNhits++])AliRICHHit(tid,e,pad,x,y,z,pid); }
41 void HitCreate ( ){if(fHits)return; fHits=new TClonesArray("AliRICHHit"); fNhits=0;}
42 void HitPrint (Int_t iEvent=0 )const;
43 void HitQA (Double_t cut=0,Double_t cutele=0,Double_t cutR=999 );
45 TClonesArray* SDigs ( )const{return fSdig;} //pointer to sdigits list
46 inline void SDigAdd (Int_t c,TVector pad,Double_t q,Int_t pid,Int_t tid ) ; //add new sdigit
47 void SDigCreate ( ) {if(fSdig) return; fSdig=new TClonesArray("AliRICHDigit"); fSdigCnt=0;}
48 void SDigReset ( ) {fSdigCnt=0; if(fSdig) fSdig ->Clear();} //clean a list of sdigits
49 void SDigPrint (Int_t iEvent=0 )const; //prints sdigits
51 TClonesArray* Digs (Int_t iC )const{return fDig ? (TClonesArray *)fDig->At(iC-1):0;}
52 inline void DigAdd (Int_t c,TVector pad,int q,int cfm,int *tid ) ; //add new digit
53 inline void DigAdd (AliRICHDigit &dif ) ; //add new digit
54 inline void DigCreate ( ) ; //create digits
55 void DigReset ( ) {if(fDig)for(int i=0;i<fNcham;i++){fDig->At(i)->Clear();fDigCnt[i]=0;}}
56 void DigPrint (Int_t iEvent=0 )const; //prints digits
58 TClonesArray* Clus (Int_t iC )const{return fClu ? (TClonesArray *)fClu->At(iC-1):0;}
59 inline void CluCreate ( ) ; //create clusters container
60 void CluReset ( ) {if(fClu)for(int i=0;i<fNcham;i++){fClu->At(i)->Clear();fCluCnt[i]=0;}}
61 void CluPrint (Int_t iEvent=0 )const; //prints a list of clusters for a given event
63 void Display ( )const; //Display event
64 void DisplayEvent (Int_t,Int_t )const; //Display event
65 void DrawRing (TVector3 entrance,TVector3 vectorTrack,Double_t thetaCer)const;
66 void OccupancyPrint(Int_t iEvent=-1 )const; //print chambers occupancy
67 void ReadESD (Int_t iEventN, Int_t iChamber )const;
68 void SummaryOfEvent(Int_t iEvent=0 )const;
71 TClonesArray *fSdig; //! list of sdigits
72 Int_t fSdigCnt; //! current number of sdigits
74 TObjArray *fDig; //! each chamber holds it's one list of digits
75 Int_t fDigCnt[7]; //! array of current numbers of digits
77 TObjArray *fClu; //! each chamber holds it's one list of clusters
78 Int_t fCluCnt[7]; //! array of current numbers of raw clusters
80 TVector fCounters; // Particle history counters, explanation in StepManager()
81 Int_t fNcham; // Number of RICH chambers during simulation
83 ClassDef(AliRICH,11) //Main RICH class
86 //__________________________________________________________________________________________________
87 void AliRICH::SDigAdd(Int_t c,TVector pad,Double_t q,Int_t pid,Int_t tid)
91 case 50000050: cfm=1000000;break;//cerenkov
92 case 50000051: cfm=1000; break;//feedback
93 default: cfm=1; break;//mip
95 new((*fSdig)[fSdigCnt++])AliRICHDigit(c,pad,q,cfm,tid,-1,-1);
97 //__________________________________________________________________________________________________
98 void AliRICH::DigCreate()
101 fDig = new TObjArray(fNcham);
102 for(Int_t i=0;i<fNcham;i++) {fDig->AddAt(new TClonesArray("AliRICHDigit"), i); fDigCnt[i]=0;}
104 //__________________________________________________________________________________________________
105 void AliRICH::DigAdd(AliRICHDigit &dig)
107 //special for digit formed from raw
108 TClonesArray &tmp=*((TClonesArray*)fDig->At(dig.C()-1));
109 new(tmp[fDigCnt[dig.C()-1]++])AliRICHDigit(dig);
111 //__________________________________________________________________________________________________
112 void AliRICH::DigAdd(int c,TVector pad,int q,int cfm,int *tid)
114 TClonesArray &tmp=*((TClonesArray*)fDig->At(c-1));
115 new(tmp[fDigCnt[c-1]++])AliRICHDigit(c,pad,q,cfm,tid[0],tid[1],tid[2]);
117 //__________________________________________________________________________________________________
118 void AliRICH::CluCreate()
121 fClu = new TObjArray(fNcham);
122 for(Int_t i=0;i<fNcham;i++) {fClu->AddAt(new TClonesArray("AliRICHCluster"), i); fCluCnt[i]=0;}
124 #endif//#ifndef AliRICH_h