23 #include <TClonesArray.h>
25 #include "AliKalmanTrack.h"
26 #include "Riostream.h"
69 fcorr=( 0.766 +0.9692*xc -1.267*xc*xc )*( 1.-TMath::Exp(-xc*64.75) );
70 if(fcorr<=0.1)fcorr=0.1;
88 TVector q(*( this->
GetVec(track) ));
93 Int_t nl=0;
for(Int_t i=0;i<ml;i++){
if(q(i)>
fSigmin){vf[nl]=q(i+1);nl++;}}
96 case 1:q(6)=q(1);
break;
97 case 2:q(6)=(q(1)+q(2))/2.;
break;
99 for(
int fi=0;fi<2;fi++){
101 do{ swap=0;
float qmin=vf[fi];
102 for(
int j=fi+1;j<nl;j++)
103 if(qmin>vf[j]){qmin=vf[j];vf[j]=vf[fi];vf[fi]=qmin;swap=1;};
106 q(6)= (vf[0]+vf[1])/2.;
109 for(Int_t i=0;i<nl;i++){q(i+1)=vf[i];} this->
SetVec(track,q);
117 Float_t q[6],qm,qmin;
119 if(narr>0&&narr<7){ml=narr;}
else{
return 0;};
120 nl=0;
for(Int_t i=0;i<ml;i++){
if(qarr[i]>
fSigmin){q[nl]=qarr[i];nl++;}}
123 case 1:qm=q[0];
break;
124 case 2:qm=(q[0]+q[1])/2.;
break;
127 for(
int fi=0;fi<2;fi++){
128 do{ swap=0; qmin=q[fi];
129 for(
int j=fi+1;j<nl;j++)
130 if(qmin>q[j]){qmin=q[j];q[j]=q[fi];q[fi]=qmin;swap=1;};
143 Float_t qmpi,qmk,sigpi,sigk,dpi,dk,ppi,pk;
152 cout<<
"qmpi,sigpi,qmk,sigk="<<qmpi<<
" "<<sigpi<<
" "<<qmk<<
" "<<sigk<<endl;
153 cout<<
"appi,apk="<<appi<<
","<<apk<<endl;
155 Float_t dqpi=(q-qmpi)/sigpi;
156 Float_t dqk =(q-qmk )/sigk;
157 dpi =TMath::Abs(dqpi);
159 Double_t dn=appi*TMath::Gaus(q,qmpi,sigpi)+apk*TMath::Gaus(q,qmk,sigk);
161 ppi=appi*TMath::Gaus(q,qmpi,sigpi)/dn;
162 pk = apk*TMath::Gaus(q,qmk, sigk )/dn;
164 Float_t rpik=ppi/(pk+0.0000001);
166 cout<<
"q,dqpi,dqk, Wpik: ppi,pk,rpik="
167 <<q<<
" "<<dqpi<<
" "<<dqk<<
" "<<ppi<<
" "<<pk<<
" "<<rpik<<endl;
170 if( pk>ppi){
return Kaon();}
else{
return Pion();}
177 Float_t qmpi,qmk,qmp,sigpi,sigk,sigp,ppi,pk,pp;
178 Float_t appi,apk,app;
192 Double_t dn= appi*TMath::Gaus(q,qmpi,sigpi)
193 +apk*TMath::Gaus(q,qmk,sigk)+app*TMath::Gaus(q,qmp,sigp);
195 ppi=appi*TMath::Gaus(q,qmpi,sigpi)/dn;
196 pk = apk*TMath::Gaus(q,qmk, sigk )/dn;
197 pp = app*TMath::Gaus(q,qmp, sigp )/dn;
202 cout<<
" Wpikp: mid,sig pi,k,p="<<qmpi<<
" "<<sigpi<<
"; "<<qmk<<
" "<<sigk<<
"; "
203 <<qmp<<
" "<<sigp<<
"; "<<endl;
204 cout<<
" faprob: "<<appi<<
" "<<apk<<
" "<<app<<endl;
205 cout<<
" ppi,pk,pp="<<ppi<<
" "<<pk<<
" "<<pp<<endl;
207 if( ppi>pk&&ppi>pp ) {
return Pion(); }
208 if(pk>pp){
return Kaon();}
else{
return Proton();}
222 Double_t xk,par[5]; track->GetExternalParameters(xk,par);
223 Float_t phi=TMath::ASin(par[2]) + track->GetAlpha();
224 if (phi<-TMath::Pi()) phi+=2*TMath::Pi();
225 if (phi>=TMath::Pi()) phi-=2*TMath::Pi();
226 Float_t lam=TMath::ATan(par[3]);
227 Float_t pt1=TMath::Abs(par[4]);
228 Float_t mom=1./(pt1*TMath::Cos(lam));
229 Float_t dedx=track->GetdEdx();
231 cout<<
"TPCtrack dedx,mom,pcode="<<dedx<<
","<<mom<<
","<<pcode<<endl;
232 return pcode?pcode:211;
264 if ( pm<=
fcut[1][0] )
267 if ( pm<=
fcut[2][0] )
268 {
if( q<fCutKa->Eval(pm) ){
fWpi=1.;
return Pion(); }
269 else {
fWk =1.;
return Kaon();} }
271 if ( pm<=
fcut[3][0] ){
272 if( q<fCutKa->Eval(pm) )
275 {
if ( q<=fCutPr->Eval(pm) )
280 if ( pm<=
fcut[4][0] ){
281 if( q<fCutKaTune*fCutKa->Eval(pm) )
284 {
if( q<fCutPr->Eval(pm) )
288 if ( pm<=
fcut[5][0] ){
292 if ( pm<=
fcut[6][0] ){
296 if ( pm<=
fcut[7][0] ){
300 if ( pm<=
fcut[8][0] ){
302 else {
return Wpik(8,q);};
304 if ( pm<=
fcut[9][0] ){
306 else {
return Wpik(9,q);}}
308 if( pm<=
fcut[10][0] ){
310 else {
return Wpik(10,q);};
312 if( pm<=
fcut[11][0] ){
return Wpikp(11,q); }
314 if( pm<=
fcut[12][0] )
315 {
return Wpikp(12,q); };
321 Float_t klo,Float_t khi,Float_t plo,Float_t phi)
339 TClonesArray& arr=*
trs;
340 new( arr[ntrack] ) TVector(info);
347 TClonesArray& arr=*
trs;
348 return (TVector*)arr[ntrack];
356 if( ((TVector*)
trs->At(track))->IsValid() )
357 {TVector yy( *((TVector*)
trs->At(track)) );xx=yy; }
358 Int_t j=(Int_t)xx(0);
if(j>4)
return;
359 xx(++j)=Edep;xx(0)=j;
360 TClonesArray &arr=*
trs;
361 new(arr[
track])TVector(xx);
369 if( ((TVector*)
trs->At(track))->IsValid() )
370 {TVector yy( *((TVector*)
trs->At(track)) );xx=yy; }
372 TClonesArray &arr=*
trs;
373 new(arr[
track])TVector(xx);
381 if( ((TVector*)
trs->At(track))->IsValid() )
382 {TVector yy( *((TVector*)
trs->At(track)) );xx=yy; }
384 {xx(11)=partcode;
fmxtrs++;
385 TClonesArray &arr=*
trs;
386 new(arr[
track])TVector(xx);
394 cout<<
fmxtrs<<
" tracks in AliITSPid obj."<<endl;
395 if( ((TVector*)
trs->At(track))->IsValid() )
396 {TVector xx( *((TVector*)
trs->At(track)) );
400 {cout<<
"No data for track "<<track<<endl;
return;}
407 if(
trs->GetEntries()==0){cout<<
"No entries in TAB"<<endl;
return;}
408 cout<<
"------------------------------------------------------------------------"<<endl;
409 cout<<
"Nq"<<
" q1 "<<
" q2 "<<
" q3 "<<
" q4 "<<
" q5 "<<
410 " Qtrm " <<
" Wpi "<<
" Wk "<<
" Wp "<<
"Pmom "<<endl;
411 cout<<
"------------------------------------------------------------------------"<<endl;
412 for(Int_t i=0;i<
trs->GetEntries();i++)
414 TVector xx( *((TVector*)
trs->At(i)) );
415 if( xx.IsValid() && xx(0)>0 )
420 xx(6)=(this->
Qtrm(i));
433 for(Int_t j=1;j<11;j++){
434 cout.width(7);cout.precision(5);cout<<xx(j);
439 TClonesArray &arr=*
trs;
440 new(arr[i])TVector(xx);
450 for(Int_t i=0;i<
trs->GetEntries();i++){
452 TClonesArray &arr=*
trs;
453 new(arr[i])TVector(xx);
476 trs =
new TClonesArray(
"TVector",ntrack);
477 TClonesArray &arr=*
trs;
478 for(Int_t i=0;i<ntrack;i++)
new(arr[i])TVector(0,11);
485 TF1 frmska(
"x_frmska",
"1.46-7.82*x+16.78*x^2-15.53*x^3+5.24*x^4 ",
487 fCutKa =
new TF1(
"fkaons",
488 "1.25+0.044/x/x+1.25+0.044*x-13.87*x^2+22.37*x^3-10.05*x^4-2.5*x_frmska",
490 fCutPr =
new TF1(
"fprotons",
491 "0.83*(15.32-56.094*x+89.962*x^2-66.1856*x^3+18.4052*x^4)",
500 SetCut( 1, 0.120, 0. , 0. , kinf , kinf , kinf , kinf );
501 SetCut( 2, 0.200, 0. , 6.0 , 6.0 , kinf , kinf , kinf );
502 SetCut( 3, 0.400, 0. , 3.5 , 3.5 , 9.0 , 9.0 , kinf );
503 SetCut( 4, 0.450, 0. , 1.9 , 1.9 , 4.0 , 4.0 , kinf );
505 SetCut( 5, 0.500, 0.976, 0.108, 1.484 , 0.159 , 3.5 , kinf );
506 SetCut( 6, 0.550, 0.979, 0.108, 1.376 , 0.145 , 3.0 , kinf );
508 SetCut( 7, 0.600, 0.984, 0.111, 1.295 , 0.146 , 2.7 , kinf );
509 SetCut( 8, 0.650, 0.989, 0.113, 1.239 , 0.141 , 2.5 , kinf );
510 SetCut( 9, 0.730, 0.995, 0.109, 1.172 , 0.132 , 2.0 , kinf );
512 SetCut( 10, 0.830, 1.008, 0.116, 1.117 , 0.134 , 1.703, 0.209 );
513 SetCut( 11, 0.930, 1.019, 0.115, 1.072 , 0.121 , 1.535, 0.215 );
514 SetCut( 12, 1.230, 1.035, 0.117, 1.053 , 0.140 ,1.426, 0.270);
TClonesArray * trs
pointer
void SetVec(Int_t track, TVector info) const
Float_t Qtrm(Int_t track) const
Float_t fCutPrTune
tune cuts
Int_t GetPcode(TClonesArray *, Float_t) const
Float_t Qcorr(Float_t xc)
void PrintPID(Int_t track)
void SetCut(Int_t n, Float_t pm, Float_t pilo, Float_t pihi, Float_t klo, Float_t khi, Float_t plo, Float_t phi)
AliTPCPid & operator=(const AliTPCPid ¶m)
Int_t Wpik(Int_t nc, Float_t q)
void SetPcod(Int_t track, Int_t Pcod)
void SetEdep(Int_t track, Float_t Edep)
TVector * GetVec(Int_t track) const
AliTPCPid(Int_t ntrs=1000)
void SetPmom(Int_t track, Float_t Pmom)
Int_t Wpikp(Int_t nc, Float_t q)