40 #include <TDatabasePDG.h>
43 #include "TTreeStream.h"
49 #include "TObjArray.h"
54 #include "AliHeader.h"
55 #include "AliGenEventHeader.h"
56 #include "AliInputEventHandler.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 = ESDfriend();
333 Printf(
"ERROR: ESD friends not available");
336 AliInputEventHandler* inputHandler = (AliInputEventHandler*) 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 AliESDfriendTrack* friendTrack0=NULL;
420 if (esdFriend &&!esdFriend->TestSkipBit()){
421 if (itrack0<ntracksFriend){
422 friendTrack0 = esdFriend->GetTrack(itrack0);
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 AliESDfriendTrack* friendTrack1=NULL;
479 if (esdFriend &&!esdFriend->TestSkipBit()){
480 if (itrack1<ntracksFriend){
481 friendTrack1 = esdFriend->GetTrack(itrack1);
486 AliESDfriendTrack *friendTrackStore0=friendTrack0;
487 AliESDfriendTrack *friendTrackStore1=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 AliInputEventHandler* inputHandler = (AliInputEventHandler*) 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 = esdFriend->GetTrack(iTrack);}
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 AliInputEventHandler* inputHandler = (AliInputEventHandler*) 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) {
if (!esdFriend->TestSkipBit()) friendTrack = esdFriend->GetTrack(iTrack);}
983 if(track->Charge()==0)
continue;
984 if(!esdTrackCuts->AcceptTrack(track))
continue;
988 Double_t scalempt= TMath::Min(track->Pt(),10.);
990 downscaleF *= fLowPtTrackDownscaligF;
991 if( downscaleCounter>0 && TMath::Exp(2*scalempt)<downscaleF)
continue;
1006 Double_t b[3]; AliTracker::GetBxByBz(x,b);
1011 Bool_t isOKtpcInner = kFALSE;
1012 AliExternalTrackParam * tpcInner = (AliExternalTrackParam *)(track->GetTPCInnerParam());
1015 isOKtpcInner = tpcInner->Rotate(track->GetAlpha());
1016 isOKtpcInner = tpcInner->PropagateTo(track->GetX(),esdEvent->GetMagneticField());
1023 Bool_t isOKtpcInnerC = kFALSE;
1024 AliExternalTrackParam * tpcInnerC =
new AliExternalTrackParam(*(track->GetTPCInnerParam()));
1026 isOKtpcInnerC = ConstrainTPCInner(tpcInnerC,vtxESD,b);
1027 isOKtpcInnerC = tpcInnerC->Rotate(track->GetAlpha());
1028 isOKtpcInnerC = tpcInnerC->PropagateTo(track->GetX(),esdEvent->GetMagneticField());
1035 Bool_t isOKtrackInnerC = kTRUE;
1036 AliExternalTrackParam * trackInnerC = NULL;
1037 AliExternalTrackParam * trackInnerV =
new AliExternalTrackParam(*(track->GetInnerParam()));
1038 isOKtrackInnerC=AliTracker::PropagateTrackToBxByBz(trackInnerV,3,track->GetMass(),3,kFALSE);
1039 isOKtrackInnerC&= trackInnerV->Rotate(track->GetAlpha());
1040 isOKtrackInnerC&= trackInnerV->PropagateTo(track->GetX(),esdEvent->GetMagneticField());
1042 if (isOKtrackInnerC) {
1043 trackInnerC =
new AliExternalTrackParam(*trackInnerV);
1044 isOKtrackInnerC&= ConstrainTrackInner(trackInnerC,vtxESD,track->GetMass(),b);
1045 isOKtrackInnerC&= trackInnerC->Rotate(track->GetAlpha());
1046 isOKtrackInnerC&= trackInnerC->PropagateTo(track->GetX(),esdEvent->GetMagneticField());
1053 TMatrixD deltaT(5,1), deltaTtrackC(5,1);
1054 TMatrixD delta(1,5), deltatrackC(1,5);
1055 TMatrixD covarM(5,5), covarMtrackC(5,5);
1057 TMatrixD chi2trackC(1,1);
1059 if(isOKtpcInnerC && isOKtrackInnerC)
1061 for (
Int_t ipar=0; ipar<5; ipar++) {
1062 deltaT(ipar,0)=tpcInnerC->GetParameter()[ipar]-track->GetParameter()[ipar];
1063 delta(0,ipar)=tpcInnerC->GetParameter()[ipar]-track->GetParameter()[ipar];
1065 deltaTtrackC(ipar,0)=trackInnerC->GetParameter()[ipar]-track->GetParameter()[ipar];
1066 deltatrackC(0,ipar)=trackInnerC->GetParameter()[ipar]-track->GetParameter()[ipar];
1068 for (
Int_t jpar=0; jpar<5; jpar++) {
1069 Int_t index=track->GetIndex(ipar,jpar);
1070 covarM(ipar,jpar)=track->GetCovariance()[index]+tpcInnerC->GetCovariance()[index];
1071 covarMtrackC(ipar,jpar)=track->GetCovariance()[index]+trackInnerC->GetCovariance()[index];
1076 TMatrixD covarMInv = covarM.Invert();
1077 TMatrixD mat2 = covarMInv*deltaT;
1082 TMatrixD covarMInvtrackC = covarMtrackC.Invert();
1083 TMatrixD mat2trackC = covarMInvtrackC*deltaTtrackC;
1084 chi2trackC = deltatrackC*mat2trackC;
1089 AliExternalTrackParam paramITS;
1090 AliExternalTrackParam paramITSC;
1091 AliExternalTrackParam paramComb;
1092 Int_t indexNearestITS = GetNearestTrack((trackInnerV!=NULL)? trackInnerV:track, iTrack, esdEvent,0,0,paramITS);
1093 if (indexNearestITS<0) indexNearestITS = GetNearestTrack((trackInnerV!=NULL)? trackInnerV:track, iTrack, esdEvent,2,0,paramITS);
1094 Int_t indexNearestITSC = GetNearestTrack((trackInnerC!=NULL)? trackInnerC:track, iTrack, esdEvent,0,0,paramITSC);
1095 if (indexNearestITSC<0) indexNearestITS = GetNearestTrack((trackInnerC!=NULL)? trackInnerC:track, iTrack, esdEvent,2,0,paramITSC);
1096 Int_t indexNearestComb = GetNearestTrack(track->GetInnerParam(), iTrack, esdEvent,1,1,paramComb);
1106 Bool_t isOKtrackInnerC2 = kFALSE;
1107 AliExternalTrackParam *trackInnerC2 =
new AliExternalTrackParam(*(track->GetInnerParam()));
1109 isOKtrackInnerC2 = AliTracker::PropagateTrackToBxByBz(trackInnerC2,kTPCRadius,track->GetMass(),kStep,kFALSE);
1112 Bool_t isOKouterITSc = kFALSE;
1113 AliExternalTrackParam *outerITSc = NULL;
1114 TMatrixD chi2OuterITS(1,1);
1116 if(esdFriend && !esdFriend->TestSkipBit())
1123 if (friendTrack->GetITSOut()) outerITSc =
new AliExternalTrackParam(*(friendTrack->GetITSOut()));
1126 isOKouterITSc = AliTracker::PropagateTrackToBxByBz(outerITSc,kTPCRadius,track->GetMass(),kStep,kFALSE);
1127 isOKouterITSc = outerITSc->Rotate(trackInnerC2->GetAlpha());
1128 isOKouterITSc = outerITSc->PropagateTo(trackInnerC2->GetX(),esdEvent->GetMagneticField());
1134 TMatrixD deltaTouterITS(4,1);
1135 TMatrixD deltaouterITS(1,4);
1136 TMatrixD covarMouterITS(4,4);
1138 if(isOKtrackInnerC2 && isOKouterITSc) {
1141 for (
Int_t ipar=0; ipar<5; ipar++) {
1143 deltaTouterITS(kipar,0)=outerITSc->GetParameter()[ipar]-trackInnerC2->GetParameter()[ipar];
1144 deltaouterITS(0,kipar)=outerITSc->GetParameter()[ipar]-trackInnerC2->GetParameter()[ipar];
1148 for (
Int_t jpar=0; jpar<5; jpar++) {
1149 Int_t index=outerITSc->GetIndex(ipar,jpar);
1150 if(ipar !=1 || jpar!=1) {
1151 covarMouterITS(kipar,kjpar)=outerITSc->GetCovariance()[index]+trackInnerC2->GetCovariance()[index];
1153 if(jpar!=1) kjpar++;
1155 if(ipar!=1) kipar++;
1159 TMatrixD covarMInvouterITS = covarMouterITS.Invert();
1160 TMatrixD mat2outerITS = covarMInvouterITS*deltaTouterITS;
1161 chi2OuterITS = deltaouterITS*mat2outerITS;
1171 TParticle *particle=NULL, *particleTPC=NULL, *particleITS=NULL;
1172 TParticle *particleMother=NULL, *particleMotherTPC=NULL, *particleMotherITS=NULL;
1173 Int_t mech=-1, mechTPC=-1, mechITS=-1;
1174 Bool_t isPrim=kFALSE, isPrimTPC=kFALSE, isPrimITS=kFALSE;
1175 Bool_t isFromStrangess=kFALSE, isFromStrangessTPC=kFALSE, isFromStrangessITS=kFALSE;
1176 Bool_t isFromConversion=kFALSE, isFromConversionTPC=kFALSE, isFromConversionITS=kFALSE;
1177 Bool_t isFromMaterial=kFALSE, isFromMaterialTPC=kFALSE, isFromMaterialITS=kFALSE;
1179 AliTrackReference *refTPCIn = NULL;
1180 AliTrackReference *refTPCOut = NULL;
1181 AliTrackReference *refITS = NULL;
1182 AliTrackReference *refTRD = NULL;
1183 AliTrackReference *refTOF = NULL;
1184 AliTrackReference *refEMCAL = NULL;
1185 AliTrackReference *refPHOS = NULL;
1186 Int_t nrefTPC=0, nrefTRD=0, nrefTOF=0, nrefITS=0, nrefEMCAL=0, nrefPHOS=0;
1188 Bool_t isOKtrackInnerC3 = kFALSE;
1189 AliExternalTrackParam *trackInnerC3 =
new AliExternalTrackParam(*(track->GetInnerParam()));
1190 if(mcEvent && stack)
1194 multMCTrueTracks = GetMCTrueTrackMult(mcEvent,evtCuts,accCuts);
1198 Int_t label = TMath::Abs(track->GetLabel());
1199 if (label >= mcStackSize)
continue;
1200 particle = stack->Particle(label);
1201 if (!particle)
continue;
1202 if(particle && particle->GetPDG() && particle->GetPDG()->Charge()!=0.)
1204 particleMother = GetMother(particle,stack);
1205 mech = particle->GetUniqueID();
1206 isPrim = stack->IsPhysicalPrimary(label);
1207 isFromStrangess = IsFromStrangeness(label,stack);
1208 isFromConversion = IsFromConversion(label,stack);
1209 isFromMaterial = IsFromMaterial(label,stack);
1215 Int_t labelTPC = TMath::Abs(track->GetTPCLabel());
1216 if (labelTPC >= mcStackSize)
continue;
1217 particleTPC = stack->Particle(labelTPC);
1218 if (!particleTPC)
continue;
1219 if(particleTPC && particleTPC->GetPDG() && particleTPC->GetPDG()->Charge()!=0.)
1221 particleMotherTPC = GetMother(particleTPC,stack);
1222 mechTPC = particleTPC->GetUniqueID();
1223 isPrimTPC = stack->IsPhysicalPrimary(labelTPC);
1224 isFromStrangessTPC = IsFromStrangeness(labelTPC,stack);
1225 isFromConversionTPC = IsFromConversion(labelTPC,stack);
1226 isFromMaterialTPC = IsFromMaterial(labelTPC,stack);
1234 TClonesArray *trefs=0;
1235 Int_t status = mcEvent->GetParticleAndTR(TMath::Abs(labelTPC), part, trefs);
1237 if(status>0 && part && trefs && part->GetPDG() && part->GetPDG()->Charge()!=0.)
1239 Int_t nTrackRef = trefs->GetEntries();
1243 for (
Int_t iref = 0; iref < nTrackRef; iref++)
1245 AliTrackReference *ref = (AliTrackReference *)trefs->At(iref);
1251 if(!refITS && countITS==2) {
1270 if(ref && ref->Label()==label && ref->DetectorId()==AliTrackReference::kTRD)
1305 if(refTPCIn && trackInnerC3)
1307 Double_t kRefPhi = TMath::ATan2(refTPCIn->Y(),refTPCIn->X());
1308 isOKtrackInnerC3 = trackInnerC3->Rotate(kRefPhi);
1309 isOKtrackInnerC3 = AliTracker::PropagateTrackToBxByBz(trackInnerC3,refTPCIn->R(),track->GetMass(),kStep,kFALSE);
1316 Int_t labelITS = TMath::Abs(track->GetITSLabel());
1317 if (labelITS >= mcStackSize)
continue;
1318 particleITS = stack->Particle(labelITS);
1319 if (!particleITS)
continue;
1320 if(particleITS && particleITS->GetPDG() && particleITS->GetPDG()->Charge()!=0.)
1322 particleMotherITS = GetMother(particleITS,stack);
1323 mechITS = particleITS->GetUniqueID();
1324 isPrimITS = stack->IsPhysicalPrimary(labelITS);
1325 isFromStrangessITS = IsFromStrangeness(labelITS,stack);
1326 isFromConversionITS = IsFromConversion(labelITS,stack);
1327 isFromMaterialITS = IsFromMaterial(labelITS,stack);
1334 Bool_t dumpToTree=kFALSE;
1336 if(isOKtpcInnerC && isOKtrackInnerC) dumpToTree = kTRUE;
1338 if(isOKtrackInnerC2 && isOKouterITSc) dumpToTree = kTRUE;
1339 if(mcEvent && isOKtrackInnerC3) dumpToTree = kTRUE;
1340 TObjString triggerClass = esdEvent->GetFiredTriggerClasses().Data();
1347 track->GetImpactParametersTPC(dcaTPC[0],dcaTPC[1]);
1348 Bool_t isRoughPrimary = TMath::Abs(dcaTPC[1])<10;
1349 Bool_t hasOuter=(track->IsOn(AliVTrack::kITSin))||(track->IsOn(AliVTrack::kTOFout))||(track->IsOn(AliVTrack::kTRDin));
1351 if ( (!hasOuter) && (!isRoughPrimary) && (!keepPileUp)){
1357 static AliESDVertex dummyvtxESD;
1366 static AliExternalTrackParam dummyexternaltrackparam;
1368 static AliTrackReference dummytrackreference;
1370 static TParticle dummyparticle;
1374 if (!track) {track=fDummyTrack;}
1375 AliESDfriendTrack *friendTrackStore=friendTrack;
1376 if (fFriendDownscaling>=1){
1377 friendTrackStore = (
gRandom->Rndm()<1./fFriendDownscaling)? friendTrack:0;
1379 if (fFriendDownscaling<=0){
1380 if (((*fTreeSRedirector)<<
"highPt").GetTree()){
1381 TTree * tree = ((*fTreeSRedirector)<<
"highPt").GetTree();
1383 Double_t sizeAll=tree->GetZipBytes();
1384 TBranch * br= tree->GetBranch(
"friendTrack.fPoints");
1385 Double_t sizeFriend=(br!=NULL)?br->GetZipBytes():0;
1386 br= tree->GetBranch(
"friendTrack.fCalibContainer");
1387 if (br) sizeFriend+=br->GetZipBytes();
1388 if (sizeFriend*TMath::Abs(fFriendDownscaling)>sizeAll) friendTrackStore=0;
1395 if (!vtxESD) {vtxESD=&dummyvtxESD;}
1398 if (!refTPCIn) {refTPCIn=&dummytrackreference;}
1399 if (!refITS) {refITS=&dummytrackreference;}
1400 if (!particle) {particle=&dummyparticle;}
1401 if (!particleMother) {particleMother=&dummyparticle;}
1402 if (!particleTPC) {particleTPC=&dummyparticle;}
1403 if (!particleMotherTPC) {particleMotherTPC=&dummyparticle;}
1404 if (!particleITS) {particleITS=&dummyparticle;}
1405 if (!particleMotherITS) {particleMotherITS=&dummyparticle;}
1410 FillHistograms(track, tpcInnerC, centralityF, (
Double_t)chi2(0,0));
1411 TVectorD tofClInfo(5);
1412 tofClInfo[0]=track->GetTOFsignal();
1413 tofClInfo[1]=track->GetTOFsignalToT();
1414 tofClInfo[2]=track->GetTOFsignalRaw();
1415 tofClInfo[3]=track->GetTOFsignalDz();
1416 tofClInfo[4]=track->GetTOFsignalDx();
1419 const Int_t nSpecies=AliPID::kSPECIES;
1420 TVectorD tpcNsigma(nSpecies);
1421 TVectorD tofNsigma(nSpecies);
1422 TVectorD tpcPID(nSpecies);
1423 TVectorD tofPID(nSpecies);
1425 for (
Int_t ispecie=0; ispecie<nSpecies; ++ispecie) {
1426 if (ispecie ==
Int_t(AliPID::kMuon))
continue;
1427 tpcNsigma[ispecie] = pidResponse->NumberOfSigmas(
AliPIDResponse::kTPC, track, (AliPID::EParticleType)ispecie);
1428 tofNsigma[ispecie] = pidResponse->NumberOfSigmas(
AliPIDResponse::kTOF, track, (AliPID::EParticleType)ispecie);
1431 pidResponse->ComputePIDProbability(
AliPIDResponse::kTPC, track, nSpecies, tpcPID.GetMatrixArray());
1432 pidResponse->ComputePIDProbability(
AliPIDResponse::kTOF, track, nSpecies, tofPID.GetMatrixArray());
1434 if(fTreeSRedirector && dumpToTree && fFillTree) {
1436 (*fTreeSRedirector)<<
"highPt"<<
1437 "downscaleCounter="<<downscaleCounter<<
1439 "fileName.="<<&fCurrentFileName<<
1440 "runNumber="<<runNumber<<
1441 "evtTimeStamp="<<evtTimeStamp<<
1442 "evtNumberInFile="<<evtNumberInFile<<
1443 "triggerClass="<<&triggerClass<<
1445 "vtxESD.="<<vtxESD<<
1449 "ntracks="<<ntracks<<
1451 "contTPC="<< contTPC<<
1452 "contSPD="<< contSPD<<
1453 "vertexPosTPC.="<<&vertexPosTPC<<
1454 "vertexPosSPD.="<<&vertexPosSPD<<
1455 "ntracksTPC="<<ntracksTPC<<
1456 "ntracksITS="<<ntracksITS<<
1458 "esdTrack.="<<track<<
1459 "tofClInfo.="<<&tofClInfo<<
1461 "tofNsigma.="<<&tofNsigma<<
1462 "tpcNsigma.="<<&tpcNsigma<<
1463 "tofPID.="<<&tofPID<<
1464 "tpcPID.="<<&tpcPID<<
1466 "friendTrack.="<<friendTrackStore<<
1467 "extTPCInnerC.="<<tpcInnerC<<
1468 "extInnerParamV.="<<trackInnerV<<
1469 "extInnerParamC.="<<trackInnerC<<
1470 "extInnerParam.="<<trackInnerC2<<
1471 "extOuterITS.="<<outerITSc<<
1472 "extInnerParamRef.="<<trackInnerC3<<
1473 "chi2TPCInnerC="<<chi2(0,0)<<
1474 "chi2InnerC="<<chi2trackC(0,0)<<
1475 "chi2OuterITS="<<chi2OuterITS(0,0)<<
1476 "centralityF="<<centralityF;
1479 (*fTreeSRedirector)<<
"highPt"<<
1480 "paramITS.="<<¶mITS<<
1481 "paramITSC.="<<¶mITSC<<
1482 "paramComb.="<<¶mComb<<
1483 "indexNearestITS="<<indexNearestITS<<
1484 "indexNearestITSC="<<indexNearestITSC<<
1485 "indexNearestComb="<<indexNearestComb;
1488 static AliTrackReference refDummy;
1489 if (!refITS) refITS = &refDummy;
1490 if (!refTRD) refTRD = &refDummy;
1491 if (!refTOF) refTOF = &refDummy;
1492 if (!refEMCAL) refEMCAL = &refDummy;
1493 if (!refPHOS) refPHOS = &refDummy;
1495 (*fTreeSRedirector)<<
"highPt"<<
1496 "multMCTrueTracks="<<multMCTrueTracks<<
1497 "nrefITS="<<nrefITS<<
1498 "nrefTPC="<<nrefTPC<<
1499 "nrefTRD="<<nrefTRD<<
1500 "nrefTOF="<<nrefTOF<<
1501 "nrefEMCAL="<<nrefEMCAL<<
1502 "nrefPHOS="<<nrefPHOS<<
1503 "refTPCIn.="<<refTPCIn<<
1504 "refTPCOut.="<<refTPCOut<<
1505 "refITS.="<<refITS<<
1506 "refTRD.="<<refTRD<<
1507 "refTOF.="<<refTOF<<
1508 "refEMCAL.="<<refEMCAL<<
1509 "refPHOS.="<<refPHOS<<
1510 "particle.="<<particle<<
1511 "particleMother.="<<particleMother<<
1514 "isFromStrangess="<<isFromStrangess<<
1515 "isFromConversion="<<isFromConversion<<
1516 "isFromMaterial="<<isFromMaterial<<
1517 "particleTPC.="<<particleTPC<<
1518 "particleMotherTPC.="<<particleMotherTPC<<
1519 "mechTPC="<<mechTPC<<
1520 "isPrimTPC="<<isPrimTPC<<
1521 "isFromStrangessTPC="<<isFromStrangessTPC<<
1522 "isFromConversionTPC="<<isFromConversionTPC<<
1523 "isFromMaterialTPC="<<isFromMaterialTPC<<
1524 "particleITS.="<<particleITS<<
1525 "particleMotherITS.="<<particleMotherITS<<
1526 "mechITS="<<mechITS<<
1527 "isPrimITS="<<isPrimITS<<
1528 "isFromStrangessITS="<<isFromStrangessITS<<
1529 "isFromConversionITS="<<isFromConversionITS<<
1530 "isFromMaterialITS="<<isFromMaterialITS;
1533 AliInfo(
"writing tree highPt");
1534 (*fTreeSRedirector)<<
"highPt"<<
"\n";
1536 AliSysInfo::AddStamp(
"filteringTask",iTrack,numberOfTracks,numberOfFriendTracks,(friendTrackStore)?0:1);
1539 delete trackInnerC2;
1541 delete trackInnerC3;
1552 static Int_t downscaleCounter=0;
1553 AliInfo(
"we start!");
1555 AliDebug(AliLog::kError,
"mcEvent not available");
1562 AliESDtrackCuts *esdTrackCuts = GetTrackCuts();
1564 if(!evtCuts || !accCuts || !esdTrackCuts) {
1565 AliDebug(AliLog::kError,
"cuts not available");
1570 Bool_t isEventTriggered = kTRUE;
1571 AliPhysicsSelection *physicsSelection = NULL;
1572 AliTriggerAnalysis* triggerAnalysis = NULL;
1575 AliInputEventHandler* inputHandler = (AliInputEventHandler*) AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();
1582 isEventTriggered = inputHandler->IsEventSelected() & AliVEvent::kMB;
1583 physicsSelection =
static_cast<AliPhysicsSelection*
> (inputHandler->GetEventSelection());
1584 if(!physicsSelection)
return;
1586 if (isEventTriggered && (GetTrigger() == AliTriggerAnalysis::kV0AND)) {
1588 triggerAnalysis = physicsSelection->GetTriggerAnalysis();
1589 if(!triggerAnalysis)
return;
1590 isEventTriggered = triggerAnalysis->IsOfflineTriggerFired(esdEvent, GetTrigger());
1596 AliCentrality *esdCentrality = esdEvent->GetCentrality();
1597 centralityF = esdCentrality->GetCentralityPercentile(fCentralityEstimator.Data());
1600 AliHeader* header = 0;
1601 AliGenEventHeader* genHeader = 0;
1602 AliStack*
stack = 0;
1603 Int_t mcStackSize=0;
1606 Int_t multMCTrueTracks = 0;
1609 AliDebug(AliLog::kError,
"mcEvent not available");
1613 header = mcEvent->Header();
1615 AliDebug(AliLog::kError,
"Header not available");
1619 stack = mcEvent->Stack();
1621 AliDebug(AliLog::kError,
"Stack not available");
1624 mcStackSize=stack->GetNtrack();
1627 genHeader = header->GenEventHeader();
1629 AliDebug(AliLog::kError,
"Could not retrieve genHeader from Header");
1632 genHeader->PrimaryVertex(vtxMC);
1636 multMCTrueTracks = GetMCTrueTrackMult(mcEvent,evtCuts,accCuts);
1641 AliESDVertex* vtxESD = 0;
1642 if(GetAnalysisMode() == kTPCAnalysisMode) {
1643 vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTPC();
1645 else if(GetAnalysisMode() == kTPCITSAnalysisMode) {
1646 vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTracks();
1656 AliESDVertex *vertexSPD = (AliESDVertex *)esdEvent->GetPrimaryVertexSPD();
1657 AliESDVertex *vertexTPC = (AliESDVertex *)esdEvent->GetPrimaryVertexTPC();
1658 Int_t contSPD = vertexSPD->GetNContributors();
1659 Int_t contTPC = vertexTPC->GetNContributors();
1660 TVectorD vertexPosTPC(3), vertexPosSPD(3);
1661 vertexSPD->GetXYZ(vertexPosSPD.GetMatrixArray());
1662 vertexTPC->GetXYZ(vertexPosTPC.GetMatrixArray());
1665 for (
Int_t iTrack = 0; iTrack < esdEvent->GetNumberOfTracks(); iTrack++){
1666 AliESDtrack *track = esdEvent->GetTrack(iTrack);
1667 if(!track)
continue;
1668 if (track->IsOn(AliVTrack::kTPCrefit)) ntracksTPC++;
1669 if (track->IsOn(AliVTrack::kITSrefit)) ntracksITS++;
1674 TObjString triggerClass = esdEvent->GetFiredTriggerClasses().Data();
1677 if(isEventOK && isEventTriggered)
1684 TParticle *particle=NULL;
1685 TParticle *particleMother=NULL;
1690 vert[0] = vtxESD->GetX();
1691 vert[1] = vtxESD->GetY();
1692 vert[2] = vtxESD->GetZ();
1693 Int_t mult = vtxESD->GetNContributors();
1695 Double_t runNumber = esdEvent->GetRunNumber();
1696 Double_t evtTimeStamp = esdEvent->GetTimeStamp();
1697 Int_t evtNumberInFile = esdEvent->GetEventNumberInFile();
1699 for (
Int_t iMc = 0; iMc < mcStackSize; ++iMc)
1701 particle = stack->Particle(iMc);
1706 if(!particle->GetPDG())
continue;
1708 if (TMath::Abs(charge) < 0.001)
1712 Bool_t prim = stack->IsPhysicalPrimary(iMc);
1716 Double_t scalempt= TMath::Min(particle->Pt(),10.);
1718 downscaleF *= fLowPtTrackDownscaligF;
1719 if (downscaleCounter>0 && TMath::Exp(2*scalempt)<downscaleF)
continue;
1725 Int_t trackIndex = -1;
1726 Int_t trackLoopIndex = -1;
1727 Int_t isESDtrackCut= 0;
1728 Int_t isAccCuts = 0;
1731 AliESDtrack *recTrack = NULL;
1733 for (
Int_t iTrack = 0; iTrack < esdEvent->GetNumberOfTracks(); iTrack++)
1735 AliESDtrack *track = esdEvent->GetTrack(iTrack);
1736 if(!track)
continue;
1737 if(track->Charge()==0)
continue;
1739 Int_t label = TMath::Abs(track->GetLabel());
1740 if (label >= mcStackSize)
continue;
1742 Bool_t isAcc=esdTrackCuts->AcceptTrack(track);
1743 if (isAcc) isESDtrackCut=1;
1746 trackIndex = iTrack;
1749 if (track->GetTPCncls()<recTrack->GetTPCncls())
continue;
1750 if (!isAcc)
continue;
1751 trackLoopIndex = iTrack;
1753 recTrack = esdEvent->GetTrack(trackIndex);
1755 if(track->GetLabel()<0) nFakes++;
1762 if (trackLoopIndex>-1) {
1763 recTrack = esdEvent->GetTrack(trackLoopIndex);
1764 }
else if (trackIndex >-1) {
1765 recTrack = esdEvent->GetTrack(trackIndex);
1767 recTrack = fDummyTrack;
1770 particleMother = GetMother(particle,stack);
1771 mech = particle->GetUniqueID();
1775 AliMCParticle *mcParticle = (AliMCParticle*) mcEvent->GetTrack(iMc);
1778 tpcTrackLength = mcParticle->GetTPCTrackLength(bz,0.05,counter,3.0);
1783 if(fTreeSRedirector && fFillTree) {
1785 (*fTreeSRedirector)<<
"MCEffTree"<<
1786 "fileName.="<<&fCurrentFileName<<
1787 "triggerClass.="<<&triggerClass<<
1788 "runNumber="<<runNumber<<
1789 "evtTimeStamp="<<evtTimeStamp<<
1790 "evtNumberInFile="<<evtNumberInFile<<
1792 "vtxESD.="<<vtxESD<<
1795 "multMCTrueTracks="<<multMCTrueTracks<<
1797 "contTPC="<< contTPC<<
1798 "contSPD="<< contSPD<<
1799 "vertexPosTPC.="<<&vertexPosTPC<<
1800 "vertexPosSPD.="<<&vertexPosSPD<<
1801 "ntracksTPC="<<ntracksTPC<<
1802 "ntracksITS="<<ntracksITS<<
1805 "isAcc0="<<isESDtrackCut<<
1806 "isAcc1="<<isAccCuts<<
1807 "esdTrack.="<<recTrack<<
1809 "tpcTrackLength="<<tpcTrackLength<<
1810 "particle.="<<particle<<
1811 "particleMother.="<<particleMother<<
1829 if (track->GetTPCNcls() < 60)
return kFALSE;
1830 Double_t mom = track->GetInnerParam()->GetP();
1831 if (mom < 0.2)
return kFALSE;
1833 track->GetImpactParameters(dca,bCov);
1836 Double_t triggerDeDx = 4*AliExternalTrackParam::BetheBlochAleph((mom*2)/(0.938*3),1.0288,31.9806,5.04114e-11,2.13096,2.38541);
1838 if (track->GetTPCsignal() > triggerDeDx && track->GetTPCsignal()<1000 && TMath::Abs(dca[0])<3.)
return kTRUE;
1849 static Int_t downscaleCounter=0;
1851 AliDebug(AliLog::kError,
"esdEvent not available");
1858 AliESDtrackCuts *esdTrackCuts = GetTrackCuts();
1860 if(!evtCuts || !accCuts || !esdTrackCuts) {
1861 AliDebug(AliLog::kError,
"cuts not available");
1866 Bool_t isEventTriggered = kTRUE;
1867 AliPhysicsSelection *physicsSelection = NULL;
1868 AliTriggerAnalysis* triggerAnalysis = NULL;
1871 AliInputEventHandler* inputHandler = (AliInputEventHandler*) AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();
1872 AliPIDResponse *pidResponse = inputHandler->GetPIDResponse();
1878 isEventTriggered = inputHandler->IsEventSelected() & AliVEvent::kMB;
1880 physicsSelection =
static_cast<AliPhysicsSelection*
> (inputHandler->GetEventSelection());
1881 if(!physicsSelection)
return;
1884 if (isEventTriggered && (GetTrigger() == AliTriggerAnalysis::kV0AND)) {
1886 triggerAnalysis = physicsSelection->GetTriggerAnalysis();
1887 if(!triggerAnalysis)
return;
1888 isEventTriggered = triggerAnalysis->IsOfflineTriggerFired(esdEvent, GetTrigger());
1894 AliCentrality *esdCentrality = esdEvent->GetCentrality();
1895 centralityF = esdCentrality->GetCentralityPercentile(fCentralityEstimator.Data());
1900 AliESDVertex* vtxESD = 0;
1901 if(GetAnalysisMode() == kTPCAnalysisMode) {
1902 vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTPC();
1904 else if(GetAnalysisMode() == kTPCITSAnalysisMode) {
1905 vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTracks();
1916 Int_t ntracks = esdEvent->GetNumberOfTracks();
1918 ULong64_t orbitID = (ULong64_t)esdEvent->GetOrbitNumber();
1919 ULong64_t bunchCrossID = (ULong64_t)esdEvent->GetBunchCrossNumber();
1920 ULong64_t periodID = (ULong64_t)esdEvent->GetPeriodNumber();
1921 ULong64_t gid = ((periodID << 36) | (orbitID << 12) | bunchCrossID);
1922 TObjString triggerClass = esdEvent->GetFiredTriggerClasses().Data();
1923 Float_t bz = esdEvent->GetMagneticField();
1924 Int_t run = esdEvent->GetRunNumber();
1925 Int_t time = esdEvent->GetTimeStamp();
1926 Int_t evtNumberInFile = esdEvent->GetEventNumberInFile();
1927 Int_t nV0s = esdEvent->GetNumberOfV0s();
1928 Int_t mult = vtxESD->GetNContributors();
1929 (*fTreeSRedirector)<<
"eventInfoV0"<<
1931 "fileName.="<<&fCurrentFileName<<
1934 "evtNumberInFile="<<evtNumberInFile<<
1935 "triggerClass="<<&triggerClass<<
1938 "ntracks="<<ntracks<<
1940 "isEventOK="<<isEventOK<<
1941 "isEventTriggered="<<isEventTriggered<<
1948 if(isEventOK && isEventTriggered) {
1952 Int_t ntracks = esdEvent->GetNumberOfTracks();
1953 Int_t evNr=esdEvent->GetEventNumberInFile();
1956 for (
Int_t iv0=0; iv0<nV0s; iv0++){
1958 AliESDv0 * v0 = esdEvent->GetV0(iv0);
1960 AliESDtrack * track0 = esdEvent->GetTrack(v0->GetIndex(0));
1961 AliESDtrack * track1 = esdEvent->GetTrack(v0->GetIndex(1));
1962 if (!track0)
continue;
1963 if (!track1)
continue;
1964 AliESDfriendTrack* friendTrack0=NULL;
1965 AliESDfriendTrack* friendTrack1=NULL;
1967 if (!esdFriend->TestSkipBit()){
1968 Int_t ntracksFriend = esdFriend->GetNumberOfTracks();
1969 if (v0->GetIndex(0)<ntracksFriend){
1970 friendTrack0 = esdFriend->GetTrack(v0->GetIndex(0));
1972 if (v0->GetIndex(1)<ntracksFriend){
1973 friendTrack1 = esdFriend->GetTrack(v0->GetIndex(1));
1977 if (track0->GetSign()<0) {
1978 track1 = esdEvent->GetTrack(v0->GetIndex(0));
1979 track0 = esdEvent->GetTrack(v0->GetIndex(1));
1983 AliESDfriendTrack *friendTrackStore0=friendTrack0;
1984 AliESDfriendTrack *friendTrackStore1=friendTrack1;
1985 if (fFriendDownscaling>=1){
1986 if (
gRandom->Rndm()>1./fFriendDownscaling){
1987 friendTrackStore0 = 0;
1988 friendTrackStore1 = 0;
1991 if (fFriendDownscaling<=0){
1992 if (((*fTreeSRedirector)<<
"V0s").GetTree()){
1993 TTree * tree = ((*fTreeSRedirector)<<
"V0s").GetTree();
1995 Double_t sizeAll=tree->GetZipBytes();
1996 TBranch * br= tree->GetBranch(
"friendTrack0.fPoints");
1997 Double_t sizeFriend=(br!=NULL)?br->GetZipBytes():0;
1998 br= tree->GetBranch(
"friendTrack0.fCalibContainer");
1999 if (br) sizeFriend+=br->GetZipBytes();
2000 if (sizeFriend*TMath::Abs(fFriendDownscaling)>sizeAll) {
2001 friendTrackStore0=0;
2002 friendTrackStore1=0;
2009 Bool_t isDownscaled = IsV0Downscaled(v0);
2010 if (downscaleCounter>0 && isDownscaled)
continue;
2011 AliKFParticle kfparticle;
2012 Int_t type=GetKFParticle(v0,esdEvent,kfparticle);
2013 if (type==0)
continue;
2014 TObjString triggerClass = esdEvent->GetFiredTriggerClasses().Data();
2016 if(!fFillTree)
return;
2017 if(!fTreeSRedirector)
return;
2019 TVectorD tofClInfo0(5);
2020 TVectorD tofClInfo1(5);
2021 tofClInfo0[0]=track0->GetTOFsignal();
2022 tofClInfo0[1]=track0->GetTOFsignalToT();
2023 tofClInfo0[2]=track0->GetTOFsignalRaw();
2024 tofClInfo0[3]=track0->GetTOFsignalDz();
2025 tofClInfo0[4]=track0->GetTOFsignalDx();
2026 tofClInfo1[0]=track1->GetTOFsignal();
2027 tofClInfo1[1]=track1->GetTOFsignalToT();
2028 tofClInfo1[2]=track1->GetTOFsignalRaw();
2029 tofClInfo1[3]=track1->GetTOFsignalDz();
2030 tofClInfo1[4]=track1->GetTOFsignalDx();
2033 const Int_t nSpecies=AliPID::kSPECIES;
2034 TVectorD tpcNsigma0(nSpecies);
2035 TVectorD tofNsigma0(nSpecies);
2036 TVectorD tpcNsigma1(nSpecies);
2037 TVectorD tofNsigma1(nSpecies);
2039 for (
Int_t ispecie=0; ispecie<nSpecies; ++ispecie) {
2040 if (ispecie ==
Int_t(AliPID::kMuon))
continue;
2041 tpcNsigma0[ispecie] = pidResponse->NumberOfSigmas(
AliPIDResponse::kTPC, track0, (AliPID::EParticleType)ispecie);
2042 tofNsigma0[ispecie] = pidResponse->NumberOfSigmas(
AliPIDResponse::kTOF, track0, (AliPID::EParticleType)ispecie);
2043 tpcNsigma1[ispecie] = pidResponse->NumberOfSigmas(
AliPIDResponse::kTPC, track1, (AliPID::EParticleType)ispecie);
2044 tofNsigma1[ispecie] = pidResponse->NumberOfSigmas(
AliPIDResponse::kTOF, track1, (AliPID::EParticleType)ispecie);
2049 (*fTreeSRedirector)<<
"V0s"<<
2051 "isDownscaled="<<isDownscaled<<
2052 "triggerClass="<<&triggerClass<<
2054 "fileName.="<<&fCurrentFileName<<
2056 "evtTimeStamp="<<time<<
2057 "evtNumberInFile="<<evNr<<
2059 "ntracks="<<ntracks<<
2061 "kf.="<<&kfparticle<<
2062 "track0.="<<track0<<
2063 "track1.="<<track1<<
2064 "tofClInfo0.="<<&tofClInfo0<<
2065 "tofClInfo1.="<<&tofClInfo1<<
2066 "tofNsigma0.="<<&tofNsigma0<<
2067 "tofNsigma1.="<<&tofNsigma1<<
2068 "tpcNsigma0.="<<&tpcNsigma0<<
2069 "tpcNsigma1.="<<&tpcNsigma1<<
2070 "friendTrack0.="<<friendTrackStore0<<
2071 "friendTrack1.="<<friendTrackStore1<<
2072 "centralityF="<<centralityF<<
2084 static Int_t downscaleCounter=0;
2086 AliDebug(AliLog::kError,
"esdEvent not available");
2093 AliESDtrackCuts *esdTrackCuts = GetTrackCuts();
2095 if(!evtCuts || !accCuts || !esdTrackCuts) {
2096 AliDebug(AliLog::kError,
"cuts not available");
2102 Bool_t isEventTriggered = kTRUE;
2103 AliPhysicsSelection *physicsSelection = NULL;
2104 AliTriggerAnalysis* triggerAnalysis = NULL;
2107 AliInputEventHandler* inputHandler = (AliInputEventHandler*) AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();
2108 AliPIDResponse *pidResponse = inputHandler->GetPIDResponse();
2113 isEventTriggered = inputHandler->IsEventSelected() & AliVEvent::kMB;
2115 physicsSelection =
static_cast<AliPhysicsSelection*
> (inputHandler->GetEventSelection());
2116 if(!physicsSelection)
return;
2118 if (isEventTriggered && (GetTrigger() == AliTriggerAnalysis::kV0AND)) {
2120 triggerAnalysis = physicsSelection->GetTriggerAnalysis();
2121 if(!triggerAnalysis)
return;
2122 isEventTriggered = triggerAnalysis->IsOfflineTriggerFired(esdEvent, GetTrigger());
2127 AliESDVertex* vtxESD = 0;
2128 if(GetAnalysisMode() == kTPCAnalysisMode) {
2129 vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTPC();
2131 else if(GetAnalysisMode() == kTPCITSAnalysisMode) {
2132 vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTracks();
2145 if(isEventOK && isEventTriggered)
2148 vert[0] = vtxESD->GetX();
2149 vert[1] = vtxESD->GetY();
2150 vert[2] = vtxESD->GetZ();
2151 Int_t mult = vtxESD->GetNContributors();
2153 Double_t runNumber = esdEvent->GetRunNumber();
2154 Double_t evtTimeStamp = esdEvent->GetTimeStamp();
2155 Int_t evtNumberInFile = esdEvent->GetEventNumberInFile();
2158 ULong64_t orbitID = (ULong64_t)esdEvent->GetOrbitNumber();
2159 ULong64_t bunchCrossID = (ULong64_t)esdEvent->GetBunchCrossNumber();
2160 ULong64_t periodID = (ULong64_t)esdEvent->GetPeriodNumber();
2161 ULong64_t gid = ((periodID << 36) | (orbitID << 12) | bunchCrossID);
2164 for (
Int_t iTrack = 0; iTrack < esdEvent->GetNumberOfTracks(); iTrack++)
2166 AliESDtrack *track = esdEvent->GetTrack(iTrack);
2167 if(!track)
continue;
2168 AliESDfriendTrack* friendTrack=NULL;
2169 if (esdFriend && !esdFriend->TestSkipBit()) {
2170 Int_t ntracksFriend = esdFriend->GetNumberOfTracks();
2171 if (iTrack<ntracksFriend){
2172 friendTrack = esdFriend->GetTrack(iTrack);
2176 if(track->Charge()==0)
continue;
2177 if(!esdTrackCuts->AcceptTrack(track))
continue;
2180 if(!IsHighDeDxParticle(track))
continue;
2181 TObjString triggerClass = esdEvent->GetFiredTriggerClasses().Data();
2183 if(!fFillTree)
return;
2184 if(!fTreeSRedirector)
return;
2188 const Int_t nSpecies=AliPID::kSPECIES;
2189 TVectorD tpcNsigma(nSpecies);
2190 TVectorD tofNsigma(nSpecies);
2192 for (
Int_t ispecie=0; ispecie<nSpecies; ++ispecie) {
2193 if (ispecie ==
Int_t(AliPID::kMuon))
continue;
2194 tpcNsigma[ispecie] = pidResponse->NumberOfSigmas(
AliPIDResponse::kTPC, track, (AliPID::EParticleType)ispecie);
2195 tofNsigma[ispecie] = pidResponse->NumberOfSigmas(
AliPIDResponse::kTOF, track, (AliPID::EParticleType)ispecie);
2200 (*fTreeSRedirector)<<
"dEdx"<<
2202 "fileName.="<<&fCurrentFileName<<
2203 "runNumber="<<runNumber<<
2204 "evtTimeStamp="<<evtTimeStamp<<
2205 "evtNumberInFile="<<evtNumberInFile<<
2206 "triggerClass="<<&triggerClass<<
2208 "vtxESD.="<<vtxESD<<
2210 "esdTrack.="<<track<<
2211 "friendTrack.="<<friendTrack<<
2212 "tofNsigma.="<<&tofNsigma<<
2213 "tpcNsigma.="<<&tpcNsigma<<
2237 if (v0->GetOnFlyStatus() ==kFALSE)
return 0;
2241 AliESDtrack * track0 =
event->GetTrack(v0->GetIndex(0));
2242 AliESDtrack * track1 =
event->GetTrack(v0->GetIndex(1));
2248 if (TMath::Abs(track0->GetTgl())>1)
return 0;
2249 if (TMath::Abs(track1->GetTgl())>1)
return 0;
2250 if ((track0->GetTPCClusterInfo(2,1))<100)
return 0;
2251 if ((track1->GetTPCClusterInfo(2,1))<100)
return 0;
2252 Float_t pos0[2]={0}, cov0[3]={0};
2253 Float_t pos1[2]={0}, cov1[3]={0};
2254 track0->GetImpactParameters(pos0,cov0);
2255 track0->GetImpactParameters(pos1,cov1);
2257 if (TMath::Abs(pos0[0])<kSigmaDCACut*TMath::Sqrt(cov0[0]))
return 0;
2258 if (TMath::Abs(pos1[0])<kSigmaDCACut*TMath::Sqrt(cov1[0]))
return 0;
2263 Double_t chi2KF = v0->GetKFInfo(2,2,2);
2264 if (chi2KF>25)
return 0;
2270 masses[0] = TDatabasePDG::Instance()->GetParticle(
"K_S0")->Mass();
2271 masses[1] = TDatabasePDG::Instance()->GetParticle(
"Lambda0")->Mass();
2273 Double_t mass00= v0->GetEffMass(0,0);
2274 Double_t mass22= v0->GetEffMass(2,2);
2275 Double_t mass42= v0->GetEffMass(4,2);
2276 Double_t mass24= v0->GetEffMass(2,4);
2282 if (TMath::Abs(mass00-0)<cutMass) {
2283 massOK=kTRUE; type+=1;
2284 if (TMath::Abs(mass00-0)<dmass) {
2286 dmass=TMath::Abs(mass00-0);
2290 if (TMath::Abs(mass24-masses[1])<cutMass) {
2291 massOK=kTRUE; type+=2;
2292 if (TMath::Abs(mass24-masses[1])<dmass){
2293 dmass = TMath::Abs(mass24-masses[1]);
2298 if (TMath::Abs(mass42-masses[1])<cutMass) {
2299 massOK=kTRUE; type+=4;
2300 if (TMath::Abs(mass42-masses[1])<dmass){
2301 dmass = TMath::Abs(mass42-masses[1]);
2306 if (TMath::Abs(mass22-masses[0])<cutMass) {
2307 massOK=kTRUE; type+=8;
2308 if (TMath::Abs(mass22-masses[0])<dmass){
2309 dmass = TMath::Abs(mass22-masses[0]);
2314 if (type==0)
return 0;
2316 const Int_t spdg[5]={kPositron,kMuonPlus,kPiPlus, kKPlus,
kProton};
2317 const AliExternalTrackParam *paramP = v0->GetParamP();
2318 const AliExternalTrackParam *paramN = v0->GetParamN();
2319 if (paramP->GetSign()<0){
2320 paramP=v0->GetParamP();
2321 paramN=v0->GetParamN();
2326 AliKFParticle kfp1( *paramP, spdg[p1] );
2327 AliKFParticle kfp2( *paramN, -1 *spdg[p2] );
2335 Double_t errPhi = V0KF.GetErrPhi();
2336 Double_t pointAngle= TMath::ACos(v0->GetV0CosineOfPointingAngle());
2337 if (pointAngle/errPhi>10)
return 0;
2349 Double_t maxPt= TMath::Max(v0->GetParamP()->Pt(), v0->GetParamN()->Pt());
2350 Double_t scalempt= TMath::Min(maxPt,10.);
2352 downscaleF *= fLowPtV0DownscaligF;
2355 Double_t mass00= v0->GetEffMass(0,0);
2357 if (TMath::Abs(mass00-0)<cutMass){
2361 if (TMath::Exp(2*scalempt)<downscaleF)
return kTRUE;
2385 if(!tpcInnerC)
return kFALSE;
2386 if(!vtx)
return kFALSE;
2392 if(!tpcInnerC->PropagateToDCABxByBz(vtx, b, 3, dz, cov))
return kFALSE;
2395 Double_t covar[6]; vtx->GetCovMatrix(covar);
2396 Double_t p[2]={tpcInnerC->GetParameter()[0]-dz[0],tpcInnerC->GetParameter()[1]-dz[1]};
2398 Double_t chi2C=tpcInnerC->GetPredictedChi2(p,c);
2399 if (chi2C>kVeryBig)
return kFALSE;
2401 if(!tpcInnerC->Update(p,c))
return kFALSE;
2411 if(!trackInnerC)
return kFALSE;
2412 if(!vtx)
return kFALSE;
2423 if(!AliTracker::PropagateTrackToBxByBz(trackInnerC,kRadius,mass,kMaxStep,kFALSE))
return kFALSE;
2424 if(!trackInnerC->PropagateToDCABxByBz(vtx, b, 3, dz, cov))
return kFALSE;
2427 Double_t covar[6]; vtx->GetCovMatrix(covar);
2428 Double_t p[2]={trackInnerC->GetParameter()[0]-dz[0],trackInnerC->GetParameter()[1]-dz[1]};
2430 Double_t chi2C=trackInnerC->GetPredictedChi2(p,c);
2431 if (chi2C>kVeryBig)
return kFALSE;
2433 if(!trackInnerC->Update(p,c))
return kFALSE;
2442 if(!particle)
return NULL;
2443 if(!stack)
return NULL;
2445 Int_t motherLabel = TMath::Abs(particle->GetMother(0));
2446 TParticle* mother = NULL;
2447 Int_t mcStackSize=stack->GetNtrack();
2448 if (motherLabel>=mcStackSize)
return NULL;
2449 mother = stack->Particle(motherLabel);
2457 Bool_t isFromConversion = kFALSE;
2460 Int_t mcStackSize=stack->GetNtrack();
2461 if (label>=mcStackSize)
return kFALSE;
2462 TParticle* particle = stack->Particle(label);
2463 if (!particle)
return kFALSE;
2465 if(particle && particle->GetPDG() && particle->GetPDG()->Charge()!=0)
2467 Int_t mech = particle->GetUniqueID();
2468 Bool_t isPrim = stack->IsPhysicalPrimary(label);
2470 Int_t motherLabel = TMath::Abs(particle->GetMother(0));
2471 if (motherLabel>=mcStackSize)
return kFALSE;
2472 TParticle* mother = stack->Particle(motherLabel);
2474 Int_t motherPdg = mother->GetPdgCode();
2476 if(!isPrim && mech==5 && motherPdg==kGamma) {
2477 isFromConversion=kTRUE;
2483 return isFromConversion;
2489 Bool_t isFromMaterial = kFALSE;
2492 Int_t mcStackSize=stack->GetNtrack();
2493 if (label>=mcStackSize)
return kFALSE;
2494 TParticle* particle = stack->Particle(label);
2495 if (!particle)
return kFALSE;
2497 if(particle && particle->GetPDG() && particle->GetPDG()->Charge()!=0)
2499 Int_t mech = particle->GetUniqueID();
2500 Bool_t isPrim = stack->IsPhysicalPrimary(label);
2502 Int_t motherLabel = TMath::Abs(particle->GetMother(0));
2503 if (motherLabel>=mcStackSize)
return kFALSE;
2504 TParticle* mother = stack->Particle(motherLabel);
2506 if(!isPrim && mech==13) {
2507 isFromMaterial=kTRUE;
2513 return isFromMaterial;
2519 Bool_t isFromStrangeness = kFALSE;
2522 Int_t mcStackSize=stack->GetNtrack();
2523 if (label>=mcStackSize)
return kFALSE;
2524 TParticle* particle = stack->Particle(label);
2525 if (!particle)
return kFALSE;
2527 if(particle && particle->GetPDG() && particle->GetPDG()->Charge()!=0)
2529 Int_t mech = particle->GetUniqueID();
2530 Bool_t isPrim = stack->IsPhysicalPrimary(label);
2532 Int_t motherLabel = TMath::Abs(particle->GetMother(0));
2533 if (motherLabel>=mcStackSize)
return kFALSE;
2534 TParticle* mother = stack->Particle(motherLabel);
2536 Int_t motherPdg = mother->GetPdgCode();
2539 if(!isPrim && mech==4 &&
2540 (TMath::Abs(motherPdg)==kKPlus || TMath::Abs(motherPdg)==kLambda0 || motherPdg==kK0Short))
2542 isFromStrangeness = kTRUE;
2548 return isFromStrangeness;
2559 Bool_t deleteTrees=kTRUE;
2560 if ((AliAnalysisManager::GetAnalysisManager()))
2562 if (AliAnalysisManager::GetAnalysisManager()->GetAnalysisType() ==
2563 AliAnalysisManager::kProofAnalysis)
2566 if (deleteTrees)
delete fTreeSRedirector;
2567 fTreeSRedirector=NULL;
2584 if(!mcEvent)
return 0;
2586 AliStack*
stack = 0;
2590 stack = mcEvent->Stack();
2591 if (!stack)
return 0;
2598 if(!isEventOK)
return 0;
2600 Int_t nPart = stack->GetNtrack();
2601 for (
Int_t iMc = 0; iMc < nPart; ++iMc)
2603 TParticle* particle = stack->Particle(iMc);
2608 if(!particle->GetPDG())
continue;
2610 if (TMath::Abs(charge) < 0.001)
2614 Bool_t prim = stack->IsPhysicalPrimary(iMc);
2619 if( particle->Eta() > accCuts->
GetMinEta() && particle->Eta() < accCuts->
GetMaxEta() )
2636 if(!ptpcInnerC)
return;
2638 const AliExternalTrackParam * innerParam = (AliExternalTrackParam *) ptrack->GetInnerParam();
2639 if(!innerParam)
return;
2642 ptrack->GetImpactParameters(dxy,dz);
2645 if( abs(ptrack->Eta())<0.8 &&
2646 ptrack->GetTPCClusterInfo(3,1)>120 &&
2647 ptrack->IsOn(0x40) &&
2648 ptrack->GetTPCclusters(0)>0.0 &&
2649 ptrack->GetTPCnclsS()/ptrack->GetTPCclusters(0)<0.4 &&
2653 ptrack->IsOn(0x0004) &&
2654 ptrack->GetNcls(0)>0 &&
2655 ptrack->GetITSchi2()>0 &&
2656 sqrt(ptrack->GetITSchi2()/ptrack->GetNcls(0))<6 &&
2657 sqrt(chi2TPCInnerC)<6 &&
2658 (ptrack->HasPointOnITSLayer(0) || ptrack->HasPointOnITSLayer(1)) &&
2660 abs(dxy)<(0.018+0.035*abs(ptrack->GetSigned1Pt())) )
2662 fPtResPhiPtTPCITS->Fill(ptrack->Pt(),ptrack->Phi(),1./abs(ptrack->GetSigned1Pt())*TMath::Sqrt(ptrack->GetSigma1Pt2()));
2663 fPtResEtaPtTPCITS->Fill(ptrack->Pt(),ptrack->Eta(),1./abs(ptrack->GetSigned1Pt())*TMath::Sqrt(ptrack->GetSigma1Pt2()));
2664 fPtResCentPtTPCITS->Fill(ptrack->Pt(),centralityF,1./abs(ptrack->GetSigned1Pt())*TMath::Sqrt(ptrack->GetSigma1Pt2()));
2670 AliExternalTrackParam *ptpcInner = (AliExternalTrackParam *) ptrack->GetTPCInnerParam();
2671 if(!ptpcInner)
return;
2675 ptrack->GetImpactParametersTPC(dxyTPC,dzTPC);
2677 if( abs(ptrack->Eta())<0.8 &&
2678 ptrack->GetTPCClusterInfo(3,1)>120 &&
2679 ptrack->IsOn(0x40)&&
2680 ptrack->GetTPCclusters(0)>0.0 &&
2681 ptrack->GetTPCnclsS()/ptrack->GetTPCclusters(0)<0.4 &&
2689 fPtResPhiPtTPC->Fill(ptpcInner->Pt(),ptpcInner->Phi(),1./abs(ptpcInner->GetSigned1Pt())*TMath::Sqrt(ptpcInner->GetSigma1Pt2()));
2690 fPtResEtaPtTPC->Fill(ptpcInner->Pt(),ptpcInner->Eta(),1./abs(ptpcInner->GetSigned1Pt())*TMath::Sqrt(ptpcInner->GetSigma1Pt2()));
2691 fPtResCentPtTPC->Fill(ptpcInner->Pt(),centralityF,1./abs(ptpcInner->GetSigned1Pt())*TMath::Sqrt(ptpcInner->GetSigma1Pt2()));
2694 fPtResPhiPtTPCc->Fill(ptpcInnerC->Pt(),ptpcInnerC->Phi(),1./abs(ptpcInnerC->GetSigned1Pt())*TMath::Sqrt(ptpcInnerC->GetSigma1Pt2()));
2695 fPtResEtaPtTPCc->Fill(ptpcInnerC->Pt(),ptpcInnerC->Eta(),1./abs(ptpcInnerC->GetSigned1Pt())*TMath::Sqrt(ptpcInnerC->GetSigma1Pt2()));
2696 fPtResCentPtTPCc->Fill(ptpcInnerC->Pt(),centralityF,1./abs(ptpcInnerC->GetSigned1Pt())*TMath::Sqrt(ptpcInnerC->GetSigma1Pt2()));
2717 const Double_t dFastPosPhiCut=0.06;
2722 if (!esdFriend)
return;
2723 if (esdFriend->TestSkipBit())
return;
2724 Int_t ntracks=esdEvent->GetNumberOfTracks();
2725 Float_t bz = esdEvent->GetMagneticField();
2730 TMatrixD vecPosR0(ntracks,6);
2731 TMatrixD vecMomR0(ntracks,6);
2732 TMatrixD vecPosR1(ntracks,6);
2733 TMatrixD vecMomR1(ntracks,6);
2735 for (
Int_t iTrack=0; iTrack<ntracks; iTrack++){
2736 AliESDtrack *track = esdEvent->GetTrack(iTrack);
2737 if(!track)
continue;
2738 if (track->GetInnerParam()){
2739 const AliExternalTrackParam *trackTPC=track->GetInnerParam();
2740 trackTPC->GetXYZAt(radiusMatch,bz,xyz);
2741 trackTPC->GetPxPyPzAt(radiusMatch,bz,pxyz);
2742 for (
Int_t i=0; i<3; i++){
2743 vecPosR1(iTrack,i)=xyz[i];
2744 vecMomR1(iTrack,i)=pxyz[i];
2746 vecPosR1(iTrack,3)= TMath::ATan2(xyz[1],xyz[0]);
2747 vecMomR1(iTrack,3)= TMath::ATan2(pxyz[1],pxyz[0]);
2748 vecMomR1(iTrack,4)= trackTPC->GetSigned1Pt();;
2749 vecMomR1(iTrack,5)= trackTPC->GetTgl();;
2751 AliESDfriendTrack* friendTrack=esdFriend->GetTrack(iTrack);
2752 if(!friendTrack)
continue;
2753 if (friendTrack->GetITSOut()){
2754 const AliExternalTrackParam *trackITS=friendTrack->GetITSOut();
2755 trackITS->GetXYZAt(radiusMatch,bz,xyz);
2756 trackITS->GetPxPyPzAt(radiusMatch,bz,pxyz);
2757 for (
Int_t i=0; i<3; i++){
2758 vecPosR0(iTrack,i)=xyz[i];
2759 vecMomR0(iTrack,i)=pxyz[i];
2761 vecPosR0(iTrack,3)= TMath::ATan2(xyz[1],xyz[0]);
2762 vecMomR0(iTrack,3)= TMath::ATan2(pxyz[1],pxyz[0]);
2763 vecMomR0(iTrack,4)= trackITS->GetSigned1Pt();;
2764 vecMomR0(iTrack,5)= trackITS->GetTgl();;
2774 Int_t ntracksPropagated=0;
2775 AliExternalTrackParam extTrackDummy;
2776 AliESDtrack esdTrackDummy;
2777 AliExternalTrackParam itsAtTPC;
2778 AliExternalTrackParam itsAtITSTPC;
2779 for (
Int_t iTrack0=0; iTrack0<ntracks; iTrack0++){
2780 AliESDtrack *track0 = esdEvent->GetTrack(iTrack0);
2781 if(!track0)
continue;
2782 if (track0->IsOn(AliVTrack::kTPCin))
continue;
2783 AliESDfriendTrack* friendTrack0=esdFriend->GetTrack(iTrack0);
2784 if (!friendTrack0)
continue;
2787 ntracksPropagated++;
2796 Int_t indexTPCITS=-1;
2797 Int_t ncandidates0=0;
2798 Int_t ncandidates1=0;
2799 itsAtTPC=*(friendTrack0->GetITSOut());
2800 itsAtITSTPC=*(friendTrack0->GetITSOut());
2801 for (
Int_t iTrack1=0; iTrack1<ntracks; iTrack1++){
2802 AliESDtrack *track1 = esdEvent->GetTrack(iTrack1);
2803 if(!track1)
continue;
2804 if (!track1->IsOn(AliVTrack::kTPCin))
continue;
2807 if (TMath::Abs(vecPosR1(iTrack1,2)-vecPosR0(iTrack0,2))>dFastZCut)
continue;
2808 if (TMath::Abs(vecPosR1(iTrack1,3)-vecPosR0(iTrack0,3))>dFastPosPhiCut)
continue;
2809 if (TMath::Abs(vecMomR1(iTrack1,3)-vecMomR0(iTrack0,3))>dFastPhiCut)
continue;
2810 if (TMath::Abs(vecMomR1(iTrack1,5)-vecMomR0(iTrack0,5))>dFastThetaCut)
continue;
2811 if (TMath::Abs(vecMomR1(iTrack1,4)-vecMomR0(iTrack0,4))>dFastPtCut)
continue;
2814 const AliExternalTrackParam * param1= track1->GetInnerParam();
2815 if (!friendTrack0->GetITSOut())
continue;
2816 AliExternalTrackParam outerITS = *(friendTrack0->GetITSOut());
2817 if (!outerITS.Rotate(param1->GetAlpha()))
continue;
2818 if (!outerITS.PropagateTo(param1->GetX(),
bz))
continue;
2819 Double_t chi2 = outerITS.GetPredictedChi2(param1);
2820 if (chi2>chi2Cut)
continue;
2822 if (chi2<minChi2All){
2826 if (chi2<minChi2TPC && track1->IsOn(AliVTrack::kITSin)==0){
2831 if (chi2<minChi2TPCITS && track1->IsOn(AliVTrack::kITSin)){
2833 indexTPCITS=iTrack1;
2834 itsAtITSTPC=outerITS;
2838 AliESDtrack * trackAll= (indexAll>=0)? esdEvent->GetTrack(indexAll):&esdTrackDummy;
2839 AliESDtrack * trackTPC= (indexTPC>=0)? esdEvent->GetTrack(indexTPC):&esdTrackDummy;
2840 AliESDtrack * trackTPCITS= (indexTPCITS>=0)? esdEvent->GetTrack(indexTPCITS):&esdTrackDummy;
2841 (*fTreeSRedirector)<<
"itsTPC"<<
2842 "indexAll="<<indexAll<<
2843 "indexTPC="<<indexTPC<<
2844 "indexTPCITS="<<indexTPCITS<<
2845 "ncandidates0="<<ncandidates0<<
2846 "ncandidates1="<<ncandidates1<<
2848 "chi2All="<<minChi2All<<
2849 "chi2TPC="<<minChi2TPC<<
2850 "chi2TPCITS="<<minChi2TPCITS<<
2852 "track0.="<<track0<<
2853 "trackAll.="<<trackAll<<
2854 "trackTPC.="<<trackTPC<<
2855 "trackTPCITS.="<<trackTPCITS<<
2857 "itsAtTPC.="<<&itsAtTPC<<
2858 "itsAtITSTPC.="<<&itsAtITSTPC<<
2911 if (trackMatch==NULL){
2912 ::Error(
"AliAnalysisTaskFilteredTree::GetNearestTrack",
"invalid track pointer");
2915 Int_t ntracks=
event->GetNumberOfTracks();
2922 for (
Int_t itrack=0; itrack<ntracks; itrack++){
2923 if (itrack==indexSkip)
continue;
2924 AliESDtrack *ptrack=
event->GetTrack(itrack);
2925 if (ptrack==NULL)
continue;
2926 if (trackType==0 && (ptrack->IsOn(0x1)==kFALSE || ptrack->IsOn(0x10)==kTRUE))
continue;
2927 if (trackType==1 && (ptrack->IsOn(0x10)==kFALSE))
continue;
2928 if (trackType==2 && (ptrack->IsOn(0x1)==kFALSE || ptrack->IsOn(0x10)==kFALSE))
continue;
2930 if (ptrack->GetKinkIndex(0)<0)
continue;
2931 const AliExternalTrackParam * track=0;
2932 if (paramType==0) track=ptrack;
2933 if (paramType==1) track=ptrack->GetInnerParam();
2939 if (TMath::Abs((track->GetTgl()-trackMatch->GetTgl()))>ktglCut)
continue;
2941 if (TMath::Abs((track->GetSigned1Pt()-trackMatch->GetSigned1Pt()))>kqptCut)
continue;
2944 Double_t alphaDist=TMath::Abs(TMath::ATan2(track->Py(),track->Px())-TMath::ATan2(trackMatch->Py(),trackMatch->Py()));
2945 if (alphaDist>TMath::Pi()) alphaDist-=TMath::TwoPi();
2946 if (alphaDist>kAlphaCut)
continue;
2948 AliExternalTrackParam param(*track);
2949 if (param.Rotate(trackMatch->GetAlpha())==kFALSE)
continue;
2950 if (param.PropagateTo(trackMatch->GetX(),trackMatch->GetBz())==kFALSE)
continue;
2951 Double_t chi2=trackMatch->GetPredictedChi2(¶m);
2967 TDatabasePDG *
pdg = TDatabasePDG::Instance();
2968 Double_t massLambda = pdg->GetParticle(
"Lambda0")->Mass();
2969 Double_t massK0 = pdg->GetParticle(
"K0")->Mass();
2970 Double_t massPion = pdg->GetParticle(
"pi+")->Mass();
2971 Double_t massProton = pdg->GetParticle(
"proton")->Mass();
2972 const Double_t livetimeK0=2.684341668932;
2973 const Double_t livetimeLambda=7.8875395;
2975 tree->SetAlias(
"massPion",Form(
"(%f+0)",massPion));
2976 tree->SetAlias(
"massProton",Form(
"(%f+0)",massProton));
2977 tree->SetAlias(
"massK0",Form(
"(%f+0)",massK0));
2978 tree->SetAlias(
"massLambda",Form(
"(%f+0)",massLambda));
2980 tree->SetAlias(
"livetimeK0",TString::Format(
"%f",livetimeK0));
2981 tree->SetAlias(
"livetimeLambda",TString::Format(
"%f",livetimeLambda));
2982 tree->SetAlias(
"livetimeLikeK0",TString::Format(
"exp(-v0.fRr/(sqrt((v0.P()/%f)^2+1)*%f))",massK0, livetimeK0));
2983 tree->SetAlias(
"livetimeLikeLambda",TString::Format(
"exp(-v0.fRr/(sqrt((v0.P()/%f)^2+1)*%f))",massLambda,livetimeLambda));
2984 tree->SetAlias(
"livetimeLikeGamma",
"v0.fRr/80");
2985 tree->SetAlias(
"livetimeLikeBkg",
"v0.fRr/80");
2987 tree->SetAlias(
"K0Delta",
"(v0.GetEffMass(2,2)-massK0)");
2988 tree->SetAlias(
"LDelta",
"(v0.GetEffMass(4,2)-massLambda)");
2989 tree->SetAlias(
"ALDelta",
"(v0.GetEffMass(2,4)-massLambda)");
2990 tree->SetAlias(
"EDelta",
"(v0.GetEffMass(0,0))");
2992 tree->SetAlias(
"K0Pull",
"(v0.GetEffMass(2,2)-massK0)/v0.GetKFInfo(2,2,1)");
2993 tree->SetAlias(
"LPull",
"(v0.GetEffMass(4,2)-massLambda)/v0.GetKFInfo(4,2,1)");
2994 tree->SetAlias(
"ALPull",
"(v0.GetEffMass(2,4)-massLambda)/v0.GetKFInfo(2,4,1)");
2995 tree->SetAlias(
"EPull",
"EDelta/v0.GetKFInfo(0,0,1)");
2997 tree->SetAlias(
"K0PullEff",
"K0Delta/sqrt((3.63321e-03)**2+(5.68795e-04*v0.Pt())**2)");
2998 tree->SetAlias(
"LPullEff",
"LDelta/sqrt((1.5e-03)**2+(1.8e-04*v0.Pt())**2)");
2999 tree->SetAlias(
"ALPullEff",
"ALDelta/sqrt((1.5e-03)**2+(1.8e-04*v0.Pt())**2)");
3000 tree->SetAlias(
"EPullEff",
"v0.GetEffMass(0,0)/sqrt((5e-03)**2+(1.e-04*v0.Pt())**2)");
3002 tree->SetAlias(
"dEdx0DProton",
"AliMathBase::BetheBlochAleph(track0.fIp.P()/massProton)");
3003 tree->SetAlias(
"dEdx1DProton",
"AliMathBase::BetheBlochAleph(track1.fIp.P()/massProton)");
3004 tree->SetAlias(
"dEdx0DPion",
"AliMathBase::BetheBlochAleph(track0.fIp.P()/massPion)");
3005 tree->SetAlias(
"dEdx1DPion",
"AliMathBase::BetheBlochAleph(track1.fIp.P()/massPion)");
3007 tree->SetAlias(
"cutDist",
"sqrt((track0.fIp.fP[0]-track1.fIp.fP[0])**2+(track0.fIp.fP[1]-track1.fIp.fP[1])**2)>3");
3008 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])");
3009 tree->SetAlias(
"cutPID",
"track0.fTPCsignal>0&&track1.fTPCsignal>0");
3010 tree->SetAlias(
"cutResol",
"sqrt(track0.fC[14]/track0.fP[4])<0.15&&sqrt(track1.fC[14]/track1.fP[4])<0.15");
3011 tree->SetAlias(
"cutV0",
"cutPID&&cutLong&&cutResol");
3013 tree->SetAlias(
"K0PullBkg",
"min(min(abs(LPull),abs(ALPull)),abs(EPull))+0");
3014 tree->SetAlias(
"LambdaPullBkg",
"min(min(abs(K0Pull),abs(ALPull)),abs(EPull)+0)");
3015 tree->SetAlias(
"ALambdaPullBkg",
"min(min(abs(K0Pull),abs(LPull)),abs(EPull)+0)");
3016 tree->SetAlias(
"EPullBkg",
"min(min(abs(K0Pull),abs(LPull)),abs(ALPull)+0)");
3018 tree->SetAlias(
"K0Selected",
"abs(K0Pull)<3. &&abs(K0PullEff)<3. && abs(LPull)>3 && abs(ALPull)>3 &&v0.PtArmV0()>0.11");
3019 tree->SetAlias(
"LambdaSelected",
"abs(LPull)<3. &&abs(LPullEff)<3. && abs(K0Pull)>3 && abs(EPull)>3 && abs(EDelta)>0.05");
3020 tree->SetAlias(
"ALambdaSelected",
"abs(ALPull)<3. &&abs(ALPullEff)<3 && abs(K0Pull)>3 && abs(EPull)>3 &&abs(EDelta)>0.05");
3021 tree->SetAlias(
"GammaSelected",
"abs(EPull)<3 && abs(K0Pull)>3 && abs(LPull)>3 && abs(ALPull)>3");
3023 tree->SetAlias(
"K0Like0",
"exp(-K0Pull^2)*livetimeLikeK0");
3024 tree->SetAlias(
"LLike0",
"exp(-LPull^2)*livetimeLikeLambda");
3025 tree->SetAlias(
"ALLike0",
"exp(-ALPull^2)*livetimeLikeLambda");
3026 tree->SetAlias(
"ELike0",
"exp(-abs(EPull)*0.2)*livetimeLikeGamma");
3027 tree->SetAlias(
"BkgLike",
"0.000005*ntracks");
3029 tree->SetAlias(
"V0Like",
"exp(-acos(v0.fPointAngle)*v0.fRr/0.36)*exp(-sqrt(kf.GetChi2())/0.5)");
3030 tree->SetAlias(
"ELike",
"(V0Like*ELike0)/(V0Like*(K0Like0+LLike0+ALLike0+ELike0)+BkgLike)");
3031 tree->SetAlias(
"K0Like",
"K0Like0/(K0Like0+LLike0+ALLike0+ELike0+BkgLike)");
3032 tree->SetAlias(
"LLike",
"LLike0/(K0Like0+LLike0+ALLike0+ELike0+BkgLike)");
3033 tree->SetAlias(
"ALLike",
"ALLike0/(K0Like0+LLike0+ALLike0+ELike0+BkgLike)");
3035 tree->SetAlias(
"K0PIDPull",
"(abs(track0.fTPCsignal/dEdx0DPion-50)+abs(track1.fTPCsignal/dEdx1DPion-50))/5.");
3036 tree->SetAlias(
"mpt",
"1/v0.Pt()");
3037 tree->SetAlias(
"tglV0",
"v0.Pz()/v0.Pt()");
3038 tree->SetAlias(
"alphaV0",
"atan2(v0.Py(),v0.Px()+0)");
3039 tree->SetAlias(
"dalphaV0",
"alphaV0-((int(36+9*(alphaV0/pi))-36)*pi/9.)");
3047 tree->SetAlias(
"phiInner",
"atan2(esdTrack.fIp.Py(),esdTrack.fIp.Px()+0)");
3048 tree->SetAlias(
"secInner",
"9*(atan2(esdTrack.fIp.Py(),esdTrack.fIp.Px()+0)/pi)+18*(esdTrack.fIp.Py()<0)");
3049 tree->SetAlias(
"tgl",
"esdTrack.fP[3]");
3050 tree->SetAlias(
"alphaV",
"esdTrack.fAlpha");
3051 tree->SetAlias(
"qPt",
"esdTrack.fP[4]");
3052 tree->SetAlias(
"dalphaQ",
"sign(esdTrack.fP[4])*(esdTrack.fIp.fP[0]/esdTrack.fIp.fX)");
3053 TStatToolkit::AddMetadata(tree,
"phiInner.Title",
"#phi_{TPCin}");
3054 TStatToolkit::AddMetadata(tree,
"secInner.Title",
"sector_{TPCin}");
3055 TStatToolkit::AddMetadata(tree,
"tgl.Title",
"#it{p_{z}}/#it{p}_{T}");
3056 TStatToolkit::AddMetadata(tree,
"alphaV.Title",
"#phi_{vertex}");
3057 TStatToolkit::AddMetadata(tree,
"qPt.Title",
"q/#it{p}_{T}");
3058 TStatToolkit::AddMetadata(tree,
"phiInner.AxisTitle",
"#it{#phi}_{TPCin}");
3059 TStatToolkit::AddMetadata(tree,
"secInner.AxisTitle",
"sector_{TPCin}");
3060 TStatToolkit::AddMetadata(tree,
"tgl.AxisTitle",
"#it{p}_{z}/#it{p}_{t}");
3061 TStatToolkit::AddMetadata(tree,
"alphaV.AxisTitle",
"#it{#phi}_{vertex}");
3062 TStatToolkit::AddMetadata(tree,
"qPt.AxisTitle",
"q/#it{p}_{T} (1/GeV)");
3065 tree->SetAlias(
"normChi2ITS",
"sqrt(esdTrack.fITSchi2/esdTrack.fITSncls)");
3066 tree->SetAlias(
"normChi2TPC",
"esdTrack.fTPCchi2/esdTrack.fTPCncls");
3067 tree->SetAlias(
"normChi2TRD",
"esdTrack.fTRDchi2/esdTrack.fTRDncls");
3068 tree->SetAlias(
"normDCAR",
"esdTrack.fdTPC/sqrt(1+esdTrack.fP[4]**2)");
3069 tree->SetAlias(
"normDCAZ",
"esdTrack.fzTPC/sqrt(1+esdTrack.fP[4]**2)");
3070 TStatToolkit::AddMetadata(tree,
"normChi2ITS.Title",
"#sqrt{#chi2_{ITS}/N_{clITS}}");
3071 TStatToolkit::AddMetadata(tree,
"normChi2TPC.Title",
"#chi2_{TPC}/N_{clTPC}");
3072 TStatToolkit::AddMetadata(tree,
"normChi2ITS.AxisTitle",
"#sqrt{#chi2_{ITS}/N_{clITS}}");
3073 TStatToolkit::AddMetadata(tree,
"normChi2TPC.AxisTitle",
"#chi2_{TPC}/N_{clTPC}");
3075 tree->SetAlias(
"TPCASide",
"esdTrack.fIp.fP[1]>0");
3076 tree->SetAlias(
"TPCCSide",
"esdTrack.fIp.fP[1]<0");
3077 tree->SetAlias(
"TPCCross",
"esdTrack.fIp.fP[1]*esdTrack.fIp.fP[3]<0");
3078 tree->SetAlias(
"ITSOn",
"((esdTrack.fFlags&0x1)>0)");
3079 tree->SetAlias(
"TPCOn",
"((esdTrack.fFlags&0x10)>0)");
3080 tree->SetAlias(
"ITSRefit",
"((esdTrack.fFlags&0x4)>0)");
3081 tree->SetAlias(
"TPCRefit",
"((esdTrack.fFlags&0x40)>0)");
3082 tree->SetAlias(
"TOFOn",
"((esdTrack.fFlags&0x2000)>0)");
3083 tree->SetAlias(
"TRDOn",
"((esdTrack.fFlags&0x400)>0)");
3084 tree->SetAlias(
"ITSOn0",
"esdTrack.fITSncls>4&&esdTrack.HasPointOnITSLayer(0)&&esdTrack.HasPointOnITSLayer(1)");
3085 tree->SetAlias(
"ITSOn01",
"esdTrack.fITSncls>3&&(esdTrack.HasPointOnITSLayer(0)||esdTrack.HasPointOnITSLayer(1))");
3086 tree->SetAlias(
"nclCut",
"(esdTrack.GetTPCClusterInfo(3,1)+esdTrack.fTRDncls)>140-5*(abs(esdTrack.fP[4]))");
3087 tree->SetAlias(
"IsPrim4",
"sqrt((esdTrack.fD**2)/esdTrack.fCdd+(esdTrack.fZ**2)/esdTrack.fCzz)<4");
3088 tree->SetAlias(
"IsPrim4TPC",
"sqrt((esdTrack.fdTPC**2)/esdTrack.fCddTPC+(esdTrack.fzTPC**2)/esdTrack.fCzzTPC)<4");
3091 const char * chName[5]={
"#it{r#phi}",
"#it{z}",
"sin(#phi)",
"tan(#it{#theta})",
"q/#it{p}_{t}"};
3092 const char * chUnit[5]={
"cm",
"cm",
"",
"",
"(1/GeV)"};
3093 const char * refBranch=(tree->GetBranch(
"extInnerParamV."))?
"extInnerParamV":
"esdTrack.fTPCInner";
3095 for (
Int_t iPar=0; iPar<5; iPar++){
3099 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());
3100 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());
3102 tree->SetAlias(TString::Format(
"deltaP%d",iPar).
Data(),TString::Format(
"(%s.fP[%d]-esdTrack.fCp.fP[%d])",refBranch,iPar,iPar).
Data());
3103 tree->SetAlias(TString::Format(
"deltaPC%d",iPar).
Data(),TString::Format(
"(extInnerParamC.fP[%d]-esdTrack.fCp.fP[%d])",iPar,iPar).
Data());
3106 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());
3107 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());
3109 tree->SetAlias(TString::Format(
"pullP%d",iPar).
Data(),
3110 TString::Format(
"(%s.fP[%d]-esdTrack.fCp.fP[%d])/sqrt(%s.fC[%d]+esdTrack.fCp.fC[%d])",refBranch,
3112 tree->SetAlias(TString::Format(
"pullPC%d",iPar).
Data(),
3113 TString::Format(
"(extInnerParamC.fP[%d]-esdTrack.fCp.fP[%d])/sqrt(extInnerParamC.fC[%d]+esdTrack.fCp.fC[%d])",
3115 TStatToolkit::AddMetadata(tree,TString::Format(
"deltaP%d.AxisTitle",iPar).
Data(),TString::Format(
"%s (%s)",chName[iPar], chUnit[iPar]).
Data());
3116 TStatToolkit::AddMetadata(tree,TString::Format(
"deltaPC%d.AxisTitle",iPar).
Data(),TString::Format(
"%s (%s)",chName[iPar], chUnit[iPar]).
Data());
3117 TStatToolkit::AddMetadata(tree,TString::Format(
"pullP%d.AxisTitle",iPar).
Data(),TString::Format(
"pull %s (unit)",chName[iPar]).
Data());
3118 TStatToolkit::AddMetadata(tree,TString::Format(
"pullPC%d.AxisTitle",iPar).
Data(),TString::Format(
"pull %s (unit)",chName[iPar]).
Data());
3120 TStatToolkit::AddMetadata(tree,TString::Format(
"deltaP%d.Title",iPar).
Data(),TString::Format(
"%s",chName[iPar]).
Data());
3121 TStatToolkit::AddMetadata(tree,TString::Format(
"deltaPC%d.Title",iPar).
Data(),TString::Format(
"%s",chName[iPar]).
Data());
3122 TStatToolkit::AddMetadata(tree,TString::Format(
"pullP%d.Title",iPar).
Data(),TString::Format(
"pull %s",chName[iPar]).
Data());
3123 TStatToolkit::AddMetadata(tree,TString::Format(
"pullPC%d.Title",iPar).
Data(),TString::Format(
"pull %s",chName[iPar]).
Data());
3125 TStatToolkit::AddMetadata(tree,
"mult.Title",
"N_{prim}");
3126 TStatToolkit::AddMetadata(tree,
"mult.AxisTitle",
"N_{prim}");
3127 TStatToolkit::AddMetadata(tree,
"ntracks.Title",
"N_{tr}");
3128 TStatToolkit::AddMetadata(tree,
"ntracks.AxisTitle",
"N_{tr} (prim+sec+pile-up)");
3143 Int_t nTrackRefs = trackRefArray.GetEntriesFast();
3145 AliTrackReference *refNearest=0;
3146 TVectorF fdist(nTrackRefs);
3147 for (
Int_t itrR = 0; itrR < nTrackRefs; ++itrR) {
3148 AliTrackReference* ref =
static_cast<AliTrackReference*
>(trackRefArray.UncheckedAt(itrR));
3149 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]);
3153 Int_t index0=0,index1=0;
3154 for (
Int_t itrR = 1; itrR < nTrackRefs-1; ++itrR){
3155 if (fdist[itrR]<dist){
3157 if (fdist[itrR-1]<fdist[itrR+1]){
3165 refNearest=
static_cast<AliTrackReference*
>(trackRefArray.UncheckedAt(index0));
3168 if (index0<0)
return -1;
3169 AliTrackReference *ref0=
static_cast<AliTrackReference*
>(trackRefArray.UncheckedAt(index0));
3170 AliTrackReference *ref1=
static_cast<AliTrackReference*
>(trackRefArray.UncheckedAt(index0));
3171 Double_t xyz0[3]={ref0->X(), ref0->Y(), ref0->Z()};
3172 Double_t pxyz0[3]={ref0->Px(), ref0->Py(), ref0->Pz()};
3173 Double_t xyz1[3]={ref1->X(), ref1->Y(), ref1->Z()};
3174 Double_t pxyz1[3]={ref1->Px(), ref1->Py(), ref1->Pz()};
3175 AliExternalTrackParam param0(xyz0,pxyz0,(
Double_t*)param.GetCovariance(),param.GetSign());
3176 AliExternalTrackParam param1(xyz1,pxyz1,(
Double_t*)param.GetCovariance(),param.GetSign());
3178 errorCode+=(param0.Rotate(param.GetAlpha())==kFALSE);
3179 errorCode+=(param1.Rotate(param.GetAlpha())==kFALSE);
3181 return 100+errorCode;
3183 errorCode+=(AliTrackerBase::PropagateTrackToBxByBz(¶m0,param.GetX(),particle.GetMass(),5.,kFALSE,0.9999)==kFALSE);
3184 errorCode+=(AliTrackerBase::PropagateTrackToBxByBz(¶m1,param.GetX(),particle.GetMass(),5.,kFALSE,0.9999)==kFALSE);
3186 return 1000 +errorCode;
3188 AliTrackerBase::UpdateTrack(param0,param1);
3190 for (
Int_t iPar=0; iPar<5; iPar++){
3191 mcDiff[iPar]=param.GetParameter()[iPar]-param0.GetParameter()[iPar];
3211 AliStack *
stack = fMC->Stack();
3212 Int_t mcStackSize=stack->GetNtrack();
3213 if (label>mcStackSize){
3217 TParticle *particle=NULL;
3219 Int_t status = fMC->GetParticleAndTR(label, particle, trackRefs);
3220 trackInfoO[
"p"]=particle;
3221 if (particle==NULL || particle->GetPDG() ==NULL || particle->GetPDG()->Charge()!=0.) {
3225 Int_t nTrackRef = trackRefs->GetEntries();
3226 trackInfoF[
"nRef"]=nTrackRef;
3230 TVectorF refCounter(21);
3231 TVectorF detLength(21);
3233 AliTrackReference*detRef[21]={NULL};
3234 Int_t loopCounter=0;
3235 AliTrackReference *lastLoopRef = NULL;
3236 for (
Int_t iRef = 0; iRef < nTrackRef; iRef++) {
3237 AliTrackReference *ref = (AliTrackReference *) trackRefs->At(iRef);
3238 if (ref->Label() != label)
continue;
3239 Int_t detID=ref->DetectorId();
3241 trackInfoO[
"refDecay"] = ref;
3244 if (ref->R()>maxRadius) maxRadius=ref->R();
3245 refCounter[detID]++;
3246 if (lastLoopRef!=NULL && ref->R()<kTPCOutR){
3247 Double_t dir0=ref->Px()*ref->X()+ref->Py()*ref->Y();
3248 Double_t dir1=lastLoopRef->Px()*lastLoopRef->X()+lastLoopRef->Py()*lastLoopRef->Y();
3254 if (lastLoopRef==NULL) lastLoopRef=ref;
3255 if (refCounter[detID] >0){
3256 detLength[detID]=ref->GetLength()-detRef[detID]->GetLength();
3261 trackInfoO[
"refCounter"]=
new TVectorF(refCounter);
3262 trackInfoO[
"detLength"]=
new TVectorF(detLength);
3263 trackInfoF[
"loopCounter"]=loopCounter;
3264 trackInfoF[
"maxRadius"]=maxRadius;
3268 Int_t ntracks=fESD->GetNumberOfTracks();
3269 Int_t nRecITS=0, nRecTPC=0, nRecTRD=0, nRecTOF=0;
3270 AliESDtrack * esdTrack=NULL;
3271 AliESDtrack * itsTrack=0;
3272 Int_t detRecLength=0, trackIndex=-1;
3273 for (
Int_t iTrack=0;iTrack<ntracks;iTrack++) {
3274 AliESDtrack *track = fESD->GetTrack(iTrack);
3275 if (track == NULL)
continue;
3276 Int_t recoLabel = TMath::Abs(track->GetLabel());
3277 if (recoLabel != label)
continue;
3279 Int_t detRecLength0 = 0;
3280 if (TMath::Abs(track->GetITSLabel()) == label) detRecLength += track->IsOn(AliESDtrack::kITSin) +
3281 track->IsOn(AliESDtrack::kITSrefit);
3282 if (TMath::Abs(track->GetTPCLabel()) == label) detRecLength += track->IsOn(AliESDtrack::kTPCin) +
3283 track->IsOn(AliESDtrack::kTPCrefit);
3284 if (TMath::Abs(track->GetTRDLabel()) == label) detRecLength += track->IsOn(AliESDtrack::kTRDout) +
3285 track->IsOn(AliESDtrack::kTRDrefit);
3286 if (track->IsOn(AliESDtrack::kITSin)) nRecITS++;
3287 if (track->IsOn(AliESDtrack::kTPCin)) nRecTPC++;
3288 if (track->IsOn(AliESDtrack::kTRDout)) nRecTRD++;
3291 if (detRecLength == detRecLength0) {
3292 Double_t tglParticle = particle->Pz() / particle->Pt();
3293 Double_t deltaTgl0 = esdTrack->Pz() / esdTrack->Pt() - tglParticle;
3294 Double_t deltaTgl1 = track->Pz() / track->Pt() - tglParticle;
3295 if (TMath::Abs(deltaTgl1) < TMath::Abs(deltaTgl0)) {
3297 trackIndex = iTrack;
3300 if (detRecLength < detRecLength0) {
3301 detRecLength = detRecLength0;
3303 trackIndex = iTrack;
3305 if (!track->IsOn(AliESDtrack::kTPCin) && track->IsOn(AliESDtrack::kITSin)) {
3309 trackInfoO[
"esdTrack"]=esdTrack;
3310 trackInfoO[
"itsTrack"]=itsTrack;
3313 if (esdTrack!=NULL){
3314 if (GetMCTrackDiff(*particle,*(esdTrack), *trackRefs, mcDiff)==0){
3315 trackInfoO[
"diffesdTrack"]=
new TVectorF(mcDiff);
3317 if (esdTrack->GetTPCInnerParam()){
3318 if (GetMCTrackDiff(*particle,*(esdTrack->GetTPCInnerParam()), *trackRefs, mcDiff)==0){
3319 trackInfoO[
"diffTPCInnerParam"]=
new TVectorF(mcDiff);
3322 if (esdTrack->GetInnerParam()){
3323 if (GetMCTrackDiff(*particle,*(esdTrack->GetInnerParam()), *trackRefs, mcDiff)==0){
3324 trackInfoO[
"diffInnerParam"]=
new TVectorF(mcDiff);
3327 if (esdTrack->GetOuterParam()){
3328 if (GetMCTrackDiff(*particle,*(esdTrack->GetOuterParam()), *trackRefs, mcDiff)==0){
3329 trackInfoO[
"diffOuterParam"]=
new TVectorF(mcDiff);
3332 if (esdTrack->GetOuterHmpParam()){
3333 if (GetMCTrackDiff(*particle,*(esdTrack->GetOuterHmpParam()), *trackRefs, mcDiff)==0){
3334 trackInfoO[
"diffOuterHmpParam"]=
new TVectorF(mcDiff);
3350 AliStack *
stack = fMC->Stack();
3352 Int_t mcStackSize=stack->GetNtrack();
3353 std::map<std::string,float> trackInfoF;
3354 std::map<std::string,TObject*> trackInfoO;
3355 static Int_t downscaleCounter=0;
3356 for (
Int_t iMc = 0; iMc < mcStackSize; ++iMc) {
3357 TParticle *particle = stack->Particle(iMc);
3358 if (!particle)
continue;
3360 Double_t scalempt= TMath::Min(particle->Pt(),10.);
3362 downscaleF *= fLowPtTrackDownscaligF;
3363 if (downscaleCounter>0 && TMath::Exp(2*scalempt)<downscaleF)
continue;
3364 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)