X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=EMCAL%2FAliEMCALRecPoint.h;h=26e61b82cff6b0a00b14b8d7e21f1ac850e3465b;hb=0ab2a4ccab378d96c1a1df19aa400b6b7124d4a8;hp=83187584efffdcb49a3e82587a1e5169fef871ab;hpb=4635df1ffafc78d24d284edc1bb699d56b8161b6;p=u%2Fmrichter%2FAliRoot.git diff --git a/EMCAL/AliEMCALRecPoint.h b/EMCAL/AliEMCALRecPoint.h index 83187584eff..26e61b82cff 100644 --- a/EMCAL/AliEMCALRecPoint.h +++ b/EMCAL/AliEMCALRecPoint.h @@ -1,27 +1,36 @@ #ifndef ALIEMCALRECPOINT_H #define ALIEMCALRECPOINT_H -/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * +/* Copyright(c) 1998-2007, ALICE Experiment at CERN, All rights reserved. * * See cxx source for full Copyright notice */ //_________________________________________________________________________ // Base Class for EMCAL Reconstructed Points -// A recpoint being equivalent to a cluster in encal terminology +// A recpoint being equivalent to a cluster in EMCAL terminology +// +// //*-- Author: Yves Schutz (SUBATECH) //*-- Author: Dmitri Peressounko (RRC KI & SUBATECH) //*-- Author: Heather Gray (LBL): merged AliEMCALRecPoint and AliEMCALTowerRecPoint 02/04 // --- ROOT system --- -class TVector3 ; - +#include +class TGeoManager; +class TGeoPhysicalNode; +class TPad; +class TPaveText; +class TGraph; +class Riostream; // --- Standard library --- // --- AliRoot header files --- -#include "AliRecPoint.h" -#include "AliEMCALDigit.h" - +#include "AliCluster.h" +class AliEMCALDigit; +class AliDigitNew; class AliEMCALGeometry; +class AliEMCALHit; +class AliCaloCalibPedestal; -class AliEMCALRecPoint : public AliRecPoint { +class AliEMCALRecPoint : public AliCluster { public: @@ -29,95 +38,152 @@ class AliEMCALRecPoint : public AliRecPoint { AliEMCALRecPoint() ; // ctor AliEMCALRecPoint(const char * opt) ; // ctor - AliEMCALRecPoint(const AliEMCALRecPoint & rp):AliRecPoint(rp) { Fatal("cpy ctor", "not implemented") ; } - + AliEMCALRecPoint(const AliEMCALRecPoint & rp); + + AliEMCALRecPoint& operator= (const AliEMCALRecPoint &rp); + virtual ~AliEMCALRecPoint(); - virtual void AddDigit(AliDigitNew &){ Fatal("AddDigit", "use AddDigit(AliEMCALDigit & digit, Float_t Energy )") ; } - virtual void AddDigit(AliEMCALDigit & digit, Float_t Energy); - virtual Int_t Compare(const TObject * obj) const; - virtual Int_t DistancetoPrimitive(Int_t px, Int_t py); + + virtual void AddDigit(AliDigitNew &) const { + Fatal("AddDigit", "use AddDigit(AliEMCALDigit & digit, Float_t Energy )") ; + } + virtual void AddDigit(AliEMCALDigit & digit, Float_t Energy, Bool_t shared); + virtual Int_t Compare(const TObject * obj) const; + //virtual Int_t DistancetoPrimitive(Int_t px, Int_t py);//Not used, remove? virtual void Draw(Option_t * option="") ; - virtual void ExecuteEvent(Int_t event, Int_t, Int_t) ; + //virtual void ExecuteEvent(Int_t event, Int_t, Int_t) ;//Not used, remove? virtual void SetClusterType(Int_t ver) { fClusterType = ver; } virtual Int_t GetClusterType() const { return fClusterType; } - virtual void EvalAll(Float_t logWeight, TClonesArray * digits); - virtual void EvalLocalPosition(Float_t logWeight, TClonesArray * digits) ; - // void EvalLocalPositionSimple(TClonesArray *digits); // ?? + virtual void EvalAll(Float_t logWeight, TClonesArray * digits, const Bool_t justClusters); + virtual void EvalLocalPosition (Float_t logWeight, TClonesArray * digits); + virtual void EvalGlobalPosition(Float_t logWeight, TClonesArray * digits); + virtual void EvalPrimaries(TClonesArray * digits) ; virtual void EvalParents(TClonesArray * digits) ; - using AliRecPoint::GetGlobalPosition; + virtual int * GetDigitsList(void) const { return fDigitsList ; } + virtual Float_t GetEnergy() const {return fAmp; } + + void EvalLocal2TrackingCSTransform(); + void EvalLocalPositionFit(Double_t deff, Double_t w0, Double_t phiSlope,TClonesArray * digits); + Bool_t EvalLocalPosition2(TClonesArray *digits, TArrayD &ed); + + Bool_t EvalLocalPositionFromDigits(const Double_t esum, const Double_t deff, const Double_t w0, + TClonesArray *digits, TArrayD &ed, TVector3 &locPos); + Bool_t EvalLocalPositionFromDigits(TClonesArray *digits, TArrayD &ed, TVector3 &locPos); + static void GetDeffW0(const Double_t esum, Double_t &deff, Double_t &w0); + + //virtual void GetGlobalPosition(TVector3 & gpos, TMatrixF & gmat) const; // return global position (x, y, z) in ALICE virtual void GetGlobalPosition(TVector3 & gpos) const; // return global position (x, y, z) in ALICE - virtual void GetLocalPosition(TVector3 & lpos) const; // return local position (x, y, z) in EMCAL SM + virtual void GetLocalPosition(TVector3 & lpos) const; // return local position (x, y, z) in EMCAL SM virtual Int_t * GetPrimaries(Int_t & number) const {number = fMulTrack ; return fTracksList ; } - virtual Int_t * GetParents(Int_t & number) const {number = fMulParent ; + virtual Int_t * GetParents(Int_t & number) const {number = fMulParent ; return fParentsList ; } + + virtual Int_t GetDigitsMultiplicity(void) const { return fMulDigit ; } + Int_t GetIndexInList() const { return fIndexInList ; } + Float_t GetCoreEnergy()const {return fCoreEnergy ;} virtual Float_t GetDispersion()const {return fDispersion ;} virtual void GetElipsAxis(Float_t * lambda)const {lambda[0] = fLambda[0]; lambda[1] = fLambda[1];}; Float_t * GetEnergiesList() const {return fEnergyList ;} // gets the list of energies making this recpoint - Float_t * GetTimeList() const {return fTimeList ;} // gets the list of digit times in this recpoint + Double_t GetPointEnergy() const; // gets point energy (sum of energy list) + Float_t * GetTimeList() const {return fTimeList ;} // gets the list of digit times in this recpoint Float_t GetMaximalEnergy(void) const ; // get the highest energy in the cluster + Int_t GetMaximalEnergyIndex(void) const ; // get the index of highest energy digit Int_t GetMaximumMultiplicity() const {return fMaxDigit ;} // gets the maximum number of digits allowed Int_t GetMultiplicity(void) const { return fMulDigit ; } // gets the number of digits making this recpoint - Int_t GetMultiplicityAtLevel(Float_t level) const ; // computes multiplicity of digits with + Int_t GetMultiplicityAtLevel(Float_t level) const ; // computes multiplicity of digits with Int_t * GetAbsId() const {return fAbsIdList;} - Int_t GetAbsId(int i) const {if(i>=0 && i=0 && i(nmax) ;} + + Int_t GetPrimaryIndex() const ; + + Float_t GetTime(void) const { return fTime ; } + + Bool_t SharedCluster(void) const { return fSharedCluster ; } + void SetSharedCluster(Bool_t s){ fSharedCluster = s ; } + + virtual Bool_t IsEmc(void) const { return kTRUE ; } + virtual Bool_t IsSortable() const { // tells that this is a sortable object return kTRUE ; } virtual void Paint(Option_t * option=""); virtual void Print(Option_t * option="") const ; - AliEMCALRecPoint & operator = (const AliEMCALRecPoint & ) { - Fatal("operator =", "not implemented") ; - return *this ; - } + Double_t TmaxInCm(const Double_t e=0.0, const Int_t key=0); - enum RecPointType {kPseudoCluster, kClusterv1}; + Float_t GetDistanceToBadTower() const {return fDistToBadTower;} + void EvalDistanceToBadChannels(AliCaloCalibPedestal* caloped); protected: - void EvalCoreEnergy(Float_t logWeight,TClonesArray * digits) ; + void EvalCoreEnergy(Float_t logWeight,TClonesArray * digits) ; virtual void EvalDispersion(Float_t logWeight,TClonesArray * digits) ; // computes the dispersion of the shower virtual void EvalElipsAxis(Float_t logWeight, TClonesArray * digits ); // computes the axis of shower ellipsoide - void EvalTime( TClonesArray * digits ); + void EvalTime( TClonesArray * digits ); virtual Bool_t AreNeighbours(AliEMCALDigit * digit1, AliEMCALDigit * digit2 ) const; Float_t ThetaToEta(Float_t arg) const; //Converts Theta (Radians) to Eta(Radians) Float_t EtaToTheta(Float_t arg) const; //Converts Eta (Radians) to Theta(Radians) private: - AliEMCALGeometry* fGeom; //! Pointer to geometry for utilities - Int_t fClusterType; // type of cluster stored: - // pseudocluster or v1 + //JLK do we need this? + AliEMCALGeometry* fGeomPtr; //! Pointer to geometry for utilities + + Float_t fAmp ; // summed amplitude of digits + Int_t fIndexInList ; // the index of this RecPoint in the + // list stored in TreeR (to be set by analysis) + TVector3 fGlobPos ; // global position + TVector3 fLocPos ; // local position in the sub-detector coordinate + Int_t fMaxDigit ; //! max initial size of digits array (not saved) + Int_t fMulDigit ; // total multiplicity of digits + Int_t fMaxTrack ; //! max initial size of tracks array (not saved) + Int_t fMulTrack ; // total multiplicity of tracks + Int_t * fDigitsList ; //[fMulDigit] list of digit's indexes from which the point was reconstructed + Int_t * fTracksList ; //[fMulTrack] list of tracks to which the point was assigned + + Int_t fClusterType; // type of cluster stored: v1 Float_t fCoreEnergy ; // energy in a shower core Float_t fLambda[2] ; // shower ellipse axes - Float_t fDispersion ; // shower dispersio + Float_t fDispersion ; // shower dispersion Float_t *fEnergyList ; //[fMulDigit] energy of digits Float_t *fTimeList ; //[fMulDigit] time of digits - Int_t *fAbsIdList; //[fMulDigit] absId of digits + Int_t *fAbsIdList; //[fMulDigit] absId of digits Float_t fTime ; // Time of the digit with maximal energy deposition + Short_t fNExMax ; // number of (Ex-)maxima before unfolding Float_t fCoreRadius; // The radius in which the core energy is evaluated - Int_t fMulParent; // Multiplicity of the parents - Int_t fMaxParent; // Maximum number of parents allowed - Int_t * fParentsList; // [fMulParent] list of the parents of the digits - Int_t fSuperModuleNumber; // - - ClassDef(AliEMCALRecPoint,7) // RecPoint for EMCAL (Base Class) + Float_t *fDETracksList ; //[fMulTrack] list of tracks to which the point was assigned + Int_t fMulParent; // Multiplicity of the parents + Int_t fMaxParent; // Maximum number of parents allowed + Int_t * fParentsList; // [fMulParent] list of the parents of the digits + Float_t * fDEParentsList; // [fMulParent] list of the parents of the digits + Int_t fSuperModuleNumber; // number identifying supermodule containing recpoint, reference is cell with maximum energy. + Int_t fDigitIndMax; // Index of digit with max energy in array fAbsIdList + Float_t fDistToBadTower; // Distance to nearest bad tower + Bool_t fSharedCluster; // States if cluster is shared by 2 SuperModules in same phi rack (0,1), (2,3) ... (10,11). + + ClassDef(AliEMCALRecPoint,12) // RecPoint for EMCAL (Base Class) };