X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=PHOS%2FAliPHOSPIDv1.h;h=3e7ff285e1fbc0d68f5d230170a2172ba19b27eb;hb=8ffdfbb4ced8e490ea477de2b07848349bb9dbd4;hp=2e26e29c6e81e9d0e925de78863a4c768b39670d;hpb=fbf811ecb8a88febb884f8fd2283dd1ca8bb0258;p=u%2Fmrichter%2FAliRoot.git diff --git a/PHOS/AliPHOSPIDv1.h b/PHOS/AliPHOSPIDv1.h index 2e26e29c6e8..3e7ff285e1f 100644 --- a/PHOS/AliPHOSPIDv1.h +++ b/PHOS/AliPHOSPIDv1.h @@ -5,6 +5,25 @@ /* $Id$ */ +/* History of cvs commits: + * + * $Log$ + * Revision 1.60 2007/04/01 15:40:15 kharlov + * Correction for actual vertex position implemented + * + * Revision 1.59 2007/03/06 06:57:46 kharlov + * DP:calculation of distance to CPV done in TSM + * + * Revision 1.58 2006/04/12 11:32:03 alibrary + * Simplification of Makefile and some small corrections + * + * Revision 1.57 2006/01/23 17:51:48 hristov + * Using the recommended way of forward declarations for TVector and TMatrix (see v5-08-00 release notes). Additional clean-up + * + * Revision 1.56 2005/05/28 14:19:04 schutz + * Compilation warnings fixed by T.P. + * + */ //_________________________________________________________________________ // Implementation version v1 of the PHOS particle identifier @@ -12,138 +31,167 @@ // Oh yeah //*-- Author: Yves Schutz (SUBATECH), Gustavo Conesa. +// --- Standard library --- + // --- ROOT system --- -//class TFormula ; -class TVector3 ; -class TMatrixD ; +class TCanvas ; +class TFolder ; +class TFormula; class TPrincipal ; - -// --- Standard library --- +class TROOT ; +class TTree ; +#include "TVector3.h" +#include // --- AliRoot header files --- +class AliPHOSClusterizerv1 ; +class AliPHOSCpvRecPoint ; class AliPHOSEmcRecPoint ; -class AliPHOSRecPoint ; - +class AliPHOSTrackSegment ; +class AliPHOSTrackSegmentMakerv1 ; #include "AliPHOSPID.h" +#include "AliPID.h" class AliPHOSPIDv1 : public AliPHOSPID { - + public: - - AliPHOSPIDv1() ; // ctor - AliPHOSPIDv1(const char* headerFile, const char * tsBranch = "Default", const Bool_t toSplit=kFALSE) ; - + + AliPHOSPIDv1() ; // ctor + AliPHOSPIDv1(AliPHOSGeometry *geom); + AliPHOSPIDv1(const AliPHOSPIDv1 & pid) ; // cpy ctor + virtual ~AliPHOSPIDv1() ; // dtor + + virtual void TrackSegments2RecParticles(Option_t *option); // Does the job + + //Get file name that contain the PCA + const TString GetFileNamePrincipal(TString particle) const; + + //Get file name that contain PID parameters + const TString GetFileNameParameters() const {return fFileNameParameters ;} + + // Get PID parameters as they are defined in fParameters + Float_t GetParameterCalibration (Int_t i) const; + Float_t GetParameterCpv2Emc (Int_t i, TString axis) const; + Float_t GetParameterTimeGate (Int_t i) const; + Float_t GetParameterToCalculateEllipse(TString particle, TString param, Int_t i) const ; + Float_t GetParameterPhotonBoundary (Int_t i) const; + Float_t GetParameterPi0Boundary (Int_t i) const; + + // Get energy-dependent PID parameters + Float_t GetCpv2EmcDistanceCut (TString axis, Float_t e) const ; + Float_t GetEllipseParameter (TString particle, TString param, Float_t e) const; + + Double_t GetThresholdChargedNeutral () const {return fChargedNeutralThreshold;} + Float_t GetTOFEnergyThreshold () const {return fTOFEnThreshold;} + Float_t GetDispersionEnergyThreshold () const {return fDispEnThreshold;} + Int_t GetDispersionMultiplicityThreshold () const {return fDispMultThreshold;} + + //Do bayesian PID + void SetBayesianPID(Bool_t set){ fBayesian = set ;} + + // Set PID parameters to change appropriate element of fParameters + void SetParameterCalibration (Int_t i, Float_t param); + void SetParameterCpv2Emc (Int_t i, TString axis, Float_t cut) ; + void SetParameterTimeGate (Int_t i, Float_t gate) ; + void SetParameterToCalculateEllipse(TString particle, TString param, Int_t i, Float_t value) ; + void SetParameterPhotonBoundary(Int_t i, Float_t param); + void SetParameterPi0Boundary (Int_t i, Float_t param); + + void SetThresholdChargedNeutral (Double_t th) {fChargedNeutralThreshold = th;} + void SetTOFEnergyThreshold (Float_t th) {fTOFEnThreshold = th;} + void SetDispersionEnergyThreshold (Float_t th) {fDispEnThreshold = th;} + void SetDispersionMultiplicityThreshold (Int_t th) {fDispMultThreshold = th;} + + //Switch to "on flyght" mode, without writing to TreeR and file + void SetWriting(Bool_t toWrite = kFALSE){fWrite = toWrite;} + void Print(const Option_t * = "") const ; + + void GetVertex(void) ; //Extracts vertex in current event - virtual void Exec(Option_t * option) ; - // virtual char * GetRecParticlesBranch()const {return (char*) fRecParticlesTitle.Data() ;} - // virtual char * GetTrackSegmentsBranch()const{return (char*) fTrackSegmentsTitle.Data(); } - virtual const Int_t GetRecParticlesInRun() const {return fRecParticlesInRun ;} - - virtual void Print(Option_t * option) const {} - void Print() ; - // Get CpvtoEmcDistanceCut and TimeGate parameters depending on the custer energy and - // Purity-Efficiency point (possible options "HIGH EFFICIENCY" "MEDIUM EFFICIENCY" "LOW - // EFFICIENCY" and 3 more options changing EFFICIENCY by PURITY) - Double_t GetCpvtoEmcDistanceCut(const Float_t Cluster_En, const TString Eff_Pur) ; - Double_t GetTimeGate(const Float_t Cluster_En, const TString Eff_Pur) ; - - //Get files that contain the PCA - const TString GetPrincipalFile5( )const {return fFileName5 ;} - const TString GetPrincipalFilePar5( )const {return fFileNamePar5 ;} - const TString GetPrincipalFile100( )const {return fFileName100 ;} - const TString GetPrincipalFilePar100( )const {return fFileNamePar100 ;} - - // Set all parameters necessary in the PID depending on the custer energy and - // Purity-Efficiency point (possible options "HIGH EFFICIENCY" "MEDIUM EFFICIENCY" "LOW - // EFFICIENCY" and 3 more options changing EFFICIENCY by PURITY) - void SetCpvtoEmcDistanceCut(Float_t Cluster_En, TString Eff_Pur, Float_t cut) ; - void SetTimeGate(Float_t Cluster_En, TString Eff_Pur, Float_t gate) ; - void SetEllipseXCenter(Float_t Cluster_En, TString Eff_Pur, Float_t x) ; - void SetEllipseYCenter(Float_t Cluster_En, TString Eff_Pur, Float_t y) ; - void SetEllipseAParameter(Float_t Cluster_En, TString Eff_Pur, Float_t a) ; - void SetEllipseBParameter(Float_t Cluster_En, TString Eff_Pur, Float_t b) ; - void SetEllipseAngle(Float_t Cluster_En, TString Eff_Pur, Float_t angle) ; - void SetEllipseParameters(Float_t Cluster_En, TString Eff_Pur, Float_t x, Float_t y,Float_t a, Float_t b,Float_t angle) ; - - //Get and Set energy calibration parameters - Float_t GetACalParameter() {return fACalParameter ;} - Float_t GetBCalParameter() {return fBCalParameter ;} - Float_t GetCCalParameter() {return fCCalParameter ;} - void SetACalParameter(Float_t a) { fACalParameter = a ;} - void SetBCalParameter(Float_t b) { fBCalParameter = b ;} - void SetCCalParameter(Float_t c) { fCCalParameter = c ;} - - - Float_t GetEnergyAnalysisCut() {return fEnergyAnalysisCut ;} - void SetEnergyAnalysisCut(Float_t e) { fEnergyAnalysisCut = e ;} - - // virtual void SetTrackSegmentsBranch(const char* title) { fTrackSegmentsTitle = title;} - // virtual void SetRecParticlesBranch (const char* title) { fRecParticlesTitle = title;} virtual const char * Version() const { return "pid-v1" ; } + + AliPHOSPIDv1 & operator = (const AliPHOSPIDv1 & /*pid*/) { return *this ;} - private: - - const TString BranchName() const ; - virtual void Init() ; - virtual void InitParameters() ; - void MakeRecParticles(void ) ; - // Relative Distance CPV-EMC - Float_t GetDistance(AliPHOSEmcRecPoint * emc, AliPHOSRecPoint * cpv, Option_t * Axis)const ; - Int_t GetPrincipalSign(Double_t* P, Int_t ell, Int_t eff_pur)const ; //Principal cut - TVector3 GetMomentumDirection(AliPHOSEmcRecPoint * emc, AliPHOSRecPoint * cpv)const ; - void PrintRecParticles(Option_t * option) ; - // Gives in wich cluster energy range is the event - void GetClusterOption(const Float_t Cluster_En,const Bool_t range) ; - // Gives the Efficiency-Purity point. - Int_t GetEffPurOption(const TString Eff_Pur)const ; - virtual void WriteRecParticles(Int_t event) ; - void SetParameters() ; //Fills the matrix of parameters - //Selects principal and parameters file in function of energy range. - void GetAnalysisParameters(Float_t ClusterEn) ; - Double_t CalibratedEnergy(Float_t e) ; //Calibrates energy. - - - private: - - Bool_t fDefaultInit; //! Says if the task was created by defaut ctor (only parameters are initialized) - TString fFileName5 ; // File that contains the Principal file for analysis from 0.5 to 5 GeV - TString fFileName100 ; // File that contains the Principal file for analysis from 0.5 to 100 GeV - TString fFileNamePar5 ; // File that contains the parameters for analysis from 0.5 to 5 GeV - TString fFileNamePar100 ;// File that contains the parameters for analysis from 0.5 to 100 GeV +private: - - // TString fFrom ; // name of Recpoints and TrackSegments - // TString fHeaderFileName ; // file name with event header - // TString fTrackSegmentsTitle; // branch name with track segments - // TString fRecPointsTitle ; // branch name with rec points - // TString fRecParticlesTitle ; // branch name with rec particles - - Int_t fNEvent ; //! current event number - // AliPHOSClusterizer * fClusterizer ; //! clusterizer - // AliPHOSTrackSegmentMaker * fTSMaker ; //! track segment maker - - TPrincipal * fPrincipal5 ; //! TPrincipal from fFileName5 - TPrincipal * fPrincipal100 ; //! TPrincipal from fFileName100 - TPrincipal * fPrincipal ; //! TPrincipal copy - Double_t * fX ; //! Principal data - Double_t * fP ; //! Principal eigenvalues - - Int_t fRecParticlesInRun ; //! Total number of recparticles in one run - - TMatrixD * fParameters5 ; //! Matrix of identification Parameters 0.5 to 5 GeV - TMatrixD * fParameters100 ; //! Matrix of identification Parameters 5-100 GeV - TMatrixD * fParameters; //! Matrix copy of identification Parameters - Float_t fEnergyAnalysisCut; // Energy to change from one PCA to the other. - Int_t fCluster; // Cluster energy range to choose parameters - Int_t fClusterrcpv; // Cluster energy range to choos rcpv parameters - Int_t fMatrixExtraRow; // Different size of the parameters file. Depends on range - - Float_t fACalParameter ;// A parameter energy calibration Encal=A+B*En+C*En^2 - Float_t fBCalParameter ;// B parameter energy calibration Encal=A+B*En+C*En^2 - Float_t fCCalParameter ;// B parameter energy calibration Encal=A+B*En+C*En^2 - - ClassDef( AliPHOSPIDv1,5) // Particle identifier implementation version 1 + virtual void InitParameters() ; + void MakeRecParticles(void ) ; + void MakePID(void) ; + + //Functions to calculate the PID probability + // Double_t ChargedHadronDistProb(Double_t x, Double_t y, Double_t * parg, Double_t * parl) ; + Double_t GausF (Double_t x, Double_t y, Double_t *par) ; //gaussian probability, parameter dependence a+b/(x*x)+c/x + Double_t GausPol2(Double_t x, Double_t y, Double_t *par) ; //gaussian probability, parameter dependence a+b*x+c*x*x + Double_t LandauF(Double_t x, Double_t y, Double_t *par) ; //gaussian probability, parameter dependence a+b/(x*x)+c/x + Double_t LandauPol2(Double_t x, Double_t y, Double_t *par) ; //gaussian probability, parameter dependence a+b*x+c*x*x + // Relative Distance CPV-EMC + Int_t GetCPVBit (AliPHOSTrackSegment * ts, Int_t EffPur, Float_t e) const; + Int_t GetPrincipalBit (TString particle, const Double_t* P, Int_t EffPur, Float_t e)const ; //Principal cut + Int_t GetHardPhotonBit(AliPHOSEmcRecPoint * emc) const; + Int_t GetHardPi0Bit (AliPHOSEmcRecPoint * emc) const; + TVector3 GetMomentumDirection(AliPHOSEmcRecPoint * emc, AliPHOSCpvRecPoint * cpv)const ; + void PrintRecParticles(Option_t * option) ; + void SetParameters() ; //Fills the matrix of parameters + + //PID population + void SetInitPID(const Double_t * pid) ; + void GetInitPID(Double_t * pid) const ; + +private: + Bool_t fBayesian ; // Do PID bayesian + Bool_t fDefaultInit; //! kTRUE if the task was created by defaut ctor (only parameters are initialized) + Bool_t fWrite ; //! To write result to file + TString fFileNamePrincipalPhoton ; // File name of the photon principals + TString fFileNamePrincipalPi0 ; // File name of the pi0 principals + TString fFileNameParameters ; // File name with PID parameters + TPrincipal *fPrincipalPhoton ; //! TPrincipal from photon pca file + TPrincipal *fPrincipalPi0 ; //! TPrincipal from pi0 pca file + Double_t *fX ; //! Shower shape for the principal data + Double_t *fPPhoton ; //! Principal photon eigenvalues + Double_t *fPPi0 ; //! Principal pi0 eigenvalues + TMatrixF *fParameters; //! Matrix of identification Parameters + + TVector3 fVtx ; //! Vertex position in current event + + //Initial pid population + Double_t fInitPID[AliPID::kSPECIESCN] ; // Initial population to do bayesian PID + // pid probability function parameters + // ToF + Double_t fTphoton[3] ; // gaussian tof response for photon + TFormula * fTFphoton ; // the formula + Double_t fTpiong[3] ; // gaussian tof response for pions + TFormula * fTFpiong ; // the formula + Double_t fTkaong[3] ; // landau tof response for kaons + TFormula * fTFkaong ; // the formula + Double_t fTkaonl[3] ; // landau tof response for kaons + TFormula * fTFkaonl ; // the formula + Double_t fThhadrong[3] ; // gaus tof response for heavy hadrons + TFormula * fTFhhadrong ; // the formula + Double_t fThhadronl[3] ; // landau tof response for heavy hadrons + TFormula * fTFhhadronl ; // the formula + + //Shower dispersion + Double_t fDmuon[3] ; // gaussian ss response for muon + TFormula * fDFmuon ; // the formula + Double_t fDphoton[10] ; // gaussian ss response for EM + Double_t fDpi0[10] ; // gaussian ss response for pi0 + Double_t fDhadron[10] ; // gaussian ss response for hadrons + + Double_t fXelectron[10] ; // gaussian emc-cpv distance response for electron + Double_t fXcharged[10] ; // landau emc-cpv distance response for charged part (no elect) */ + Double_t fZelectron[10] ; // gaussian emc-cpv distance response for electron + Double_t fZcharged[10] ; // landau emc-cpv distance response for charged part (no elect) */ + + + Double_t fERecWeightPar[4] ; // gaussian tof response for photon + TFormula * fERecWeight ; // the formula + Double_t fChargedNeutralThreshold ; //Threshold to differentiate between charged and neutral + Float_t fTOFEnThreshold; //Maximum energy to use TOF + Float_t fDispEnThreshold; //Minimum energy to use shower shape + Int_t fDispMultThreshold ; //Minimum multiplicity to use shower shape + + ClassDef( AliPHOSPIDv1,13) // Particle identifier implementation version 1 };