40 #include <TDatabasePDG.h> 43 #include "TTreeStream.h" 49 #include "TObjArray.h" 54 #include "AliHeader.h" 55 #include "AliGenEventHeader.h" 56 #include "AliVEventHandler.h" 58 #include "AliTrackReference.h" 59 #include "AliTrackPointArray.h" 60 #include "AliSysInfo.h" 62 #include "AliPhysicsSelection.h" 63 #include "AliAnalysisTask.h" 64 #include "AliAnalysisManager.h" 65 #include "AliESDEvent.h" 66 #include "AliESDfriend.h" 67 #include "AliMCEvent.h" 68 #include "AliESDInputHandler.h" 69 #include "AliESDVertex.h" 70 #include "AliTracker.h" 71 #include "AliVTrack.h" 72 #include "AliGeomManager.h" 74 #include "AliCentrality.h" 75 #include "AliESDVZERO.h" 76 #include "AliMultiplicity.h" 78 #include "AliESDtrackCuts.h" 79 #include "AliMCEventHandler.h" 84 #include "AliKFParticle.h" 87 #include "AliPIDResponse.h" 89 #include "TStatToolkit.h" 103 , fUseESDfriends(kFALSE)
104 , fReducePileUp(kTRUE)
106 , fFilteredTreeEventCuts(0)
107 , fFilteredTreeAcceptanceCuts(0)
108 , fFilteredTreeRecAcceptanceCuts(0)
110 , fTrigger(AliTriggerAnalysis::kMB1)
111 , fAnalysisMode(kTPCAnalysisMode)
112 , fTreeSRedirector(0)
113 , fCentralityEstimator(0)
114 , fLowPtTrackDownscaligF(0)
115 , fLowPtV0DownscaligF(0)
116 , fFriendDownscaling(-3.)
117 , fProcessAll(kFALSE)
118 , fProcessCosmics(kFALSE)
119 , fProcessITSTPCmatchOut(kFALSE)
125 , fCosmicPairsTree(0)
128 , fPtResPhiPtTPCITS(0)
131 , fPtResEtaPtTPCITS(0)
133 , fPtResCentPtTPCc(0)
134 , fPtResCentPtTPCITS(0)
135 , fCurrentFileName("")
141 DefineOutput(1, TTree::Class());
142 DefineOutput(2, TTree::Class());
143 DefineOutput(3, TTree::Class());
144 DefineOutput(4, TTree::Class());
145 DefineOutput(5, TTree::Class());
146 DefineOutput(6, TTree::Class());
147 DefineOutput(7, TList::Class());
156 delete fFilteredTreeEventCuts;
157 delete fFilteredTreeAcceptanceCuts;
158 delete fFilteredTreeRecAcceptanceCuts;
159 delete fEsdTrackCuts;
168 static Int_t count = 0;
172 Printf(
"Processing %d. file: %s", count, chain->GetCurrentFile()->GetName());
174 fCurrentFileName=chain->GetCurrentFile()->GetName();
176 if (fCurrentFileName.String().CountChar(
'/')<1){
181 if (!fns.IsNull() && !fns.EndsWith(
"/")) fns +=
"/";
182 fns += chain->GetCurrentFile()->GetName();
183 Printf(
"Processing %d. file: %s", count, fns.Data());
184 fCurrentFileName = fns.Data();
199 fTreeSRedirector =
new TTreeSRedirector();
203 fV0Tree = ((*fTreeSRedirector)<<
"V0s").GetTree();
204 fHighPtTree = ((*fTreeSRedirector)<<
"highPt").GetTree();
205 fdEdxTree = ((*fTreeSRedirector)<<
"dEdx").GetTree();
206 fLaserTree = ((*fTreeSRedirector)<<
"Laser").GetTree();
207 fMCEffTree = ((*fTreeSRedirector)<<
"MCEffTree").GetTree();
208 fCosmicPairsTree = ((*fTreeSRedirector)<<
"CosmicPairs").GetTree();
211 fDummyTrack=
new AliESDtrack();
220 Double_t logminPt = TMath::Log10(minPt);
221 Double_t logmaxPt = TMath::Log10(maxPt);
222 Double_t binwidth = (logmaxPt-logminPt)/nbinsPt;
225 for (
Int_t i=1;i<=nbinsPt;i++) {
226 binsPt[i] = minPt + TMath::Power(10,logminPt+i*binwidth);
232 Int_t nbins1PtRes = 300;
234 for (
Int_t i=0;i<=nbins1PtRes;i++) {
235 bins1PtRes[i] = min1PtRes + i*(max1PtRes-min1PtRes)/nbins1PtRes;
241 Int_t nbinsPhi = 100;
243 for (
Int_t i=0;i<=nbinsPhi;i++) {
244 binsPhi[i] = minPhi + i*(maxPhi-minPhi)/nbinsPhi;
252 for (
Int_t i=0;i<=nbinsEta;i++) {
253 binsEta[i] = minEta + i*(maxEta-minEta)/nbinsEta;
259 Int_t nbinsCent = 20;
261 for (
Int_t i=0;i<=nbinsCent;i++) {
262 binsCent[i] = minCent + i*(maxCent-minCent)/nbinsCent;
265 fPtResPhiPtTPC =
new TH3D(
"fPtResPhiPtTPC",
"pt rel. resolution from cov. matrix TPC tracks",nbinsPt,binsPt,nbinsPhi,binsPhi,nbins1PtRes,bins1PtRes);
266 fPtResPhiPtTPCc =
new TH3D(
"fPtResPhiPtTPCc",
"pt rel. resolution from cov. matrix TPC constrained tracks",nbinsPt,binsPt,nbinsPhi,binsPhi,nbins1PtRes,bins1PtRes);
267 fPtResPhiPtTPCITS =
new TH3D(
"fPtResPhiPtTPCITS",
"pt rel. resolution from cov. matrix TPC+ITS tracks",nbinsPt,binsPt,nbinsPhi,binsPhi,nbins1PtRes,bins1PtRes);
269 fPtResEtaPtTPC =
new TH3D(
"fPtResEtaPtTPC",
"pt rel. resolution from cov. matrix TPC tracks",nbinsPt,binsPt,nbinsEta,binsEta,nbins1PtRes,bins1PtRes);
270 fPtResEtaPtTPCc =
new TH3D(
"fPtResEtaPtTPCc",
"pt rel. resolution from cov. matrix TPC constrained tracks",nbinsPt,binsPt,nbinsEta,binsEta,nbins1PtRes,bins1PtRes);
271 fPtResEtaPtTPCITS =
new TH3D(
"fPtResEtaPtTPCITS",
"pt rel. resolution from cov. matrix TPC+ITS tracks",nbinsPt,binsPt,nbinsEta,binsEta,nbins1PtRes,bins1PtRes);
273 fPtResCentPtTPC =
new TH3D(
"fPtResCentPtTPC",
"pt rel. resolution from cov. matrix TPC tracks",nbinsPt,binsPt,nbinsCent,binsCent,nbins1PtRes,bins1PtRes);
274 fPtResCentPtTPCc =
new TH3D(
"fPtResCentPtTPCc",
"pt rel. resolution from cov. matrix TPC constrained tracks",nbinsPt,binsPt,nbinsCent,binsCent,nbins1PtRes,bins1PtRes);
275 fPtResCentPtTPCITS =
new TH3D(
"fPtResCentPtTPCITS",
"pt rel. resolution from cov. matrix TPC+ITS tracks",nbinsPt,binsPt,nbinsCent,binsCent,nbins1PtRes,bins1PtRes);
282 fOutput->Add(fPtResPhiPtTPC);
283 fOutput->Add(fPtResPhiPtTPCc);
284 fOutput->Add(fPtResPhiPtTPCITS);
285 fOutput->Add(fPtResEtaPtTPC);
286 fOutput->Add(fPtResEtaPtTPCc);
287 fOutput->Add(fPtResEtaPtTPCITS);
288 fOutput->Add(fPtResCentPtTPC);
289 fOutput->Add(fPtResCentPtTPCc);
290 fOutput->Add(fPtResCentPtTPCITS);
295 PostData(2,fHighPtTree);
296 PostData(3,fdEdxTree);
297 PostData(4,fLaserTree);
298 PostData(5,fMCEffTree);
299 PostData(6,fCosmicPairsTree);
314 Printf(
"ERROR: ESD event not available");
322 if (fMC->Stack()==NULL) {
325 AliInfo(
"ToFix: MC stack not available. Prefered MCEvent() will return 0");
331 fESDfriend =
dynamic_cast<AliESDfriend*
>(ESDfriend());
333 Printf(
"ERROR: ESD friends not available");
336 AliVEventHandler* inputHandler = AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();
346 env =
gSystem->Getenv(
"AliAnalysisTaskFilteredTree_fLowPtTrackDownscaligF");
348 fLowPtTrackDownscaligF=env.Atof();
349 AliInfo(Form(
"fLowPtTrackDownscaligF=%f",fLowPtTrackDownscaligF));
351 env =
gSystem->Getenv(
"AliAnalysisTaskFilteredTree_fLowPtV0DownscaligF");
353 fLowPtV0DownscaligF=env.Atof();
354 AliInfo(Form(
"fLowPtV0DownscaligF=%f",fLowPtTrackDownscaligF));
356 env =
gSystem->Getenv(
"AliAnalysisTaskFilteredTree_fFriendDownscaling");
358 fFriendDownscaling=env.Atof();
359 AliInfo(Form(
" fFriendDownscaling=%f",fFriendDownscaling));
365 ProcessAll(fESD,fMC,fESDfriend);
371 ProcessV0(fESD,fMC,fESDfriend);
372 ProcessLaser(fESD,fMC,fESDfriend);
373 ProcessdEdx(fESD,fMC,fESDfriend);
374 if (fProcessCosmics) { ProcessCosmics(fESD,fESDfriend); }
376 ProcessMCEff(fESD,fMC,fESDfriend);
379 if (fProcessITSTPCmatchOut) ProcessITSTPCmatchOut(fESD, fESDfriend);
380 printf(
"processed event %d\n",
Int_t(Entry()));
390 AliESDVertex *vertexSPD = (AliESDVertex *)event->GetPrimaryVertexSPD();
391 AliESDVertex *vertexTPC = (AliESDVertex *)event->GetPrimaryVertexTPC();
395 const Double_t kMaxDelta[5]={2,600,0.02,0.02,0.1};
396 Int_t ntracks=
event->GetNumberOfTracks();
397 UInt_t specie =
event->GetEventSpecie();
398 if (specie==AliRecoParam::kCalib)
return;
399 Int_t ntracksFriend = esdFriend ? esdFriend->GetNumberOfTracks() : 0;
402 for (
Int_t itrack0=0;itrack0<ntracks;itrack0++) {
403 AliESDtrack *track0 =
event->GetTrack(itrack0);
404 if (!track0)
continue;
405 if (!track0->IsOn(AliESDtrack::kTPCrefit))
continue;
407 if (TMath::Abs(AliTracker::GetBz())>1 && track0->Pt() < kMinPt)
continue;
408 if (track0->Pt() < kMinPt)
continue;
409 if (track0->GetTPCncls() < kMinNcl)
continue;
410 if (TMath::Abs(track0->GetY())<kMaxDelta[0])
continue;
411 if (track0->GetKinkIndex(0)>0)
continue;
412 const Double_t * par0=track0->GetParameter();
419 const AliESDfriendTrack* friendTrack0=NULL;
420 if (esdFriend &&!esdFriend->TestSkipBit()){
421 if (itrack0<ntracksFriend){
422 friendTrack0 = track0->GetFriendTrack();
426 for (
Int_t itrack1=itrack0+1;itrack1<ntracks;itrack1++) {
427 AliESDtrack *track1 =
event->GetTrack(itrack1);
428 if (!track1)
continue;
429 if (!track1->IsOn(AliESDtrack::kTPCrefit))
continue;
430 if (track1->GetKinkIndex(0)>0)
continue;
431 if ((TMath::Abs(AliTracker::GetBz())>1) && (track1->Pt() < kMinPt))
continue;
432 if (track1->Pt() < kMinPt)
continue;
433 if (track1->GetTPCncls()<kMinNcl)
continue;
434 if (TMath::Abs(AliTracker::GetBz())>1 && TMath::Max(track1->Pt(), track0->Pt())<kMinPtMax)
continue;
435 if (TMath::Abs(track1->GetY())<kMaxDelta[0])
continue;
440 const Double_t* par1=track1->GetParameter();
443 for (
Int_t ipar=0; ipar<5; ipar++){
444 if (ipar==4&&TMath::Abs(AliTracker::GetBz())<1)
continue;
445 if (TMath::Abs(TMath::Abs(par0[ipar])-TMath::Abs(par1[ipar]))>kMaxDelta[ipar]) isPair=kFALSE;
447 if (!isPair)
continue;
448 if (TMath::Abs(TMath::Abs(track0->GetAlpha()-track1->GetAlpha())-TMath::Pi())>kMaxDelta[2]) isPair=kFALSE;
455 if (TMath::Abs(par0[0]+par1[0])>kMaxDelta[0]) isPair=kFALSE;
456 if (TMath::Abs(par0[3]+par1[3])>kMaxDelta[3]) isPair=kFALSE;
457 if (TMath::Abs(AliTracker::GetBz())>1 && TMath::Abs(par0[4]+par1[4])>kMaxDelta[4]) isPair=kFALSE;
458 if (!isPair)
continue;
459 TString filename(AliAnalysisManager::GetAnalysisManager()->GetTree()->GetCurrentFile()->GetName());
460 Int_t eventNumber =
event->GetEventNumberInFile();
463 Int_t ntracksSPD = vertexSPD->GetNContributors();
464 Int_t ntracksTPC = vertexTPC->GetNContributors();
465 Int_t runNumber =
event->GetRunNumber();
466 Int_t timeStamp =
event->GetTimeStamp();
467 ULong64_t triggerMask =
event->GetTriggerMask();
468 Float_t magField =
event->GetMagneticField();
469 TObjString triggerClass =
event->GetFiredTriggerClasses().Data();
472 ULong64_t orbitID = (ULong64_t)event->GetOrbitNumber();
473 ULong64_t bunchCrossID = (ULong64_t)event->GetBunchCrossNumber();
474 ULong64_t periodID = (ULong64_t)event->GetPeriodNumber();
475 ULong64_t gid = ((periodID << 36) | (orbitID << 12) | bunchCrossID);
478 const AliESDfriendTrack* friendTrack1=NULL;
479 if (esdFriend &&!esdFriend->TestSkipBit()){
480 if (itrack1<ntracksFriend){
481 friendTrack1 = track1->GetFriendTrack();
486 AliESDfriendTrack *friendTrackStore0=(AliESDfriendTrack*)friendTrack0;
487 AliESDfriendTrack *friendTrackStore1=(AliESDfriendTrack*)friendTrack1;
488 if (fFriendDownscaling>=1){
489 if (
gRandom->Rndm()>1./fFriendDownscaling){
490 friendTrackStore0 = 0;
491 friendTrackStore1 = 0;
494 if (fFriendDownscaling<=0){
495 if (((*fTreeSRedirector)<<
"CosmicPairs").GetTree()){
496 TTree * tree = ((*fTreeSRedirector)<<
"CosmicPairs").GetTree();
498 Double_t sizeAll=tree->GetZipBytes();
499 TBranch * br= tree->GetBranch(
"friendTrack0.fPoints");
500 Double_t sizeFriend=(br!=NULL)?br->GetZipBytes():0;
501 br= tree->GetBranch(
"friendTrack0.fCalibContainer");
502 if (br) sizeFriend+=br->GetZipBytes();
503 if (sizeFriend*TMath::Abs(fFriendDownscaling)>sizeAll) {
510 if(!fFillTree)
return;
511 if(!fTreeSRedirector)
return;
512 (*fTreeSRedirector)<<
"CosmicPairs"<<
514 "fileName.="<<&fCurrentFileName<<
515 "runNumber="<<runNumber<<
516 "evtTimeStamp="<<timeStamp<<
517 "evtNumberInFile="<<eventNumber<<
518 "trigger="<<triggerMask<<
519 "triggerClass="<<&triggerClass<<
522 "multSPD="<<ntracksSPD<<
523 "multTPC="<<ntracksTPC<<
524 "vertSPD.="<<vertexSPD<<
525 "vertTPC.="<<vertexTPC<<
528 "friendTrack0.="<<friendTrackStore0<<
529 "friendTrack1.="<<friendTrackStore1<<
542 static Int_t downscaleCounter=0;
546 AliESDtrackCuts *esdTrackCuts = GetTrackCuts();
548 if(!evtCuts || !accCuts || !esdTrackCuts) {
549 Printf(
"ERROR cuts not available");
554 Bool_t isEventTriggered = kTRUE;
555 AliPhysicsSelection *physicsSelection = NULL;
556 AliTriggerAnalysis* triggerAnalysis = NULL;
559 AliVEventHandler* inputHandler = AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();
564 isEventTriggered = inputHandler->IsEventSelected() & AliVEvent::kMB;
566 physicsSelection =
static_cast<AliPhysicsSelection*
> (inputHandler->GetEventSelection());
567 if(!physicsSelection)
return;
570 if (isEventTriggered && (GetTrigger() == AliTriggerAnalysis::kV0AND)) {
572 triggerAnalysis = physicsSelection->GetTriggerAnalysis();
573 if(!triggerAnalysis)
return;
574 isEventTriggered = triggerAnalysis->IsOfflineTriggerFired(esdEvent, GetTrigger());
580 AliCentrality *esdCentrality = esdEvent->GetCentrality();
581 centralityF = esdCentrality->GetCentralityPercentile(fCentralityEstimator.Data());
584 AliHeader* header = 0;
585 AliGenEventHeader* genHeader = 0;
589 Int_t multMCTrueTracks = 0;
593 header = mcEvent->Header();
595 AliDebug(AliLog::kError,
"Header not available");
599 stack = mcEvent->Stack();
601 AliDebug(AliLog::kError,
"Stack not available");
606 genHeader = header->GenEventHeader();
608 AliDebug(AliLog::kError,
"Could not retrieve genHeader from Header");
611 genHeader->PrimaryVertex(vtxMC);
615 multMCTrueTracks = GetMCTrueTrackMult(mcEvent,evtCuts,accCuts);
620 AliESDVertex* vtxESD = 0;
621 if(GetAnalysisMode() == kTPCAnalysisMode) {
622 vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTPC();
624 else if(GetAnalysisMode() == kTPCITSAnalysisMode) {
625 vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTracks();
631 AliESDVertex* vtxTPC = (AliESDVertex*)esdEvent->GetPrimaryVertexTPC();
632 AliESDVertex* vtxSPD = (AliESDVertex*)esdEvent->GetPrimaryVertexSPD();
641 Int_t ntracks = esdEvent->GetNumberOfTracks();
644 if(isEventOK && isEventTriggered)
650 AliESDHeader *esdHeader = 0;
651 esdHeader = esdEvent->GetHeader();
652 if(!esdHeader)
return;
665 Int_t mult = vtxESD->GetNContributors();
666 Int_t multSPD = vtxSPD->GetNContributors();
667 Int_t multTPC = vtxTPC->GetNContributors();
669 Float_t bz = esdEvent->GetMagneticField();
670 Int_t runNumber = esdEvent->GetRunNumber();
671 Int_t evtTimeStamp = esdEvent->GetTimeStamp();
672 Int_t evtNumberInFile = esdEvent->GetEventNumberInFile();
675 ULong64_t orbitID = (ULong64_t)esdEvent->GetOrbitNumber();
676 ULong64_t bunchCrossID = (ULong64_t)esdEvent->GetBunchCrossNumber();
677 ULong64_t periodID = (ULong64_t)esdEvent->GetPeriodNumber();
678 ULong64_t gid = ((periodID << 36) | (orbitID << 12) | bunchCrossID);
682 for (
Int_t iTrack = 0; iTrack < esdEvent->GetNumberOfTracks(); iTrack++)
684 AliESDtrack *track = esdEvent->GetTrack(iTrack);
686 if(track->Charge()==0)
continue;
687 if(!esdTrackCuts->AcceptTrack(track))
continue;
691 Double_t scalempt= TMath::Min(track->Pt(),10.);
693 downscaleF *= fLowPtTrackDownscaligF;
694 if( downscaleCounter>0 && TMath::Exp(2*scalempt)<downscaleF)
continue;
697 AliExternalTrackParam * tpcInner = (AliExternalTrackParam *)(track->GetTPCInnerParam());
698 if (!tpcInner)
continue;
701 isOK = tpcInner->Rotate(track->GetAlpha());
702 isOK = tpcInner->PropagateTo(track->GetX(),esdEvent->GetMagneticField());
709 TObjString triggerClass = esdEvent->GetFiredTriggerClasses().Data();
710 if(!fFillTree)
return;
711 if(!fTreeSRedirector)
return;
713 (*fTreeSRedirector)<<
"highPt"<<
715 "fileName.="<<&fCurrentFileName<<
716 "runNumber="<<runNumber<<
717 "evtTimeStamp="<<evtTimeStamp<<
718 "evtNumberInFile="<<evtNumberInFile<<
719 "triggerClass="<<&triggerClass<<
722 "ntracksESD="<<ntracks<<
726 "multSPD="<<multSPD<<
727 "multTPC="<<multTPC<<
728 "esdTrack.="<<track<<
729 "centralityF="<<centralityF<<
744 if(!fFillTree)
return;
745 if(!fTreeSRedirector)
return;
746 const AliESDHeader* esdHeader = esdEvent->GetHeader();
747 if(esdHeader && esdHeader->GetEventSpecie()==AliRecoParam::kCalib) {
748 Int_t countLaserTracks = 0;
749 Int_t runNumber = esdEvent->GetRunNumber();
750 Int_t evtTimeStamp = esdEvent->GetTimeStamp();
751 Int_t evtNumberInFile = esdEvent->GetEventNumberInFile();
752 Float_t bz = esdEvent->GetMagneticField();
753 TObjString triggerClass = esdEvent->GetFiredTriggerClasses().Data();
755 ULong64_t orbitID = (ULong64_t)esdEvent->GetOrbitNumber();
756 ULong64_t bunchCrossID = (ULong64_t)esdEvent->GetBunchCrossNumber();
757 ULong64_t periodID = (ULong64_t)esdEvent->GetPeriodNumber();
758 ULong64_t gid = ((periodID << 36) | (orbitID << 12) | bunchCrossID);
759 for (
Int_t iTrack = 0; iTrack < esdEvent->GetNumberOfTracks(); iTrack++){
760 AliESDtrack *track = esdEvent->GetTrack(iTrack);
762 if (track->GetTPCInnerParam()==NULL)
continue;
763 if(track->GetTPCInnerParam()) countLaserTracks++;
764 AliESDfriendTrack* friendTrack=NULL;
766 if (track->GetInnerParam()->Pt()<kMinPt)
continue;
767 Bool_t skipTrack=
gRandom->Rndm()>1/(1+TMath::Abs(fFriendDownscaling));
768 if (skipTrack)
continue;
769 if (esdFriend) {
if (!esdFriend->TestSkipBit()) friendTrack = (AliESDfriendTrack*)track->GetFriendTrack();}
770 (*fTreeSRedirector)<<
"Laser"<<
772 "fileName.="<<&fCurrentFileName<<
773 "runNumber="<<runNumber<<
774 "evtTimeStamp="<<evtTimeStamp<<
775 "evtNumberInFile="<<evtNumberInFile<<
776 "triggerClass="<<&triggerClass<<
778 "multTPCtracks="<<countLaserTracks<<
780 "friendTrack.="<<friendTrack<<
804 static Int_t downscaleCounter=0;
807 AliESDtrackCuts *esdTrackCuts = GetTrackCuts();
809 if(!evtCuts || !accCuts || !esdTrackCuts) {
810 AliDebug(AliLog::kError,
"cuts not available");
815 Bool_t isEventTriggered = kTRUE;
816 AliPhysicsSelection *physicsSelection = NULL;
817 AliTriggerAnalysis* triggerAnalysis = NULL;
820 AliVEventHandler* inputHandler = AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();
821 AliPIDResponse *pidResponse = inputHandler->GetPIDResponse();
828 isEventTriggered = inputHandler->IsEventSelected() & AliVEvent::kMB;
830 physicsSelection =
static_cast<AliPhysicsSelection*
> (inputHandler->GetEventSelection());
831 if(!physicsSelection) {AliInfo(
"no physics selection");
return;}
834 if (isEventTriggered && (GetTrigger() == AliTriggerAnalysis::kV0AND)) {
836 triggerAnalysis = physicsSelection->GetTriggerAnalysis();
837 if(!triggerAnalysis) {AliInfo(
"no trigger analysis");
return;}
838 isEventTriggered = triggerAnalysis->IsOfflineTriggerFired(esdEvent, GetTrigger());
844 AliCentrality *esdCentrality = esdEvent->GetCentrality();
845 centralityF = esdCentrality->GetCentralityPercentile(fCentralityEstimator.Data());
848 AliHeader* header = 0;
849 AliGenEventHeader* genHeader = 0;
854 Int_t multMCTrueTracks = 0;
858 header = mcEvent->Header();
860 AliDebug(AliLog::kError,
"Header not available");
864 stack = mcEvent->Stack();
866 AliDebug(AliLog::kError,
"Stack not available");
869 mcStackSize=stack->GetNtrack();
872 genHeader = header->GenEventHeader();
874 AliDebug(AliLog::kError,
"Could not retrieve genHeader from Header");
877 genHeader->PrimaryVertex(vtxMC);
881 multMCTrueTracks = GetMCTrueTrackMult(mcEvent,evtCuts,accCuts);
887 AliESDVertex* vtxESD = 0;
888 if(GetAnalysisMode() == kTPCAnalysisMode) {
889 vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTPC();
891 else if(GetAnalysisMode() == kTPCITSAnalysisMode) {
892 vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTracks();
895 AliInfo(
"no ESD vertex");
906 AliESDVertex *vertexSPD = (AliESDVertex *)esdEvent->GetPrimaryVertexSPD();
907 AliESDVertex *vertexTPC = (AliESDVertex *)esdEvent->GetPrimaryVertexTPC();
908 Int_t contSPD = vertexSPD->GetNContributors();
909 Int_t contTPC = vertexTPC->GetNContributors();
910 TVectorD vertexPosTPC(3), vertexPosSPD(3);
911 vertexSPD->GetXYZ(vertexPosSPD.GetMatrixArray());
912 vertexTPC->GetXYZ(vertexPosTPC.GetMatrixArray());
915 for (
Int_t iTrack = 0; iTrack < esdEvent->GetNumberOfTracks(); iTrack++){
916 AliESDtrack *track = esdEvent->GetTrack(iTrack);
918 if (track->IsOn(AliVTrack::kTPCrefit)) ntracksTPC++;
919 if (track->IsOn(AliVTrack::kITSrefit)) ntracksITS++;
924 Int_t ntracks = esdEvent->GetNumberOfTracks();
926 ULong64_t orbitID = (ULong64_t)esdEvent->GetOrbitNumber();
927 ULong64_t bunchCrossID = (ULong64_t)esdEvent->GetBunchCrossNumber();
928 ULong64_t periodID = (ULong64_t)esdEvent->GetPeriodNumber();
929 ULong64_t gid = ((periodID << 36) | (orbitID << 12) | bunchCrossID);
930 TObjString triggerClass = esdEvent->GetFiredTriggerClasses().Data();
931 Float_t bz = esdEvent->GetMagneticField();
932 Int_t runNumber = esdEvent->GetRunNumber();
933 Int_t evtTimeStamp = esdEvent->GetTimeStamp();
934 Int_t evtNumberInFile = esdEvent->GetEventNumberInFile();
935 Int_t mult = vtxESD->GetNContributors();
936 (*fTreeSRedirector)<<
"eventInfoTracks"<<
938 "fileName.="<<&fCurrentFileName<<
939 "runNumber="<<runNumber<<
940 "evtTimeStamp="<<evtTimeStamp<<
941 "evtNumberInFile="<<evtNumberInFile<<
942 "triggerClass="<<&triggerClass<<
945 "ntracks="<<ntracks<<
946 "isEventOK="<<isEventOK<<
947 "isEventTriggered="<<isEventTriggered<<
953 if(isEventOK && isEventTriggered)
958 AliESDHeader *esdHeader = 0;
959 esdHeader = esdEvent->GetHeader();
960 if(!esdHeader) {AliInfo(
"no esdHeader");
return;}
969 vert[0] = vtxESD->GetX();
970 vert[1] = vtxESD->GetY();
971 vert[2] = vtxESD->GetZ();
972 Int_t mult = vtxESD->GetNContributors();
973 Int_t numberOfTracks=esdEvent->GetNumberOfTracks();
975 for (
Int_t iTrack = 0; iTrack < numberOfTracks; iTrack++)
977 AliESDtrack *track = esdEvent->GetTrack(iTrack);
978 AliESDfriendTrack* friendTrack=NULL;
979 Int_t numberOfFriendTracks=0;
980 if (esdFriend) numberOfFriendTracks=esdFriend->GetNumberOfTracks();
981 if (esdFriend && iTrack<numberOfFriendTracks) {
982 if (!esdFriend->TestSkipBit()) friendTrack = (AliESDfriendTrack*)track->GetFriendTrack();
985 if(track->Charge()==0)
continue;
986 if(!esdTrackCuts->AcceptTrack(track))
continue;
990 Double_t scalempt= TMath::Min(track->Pt(),10.);
992 downscaleF *= fLowPtTrackDownscaligF;
993 if( downscaleCounter>0 && TMath::Exp(2*scalempt)<downscaleF)
continue;
1008 Double_t b[3]; AliTracker::GetBxByBz(x,b);
1013 Bool_t isOKtpcInner = kFALSE;
1014 AliExternalTrackParam * tpcInner = (AliExternalTrackParam *)(track->GetTPCInnerParam());
1017 isOKtpcInner = tpcInner->Rotate(track->GetAlpha());
1018 isOKtpcInner = tpcInner->PropagateTo(track->GetX(),esdEvent->GetMagneticField());
1025 Bool_t isOKtpcInnerC = kFALSE;
1026 AliExternalTrackParam * tpcInnerC =
new AliExternalTrackParam(*(track->GetTPCInnerParam()));
1028 isOKtpcInnerC = ConstrainTPCInner(tpcInnerC,vtxESD,b);
1029 isOKtpcInnerC = tpcInnerC->Rotate(track->GetAlpha());
1030 isOKtpcInnerC = tpcInnerC->PropagateTo(track->GetX(),esdEvent->GetMagneticField());
1037 Bool_t isOKtrackInnerC = kTRUE;
1038 AliExternalTrackParam * trackInnerC = NULL;
1039 AliExternalTrackParam * trackInnerV =
new AliExternalTrackParam(*(track->GetInnerParam()));
1040 isOKtrackInnerC=AliTracker::PropagateTrackToBxByBz(trackInnerV,3,track->GetMass(),3,kFALSE);
1041 isOKtrackInnerC&= trackInnerV->Rotate(track->GetAlpha());
1042 isOKtrackInnerC&= trackInnerV->PropagateTo(track->GetX(),esdEvent->GetMagneticField());
1044 if (isOKtrackInnerC) {
1045 trackInnerC =
new AliExternalTrackParam(*trackInnerV);
1046 isOKtrackInnerC&= ConstrainTrackInner(trackInnerC,vtxESD,track->GetMass(),b);
1047 isOKtrackInnerC&= trackInnerC->Rotate(track->GetAlpha());
1048 isOKtrackInnerC&= trackInnerC->PropagateTo(track->GetX(),esdEvent->GetMagneticField());
1055 TMatrixD deltaT(5,1), deltaTtrackC(5,1);
1056 TMatrixD delta(1,5), deltatrackC(1,5);
1057 TMatrixD covarM(5,5), covarMtrackC(5,5);
1059 TMatrixD chi2trackC(1,1);
1061 if(isOKtpcInnerC && isOKtrackInnerC)
1063 for (
Int_t ipar=0; ipar<5; ipar++) {
1064 deltaT(ipar,0)=tpcInnerC->GetParameter()[ipar]-track->GetParameter()[ipar];
1065 delta(0,ipar)=tpcInnerC->GetParameter()[ipar]-track->GetParameter()[ipar];
1067 deltaTtrackC(ipar,0)=trackInnerC->GetParameter()[ipar]-track->GetParameter()[ipar];
1068 deltatrackC(0,ipar)=trackInnerC->GetParameter()[ipar]-track->GetParameter()[ipar];
1070 for (
Int_t jpar=0; jpar<5; jpar++) {
1071 Int_t index=track->GetIndex(ipar,jpar);
1072 covarM(ipar,jpar)=track->GetCovariance()[index]+tpcInnerC->GetCovariance()[index];
1073 covarMtrackC(ipar,jpar)=track->GetCovariance()[index]+trackInnerC->GetCovariance()[index];
1078 TMatrixD covarMInv = covarM.Invert();
1079 TMatrixD mat2 = covarMInv*deltaT;
1084 TMatrixD covarMInvtrackC = covarMtrackC.Invert();
1085 TMatrixD mat2trackC = covarMInvtrackC*deltaTtrackC;
1086 chi2trackC = deltatrackC*mat2trackC;
1091 AliExternalTrackParam paramITS;
1092 AliExternalTrackParam paramITSC;
1093 AliExternalTrackParam paramComb;
1094 Int_t indexNearestITS = GetNearestTrack((trackInnerV!=NULL)? trackInnerV:track, iTrack, esdEvent,0,0,paramITS);
1095 if (indexNearestITS<0) indexNearestITS = GetNearestTrack((trackInnerV!=NULL)? trackInnerV:track, iTrack, esdEvent,2,0,paramITS);
1096 Int_t indexNearestITSC = GetNearestTrack((trackInnerC!=NULL)? trackInnerC:track, iTrack, esdEvent,0,0,paramITSC);
1097 if (indexNearestITSC<0) indexNearestITS = GetNearestTrack((trackInnerC!=NULL)? trackInnerC:track, iTrack, esdEvent,2,0,paramITSC);
1098 Int_t indexNearestComb = GetNearestTrack(track->GetInnerParam(), iTrack, esdEvent,1,1,paramComb);
1108 Bool_t isOKtrackInnerC2 = kFALSE;
1109 AliExternalTrackParam *trackInnerC2 =
new AliExternalTrackParam(*(track->GetInnerParam()));
1111 isOKtrackInnerC2 = AliTracker::PropagateTrackToBxByBz(trackInnerC2,kTPCRadius,track->GetMass(),kStep,kFALSE);
1114 Bool_t isOKouterITSc = kFALSE;
1115 AliExternalTrackParam *outerITSc = NULL;
1116 TMatrixD chi2OuterITS(1,1);
1118 if(esdFriend && !esdFriend->TestSkipBit())
1125 if (friendTrack->GetITSOut()) outerITSc =
new AliExternalTrackParam(*(friendTrack->GetITSOut()));
1128 isOKouterITSc = AliTracker::PropagateTrackToBxByBz(outerITSc,kTPCRadius,track->GetMass(),kStep,kFALSE);
1129 isOKouterITSc = outerITSc->Rotate(trackInnerC2->GetAlpha());
1130 isOKouterITSc = outerITSc->PropagateTo(trackInnerC2->GetX(),esdEvent->GetMagneticField());
1136 TMatrixD deltaTouterITS(4,1);
1137 TMatrixD deltaouterITS(1,4);
1138 TMatrixD covarMouterITS(4,4);
1140 if(isOKtrackInnerC2 && isOKouterITSc) {
1143 for (
Int_t ipar=0; ipar<5; ipar++) {
1145 deltaTouterITS(kipar,0)=outerITSc->GetParameter()[ipar]-trackInnerC2->GetParameter()[ipar];
1146 deltaouterITS(0,kipar)=outerITSc->GetParameter()[ipar]-trackInnerC2->GetParameter()[ipar];
1150 for (
Int_t jpar=0; jpar<5; jpar++) {
1151 Int_t index=outerITSc->GetIndex(ipar,jpar);
1152 if(ipar !=1 || jpar!=1) {
1153 covarMouterITS(kipar,kjpar)=outerITSc->GetCovariance()[index]+trackInnerC2->GetCovariance()[index];
1155 if(jpar!=1) kjpar++;
1157 if(ipar!=1) kipar++;
1161 TMatrixD covarMInvouterITS = covarMouterITS.Invert();
1162 TMatrixD mat2outerITS = covarMInvouterITS*deltaTouterITS;
1163 chi2OuterITS = deltaouterITS*mat2outerITS;
1173 TParticle *particle=NULL, *particleTPC=NULL, *particleITS=NULL;
1174 TParticle *particleMother=NULL, *particleMotherTPC=NULL, *particleMotherITS=NULL;
1175 Int_t mech=-1, mechTPC=-1, mechITS=-1;
1176 Bool_t isPrim=kFALSE, isPrimTPC=kFALSE, isPrimITS=kFALSE;
1177 Bool_t isFromStrangess=kFALSE, isFromStrangessTPC=kFALSE, isFromStrangessITS=kFALSE;
1178 Bool_t isFromConversion=kFALSE, isFromConversionTPC=kFALSE, isFromConversionITS=kFALSE;
1179 Bool_t isFromMaterial=kFALSE, isFromMaterialTPC=kFALSE, isFromMaterialITS=kFALSE;
1181 AliTrackReference *refTPCIn = NULL;
1182 AliTrackReference *refTPCOut = NULL;
1183 AliTrackReference *refITS = NULL;
1184 AliTrackReference *refTRD = NULL;
1185 AliTrackReference *refTOF = NULL;
1186 AliTrackReference *refEMCAL = NULL;
1187 AliTrackReference *refPHOS = NULL;
1188 Int_t nrefTPC=0, nrefTRD=0, nrefTOF=0, nrefITS=0, nrefEMCAL=0, nrefPHOS=0;
1190 Bool_t isOKtrackInnerC3 = kFALSE;
1191 AliExternalTrackParam *trackInnerC3 =
new AliExternalTrackParam(*(track->GetInnerParam()));
1192 if(mcEvent && stack)
1196 multMCTrueTracks = GetMCTrueTrackMult(mcEvent,evtCuts,accCuts);
1200 Int_t label = TMath::Abs(track->GetLabel());
1201 if (label >= mcStackSize)
continue;
1202 particle = stack->Particle(label);
1203 if (!particle)
continue;
1204 if(particle && particle->GetPDG() && particle->GetPDG()->Charge()!=0.)
1206 particleMother = GetMother(particle,stack);
1207 mech = particle->GetUniqueID();
1208 isPrim = stack->IsPhysicalPrimary(label);
1209 isFromStrangess = IsFromStrangeness(label,stack);
1210 isFromConversion = IsFromConversion(label,stack);
1211 isFromMaterial = IsFromMaterial(label,stack);
1217 Int_t labelTPC = TMath::Abs(track->GetTPCLabel());
1218 if (labelTPC >= mcStackSize)
continue;
1219 particleTPC = stack->Particle(labelTPC);
1220 if (!particleTPC)
continue;
1221 if(particleTPC && particleTPC->GetPDG() && particleTPC->GetPDG()->Charge()!=0.)
1223 particleMotherTPC = GetMother(particleTPC,stack);
1224 mechTPC = particleTPC->GetUniqueID();
1225 isPrimTPC = stack->IsPhysicalPrimary(labelTPC);
1226 isFromStrangessTPC = IsFromStrangeness(labelTPC,stack);
1227 isFromConversionTPC = IsFromConversion(labelTPC,stack);
1228 isFromMaterialTPC = IsFromMaterial(labelTPC,stack);
1236 TClonesArray *trefs=0;
1237 Int_t status = mcEvent->GetParticleAndTR(TMath::Abs(labelTPC), part, trefs);
1239 if(status>0 && part && trefs && part->GetPDG() && part->GetPDG()->Charge()!=0.)
1241 Int_t nTrackRef = trefs->GetEntries();
1245 for (
Int_t iref = 0; iref < nTrackRef; iref++)
1247 AliTrackReference *ref = (AliTrackReference *)trefs->At(iref);
1253 if(!refITS && countITS==2) {
1272 if(ref && ref->Label()==label && ref->DetectorId()==AliTrackReference::kTRD)
1307 if(refTPCIn && trackInnerC3)
1309 Double_t kRefPhi = TMath::ATan2(refTPCIn->Y(),refTPCIn->X());
1310 isOKtrackInnerC3 = trackInnerC3->Rotate(kRefPhi);
1311 isOKtrackInnerC3 = AliTracker::PropagateTrackToBxByBz(trackInnerC3,refTPCIn->R(),track->GetMass(),kStep,kFALSE);
1318 Int_t labelITS = TMath::Abs(track->GetITSLabel());
1319 if (labelITS >= mcStackSize)
continue;
1320 particleITS = stack->Particle(labelITS);
1321 if (!particleITS)
continue;
1322 if(particleITS && particleITS->GetPDG() && particleITS->GetPDG()->Charge()!=0.)
1324 particleMotherITS = GetMother(particleITS,stack);
1325 mechITS = particleITS->GetUniqueID();
1326 isPrimITS = stack->IsPhysicalPrimary(labelITS);
1327 isFromStrangessITS = IsFromStrangeness(labelITS,stack);
1328 isFromConversionITS = IsFromConversion(labelITS,stack);
1329 isFromMaterialITS = IsFromMaterial(labelITS,stack);
1336 Bool_t dumpToTree=kFALSE;
1338 if(isOKtpcInnerC && isOKtrackInnerC) dumpToTree = kTRUE;
1340 if(isOKtrackInnerC2 && isOKouterITSc) dumpToTree = kTRUE;
1341 if(mcEvent && isOKtrackInnerC3) dumpToTree = kTRUE;
1342 TObjString triggerClass = esdEvent->GetFiredTriggerClasses().Data();
1349 track->GetImpactParametersTPC(dcaTPC[0],dcaTPC[1]);
1350 Bool_t isRoughPrimary = TMath::Abs(dcaTPC[1])<10;
1351 Bool_t hasOuter=(track->IsOn(AliVTrack::kITSin))||(track->IsOn(AliVTrack::kTOFout))||(track->IsOn(AliVTrack::kTRDin));
1353 if ( (!hasOuter) && (!isRoughPrimary) && (!keepPileUp)){
1359 static AliESDVertex dummyvtxESD;
1368 static AliExternalTrackParam dummyexternaltrackparam;
1370 static AliTrackReference dummytrackreference;
1372 static TParticle dummyparticle;
1376 if (!track) {track=fDummyTrack;}
1377 AliESDfriendTrack *friendTrackStore=friendTrack;
1378 if (fFriendDownscaling>=1){
1379 friendTrackStore = (
gRandom->Rndm()<1./fFriendDownscaling)? friendTrack:0;
1381 if (fFriendDownscaling<=0){
1382 if (((*fTreeSRedirector)<<
"highPt").GetTree()){
1383 TTree * tree = ((*fTreeSRedirector)<<
"highPt").GetTree();
1385 Double_t sizeAll=tree->GetZipBytes();
1386 TBranch * br= tree->GetBranch(
"friendTrack.fPoints");
1387 Double_t sizeFriend=(br!=NULL)?br->GetZipBytes():0;
1388 br= tree->GetBranch(
"friendTrack.fCalibContainer");
1389 if (br) sizeFriend+=br->GetZipBytes();
1390 if (sizeFriend*TMath::Abs(fFriendDownscaling)>sizeAll) friendTrackStore=0;
1397 if (!vtxESD) {vtxESD=&dummyvtxESD;}
1400 if (!refTPCIn) {refTPCIn=&dummytrackreference;}
1401 if (!refITS) {refITS=&dummytrackreference;}
1402 if (!particle) {particle=&dummyparticle;}
1403 if (!particleMother) {particleMother=&dummyparticle;}
1404 if (!particleTPC) {particleTPC=&dummyparticle;}
1405 if (!particleMotherTPC) {particleMotherTPC=&dummyparticle;}
1406 if (!particleITS) {particleITS=&dummyparticle;}
1407 if (!particleMotherITS) {particleMotherITS=&dummyparticle;}
1412 FillHistograms(track, tpcInnerC, centralityF, (
Double_t)chi2(0,0));
1413 TVectorD tofClInfo(5);
1414 tofClInfo[0]=track->GetTOFsignal();
1415 tofClInfo[1]=track->GetTOFsignalToT();
1416 tofClInfo[2]=track->GetTOFsignalRaw();
1417 tofClInfo[3]=track->GetTOFsignalDz();
1418 tofClInfo[4]=track->GetTOFsignalDx();
1421 const Int_t nSpecies=AliPID::kSPECIES;
1422 TVectorD tpcNsigma(nSpecies);
1423 TVectorD tofNsigma(nSpecies);
1424 TVectorD tpcPID(nSpecies);
1425 TVectorD tofPID(nSpecies);
1427 for (
Int_t ispecie=0; ispecie<nSpecies; ++ispecie) {
1428 if (ispecie ==
Int_t(AliPID::kMuon))
continue;
1429 tpcNsigma[ispecie] = pidResponse->NumberOfSigmas(
AliPIDResponse::kTPC, track, (AliPID::EParticleType)ispecie);
1430 tofNsigma[ispecie] = pidResponse->NumberOfSigmas(
AliPIDResponse::kTOF, track, (AliPID::EParticleType)ispecie);
1433 pidResponse->ComputePIDProbability(
AliPIDResponse::kTPC, track, nSpecies, tpcPID.GetMatrixArray());
1434 pidResponse->ComputePIDProbability(
AliPIDResponse::kTOF, track, nSpecies, tofPID.GetMatrixArray());
1436 if(fTreeSRedirector && dumpToTree && fFillTree) {
1438 (*fTreeSRedirector)<<
"highPt"<<
1439 "downscaleCounter="<<downscaleCounter<<
1441 "fileName.="<<&fCurrentFileName<<
1442 "runNumber="<<runNumber<<
1443 "evtTimeStamp="<<evtTimeStamp<<
1444 "evtNumberInFile="<<evtNumberInFile<<
1445 "triggerClass="<<&triggerClass<<
1447 "vtxESD.="<<vtxESD<<
1451 "ntracks="<<ntracks<<
1453 "contTPC="<< contTPC<<
1454 "contSPD="<< contSPD<<
1455 "vertexPosTPC.="<<&vertexPosTPC<<
1456 "vertexPosSPD.="<<&vertexPosSPD<<
1457 "ntracksTPC="<<ntracksTPC<<
1458 "ntracksITS="<<ntracksITS<<
1460 "esdTrack.="<<track<<
1461 "tofClInfo.="<<&tofClInfo<<
1463 "tofNsigma.="<<&tofNsigma<<
1464 "tpcNsigma.="<<&tpcNsigma<<
1465 "tofPID.="<<&tofPID<<
1466 "tpcPID.="<<&tpcPID<<
1468 "friendTrack.="<<friendTrackStore<<
1469 "extTPCInnerC.="<<tpcInnerC<<
1470 "extInnerParamV.="<<trackInnerV<<
1471 "extInnerParamC.="<<trackInnerC<<
1472 "extInnerParam.="<<trackInnerC2<<
1473 "extOuterITS.="<<outerITSc<<
1474 "extInnerParamRef.="<<trackInnerC3<<
1475 "chi2TPCInnerC="<<chi2(0,0)<<
1476 "chi2InnerC="<<chi2trackC(0,0)<<
1477 "chi2OuterITS="<<chi2OuterITS(0,0)<<
1478 "centralityF="<<centralityF;
1481 (*fTreeSRedirector)<<
"highPt"<<
1482 "paramITS.="<<¶mITS<<
1483 "paramITSC.="<<¶mITSC<<
1484 "paramComb.="<<¶mComb<<
1485 "indexNearestITS="<<indexNearestITS<<
1486 "indexNearestITSC="<<indexNearestITSC<<
1487 "indexNearestComb="<<indexNearestComb;
1490 static AliTrackReference refDummy;
1491 if (!refITS) refITS = &refDummy;
1492 if (!refTRD) refTRD = &refDummy;
1493 if (!refTOF) refTOF = &refDummy;
1494 if (!refEMCAL) refEMCAL = &refDummy;
1495 if (!refPHOS) refPHOS = &refDummy;
1497 (*fTreeSRedirector)<<
"highPt"<<
1498 "multMCTrueTracks="<<multMCTrueTracks<<
1499 "nrefITS="<<nrefITS<<
1500 "nrefTPC="<<nrefTPC<<
1501 "nrefTRD="<<nrefTRD<<
1502 "nrefTOF="<<nrefTOF<<
1503 "nrefEMCAL="<<nrefEMCAL<<
1504 "nrefPHOS="<<nrefPHOS<<
1505 "refTPCIn.="<<refTPCIn<<
1506 "refTPCOut.="<<refTPCOut<<
1507 "refITS.="<<refITS<<
1508 "refTRD.="<<refTRD<<
1509 "refTOF.="<<refTOF<<
1510 "refEMCAL.="<<refEMCAL<<
1511 "refPHOS.="<<refPHOS<<
1512 "particle.="<<particle<<
1513 "particleMother.="<<particleMother<<
1516 "isFromStrangess="<<isFromStrangess<<
1517 "isFromConversion="<<isFromConversion<<
1518 "isFromMaterial="<<isFromMaterial<<
1519 "particleTPC.="<<particleTPC<<
1520 "particleMotherTPC.="<<particleMotherTPC<<
1521 "mechTPC="<<mechTPC<<
1522 "isPrimTPC="<<isPrimTPC<<
1523 "isFromStrangessTPC="<<isFromStrangessTPC<<
1524 "isFromConversionTPC="<<isFromConversionTPC<<
1525 "isFromMaterialTPC="<<isFromMaterialTPC<<
1526 "particleITS.="<<particleITS<<
1527 "particleMotherITS.="<<particleMotherITS<<
1528 "mechITS="<<mechITS<<
1529 "isPrimITS="<<isPrimITS<<
1530 "isFromStrangessITS="<<isFromStrangessITS<<
1531 "isFromConversionITS="<<isFromConversionITS<<
1532 "isFromMaterialITS="<<isFromMaterialITS;
1535 AliInfo(
"writing tree highPt");
1536 (*fTreeSRedirector)<<
"highPt"<<
"\n";
1538 AliSysInfo::AddStamp(
"filteringTask",iTrack,numberOfTracks,numberOfFriendTracks,(friendTrackStore)?0:1);
1541 delete trackInnerC2;
1543 delete trackInnerC3;
1554 static Int_t downscaleCounter=0;
1555 AliInfo(
"we start!");
1557 AliDebug(AliLog::kError,
"mcEvent not available");
1564 AliESDtrackCuts *esdTrackCuts = GetTrackCuts();
1566 if(!evtCuts || !accCuts || !esdTrackCuts) {
1567 AliDebug(AliLog::kError,
"cuts not available");
1572 Bool_t isEventTriggered = kTRUE;
1573 AliPhysicsSelection *physicsSelection = NULL;
1574 AliTriggerAnalysis* triggerAnalysis = NULL;
1577 AliVEventHandler* inputHandler = AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();
1584 isEventTriggered = inputHandler->IsEventSelected() & AliVEvent::kMB;
1585 physicsSelection =
static_cast<AliPhysicsSelection*
> (inputHandler->GetEventSelection());
1586 if(!physicsSelection)
return;
1588 if (isEventTriggered && (GetTrigger() == AliTriggerAnalysis::kV0AND)) {
1590 triggerAnalysis = physicsSelection->GetTriggerAnalysis();
1591 if(!triggerAnalysis)
return;
1592 isEventTriggered = triggerAnalysis->IsOfflineTriggerFired(esdEvent, GetTrigger());
1598 AliCentrality *esdCentrality = esdEvent->GetCentrality();
1599 centralityF = esdCentrality->GetCentralityPercentile(fCentralityEstimator.Data());
1602 AliHeader* header = 0;
1603 AliGenEventHeader* genHeader = 0;
1604 AliStack*
stack = 0;
1605 Int_t mcStackSize=0;
1608 Int_t multMCTrueTracks = 0;
1611 AliDebug(AliLog::kError,
"mcEvent not available");
1615 header = mcEvent->Header();
1617 AliDebug(AliLog::kError,
"Header not available");
1621 stack = mcEvent->Stack();
1623 AliDebug(AliLog::kError,
"Stack not available");
1626 mcStackSize=stack->GetNtrack();
1629 genHeader = header->GenEventHeader();
1631 AliDebug(AliLog::kError,
"Could not retrieve genHeader from Header");
1634 genHeader->PrimaryVertex(vtxMC);
1638 multMCTrueTracks = GetMCTrueTrackMult(mcEvent,evtCuts,accCuts);
1643 AliESDVertex* vtxESD = 0;
1644 if(GetAnalysisMode() == kTPCAnalysisMode) {
1645 vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTPC();
1647 else if(GetAnalysisMode() == kTPCITSAnalysisMode) {
1648 vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTracks();
1658 AliESDVertex *vertexSPD = (AliESDVertex *)esdEvent->GetPrimaryVertexSPD();
1659 AliESDVertex *vertexTPC = (AliESDVertex *)esdEvent->GetPrimaryVertexTPC();
1660 Int_t contSPD = vertexSPD->GetNContributors();
1661 Int_t contTPC = vertexTPC->GetNContributors();
1662 TVectorD vertexPosTPC(3), vertexPosSPD(3);
1663 vertexSPD->GetXYZ(vertexPosSPD.GetMatrixArray());
1664 vertexTPC->GetXYZ(vertexPosTPC.GetMatrixArray());
1667 for (
Int_t iTrack = 0; iTrack < esdEvent->GetNumberOfTracks(); iTrack++){
1668 AliESDtrack *track = esdEvent->GetTrack(iTrack);
1669 if(!track)
continue;
1670 if (track->IsOn(AliVTrack::kTPCrefit)) ntracksTPC++;
1671 if (track->IsOn(AliVTrack::kITSrefit)) ntracksITS++;
1676 TObjString triggerClass = esdEvent->GetFiredTriggerClasses().Data();
1679 if(isEventOK && isEventTriggered)
1686 TParticle *particle=NULL;
1687 TParticle *particleMother=NULL;
1692 vert[0] = vtxESD->GetX();
1693 vert[1] = vtxESD->GetY();
1694 vert[2] = vtxESD->GetZ();
1695 Int_t mult = vtxESD->GetNContributors();
1697 Double_t runNumber = esdEvent->GetRunNumber();
1698 Double_t evtTimeStamp = esdEvent->GetTimeStamp();
1699 Int_t evtNumberInFile = esdEvent->GetEventNumberInFile();
1701 for (
Int_t iMc = 0; iMc < mcStackSize; ++iMc)
1703 particle = stack->Particle(iMc);
1708 if(!particle->GetPDG())
continue;
1710 if (TMath::Abs(charge) < 0.001)
1714 Bool_t prim = stack->IsPhysicalPrimary(iMc);
1718 Double_t scalempt= TMath::Min(particle->Pt(),10.);
1720 downscaleF *= fLowPtTrackDownscaligF;
1721 if (downscaleCounter>0 && TMath::Exp(2*scalempt)<downscaleF)
continue;
1727 Int_t trackIndex = -1;
1728 Int_t trackLoopIndex = -1;
1729 Int_t isESDtrackCut= 0;
1730 Int_t isAccCuts = 0;
1733 AliESDtrack *recTrack = NULL;
1735 for (
Int_t iTrack = 0; iTrack < esdEvent->GetNumberOfTracks(); iTrack++)
1737 AliESDtrack *track = esdEvent->GetTrack(iTrack);
1738 if(!track)
continue;
1739 if(track->Charge()==0)
continue;
1741 Int_t label = TMath::Abs(track->GetLabel());
1742 if (label >= mcStackSize)
continue;
1744 Bool_t isAcc=esdTrackCuts->AcceptTrack(track);
1745 if (isAcc) isESDtrackCut=1;
1748 trackIndex = iTrack;
1751 if (track->GetTPCncls()<recTrack->GetTPCncls())
continue;
1752 if (!isAcc)
continue;
1753 trackLoopIndex = iTrack;
1755 recTrack = esdEvent->GetTrack(trackIndex);
1757 if(track->GetLabel()<0) nFakes++;
1764 if (trackLoopIndex>-1) {
1765 recTrack = esdEvent->GetTrack(trackLoopIndex);
1766 }
else if (trackIndex >-1) {
1767 recTrack = esdEvent->GetTrack(trackIndex);
1769 recTrack = fDummyTrack;
1772 particleMother = GetMother(particle,stack);
1773 mech = particle->GetUniqueID();
1777 AliMCParticle *mcParticle = (AliMCParticle*) mcEvent->GetTrack(iMc);
1780 tpcTrackLength = mcParticle->GetTPCTrackLength(bz,0.05,counter,3.0);
1785 if(fTreeSRedirector && fFillTree) {
1787 (*fTreeSRedirector)<<
"MCEffTree"<<
1788 "fileName.="<<&fCurrentFileName<<
1789 "triggerClass.="<<&triggerClass<<
1790 "runNumber="<<runNumber<<
1791 "evtTimeStamp="<<evtTimeStamp<<
1792 "evtNumberInFile="<<evtNumberInFile<<
1794 "vtxESD.="<<vtxESD<<
1797 "multMCTrueTracks="<<multMCTrueTracks<<
1799 "contTPC="<< contTPC<<
1800 "contSPD="<< contSPD<<
1801 "vertexPosTPC.="<<&vertexPosTPC<<
1802 "vertexPosSPD.="<<&vertexPosSPD<<
1803 "ntracksTPC="<<ntracksTPC<<
1804 "ntracksITS="<<ntracksITS<<
1807 "isAcc0="<<isESDtrackCut<<
1808 "isAcc1="<<isAccCuts<<
1809 "esdTrack.="<<recTrack<<
1811 "tpcTrackLength="<<tpcTrackLength<<
1812 "particle.="<<particle<<
1813 "particleMother.="<<particleMother<<
1831 if (track->GetTPCNcls() < 60)
return kFALSE;
1832 Double_t mom = track->GetInnerParam()->GetP();
1833 if (mom < 0.2)
return kFALSE;
1835 track->GetImpactParameters(dca,bCov);
1838 Double_t triggerDeDx = 4*AliExternalTrackParam::BetheBlochAleph((mom*2)/(0.938*3),1.0288,31.9806,5.04114e-11,2.13096,2.38541);
1840 if (track->GetTPCsignal() > triggerDeDx && track->GetTPCsignal()<1000 && TMath::Abs(dca[0])<3.)
return kTRUE;
1851 static Int_t downscaleCounter=0;
1853 AliDebug(AliLog::kError,
"esdEvent not available");
1860 AliESDtrackCuts *esdTrackCuts = GetTrackCuts();
1862 if(!evtCuts || !accCuts || !esdTrackCuts) {
1863 AliDebug(AliLog::kError,
"cuts not available");
1868 Bool_t isEventTriggered = kTRUE;
1869 AliPhysicsSelection *physicsSelection = NULL;
1870 AliTriggerAnalysis* triggerAnalysis = NULL;
1873 AliVEventHandler* inputHandler = AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();
1874 AliPIDResponse *pidResponse = inputHandler->GetPIDResponse();
1880 isEventTriggered = inputHandler->IsEventSelected() & AliVEvent::kMB;
1882 physicsSelection =
static_cast<AliPhysicsSelection*
> (inputHandler->GetEventSelection());
1883 if(!physicsSelection)
return;
1886 if (isEventTriggered && (GetTrigger() == AliTriggerAnalysis::kV0AND)) {
1888 triggerAnalysis = physicsSelection->GetTriggerAnalysis();
1889 if(!triggerAnalysis)
return;
1890 isEventTriggered = triggerAnalysis->IsOfflineTriggerFired(esdEvent, GetTrigger());
1896 AliCentrality *esdCentrality = esdEvent->GetCentrality();
1897 centralityF = esdCentrality->GetCentralityPercentile(fCentralityEstimator.Data());
1902 AliESDVertex* vtxESD = 0;
1903 if(GetAnalysisMode() == kTPCAnalysisMode) {
1904 vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTPC();
1906 else if(GetAnalysisMode() == kTPCITSAnalysisMode) {
1907 vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTracks();
1918 Int_t ntracks = esdEvent->GetNumberOfTracks();
1920 ULong64_t orbitID = (ULong64_t)esdEvent->GetOrbitNumber();
1921 ULong64_t bunchCrossID = (ULong64_t)esdEvent->GetBunchCrossNumber();
1922 ULong64_t periodID = (ULong64_t)esdEvent->GetPeriodNumber();
1923 ULong64_t gid = ((periodID << 36) | (orbitID << 12) | bunchCrossID);
1924 TObjString triggerClass = esdEvent->GetFiredTriggerClasses().Data();
1925 Float_t bz = esdEvent->GetMagneticField();
1926 Int_t run = esdEvent->GetRunNumber();
1927 Int_t time = esdEvent->GetTimeStamp();
1928 Int_t evtNumberInFile = esdEvent->GetEventNumberInFile();
1929 Int_t nV0s = esdEvent->GetNumberOfV0s();
1930 Int_t mult = vtxESD->GetNContributors();
1931 (*fTreeSRedirector)<<
"eventInfoV0"<<
1933 "fileName.="<<&fCurrentFileName<<
1936 "evtNumberInFile="<<evtNumberInFile<<
1937 "triggerClass="<<&triggerClass<<
1940 "ntracks="<<ntracks<<
1942 "isEventOK="<<isEventOK<<
1943 "isEventTriggered="<<isEventTriggered<<
1950 if(isEventOK && isEventTriggered) {
1954 Int_t ntracks = esdEvent->GetNumberOfTracks();
1955 Int_t evNr=esdEvent->GetEventNumberInFile();
1958 for (
Int_t iv0=0; iv0<nV0s; iv0++){
1960 AliESDv0 * v0 = esdEvent->GetV0(iv0);
1962 AliESDtrack * track0 = esdEvent->GetTrack(v0->GetIndex(0));
1963 AliESDtrack * track1 = esdEvent->GetTrack(v0->GetIndex(1));
1964 if (!track0)
continue;
1965 if (!track1)
continue;
1966 AliESDfriendTrack* friendTrack0=NULL;
1967 AliESDfriendTrack* friendTrack1=NULL;
1969 if (!esdFriend->TestSkipBit()){
1970 Int_t ntracksFriend = esdFriend->GetNumberOfTracks();
1971 if (v0->GetIndex(0)<ntracksFriend){
1972 friendTrack0 = (AliESDfriendTrack*)track0->GetFriendTrack();
1974 if (v0->GetIndex(1)<ntracksFriend){
1975 friendTrack1 = (AliESDfriendTrack*)track1->GetFriendTrack();
1979 if (track0->GetSign()<0) {
1980 track1 = esdEvent->GetTrack(v0->GetIndex(0));
1981 track0 = esdEvent->GetTrack(v0->GetIndex(1));
1985 AliESDfriendTrack *friendTrackStore0=friendTrack0;
1986 AliESDfriendTrack *friendTrackStore1=friendTrack1;
1987 if (fFriendDownscaling>=1){
1988 if (
gRandom->Rndm()>1./fFriendDownscaling){
1989 friendTrackStore0 = 0;
1990 friendTrackStore1 = 0;
1993 if (fFriendDownscaling<=0){
1994 if (((*fTreeSRedirector)<<
"V0s").GetTree()){
1995 TTree * tree = ((*fTreeSRedirector)<<
"V0s").GetTree();
1997 Double_t sizeAll=tree->GetZipBytes();
1998 TBranch * br= tree->GetBranch(
"friendTrack0.fPoints");
1999 Double_t sizeFriend=(br!=NULL)?br->GetZipBytes():0;
2000 br= tree->GetBranch(
"friendTrack0.fCalibContainer");
2001 if (br) sizeFriend+=br->GetZipBytes();
2002 if (sizeFriend*TMath::Abs(fFriendDownscaling)>sizeAll) {
2003 friendTrackStore0=0;
2004 friendTrackStore1=0;
2011 Bool_t isDownscaled = IsV0Downscaled(v0);
2012 if (downscaleCounter>0 && isDownscaled)
continue;
2013 AliKFParticle kfparticle;
2014 Int_t type=GetKFParticle(v0,esdEvent,kfparticle);
2015 if (type==0)
continue;
2016 TObjString triggerClass = esdEvent->GetFiredTriggerClasses().Data();
2018 if(!fFillTree)
return;
2019 if(!fTreeSRedirector)
return;
2021 TVectorD tofClInfo0(5);
2022 TVectorD tofClInfo1(5);
2023 tofClInfo0[0]=track0->GetTOFsignal();
2024 tofClInfo0[1]=track0->GetTOFsignalToT();
2025 tofClInfo0[2]=track0->GetTOFsignalRaw();
2026 tofClInfo0[3]=track0->GetTOFsignalDz();
2027 tofClInfo0[4]=track0->GetTOFsignalDx();
2028 tofClInfo1[0]=track1->GetTOFsignal();
2029 tofClInfo1[1]=track1->GetTOFsignalToT();
2030 tofClInfo1[2]=track1->GetTOFsignalRaw();
2031 tofClInfo1[3]=track1->GetTOFsignalDz();
2032 tofClInfo1[4]=track1->GetTOFsignalDx();
2035 const Int_t nSpecies=AliPID::kSPECIES;
2036 TVectorD tpcNsigma0(nSpecies);
2037 TVectorD tofNsigma0(nSpecies);
2038 TVectorD tpcNsigma1(nSpecies);
2039 TVectorD tofNsigma1(nSpecies);
2041 for (
Int_t ispecie=0; ispecie<nSpecies; ++ispecie) {
2042 if (ispecie ==
Int_t(AliPID::kMuon))
continue;
2043 tpcNsigma0[ispecie] = pidResponse->NumberOfSigmas(
AliPIDResponse::kTPC, track0, (AliPID::EParticleType)ispecie);
2044 tofNsigma0[ispecie] = pidResponse->NumberOfSigmas(
AliPIDResponse::kTOF, track0, (AliPID::EParticleType)ispecie);
2045 tpcNsigma1[ispecie] = pidResponse->NumberOfSigmas(
AliPIDResponse::kTPC, track1, (AliPID::EParticleType)ispecie);
2046 tofNsigma1[ispecie] = pidResponse->NumberOfSigmas(
AliPIDResponse::kTOF, track1, (AliPID::EParticleType)ispecie);
2051 (*fTreeSRedirector)<<
"V0s"<<
2053 "isDownscaled="<<isDownscaled<<
2054 "triggerClass="<<&triggerClass<<
2056 "fileName.="<<&fCurrentFileName<<
2058 "evtTimeStamp="<<time<<
2059 "evtNumberInFile="<<evNr<<
2061 "ntracks="<<ntracks<<
2063 "kf.="<<&kfparticle<<
2064 "track0.="<<track0<<
2065 "track1.="<<track1<<
2066 "tofClInfo0.="<<&tofClInfo0<<
2067 "tofClInfo1.="<<&tofClInfo1<<
2068 "tofNsigma0.="<<&tofNsigma0<<
2069 "tofNsigma1.="<<&tofNsigma1<<
2070 "tpcNsigma0.="<<&tpcNsigma0<<
2071 "tpcNsigma1.="<<&tpcNsigma1<<
2072 "friendTrack0.="<<friendTrackStore0<<
2073 "friendTrack1.="<<friendTrackStore1<<
2074 "centralityF="<<centralityF<<
2086 static Int_t downscaleCounter=0;
2088 AliDebug(AliLog::kError,
"esdEvent not available");
2095 AliESDtrackCuts *esdTrackCuts = GetTrackCuts();
2097 if(!evtCuts || !accCuts || !esdTrackCuts) {
2098 AliDebug(AliLog::kError,
"cuts not available");
2104 Bool_t isEventTriggered = kTRUE;
2105 AliPhysicsSelection *physicsSelection = NULL;
2106 AliTriggerAnalysis* triggerAnalysis = NULL;
2109 AliVEventHandler* inputHandler = AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();
2110 AliPIDResponse *pidResponse = inputHandler->GetPIDResponse();
2115 isEventTriggered = inputHandler->IsEventSelected() & AliVEvent::kMB;
2117 physicsSelection =
static_cast<AliPhysicsSelection*
> (inputHandler->GetEventSelection());
2118 if(!physicsSelection)
return;
2120 if (isEventTriggered && (GetTrigger() == AliTriggerAnalysis::kV0AND)) {
2122 triggerAnalysis = physicsSelection->GetTriggerAnalysis();
2123 if(!triggerAnalysis)
return;
2124 isEventTriggered = triggerAnalysis->IsOfflineTriggerFired(esdEvent, GetTrigger());
2129 AliESDVertex* vtxESD = 0;
2130 if(GetAnalysisMode() == kTPCAnalysisMode) {
2131 vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTPC();
2133 else if(GetAnalysisMode() == kTPCITSAnalysisMode) {
2134 vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTracks();
2147 if(isEventOK && isEventTriggered)
2150 vert[0] = vtxESD->GetX();
2151 vert[1] = vtxESD->GetY();
2152 vert[2] = vtxESD->GetZ();
2153 Int_t mult = vtxESD->GetNContributors();
2155 Double_t runNumber = esdEvent->GetRunNumber();
2156 Double_t evtTimeStamp = esdEvent->GetTimeStamp();
2157 Int_t evtNumberInFile = esdEvent->GetEventNumberInFile();
2160 ULong64_t orbitID = (ULong64_t)esdEvent->GetOrbitNumber();
2161 ULong64_t bunchCrossID = (ULong64_t)esdEvent->GetBunchCrossNumber();
2162 ULong64_t periodID = (ULong64_t)esdEvent->GetPeriodNumber();
2163 ULong64_t gid = ((periodID << 36) | (orbitID << 12) | bunchCrossID);
2166 for (
Int_t iTrack = 0; iTrack < esdEvent->GetNumberOfTracks(); iTrack++)
2168 AliESDtrack *track = esdEvent->GetTrack(iTrack);
2169 if(!track)
continue;
2170 AliESDfriendTrack* friendTrack=NULL;
2171 if (esdFriend && !esdFriend->TestSkipBit()) {
2172 Int_t ntracksFriend = esdFriend->GetNumberOfTracks();
2173 if (iTrack<ntracksFriend){
2174 friendTrack = (AliESDfriendTrack*)track->GetFriendTrack();
2178 if(track->Charge()==0)
continue;
2179 if(!esdTrackCuts->AcceptTrack(track))
continue;
2182 if(!IsHighDeDxParticle(track))
continue;
2183 TObjString triggerClass = esdEvent->GetFiredTriggerClasses().Data();
2185 if(!fFillTree)
return;
2186 if(!fTreeSRedirector)
return;
2190 const Int_t nSpecies=AliPID::kSPECIES;
2191 TVectorD tpcNsigma(nSpecies);
2192 TVectorD tofNsigma(nSpecies);
2194 for (
Int_t ispecie=0; ispecie<nSpecies; ++ispecie) {
2195 if (ispecie ==
Int_t(AliPID::kMuon))
continue;
2196 tpcNsigma[ispecie] = pidResponse->NumberOfSigmas(
AliPIDResponse::kTPC, track, (AliPID::EParticleType)ispecie);
2197 tofNsigma[ispecie] = pidResponse->NumberOfSigmas(
AliPIDResponse::kTOF, track, (AliPID::EParticleType)ispecie);
2202 (*fTreeSRedirector)<<
"dEdx"<<
2204 "fileName.="<<&fCurrentFileName<<
2205 "runNumber="<<runNumber<<
2206 "evtTimeStamp="<<evtTimeStamp<<
2207 "evtNumberInFile="<<evtNumberInFile<<
2208 "triggerClass="<<&triggerClass<<
2210 "vtxESD.="<<vtxESD<<
2212 "esdTrack.="<<track<<
2213 "friendTrack.="<<friendTrack<<
2214 "tofNsigma.="<<&tofNsigma<<
2215 "tpcNsigma.="<<&tpcNsigma<<
2239 if (v0->GetOnFlyStatus() ==kFALSE)
return 0;
2243 AliESDtrack * track0 =
event->GetTrack(v0->GetIndex(0));
2244 AliESDtrack * track1 =
event->GetTrack(v0->GetIndex(1));
2250 if (TMath::Abs(track0->GetTgl())>1)
return 0;
2251 if (TMath::Abs(track1->GetTgl())>1)
return 0;
2252 if ((track0->GetTPCClusterInfo(2,1))<100)
return 0;
2253 if ((track1->GetTPCClusterInfo(2,1))<100)
return 0;
2254 Float_t pos0[2]={0}, cov0[3]={0};
2255 Float_t pos1[2]={0}, cov1[3]={0};
2256 track0->GetImpactParameters(pos0,cov0);
2257 track0->GetImpactParameters(pos1,cov1);
2259 if (TMath::Abs(pos0[0])<kSigmaDCACut*TMath::Sqrt(cov0[0]))
return 0;
2260 if (TMath::Abs(pos1[0])<kSigmaDCACut*TMath::Sqrt(cov1[0]))
return 0;
2265 Double_t chi2KF = v0->GetKFInfo(2,2,2);
2266 if (chi2KF>25)
return 0;
2272 masses[0] = TDatabasePDG::Instance()->GetParticle(
"K_S0")->Mass();
2273 masses[1] = TDatabasePDG::Instance()->GetParticle(
"Lambda0")->Mass();
2275 Double_t mass00= v0->GetEffMass(0,0);
2276 Double_t mass22= v0->GetEffMass(2,2);
2277 Double_t mass42= v0->GetEffMass(4,2);
2278 Double_t mass24= v0->GetEffMass(2,4);
2284 if (TMath::Abs(mass00-0)<cutMass) {
2285 massOK=kTRUE; type+=1;
2286 if (TMath::Abs(mass00-0)<dmass) {
2288 dmass=TMath::Abs(mass00-0);
2292 if (TMath::Abs(mass24-masses[1])<cutMass) {
2293 massOK=kTRUE; type+=2;
2294 if (TMath::Abs(mass24-masses[1])<dmass){
2295 dmass = TMath::Abs(mass24-masses[1]);
2300 if (TMath::Abs(mass42-masses[1])<cutMass) {
2301 massOK=kTRUE; type+=4;
2302 if (TMath::Abs(mass42-masses[1])<dmass){
2303 dmass = TMath::Abs(mass42-masses[1]);
2308 if (TMath::Abs(mass22-masses[0])<cutMass) {
2309 massOK=kTRUE; type+=8;
2310 if (TMath::Abs(mass22-masses[0])<dmass){
2311 dmass = TMath::Abs(mass22-masses[0]);
2316 if (type==0)
return 0;
2318 const Int_t spdg[5]={kPositron,kMuonPlus,kPiPlus, kKPlus,
kProton};
2319 const AliExternalTrackParam *paramP = v0->GetParamP();
2320 const AliExternalTrackParam *paramN = v0->GetParamN();
2321 if (paramP->GetSign()<0){
2322 paramP=v0->GetParamP();
2323 paramN=v0->GetParamN();
2328 AliKFParticle kfp1( *paramP, spdg[p1] );
2329 AliKFParticle kfp2( *paramN, -1 *spdg[p2] );
2337 Double_t errPhi = V0KF.GetErrPhi();
2338 Double_t pointAngle= TMath::ACos(v0->GetV0CosineOfPointingAngle());
2339 if (pointAngle/errPhi>10)
return 0;
2351 Double_t maxPt= TMath::Max(v0->GetParamP()->Pt(), v0->GetParamN()->Pt());
2352 Double_t scalempt= TMath::Min(maxPt,10.);
2354 downscaleF *= fLowPtV0DownscaligF;
2357 Double_t mass00= v0->GetEffMass(0,0);
2359 if (TMath::Abs(mass00-0)<cutMass){
2363 if (TMath::Exp(2*scalempt)<downscaleF)
return kTRUE;
2387 if(!tpcInnerC)
return kFALSE;
2388 if(!vtx)
return kFALSE;
2394 if(!tpcInnerC->PropagateToDCABxByBz(vtx, b, 3, dz, cov))
return kFALSE;
2397 Double_t covar[6]; vtx->GetCovMatrix(covar);
2398 Double_t p[2]={tpcInnerC->GetParameter()[0]-dz[0],tpcInnerC->GetParameter()[1]-dz[1]};
2400 Double_t chi2C=tpcInnerC->GetPredictedChi2(p,c);
2401 if (chi2C>kVeryBig)
return kFALSE;
2403 if(!tpcInnerC->Update(p,c))
return kFALSE;
2413 if(!trackInnerC)
return kFALSE;
2414 if(!vtx)
return kFALSE;
2425 if(!AliTracker::PropagateTrackToBxByBz(trackInnerC,kRadius,mass,kMaxStep,kFALSE))
return kFALSE;
2426 if(!trackInnerC->PropagateToDCABxByBz(vtx, b, 3, dz, cov))
return kFALSE;
2429 Double_t covar[6]; vtx->GetCovMatrix(covar);
2430 Double_t p[2]={trackInnerC->GetParameter()[0]-dz[0],trackInnerC->GetParameter()[1]-dz[1]};
2432 Double_t chi2C=trackInnerC->GetPredictedChi2(p,c);
2433 if (chi2C>kVeryBig)
return kFALSE;
2435 if(!trackInnerC->Update(p,c))
return kFALSE;
2444 if(!particle)
return NULL;
2445 if(!stack)
return NULL;
2447 Int_t motherLabel = TMath::Abs(particle->GetMother(0));
2448 TParticle* mother = NULL;
2449 Int_t mcStackSize=stack->GetNtrack();
2450 if (motherLabel>=mcStackSize)
return NULL;
2451 mother = stack->Particle(motherLabel);
2459 Bool_t isFromConversion = kFALSE;
2462 Int_t mcStackSize=stack->GetNtrack();
2463 if (label>=mcStackSize)
return kFALSE;
2464 TParticle* particle = stack->Particle(label);
2465 if (!particle)
return kFALSE;
2467 if(particle && particle->GetPDG() && particle->GetPDG()->Charge()!=0)
2469 Int_t mech = particle->GetUniqueID();
2470 Bool_t isPrim = stack->IsPhysicalPrimary(label);
2472 Int_t motherLabel = TMath::Abs(particle->GetMother(0));
2473 if (motherLabel>=mcStackSize)
return kFALSE;
2474 TParticle* mother = stack->Particle(motherLabel);
2476 Int_t motherPdg = mother->GetPdgCode();
2478 if(!isPrim && mech==5 && motherPdg==kGamma) {
2479 isFromConversion=kTRUE;
2485 return isFromConversion;
2491 Bool_t isFromMaterial = kFALSE;
2494 Int_t mcStackSize=stack->GetNtrack();
2495 if (label>=mcStackSize)
return kFALSE;
2496 TParticle* particle = stack->Particle(label);
2497 if (!particle)
return kFALSE;
2499 if(particle && particle->GetPDG() && particle->GetPDG()->Charge()!=0)
2501 Int_t mech = particle->GetUniqueID();
2502 Bool_t isPrim = stack->IsPhysicalPrimary(label);
2504 Int_t motherLabel = TMath::Abs(particle->GetMother(0));
2505 if (motherLabel>=mcStackSize)
return kFALSE;
2506 TParticle* mother = stack->Particle(motherLabel);
2508 if(!isPrim && mech==13) {
2509 isFromMaterial=kTRUE;
2515 return isFromMaterial;
2521 Bool_t isFromStrangeness = kFALSE;
2524 Int_t mcStackSize=stack->GetNtrack();
2525 if (label>=mcStackSize)
return kFALSE;
2526 TParticle* particle = stack->Particle(label);
2527 if (!particle)
return kFALSE;
2529 if(particle && particle->GetPDG() && particle->GetPDG()->Charge()!=0)
2531 Int_t mech = particle->GetUniqueID();
2532 Bool_t isPrim = stack->IsPhysicalPrimary(label);
2534 Int_t motherLabel = TMath::Abs(particle->GetMother(0));
2535 if (motherLabel>=mcStackSize)
return kFALSE;
2536 TParticle* mother = stack->Particle(motherLabel);
2538 Int_t motherPdg = mother->GetPdgCode();
2541 if(!isPrim && mech==4 &&
2542 (TMath::Abs(motherPdg)==kKPlus || TMath::Abs(motherPdg)==kLambda0 || motherPdg==kK0Short))
2544 isFromStrangeness = kTRUE;
2550 return isFromStrangeness;
2561 Bool_t deleteTrees=kTRUE;
2562 if ((AliAnalysisManager::GetAnalysisManager()))
2564 if (AliAnalysisManager::GetAnalysisManager()->GetAnalysisType() ==
2565 AliAnalysisManager::kProofAnalysis)
2568 if (deleteTrees)
delete fTreeSRedirector;
2569 fTreeSRedirector=NULL;
2586 if(!mcEvent)
return 0;
2588 AliStack*
stack = 0;
2592 stack = mcEvent->Stack();
2593 if (!stack)
return 0;
2600 if(!isEventOK)
return 0;
2602 Int_t nPart = stack->GetNtrack();
2603 for (
Int_t iMc = 0; iMc < nPart; ++iMc)
2605 TParticle* particle = stack->Particle(iMc);
2610 if(!particle->GetPDG())
continue;
2612 if (TMath::Abs(charge) < 0.001)
2616 Bool_t prim = stack->IsPhysicalPrimary(iMc);
2621 if( particle->Eta() > accCuts->
GetMinEta() && particle->Eta() < accCuts->
GetMaxEta() )
2638 if(!ptpcInnerC)
return;
2640 const AliExternalTrackParam * innerParam = (AliExternalTrackParam *) ptrack->GetInnerParam();
2641 if(!innerParam)
return;
2644 ptrack->GetImpactParameters(dxy,dz);
2647 if( abs(ptrack->Eta())<0.8 &&
2648 ptrack->GetTPCClusterInfo(3,1)>120 &&
2649 ptrack->IsOn(0x40) &&
2650 ptrack->GetTPCclusters(0)>0.0 &&
2651 ptrack->GetTPCnclsS()/ptrack->GetTPCclusters(0)<0.4 &&
2655 ptrack->IsOn(0x0004) &&
2656 ptrack->GetNcls(0)>0 &&
2657 ptrack->GetITSchi2()>0 &&
2658 sqrt(ptrack->GetITSchi2()/ptrack->GetNcls(0))<6 &&
2659 sqrt(chi2TPCInnerC)<6 &&
2660 (ptrack->HasPointOnITSLayer(0) || ptrack->HasPointOnITSLayer(1)) &&
2662 abs(dxy)<(0.018+0.035*abs(ptrack->GetSigned1Pt())) )
2664 fPtResPhiPtTPCITS->Fill(ptrack->Pt(),ptrack->Phi(),1./abs(ptrack->GetSigned1Pt())*TMath::Sqrt(ptrack->GetSigma1Pt2()));
2665 fPtResEtaPtTPCITS->Fill(ptrack->Pt(),ptrack->Eta(),1./abs(ptrack->GetSigned1Pt())*TMath::Sqrt(ptrack->GetSigma1Pt2()));
2666 fPtResCentPtTPCITS->Fill(ptrack->Pt(),centralityF,1./abs(ptrack->GetSigned1Pt())*TMath::Sqrt(ptrack->GetSigma1Pt2()));
2672 AliExternalTrackParam *ptpcInner = (AliExternalTrackParam *) ptrack->GetTPCInnerParam();
2673 if(!ptpcInner)
return;
2677 ptrack->GetImpactParametersTPC(dxyTPC,dzTPC);
2679 if( abs(ptrack->Eta())<0.8 &&
2680 ptrack->GetTPCClusterInfo(3,1)>120 &&
2681 ptrack->IsOn(0x40)&&
2682 ptrack->GetTPCclusters(0)>0.0 &&
2683 ptrack->GetTPCnclsS()/ptrack->GetTPCclusters(0)<0.4 &&
2691 fPtResPhiPtTPC->Fill(ptpcInner->Pt(),ptpcInner->Phi(),1./abs(ptpcInner->GetSigned1Pt())*TMath::Sqrt(ptpcInner->GetSigma1Pt2()));
2692 fPtResEtaPtTPC->Fill(ptpcInner->Pt(),ptpcInner->Eta(),1./abs(ptpcInner->GetSigned1Pt())*TMath::Sqrt(ptpcInner->GetSigma1Pt2()));
2693 fPtResCentPtTPC->Fill(ptpcInner->Pt(),centralityF,1./abs(ptpcInner->GetSigned1Pt())*TMath::Sqrt(ptpcInner->GetSigma1Pt2()));
2696 fPtResPhiPtTPCc->Fill(ptpcInnerC->Pt(),ptpcInnerC->Phi(),1./abs(ptpcInnerC->GetSigned1Pt())*TMath::Sqrt(ptpcInnerC->GetSigma1Pt2()));
2697 fPtResEtaPtTPCc->Fill(ptpcInnerC->Pt(),ptpcInnerC->Eta(),1./abs(ptpcInnerC->GetSigned1Pt())*TMath::Sqrt(ptpcInnerC->GetSigma1Pt2()));
2698 fPtResCentPtTPCc->Fill(ptpcInnerC->Pt(),centralityF,1./abs(ptpcInnerC->GetSigned1Pt())*TMath::Sqrt(ptpcInnerC->GetSigma1Pt2()));
2719 const Double_t dFastPosPhiCut=0.06;
2724 if (!esdFriend)
return;
2725 if (esdFriend->TestSkipBit())
return;
2726 Int_t ntracks=esdEvent->GetNumberOfTracks();
2727 Float_t bz = esdEvent->GetMagneticField();
2732 TMatrixD vecPosR0(ntracks,6);
2733 TMatrixD vecMomR0(ntracks,6);
2734 TMatrixD vecPosR1(ntracks,6);
2735 TMatrixD vecMomR1(ntracks,6);
2737 for (
Int_t iTrack=0; iTrack<ntracks; iTrack++){
2738 AliESDtrack *track = esdEvent->GetTrack(iTrack);
2739 if(!track)
continue;
2740 if (track->GetInnerParam()){
2741 const AliExternalTrackParam *trackTPC=track->GetInnerParam();
2742 trackTPC->GetXYZAt(radiusMatch,bz,xyz);
2743 trackTPC->GetPxPyPzAt(radiusMatch,bz,pxyz);
2744 for (
Int_t i=0; i<3; i++){
2745 vecPosR1(iTrack,i)=xyz[i];
2746 vecMomR1(iTrack,i)=pxyz[i];
2748 vecPosR1(iTrack,3)= TMath::ATan2(xyz[1],xyz[0]);
2749 vecMomR1(iTrack,3)= TMath::ATan2(pxyz[1],pxyz[0]);
2750 vecMomR1(iTrack,4)= trackTPC->GetSigned1Pt();;
2751 vecMomR1(iTrack,5)= trackTPC->GetTgl();;
2753 const AliESDfriendTrack* friendTrack = track->GetFriendTrack();
2754 if(!friendTrack)
continue;
2755 if (friendTrack->GetITSOut()){
2756 const AliExternalTrackParam *trackITS=friendTrack->GetITSOut();
2757 trackITS->GetXYZAt(radiusMatch,bz,xyz);
2758 trackITS->GetPxPyPzAt(radiusMatch,bz,pxyz);
2759 for (
Int_t i=0; i<3; i++){
2760 vecPosR0(iTrack,i)=xyz[i];
2761 vecMomR0(iTrack,i)=pxyz[i];
2763 vecPosR0(iTrack,3)= TMath::ATan2(xyz[1],xyz[0]);
2764 vecMomR0(iTrack,3)= TMath::ATan2(pxyz[1],pxyz[0]);
2765 vecMomR0(iTrack,4)= trackITS->GetSigned1Pt();;
2766 vecMomR0(iTrack,5)= trackITS->GetTgl();;
2776 Int_t ntracksPropagated=0;
2777 AliExternalTrackParam extTrackDummy;
2778 AliESDtrack esdTrackDummy;
2779 AliExternalTrackParam itsAtTPC;
2780 AliExternalTrackParam itsAtITSTPC;
2781 for (
Int_t iTrack0=0; iTrack0<ntracks; iTrack0++){
2782 AliESDtrack *track0 = esdEvent->GetTrack(iTrack0);
2783 if(!track0)
continue;
2784 if (track0->IsOn(AliVTrack::kTPCin))
continue;
2785 const AliESDfriendTrack* friendTrack0 = track0->GetFriendTrack();
2786 if (!friendTrack0)
continue;
2789 ntracksPropagated++;
2798 Int_t indexTPCITS=-1;
2799 Int_t ncandidates0=0;
2800 Int_t ncandidates1=0;
2801 itsAtTPC=*(friendTrack0->GetITSOut());
2802 itsAtITSTPC=*(friendTrack0->GetITSOut());
2803 for (
Int_t iTrack1=0; iTrack1<ntracks; iTrack1++){
2804 AliESDtrack *track1 = esdEvent->GetTrack(iTrack1);
2805 if(!track1)
continue;
2806 if (!track1->IsOn(AliVTrack::kTPCin))
continue;
2809 if (TMath::Abs(vecPosR1(iTrack1,2)-vecPosR0(iTrack0,2))>dFastZCut)
continue;
2810 if (TMath::Abs(vecPosR1(iTrack1,3)-vecPosR0(iTrack0,3))>dFastPosPhiCut)
continue;
2811 if (TMath::Abs(vecMomR1(iTrack1,3)-vecMomR0(iTrack0,3))>dFastPhiCut)
continue;
2812 if (TMath::Abs(vecMomR1(iTrack1,5)-vecMomR0(iTrack0,5))>dFastThetaCut)
continue;
2813 if (TMath::Abs(vecMomR1(iTrack1,4)-vecMomR0(iTrack0,4))>dFastPtCut)
continue;
2816 const AliExternalTrackParam * param1= track1->GetInnerParam();
2817 if (!friendTrack0->GetITSOut())
continue;
2818 AliExternalTrackParam outerITS = *(friendTrack0->GetITSOut());
2819 if (!outerITS.Rotate(param1->GetAlpha()))
continue;
2820 if (!outerITS.PropagateTo(param1->GetX(),
bz))
continue;
2821 Double_t chi2 = outerITS.GetPredictedChi2(param1);
2822 if (chi2>chi2Cut)
continue;
2824 if (chi2<minChi2All){
2828 if (chi2<minChi2TPC && track1->IsOn(AliVTrack::kITSin)==0){
2833 if (chi2<minChi2TPCITS && track1->IsOn(AliVTrack::kITSin)){
2835 indexTPCITS=iTrack1;
2836 itsAtITSTPC=outerITS;
2840 AliESDtrack * trackAll= (indexAll>=0)? esdEvent->GetTrack(indexAll):&esdTrackDummy;
2841 AliESDtrack * trackTPC= (indexTPC>=0)? esdEvent->GetTrack(indexTPC):&esdTrackDummy;
2842 AliESDtrack * trackTPCITS= (indexTPCITS>=0)? esdEvent->GetTrack(indexTPCITS):&esdTrackDummy;
2843 (*fTreeSRedirector)<<
"itsTPC"<<
2844 "indexAll="<<indexAll<<
2845 "indexTPC="<<indexTPC<<
2846 "indexTPCITS="<<indexTPCITS<<
2847 "ncandidates0="<<ncandidates0<<
2848 "ncandidates1="<<ncandidates1<<
2850 "chi2All="<<minChi2All<<
2851 "chi2TPC="<<minChi2TPC<<
2852 "chi2TPCITS="<<minChi2TPCITS<<
2854 "track0.="<<track0<<
2855 "trackAll.="<<trackAll<<
2856 "trackTPC.="<<trackTPC<<
2857 "trackTPCITS.="<<trackTPCITS<<
2859 "itsAtTPC.="<<&itsAtTPC<<
2860 "itsAtITSTPC.="<<&itsAtITSTPC<<
2913 if (trackMatch==NULL){
2914 ::Error(
"AliAnalysisTaskFilteredTree::GetNearestTrack",
"invalid track pointer");
2917 Int_t ntracks=
event->GetNumberOfTracks();
2924 for (
Int_t itrack=0; itrack<ntracks; itrack++){
2925 if (itrack==indexSkip)
continue;
2926 AliESDtrack *ptrack=
event->GetTrack(itrack);
2927 if (ptrack==NULL)
continue;
2928 if (trackType==0 && (ptrack->IsOn(0x1)==kFALSE || ptrack->IsOn(0x10)==kTRUE))
continue;
2929 if (trackType==1 && (ptrack->IsOn(0x10)==kFALSE))
continue;
2930 if (trackType==2 && (ptrack->IsOn(0x1)==kFALSE || ptrack->IsOn(0x10)==kFALSE))
continue;
2932 if (ptrack->GetKinkIndex(0)<0)
continue;
2933 const AliExternalTrackParam * track=0;
2934 if (paramType==0) track=ptrack;
2935 if (paramType==1) track=ptrack->GetInnerParam();
2941 if (TMath::Abs((track->GetTgl()-trackMatch->GetTgl()))>ktglCut)
continue;
2943 if (TMath::Abs((track->GetSigned1Pt()-trackMatch->GetSigned1Pt()))>kqptCut)
continue;
2946 Double_t alphaDist=TMath::Abs(TMath::ATan2(track->Py(),track->Px())-TMath::ATan2(trackMatch->Py(),trackMatch->Py()));
2947 if (alphaDist>TMath::Pi()) alphaDist-=TMath::TwoPi();
2948 if (alphaDist>kAlphaCut)
continue;
2950 AliExternalTrackParam param(*track);
2951 if (param.Rotate(trackMatch->GetAlpha())==kFALSE)
continue;
2952 if (param.PropagateTo(trackMatch->GetX(),trackMatch->GetBz())==kFALSE)
continue;
2953 Double_t chi2=trackMatch->GetPredictedChi2(¶m);
2969 TDatabasePDG *
pdg = TDatabasePDG::Instance();
2970 Double_t massLambda = pdg->GetParticle(
"Lambda0")->Mass();
2971 Double_t massK0 = pdg->GetParticle(
"K0")->Mass();
2972 Double_t massPion = pdg->GetParticle(
"pi+")->Mass();
2973 Double_t massProton = pdg->GetParticle(
"proton")->Mass();
2974 const Double_t livetimeK0=2.684341668932;
2975 const Double_t livetimeLambda=7.8875395;
2977 tree->SetAlias(
"massPion",Form(
"(%f+0)",massPion));
2978 tree->SetAlias(
"massProton",Form(
"(%f+0)",massProton));
2979 tree->SetAlias(
"massK0",Form(
"(%f+0)",massK0));
2980 tree->SetAlias(
"massLambda",Form(
"(%f+0)",massLambda));
2982 tree->SetAlias(
"livetimeK0",TString::Format(
"%f",livetimeK0));
2983 tree->SetAlias(
"livetimeLambda",TString::Format(
"%f",livetimeLambda));
2984 tree->SetAlias(
"livetimeLikeK0",TString::Format(
"exp(-v0.fRr/(sqrt((v0.P()/%f)^2+1)*%f))",massK0, livetimeK0));
2985 tree->SetAlias(
"livetimeLikeLambda",TString::Format(
"exp(-v0.fRr/(sqrt((v0.P()/%f)^2+1)*%f))",massLambda,livetimeLambda));
2986 tree->SetAlias(
"livetimeLikeGamma",
"v0.fRr/80");
2987 tree->SetAlias(
"livetimeLikeBkg",
"v0.fRr/80");
2989 tree->SetAlias(
"K0Delta",
"(v0.GetEffMass(2,2)-massK0)");
2990 tree->SetAlias(
"LDelta",
"(v0.GetEffMass(4,2)-massLambda)");
2991 tree->SetAlias(
"ALDelta",
"(v0.GetEffMass(2,4)-massLambda)");
2992 tree->SetAlias(
"EDelta",
"(v0.GetEffMass(0,0))");
2994 tree->SetAlias(
"K0Pull",
"(v0.GetEffMass(2,2)-massK0)/v0.GetKFInfo(2,2,1)");
2995 tree->SetAlias(
"LPull",
"(v0.GetEffMass(4,2)-massLambda)/v0.GetKFInfo(4,2,1)");
2996 tree->SetAlias(
"ALPull",
"(v0.GetEffMass(2,4)-massLambda)/v0.GetKFInfo(2,4,1)");
2997 tree->SetAlias(
"EPull",
"EDelta/v0.GetKFInfo(0,0,1)");
2999 tree->SetAlias(
"K0PullEff",
"K0Delta/sqrt((3.63321e-03)**2+(5.68795e-04*v0.Pt())**2)");
3000 tree->SetAlias(
"LPullEff",
"LDelta/sqrt((1.5e-03)**2+(1.8e-04*v0.Pt())**2)");
3001 tree->SetAlias(
"ALPullEff",
"ALDelta/sqrt((1.5e-03)**2+(1.8e-04*v0.Pt())**2)");
3002 tree->SetAlias(
"EPullEff",
"v0.GetEffMass(0,0)/sqrt((5e-03)**2+(1.e-04*v0.Pt())**2)");
3004 tree->SetAlias(
"dEdx0DProton",
"AliMathBase::BetheBlochAleph(track0.fIp.P()/massProton)");
3005 tree->SetAlias(
"dEdx1DProton",
"AliMathBase::BetheBlochAleph(track1.fIp.P()/massProton)");
3006 tree->SetAlias(
"dEdx0DPion",
"AliMathBase::BetheBlochAleph(track0.fIp.P()/massPion)");
3007 tree->SetAlias(
"dEdx1DPion",
"AliMathBase::BetheBlochAleph(track1.fIp.P()/massPion)");
3009 tree->SetAlias(
"cutDist",
"sqrt((track0.fIp.fP[0]-track1.fIp.fP[0])**2+(track0.fIp.fP[1]-track1.fIp.fP[1])**2)>3");
3010 tree->SetAlias(
"cutLong",
"track0.GetTPCClusterInfo(3,1,0)-5*abs(track0.fP[4])>130&&track1.GetTPCClusterInfo(3,1,0)>130-5*abs(track0.fP[4])");
3011 tree->SetAlias(
"cutPID",
"track0.fTPCsignal>0&&track1.fTPCsignal>0");
3012 tree->SetAlias(
"cutResol",
"sqrt(track0.fC[14]/track0.fP[4])<0.15&&sqrt(track1.fC[14]/track1.fP[4])<0.15");
3013 tree->SetAlias(
"cutV0",
"cutPID&&cutLong&&cutResol");
3015 tree->SetAlias(
"K0PullBkg",
"min(min(abs(LPull),abs(ALPull)),abs(EPull))+0");
3016 tree->SetAlias(
"LambdaPullBkg",
"min(min(abs(K0Pull),abs(ALPull)),abs(EPull)+0)");
3017 tree->SetAlias(
"ALambdaPullBkg",
"min(min(abs(K0Pull),abs(LPull)),abs(EPull)+0)");
3018 tree->SetAlias(
"EPullBkg",
"min(min(abs(K0Pull),abs(LPull)),abs(ALPull)+0)");
3020 tree->SetAlias(
"K0Selected",
"abs(K0Pull)<3. &&abs(K0PullEff)<3. && abs(LPull)>3 && abs(ALPull)>3 &&v0.PtArmV0()>0.11");
3021 tree->SetAlias(
"LambdaSelected",
"abs(LPull)<3. &&abs(LPullEff)<3. && abs(K0Pull)>3 && abs(EPull)>3 && abs(EDelta)>0.05");
3022 tree->SetAlias(
"ALambdaSelected",
"abs(ALPull)<3. &&abs(ALPullEff)<3 && abs(K0Pull)>3 && abs(EPull)>3 &&abs(EDelta)>0.05");
3023 tree->SetAlias(
"GammaSelected",
"abs(EPull)<3 && abs(K0Pull)>3 && abs(LPull)>3 && abs(ALPull)>3");
3025 tree->SetAlias(
"K0Like0",
"exp(-K0Pull^2)*livetimeLikeK0");
3026 tree->SetAlias(
"LLike0",
"exp(-LPull^2)*livetimeLikeLambda");
3027 tree->SetAlias(
"ALLike0",
"exp(-ALPull^2)*livetimeLikeLambda");
3028 tree->SetAlias(
"ELike0",
"exp(-abs(EPull)*0.2)*livetimeLikeGamma");
3029 tree->SetAlias(
"BkgLike",
"0.000005*ntracks");
3031 tree->SetAlias(
"V0Like",
"exp(-acos(v0.fPointAngle)*v0.fRr/0.36)*exp(-sqrt(kf.GetChi2())/0.5)");
3032 tree->SetAlias(
"ELike",
"(V0Like*ELike0)/(V0Like*(K0Like0+LLike0+ALLike0+ELike0)+BkgLike)");
3033 tree->SetAlias(
"K0Like",
"K0Like0/(K0Like0+LLike0+ALLike0+ELike0+BkgLike)");
3034 tree->SetAlias(
"LLike",
"LLike0/(K0Like0+LLike0+ALLike0+ELike0+BkgLike)");
3035 tree->SetAlias(
"ALLike",
"ALLike0/(K0Like0+LLike0+ALLike0+ELike0+BkgLike)");
3037 tree->SetAlias(
"K0PIDPull",
"(abs(track0.fTPCsignal/dEdx0DPion-50)+abs(track1.fTPCsignal/dEdx1DPion-50))/5.");
3038 tree->SetAlias(
"mpt",
"1/v0.Pt()");
3039 tree->SetAlias(
"tglV0",
"v0.Pz()/v0.Pt()");
3040 tree->SetAlias(
"alphaV0",
"atan2(v0.Py(),v0.Px()+0)");
3041 tree->SetAlias(
"dalphaV0",
"alphaV0-((int(36+9*(alphaV0/pi))-36)*pi/9.)");
3049 tree->SetAlias(
"phiInner",
"atan2(esdTrack.fIp.Py(),esdTrack.fIp.Px()+0)");
3050 tree->SetAlias(
"secInner",
"9*(atan2(esdTrack.fIp.Py(),esdTrack.fIp.Px()+0)/pi)+18*(esdTrack.fIp.Py()<0)");
3051 tree->SetAlias(
"tgl",
"esdTrack.fP[3]");
3052 tree->SetAlias(
"alphaV",
"esdTrack.fAlpha");
3053 tree->SetAlias(
"qPt",
"esdTrack.fP[4]");
3054 tree->SetAlias(
"dalphaQ",
"sign(esdTrack.fP[4])*(esdTrack.fIp.fP[0]/esdTrack.fIp.fX)");
3055 TStatToolkit::AddMetadata(tree,
"phiInner.Title",
"#phi_{TPCin}");
3056 TStatToolkit::AddMetadata(tree,
"secInner.Title",
"sector_{TPCin}");
3057 TStatToolkit::AddMetadata(tree,
"tgl.Title",
"#it{p_{z}}/#it{p}_{T}");
3058 TStatToolkit::AddMetadata(tree,
"alphaV.Title",
"#phi_{vertex}");
3059 TStatToolkit::AddMetadata(tree,
"qPt.Title",
"q/#it{p}_{T}");
3060 TStatToolkit::AddMetadata(tree,
"phiInner.AxisTitle",
"#it{#phi}_{TPCin}");
3061 TStatToolkit::AddMetadata(tree,
"secInner.AxisTitle",
"sector_{TPCin}");
3062 TStatToolkit::AddMetadata(tree,
"tgl.AxisTitle",
"#it{p}_{z}/#it{p}_{t}");
3063 TStatToolkit::AddMetadata(tree,
"alphaV.AxisTitle",
"#it{#phi}_{vertex}");
3064 TStatToolkit::AddMetadata(tree,
"qPt.AxisTitle",
"q/#it{p}_{T} (1/GeV)");
3067 tree->SetAlias(
"normChi2ITS",
"sqrt(esdTrack.fITSchi2/esdTrack.fITSncls)");
3068 tree->SetAlias(
"normChi2TPC",
"esdTrack.fTPCchi2/esdTrack.fTPCncls");
3069 tree->SetAlias(
"normChi2TRD",
"esdTrack.fTRDchi2/esdTrack.fTRDncls");
3070 tree->SetAlias(
"normDCAR",
"esdTrack.fdTPC/sqrt(1+esdTrack.fP[4]**2)");
3071 tree->SetAlias(
"normDCAZ",
"esdTrack.fzTPC/sqrt(1+esdTrack.fP[4]**2)");
3072 TStatToolkit::AddMetadata(tree,
"normChi2ITS.Title",
"#sqrt{#chi2_{ITS}/N_{clITS}}");
3073 TStatToolkit::AddMetadata(tree,
"normChi2TPC.Title",
"#chi2_{TPC}/N_{clTPC}");
3074 TStatToolkit::AddMetadata(tree,
"normChi2ITS.AxisTitle",
"#sqrt{#chi2_{ITS}/N_{clITS}}");
3075 TStatToolkit::AddMetadata(tree,
"normChi2TPC.AxisTitle",
"#chi2_{TPC}/N_{clTPC}");
3077 tree->SetAlias(
"TPCASide",
"esdTrack.fIp.fP[1]>0");
3078 tree->SetAlias(
"TPCCSide",
"esdTrack.fIp.fP[1]<0");
3079 tree->SetAlias(
"TPCCross",
"esdTrack.fIp.fP[1]*esdTrack.fIp.fP[3]<0");
3080 tree->SetAlias(
"ITSOn",
"((esdTrack.fFlags&0x1)>0)");
3081 tree->SetAlias(
"TPCOn",
"((esdTrack.fFlags&0x10)>0)");
3082 tree->SetAlias(
"ITSRefit",
"((esdTrack.fFlags&0x4)>0)");
3083 tree->SetAlias(
"TPCRefit",
"((esdTrack.fFlags&0x40)>0)");
3084 tree->SetAlias(
"TOFOn",
"((esdTrack.fFlags&0x2000)>0)");
3085 tree->SetAlias(
"TRDOn",
"((esdTrack.fFlags&0x400)>0)");
3086 tree->SetAlias(
"ITSOn0",
"esdTrack.fITSncls>4&&esdTrack.HasPointOnITSLayer(0)&&esdTrack.HasPointOnITSLayer(1)");
3087 tree->SetAlias(
"ITSOn01",
"esdTrack.fITSncls>3&&(esdTrack.HasPointOnITSLayer(0)||esdTrack.HasPointOnITSLayer(1))");
3088 tree->SetAlias(
"nclCut",
"(esdTrack.GetTPCClusterInfo(3,1)+esdTrack.fTRDncls)>140-5*(abs(esdTrack.fP[4]))");
3089 tree->SetAlias(
"IsPrim4",
"sqrt((esdTrack.fD**2)/esdTrack.fCdd+(esdTrack.fZ**2)/esdTrack.fCzz)<4");
3090 tree->SetAlias(
"IsPrim4TPC",
"sqrt((esdTrack.fdTPC**2)/esdTrack.fCddTPC+(esdTrack.fzTPC**2)/esdTrack.fCzzTPC)<4");
3093 const char * chName[5]={
"#it{r#phi}",
"#it{z}",
"sin(#phi)",
"tan(#it{#theta})",
"q/#it{p}_{t}"};
3094 const char * chUnit[5]={
"cm",
"cm",
"",
"",
"(1/GeV)"};
3095 const char * refBranch=(tree->GetBranch(
"extInnerParamV."))?
"extInnerParamV":
"esdTrack.fTPCInner";
3097 for (
Int_t iPar=0; iPar<5; iPar++){
3101 tree->SetAlias(TString::Format(
"covarP%dNorm",iPar).
Data(),TString::Format(
"sqrt(%s.fC[%d]+0)/sqrt(1+(1*esdTrack.fP[4])**2)/sqrt(1+(1*esdTrack.fP[4])**2)",refBranch,
AliExternalTrackParam::GetIndex(iPar,iPar)).
Data());
3102 tree->SetAlias(TString::Format(
"covarPC%dNorm",iPar).
Data(),TString::Format(
"sqrt(extInnerParamC.fC[%d]+0)/sqrt(1+(5*esdTrack.fP[4])**2)",
AliExternalTrackParam::GetIndex(iPar,iPar)).
Data());
3104 tree->SetAlias(TString::Format(
"deltaP%d",iPar).
Data(),TString::Format(
"(%s.fP[%d]-esdTrack.fCp.fP[%d])",refBranch,iPar,iPar).
Data());
3105 tree->SetAlias(TString::Format(
"deltaPC%d",iPar).
Data(),TString::Format(
"(extInnerParamC.fP[%d]-esdTrack.fCp.fP[%d])",iPar,iPar).
Data());
3108 tree->SetAlias(TString::Format(
"deltaP%dNorm",iPar).
Data(),TString::Format(
"(%s.fP[%d]-esdTrack.fCp.fP[%d])/sqrt(1+(1*esdTrack.fP[4])**2)",refBranch,iPar,iPar).
Data());
3109 tree->SetAlias(TString::Format(
"deltaPC%dNorm",iPar).
Data(),TString::Format(
"(extInnerParamC.fP[%d]-esdTrack.fCp.fP[%d])/sqrt(1.+(5.*esdTrack.fP[4])**2)",iPar,iPar).
Data());
3111 tree->SetAlias(TString::Format(
"pullP%d",iPar).
Data(),
3112 TString::Format(
"(%s.fP[%d]-esdTrack.fCp.fP[%d])/sqrt(%s.fC[%d]+esdTrack.fCp.fC[%d])",refBranch,
3114 tree->SetAlias(TString::Format(
"pullPC%d",iPar).
Data(),
3115 TString::Format(
"(extInnerParamC.fP[%d]-esdTrack.fCp.fP[%d])/sqrt(extInnerParamC.fC[%d]+esdTrack.fCp.fC[%d])",
3117 TStatToolkit::AddMetadata(tree,TString::Format(
"deltaP%d.AxisTitle",iPar).
Data(),TString::Format(
"%s (%s)",chName[iPar], chUnit[iPar]).
Data());
3118 TStatToolkit::AddMetadata(tree,TString::Format(
"deltaPC%d.AxisTitle",iPar).
Data(),TString::Format(
"%s (%s)",chName[iPar], chUnit[iPar]).
Data());
3119 TStatToolkit::AddMetadata(tree,TString::Format(
"pullP%d.AxisTitle",iPar).
Data(),TString::Format(
"pull %s (unit)",chName[iPar]).
Data());
3120 TStatToolkit::AddMetadata(tree,TString::Format(
"pullPC%d.AxisTitle",iPar).
Data(),TString::Format(
"pull %s (unit)",chName[iPar]).
Data());
3122 TStatToolkit::AddMetadata(tree,TString::Format(
"deltaP%d.Title",iPar).
Data(),TString::Format(
"%s",chName[iPar]).
Data());
3123 TStatToolkit::AddMetadata(tree,TString::Format(
"deltaPC%d.Title",iPar).
Data(),TString::Format(
"%s",chName[iPar]).
Data());
3124 TStatToolkit::AddMetadata(tree,TString::Format(
"pullP%d.Title",iPar).
Data(),TString::Format(
"pull %s",chName[iPar]).
Data());
3125 TStatToolkit::AddMetadata(tree,TString::Format(
"pullPC%d.Title",iPar).
Data(),TString::Format(
"pull %s",chName[iPar]).
Data());
3127 TStatToolkit::AddMetadata(tree,
"mult.Title",
"N_{prim}");
3128 TStatToolkit::AddMetadata(tree,
"mult.AxisTitle",
"N_{prim}");
3129 TStatToolkit::AddMetadata(tree,
"ntracks.Title",
"N_{tr}");
3130 TStatToolkit::AddMetadata(tree,
"ntracks.AxisTitle",
"N_{tr} (prim+sec+pile-up)");
3145 Int_t nTrackRefs = trackRefArray.GetEntriesFast();
3147 AliTrackReference *refNearest=0;
3148 TVectorF fdist(nTrackRefs);
3149 for (
Int_t itrR = 0; itrR < nTrackRefs; ++itrR) {
3150 AliTrackReference* ref =
static_cast<AliTrackReference*
>(trackRefArray.UncheckedAt(itrR));
3151 Double_t lDist=(ref->X()-xyz[0])*(ref->X()-xyz[0])+(ref->Y()-xyz[1])*(ref->Y()-xyz[1])+(ref->Z()-xyz[2])*(ref->Z()-xyz[2]);
3155 Int_t index0=0,index1=0;
3156 for (
Int_t itrR = 1; itrR < nTrackRefs-1; ++itrR){
3157 if (fdist[itrR]<dist){
3159 if (fdist[itrR-1]<fdist[itrR+1]){
3167 refNearest=
static_cast<AliTrackReference*
>(trackRefArray.UncheckedAt(index0));
3170 if (index0<0)
return -1;
3171 AliTrackReference *ref0=
static_cast<AliTrackReference*
>(trackRefArray.UncheckedAt(index0));
3172 AliTrackReference *ref1=
static_cast<AliTrackReference*
>(trackRefArray.UncheckedAt(index0));
3173 Double_t xyz0[3]={ref0->X(), ref0->Y(), ref0->Z()};
3174 Double_t pxyz0[3]={ref0->Px(), ref0->Py(), ref0->Pz()};
3175 Double_t xyz1[3]={ref1->X(), ref1->Y(), ref1->Z()};
3176 Double_t pxyz1[3]={ref1->Px(), ref1->Py(), ref1->Pz()};
3177 AliExternalTrackParam param0(xyz0,pxyz0,(
Double_t*)param.GetCovariance(),param.GetSign());
3178 AliExternalTrackParam param1(xyz1,pxyz1,(
Double_t*)param.GetCovariance(),param.GetSign());
3180 errorCode+=(param0.Rotate(param.GetAlpha())==kFALSE);
3181 errorCode+=(param1.Rotate(param.GetAlpha())==kFALSE);
3183 return 100+errorCode;
3185 errorCode+=(AliTrackerBase::PropagateTrackToBxByBz(¶m0,param.GetX(),particle.GetMass(),5.,kFALSE,0.9999)==kFALSE);
3186 errorCode+=(AliTrackerBase::PropagateTrackToBxByBz(¶m1,param.GetX(),particle.GetMass(),5.,kFALSE,0.9999)==kFALSE);
3188 return 1000 +errorCode;
3190 AliTrackerBase::UpdateTrack(param0,param1);
3192 for (
Int_t iPar=0; iPar<5; iPar++){
3193 mcDiff[iPar]=param.GetParameter()[iPar]-param0.GetParameter()[iPar];
3213 AliStack *
stack = fMC->Stack();
3214 Int_t mcStackSize=stack->GetNtrack();
3215 if (label>mcStackSize){
3219 TParticle *particle=NULL;
3221 Int_t status = fMC->GetParticleAndTR(label, particle, trackRefs);
3222 trackInfoO[
"p"]=particle;
3223 if (particle==NULL || particle->GetPDG() ==NULL || particle->GetPDG()->Charge()!=0.) {
3227 Int_t nTrackRef = trackRefs->GetEntries();
3228 trackInfoF[
"nRef"]=nTrackRef;
3232 TVectorF refCounter(21);
3233 TVectorF detLength(21);
3235 AliTrackReference*detRef[21]={NULL};
3236 Int_t loopCounter=0;
3237 AliTrackReference *lastLoopRef = NULL;
3238 for (
Int_t iRef = 0; iRef < nTrackRef; iRef++) {
3239 AliTrackReference *ref = (AliTrackReference *) trackRefs->At(iRef);
3240 if (ref->Label() != label)
continue;
3241 Int_t detID=ref->DetectorId();
3243 trackInfoO[
"refDecay"] = ref;
3246 if (ref->R()>maxRadius) maxRadius=ref->R();
3247 refCounter[detID]++;
3248 if (lastLoopRef!=NULL && ref->R()<kTPCOutR){
3249 Double_t dir0=ref->Px()*ref->X()+ref->Py()*ref->Y();
3250 Double_t dir1=lastLoopRef->Px()*lastLoopRef->X()+lastLoopRef->Py()*lastLoopRef->Y();
3256 if (lastLoopRef==NULL) lastLoopRef=ref;
3257 if (refCounter[detID] >0){
3258 detLength[detID]=ref->GetLength()-detRef[detID]->GetLength();
3263 trackInfoO[
"refCounter"]=
new TVectorF(refCounter);
3264 trackInfoO[
"detLength"]=
new TVectorF(detLength);
3265 trackInfoF[
"loopCounter"]=loopCounter;
3266 trackInfoF[
"maxRadius"]=maxRadius;
3270 Int_t ntracks=fESD->GetNumberOfTracks();
3271 Int_t nRecITS=0, nRecTPC=0, nRecTRD=0, nRecTOF=0;
3272 AliESDtrack * esdTrack=NULL;
3273 AliESDtrack * itsTrack=0;
3274 Int_t detRecLength=0, trackIndex=-1;
3275 for (
Int_t iTrack=0;iTrack<ntracks;iTrack++) {
3276 AliESDtrack *track = fESD->GetTrack(iTrack);
3277 if (track == NULL)
continue;
3278 Int_t recoLabel = TMath::Abs(track->GetLabel());
3279 if (recoLabel != label)
continue;
3281 Int_t detRecLength0 = 0;
3282 if (TMath::Abs(track->GetITSLabel()) == label) detRecLength += track->IsOn(AliESDtrack::kITSin) +
3283 track->IsOn(AliESDtrack::kITSrefit);
3284 if (TMath::Abs(track->GetTPCLabel()) == label) detRecLength += track->IsOn(AliESDtrack::kTPCin) +
3285 track->IsOn(AliESDtrack::kTPCrefit);
3286 if (TMath::Abs(track->GetTRDLabel()) == label) detRecLength += track->IsOn(AliESDtrack::kTRDout) +
3287 track->IsOn(AliESDtrack::kTRDrefit);
3288 if (track->IsOn(AliESDtrack::kITSin)) nRecITS++;
3289 if (track->IsOn(AliESDtrack::kTPCin)) nRecTPC++;
3290 if (track->IsOn(AliESDtrack::kTRDout)) nRecTRD++;
3293 if (detRecLength == detRecLength0) {
3294 Double_t tglParticle = particle->Pz() / particle->Pt();
3295 Double_t deltaTgl0 = esdTrack->Pz() / esdTrack->Pt() - tglParticle;
3296 Double_t deltaTgl1 = track->Pz() / track->Pt() - tglParticle;
3297 if (TMath::Abs(deltaTgl1) < TMath::Abs(deltaTgl0)) {
3299 trackIndex = iTrack;
3302 if (detRecLength < detRecLength0) {
3303 detRecLength = detRecLength0;
3305 trackIndex = iTrack;
3307 if (!track->IsOn(AliESDtrack::kTPCin) && track->IsOn(AliESDtrack::kITSin)) {
3311 trackInfoO[
"esdTrack"]=esdTrack;
3312 trackInfoO[
"itsTrack"]=itsTrack;
3315 if (esdTrack!=NULL){
3316 if (GetMCTrackDiff(*particle,*(esdTrack), *trackRefs, mcDiff)==0){
3317 trackInfoO[
"diffesdTrack"]=
new TVectorF(mcDiff);
3319 if (esdTrack->GetTPCInnerParam()){
3320 if (GetMCTrackDiff(*particle,*(esdTrack->GetTPCInnerParam()), *trackRefs, mcDiff)==0){
3321 trackInfoO[
"diffTPCInnerParam"]=
new TVectorF(mcDiff);
3324 if (esdTrack->GetInnerParam()){
3325 if (GetMCTrackDiff(*particle,*(esdTrack->GetInnerParam()), *trackRefs, mcDiff)==0){
3326 trackInfoO[
"diffInnerParam"]=
new TVectorF(mcDiff);
3329 if (esdTrack->GetOuterParam()){
3330 if (GetMCTrackDiff(*particle,*(esdTrack->GetOuterParam()), *trackRefs, mcDiff)==0){
3331 trackInfoO[
"diffOuterParam"]=
new TVectorF(mcDiff);
3334 if (esdTrack->GetOuterHmpParam()){
3335 if (GetMCTrackDiff(*particle,*(esdTrack->GetOuterHmpParam()), *trackRefs, mcDiff)==0){
3336 trackInfoO[
"diffOuterHmpParam"]=
new TVectorF(mcDiff);
3352 AliStack *
stack = fMC->Stack();
3354 Int_t mcStackSize=stack->GetNtrack();
3355 std::map<std::string,float> trackInfoF;
3356 std::map<std::string,TObject*> trackInfoO;
3357 static Int_t downscaleCounter=0;
3358 for (
Int_t iMc = 0; iMc < mcStackSize; ++iMc) {
3359 TParticle *particle = stack->Particle(iMc);
3360 if (!particle)
continue;
3362 Double_t scalempt= TMath::Min(particle->Pt(),10.);
3364 downscaleF *= fLowPtTrackDownscaligF;
3365 if (downscaleCounter>0 && TMath::Exp(2*scalempt)<downscaleF)
continue;
3366 Int_t result = GetMCInfoTrack(iMc, trackInfoF,trackInfoO);
void ProcessV0(AliESDEvent *const esdEvent=0, AliMCEvent *const mcEvent=0, AliESDfriend *const esdFriend=0)
static void SetDefaultAliasesHighPt(TTree *treeV0)
Bool_t IsTriggerRequired() const
void ProcessITSTPCmatchOut(AliESDEvent *const esdEvent=0, AliESDfriend *const esdFriend=0)
Int_t GetMCInfoTrack(Int_t label, std::map< std::string, float > &trackInfoF, std::map< std::string, TObject * > &trackInfoO)
Bool_t IsFromConversion(Int_t label, AliStack *const stack)
Bool_t ConstrainTPCInner(AliExternalTrackParam *const tpcInnerC, const AliESDVertex *vtx, Double_t b[3])
Bool_t IsFromMaterial(Int_t label, AliStack *const stack)
Bool_t ConstrainTrackInner(AliExternalTrackParam *const trackInnerC, const AliESDVertex *vtx, Double_t mass, Double_t b[3])
Float_t GetMaxEta() const
void ProcessAll(AliESDEvent *const esdEvent=0, AliMCEvent *const mcEvent=0, AliESDfriend *const esdFriend=0)
static Int_t GetMCTrackDiff(const TParticle &particle, const AliExternalTrackParam ¶m, TClonesArray &trackRefArray, TVectorF &mcDiff)
virtual ~AliAnalysisTaskFilteredTree()
Bool_t AcceptTrack(AliESDtrack *track)
Bool_t IsV0Downscaled(AliESDv0 *const v0)
virtual void UserExec(Option_t *option)
virtual void Terminate(Option_t *)
virtual void UserCreateOutputObjects()
virtual void FinishTaskOutput()
void ProcessTrackMatch(AliESDEvent *const esdEvent=0, AliESDfriend *const esdFriend=0)
Int_t GetIndex(TObjArray *triggersB, Int_t trigNr, Int_t centNr)
void ProcessCosmics(AliESDEvent *const esdEvent=0, AliESDfriend *esdFriend=0)
Float_t GetMinEta() const
void ProcessdEdx(AliESDEvent *const esdEvent=0, AliMCEvent *const mcEvent=0, AliESDfriend *const esdFriend=0)
Bool_t Data(TH1F *h, Double_t *rangefit, Bool_t writefit, Double_t &sgn, Double_t &errsgn, Double_t &bkg, Double_t &errbkg, Double_t &sgnf, Double_t &errsgnf, Double_t &sigmafit, Int_t &status)
Int_t GetNearestTrack(const AliExternalTrackParam *trackMatch, Int_t indexSkip, AliESDEvent *event, Int_t trackType, Int_t paramType, AliExternalTrackParam ¶mNearest)
Int_t GetMCInfoKink(Int_t label, std::map< std::string, float > &kinkInfoF, std::map< std::string, TObject * > &kinkInfoO)
void FillHistograms(AliESDtrack *const ptrack, AliExternalTrackParam *const ptpcInnerC, Double_t centralityF, Double_t chi2TPCInnerC)
Bool_t AcceptMCEvent(AliMCEvent *mcEvent=0)
TParticle * GetMother(TParticle *const particle, AliStack *const stack)
Int_t GetKFParticle(AliESDv0 *const v0, AliESDEvent *const event, AliKFParticle &kfparticle)
void ProcessLaser(AliESDEvent *const esdEvent=0, AliMCEvent *const mcEvent=0, AliESDfriend *const esdFriend=0)
void Process(Int_t *pflag[23040][7], TH1 *inhisto, Double_t Nsigma=4., Int_t dnbins=200, Double_t dmaxval=-1., Int_t compteur=1)
static Int_t GetMCTrueTrackMult(AliMCEvent *const mcEvent, AliFilteredTreeEventCuts *const evtCuts, AliFilteredTreeAcceptanceCuts *const accCuts)
void Process(AliESDEvent *const esdEvent=0, AliMCEvent *const mcEvent=0, AliESDfriend *const esdFriend=0)
Bool_t IsFromStrangeness(Int_t label, AliStack *const stack)
static void SetDefaultAliasesV0(TTree *treeV0)
Bool_t AcceptEvent(AliESDEvent *event=0, AliMCEvent *mcEvent=0, const AliESDVertex *vtx=0)
TList * OpenFile(const char *fname)
Bool_t IsHighDeDxParticle(AliESDtrack *const track)
void ProcessMCEff(AliESDEvent *const esdEvent=0, AliMCEvent *const mcEvent=0, AliESDfriend *const esdFriend=0)