X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=RICH%2FAliRICH.h;h=bc16d129903a5655fce4bc724430b050b2a1a6fe;hb=56030c8dabaa7eed46582104b6fa9fb0913fb94f;hp=fad79250c7c45b714aa4a64143b99c78c867724b;hpb=2e5f0f7b94d1030590ca3a902015a81e73c36f9b;p=u%2Fmrichter%2FAliRoot.git diff --git a/RICH/AliRICH.h b/RICH/AliRICH.h index fad79250c7c..bc16d129903 100644 --- a/RICH/AliRICH.h +++ b/RICH/AliRICH.h @@ -1,135 +1,168 @@ -#ifndef RICH_H -#define RICH_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 "AliRICHSegRes.h" -#include "DataStructures.h" -#include "AliRICHChamber.h" -#include "AliRICHSegRes.h" -#include -#include +#include +#include #include -#include -#include -#include - -static const int NCH=7; - - - -class AliRICHPadHit; -class AliRICHRawCluster; -class AliRICHRecHit; -class AliRICHClusterFinder; -class AliRICHDetect; -class AliRICHChamber; -class AliRICHCerenkov; -class AliRICHSegmentation; -class AliRICHResponse; -class AliRICHEllipse; - -class AliRICH : public AliDetector { - public: - AliRICH(); - AliRICH(const char *name, const char *title); - virtual ~AliRICH(); - virtual void AddHit(Int_t, Int_t*, Float_t*); - virtual void AddCerenkov(Int_t, Int_t*, Float_t*); - virtual void AddPadHit(Int_t*); - virtual void AddDigits(Int_t, Int_t*, Int_t*, Int_t*); - virtual void AddRawCluster(Int_t, const AliRICHRawCluster&); - virtual void AddRecHit(Int_t, Float_t*); - - - 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,Int_t); - virtual void Digitise(Int_t,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 void MakePadHits(Float_t xhit,Float_t yhit,Float_t eloss,Int_t id,Response_t 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 *, TClonesArray *); - virtual AliRICHPadHit* NextPad(TClonesArray *); -// 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]);} - - - 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 +#include + +#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;iAt(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;iAt(i)->Clear();fNclus[i]=0;}} + void ClustersPrint (Int_t iEvent=0 )const; //prints a list of clusters for a given event + + 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;iAddAt(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;iAddAt(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