]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/AliITSpidESD2.cxx
Bug fix concerning multiple found tracks (F. Prino)
[u/mrichter/AliRoot.git] / ITS / AliITSpidESD2.cxx
index 42f0f8706bcb7b17b3c070964f556d41d809802f..e829631cc336215da35fa292cb3719fda37269a8 100644 (file)
@@ -13,6 +13,8 @@
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
 
+/* $Id$ */
+
 //-----------------------------------------------------------------------//
 // ITS PID class --- method # 2                                          //
 //                                                                       //
 //-----------------------------------------------------------------------//
 
 #include "AliITSpidESD2.h"
-#include "AliESD.h"
+#include "AliESDEvent.h"
 #include "AliESDtrack.h"
-#include "AliITStrackV2.h"
-#include "AliITSRecPoint.h"
-#include "AliITStrackerMI.h"
 #include "AliITSLoader.h"
 #include "AliITSPident.h"
 #include "AliITSSteerPid.h"
 
 ClassImp(AliITSpidESD2)
 //_________________________________________________________________________
-  AliITSpidESD2::AliITSpidESD2():AliITSpidESD(),
-fTracker(0),
-fLoader(0),
-fSp(0)
-{ //
+AliITSpidESD2::AliITSpidESD2():
+  AliITSpidESD(),
+  fSp(0)
+{ 
   //  The main constructor
-}
-//_________________________________________________________________________
-AliITSpidESD2::AliITSpidESD2(AliITStrackerMI* tracker,AliITSLoader* loader):AliITSpidESD(),
-fTracker(0),
-fLoader(0),
-fSp(0)
-{ //
-  //  The main constructor
-  fTracker=tracker;
-  fLoader=loader;
   fSp=new AliITSSteerPid();
   fSp->InitLayer();
 }
+
+
 //_________________________________________________________________________
 AliITSpidESD2::~AliITSpidESD2(){
   //destructor
 
   if(fSp)delete fSp;
-
 }
+
+
 //______________________________________________________________________
 AliITSpidESD2::AliITSpidESD2(const AliITSpidESD2 &ob) :AliITSpidESD(ob),
-fTracker(ob.fTracker),
-fLoader(ob.fLoader),
 fSp(ob.fSp) 
 {
   // Copy constructor
 }
 
+
 //______________________________________________________________________
 AliITSpidESD2& AliITSpidESD2::operator=(const AliITSpidESD2& ob ){
   // Assignment operator
@@ -80,105 +69,57 @@ AliITSpidESD2& AliITSpidESD2::operator=(const AliITSpidESD2& ob ){
   return *this;
 }
 
-//_________________________________________________________________________
-Int_t AliITSpidESD2::MakePID(AliESD *event)
-{
+    
+//______________________________________________________________________
+void AliITSpidESD2::GetITSpidSingleTrack(AliESDtrack* esdtr, Double_t condprobfun[]){
+  // Method to calculate PID probabilities for a single track
+  
+  Double_t momits=esdtr->GetP();
+  Double_t qclu[4];
+  esdtr->GetITSdEdxSamples(qclu);
+
+  Float_t qclucorr[8],nlay[8];
+  for(Int_t jj=0;jj<8;jj++){
+    if(jj<4 && qclu[jj]>0){
+      qclucorr[jj]=qclu[jj]; 
+      nlay[jj]=jj+2; // layers numbered from 0 to 5
+    }
+    else{ 
+      qclucorr[jj]=-1;
+      nlay[jj]=0;
+    }
+  }
+  
+  Float_t prip=0.33;
+  Float_t prik=0.33;
+  Float_t pripi=0.33;
+  Float_t prie=0.;
+  AliITSPident mypid(momits,fSp,qclucorr,nlay,prip,prik,pripi,prie);
+  condprobfun[0]=mypid.GetProdCondFunPi();//el --PID in the ITS does not distinguish among Pi,el,mu
+  condprobfun[1]=mypid.GetProdCondFunPi();//mu
+  condprobfun[2]=mypid.GetProdCondFunPi();//pi
+  condprobfun[3]=mypid.GetProdCondFunK();//kaon
+  condprobfun[4]=mypid.GetProdCondFunPro();//pro
+  return;
+}
 
-  //
+
+
+//_________________________________________________________________________
+Int_t AliITSpidESD2::MakePID(AliESDEvent *event){
   //  This function calculates the "detector response" PID probabilities 
-  //
-  Double_t xr,par[5];
-  AliITStrackV2* track=0;
-  fLoader->LoadRecPoints();
-  TTree *cTree=fLoader->TreeR();
-  fTracker->LoadClusters(cTree);
 
   Int_t ntrk=event->GetNumberOfTracks();
-  Double_t momits;
-  // for (Int_t i=0; i<ntrk; i++) {
+  const Int_t kns=AliPID::kSPECIES;
+  Double_t condprobfun[kns];
+    
   for (Int_t i=0; i<ntrk; i++) {
     AliESDtrack *esdtr=event->GetTrack(i);
-    if ((esdtr->GetStatus()&AliESDtrack::kITSin )==0)
+    if ((esdtr->GetStatus()&AliESDtrack::kITSin )==0){
       if ((esdtr->GetStatus()&AliESDtrack::kITSout)==0) continue;
-
-    track = new AliITStrackV2(*esdtr);
-    Double_t dEdxsignal=track->GetdEdx();
-    track->GetExternalParameters(xr,par);
-    if (par[4]!=0) {
-      Float_t lamb=TMath::ATan(par[3]);
-      momits=1/(TMath::Abs(par[4])*TMath::Cos(lamb));
-    }
-    else {
-      AliWarning("Null particle momentum in ITS");
-      momits = 0.;
-    } 
-    Double_t snp=track->GetSnp();
-    Double_t tgl=track->GetTgl();
-    const Int_t kns=AliPID::kSPECIES;
-    Double_t condprobfun[kns];
-    for(Int_t ii=0;ii<kns;ii++)condprobfun[ii]=0;
-    Int_t cluindsdd1 = track->GetClusterIndex(3);
-    Int_t cluindsdd2 = track->GetClusterIndex(2);
-    Int_t cluindssd1 = track->GetClusterIndex(1);
-    Int_t cluindssd2 = track->GetClusterIndex(0);
-    Float_t q1,q1corr,q2,q2corr,q3,q3corr,q4,q4corr;
-    AliITSRecPoint* clu1=(AliITSRecPoint*)fTracker->GetCluster(cluindsdd1);
-    if(clu1!=0){
-      q1=clu1->GetQ(); 
-      q1corr=q1*TMath::Sqrt((1-snp*snp)/(1+tgl*tgl));
-    }
-    else{
-      q1=-99;
-      q1corr=-99;
-    }
-       
-    AliITSRecPoint* clu2=(AliITSRecPoint*)fTracker->GetCluster(cluindsdd2);
-    if(clu2!=0){
-      q2=clu2->GetQ();
-      q2corr=q2*TMath::Sqrt((1-snp*snp)/(1+tgl*tgl));
-    }
-    else{
-      q2=-99;
-      q2corr=-99;
     }
-    
-    AliITSRecPoint* clu3=(AliITSRecPoint*)fTracker->GetCluster(cluindssd1);
-    if(clu3!=0){
-      q3=clu3->GetQ();
-      q3corr=q3*TMath::Sqrt((1-snp*snp)/(1+tgl*tgl));
-    }
-    else{
-      q3=-99;
-      q3corr=-99;
-    }
-    
-    AliITSRecPoint* clu4=(AliITSRecPoint*)fTracker->GetCluster(cluindssd2);
-    if(clu4!=0){
-      q4=clu4->GetQ();
-      q4corr=q4*TMath::Sqrt((1-snp*snp)/(1+tgl*tgl));
-    }
-    else{
-      q4=-99;
-      q4corr=-99;
-    }
-    Float_t qlay[4]={q1corr,q2corr,q3corr,q4corr};
-    Float_t prip=0.33;
-    Float_t prik=0.33;
-    Float_t pripi=0.33;
-    Float_t prie=0.;
-    Double_t invPt=track->Get1Pt();
-    AliITSPident mypid(momits,invPt,dEdxsignal,fSp,qlay,prip,prik,pripi,prie); 
-    condprobfun[0]=mypid.GetProdCondFunPi();//el -> ITS does not distinguish among Pi,mu,el
-    condprobfun[1]=mypid.GetProdCondFunPi();//mu -> ITS does not distinguish among Pi,mu,el
-    condprobfun[2]=mypid.GetProdCondFunPi();//pi -> ITS does not distinguish among Pi,mu,el
-    condprobfun[3]=mypid.GetProdCondFunK();//kaon
-    condprobfun[4]=mypid.GetProdCondFunPro();//pro
-
+    GetITSpidSingleTrack(esdtr,condprobfun);
     esdtr->SetITSpid(condprobfun);
-
-    delete track;
-   }
-  fTracker->UnloadClusters();
-  fLoader->UnloadRecPoints();
+  }
   return 0;
 }