* 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 "AliITSclusterV2.h"
+#include "AliITSRecPoint.h"
#include "AliITStrackerMI.h"
#include "AliITSLoader.h"
#include "AliITSPident.h"
ClassImp(AliITSpidESD2)
//_________________________________________________________________________
-AliITSpidESD2::AliITSpidESD2():AliITSpidESD()
+ AliITSpidESD2::AliITSpidESD2():AliITSpidESD(),
+fTracker(0),
+fSp(0)
{ //
// The main constructor
- fTracker=0;
- fLoader=0;
- fSp=0;
}
//_________________________________________________________________________
-AliITSpidESD2::AliITSpidESD2(AliITStrackerMI* tracker,AliITSLoader* loader):AliITSpidESD()
+AliITSpidESD2::AliITSpidESD2(AliITStrackerMI* tracker):AliITSpidESD(),
+fTracker(tracker),
+fSp(0)
{ //
// The main constructor
- fTracker=tracker;
- fLoader=loader;
fSp=new AliITSSteerPid();
fSp->InitLayer();
}
}
//______________________________________________________________________
-AliITSpidESD2::AliITSpidESD2(const AliITSpidESD2 &ob) :AliITSpidESD(ob) {
+AliITSpidESD2::AliITSpidESD2(const AliITSpidESD2 &ob) :AliITSpidESD(ob),
+fTracker(ob.fTracker),
+fSp(ob.fSp)
+{
// Copy constructor
- // Copies are not allowed. The method is protected to avoid misuse.
- Error("AliITSpidESD2","Copy constructor not allowed\n");
+
}
//______________________________________________________________________
-AliITSpidESD2& AliITSpidESD2::operator=(const AliITSpidESD2& /* ob */){
+AliITSpidESD2& AliITSpidESD2::operator=(const AliITSpidESD2& ob ){
// Assignment operator
- // Assignment is not allowed. The method is protected to avoid misuse.
- Error("= operator","Assignment operator not allowed\n");
+ this->~AliITSpidESD2();
+ new(this) AliITSpidESD2(ob);
return *this;
}
//_________________________________________________________________________
-Int_t AliITSpidESD2::MakePID(AliESD *event)
+Int_t AliITSpidESD2::MakePID(TTree *clustersTree, AliESDEvent *event)
{
//
//
Double_t xr,par[5];
AliITStrackV2* track=0;
- fLoader->LoadRecPoints();
- TTree *cTree=fLoader->TreeR();
- fTracker->LoadClusters(cTree);
-
+ fTracker->LoadClusters(clustersTree);
+ printf("==== Landau Fit PID ITS ====== \n");
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 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;
- AliITSclusterV2* clu1=(AliITSclusterV2*)fTracker->GetCluster(cluindsdd1);
- if(clu1!=0){
- q1=clu1->GetQ();
- q1corr=q1*TMath::Sqrt((1-snp*snp)/(1+tgl*tgl));
- }
- else{
- q1=-99;
- q1corr=-99;
- }
-
- AliITSclusterV2* clu2=(AliITSclusterV2*)fTracker->GetCluster(cluindsdd2);
- if(clu2!=0){
- q2=clu2->GetQ();
- q2corr=q2*TMath::Sqrt((1-snp*snp)/(1+tgl*tgl));
+ Int_t cluind[12];
+ for(Int_t ii=0;ii<12;ii++){
+ cluind[ii]=track->GetClusterIndex(ii);
}
- else{
- q2=-99;
- q2corr=-99;
+ AliITSRecPoint* cluarr[12];
+ Float_t qclu[8],qclucorr[8],nlay[8];
+ for(Int_t ii=0;ii<8;ii++){
+ qclu[ii]=0;
+ qclucorr[ii]=0;
+ nlay[ii]=0;
}
-
- AliITSclusterV2* clu3=(AliITSclusterV2*)fTracker->GetCluster(cluindssd1);
- if(clu3!=0){
- q3=clu3->GetQ();
- q3corr=q3*TMath::Sqrt((1-snp*snp)/(1+tgl*tgl));
+ Int_t jj=0;
+ for(Int_t ij=0;ij<12;ij++){
+ cluind[ij]=track->GetClusterIndex(ij);
+ if(cluind[ij]>0){
+ cluarr[ij]=(AliITSRecPoint*)fTracker->GetCluster(cluind[ij]);
+ Int_t lay=cluarr[ij]->GetLayer();
+ if(lay>1){//sdd+ssd only
+ qclu[jj]=cluarr[ij]->GetQ();
+ qclucorr[jj]=qclu[jj]*TMath::Sqrt((1-snp*snp)/(1+tgl*tgl));
+ nlay[jj]=lay;
+ jj++;
+ }
+ else qclucorr[jj]=-1;
+ }
}
- else{
- q3=-99;
- q3corr=-99;
- }
-
- AliITSclusterV2* clu4=(AliITSclusterV2*)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]=0.;//el
- condprobfun[1]=0.;//mu
+ AliITSPident mypid(momits,dEdxsignal,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
esdtr->SetITSpid(condprobfun);
delete track;
- }
+ }
fTracker->UnloadClusters();
- fLoader->UnloadRecPoints();
return 0;
}