From 4336faa4050000258b2baae6b62257b33df2ed58 Mon Sep 17 00:00:00 2001 From: prino Date: Fri, 4 Mar 2011 17:49:25 +0000 Subject: [PATCH] Possibility to use ITS dE/dx for PID during tracking --- ITS/AliITSRecoParam.cxx | 1 + ITS/AliITSRecoParam.h | 6 +++++- ITS/AliITStrackerMI.cxx | 12 ++++++++++-- ITS/AliITStrackerMI.h | 16 +++++++++++++++- ITS/AliITStrackerSA.cxx | 22 ++++++++++++++++++++++ 5 files changed, 53 insertions(+), 4 deletions(-) diff --git a/ITS/AliITSRecoParam.cxx b/ITS/AliITSRecoParam.cxx index 0c69c127477..61d92b850bc 100644 --- a/ITS/AliITSRecoParam.cxx +++ b/ITS/AliITSRecoParam.cxx @@ -156,6 +156,7 @@ fMinClusterChargeSA(0.), fSAOnePointTracks(kFALSE), fSAUseAllClusters(kFALSE), fMaxSPDcontrForSAToUseAllClusters(1000000), +fSAUsedEdxInfo(kFALSE), fSelectBestMIP03(kFALSE), fFlagFakes(kFALSE), fUseImproveKalman(kFALSE), diff --git a/ITS/AliITSRecoParam.h b/ITS/AliITSRecoParam.h index 334092f175f..2e7264de159 100644 --- a/ITS/AliITSRecoParam.h +++ b/ITS/AliITSRecoParam.h @@ -315,6 +315,9 @@ class AliITSRecoParam : public AliDetectorRecoParam void SetMaxSPDcontrForSAToUseAllClusters(Int_t contr=50) { fMaxSPDcontrForSAToUseAllClusters=contr; return; } Int_t GetMaxSPDcontrForSAToUseAllClusters() const { return fMaxSPDcontrForSAToUseAllClusters; } + void SetSAUsedEdxInfo(Bool_t opt=kTRUE) { fSAUsedEdxInfo=opt; return; } + Bool_t GetSAUsedEdxInfo() const { return fSAUsedEdxInfo; } + void SetFindV0s(Bool_t find=kTRUE) { fFindV0s=find; return; } Bool_t GetFindV0s() const { return fFindV0s; } @@ -639,6 +642,7 @@ class AliITSRecoParam : public AliDetectorRecoParam Bool_t fSAOnePointTracks; // one-cluster tracks in SA (only for cosmics!) Bool_t fSAUseAllClusters; // do not skip clusters used by MI (same track twice in AliESDEvent!) Int_t fMaxSPDcontrForSAToUseAllClusters; // maximum nContr of SPD vertex for which trackerSA will reuse all ITS clusters + Bool_t fSAUsedEdxInfo; // use/not use dE/dx in ITS for assign mass hypothesis Bool_t fSelectBestMIP03; // (MI) Multiply norm chi2 by interpolated one in hypthesis analysis Bool_t fFlagFakes; // (MI) preform shared cluster analysis and flag candidates for fakes @@ -738,7 +742,7 @@ class AliITSRecoParam : public AliDetectorRecoParam AliITSRecoParam(const AliITSRecoParam & param); AliITSRecoParam & operator=(const AliITSRecoParam ¶m); - ClassDef(AliITSRecoParam,37) // ITS reco parameters + ClassDef(AliITSRecoParam,38) // ITS reco parameters }; #endif diff --git a/ITS/AliITStrackerMI.cxx b/ITS/AliITStrackerMI.cxx index 058afa93d11..e2a5f2ffb78 100644 --- a/ITS/AliITStrackerMI.cxx +++ b/ITS/AliITStrackerMI.cxx @@ -92,7 +92,10 @@ fxTimesRhoLayerTrks(0), fDebugStreamer(0), fITSChannelStatus(0), fkDetTypeRec(0), -fPlaneEff(0) { +fPlaneEff(0), +fITSPid(0) + + { //Default constructor Int_t i; for(i=0;i<4;i++) fSPDdetzcentre[i]=0.; @@ -105,6 +108,7 @@ fPlaneEff(0) { fOriginal.SetOwner(); for(i=0;iGetFlagFakes(); fUseImproveKalman = AliITSReconstructor::GetRecoParam()->GetUseImproveKalman(); // + fITSPid=new AliITSPIDResponse(); } /* //------------------------------------------------------------------------ @@ -346,6 +352,8 @@ AliITStrackerMI::~AliITStrackerMI() } if(fITSChannelStatus) delete fITSChannelStatus; if(fPlaneEff) delete fPlaneEff; + if(fITSPid) delete fITSPid; + } //------------------------------------------------------------------------ void AliITStrackerMI::ReadBadFromDetTypeRec() { diff --git a/ITS/AliITStrackerMI.h b/ITS/AliITStrackerMI.h index 6880ab6d564..44a86be2130 100644 --- a/ITS/AliITStrackerMI.h +++ b/ITS/AliITStrackerMI.h @@ -28,6 +28,7 @@ class AliPlaneEff; #include "AliITSRecPoint.h" #include "AliTracker.h" #include "AliRefArray.h" +#include "AliITSPIDResponse.h" //------------------------------------------------------------------------- class AliITStrackerMI : public AliTracker { @@ -238,6 +239,18 @@ protected: new(&fTrackToFollow) AliITStrackMI(t); } void CookdEdx(AliITStrackMI* track); + + Int_t GetParticleId(const AliESDtrack* track) const{ + ULong_t trStatus=track->GetStatus(); + Bool_t isSA=kTRUE; + if(trStatus&AliESDtrack::kTPCin) isSA=kFALSE; + return fITSPid->GetParticleIdFromdEdxVsP(track->P(),track->GetITSsignal(),isSA); + } + Int_t GetParticleId(const AliITStrackV2* track) const{ + if(track->GetESDtrack()) return GetParticleId(track->GetESDtrack()); + return fITSPid->GetParticleIdFromdEdxVsP(track->P(),track->GetdEdx(),kFALSE); + } + Double_t GetNormalizedChi2(AliITStrackMI * track, Int_t mode); Double_t GetTruncatedChi2(const AliITStrackMI * track, Float_t fac); Double_t NormalizedChi2(AliITStrackMI * track, Int_t layer); @@ -318,11 +331,12 @@ protected: AliITSChannelStatus *fITSChannelStatus;//! bitmaps with channel status for SPD and SDD const AliITSDetTypeRec *fkDetTypeRec; //! ITS det type rec, from AliITSReconstructor AliITSPlaneEff *fPlaneEff; //! Pointer to the ITS plane efficicency + AliITSPIDResponse *fITSPid; //! parameters for ITS pid // private: AliITStrackerMI(const AliITStrackerMI &tracker); AliITStrackerMI & operator=(const AliITStrackerMI &tracker); - ClassDef(AliITStrackerMI,9) //ITS tracker MI + ClassDef(AliITStrackerMI,10) //ITS tracker MI }; diff --git a/ITS/AliITStrackerSA.cxx b/ITS/AliITStrackerSA.cxx index 9bb4ff54537..8c307a43bc7 100644 --- a/ITS/AliITStrackerSA.cxx +++ b/ITS/AliITStrackerSA.cxx @@ -813,6 +813,28 @@ void AliITStrackerSA::StoreTrack(AliITStrackV2 *t,AliESDEvent *event, Bool_t pur Double_t sdedx[4]={0.,0.,0.,0.}; for(Int_t i=0; i<4; i++) sdedx[i]=t->GetSampledEdx(i); outtrack.SetITSdEdxSamples(sdedx); + + + if(AliITSReconstructor::GetRecoParam()->GetSAUsedEdxInfo()){ + Double_t mom=t->P(); + Double_t ppid[AliPID::kSPECIES]; + for(Int_t isp=0;ispGetdEdx(); + Int_t ide=fITSPid->GetParticleIdFromdEdxVsP(mom,truncmean,kTRUE); + if(ide==AliPID::kProton){ + ppid[AliPID::kProton]=1.; + ppid[AliPID::kPion]=0.; + } + else if(ide==AliPID::kKaon){ + ppid[AliPID::kKaon]=1.; + ppid[AliPID::kPion]=0.; + } + } + outtrack.SetITSpid(ppid); + outtrack.SetESDpid(ppid); + } event->AddTrack(&outtrack); return; -- 2.39.3