-#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 "AliHit.h"
-#include "AliRICHConst.h"
-#include "AliDigit.h"
-#include <TVector.h>
-#include <TObjArray.h>
-#include <TFile.h>
-#include <TTree.h>
-#include <TRotMatrix.h>
-
-static const int NCH=7;
-typedef enum {mip, cerenkov} Response_t;
-class AliRICHcluster;
-class AliRICHchamber;
-class AliRICHRecCluster;
+#include <TObjArray.h>
+#include <AliDetector.h>
+#include <AliRICHConst.h>
+#include <AliRICHChamber.h>
+static const int kNCH=7;
+
+class TFile;
+
+class AliRICHHit;
+class AliRICHSDigit;
+class AliRICHRawCluster;
+class AliRICHRecHit1D;
+class AliRICHRecHit3D;
+class AliRICHClusterFinder;
+class AliRICHDetect;
+class AliRICHChamber;
class AliRICHCerenkov;
+class AliSegmentation;
+class AliRICHResponse;
+class AliRICHGeometry;
+class AliRICHMerger;
-//----------------------------------------------
-//----------------------------------------------
-//
-// Chamber segmentation virtual base class
-//
-class AliRICHsegmentation :
-public TObject {
-
- public:
-
- // Set Chamber Segmentation Parameters
- virtual void SetPADSIZ(Float_t p1, Float_t p2) =0;
- virtual void SetDAnod(Float_t D) =0;
- // Transform from pad (wire) to real coordinates and vice versa
- virtual Float_t GetAnod(Float_t xhit) =0;
- virtual void GetPadIxy(Float_t x ,Float_t y ,Int_t &ix,Int_t &iy)=0;
- virtual void GetPadCxy(Int_t ix,Int_t iy,Float_t &x ,Float_t &y )=0;
- //
- // Initialisation
- virtual void Init(AliRICHchamber*) =0;
- //
- // Get member data
- virtual Float_t Dpx() =0;
- virtual Float_t Dpy() =0;
- virtual Int_t Npx() =0;
- virtual Int_t Npy() =0;
- //
- // Iterate over pads
- virtual void FirstPad(Float_t xhit, Float_t yhit, Float_t dx, Float_t dy) =0;
- virtual void NextPad()=0;
- virtual Int_t MorePads() =0;
- // Get next neighbours
- virtual void Neighbours
- (Int_t iX, Int_t iY, Int_t* Nlist, Int_t Xlist[10], Int_t Ylist[10]) =0;
- // Provisory RecCluster coordinates reconstructor
- virtual void FitXY(AliRICHRecCluster* Cluster,TClonesArray* RICHdigits) =0;
- //
- // Current pad cursor during disintegration
- virtual Int_t Ix() =0;
- virtual Int_t Iy() =0;
- virtual Int_t ISector() =0;
- //
- // Signal Generation Condition during Stepping
- virtual Int_t SigGenCond(Float_t x, Float_t y, Float_t z) = 0;
- virtual void SigGenInit(Float_t x, Float_t y, Float_t z) = 0;
- virtual void IntegrationLimits
- (Float_t& x1, Float_t& x2, Float_t& y1, Float_t& y2) = 0;
- //
- // Identification
- virtual char* YourName() =0;
- ClassDef(AliRICHsegmentation,1)
- };
-//----------------------------------------------
-//
-// Chamber response virtual base class
-//
-class AliRICHresponse :
-public TObject {
- public:
- //
- // Configuration methods
- virtual void SetRSIGM(Float_t p1) =0;
- virtual void SetMUCHSP(Float_t p1) =0;
- virtual void SetMUSIGM(Float_t p1, Float_t p2) =0;
- virtual void SetMAXADC(Float_t p1) =0;
- //
- // Get member data
- virtual Float_t Chslope() =0;
- virtual Float_t ChwX() =0;
- virtual Float_t ChwY() =0;
- virtual Float_t Nsigma() =0;
- virtual Float_t adc_satm() =0;
- //
- // Chamber response methods
- // Pulse height from scored quantity (eloss)
- virtual Float_t IntPH(Float_t eloss) =0;
- virtual Float_t IntPH() =0;
- virtual Int_t FeedBackPhotons(Float_t *source, Float_t qtot) =0;
- // Charge disintegration
- virtual Float_t IntXY(AliRICHsegmentation *) =0;
- //
- // Identification
- virtual char* YourName() =0;
- // Mathieson parameters
- virtual void SetSqrtKx3(Float_t p1) =0;
- virtual void SetKx2(Float_t p1) =0;
- virtual void SetKx4(Float_t p1) =0;
- virtual void SetSqrtKy3(Float_t p1) =0;
- virtual void SetKy2(Float_t p1) =0;
- virtual void SetKy4(Float_t p1) =0;
- virtual void SetPitch(Float_t p1) =0;
- ClassDef(AliRICHresponse,1)
- };
-
-//----------------------------------------------
-class AliRICHchamber :
-public TObject
+class AliRICH : public AliDetector
{
-
- public:
-
-//Rotation matrices for each chamber
-
- TRotMatrix *fChamberMatrix;
- Float_t fChamberTrans[3];
-
- public:
- AliRICHchamber();
- ~AliRICHchamber(){}
-//
-// Set and get GEANT id
- Int_t GetGid() {return fGid;}
- void SetGid(Int_t id) {fGid=id;}
-//
-// Initialisation and z-Position
- void Init();
- void SetZPOS(Float_t p1) {fzPos=p1;}
- Float_t ZPosition() {return fzPos;}
-//
-
-// Set inner radius of sensitive volume
- void SetRInner(Float_t rmin) {frMin=rmin;}
-// Set outer radius of sensitive volum
- void SetROuter(Float_t rmax) {frMax=rmax;}
-
-// Return inner radius of sensitive volume
- Float_t RInner() {return frMin;}
-// Return outer radius of sensitive volum
- Float_t ROuter() {return frMax;}
-
-//Transformation from Global to local coordinates, chamber-dependant
- void LocaltoGlobal(Float_t pos[3],Float_t Localpos[3]);
-
-//Setting chamber specific rotation matrices
-
- void SetChamberTransform(Float_t Trans1,Float_t Trans2,Float_t Trans3,TRotMatrix *Matrix)
-
- {
- fChamberMatrix=Matrix;
- fChamberTrans[0]=Trans1;
- fChamberTrans[1]=Trans2;
- fChamberTrans[2]=Trans3;
- }
-
-// Configure response model
- void ResponseModel(Response_t res, AliRICHresponse* thisResponse);
-
- //
-// Configure segmentation model
- void SegmentationModel(Int_t i, AliRICHsegmentation* thisSegmentation) {
- (*fSegmentation)[i-1] = thisSegmentation;
- }
-//
-// Get reference to response model
- AliRICHresponse* GetResponseModel(Response_t res);
-//
-// Get reference to segmentation model
- AliRICHsegmentation* GetSegmentationModel(Int_t isec) {
- return (AliRICHsegmentation *) (*fSegmentation)[isec-1];
- }
- Int_t Nsec() {return fnsec;}
- void SetNsec(Int_t nsec) {fnsec=nsec;}
-//
-// Member function forwarding to the segmentation and response models
-//
-// Calculate pulse height from energy loss
- Float_t IntPH(Float_t eloss) {return ((AliRICHresponse*) (*fResponse)[0])->IntPH(eloss);}
- Float_t IntPH() {return ((AliRICHresponse*) (*fResponse)[1])->IntPH(); }
-//
-// Ask segmentation if signal should be generated
- Int_t SigGenCond(Float_t x, Float_t y, Float_t z)
- {
- if (fnsec==1) {
- return ((AliRICHsegmentation*) (*fSegmentation)[0])
- ->SigGenCond(x, y, z) ;
- } else {
- return (((AliRICHsegmentation*) (*fSegmentation)[0])
- ->SigGenCond(x, y, z)) ||
- (((AliRICHsegmentation*) (*fSegmentation)[1])
- ->SigGenCond(x, y, z)) ;
- }
- }
-//
-// Initialisation of segmentation for hit
- void SigGenInit(Float_t x, Float_t y, Float_t z)
- {
-
- if (fnsec==1) {
- ((AliRICHsegmentation*) (*fSegmentation)[0])->SigGenInit(x, y, z) ;
- } else {
- ((AliRICHsegmentation*) (*fSegmentation)[0])->SigGenInit(x, y, z) ;
- ((AliRICHsegmentation*) (*fSegmentation)[1])->SigGenInit(x, y, z) ;
- }
- }
-
-// Configuration forwarding
-//
- void SetRSIGM(Float_t p)
- {
- ((AliRICHresponse*) (*fResponse)[0])->SetRSIGM(p);
- ((AliRICHresponse*) (*fResponse)[1])->SetRSIGM(p);
- }
- void SetMUCHSP(Float_t p)
- {
- ((AliRICHresponse*) (*fResponse)[0])->SetMUCHSP(p);
- ((AliRICHresponse*) (*fResponse)[1])->SetMUCHSP(p);
- }
- void SetMUSIGM(Float_t p1, Float_t p2)
- {
- ((AliRICHresponse*) (*fResponse)[0])->SetMUSIGM(p1,p2);
- ((AliRICHresponse*) (*fResponse)[1])->SetMUSIGM(p1,p2);
- }
- void SetMAXADC(Float_t p)
- {
- ((AliRICHresponse*) (*fResponse)[0])->SetMAXADC(p);
- ((AliRICHresponse*) (*fResponse)[1])->SetMAXADC(p);
- }
- void SetSqrtKx3(Float_t p)
- {
- ((AliRICHresponse*) (*fResponse)[0])->SetSqrtKx3(p);
- ((AliRICHresponse*) (*fResponse)[1])->SetSqrtKx3(p);
- }
- void SetKx2(Float_t p)
- {
- ((AliRICHresponse*) (*fResponse)[0])->SetKx2(p);
- ((AliRICHresponse*) (*fResponse)[1])->SetKx2(p);
- }
- void SetKx4(Float_t p)
- {
- ((AliRICHresponse*) (*fResponse)[0])->SetKx4(p);
- ((AliRICHresponse*) (*fResponse)[1])->SetKx4(p);
- }
- void SetSqrtKy3(Float_t p)
- {
- ((AliRICHresponse*) (*fResponse)[0])->SetSqrtKy3(p);
- ((AliRICHresponse*) (*fResponse)[1])->SetSqrtKy3(p);
- }
- void SetKy2(Float_t p)
- {
- ((AliRICHresponse*) (*fResponse)[0])->SetKy2(p);
- ((AliRICHresponse*) (*fResponse)[1])->SetKy2(p);
- }
- void SetKy4(Float_t p)
- {
- ((AliRICHresponse*) (*fResponse)[0])->SetKy4(p);
- ((AliRICHresponse*) (*fResponse)[1])->SetKy4(p);
- }
-
- void SetPitch(Float_t p)
- {
- ((AliRICHresponse*) (*fResponse)[0])->SetPitch(p);
- ((AliRICHresponse*) (*fResponse)[1])->SetPitch(p);
- }
-
- void SetPADSIZ(Int_t isec, Float_t p1, Float_t p2) {
- ((AliRICHsegmentation*) (*fSegmentation)[isec-1])->SetPADSIZ(p1,p2);
- }
-//
-// Cluster formation method
- void DisIntegration(Float_t, Float_t, Float_t, Int_t&x, Float_t newclust[6][500], Response_t res);
- ClassDef(AliRICHchamber,1)
-
- private:
-
-// Maximum and Minimum Chamber size
- Float_t frMin;
- Float_t frMax;
-// GEANT volume if for sensitive volume of this chamber
- Int_t fGid;
-// z-position of this chamber
- Float_t fzPos;
-// The segmentation models for the cathode planes
-// fnsec=1: one plane segmented, fnsec=2: both planes are segmented.
- Int_t fnsec;
- TObjArray *fSegmentation;
- TObjArray *fResponse;
-
-};
-
-
-
-class AliRICHcluster : public TObject {
-public:
-
- Int_t fHitNumber; // Hit number
- Int_t fCathode; // Cathode number
- Int_t fQ ; // Total charge
- Int_t fPadX ; // Pad number along X
- Int_t fPadY ; // Pad number along Y
- Int_t fQpad ; // Charge per pad
- Int_t fRSec ; // R -sector of pad
-
-public:
- AliRICHcluster() {
- fHitNumber=fQ=fPadX=fPadY=fQpad=fRSec=0;
- }
- AliRICHcluster(Int_t *clhits);
- virtual ~AliRICHcluster() {;}
-
- ClassDef(AliRICHcluster,1) //Cluster object for set:RICH
- };
-
-
- class AliRICHreccluster : public TObject {
+
+enum EDebugBits {kDebugStart=BIT(0),kDebugParam=BIT(1),kDebugHit=BIT(2),kDebugDigit=BIT(3),kDebugReco=BIT(4)}; // Debug flags
+
public:
-
- Int_t fTracks[3]; //labels of overlapped tracks
-
- Int_t fQ ; // Q of cluster (in ADC counts)
- Float_t fX ; // X of cluster
- Float_t fY ; // Y of cluster
-
- public:
- AliRICHreccluster() {
- fTracks[0]=fTracks[1]=fTracks[2]=0;
- fQ=0; fX=fY=0;
- }
- virtual ~AliRICHreccluster() {;}
-
- ClassDef(AliRICHreccluster,1) //Cluster object for set:RICH
- };
-
-//_____________________________________________________________________________
-
-class AliRICHdigit : public TObject {
- public:
- Int_t fPadX; // Pad number along x
- Int_t fPadY ; // Pad number along y
- Int_t fSignal; // Signal amplitude
-
-
- Int_t fTcharges[10]; // charge per track making this digit (up to 10)
- Int_t fTracks[10]; // tracks making this digit (up to 10)
-
-
-
- public:
- AliRICHdigit() {}
- AliRICHdigit(Int_t *digits);
- AliRICHdigit(Int_t *tracks, Int_t *charges, Int_t *digits);
- virtual ~AliRICHdigit() {}
-
-
- ClassDef(AliRICHdigit,1) //Digits for set:RICH
- };
-//_____________________________________________________________________________
-
-class AliRICHlist : public AliRICHdigit {
- public:
-
- Int_t fRpad; // r_pos of pad
- Int_t fChamber; // chamber number of pad
- TObjArray *fTrackList;
-
-
- public:
- AliRICHlist() {fTrackList=0;}
- AliRICHlist(Int_t ich, Int_t *digits);
- virtual ~AliRICHlist() {}
-
- TObjArray *TrackList() {return fTrackList;}
-
- ClassDef(AliRICHlist,1) //Digits for set:RICH
- };
-//___________________________________________
-
-
-//___________________________________________
-
-class AliRICHhit : public AliHit {
- public:
- Int_t fChamber; // Chamber number
- Float_t fParticle; // Geant3 particle type
- Float_t fTheta ; // Incident theta angle in degrees
- Float_t fPhi ; // Incident phi angle in degrees
- Float_t fTlength; // Track length inside the chamber
- Float_t fEloss; // ionisation energy loss in gas
- Int_t fPHfirst; // first padhit
- Int_t fPHlast; // last padhit
- public:
- AliRICHhit() {}
- AliRICHhit(Int_t fIshunt, Int_t track, Int_t *vol, Float_t *hits);
- virtual ~AliRICHhit() {}
-
- ClassDef(AliRICHhit,1) //Hits object for set:RICH
- };
-
-//------------------------------------------------
-// Cerenkov photon object
-//------------------------------------------------
-
-class AliRICHCerenkov: public AliHit {
- public:
- Int_t fChamber; // Chamber number
- Float_t fTheta ; // Incident theta angle in degrees
- Float_t fPhi ; // Incident phi angle in degrees
- Float_t fTlength; // Track length inside the chamber
- Int_t fPHfirst; // first padhit
- Int_t fPHlast; // last padhit
- public:
- AliRICHCerenkov() {}
- AliRICHCerenkov(Int_t fIshunt, Int_t track, Int_t *vol, Float_t *Cerenkovs);
- virtual ~AliRICHCerenkov() {}
-
- ClassDef(AliRICHCerenkov,1) //Cerenkovs object for set:RICH
- };
-
-//--------------------------------------------------
-
-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 AddCluster(Int_t*);
- virtual void AddDigits(Int_t, Int_t*, Int_t*, Int_t*);
- virtual void AddRecCluster(Int_t iCh, Int_t iCat,
- AliRICHRecCluster* Cluster);
- 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 *Clusters() {return fClusters;}
- TClonesArray *Cerenkovs() {return fCerenkovs;}
- virtual void MakeBranch(Option_t *opt=" ");
- void SetTreeAddress();
- virtual void ResetHits();
- virtual void ResetDigits();
- virtual void ResetRecClusters();
- virtual void ReconstructClusters();
- 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
- virtual void SetPADSIZ(Int_t id, Int_t isec, Float_t p1, Float_t p2);
-
-// Set Signal Generation Parameters
- virtual void SetRSIGM(Int_t id, Float_t p1);
- virtual void SetMUCHSP(Int_t id, Float_t p1);
- virtual void SetMUSIGM(Int_t id, Float_t p1, Float_t p2);
- virtual void SetMAXADC(Int_t id, Float_t p1);
-// Set Segmentation and Response Model
- virtual void SetSegmentationModel(Int_t id, Int_t isec, AliRICHsegmentation *segmentation);
- virtual void SetResponseModel(Int_t id, Response_t res, AliRICHresponse *response);
- virtual void SetNsec(Int_t id, Int_t nsec);
-// Set Stepping Parameters
- virtual void SetSMAXAR(Float_t p1);
- virtual void SetSMAXAL(Float_t p1);
- virtual void SetDMAXAR(Float_t p1);
- virtual void SetDMAXAL(Float_t p1);
- virtual void SetRICHACC(Bool_t acc=0, Float_t angmin=2, Float_t angmax=9);
-// 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]);}
+ AliRICH(); // default ctor
+ AliRICH(const char *name, const char *title); // named ctor
+ AliRICH(const AliRICH& RICH); // copy ctor
+ virtual ~AliRICH(); // dtor
+// Pure vituls methods
+ virtual Int_t IsVersion() const =0;
+// The following staff is defined in AliRICHChamber.cxx
+ 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 AddSDigit(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 AddRecHit1D(Int_t id, Float_t* rechit, Float_t* photons, Int_t* padsx, Int_t* padsy);
+ virtual void AddRecHit3D(Int_t id, Float_t* rechit);
+
+ virtual void BuildGeometry(); // TNode ROOT variant for event display
+ virtual void CreateGeometry(); // GEANT volumes tree for simulation
+ virtual void CreateMaterials(); // GEANT materials definition
+ virtual Float_t AbsoCH4(Float_t x);
+ virtual Float_t Fresnel(Float_t ene,Float_t pdoti, Bool_t pola);
+ virtual void StepManager();
+ Int_t DistancetoPrimitive(Int_t px, Int_t py);
+ virtual void MakeBranch(Option_t *opt=" ", const char *file=0);
+ virtual void MakeBranchInTreeD(TTree *treeD, const char *file=0);
+ void SetTreeAddress();
+ virtual void ResetHits();
+ virtual void ResetDigits();
+ virtual void ResetRawClusters();
+ virtual void ResetRecHits1D();
+ virtual void ResetRecHits3D();
+ virtual void FindClusters(Int_t nev,Int_t lastEntry);
+// Converters
+ virtual void Hits2SDigits();
+ virtual Int_t Hits2SDigits(Float_t xhit,Float_t yhit,Float_t eloss,Int_t id, ResponseType res);
+ virtual void SDigits2Digits();
+ virtual void SDigits2Digits(Int_t nev, Int_t flag);
+ virtual void Digits2Reco();
// Retrieve pad hits for a given Hit
- virtual AliRICHcluster* FirstPad(AliRICHhit *, TClonesArray *);
- virtual AliRICHcluster* NextPad(TClonesArray *);
+ virtual AliRICHSDigit* FirstPad(AliRICHHit *hit, TClonesArray *clusters);
+ virtual AliRICHSDigit* NextPad(TClonesArray *clusters);
+// inline methods
+ TClonesArray *SDigits() const{return fSDigits;}
+ TClonesArray *Cerenkovs() const{return fCerenkovs;}
+
+// Models for chambers
+ virtual void SetGeometryModel(Int_t iChamberN, AliRICHGeometry *pRICHGeo) { GetChamber(iChamberN)->SetGeometryModel(pRICHGeo);}
+ AliRICHGeometry* GetGeometryModel(Int_t iChamberN=0) const{return GetChamber(iChamberN)->GetGeometryModel();}
+
+ virtual void SetSegmentationModel(Int_t iChamberN, AliSegmentation *pAliSeg) { GetChamber(iChamberN)->SetSegmentationModel(pAliSeg);}
+ AliSegmentation* GetSegmentationModel(Int_t iChamberN=0) const{return GetChamber(iChamberN)->GetSegmentationModel();}
+
+ virtual void SetResponseModel(Int_t iChamberN, AliRICHResponse *pRICHRes) { GetChamber(iChamberN)->SetResponseModel(pRICHRes);}
+ AliRICHResponse* GetResponseModel(Int_t iChamberN) const{return GetChamber(iChamberN)->GetResponseModel();}
+
+ virtual void SetReconstructionModel(Int_t iChamberN, AliRICHClusterFinder *pRICHReco){GetChamber(iChamberN)->SetReconstructionModel(pRICHReco);}
+// Debug staff
+ void SetDebugLevel(Int_t level) {fDebugLevel=level;}
+ Int_t GetDebugLevel() const{return fDebugLevel;}
+
+ void SetDebugStart() {fDebugLevel+=kDebugStart;} // Controls debug message at the entring point of methods
+ void ResetDebugStart() {fDebugLevel-=kDebugStart;} // Controls debug message at the entring point of methods
+ Bool_t IsDebugStart()const{return fDebugLevel&kDebugStart;} // Controls debug message at the entring point of methods
+
+ void SetDebugParam() {fDebugLevel+=kDebugParam;} // Controls debug printout for the parameters
+ void ResetDebugParam() {fDebugLevel-=kDebugParam;} // Controls debug printout for the parameters
+ Bool_t IsDebugParam()const{return fDebugLevel&kDebugParam;} // Controls debug printout for the parameters
+
+ void SetDebugHit() {fDebugLevel+=kDebugHit;} // Controls debug printout for hits
+ void ResetDebugHit() {fDebugLevel-=kDebugHit;} // Controls debug printout for hits
+ Bool_t IsDebugHit() const{return fDebugLevel&kDebugHit;} // Controls debug printout for hits
+
+ void SetDebugDigit() {fDebugLevel+=kDebugDigit;} // Controls debug printout for digits
+ void ResetDebugDigit() {fDebugLevel-=kDebugDigit;} // Controls debug printout for digits
+ Bool_t IsDebugDigit()const{return fDebugLevel&kDebugDigit;} // Controls debug printout for digits
+
+ void SetDebugReco() {fDebugLevel+=kDebugReco;} // Controls debug printout for reco
+ void ResetDebugReco() {fDebugLevel-=kDebugReco;} // Controls debug printout for reco
+ Bool_t IsDebugReco() const{return fDebugLevel&kDebugReco;} // Controls debug printout for reco
+
+
+ virtual void SetMerger(AliRICHMerger* thisMerger) {fMerger=thisMerger;}
+// Return reference to Chamber #id
+ virtual AliRICHChamber& Chamber(Int_t id) {return *((AliRICHChamber *) (*fChambers)[id]);}
+ AliRICHChamber* GetChamber(Int_t iChamberN) const{return (AliRICHChamber*) (*fChambers)[iChamberN];}
// Return pointers to digits
- TObjArray *Dchambers() {return fDchambers;}
- Int_t *Ndch() {return fNdch;}
+ TObjArray *Dchambers() {return fDchambers;}
+ Int_t *Ndch() {return fNdch;}
virtual TClonesArray *DigitsAddress(Int_t id) {return ((TClonesArray *) (*fDchambers)[id]);}
-// Return pointers to reconstructed clusters
- virtual TObjArray *RecClusters(Int_t iCh, Int_t iCat)
- {return ( (TObjArray*) (*fRecClusters)[iCh+iCat*10]);}
-
-
- protected:
- TObjArray *fChambers; // List of Tracking Chambers
- Int_t fNclusters; // Number of clusters
- Int_t fNcerenkovs; // Number of cerenkovs
- TClonesArray *fClusters; // List of clusters
- TObjArray *fDchambers; // List of digits
- TObjArray *fRecClusters; // List of clusters
- TClonesArray *fCerenkovs; // List of cerenkovs
- Int_t *fNdch; // Number of digits
- Text_t *fFileName; // Filename for event mixing
-
-
- TObjArray *fRawClusters; // List of raw clusters
- Int_t *fNrawch; // Number of raw clusters
- TObjArray *fCathCorrel; // List of correlated clusters
- Int_t *fNcorch; // Number of correl clusters
- TTree *fTreeC; // Cathode correl index tree
-
-//
- Bool_t fAccCut; //Transport acceptance cut
- Float_t fAccMin; //Minimum acceptance cut used during transport
- Float_t fAccMax; //Minimum acceptance cut used during transport
-//
+// Return pointers to rec. hits
+ TObjArray *RecHits1D() const{return fRecHits1D;}
+ Int_t *Nrechits1D() {return fNrechits1D;} // returns array
+ Int_t *Nrechits3D() {return fNrechits3D;} // returns array
+ virtual TClonesArray *RecHitsAddress1D(Int_t id) const{return ((TClonesArray *) (*fRecHits1D)[id]);}
+ TObjArray *RecHits3D() const{return fRecHits3D;}
+ virtual TClonesArray *RecHitsAddress3D(Int_t id) const{return ((TClonesArray *) (*fRecHits3D)[id]);}
+ virtual TClonesArray *RawClustAddress(Int_t id) const{return ((TClonesArray *) (*fRawClusters)[id]);}
+// Assignment operator
+ AliRICH& operator=(const AliRICH& rhs);
+
+ virtual void DiagnosticsFE(Int_t evNumber1=0,Int_t evNumber2=0); // Full events
+ virtual void DiagnosticsSE(Int_t diaglevel,Int_t evNumber1=0,Int_t evNumber2=0); // Single events
+
+ inline virtual void Print(Option_t *option)const; // Prints debug information
+
+protected:
+ TObjArray *fChambers; // List of RICH chambers aka modules
+ Int_t fNSDigits; // Number of clusters
+ Int_t fNcerenkovs; // Number of cerenkovs
+ TClonesArray *fSDigits; // List of clusters
+ TObjArray *fDchambers; // List of digits
+ TClonesArray *fCerenkovs; // List of cerenkovs
+ Int_t fNdch[kNCH]; // Number of digits
+ TObjArray *fRawClusters; // List of raw clusters
+ TObjArray *fRecHits1D; // List of rec. hits
+ TObjArray *fRecHits3D; // List of rec. hits
+ Int_t fNrawch[kNCH]; // Number of raw clusters
+ Int_t fNrechits1D[kNCH]; // Number of rec hits
+ Int_t fNrechits3D[kNCH]; // Number of rec hits
+ Int_t fDebugLevel; // Source debugging level
+
+ Int_t fCkovNumber; // Number of Cerenkov photons
+ Int_t fCkovQuarz; // Cerenkovs crossing quartz
+ Int_t fCkovGap; // Cerenkovs crossing gap
+ Int_t fCkovCsi; // Cerenkovs crossing csi
+ Int_t fLostRfreo; // Cerenkovs reflected in freon
+ Int_t fLostRquar; // Cerenkovs reflected in quartz
+ Int_t fLostAfreo; // Cerenkovs absorbed in freon
+ Int_t fLostAquarz; // Cerenkovs absorbed in quartz
+ Int_t fLostAmeta; // Cerenkovs absorbed in methane
+ Int_t fLostCsi; // Cerenkovs below csi quantum efficiency
+ Int_t fLostWires; // Cerenkovs lost in wires
+ Int_t fFreonProd; // Cerenkovs produced in freon
+ Float_t fMipx; // x coord. of MIP
+ Float_t fMipy; // y coord. of MIP
+ Int_t fFeedbacks; // Number of feedback photons
+ Int_t fLostFresnel; // Cerenkovs lost by Fresnel reflection
+
+
+// Background event for event mixing
+ Text_t *fFileName; //! File with background hits
+ AliRICHMerger *fMerger; //! pointer to merger
+
+ ClassDef(AliRICH,1) // Main RICH class
+};//class AliRICH
+
+inline void AliRICH::Print(Option_t *option)const
+{
+ TObject::Print(option);
+ if(IsDebugParam()){
+ GetGeometryModel(0)->Print(option);
+ GetSegmentationModel(0)->Print(option);
+ GetResponseModel(0)->Print(option);
+ }
+}//inline void AliRICH::Print(Option_t *option)const
-// Stepping Parameters
- Float_t fMaxStepGas; // Maximum step size inside the chamber gas
- Float_t fMaxStepAlu; // Maximum step size inside the chamber aluminum
- Float_t fMaxDestepGas; // Maximum relative energy loss in gas
- Float_t fMaxDestepAlu; // Maximum relative energy loss in aluminum
-
- protected:
-
- ClassDef(AliRICH,1) //Hits manager for set:RICH
- };
-//___________________________________________
-class AliRICHRecCluster : public TObject {
- public:
- AliRICHRecCluster() ;
- AliRICHRecCluster(Int_t FirstDigit,Int_t Ichamber, Int_t Icathod) ;
- virtual ~AliRICHRecCluster();
- virtual void AddDigit(Int_t Digit);
- virtual Int_t FirstDigitIndex();
- virtual Int_t NextDigitIndex();
- virtual Int_t InvalidDigitIndex() {return -1;}
-
- virtual Int_t NDigits();
- virtual void Finish(); // Nothing yet ...
- virtual Int_t GetCathod() {return fCathod;}
- virtual Int_t GetChamber() {return fChamber;}
-
- public:
- Float_t fX; // reconstructed x
- Float_t fY; // reconstructed y
-
- protected:
- TArrayI *fDigits; // List of digits indexes for that cluster
- Int_t fNdigit; // Number of digits indexes stored;
- Int_t fCathod; // Number of the cathod to be used;
- Int_t fChamber; // Number of the chamber to be used;
- Int_t fCurrentDigit; // Current Digit inside an iteration
-
- ClassDef(AliRICHRecCluster,1) //Cluster object for set:RICH
- };
-//___________________________________________
#endif
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-