37 #include "THnSparse.h" 40 #include "TObjArray.h" 41 #include "TGeoGlobalMagField.h" 43 #include "AliAnalysisManager.h" 45 #include "AliMultiplicity.h" 46 #include "AliESDEvent.h" 47 #include "AliESDInputHandler.h" 48 #include "AliESDInputHandlerRP.h" 49 #include "AliCDBPath.h" 50 #include "AliCDBManager.h" 51 #include "AliCDBEntry.h" 52 #include "AliCDBStorage.h" 53 #include "AliGeomManager.h" 55 #include "AliESDVZERO.h" 56 #include "AliESDZDC.h" 57 #include "AliRunLoader.h" 58 #include "AliMCEventHandler.h" 59 #include "AliMCEvent.h" 60 #include "AliMCParticle.h" 62 #include "AliGenEventHeader.h" 63 #include "AliCentrality.h" 64 #include "AliTriggerAnalysis.h" 65 #include "AliMultSelection.h" 66 #include "AliITSsegmentationSPD.h" 67 #include "AliITSRecPoint.h" 68 #include "AliITSgeomTGeo.h" 69 #include "AliITSMultReconstructor.h" 73 #include "AliPhysicsSelection.h" 75 #include "AliITSMultRecBg.h" 76 #include "AliGenEventHeader.h" 77 #include "AliGenHijingEventHeader.h" 78 #include "AliGenDPMjetEventHeader.h" 79 #include "AliGenCocktailEventHeader.h" 80 #include "AliESDtrackCuts.h" 86 const
char*
AliTrackletTaskMulti::fgCentSelName[] = {
"V0M",
"V0A",
"V0C",
"FMD",
"TRK",
"TKL",
"CL0",
"CL1",
"V0MvsFMD",
"ZNA",
"TKLvsV0M",
"ZEMvsZDC",
"V0A123",
"V0A0",
"V0S",
"MB",
"V0Mplus05",
"V0Mminus05",
"SPDClustersCorr"};
203 fDoNormalReco(kFALSE),
204 fDoInjection(kFALSE),
208 fCheckReconstructables(kFALSE),
219 fHistosTrRcblPrim(0),
230 fScaleDTBySin2T(kFALSE),
231 fCutOnDThetaX(kFALSE),
234 fDThetaWindow(0.025),
236 fPhiOverlapCut(0.005),
240 fRemoveOverlaps(kFALSE),
246 fTrigSel(AliVEvent::kINT7),
260 fUseCentralityVar(
"V0M"),
263 fUseSpecialOutput(kFALSE),
270 DefineOutput(1, TList::Class());
294 if (
fOutput && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) {
295 printf(
"Deleteing output\n");
318 Printf(
"%s - %s", GetName(), GetTitle());
320 TList* lst =
dynamic_cast<TList*
>(GetOutputData(1));
321 if (!lst) AliWarning(
"No output list yet");
323 TH1* hstat=(
TH1*)lst->FindObject(
"hStat");
325 AliWarning(
"No statistics histogram yet");
327 TH1* stats =
static_cast<TH1*
>(hstat->Clone());
328 stats->SetDirectory(0);
329 TAxis* axis = stats->GetXaxis();
330 for (
Int_t i = 1; i <= 4; i++) {
331 Printf(
"%31s: %f", axis->GetBinLabel(i), stats->GetBinContent(i));
333 Double_t scale = stats->GetBinContent(4);
334 stats->Scale(1/scale);
335 for (
Int_t i = 6; i <= 23; i++) {
336 Printf(
"%31s: %f", axis->GetBinLabel(i), stats->GetBinContent(i));
341 Printf(
"--- Overall options ---");
343 Printf(
"DoInjection: %s", (
fDoInjection ?
"yes" :
"no"));
344 Printf(
"DoRotation: %s", (
fDoRotation ?
"yes" :
"no"));
345 Printf(
"UseMC: %s", (
fUseMC ?
"yes" :
"no"));
348 Printf(
"--- Tracklet reco settings ---");
355 Printf(
"--- Tracklet cuts --- ");
367 Printf(
"--- Task options ---");
374 Printf(
"--- Reweight of stack ---");
392 AliCDBManager *man = AliCDBManager::Instance();
394 man->SetDefaultStorage(
"alien://Folder=/alice/simulation/2008/v4-15-Release/Residual");
395 AliCDBEntry* obj = man->Get(
"GRP/Geometry/Data",137161);
396 AliGeomManager::SetGeometry((TGeoManager*) obj->GetObject());
397 if (!AliGeomManager::ApplyAlignObjsToGeom(
"ITS",137161,-1,-1)) AliFatal(
"Failed to misalign geometry");
400 man->SetDefaultStorage(
"alien://Folder=/alice/data/2010/OCDB");
401 AliCDBEntry* obj = man->Get(
"GRP/Geometry/Data",137161);
402 AliGeomManager::SetGeometry((TGeoManager*) obj->GetObject());
409 if (!AliGeomManager::ApplyAlignObjsToGeom(
"ITS",137161,-1,-1)) AliFatal(
"Failed to misalign geometry");
416 UInt_t hPattern = 0xffffffff;
438 int nhist =
fOutput->GetEntries();
439 for (
int i=0;i<nhist;i++) {
441 if (!hst || !(hst->InheritsFrom(TH1::Class())))
continue;
442 ((
TH1*)hst)->Sumw2();
455 static Bool_t statOK = kFALSE;
466 AliESDInputHandler *handler = (AliESDInputHandler*)anMan->GetInputEventHandler();
467 AliESDInputHandlerRP *handRP = 0;
469 !handler->IsA()->InheritsFrom(AliESDInputHandlerRP::Class())) {
470 printf(
"No RP handler\n");
474 handRP =
static_cast<AliESDInputHandlerRP*
>(handler);
475 if (!handRP) { printf(
"No RP handler\n");
return; }
478 if (!esd) { printf(
"No AliESDEvent\n");
return; }
482 Printf(
"Getting rec-points (clusters) from handler (%p)", handRP);
483 fRPTree = handRP->GetTreeR(
"ITS");
484 if (!
fRPTree) { printf(
"Invalid ITS cluster tree !\n");
return; }
488 AliMagF* field = (AliMagF*)TGeoGlobalMagField::Instance()->GetField();
489 if (!field && !esd->InitMagneticField()) {printf(
"Failed to initialize the B field\n");
return;}
491 AliMCEventHandler* eventHandler = 0;
497 eventHandler = (AliMCEventHandler*)anMan->GetMCtruthEventHandler();
498 if (!eventHandler) { printf(
"ERROR: Could not retrieve MC event handler\n");
return; }
500 if (!
fMCEvent) { printf(
"ERROR: Could not retrieve MC event\n");
return; }
502 if (!
fStack) { printf(
"Stack not available\n");
return; }
511 AliGenEventHeader* mcGenH = 0;
512 AliGenHijingEventHeader* hHijing=0;
513 AliGenDPMjetEventHeader* hDpmJet=0;
517 mcGenH =
fMCEvent->GenEventHeader();
519 if (mcGenH->InheritsFrom(AliGenCocktailEventHeader::Class())) {
520 TList* headers = ((AliGenCocktailEventHeader*)mcGenH)->GetHeaders();
522 AliGenEventHeader* mcGenH1 = 0;
523 while ( (mcGenH1=(AliGenEventHeader*)next()) ) {
524 if (mcGenH1->InheritsFrom(AliGenHijingEventHeader::Class())) {
525 hHijing = (AliGenHijingEventHeader*)mcGenH1;
528 if (mcGenH1->InheritsFrom(AliGenDPMjetEventHeader::Class())) {
529 hDpmJet = (AliGenDPMjetEventHeader*)mcGenH1;
535 if ( hHijing || mcGenH->InheritsFrom(AliGenHijingEventHeader::Class())) {
536 if (!hHijing) hHijing = (AliGenHijingEventHeader*)mcGenH;
537 fNPart = (hHijing->ProjectileParticipants()+hHijing->TargetParticipants())/2.;
538 fNBColl = hHijing->NN()+hHijing->NNw()+hHijing->NwN()+hHijing->NwNw();
540 else if ( hDpmJet || mcGenH->InheritsFrom(AliGenDPMjetEventHeader::Class())) {
541 if (!hDpmJet) hDpmJet = (AliGenDPMjetEventHeader*)mcGenH;
542 fNPart = (hDpmJet->ProjectileParticipants()+hDpmJet->TargetParticipants())/2.;
543 fNBColl = hDpmJet->NN()+hDpmJet->NNw()+hDpmJet->NwN()+hDpmJet->NwNw();
545 int npProj = hDpmJet->ProjectileParticipants();
548 hDpmJet->GetNDiffractive(nsd1,nsd2,ndd);
549 if (ndd==0 && (npProj==nsd1 || npProj==nsd2)) {
557 mcGenH->PrimaryVertex(vtmc);
558 for (
int i=3;i--;)
fVtxMC[i] = vtmc[i];
562 Int_t trg = handler->IsEventSelected();
564 if (fTrigSel == AliVEvent::kAny)
584 const AliESDVertex* vtxESD = esd->GetPrimaryVertexSPD();
585 const AliMultiplicity* multESD = esd->GetMultiplicity();
606 AliMultSelection *multSelection = (AliMultSelection *)esd->FindListObject(
"MultSelection");
625 const double kSafeMargin = 1e-3;
626 if (centPercentile<-kSafeMargin)
return;
628 if (centPercentile<kSafeMargin) centPercentile = kSafeMargin;
629 if (centPercentile>100-kSafeMargin) centPercentile = 100.-kSafeMargin;
637 AliESDVZERO* esdV0 = esd->GetVZEROData();
639 multV0 = esdV0->GetMTotV0A()+esdV0->GetMTotV0C();
644 float nSPD2 = multESD->GetNumberOfITSClusters(1);
648 AliESDZDC *esdZDC = esd->GetESDZDC();
649 float zdcEnergy=0,zemEnergy=0;
651 zdcEnergy = (esdZDC->GetZDCN1Energy() + esdZDC->GetZDCP1Energy() + esdZDC->GetZDCN2Energy()+ esdZDC->GetZDCP2Energy());
652 zemEnergy = (esdZDC->GetZDCEMEnergy(0)+ esdZDC->GetZDCEMEnergy(1))/8.;
667 for (
int i=3;i--;)
fESDVtx[i] = 0;
668 if (vtxESD->GetNContributors()>0) {
669 TString vtxTyp = vtxESD->GetTitle();
670 if ( !vtxTyp.Contains(
"vertexer: Z") || (vtxESD->GetDispersion()<0.04 && vtxESD->GetZRes()<0.25)) {
700 double mltE0 = AliESDtrackCuts::GetReferenceMultiplicity(esd, AliESDtrackCuts::kTrackletsITSTPC, etaRange);
701 double mltE1 = AliESDtrackCuts::GetReferenceMultiplicity(esd, AliESDtrackCuts::kTrackletsITSSA , etaRange);
702 double mltE2 = AliESDtrackCuts::GetReferenceMultiplicity(esd, AliESDtrackCuts::kTracklets, etaRange);
727 printf(
"Multiplicity Reconstructed:\n");
728 AliMultiplicity* mlt =
fMultReco->GetMultiplicity();
729 if (mlt) mlt->Print();
742 fMultReco->SetRecType(AliITSMultRecBg::kBgInj);
744 printf(
"Multiplicity from Injection:\n");
745 AliMultiplicity* mlt =
fMultReco->GetMultiplicity();
746 if (mlt) mlt->Print();
754 fMultReco->SetRecType(AliITSMultRecBg::kBgRot);
757 printf(
"Multiplicity from Rotation:\n");
758 AliMultiplicity* mlt =
fMultReco->GetMultiplicity();
759 if (mlt) mlt->Print();
776 TList *lst =
dynamic_cast<TList*
>(GetOutputData(1));
777 if (lst && (hstat=(
TH1*)lst->FindObject(
"hStat"))) {
778 Info(
"Terminate",
"Registering used settings");
811 Printf(
"Terminating...");
844 hstat =
new TH1F(
"hStat",
"Run statistics",nbs,0.5,nbs+0.5);
846 hstat->GetXaxis()->SetBinLabel(
kEvTot0,
"Ev.Tot0");
847 hstat->GetXaxis()->SetBinLabel(
kEvTot,
"Ev.Tot");
848 hstat->GetXaxis()->SetBinLabel(
kOneUnit,
"ScaleMerge");
849 hstat->GetXaxis()->SetBinLabel(
kNWorkers,
"Workers");
852 hstat->GetXaxis()->SetBinLabel(
kDPhi,
"#Delta#varphi");
853 hstat->GetXaxis()->SetBinLabel(
kDTht,
"#Delta#theta");
854 hstat->GetXaxis()->SetBinLabel(
kNStd,
"N.std");
855 hstat->GetXaxis()->SetBinLabel(
kPhiShift,
"#delta#varphi");
856 hstat->GetXaxis()->SetBinLabel(
kThtS2,
"scale #Delta#theta");
857 hstat->GetXaxis()->SetBinLabel(
kPhiOvl,
"#varpho_{Ovl}");
858 hstat->GetXaxis()->SetBinLabel(
kZEtaOvl,
"#z_{Ovl}");
859 hstat->GetXaxis()->SetBinLabel(
kNoOvl,
"rem.ovl");
861 hstat->GetXaxis()->SetBinLabel(
kPhiRot,
"#varphi_{rot}");
862 hstat->GetXaxis()->SetBinLabel(
kInjScl,
"inj");
863 hstat->GetXaxis()->SetBinLabel(
kEtaMin,
"#eta_{min}");
864 hstat->GetXaxis()->SetBinLabel(
kEtaMax,
"#eta_{max}");
865 hstat->GetXaxis()->SetBinLabel(
kZVMin,
"ZV_{min} cut");
866 hstat->GetXaxis()->SetBinLabel(
kZVMax,
"ZV_{max} cut");
868 hstat->GetXaxis()->SetBinLabel(
kDPiSCut,
"#Delta#varphi-#delta_{#phi} cut");
869 hstat->GetXaxis()->SetBinLabel(
kNStdCut,
"#Delta cut");
871 hstat->GetXaxis()->SetBinLabel(
kMCV0Scale,
"MC V0 scale");
873 hstat->GetXaxis()->SetBinLabel(
kNEvSDMC,
"MC PureSD");
878 hstat->GetXaxis()->SetBinLabel(offs +
kEvInMltBin, bnt+
" Ev.In.CntBn");
879 hstat->GetXaxis()->SetBinLabel(offs +
kEvProcData, bnt+
" Ev.ProcData");
880 hstat->GetXaxis()->SetBinLabel(offs +
kEvProcInj, bnt+
" Ev.ProcInj");
881 hstat->GetXaxis()->SetBinLabel(offs +
kEvProcRot, bnt+
" Ev.ProcRot");
882 hstat->GetXaxis()->SetBinLabel(offs +
kEvProcMix, bnt+
" Ev.ProcMix");
883 hstat->GetXaxis()->SetBinLabel(offs +
kEvCentBin, bnt+
" Ev.CentBinNS");
884 hstat->GetXaxis()->SetBinLabel(offs +
kEvPassPS, bnt+
" Ev.CentBinPSTR");
885 hstat->GetXaxis()->SetBinLabel(offs +
kEvPassVtx, bnt+
" Ev.CentBinVtx");
894 TH1F* hCentAx =
new TH1F(
"EvCentr",
"Events per centrality",fNCentBins,
fCentPerc.GetArray());
895 hCentAx->GetXaxis()->SetTitle(
"Centrality parameter");
898 TH1F* hCentBin =
new TH1F(
"EvCentrBin",
"Events per centrality bin",fNCentBins,-0.5,fNCentBins-0.5);
899 hCentBin->GetXaxis()->SetTitle(
"Centrality Bin");
902 TH1F* hCentDistNoSel =
new TH1F(
"EvCentrDistNoSel",
"Events per centrality Before selection",100,0,100);
903 hCentDistNoSel->GetXaxis()->SetTitle(
"Centrality percentile");
906 TH1F* hCentDist =
new TH1F(
"EvCentrDist",
"Events per centrality ",100,0,100);
907 hCentDist->GetXaxis()->SetTitle(
"Centrality percentile");
914 double zMn=-30, zMx=30;
918 int nZVBins = int(zMx-zMn);
919 if (nZVBins<1) nZVBins = 1;
922 TH1F* hzvns =
new TH1F(
"zvNoSel",
"Z vertex before selection",nZVBins,zMn,zMx);
923 hzvns->GetXaxis()->SetTitle(
"Zvertex");
928 double maxmltV0 = 50000;
930 TH1F* hnV0ns =
new TH1F(
"V0NoSel",
"V0 signal Before Cent. Selection",nbmltV0,0,maxmltV0);
931 hnV0ns->GetXaxis()->SetTitle(
"V0 signal");
935 int nbmltSPD2 = 2500;
936 double maxmltSPD2 = 25000;
937 TH1F* hncl2ns =
new TH1F(
"NClustersSPD2NoSel",
"N Clusters on SPD2 Before Cent Selection",nbmltSPD2,0,maxmltSPD2);
938 hncl2ns->GetXaxis()->SetTitle(
"N Clus SPD2");
942 double maxZDC=6000., maxZEM=2500.;
943 TH2F* hzdczemns =
new TH2F(
"ZDCZEMNoSel",
"ZDC vs ZEM Before Cent Selection",
944 nbzdc,0,maxZEM,nbzdc,0,maxZDC);
945 hzdczemns->GetXaxis()->SetTitle(
"ZEM");
946 hzdczemns->GetXaxis()->SetTitle(
"ZDC");
951 const int kMaxMlt = 10000;
952 hmlt =
new TH1F(
"mltTrTPCITS",
"mltTPCITS",kMaxMlt,0,kMaxMlt);
955 hmlt =
new TH1F(
"mltTrITSSA",
"mltITSSA",kMaxMlt,0,kMaxMlt);
958 hmlt =
new TH1F(
"mltTracklets",
"mltTracklets",kMaxMlt,0,kMaxMlt);
963 hmlt =
new TH1F(
"mltMCTruth",
"mltMCTruth",kMaxMlt,0,kMaxMlt);
966 TH2F* hzvMCNoPS =
new TH2F(
"zvMCNoPS",
"Z MC vertex Before Ph.Sel per Cent.Bin",nZVBins,zMn,zMx, fNCentBins, -0.5,fNCentBins-0.5);
967 hzvMCNoPS->GetXaxis()->SetTitle(
"ZvertexMC");
968 hzvMCNoPS->GetYaxis()->SetTitle(
"Cent.Bin ID");
971 TH2F* hzvMCNoVS =
new TH2F(
"zvMCNoVS",
"Z MC vertex Before Rec.Vtx.Selection per Cent.Bin",nZVBins,zMn,zMx, fNCentBins, -0.5,fNCentBins-0.5);
972 hzvMCNoVS->GetXaxis()->SetTitle(
"ZvertexMC");
973 hzvMCNoVS->GetYaxis()->SetTitle(
"Cent.Bin ID");
976 TH2F* hzvMC =
new TH2F(
"zvMC",
"Z vertex MC after Selection per Cent.Bin",nZVBins,zMn,zMx, fNCentBins, -0.5,fNCentBins-0.5);
977 hzvMC->GetXaxis()->SetTitle(
"ZvertexMC");
978 hzvMC->GetYaxis()->SetTitle(
"Cent.Bin ID");
981 TH1* hNPrimEta2All =
new TH1F(
"nPrimEta2All",
"NPrim |#eta|<2, allMC",1000,0.,1000.);
982 hNPrimEta2All->SetXTitle(
"NPrim");
985 TH1* hNPrimEta2Vt =
new TH1F(
"nPrimEta2Vt",
"NPrim |#eta|<2, VtxMC",1000,0.,1000.);
986 hNPrimEta2Vt->SetXTitle(
"NPrim");
989 TH1* hNPrimEta2Sel =
new TH1F(
"nPrimEta2Sel",
"NPrim |#eta|<2, Sel",1000,0.,1000.);
990 hNPrimEta2Sel->SetXTitle(
"NPrim");
993 TH1* hNPrimEta2SelVt =
new TH1F(
"nPrimEta2SelVt",
"NPrim |#eta|<2, Sel+VtxMC",1000,0.,1000.);
994 hNPrimEta2SelVt->SetXTitle(
"NPrim");
999 TH2F* hcorrEta2 =
new TH2F(
"nTrNprEta2",
"Ntr vs NPrim |#eta|<2, Sel+Vtx",100,0.,100.,100,0.,100.);
1000 hcorrEta2->SetXTitle(
"NPrim");
1001 hcorrEta2->SetYTitle(
"NTracklets");
1004 TH2F* hzv =
new TH2F(
"zv",
"Z vertex after Selection per Cent.Bin",nZVBins,zMn,zMx, fNCentBins, -0.5,fNCentBins-0.5);
1005 hzv->GetXaxis()->SetTitle(
"Zvertex");
1006 hzv->GetYaxis()->SetTitle(
"Cent.Bin ID");
1010 TH2F* hnV0 =
new TH2F(
"V0",
"V0 signal per Cent.Bin ",nbmltV0,0,maxmltV0, fNCentBins, -0.5,fNCentBins-0.5);
1011 hnV0->GetXaxis()->SetTitle(
"V0 signal");
1012 hnV0->GetYaxis()->SetTitle(
"Cent.Bin ID");
1016 TH2F* hncl2 =
new TH2F(
"NClustersSPD2",
"N Clusters on SPD2 per Cent.Bin",nbmltSPD2,0,maxmltSPD2, fNCentBins, -0.5,fNCentBins-0.5);
1017 hncl2->GetXaxis()->SetTitle(
"N Clus SPD2");
1018 hncl2->GetYaxis()->SetTitle(
"Cent.Bin ID");
1022 TH3F* hzdczem =
new TH3F(
"ZDCZEM",
"ZDC vs ZEM per Cent.Bin",nbzdc,0,maxZEM,nbzdc,0,maxZDC, fNCentBins, -0.5,fNCentBins-0.5);
1023 hzdczem->GetXaxis()->SetTitle(
"ZEM");
1024 hzdczem->GetYaxis()->SetTitle(
"ZDC");
1028 TH2* hetaphi =
new TH2F(
"etaphiTracklets",
"etaphiTracklets",50,-2.5,2.5, 200, 0,2*TMath::Pi());
1029 hetaphi->SetXTitle(
"#eta");
1030 hetaphi->SetYTitle(
"#phi");
1034 if (nEtaBinsS<1) nEtaBinsS = 1;
1037 if (nZVBinsS<1) nZVBinsS = 1;
1041 char buffn[100],bufft[500];
1043 sprintf(buffn,
"b%d_zvEtaPrimMC",ib);
1044 sprintf(bufft,
"bin%d Zvertex vs #eta PrimMC",ib);
1046 hzvetap->GetXaxis()->SetTitle(
"#eta");
1047 hzvetap->GetYaxis()->SetTitle(
"Zvertex");
1050 sprintf(buffn,
"b%d_zvrecEtaPrimMCSel",ib);
1051 sprintf(bufft,
"bin%d ZvertexR vs #eta PrimMC sel evs",ib);
1053 hzvretap->GetXaxis()->SetTitle(
"#eta");
1054 hzvretap->GetYaxis()->SetTitle(
"Zvertex");
1057 sprintf(buffn,
"b%d_dZV_ZVGen",ib);
1058 sprintf(bufft,
"bin%d ZvRec-ZvGen vs ZvGen",ib);
1060 hdzv->GetXaxis()->SetTitle(
"VZGen");
1061 hdzv->GetYaxis()->SetTitle(
"VZRec-VZGen");
1064 sprintf(buffn,
"b%d_ptPrimMC",ib);
1065 sprintf(bufft,
"bin%d pT PrimMC",ib);
1066 TH1F* hpt =
new TH1F(buffn,bufft,1000,0.,5.);
1067 hpt->GetXaxis()->SetTitle(
"pT");
1068 hpt->GetYaxis()->SetTitle(
"counts");
1073 TH1F* hnprimM =
new TH1F(
"nPrimMean",
"<N> primaries",fNCentBins, -0.5,fNCentBins-0.5);
1074 hnprimM->GetXaxis()->SetTitle(
"Cent.Bin ID");
1078 TH1F* hnprim2partM =
new TH1F(
"nPrim2Part",
"<N> primaries per part.pair",fNCentBins, -0.5,fNCentBins-0.5);
1079 hnprim2partM->GetXaxis()->SetTitle(
"Cent.Bin ID");
1083 TH2F* hnprim2partNp =
new TH2F(
"nPrim2Part_vs_NPart",
"<N> primaries per part.pair vs N part.pairs",105,0,210,200,0,40);
1084 hnprim2partNp->GetXaxis()->SetTitle(
"N.part.pairs");
1085 hnprim2partNp->GetYaxis()->SetTitle(
"N.prim/N.part.pairs");
1089 TH2F* hnprim2BCollNp =
new TH2F(
"nPrim2BColl_vs_NPart",
"<N> primaries per bin.coll vs N part.pairs",105,0,210,200,0,40);
1090 hnprim2BCollNp->GetXaxis()->SetTitle(
"N.part.pairs");
1091 hnprim2BCollNp->GetYaxis()->SetTitle(
"N.prim/N.bin.coll.");
1095 TH1F* hnprim2BCollM =
new TH1F(
"nPrim2BColl",
"<N> primaries per bin.coll",fNCentBins, -0.5,fNCentBins-0.5);
1096 hnprim2BCollM->GetXaxis()->SetTitle(
"Cent.Bin ID");
1100 TH2F* hnpart =
new TH2F(
"nPart",
"N participant pairs",210,0,210,fNCentBins, -0.5,fNCentBins-0.5);
1101 hnpart->GetXaxis()->SetTitle(
"N part. pairs");
1102 hnpart->GetYaxis()->SetTitle(
"Cent.Bin ID");
1106 TH1F* hnpartM =
new TH1F(
"nPartMean",
"<N> participant pairs",fNCentBins, -0.5,fNCentBins-0.5);
1107 hnpartM->GetXaxis()->SetTitle(
"Cent.Bin ID");
1111 TH2F* hnbcoll =
new TH2F(
"nBColl",
"N bin. coll",2000,0,2000,fNCentBins, -0.5,fNCentBins-0.5);
1112 hnbcoll->GetXaxis()->SetTitle(
"N bin. coll");
1113 hnbcoll->GetYaxis()->SetTitle(
"Cent.Bin ID");
1117 TH1F* hnbcollM =
new TH1F(
"nBCollMean",
"<N> bin.colls",fNCentBins, -0.5,fNCentBins-0.5);
1118 hnbcollM->GetXaxis()->SetTitle(
"Cent.Bin ID");
1126 TH2F* hpdgP =
new TH2F(
"pdgPrim",
"primary PDG",npdg,0,npdg,fNCentBins, -0.5,fNCentBins-0.5);
1128 TH2F* hpdgS =
new TH2F(
"pdgSec",
"secondary PDG",npdg,0,npdg,fNCentBins, -0.5,fNCentBins-0.5);
1130 TH2F* hpdgPP =
new TH2F(
"pdgPrimPar",
"primary parent PDG ",npdg,0,npdg,fNCentBins, -0.5,fNCentBins-0.5);
1132 TH2F* hpdgSP =
new TH2F(
"pdgSecPar",
"secondary parent PDG",npdg,0,npdg,fNCentBins, -0.5,fNCentBins-0.5);
1134 TH2F* hpdgMC =
new TH2F(
"pdgPrimMC",
"primary PDG",npdg,0,npdg,fNCentBins, -0.5,fNCentBins-0.5);
1136 for (
int i=0;i<npdg;i++) {
1137 hpdgP->GetXaxis()->SetBinLabel(i+1,
fgkPDGNames[i]);
1138 hpdgS->GetXaxis()->SetBinLabel(i+1,
fgkPDGNames[i]);
1139 hpdgPP->GetXaxis()->SetBinLabel(i+1,
fgkPDGNames[i]);
1140 hpdgSP->GetXaxis()->SetBinLabel(i+1,
fgkPDGNames[i]);
1141 hpdgMC->GetXaxis()->SetBinLabel(i+1,
fgkPDGNames[i]);
1147 hclinf =
new TH2F(
"cl0InfoUsed",
"#phi vs Z of used clusters, Lr0",64,-16,16, 80,0,2*TMath::Pi());
1149 hclinf =
new TH2F(
"cl1InfoUsed",
"#phi vs Z of used clusters, Lr1",64,-16,16, 2*80,0,2*TMath::Pi());
1151 hclinf =
new TH2F(
"cl0InfoAll",
"#phi vs Z of all clusters, Lr0",64,-16,16, 80,0,2*TMath::Pi());
1153 hclinf =
new TH2F(
"cl1InfoAll",
"#phi vs Z of all clusters, Lr1",64,-16,16, 2*80,0,2*TMath::Pi());
1157 histos->SetOwner(kFALSE);
1167 const int kNDPhiBins = 100;
1168 const int kNDThtBins = 100;
1172 if (nEtaBins<1) nEtaBins = 1;
1175 if (nZVBins<1) nZVBins = 1;
1182 char buffn[100],bufft[500];
1188 sprintf(buffn,
"b%d_%s_ZvEtaCutT",ib,pref);
1189 sprintf(bufft,
"bin%d (%s) Zv vs Eta with tracklet cut",ib,pref);
1191 h2->GetXaxis()->SetTitle(
"#eta");
1192 h2->GetYaxis()->SetTitle(
"Zv");
1197 sprintf(buffn,
"b%d_%s_dPhidTheta",ib,pref);
1198 sprintf(bufft,
"bin%d (%s) #Delta#theta vs #Delta#varphi",ib,pref);
1199 h2 =
new TH2F(buffn,bufft,kNDPhiBins,-dphir,dphir,kNDThtBins,-dthtr,dthtr);
1200 h2->GetXaxis()->SetTitle(
"#Delta#varphi [rad]");
1201 h2->GetYaxis()->SetTitle(
"#Delta#theta [rad]");
1206 sprintf(buffn,
"b%d_%s_dPhiSdThetaX",ib,pref);
1207 sprintf(bufft,
"bin%d (%s) #Delta#theta%s vs #Delta#varphi-#delta_{#varphi}",ib,pref,
fScaleDTBySin2T ?
"/sin^{2}(#theta)":
"");
1208 h2 =
new TH2F(buffn,bufft,kNDPhiBins,-dphir,dphir,kNDThtBins,-dthtr,dthtr);
1209 h2->GetXaxis()->SetTitle(
"#Delta#varphi-#delta_{#varphi} [rad]");
1210 sprintf(bufft,
"#Delta#theta%s",
fScaleDTBySin2T ?
"/sin^{2}(#theta)":
"");
1211 h2->GetYaxis()->SetTitle(bufft);
1215 if (selHistos & (0x1<<
kHWDist) ) {
1216 sprintf(buffn,
"b%d_%s_WDist",ib,pref);
1217 sprintf(bufft,
"bin%d #Delta=[(#Delta#varphi-#delta_{#varphi})/#sigma#varphi]^{2}+" 1218 "[#Delta#theta%s/#sigma#theta]^{2}",ib,
fScaleDTBySin2T ?
"*sin^{-2}(#theta)":
"");
1219 h1 =
new TH1F(buffn,bufft,nDistBins,0,
fNStdDev);
1220 sprintf(bufft,
"#Delta=[(#Delta#varphi-#delta_{#varphi})/#sigma#varphi]^{2}+" 1221 "[#Delta#theta%s/#sigma#theta]^{2}",
fScaleDTBySin2T ?
"*sin^{-2}(#theta)":
"");
1222 h1->GetXaxis()->SetTitle(bufft);
1237 if (selHistos & (0x1<<
kHWDvEta) ) {
1238 sprintf(buffn,
"b%d_%s_WDvsEta",ib,pref);
1239 sprintf(bufft,
"bin%d (%s) Wdist vs Eta",ib,pref);
1241 h2->GetXaxis()->SetTitle(
"#eta");
1242 h2->GetYaxis()->SetTitle(
"Wdist");
1248 histos->SetOwner(kFALSE);
1256 if (at>=0) histos->AddAtAndExpand(h,at);
1257 else histos->Add(h);
1277 AliGenHijingEventHeader* pyHeader = 0;
1280 pyHeader = (AliGenHijingEventHeader*)
fMCEvent->GenEventHeader();
1281 pyHeader->PrimaryVertex(vtxMC);
1285 if (!histos)
return;
1286 int ntr = mlt->GetNumberOfTracklets();
1288 for (
int itr=ntr;itr--;) {
1295 if (mlt->GetLabel(itr,0) == mlt->GetLabel(itr,1)) {
1296 int lab = mlt->GetLabel(itr,0);
1297 if (lab < 0)
continue;
1298 TParticle* part =
fStack->Particle(lab);
1299 if (!part)
continue;
1300 weight = part->GetWeight();
1303 for (
Int_t ilay = 0; ilay < 2; ilay++) {
1304 int lab = mlt->GetLabel(itr,ilay);
1305 if (lab < 0)
continue;
1306 TParticle* part =
fStack->Particle(lab);
1307 if (!part)
continue;
1308 weight *= part->GetWeight();
1333 double theta = mlt->GetTheta(itr);
1334 double phi = mlt->GetPhi(itr);
1335 double eta = -TMath::Log(TMath::Tan(theta/2));
1337 double dtheta = mlt->GetDeltaTheta(itr);
1338 double dThetaX = dtheta;
1340 double sint = TMath::Sin(theta);
1341 dThetaX /= (sint*sint);
1346 double dphi = mlt->GetDeltaPhi(itr);
1347 double dist = mlt->CalcDist(itr);
1348 double dphiS = TMath::Abs(dphi) -
fDPhiShift;
if (dphi<0) dphiS = -dphiS;
1353 if (eta<fEtaMin || eta>
fEtaMax)
continue;
1354 if (phi<fPhiMin || phi>
fPhiMax)
continue;
1358 if (type==
kData && isSig) {
1364 int lab0 = mlt->GetLabel(itr,0);
1365 int lab1 = mlt->GetLabel(itr,1);
1367 if (lab0 == lab1) typeMC =
fStack->IsPhysicalPrimary(lab0) ? 0:1;
1374 float *trl =
fMultReco->GetTracklet(itr);
1375 int clId0 = (int)trl[AliITSMultReconstructor::kClID1];
1376 int clId1 = (int)trl[AliITSMultReconstructor::kClID2];
1377 float *clLabs0 =
fMultReco->GetClusterOfLayer(0,clId0) + AliITSMultReconstructor::kClMC0;
1378 float *clLabs1 =
fMultReco->GetClusterOfLayer(1,clId1) + AliITSMultReconstructor::kClMC0;
1428 int ntr =
fStack->GetNtrack();
1440 for (
int itr=ntr;itr--;) {
1441 if (!
fStack->IsPhysicalPrimary(itr))
continue;
1442 AliMCParticle *mcpart = (AliMCParticle*)
fMCEvent->GetTrack(itr);
1443 Float_t theta = mcpart->Theta();
1444 if (theta<1e-6 || theta>TMath::Pi()-1e-6)
continue;
1451 TParticle* part =
fStack->Particle(itr);
1452 if (!part)
continue;
1453 double weight = part->GetWeight();
1454 int pdgCode = TMath::Abs(part->GetPdgCode());
1461 if (mcpart->Charge() && TMath::Abs(eta) < 1.)
1462 hprimPt->Fill(pt,weight);
1464 if (TMath::Abs(eta) < 1.)
1467 if (!mcpart->Charge())
continue;
1478 hprimEtaZ->Fill(eta, zv, weight);
1480 hprimEtaZr->Fill(eta, zvr, weight);
1511 double dphi,
double dtheta,
double dThetaX,
1512 double dist,
double weight)
1520 ((
TH2*)histos->UncheckedAt(offs+
kHWDvEta))->Fill(eta,dist,weight);
1524 double dphiS = TMath::Abs(dphi) -
fDPhiShift;
1525 if (dphi<0) dphiS = -dphiS;
1531 ((
TH2*)histos->UncheckedAt(offs+
kHDPhiDTheta))->Fill(dphi,dtheta,weight);
1533 if (histos->UncheckedAt(
kHWDist))
1534 ((
TH2*)histos->UncheckedAt(offs+
kHWDist))->Fill(dist,weight);
1548 TH2 *hPart=0,*hParent=0;
1553 else if (primsec==1) {
1558 int ntr =
fStack->GetNtrack();
1559 TParticle* part =
fStack->Particle(
id);
1560 double weight = part->GetWeight();
1561 int pdgCode = TMath::Abs(part->GetPdgCode());
1563 int parID = part->GetFirstMother();
1564 int pdgCodePar = -1;
1566 while (parID>=0 && parID<ntr) {
1567 part =
fStack->Particle(parID);
1568 pdgCodePar = TMath::Abs(part->GetPdgCode());
1569 parID = part->GetFirstMother();
1571 if (pdgCodePar>0) pdgBinPar =
GetPdgBin(pdgCodePar);
1583 for (
int i=0;i<fNCentBins;i++) if (perc>=
fCentPerc[i] && perc<
fCentPerc[i+1])
return i;
1593 for (pdgBin=0;pdgBin<ncodes;pdgBin++)
if (pdgCode==
fgkPDGCodes[pdgBin])
break;
1594 if (pdgBin>=ncodes) {
1595 if (
float(pdgCode)>1e9) pdgBin = ncodes;
1596 else pdgBin = ncodes+1;
1605 const int kMaxPar = 50;
1606 static int pars[2][50];
1608 const float *labs[2] = {clLabs0,clLabs1};
1609 int ntr =
fStack->GetNtrack();
1610 for (
int il=0;il<2;il++) {
1611 for (
int ilb=0;ilb<3;ilb++) {
1612 int lbl = (int)labs[il][ilb];
1613 if (lbl<0 || lbl>=ntr)
continue;
1615 while (npars[il]<kMaxPar-1) {
1616 pars[il][ npars[il]++ ] = lbl;
1617 TParticle* part =
fStack->Particle(lbl);
1619 lbl = part->GetFirstMother();
1620 if (lbl<1 || lbl>=ntr)
break;
1625 for (
int i0=npars[0];i0--;)
for (
int i1=npars[1];i1--;)
if (pars[0][i0]==pars[1][i1])
return kTRUE;
1636 static TArrayF trWeight;
1637 static TBits isPrimArr;
1639 if (!
fMultReco || !
fMultReco->IsRecoDone()) {AliInfo(
"To check reconstructables the reco had to be requested");
return;}
1640 if (!
fStack) {AliInfo(
"MC Stack is not availalble");
return;}
1641 const double kPtMin = 0.05;
1643 TClonesArray *clArr[2];
1644 for (
int ilr=0;ilr<2;ilr++) {
1645 clArr[ilr] =
fMultReco->GetClustersOfLayer(ilr);
1646 if (!clArr[ilr]) {AliInfo(
"Clusters are not available");
return;}
1649 int ntr =
fStack->GetNtrack();
1652 if (trInd.GetSize()<ntr) trInd.Set(ntr);
1653 isPrimArr.ResetAllBits();
1656 int ntrStore=0,ntrStorePrim=0;
1657 Int_t *trIndArr = trInd.GetArray();
1658 Float_t *trWeightArr = trWeight.GetArray();
1659 for (
Int_t it=0; it<ntr; it++) {
1660 TParticle* part =
fStack->Particle(it);
1661 if (TMath::Abs(part->Eta())>2.2)
continue;
1662 if (TMath::Abs(part->Pt())<kPtMin)
continue;
1663 if (
fStack->IsPhysicalPrimary(it)) {
1664 isPrimArr.SetBitNumber(it);
1668 TParticlePDG* pdgPart = part->GetPDG();
1669 if (TMath::Abs(pdgPart->Charge())!=3)
continue;
1670 if (part->R()>5.)
continue;
1672 trIndArr[it] = ++ntrStore;
1673 trWeightArr[it] = part->GetWeight();
1676 AliInfo(Form(
"Selected %d MC particles (%d prim) out of %d in the stack\n",ntrStore,ntrStorePrim,ntr));
1679 AliITSRecPoint **clIndL[2];
1680 clIndL[0] =
new AliITSRecPoint*[kMaxCl*ntrStore];
1681 clIndL[1] =
new AliITSRecPoint*[kMaxCl*ntrStore];
1682 memset(clIndL[0],0,kMaxCl*ntrStore*
sizeof(AliITSRecPoint*));
1683 memset(clIndL[1],0,kMaxCl*ntrStore*
sizeof(AliITSRecPoint*));
1685 for (
int ilr=0;ilr<2;ilr++) {
1686 TClonesArray *clusters = clArr[ilr];
1687 int ncl = clusters->GetEntriesFast();
1688 for (
int icl=ncl;icl--;) {
1689 AliITSRecPoint *cl = (AliITSRecPoint*)clusters->UncheckedAt(icl);
1690 for (
int ilb=3;ilb--;) {
1691 int lbl = cl->GetLabel(ilb);
if (lbl<0 || lbl>=ntr)
continue;
1692 int lblI = trIndArr[lbl];
1693 if (--lblI<0)
continue;
1694 for (
int icc=0;icc<kMaxCl;icc++)
if (!clIndL[ilr][lblI+icc*ntrStore]) {clIndL[ilr][lblI+ntrStore*icc] = cl;
break;}
1699 Float_t clusterLay[2][AliITSMultReconstructor::kClNPar];
1700 double trComp[6][kMaxCl*kMaxCl];
1701 int indQual[kMaxCl*kMaxCl];
1703 for (
int itr=ntr;itr--;) {
1704 int lblI = trIndArr[itr];
1705 float weight = trWeightArr[itr];
1706 if (--lblI<0)
continue;
1708 for (
int icl0=0;icl0<kMaxCl;icl0++) {
1709 AliITSRecPoint *cl0 = clIndL[0][lblI+icl0*ntrStore];
1710 if (!cl0 || !clIndL[1][lblI])
break;
1711 cl0->GetGlobalXYZ( clusterLay[0] );
1713 for (
int icl1=0;icl1<kMaxCl;icl1++) {
1714 AliITSRecPoint *cl1 = clIndL[1][lblI+icl1*ntrStore];
1716 cl1->GetGlobalXYZ( clusterLay[1] );
1718 trComp[AliITSMultReconstructor::kTrPhi][ntrCand] = clusterLay[0][AliITSMultReconstructor::kClPh];
1719 trComp[AliITSMultReconstructor::kTrTheta][ntrCand] = clusterLay[0][AliITSMultReconstructor::kClTh];
1720 trComp[AliITSMultReconstructor::kTrDTheta][ntrCand] = clusterLay[0][AliITSMultReconstructor::kClTh] - clusterLay[1][AliITSMultReconstructor::kClTh];
1721 trComp[AliITSMultReconstructor::kTrDPhi][ntrCand] = clusterLay[0][AliITSMultReconstructor::kClPh] - clusterLay[1][AliITSMultReconstructor::kClPh];
1722 trComp[AliITSMultReconstructor::kTrLab1][ntrCand] = icl1*10 + icl0;
1723 double &dphi = trComp[ntrCand][3];
1724 if (dphi>TMath::Pi()) dphi=2.*TMath::Pi()-dphi;
1725 trComp[5][ntrCand] =
fMultReco->CalcDist(trComp[AliITSMultReconstructor::kTrDPhi][ntrCand],
1726 trComp[AliITSMultReconstructor::kTrDTheta][ntrCand],
1727 trComp[AliITSMultReconstructor::kTrTheta][ntrCand]);
1731 if (!ntrCand)
continue;
1732 if (ntrCand>1) TMath::Sort(ntrCand,trComp[5],indQual,kFALSE);
else indQual[0] = 0;
1736 for (
int itc=0;itc<ntrCand;itc++) {
1737 int ind = indQual[itc];
1738 if (trComp[AliITSMultReconstructor::kTrLab1][ind]<0)
continue;
1739 for (
int jtc=itc+1;jtc<ntrCand;jtc++) {
1740 int jnd = indQual[jtc];
1741 if (trComp[AliITSMultReconstructor::kTrLab1][jnd]<0)
continue;
1742 if (
int(trComp[AliITSMultReconstructor::kTrLab1][ind])/10 ==
int(trComp[AliITSMultReconstructor::kTrLab1][jnd])/10 ||
1743 int(trComp[AliITSMultReconstructor::kTrLab1][ind])%10 ==
int(trComp[AliITSMultReconstructor::kTrLab1][jnd])%10) trComp[AliITSMultReconstructor::kTrLab1][jnd] = -1;
1749 for (
int itc=0;itc<ntrCand;itc++) {
1750 int ind = indQual[itc];
1751 if (trComp[4][ind]<0)
continue;
1752 double eta = -TMath::Log(TMath::Tan(trComp[AliITSMultReconstructor::kTrTheta][ind]/2));
1753 double phi = trComp[AliITSMultReconstructor::kTrPhi][ind];
1754 if (eta<fEtaMin || eta>
fEtaMax)
continue;
1755 if (phi<fPhiMin || phi>
fPhiMax)
continue;
1756 double dThetaX = trComp[AliITSMultReconstructor::kTrTheta][ind];
1758 double sint = TMath::Sin(trComp[AliITSMultReconstructor::kTrTheta][ind]);
1759 dThetaX /= (sint*sint);
1763 trComp[AliITSMultReconstructor::kTrDPhi][ind],trComp[AliITSMultReconstructor::kTrDTheta][ind],
1764 dThetaX,trComp[5][ind],weight);
1781 for (
int itr=ntr;itr--;) {
1783 if (TMath::Abs(TMath::Abs(trc[AliITSMultReconstructor::kTrDPhi])-
fDPhiShift)>
fDPhiSCut)
continue;
1784 if (
fMultReco->CalcDist(trc[AliITSMultReconstructor::kTrDPhi],
1785 trc[AliITSMultReconstructor::kTrDTheta],
1786 trc[AliITSMultReconstructor::kTrTheta]) >
fNStdCut)
continue;
1787 clID[0] = (int)trc[AliITSMultReconstructor::kClID1];
1788 clID[1] = (int)trc[AliITSMultReconstructor::kClID2];
1789 for (
int il=0;il<2;il++) {
1791 hclU[il]->Fill( clinf[AliITSMultReconstructor::kClZ], clinf[AliITSMultReconstructor::kClPh]);
1795 for (
int il=0;il<2;il++)
for (
int ic=
fMultReco->GetNClustersLayer(il);ic--;) {
1797 hclA[il]->Fill( clinf[AliITSMultReconstructor::kClZ], clinf[AliITSMultReconstructor::kClPh]);
1806 const double kRSPD2 = 3.9;
1809 int ntr = mlt->GetNumberOfTracklets();
1810 for (
int itr=ntr;itr--;) {
1811 Bool_t goodTracklet = kTRUE;
1813 if (mlt->CalcDist(itr) >
fNStdCut) goodTracklet = kFALSE;
1814 double phi = mlt->GetPhi(itr);
1815 double z = kRSPD2/TMath::Tan(mlt->GetTheta(itr)) + zVertex;
1816 if (goodTracklet) hclU->Fill(z,phi);
1820 int ncl = mlt->GetNumberOfSingleClusters();
1821 for (
int icl=ncl;icl--;) {
1822 double phi = mlt->GetPhiSingle(icl);
1823 double z = kRSPD2/TMath::Tan(mlt->GetThetaSingle(icl)) + zVertex;
1833 for (
int i=0;i<nv;i++) {
1838 AliFatalF(
"Unknown centrality var: %s",var);
1847 AliInfoF(
"Defining %d centrality bins",
fNCentBins);
1848 for (
int i=0;i<=
nbins;i++) {
1850 if (i<nbins) AliInfoF(
"CentBin# %.1f-%.1f",arr[i],arr[i+1]);
1861 AliInfoF(
"Defining %d centrality bins",
fNCentBins);
1862 for (
int i=0;i<=
nbins;i++) {
1864 if (i<nbins) AliInfoF(
"CentBin# %.1f-%.1f",arr[i],arr[i+1]);
1874 const Char_t *
h_REWEIGHTpt_name[11] = {
"c0_5",
"c0_5",
"c5_10",
"c5_10",
"c10_20",
"c20_30",
"c30_40",
"c40_50",
"c50_60",
"c60_70",
"c70_80"};
1901 Int_t c1 = 0, c2 = 5;
1902 if (cc <= 5) { c1 = 0; c2 = 5; }
1903 else if (cc <= 10) { c1 = 5; c2 = 10; }
1904 else if (cc <= 20) { c1 = 10; c2 = 20; }
1905 else if (cc <= 30) { c1 = 20; c2 = 30; }
1906 else if (cc <= 40) { c1 = 30; c2 = 40; }
1907 else if (cc <= 50) { c1 = 40; c2 = 50; }
1908 else if (cc <= 60) { c1 = 50; c2 = 60; }
1909 else if (cc <= 70) { c1 = 60; c2 = 70; }
1910 else { c1 = 70; c2 = 80; }
1911 TString ptName; ptName.Form(
"ptWeight_c%d_%d", c1, c2);
1913 if (!h_REWEIGHTpt) {
1914 Warning(
"ReweightStack",
"pT weight histogram %s (%d) not found in %s",
1968 int ntr =
fStack->GetNtrack();
1969 for (
int itr=ntr;itr--;) {
1970 TParticle* part =
fStack->Particle(itr);
1971 if (!part)
continue;
1986 TParticle *part =
fStack->Particle(lab);
1988 if (!
fStack->IsPhysicalPrimary(lab)) {
1989 int lmom = part->GetFirstMother();
1994 float weight = part->GetWeight();
1995 float pt = part->Pt();
1996 int pdg = TMath::Abs(part->GetPdgCode());
1999 weight *= h_REWEIGHTpt->GetBinContent(h_REWEIGHTpt->FindBin(pt));
2016 weight *= h_REWEIGHTpid_pi->GetBinContent(1);
2019 weight *= h_REWEIGHTpid_pr->GetBinContent(1);
2022 weight *= h_REWEIGHTpid_ka->GetBinContent(1);
2030 weight *= h_REWEIGHTstr_pi->GetBinContent(1);
2033 weight *= h_REWEIGHTstr_pr->GetBinContent(1);
2036 weight *= h_REWEIGHTstr_ka->GetBinContent(1);
2039 weight *= h_REWEIGHTstr_k0->GetBinContent(1);
2042 weight *= h_REWEIGHTstr_la->GetBinContent(1);
2044 case 3112:
case 3222:
2045 weight *= h_REWEIGHTstr_si->GetBinContent(1);
2048 weight *= h_REWEIGHTstr_xi->GetBinContent(1);
TObjArray * fHistosTrInj
all tracklets in data
Bool_t HaveCommonParent(const float *clLabs0, const float *clLabs1)
Float_t fNPart
N of signal tracklets |eta|<2.
Int_t GetPdgBin(Int_t pdgCode)
void SetRemoveOverlaps(Bool_t w=kFALSE)
Bool_t FillHistosSet(TObjArray *histos, double eta, double dphi, double dtheta, double dthetaX, double dist, double weight)
static const char * fgCentSelName[]
static const char * fgkPDGNames[]
centrality types
void Print(Option_t *option) const
void CheckReconstructables()
void AddHisto(TObjArray *histos, TObject *h, Int_t at=-1)
Int_t GetCentralityBin(Float_t percentile) const
void SetThetaWindow(float w=0.025)
TObjArray * fHistosTrSec
primary
Float_t fVtxMC[3]
ESD vertex.
TObjArray * fHistosCustom
Secondary Reconstructable.
float GetPrimaryWeight(Int_t i)
void SetPhiWindow(float w=0.08)
Bool_t fUseSpecialOutput
rec.vertex is good
Bool_t GetDoInjection() const
Int_t fNTreta2
N of primaries |eta|<2.
TString fUseCentralityVar
TString kData
Declare data MC or deltaAOD.
Bool_t GetDoNormalReco() const
AliTrackletTaskMulti(const char *name="AliTrackletTaskMulti")
AliITSMultRecBg * fMultReco
TObjArray * fHistosTrPrim
rotated
void CheckCentralityVar(const char *var)
virtual ~AliTrackletTaskMulti()
const double kEtaBinWidth
void SetCentPercentiles(Float_t *arr, Int_t nbins)
TObjArray * fHistosTrRot
injected
void SetPhiRot(float w=0)
virtual void UserExec(Option_t *option)
AliMCEvent * fMCEvent
MC stack.
TObjArray * fHistosTrCombU
combinatorials
static const Int_t fgkPDGCodes[]
pdg names
AliStack * fStack
tree of recpoints
void FillHistos(Int_t type, const AliMultiplicity *mlt)
void FillSpecies(Int_t primsec, Int_t id)
Bool_t fVtxOK
did current event pass phys.sel.?
Float_t fEtaMin
custom histos
Int_t fNPrimMCeta2
MC gen vertex.
void ReweightStack(double weight)
TTree * fRPTree
mult.reco object
TObjArray * BookHistosSet(const char *pref, UInt_t selHistos=0xffffffff)
void FillClusterInfoFromMult(const AliMultiplicity *mlt, double zVertex)
void SetNStdDev(Float_t f=1.)
void SetPhiOverlapCut(float w=0.005)
Float_t fESDVtx[3]
MC Event.
TObjArray * fHistosTrRcblSec
Primary Reconstructable.
void SetPhiShift(float w=0.0045)
TObjArray * fHistosTrRcblPrim
combinatorials uncorrelated
virtual void Terminate(Option_t *)
TObjArray * BookCustomHistos()
TObjArray * fHistosTrComb
secondary
TObjArray * fHistosTrData
virtual void UserCreateOutputObjects()
Bool_t GetDoRotation() const
Bool_t fCheckReconstructables
void SetZetaOverlapCut(float w=0.05)
void SetScaleDThetaBySin2T(Bool_t v=kFALSE)
const Char_t * h_REWEIGHTpt_name[11]
TList * OpenFile(const char *fname)