]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - RICH/AliRICH.h
Add tools in RichMenu
[u/mrichter/AliRoot.git] / RICH / AliRICH.h
index 2d8d2e9e5f730c604d8a15f620395c705306af4a..2789b1f512345b99afa507565e29202db0a5e57f 100644 (file)
-#ifndef ALIRICH_H
-#define ALIRICH_H
-
+#ifndef AliRICH_h
+#define AliRICH_h
 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
  * See cxx source for full Copyright notice                               */
 
-/* $Id$ */
-
-
-////////////////////////////////////////////////
-//  Manager and hits classes for set:RICH     //
-////////////////////////////////////////////////
-#include "AliDetector.h"
-#include "AliRICHConst.h"
-#include "AliRICHChamber.h"
-static const int kNCH=7;
-
-
-class AliRICHHit;
-class AliRICHPadHit;
-class AliRICHRawCluster;
-class AliRICHRecHit;
-class AliRICHClusterFinder;
-class AliRICHDetect;
-class AliRICHChamber;
-class AliRICHCerenkov;
-class AliRICHSegmentation;
-class AliRICHResponse;
-class AliRICHEllipse;
-class AliRICHGeometry;
-
-class AliRICH : public  AliDetector {
- public:
-    AliRICH();
-    AliRICH(const char *name, const char *title);
-    AliRICH(const AliRICH& RICH);
-    virtual       ~AliRICH();
-    virtual void   AddHit(Int_t track, Int_t *vol, Float_t *hits);
-    virtual void   AddCerenkov(Int_t track, Int_t *vol, Float_t *cerenkovs);
-    virtual void   AddPadHit(Int_t *clhits);
-    virtual void   AddDigits(Int_t id, Int_t *tracks, Int_t *charges, Int_t *digits);
-    virtual void   AddRawCluster(Int_t id, const AliRICHRawCluster& cluster);
-    virtual void   AddRecHit(Int_t id, Float_t* rechit);
-
-
-    virtual void   BuildGeometry();
-    virtual void   CreateGeometry() {}
-    virtual void   CreateMaterials() {}
-    virtual void   StepManager();
-    Int_t          DistancetoPrimitive(Int_t px, Int_t py);
-    virtual Int_t  IsVersion() const =0;
-//
-    TClonesArray  *PadHits() {return fPadHits;}
-    TClonesArray  *Cerenkovs() {return fCerenkovs;}
-    virtual void   MakeBranch(Option_t *opt=" ");
-    void           SetTreeAddress();
-    virtual void   ResetHits();
-    virtual void   ResetDigits();
-    virtual void   ResetRawClusters();
-    virtual void   ResetRecHits();
-    virtual void   FindClusters(Int_t nev,Int_t lastEntry);
-    virtual void   Digitise(Int_t nev,Int_t flag,Option_t *opt=" ",Text_t *name=" ");
-// 
-// Configuration Methods (per station id)
-//
-// Set Chamber Segmentation Parameters
-// id refers to the station and isec to the cathode plane   
-// Set Segmentation and Response Model
-    virtual void   SetGeometryModel(Int_t id, AliRICHGeometry *geometry);
-    virtual void   SetSegmentationModel(Int_t id, AliRICHSegmentation *segmentation);
-    virtual void   SetResponseModel(Int_t id, AliRICHResponse *response);
-    virtual void   SetNsec(Int_t id, Int_t nsec);
-// Set Reconstruction Model
-    virtual void   SetReconstructionModel(Int_t id, AliRICHClusterFinder *reconstruction);
-// Response Simulation
-    virtual Int_t   MakePadHits(Float_t xhit,Float_t yhit,Float_t eloss,Int_t id, ResponseType res);
-// Return reference to Chamber #id
-    virtual AliRICHChamber& Chamber(Int_t id) {return *((AliRICHChamber *) (*fChambers)[id]);}
-// Retrieve pad hits for a given Hit
-    virtual AliRICHPadHit* FirstPad(AliRICHHit *hit, TClonesArray *clusters);
-    virtual AliRICHPadHit* NextPad(TClonesArray *clusters);
-// Return pointers to digits 
-    TObjArray            *Dchambers() {return fDchambers;}
-    Int_t                *Ndch() {return fNdch;}
-    virtual TClonesArray *DigitsAddress(Int_t id) {return ((TClonesArray *) (*fDchambers)[id]);}
-// Return pointers to rec. hits
-    TObjArray            *RecHits() {return fRecHits;}
-    Int_t                *Nrechits() {return fNrechits;}
-    virtual TClonesArray *RecHitsAddress(Int_t id) {return ((TClonesArray *) (*fRecHits)[id]);}
-// Return pointers to reconstructed clusters
-    virtual TClonesArray *RawClustAddress(Int_t id) {return ((TClonesArray *) (*fRawClusters)[id]);}    
-// Assignment operator
-    AliRICH& operator=(const AliRICH& rhs);
-    
-    
- protected:
-    TObjArray            *fChambers;           // List of Tracking Chambers
-    Int_t                 fNPadHits;           // Number of clusters
-    Int_t                 fNcerenkovs;         // Number of cerenkovs
-    TClonesArray         *fPadHits;            // List of clusters
-    TObjArray            *fDchambers;          // List of digits
-    TClonesArray         *fCerenkovs;          // List of cerenkovs
-    Int_t                *fNdch;               // Number of digits
-    Text_t               *fFileName;           // Filename for event mixing
-    TObjArray            *fRawClusters;        // List of raw clusters
-    TObjArray            *fRecHits;            // List of rec. hits
-    Int_t                *fNrawch;             // Number of raw clusters
-    Int_t                *fNrechits;           // Number of rec hits 
-
- protected:
-    
-    ClassDef(AliRICH,1)  //Hits manager for set:RICH
-};
-#endif
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+#include <AliDetector.h>
+#include <TClonesArray.h>
+#include <TObjArray.h>
+#include <TVector.h>
+#include <TVector3.h>
+
+#include "AliRICHDigitizer.h"
+#include "AliRICHParam.h"
+#include "AliRICHCluster.h"
+#include "AliRICHHit.h"
+
+//__________________AliRICH_________________________________________________________________________
+class AliESD;
+
+class AliRICH : public AliDetector 
+{
+public:
+//ctor & dtor    
+            AliRICH();                                            
+            AliRICH(const char *name, const char *title);
+            AliRICH(const AliRICH& RICH):AliDetector(RICH) {;}  //copy ctor 
+  virtual  ~AliRICH();                                            
+          
+  AliRICH&  operator=(const AliRICH&)                 {return *this;}
+//framework part  
+  virtual Int_t         IsVersion()                           const =0;                                  //interface from         
+  virtual void          StepManager()                               =0;                                  //interface from AliMC
+  virtual void          Hits2SDigits();                                                                  //interface from AliSimulation
+  virtual void          Digits2Raw();                                                                    //interface from AliSimulation
+  virtual AliDigitizer* CreateDigitizer(AliRunDigitizer* man) const {return new AliRICHDigitizer(man);}  //interface from AliSimulation
+  virtual void          SetTreeAddress();                                                                //interface from AliLoader
+  virtual void          MakeBranch(Option_t *opt=" ");                                                   //interface from AliLoader
+  virtual void          CreateMaterials();                                                               //interface from AliMC
+  virtual void          CreateGeometry();                                                                //interface from AliMC
+  virtual void          BuildGeometry();                                                                 //interface 
+  virtual void          Print(Option_t *option="")               const;       //prints current RICH status
+//private part  
+          void          GeomPadPanelFrame()const;                                                        //defines PPF geometry
+          void          GeomAmpGap()       const;                                                        //defines gap geometry + anod wires
+          void          GeomRadiators()    const;                                                        //defines radiators geometry
+          void          GeomSandBox()      const;                                                        //defines sandbox geometry
+          void          GeomRadioSrc()     const;                                                        //defines radio source geometry
+          void          GeomAerogel()      const;                                                        //defines aerogel geometry
+  static  Float_t Fresnel(Float_t ene,Float_t pdoti, Bool_t pola);       //deals with Fresnel absorption
+  
+         AliRICHHit*   Hit           (Int_t tid                                              )const;                                                 //first hit of given TID 
+  inline void          HitAdd        (Int_t c,Int_t tid,TVector3 in,TVector3 out,Double_t e=0);                                                      //add new hit
+  inline void          HitsCreate    (                                                       );                                                      //create hits container
+         void          HitsPrint     (Int_t iEvent=0                                         )const;                                                 //prints hits
+            
+         TClonesArray* SDigits       (                                                       )const{return fSdigits;}                                //pointer to sdigits list 
+  inline void          SDigitAdd     (Int_t c,TVector pad,Double_t q,Int_t pid,Int_t tid     )     ;                                                 //add new sdigit
+  inline void          SDigitsCreate (                                                       )     ;                                                 //create sdigits container
+         void          SDigitsReset  (                                                       )     {fNsdigits=0;  if(fSdigits)  fSdigits ->Clear();} //clean a list of sdigits                                
+         void          SDigitsPrint  (Int_t iEvent=0                                         )const;                                                 //prints sdigits 
+         
+    using AliDetector::Digits;  
+         TClonesArray* Digits        (Int_t iC                                               )const{return fDigs ? (TClonesArray *)fDigs->At(iC-1):0;}
+  inline void          DigitAdd      (Int_t c,TVector pad,int q,int cfm,int *tid             )     ;                                                 //add new digit
+  inline void          DigitsCreate  (                                                       )     ;                                                 //create digits
+         void          DigitsReset   (                                                       )     {if(fDigs)for(int i=0;i<kNchambers;i++){fDigs->At(i)->Clear();fNdigs[i]=0;}} //virtual
+         void          DigitsPrint   (Int_t iEvent=0                                         )const;                                                 //prints digits
+          
+         TClonesArray* Clusters      (Int_t iC                                               )const{if(fClus)  return (TClonesArray *)fClus->At(iC-1);else return 0;}
+  inline void          ClusterAdd    (AliRICHCluster &cl                                     )     ;                                                  //add new cluster                        
+  inline void          ClustersCreate(                                                       )     ;                                                  //create clusters container
+         void          ClustersReset (                                                       )     {if(fClus)for(int i=0;i<kNchambers;i++){fClus ->At(i)->Clear();fNclus[i]=0;}}
+         void          ClustersPrint (Int_t iEvent=0                                         )const;                        //prints a list of clusters for a given event
+
+         void          OccupancyPrint(Int_t iEvent=0                                         )const;
+         
+  AliRICHChamber* C(Int_t iC)           const{return fParam->C(iC);}   //provides pointer to a given chamber
+  AliRICHParam*   P()                   const{return fParam;}          //provides pointer to a RICH params
+  AliRICH*        R()                        {return this;}             //provides pointer to RICH main object
+  TVector         Counters()            const{return fCounters;}        //provides a set of counters
+  void            ControlPlots();                                       //creates ~/RCP.root with a set of QA plots
+  void            Display()const; //Display event
+  void            DisplayEvent(Int_t,Int_t)const; //Display event
+  static Int_t     Nparticles(Int_t iPid,Int_t iEventN,AliRunLoader *pRunLoader); //counts total number of particle with iPid
+  void            PrintTracks  (Int_t iEvent=0);                        //prints a list of tracks for a given event
+  void            CheckPR      ()const;                                 //utility-> run staff for stack ??????     
+  void            ReadESD(Int_t iEventN, Int_t iChamber)const;
+  void            DrawRing(TVector3 entrance,TVector3 vectorTrack,Double_t thetaCer)const;
+
+protected:  
+  enum                  EMedia {kAir=1,kRoha,kSiO2,kC6F14,kCH4,kCsI,kGridCu,kOpSiO2,kGap,kAl,kGlass,kCu,kW,kSteel,kPerpex,kSr90,kMylar,kGel,kReflector};
+  enum                  ECounters {kStepManager=0,kCerProdTot,kCerProdRad,kCerKillTot,kCerKillRad,kCerKillRef,kEleProdTot};
+  AliRICHParam         *fParam;                    //main RICH parametrization     
+                                                   //fHits and fDigits belong to AliDetector
+  TClonesArray         *fSdigits;                  //! list of sdigits  
+  Int_t                 fNsdigits;                 //! current number of sdigits
+  
+  TObjArray            *fDigs;                     //! each chamber holds it's one lists of digits
+  Int_t                 fNdigs[7];                 //! array of current numbers of digits
+  
+  TObjArray            *fClus;                     //! each chamber holds it's one lists of clusters 
+  Int_t                 fNclus[7];                 //! array of current numbers of raw clusters
+  
+  TVector               fCounters;                 //Particle history counters, explanation in StepManager() 
+  
+  ClassDef(AliRICH,9)                              //Main RICH class 
+};//class AliRICH  
+
+//__________________________________________________________________________________________________
+void AliRICH::HitsCreate()
+{
+  if(fHits) return;
+  AliDebug(1,"creating hits container.");
+  fHits=new TClonesArray("AliRICHHit",10000);   fNhits=0;
+}
+//__________________________________________________________________________________________________
+void AliRICH::HitAdd(Int_t c,Int_t tid,TVector3 i3,TVector3 o3,Double_t eloss)
+{
+//add new RICH hit to the list of hits  
+  TClonesArray &tmp=*fHits;
+  new(tmp[fNhits++])AliRICHHit(c,tid,i3,o3,eloss);
+}//AddHit()
+//__________________________________________________________________________________________________
+void AliRICH::SDigitsCreate()
+{
+  if(fSdigits) return;
+  AliDebug(1,"creating sdigits container.");
+  fSdigits=new TClonesArray("AliRICHDigit",10000); fNsdigits=0;
+}
+//__________________________________________________________________________________________________
+void AliRICH::SDigitAdd(Int_t c,TVector pad,Double_t q,Int_t pid,Int_t tid) 
+{ 
+  Int_t cfm;  
+  switch(pid){
+    case 50000050: cfm=1000000;break;//cerenkov
+    case 50000051: cfm=1000;   break;//feedback
+    default:       cfm=1;      break;//mip
+  }   
+  TClonesArray &tmp=*fSdigits; new(tmp[fNsdigits++])AliRICHDigit(c,pad,q,cfm,tid,-1,-1);
+}
+//__________________________________________________________________________________________________
+void AliRICH::DigitsCreate()
+{
+  if(fDigs) return;
+  AliDebug(1,"creating digits containers.");
+  fDigs = new TObjArray(kNchambers);  
+  for(Int_t i=0;i<kNchambers;i++) {fDigs->AddAt(new TClonesArray("AliRICHDigit",10000), i); fNdigs[i]=0;}
+}
+//__________________________________________________________________________________________________
+void AliRICH::DigitAdd(int c,TVector pad,int q,int cfm,int *tid)
+{
+  TClonesArray &tmp=*((TClonesArray*)fDigs->At(c-1));
+  new(tmp[fNdigs[c-1]++])AliRICHDigit(c,pad,q,cfm,tid[0],tid[1],tid[2]);
+}    
+//__________________________________________________________________________________________________
+void AliRICH::ClustersCreate()
+{
+  if(fClus) return;
+  AliDebug(1,"creating clusters containers.");
+  fClus = new TObjArray(kNchambers);  
+  for(Int_t i=0;i<kNchambers;i++) {fClus->AddAt(new TClonesArray("AliRICHCluster",10000), i); fNclus[i]=0;}
+}
+//__________________________________________________________________________________________________
+void AliRICH::ClusterAdd(AliRICHCluster &cl)                     
+{
+  Int_t c=cl.C()-1;TClonesArray &tmp=*((TClonesArray*)fClus->At(c));
+  new(tmp[fNclus[c]++])AliRICHCluster(cl);
+}
+//__________________________________________________________________________________________________
+#endif//#ifndef AliRICH_h