]> git.uio.no Git - u/mrichter/AliRoot.git/blob - RICH/AliRICH.h
-Weffc warnings removed
[u/mrichter/AliRoot.git] / RICH / AliRICH.h
1 #ifndef AliRICH_h
2 #define AliRICH_h
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 #include <AliDetector.h>  //base class
7 #include <TClonesArray.h>  
8 #include <TObjArray.h>
9 #include <TVector.h>
10 #include <TVector3.h>
11
12 #include "AliRICHCluster.h"
13 #include "AliRICHHit.h"
14
15 //__________________AliRICH_________________________________________________________________________
16 class AliESD;
17
18 class AliRICH : public AliDetector //TObject-TNamed-AliModule-AliDetector-AliRICH
19 {
20 public:
21 //ctor & dtor    
22             AliRICH();                                            
23             AliRICH(const char *name, const char *title);
24             AliRICH(const AliRICH& RICH                ):AliDetector(RICH),fSdig(0),fSdigCnt(0),fDig(0),fClu(0),fCounters(0),fNcham(0) {;}  //copy ctor not implemented
25   virtual  ~AliRICH();                                            
26           
27   AliRICH&  operator=(const AliRICH&)                 {return *this;}
28 //framework part  
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()
38 //private part  
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                       );
44             
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 
50          
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
57           
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
62          
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;
69
70 protected:  
71   TClonesArray         *fSdig;                    //! list of sdigits  
72   Int_t                 fSdigCnt;                 //! current number of sdigits
73   
74   TObjArray            *fDig;                     //! each chamber holds it's one list of digits
75   Int_t                 fDigCnt[7];               //! array of current numbers of digits
76   
77   TObjArray            *fClu;                     //! each chamber holds it's one list of clusters 
78   Int_t                 fCluCnt[7];               //! array of current numbers of raw clusters
79   
80   TVector               fCounters;                // Particle history counters, explanation in StepManager() 
81   Int_t                 fNcham;                   // Number of RICH chambers during simulation
82   
83   ClassDef(AliRICH,11)                            //Main RICH class 
84 };//class AliRICH  
85
86 //__________________________________________________________________________________________________
87 void AliRICH::SDigAdd(Int_t c,TVector pad,Double_t q,Int_t pid,Int_t tid) 
88
89   Int_t cfm;  
90   switch(pid){
91     case 50000050: cfm=1000000;break;//cerenkov
92     case 50000051: cfm=1000;   break;//feedback
93     default:       cfm=1;      break;//mip
94   }   
95   new((*fSdig)[fSdigCnt++])AliRICHDigit(c,pad,q,cfm,tid,-1,-1);
96 }
97 //__________________________________________________________________________________________________
98 void AliRICH::DigCreate()
99 {
100   if(fDig) return;
101   fDig = new TObjArray(fNcham);  
102   for(Int_t i=0;i<fNcham;i++) {fDig->AddAt(new TClonesArray("AliRICHDigit"), i); fDigCnt[i]=0;}
103 }
104 //__________________________________________________________________________________________________
105 void AliRICH::DigAdd(AliRICHDigit &dig)
106 {
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);
110 }    
111 //__________________________________________________________________________________________________
112 void AliRICH::DigAdd(int c,TVector pad,int q,int cfm,int *tid)
113 {
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]);
116 }    
117 //__________________________________________________________________________________________________
118 void AliRICH::CluCreate()
119 {
120   if(fClu) return;
121   fClu = new TObjArray(fNcham);  
122   for(Int_t i=0;i<fNcham;i++) {fClu->AddAt(new TClonesArray("AliRICHCluster"), i); fCluCnt[i]=0;}
123 }
124 #endif//#ifndef AliRICH_h