]> git.uio.no Git - u/mrichter/AliRoot.git/blame - ITS/AliITSpidESD2.cxx
Update of PID 2 to the present recpoint normalisation
[u/mrichter/AliRoot.git] / ITS / AliITSpidESD2.cxx
CommitLineData
e62c1aea 1/**************************************************************************
2 * Copyright(c) 2005-2007, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
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 **************************************************************************/
15
1fad94b4 16/* $Id$ */
17
e62c1aea 18//-----------------------------------------------------------------------//
19// ITS PID class --- method # 2 //
20// //
21// //
22//The PID is based on the likelihood of all the four ITS' layers, //
23//without using the truncated mean for the dE/dx. The response //
24//functions for each layer are convoluted Landau-Gaussian functions. //
25// Origin: Elena Bruna bruna@to.infn.it, Massimo Masera masera@to.infn.it//
26//-----------------------------------------------------------------------//
27
28#include "AliITSpidESD2.h"
af885e0f 29#include "AliESDEvent.h"
e62c1aea 30#include "AliESDtrack.h"
31#include "AliITStrackV2.h"
60b9526b 32#include "AliITSRecPoint.h"
e62c1aea 33#include "AliITStrackerMI.h"
34#include "AliITSLoader.h"
35#include "AliITSPident.h"
36#include "AliITSSteerPid.h"
37#include "AliLog.h"
38
39ClassImp(AliITSpidESD2)
40//_________________________________________________________________________
94631b2f 41 AliITSpidESD2::AliITSpidESD2():AliITSpidESD(),
42fTracker(0),
43fLoader(0),
44fSp(0)
e62c1aea 45{ //
46 // The main constructor
e62c1aea 47}
48//_________________________________________________________________________
94631b2f 49AliITSpidESD2::AliITSpidESD2(AliITStrackerMI* tracker,AliITSLoader* loader):AliITSpidESD(),
50fTracker(0),
51fLoader(0),
52fSp(0)
e62c1aea 53{ //
54 // The main constructor
55 fTracker=tracker;
56 fLoader=loader;
57 fSp=new AliITSSteerPid();
58 fSp->InitLayer();
59}
60//_________________________________________________________________________
61AliITSpidESD2::~AliITSpidESD2(){
62 //destructor
63
64 if(fSp)delete fSp;
65
66}
67//______________________________________________________________________
94631b2f 68AliITSpidESD2::AliITSpidESD2(const AliITSpidESD2 &ob) :AliITSpidESD(ob),
69fTracker(ob.fTracker),
70fLoader(ob.fLoader),
71fSp(ob.fSp)
72{
e62c1aea 73 // Copy constructor
94631b2f 74
e62c1aea 75}
76
77//______________________________________________________________________
94631b2f 78AliITSpidESD2& AliITSpidESD2::operator=(const AliITSpidESD2& ob ){
e62c1aea 79 // Assignment operator
94631b2f 80 this->~AliITSpidESD2();
81 new(this) AliITSpidESD2(ob);
e62c1aea 82 return *this;
83}
84
85//_________________________________________________________________________
af885e0f 86Int_t AliITSpidESD2::MakePID(AliESDEvent *event)
e62c1aea 87{
88
89 //
90 // This function calculates the "detector response" PID probabilities
91 //
92 Double_t xr,par[5];
93 AliITStrackV2* track=0;
94 fLoader->LoadRecPoints();
95 TTree *cTree=fLoader->TreeR();
96 fTracker->LoadClusters(cTree);
b68da4a2 97 printf("==== Landau Fit PID ITS ====== \n");
e62c1aea 98 Int_t ntrk=event->GetNumberOfTracks();
99 Double_t momits;
100 // for (Int_t i=0; i<ntrk; i++) {
101 for (Int_t i=0; i<ntrk; i++) {
102 AliESDtrack *esdtr=event->GetTrack(i);
103 if ((esdtr->GetStatus()&AliESDtrack::kITSin )==0)
104 if ((esdtr->GetStatus()&AliESDtrack::kITSout)==0) continue;
105
106 track = new AliITStrackV2(*esdtr);
107 Double_t dEdxsignal=track->GetdEdx();
108 track->GetExternalParameters(xr,par);
109 if (par[4]!=0) {
110 Float_t lamb=TMath::ATan(par[3]);
111 momits=1/(TMath::Abs(par[4])*TMath::Cos(lamb));
112 }
113 else {
114 AliWarning("Null particle momentum in ITS");
115 momits = 0.;
116 }
117 Double_t snp=track->GetSnp();
118 Double_t tgl=track->GetTgl();
119 const Int_t kns=AliPID::kSPECIES;
120 Double_t condprobfun[kns];
121 for(Int_t ii=0;ii<kns;ii++)condprobfun[ii]=0;
b68da4a2 122 Int_t cluind[12];
123 for(Int_t ii=0;ii<12;ii++){
124 cluind[ii]=track->GetClusterIndex(ii);
e62c1aea 125 }
b68da4a2 126 AliITSRecPoint* cluarr[12];
127 Float_t qclu[8],qclucorr[8],nlay[8];
1fad94b4 128 for(Int_t ii=0;ii<8;ii++){
129 qclu[ii]=0;
130 qclucorr[ii]=0;
131 nlay[ii]=0;
e62c1aea 132 }
b68da4a2 133 Int_t jj=0;
1fad94b4 134 cout<<"track = "<<i<<endl;
135 for(Int_t ij=0;ij<12;ij++){
136 cluind[ij]=track->GetClusterIndex(ij);
137 cout<<cluind[ij]<<endl;
138 if(cluind[ij]>0){
139 cluarr[ij]=(AliITSRecPoint*)fTracker->GetCluster(cluind[ij]);
140 Int_t lay=cluarr[ij]->GetLayer();
141 cout<<"lay = "<<lay<<endl;
b68da4a2 142 if(lay>1){//sdd+ssd only
1fad94b4 143 qclu[jj]=cluarr[ij]->GetQ();
b68da4a2 144 qclucorr[jj]=qclu[jj]*TMath::Sqrt((1-snp*snp)/(1+tgl*tgl));
145 nlay[jj]=lay;
146 jj++;
147 }
148 else qclucorr[jj]=-1;
149 }
e62c1aea 150 }
b68da4a2 151
e62c1aea 152 Float_t prip=0.33;
153 Float_t prik=0.33;
154 Float_t pripi=0.33;
155 Float_t prie=0.;
b68da4a2 156 AliITSPident mypid(momits,dEdxsignal,fSp,qclucorr,nlay,prip,prik,pripi,prie);
157 condprobfun[0]=mypid.GetProdCondFunPi();//el --PID in the ITS does not distinguish among Pi,el,mu
158 condprobfun[1]=mypid.GetProdCondFunPi();//mu
159 condprobfun[2]=mypid.GetProdCondFunPi();//pi
e62c1aea 160 condprobfun[3]=mypid.GetProdCondFunK();//kaon
161 condprobfun[4]=mypid.GetProdCondFunPro();//pro
162
163 esdtr->SetITSpid(condprobfun);
164
165 delete track;
1fad94b4 166 }
e62c1aea 167 fTracker->UnloadClusters();
168 fLoader->UnloadRecPoints();
169 return 0;
170}