Possibility to use ITS dE/dx for PID during tracking
authorprino <prino@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 4 Mar 2011 17:49:25 +0000 (17:49 +0000)
committerprino <prino@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 4 Mar 2011 17:49:25 +0000 (17:49 +0000)
ITS/AliITSRecoParam.cxx
ITS/AliITSRecoParam.h
ITS/AliITStrackerMI.cxx
ITS/AliITStrackerMI.h
ITS/AliITStrackerSA.cxx

index 0c69c12..61d92b8 100644 (file)
@@ -156,6 +156,7 @@ fMinClusterChargeSA(0.),
 fSAOnePointTracks(kFALSE),
 fSAUseAllClusters(kFALSE),
 fMaxSPDcontrForSAToUseAllClusters(1000000),
+fSAUsedEdxInfo(kFALSE),
 fSelectBestMIP03(kFALSE),
 fFlagFakes(kFALSE),
 fUseImproveKalman(kFALSE),
index 334092f..2e7264d 100644 (file)
@@ -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 &param);
 
-  ClassDef(AliITSRecoParam,37) // ITS reco parameters
+  ClassDef(AliITSRecoParam,38) // ITS reco parameters
 };
 
 #endif
index 058afa9..e2a5f2f 100644 (file)
@@ -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;i<AliITSgeomTGeo::kNLayers;i++)fForceSkippingOfLayer[i]=0;
   for(i=0;i<100000;i++)fBestTrackIndex[i]=0;
+  fITSPid=new AliITSPIDResponse();
 
 }
 //------------------------------------------------------------------------
@@ -138,7 +142,8 @@ fxTimesRhoLayerTrks(0),
 fDebugStreamer(0),
 fITSChannelStatus(0),
 fkDetTypeRec(0),
-fPlaneEff(0) {
+fPlaneEff(0),
+fITSPid(0) {
   //--------------------------------------------------------------------
   //This is the AliITStrackerMI constructor
   //--------------------------------------------------------------------
@@ -275,6 +280,7 @@ fPlaneEff(0) {
   fFlagFakes        = AliITSReconstructor::GetRecoParam()->GetFlagFakes();
   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() {
index 6880ab6..44a86be 100644 (file)
@@ -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
 };
 
 
index 9bb4ff5..8c307a4 100644 (file)
@@ -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;isp<AliPID::kSPECIES;isp++) ppid[isp]=0.;
+    ppid[AliPID::kPion]=1.;
+    if(mom<0.7){
+      Double_t truncmean=t->GetdEdx();
+      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;