1 /**************************************************************************
2 * Authors : Massimo Venaruzzo (massimo.venaruzzo@ts.infn.it) *
3 * Enrico Fragiacomo (enrico.fragiacomo@ts.infn.it) *
4 * Contributors are mentioned in the code where appropriate. *
6 * Permission to use, copy, modify and distribute this software and its *
7 * documentation strictly for non-commercial purposes is hereby granted *
8 * without fee, provided that the above copyright notice appears in all *
9 * copies and that both the copyright notice and this permission notice *
10 * appear in the supporting documentation. The authors make no claims *
11 * about the suitability of this software for any purpose. It is *
12 * provided "as is" without express or implied warranty. *
13 **************************************************************************/
15 //-----------------------------------------------------------------
16 // AliAnalysisTaskSigma1385 class
17 //-----------------------------------------------------------------
23 #include "AliAnalysisManager.h"
24 #include <AliMCEventHandler.h>
25 #include <AliMCEvent.h>
42 #include "AliESDEvent.h"
43 #include "AliAODEvent.h"
44 #include "AliCascadeVertexer.h"
45 #include "AliESDcascade.h"
46 #include "AliAODcascade.h"
47 #include "AliAnalysisTaskSigma1385.h"
48 #include "AliESDtrackCuts.h"
50 ClassImp(AliAnalysisTaskSigma1385)
52 //________________________________________________________________________
53 AliAnalysisTaskSigma1385::AliAnalysisTaskSigma1385()
54 : AliAnalysisTaskSE(), fAnalysisType("ESD"), fCollidingSystems(0), fDataType("REAL"),
55 fListHistCascade(0), fHistEventMultiplicity(0), fHistEventMultiplicityRAVS(0), fNtuple1(0), fNtuple2(0),fNtuple3(0), fNtuple4(0),
57 //-------------------------------- For PID
72 fTOFcalibrateESD(!isMC),
73 fTOFcorrectTExp(kTRUE),
76 fTOFresolution(100.0),
81 //--------------------------------
87 //________________________________________________________________________
88 AliAnalysisTaskSigma1385::AliAnalysisTaskSigma1385(const char *name)
89 : AliAnalysisTaskSE(name), fAnalysisType("ESD"), fCollidingSystems(0),fDataType("REAL"),
90 fListHistCascade(0), fHistEventMultiplicity(0), fHistEventMultiplicityRAVS(0), fNtuple1(0), fNtuple2(0), fNtuple3(0), fNtuple4(0),
92 //-------------------------------- For PID
108 fTOFcalibrateESD(!isMC),
109 fTOFcorrectTExp(kTRUE),
112 fTOFresolution(100.0),
117 //--------------------------------
120 // Output slot #0 writes into a TList container (Cascade)
121 DefineOutput(1, TList::Class());
124 //________________________________________________________________________
125 void AliAnalysisTaskSigma1385::UserCreateOutputObjects()
127 fListHistCascade = new TList();
129 if(! fHistEventMultiplicity ){
130 fHistEventMultiplicity = new TH1F( "fHistEventMultiplicity" , "Nb of Events" , 4, -1.0, 3.0 );
131 fListHistCascade->Add(fHistEventMultiplicity);
134 if(! fHistEventMultiplicityRAVS ){
135 fHistEventMultiplicityRAVS = new TH1F( "fHistEventMultiplicityRAVS" , "Nb of Events Rejected After Vertex selection" , 4, -1.0, 3.0 );
136 fListHistCascade->Add(fHistEventMultiplicityRAVS);
140 fNtuple1 = new TNtuple("fNtuple1","Ntuple1","TrkNmb");
141 fNtuple1->SetDirectory(0);
142 fListHistCascade->Add(fNtuple1);
146 fNtuple2 = new TNtuple("fNtuple2","Ntuple2","s:dcal:lCosPoinAn:lDaugDCA:lambdap:lambdapt:lambdamass");
147 fNtuple2->SetDirectory(0);
148 fListHistCascade->Add(fNtuple2);
152 fNtuple3 = new TNtuple("fNtuple3","Ntuple3","c:dcapi:ppi:ptpi:bachphi:bachtheta:okPiTPC:okPiTOF");
153 fNtuple3->SetDirectory(0);
154 fListHistCascade->Add(fNtuple3);
158 fNtuple4 = new TNtuple("fNtuple4","Ntuple4","dca:mc:phi:theta:eta:y:pt:p:opang:invmass");
159 fListHistCascade->Add(fNtuple4);
163 }// end UserCreateOutputObjects
166 //________________________________________________________________________
167 void AliAnalysisTaskSigma1385::UserExec(Option_t *)
171 // Called for each event
174 Info("AliAnalysisTaskSigma1385","Starting UserExec");
176 AliMCEventHandler* eventHandler;
177 AliMCEvent* mcEvent=0;
179 if(fDataType == "SIM") {
181 eventHandler = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
183 Printf("ERROR: Could not retrieve MC event handler");
187 mcEvent = eventHandler->MCEvent();
189 Printf("ERROR: Could not retrieve MC event");
196 if(fDataType == "SIM") {stack = mcEvent->Stack(); fIsMC=1; isMC=1;}
198 AliESDEvent *lESDevent = 0x0;
199 AliAODEvent *lAODevent = 0x0;
202 // Connect to the InputEvent
203 Int_t ncascades = -1;
204 if(fAnalysisType == "ESD"){
205 lESDevent = dynamic_cast<AliESDEvent*>( InputEvent() );
207 Printf("ERROR: lESDevent not available \n");
210 ncascades = lESDevent->GetNumberOfCascades();
213 if(fAnalysisType == "AOD"){
214 lAODevent = dynamic_cast<AliAODEvent*>( InputEvent() );
216 Printf("ERROR: lAODevent not available \n");
219 ncascades = lAODevent->GetNumberOfCascades();
223 //------------------------------for PID
229 // ----> set TPC range for PID and calibration
230 SetTPCrange(5.0, 3.0);
233 // ----> set ITS range for PID
236 // ----> set TPC calibration
237 if (fDataType=="SIM") SetTPCpar(2.15898 / 50.0, 1.75295E1, 3.40030E-9, 1.96178, 3.91720);
238 else SetTPCpar(1.41543 / 50.0, 2.63394E1, 5.0411E-11, 2.12543, 4.88663);
240 // ----> set the TOF calibration depending on type of input (sim/data)
241 SetTOFcorrectTExp(kTRUE);
243 SetTOFresolution(100.0);
244 if (fDataType=="SIM")
246 SetTOFcalibrateESD(kFALSE);
252 SetTOFcalibrateESD(kTRUE);
253 SetTOFtuneMC(kFALSE);
259 fESDpid = new AliESDpid;
260 fESDpid->GetTPCResponse().SetBetheBlochParameters(fTPCpar[0],fTPCpar[1],fTPCpar[2],fTPCpar[3],fTPCpar[4]);
263 // initialize DB to current run
264 Int_t run = lESDevent->GetRunNumber();
267 //cout << "Run = " << run << " -- LAST = " << fLastRun << endl;
270 // setup TOF maker & calibration
271 if (!fTOFcalib) fTOFcalib = new AliTOFcalib;
272 fTOFcalib->SetCorrectTExp(fTOFcorrectTExp);
273 if (!fTOFmaker) fTOFmaker = new AliTOFT0maker(fESDpid, fTOFcalib);
274 fTOFmaker->SetTimeResolution(fTOFresolution);
276 AliCDBManager *cdb = AliCDBManager::Instance();
277 cdb->ClearCache(); // suggestion by Annalisa
278 cdb->Clear(); // suggestion by Annalisa
279 cdb->SetDefaultStorage("raw://");
281 fTOFcalib->SetCorrectTExp(fTOFcorrectTExp);
285 // if required, calibrate the TOF t0 maker with current event
286 if (fTOFcalibrateESD) fTOFcalib->CalibrateESD(lESDevent);
287 if (fTOFtuneMC) fTOFmaker->TuneForMC(lESDevent);
290 fTOFmaker->ComputeT0TOF(lESDevent);
291 fTOFmaker->ApplyT0TOF(lESDevent);
292 fESDpid->MakePID(lESDevent, kFALSE, 0.);
296 //--------------------------------------------------------
299 fHistEventMultiplicity->Fill(1);
301 //Some Quantities to characterize the event
303 Double_t b = lESDevent->GetMagneticField();
304 Int_t TrackNumber = lESDevent->GetNumberOfTracks();
307 //---------------------------
308 // new part from AliCascadeVertexer (use vertexer for reconstructing Sigma(1385)
310 //const AliESDVertex *vtxT3D=lESDevent->GetPrimaryVertex();
311 const AliESDVertex *vtxT3D=lESDevent->GetPrimaryVertexTracks();
312 if(vtxT3D->GetNContributors()<1) {
314 vtxT3D= lESDevent->GetPrimaryVertexSPD();
315 if(vtxT3D->GetNContributors()<1){
318 fHistEventMultiplicityRAVS->Fill(1);
325 Double_t xPrimaryVertex=vtxT3D->GetXv();
326 Double_t yPrimaryVertex=vtxT3D->GetYv();
327 Double_t zPrimaryVertex=vtxT3D->GetZv();
329 if ( zPrimaryVertex>10 || zPrimaryVertex<-10) return;
331 //-------------------------------------------------------
332 // New Part about tracks global selection criteria
333 //-------------------------------------------------------
335 AliESDtrackCuts* esdTrackCuts = new AliESDtrackCuts("AliESDtrackCuts");
337 esdTrackCuts->SetAcceptKinkDaughters(0); // 0 = kFalse
338 esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);
339 esdTrackCuts->SetMaxChi2PerClusterTPC(4);
340 esdTrackCuts->SetMinNClustersTPC(70);
343 //-------------------------------------------------------
345 //stores relevant V0s in an array
346 Int_t nV0=(Int_t)lESDevent->GetNumberOfV0s();
349 for (Int_t i=0; i<nV0; i++) {
350 AliESDv0 *v=lESDevent->GetV0(i);
351 if (v->GetOnFlyStatus()) continue; // if kTRUE, then this V0 is recontructed
355 nV0=vtcs.GetEntriesFast();
357 //-------------------------------------------------------
358 // loops over bachelor tracks
359 // stores relevant tracks in another array
361 Int_t nentr=(Int_t)lESDevent->GetNumberOfTracks();
362 TArrayI trk(nentr); Int_t ntr=0;
364 for (Int_t i=0; i<nentr; i++) {
365 AliESDtrack *esdtr=lESDevent->GetTrack(i);
367 if ( !(esdtr->GetStatus() & AliESDtrack::kITSrefit) ) continue;
368 if ( !(esdtr->GetStatus() & AliESDtrack::kTPCrefit) ) continue;
371 if (! (esdTrackCuts->AcceptTrack(esdtr)) ) continue;
378 //-----------------------------------------------------
379 // nested loops over V0s and bachelors
380 Float_t massLambda = 1.11568;
382 AliCascadeVertexer *cascvert = new AliCascadeVertexer();
383 for (Int_t i=0; i<nV0; i++) { //loop on V0s
386 AliESDv0 *v=(AliESDv0*)vtcs.UncheckedAt(i);
388 Double_t lambdaMass = 0;
390 Float_t lambdaPt = 0;
391 Float_t LambdaDCA = 0; // DCA between Lambda and Primary Vertex
392 Double_t v0cospointangle = 0;
393 Float_t v0daughtersDCA = 0;
396 // Lambda quality cuts
397 UInt_t lIdxPosXi = (UInt_t) TMath::Abs( v->GetPindex() );
398 UInt_t lIdxNegXi = (UInt_t) TMath::Abs( v->GetNindex() );
400 AliESDtrack *pTrackXi = lESDevent->GetTrack( lIdxPosXi );
401 AliESDtrack *nTrackXi = lESDevent->GetTrack( lIdxNegXi );
403 // Filter like-sign V0
404 if ( pTrackXi->GetSign() == nTrackXi->GetSign()) continue;
406 // WARNING: the following selections cannot be done for AOD yet...
409 v->ChangeMassHypothesis(kLambda0); // the v0 must be Lambda
412 if ( (TMath::Abs(v->GetEffMass()-massLambda))<0.1) {
414 if( !(pTrackXi->GetStatus() & AliESDtrack::kTPCrefit)) continue;
415 if( !(nTrackXi->GetStatus() & AliESDtrack::kTPCrefit)) continue;
418 if( (pTrackXi->GetTPCNcls() ) < 70) continue;
419 if( (nTrackXi->GetTPCNcls() ) < 70) continue;
421 strness=1; lambdaMass = v->GetEffMass(); lambdaP = v->P(); lambdaPt = v->Pt(); LambdaDCA = v->GetD(xPrimaryVertex,yPrimaryVertex,zPrimaryVertex); v0cospointangle = v->GetV0CosineOfPointingAngle(); v0daughtersDCA = v->GetDcaV0Daughters();
428 v->ChangeMassHypothesis(kLambda0Bar); // the v0 must be Anti Lambda
432 if ( (TMath::Abs(v->GetEffMass()-massLambda))<0.1) {
434 if( !(pTrackXi->GetStatus() & AliESDtrack::kTPCrefit)) continue;
435 if( !(nTrackXi->GetStatus() & AliESDtrack::kTPCrefit)) continue;
438 if( (pTrackXi->GetTPCNcls() ) < 70) continue;
439 if( (nTrackXi->GetTPCNcls() ) < 70) continue;
441 Int_t temp=strness+1; strness=-1*temp; lambdaMass = v->GetEffMass(); lambdaP = v->P(); lambdaPt = v->Pt(); LambdaDCA = v->GetD(xPrimaryVertex,yPrimaryVertex,zPrimaryVertex); v0cospointangle = v->GetV0CosineOfPointingAngle(); v0daughtersDCA = v->GetDcaV0Daughters();
446 if(strness==0) continue;
449 for (Int_t j=0; j<ntr; j++) {//loop on tracks
456 if ((bidx==v->GetIndex(0))||(bidx==v->GetIndex(1))) continue; // bach and V0's daughter's must be different!
458 AliESDtrack *btrk=lESDevent->GetTrack(bidx);
460 if ( !(btrk->GetStatus() & AliESDtrack::kTPCrefit) ) continue;
462 if ( (bachTPCcls=btrk->GetTPCNcls()) <70) continue;
464 Bool_t *IsOkTrack = IsSelected(btrk); //for Alberto's PID
466 Bool_t *okTrack = new Bool_t[5];
468 for(Int_t k=0; k<5; k++) okTrack[k]=IsOkTrack[k];
471 Int_t BachCharge = btrk->Charge();
472 Float_t PionDCA = TMath::Abs(btrk->GetD(xPrimaryVertex,yPrimaryVertex,b)); // DCA between Bachelor and Primary Vertex
474 Double_t bachphi = btrk->Phi();
475 Double_t bachtheta = btrk->Theta();
476 Double_t bachmass = 0.13957;
477 Double_t bachp = btrk->GetP();
478 Double_t bachpt = btrk->Pt();
481 // Distance between Lambda and Pion bachelor
482 AliESDv0 v0(*v), *pv0=&v0;
483 AliExternalTrackParam bt(*btrk), *pbt=&bt;
484 Double_t dca=cascvert->PropagateToDCA(pv0,pbt,b); // distance bwn V0 and bach (in cm)
485 if (dca > 10.0) continue; // Note: was 0.1! Enlarged->further filter in second pass analysis
488 AliESDcascade cascade(*pv0,*pbt,bidx);//constucts a sigma1385 candidate
489 AliESDcascade *xi = &cascade;
492 UInt_t lBachIdx = (UInt_t) TMath::Abs( xi->GetBindex() );
493 AliESDtrack *bachTrackXi = lESDevent->GetTrack( lBachIdx );
498 if(fDataType == "SIM") {
500 Int_t pLabel = TMath::Abs(pTrackXi->GetLabel());
501 Int_t nLabel = TMath::Abs(nTrackXi->GetLabel());
502 Int_t bachLabel = TMath::Abs(bachTrackXi->GetLabel());
504 Int_t motherpLabel = stack->Particle(pLabel)->GetFirstMother();
505 Int_t mothernLabel = stack->Particle(nLabel)->GetFirstMother();
506 Int_t motherbachLabel = stack->Particle(bachLabel)->GetFirstMother();
509 //cout<< "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
510 //cout<< "plabel " << pLabel << " nlabel " << nLabel << " mother p " << motherpLabel << " mother n " << mothernLabel << " bachlabel " << bachLabel << " mother bach " << motherbachLabel << endl;
511 //cout<< "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
513 if (motherpLabel>-1 && mothernLabel>-1) {
514 TParticle *plambda = stack->Particle(motherpLabel);
515 Int_t grandmother = plambda->GetFirstMother();
517 motherpLabel = TMath::Abs(motherpLabel);
518 mothernLabel = TMath::Abs(mothernLabel);
519 //motherbachLabel = TMath::Abs(motherbachLabel);
521 //cout<< "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
522 //cout<< "plabel " << pLabel << " nlabel " << nLabel << " mother p " << motherpLabel << " mother n " << mothernLabel << " mother lambda " << grandmother << " bachlabel " << bachLabel << " mother bach " << motherbachLabel << endl;
523 //cout<< "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
525 if (motherbachLabel >-1){
528 //cout<< "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
529 //cout<< "mother lambda " << grandmother << " mother bach " << motherbachLabel << " PDG Code "<< stack->Particle(grandmother)->GetPdgCode() << endl;
530 //cout<< "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
532 if( (motherpLabel==mothernLabel) && (grandmother==motherbachLabel) &&
533 ( (TMath::Abs(stack->Particle(grandmother)->GetPdgCode())==3114) ||
534 (TMath::Abs(stack->Particle(grandmother)->GetPdgCode())==3224) ) ) MCtrue=1;
542 Double_t lBachMomX = 0., lBachMomY = 0., lBachMomZ = 0.;
543 Double_t lPMom[3]= {0.,0.,0.,};
544 Double_t lNMom[3]= {0.,0.,0.,};
545 Float_t lLambdaMomX = 0., lLambdaMomY = 0., lLambdaMomZ = 0.;
546 xi->GetBPxPyPz( lBachMomX, lBachMomY, lBachMomZ );
547 xi->GetPPxPyPz( lPMom[0], lPMom[1], lPMom[2] );
548 xi->GetNPxPyPz( lNMom[0], lNMom[1], lNMom[2] );
549 lLambdaMomX=lPMom[0]+lNMom[0];
550 lLambdaMomY=lPMom[1]+lNMom[1];
551 lLambdaMomZ=lPMom[2]+lNMom[2];
553 Float_t lRapXi = xi->RapXi();
554 Float_t lEta = xi->Eta();
555 Float_t lTheta = xi->Theta();
556 Float_t lPhi = xi->Phi();
557 Float_t lPt = xi->Pt();
558 Float_t lP = xi->P();
560 // Support variables for invariant mass calculation
561 TLorentzVector Lambda, Pion, Sigma;
562 Double_t Elambda = TMath::Sqrt( lLambdaMomX*lLambdaMomX + lLambdaMomY*lLambdaMomY + lLambdaMomZ*lLambdaMomZ + lambdaMass*lambdaMass );
563 Double_t Epion = TMath::Sqrt( lBachMomX*lBachMomX + lBachMomY*lBachMomY + lBachMomZ*lBachMomZ + bachmass*bachmass) ;
565 Lambda.SetPxPyPzE(lLambdaMomX, lLambdaMomY, lLambdaMomZ, Elambda);
566 Pion.SetPxPyPzE(lBachMomX, lBachMomY, lBachMomZ, Epion);
568 Sigma = Lambda + Pion;
570 Double_t openingangle, invmass=0;
572 openingangle = TMath::ACos( ( lBachMomX*lLambdaMomX + lBachMomY*lLambdaMomY + lBachMomZ*lLambdaMomZ ) / ( (TMath::Sqrt( lBachMomX*lBachMomX + lBachMomY*lBachMomY + lBachMomZ*lBachMomZ )) *(TMath::Sqrt( lLambdaMomX*lLambdaMomX + lLambdaMomY*lLambdaMomY +
573 lLambdaMomZ*lLambdaMomZ ) ) ) );
578 fNtuple1->Fill( TrackNumber );
579 fNtuple2->Fill( (1.*strness), LambdaDCA, v0cospointangle, v0daughtersDCA , lambdaP, lambdaPt, lambdaMass );
580 fNtuple3->Fill( (1.*BachCharge), PionDCA, bachp, bachpt, bachphi, bachtheta, okTrack[1], okTrack[2]);
581 fNtuple4->Fill( dca, (1.*MCtrue), lPhi, lTheta, lEta, lRapXi, lPt, lP, openingangle, invmass);
592 Info("AliAnalysisTaskSigma1385","Number of reconstructed Sigma(1385): %d",ncasc);
596 PostData(1, fListHistCascade);
600 //________________________________________________________________________
602 Bool_t *AliAnalysisTaskSigma1385::IsSelected(AliESDtrack *track)
606 Bool_t *okTrack = new Bool_t[5];
608 for (Int_t i=0; i<5; i++) okTrack[i]=kFALSE;
611 AliITSPIDResponse itsrsp(fIsMC);
616 Double_t times[10], tpcNSigma, tpcMaxNSigma, itsSignal, itsNSigma, mom, tofTime, tofSigma, tofRef, tofRel;
617 Bool_t okTOF= kFALSE;
618 Bool_t okTPC= kFALSE;
619 Bool_t okITS= kFALSE;
620 Bool_t isTPC= kFALSE;
621 Bool_t isITSSA= kFALSE;
622 Bool_t isTOF= kFALSE;
625 // get commonly used variables
626 status = (ULong_t)track->GetStatus();
628 isTPC = ((status & AliESDtrack::kTPCin) != 0);
629 isITSSA = ((status & AliESDtrack::kTPCin) == 0 && (status & AliESDtrack::kITSrefit) != 0 && (status & AliESDtrack::kITSpureSA) == 0 && (status & AliESDtrack::kITSpid) != 0);
630 isTOF = (((status & AliESDtrack::kTOFout) != 0) && ((status & AliESDtrack::kTIME) != 0) /* && mom > TMath::Max(b1, b2)*/);
633 // check if the track type matches what is required
634 if (!isTPC && !isITSSA)
636 AliDebug(AliLog::kDebug + 2, "Track is not either a TPC track or a ITS standalone. Rejected");
640 else if (isTPC && !fUseGlobal)
642 AliDebug(AliLog::kDebug + 2, "Global tracks not used. Rejected");
646 else if (isITSSA && !fUseITSSA)
648 AliDebug(AliLog::kDebug + 2, "ITS standalone not used. Rejected");
653 // does a preliminary check on TOF values, if necessary
654 // then, if the reference time or TOF signal are meaningless
655 // even if the 'isTOF' flag is true, switch it to false
658 track->GetIntegratedTimes(times);
659 tofTime = (Double_t)track->GetTOFsignal();
660 tofSigma = fTOFmaker->GetExpectedSigma(mom, times[AliPID::kPion], AliPID::ParticleMass(AliPID::kPion));
661 tofRef = times[AliPID::kPion];
662 if (tofRef <= 0.0 && tofSigma <= 0.0) isTOF = kFALSE;
668 if (isTPC) // this branch is entered by all global tracks
673 tpcNSigma = TMath::Abs(fESDpid->NumberOfSigmasTPC(track, AliPID::kPion));
674 if (track->GetInnerParam()->P() > fTPCpLimit) tpcMaxNSigma = fMinTPCband; else tpcMaxNSigma = fMaxTPCband;
675 okTPC = (tpcNSigma <= tpcMaxNSigma);
676 AliDebug(AliLog::kDebug + 2, Form("TPC nsigma = %f -- max = %f -- cut %s", tpcNSigma, tpcMaxNSigma, (okTPC ? "passed" : "failed")));
680 // if TPC is not checked, it is as if all tracks do pass the cut
682 AliDebug(AliLog::kDebug + 2, "TPC not checked, track accepted");
685 // check TOF (only if flags are OK)
690 // TOF can be checked only when track is matched there
691 track->GetIntegratedTimes(times);
692 tofTime = (Double_t)track->GetTOFsignal();
693 tofSigma = fTOFmaker->GetExpectedSigma(mom, times[AliPID::kPion], AliPID::ParticleMass(AliPID::kPion));
694 tofRef = times[AliPID::kPion];
696 tofRel = (tofTime - tofRef) / tofSigma;
697 okTOF = ((tofRel >= fMinTOF) && (tofRel <= fMaxTOF));
698 AliDebug(AliLog::kDebug + 2, Form("TOF nsigma = %f -- range = %f %f -- cut %s", tofRel, fMinTOF, fMaxTOF, (okTOF ? "passed" : "failed")));
702 // if TOF is not matched, the answer depends on TPC:
703 // - if TPC is required, track is checked only there and TOF simply ignored
704 // - if TPC is not required, track is rejected when TOF does not match it, if TOF check is required
705 if (fCheckTPC) okTOF = kTRUE; else okTOF = kFALSE;
714 else if (isITSSA) // this branch is entered by all ITS standalone tracks
716 // check dE/dx only if this is required, otherwise ITS standalone are just added but not checked for PID
719 itsSignal = track->GetITSsignal();
720 itsCluMap = track->GetITSClusterMap();
722 for(k = 2; k < 6; k++) if(itsCluMap & (1 << k)) ++nITS;
723 if (nITS < 3) return kFALSE;
724 itsNSigma = itsrsp.GetNumberOfSigmas(mom, itsSignal, AliPID::kPion, nITS, kTRUE);
725 okITS = ((TMath::Abs(itsNSigma)) <= fMaxITSband);
726 AliDebug(AliLog::kDebug + 2, Form("ITS nsigma = %f -- max = %f -- cut %s", itsNSigma, fMaxITSband, (okITS ? "passed" : "failed")));
735 // if we are here, the track is surely bad
748 //cout<<"##########################################"<<endl;
749 //cout<<"isITSSA "<<isITSSA<< " isTPC "<<isTPC<<endl;
750 //cout<<"##########################################"<<endl;
766 //________________________________________________________________________
767 void AliAnalysisTaskSigma1385::Terminate(Option_t *)
769 // Draw result to the screen
770 // Called once at the end of the query