1 /**************************************************************************
2 * Copyright(c) 2005-2007, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
16 //-----------------------------------------------------------------------//
17 // ITS PID class --- method # 2 //
20 //The PID is based on the likelihood of all the four ITS' layers, //
21 //without using the truncated mean for the dE/dx. The response //
22 //functions for each layer are convoluted Landau-Gaussian functions. //
23 // Origin: Elena Bruna bruna@to.infn.it, Massimo Masera masera@to.infn.it//
24 //-----------------------------------------------------------------------//
26 #include "AliITSpidESD2.h"
28 #include "AliESDtrack.h"
29 #include "AliITStrackV2.h"
30 #include "AliITSclusterV2.h"
31 #include "AliITStrackerMI.h"
32 #include "AliITSLoader.h"
33 #include "AliITSPident.h"
34 #include "AliITSSteerPid.h"
37 ClassImp(AliITSpidESD2)
38 //_________________________________________________________________________
39 AliITSpidESD2::AliITSpidESD2():AliITSpidESD(),
44 // The main constructor
46 //_________________________________________________________________________
47 AliITSpidESD2::AliITSpidESD2(AliITStrackerMI* tracker,AliITSLoader* loader):AliITSpidESD(),
52 // The main constructor
55 fSp=new AliITSSteerPid();
58 //_________________________________________________________________________
59 AliITSpidESD2::~AliITSpidESD2(){
65 //______________________________________________________________________
66 AliITSpidESD2::AliITSpidESD2(const AliITSpidESD2 &ob) :AliITSpidESD(ob),
67 fTracker(ob.fTracker),
75 //______________________________________________________________________
76 AliITSpidESD2& AliITSpidESD2::operator=(const AliITSpidESD2& ob ){
77 // Assignment operator
78 this->~AliITSpidESD2();
79 new(this) AliITSpidESD2(ob);
83 //_________________________________________________________________________
84 Int_t AliITSpidESD2::MakePID(AliESD *event)
88 // This function calculates the "detector response" PID probabilities
91 AliITStrackV2* track=0;
92 fLoader->LoadRecPoints();
93 TTree *cTree=fLoader->TreeR();
94 fTracker->LoadClusters(cTree);
96 Int_t ntrk=event->GetNumberOfTracks();
98 // for (Int_t i=0; i<ntrk; i++) {
99 for (Int_t i=0; i<ntrk; i++) {
100 AliESDtrack *esdtr=event->GetTrack(i);
101 if ((esdtr->GetStatus()&AliESDtrack::kITSin )==0)
102 if ((esdtr->GetStatus()&AliESDtrack::kITSout)==0) continue;
104 track = new AliITStrackV2(*esdtr);
105 Double_t dEdxsignal=track->GetdEdx();
106 track->GetExternalParameters(xr,par);
108 Float_t lamb=TMath::ATan(par[3]);
109 momits=1/(TMath::Abs(par[4])*TMath::Cos(lamb));
112 AliWarning("Null particle momentum in ITS");
115 Double_t snp=track->GetSnp();
116 Double_t tgl=track->GetTgl();
117 const Int_t kns=AliPID::kSPECIES;
118 Double_t condprobfun[kns];
119 for(Int_t ii=0;ii<kns;ii++)condprobfun[ii]=0;
120 Int_t cluindsdd1 = track->GetClusterIndex(3);
121 Int_t cluindsdd2 = track->GetClusterIndex(2);
122 Int_t cluindssd1 = track->GetClusterIndex(1);
123 Int_t cluindssd2 = track->GetClusterIndex(0);
124 Float_t q1,q1corr,q2,q2corr,q3,q3corr,q4,q4corr;
125 AliITSclusterV2* clu1=(AliITSclusterV2*)fTracker->GetCluster(cluindsdd1);
128 q1corr=q1*TMath::Sqrt((1-snp*snp)/(1+tgl*tgl));
135 AliITSclusterV2* clu2=(AliITSclusterV2*)fTracker->GetCluster(cluindsdd2);
138 q2corr=q2*TMath::Sqrt((1-snp*snp)/(1+tgl*tgl));
145 AliITSclusterV2* clu3=(AliITSclusterV2*)fTracker->GetCluster(cluindssd1);
148 q3corr=q3*TMath::Sqrt((1-snp*snp)/(1+tgl*tgl));
155 AliITSclusterV2* clu4=(AliITSclusterV2*)fTracker->GetCluster(cluindssd2);
158 q4corr=q4*TMath::Sqrt((1-snp*snp)/(1+tgl*tgl));
164 Float_t qlay[4]={q1corr,q2corr,q3corr,q4corr};
169 Double_t invPt=track->Get1Pt();
170 AliITSPident mypid(momits,invPt,dEdxsignal,fSp,qlay,prip,prik,pripi,prie);
171 condprobfun[0]=0.;//el
172 condprobfun[1]=0.;//mu
173 condprobfun[2]=mypid.GetProdCondFunPi();//pi
174 condprobfun[3]=mypid.GetProdCondFunK();//kaon
175 condprobfun[4]=mypid.GetProdCondFunPro();//pro
177 esdtr->SetITSpid(condprobfun);
181 fTracker->UnloadClusters();
182 fLoader->UnloadRecPoints();