12 #include <AliAnalysisTaskSE.h>
18 #include <AliVVertex.h>
19 #include <AliVertex.h>
20 #include <AliAnalysisManager.h>
21 #include <AliVEventHandler.h>
22 #include <AliInputEventHandler.h>
23 #include <AliMultSelection.h>
24 #include <AliCentrality.h>
26 #include <TClonesArray.h>
30 #include <TGraphErrors.h>
35 class AliMultSelection;
129 const char* weights=0,
130 const char* sumFile=0,
131 const char* resFile=0);
396 const TAxis& etaAxis,
397 const TAxis& ipzAxis,
398 const TAxis& deltaAxis)
476 Histos(
const char* name=
"", Color_t
color=kBlack, Style_t style=1,
477 UChar_t mask=0, UChar_t veto=0)
577 const TAxis& etaAxis,
578 const TAxis& ipzAxis,
579 const TAxis& deltaAxis);
743 const TAxis& etaAxis,
744 const TAxis& ipzAxis,
745 const TAxis& deltaAxis);
885 const AliVVertex*& ip,
886 TClonesArray*& tracklets);
916 const AliVVertex*
FindRealIP(AliVEvent* event,
928 const AliVVertex*
CheckIP(
const AliVVertex* ip,
941 const AliVVertex*
FindIP(AliVEvent* event,
1327 Info(
"SetWeightCalc",
"Use=%d",
mode);
1335 Info(
"SetWeightMask",
"mask=0x%x", mask);
1343 Info(
"SetWeightVeto",
"veto=0x%x", veto);
1411 fNTrackletVsGood(0),
1412 fNTrackletVsFake(0),
1413 fNGeneratedVsGood(0),
1414 fNGeneratedVsFake(0),
1443 fNTrackletVsGood(0),
1444 fNTrackletVsFake(0),
1445 fNGeneratedVsGood(0),
1446 fNGeneratedVsFake(0),
1452 fCentAxis(10,0,100),
1453 fIPzAxis(30,-15,+15),
1455 fPhiAxis(100,0,TMath::TwoPi()),
1460 fShiftedDPhiCut(-1),
1469 DefineOutput(1, Container::Class());
1470 DefineOutput(2, Container::Class());
1483 fNTrackletVsGood(0),
1484 fNTrackletVsFake(0),
1485 fNGeneratedVsGood(0),
1486 fNGeneratedVsFake(0),
1489 fCentMethod(o.fCentMethod),
1490 fCentIdx(o.fCentIdx),
1492 fCentAxis(o.fCentAxis),
1493 fIPzAxis(o.fIPzAxis),
1494 fEtaAxis(o.fEtaAxis),
1495 fPhiAxis(o.fPhiAxis),
1496 fMaxDelta(o.fMaxDelta),
1497 fTailDelta(o.fTailDelta),
1498 fTailMax(o.fTailMax),
1499 fDPhiShift(o.fDPhiShift),
1500 fShiftedDPhiCut(o.fShiftedDPhiCut),
1501 fDeltaCut(o.fDeltaCut),
1502 fAbsMinCent(o.fAbsMinCent)
1508 if (&o ==
this)
return *
this;
1540 if (&o ==
this)
return *
this;
1546 const char* resFile)
1550 AliError(
"No analysis manager to connect to.");
1560 if (sumFile && sumFile[0] !=
'\0') sumOut = sumFile;
1561 if (resFile && resFile[0] !=
'\0') resOut = resFile;
1562 else if (sumFile && sumFile[0] !=
'\0') resOut = sumFile;
1565 if (sumOut.IsNull() || sumOut.EqualTo(
"default", TString::kIgnoreCase))
1566 sumOut = AliAnalysisManager::GetCommonFileName();
1568 if (resOut.IsNull() || resOut.EqualTo(
"default", TString::kIgnoreCase))
1569 resOut = AliAnalysisManager::GetCommonFileName();
1572 mgr->ConnectInput(
this, 0, mgr->GetCommonInputContainer());
1575 if (!sumOut.EqualTo(
"none", TString::kIgnoreCase)) {
1576 TString sumName(Form(
"%sSums", GetName()));
1577 AliAnalysisDataContainer* sumCon =
1578 mgr->CreateContainer(sumName, TList::Class(),
1579 AliAnalysisManager::kOutputContainer, sumOut);
1580 mgr->ConnectOutput(
this, 1, sumCon);
1584 if (!resOut.EqualTo(
"none", TString::kIgnoreCase)) {
1585 TString resName(Form(
"%sResults", GetName()));
1586 AliAnalysisDataContainer* resCon =
1587 mgr->CreateContainer(resName, TList::Class(),
1588 AliAnalysisManager::kParamContainer, resOut);
1589 mgr->ConnectOutput(
this, 2, resCon);
1597 if (shiftedDPhiCut < 0) shiftedDPhiCut = TMath::Sqrt(
fDeltaCut)*0.06;
1601 Printf(
"%s: %s", ClassName(), GetName());
1602 Printf(
" %22s: 0x%08x",
"Off-line trigger mask", fOfflineTriggerMask);
1603 Printf(
" %22s: %f",
"Delta phi shift",
fDPhiShift);
1604 Printf(
" %22s: %f",
"Shifted Delta phi cut", shiftedDPhiCut);
1605 Printf(
" %22s: %f",
"Delta cut",
fDeltaCut);
1606 Printf(
" %22s: %f",
"max Delta",
fMaxDelta);
1607 Printf(
" %22s: %f",
"tail Delta",
fTailDelta);
1608 Printf(
" %22s: %f",
"tail maximum", tailMax);
1609 Printf(
" %22s: %f%%",
"Absolute least c",
fAbsMinCent);
1617 Printf(
"--- Centrality bins");
1620 while ((bin = static_cast<CentBin*>(next()))) {
1635 Printf(
" Centrality bin: %s",
fName.Data());
1636 Printf(
" Low cut: %5.1f",
fLow);
1637 Printf(
" High cut: %5.1f",
fHigh);
1640 Printf(
" --- Histogram sets");
1643 while ((h = static_cast<Histos*>(next()))) {
1654 while ((h = static_cast<Histos*>(next()))) {
1659 void Bits2String(UChar_t m,
char out[7])
1674 char cMask[7]; Bits2String(fMask, cMask);
1675 char cVeto[7]; Bits2String(fVeto, cVeto);
1676 Printf(
" Histograms: %s", fName.Data());
1677 Printf(
" Mask: 0x%02x (%s)", fMask, cMask);
1678 Printf(
" Veto: 0x%02x (%s)", fVeto, cVeto);
1679 Printf(
" Delta: %s", fEtaDeltaIPz ?
"yes" :
"no");
1688 AliWarning(
"Failed to initialize on worker");
1697 if (DebugLevel() > 1) Printf(
"Initialising on worker");
1702 fContainer->SetName(Form(
"%sSums", GetName()));
1705 Bool_t save = TH1::GetDefaultSumw2();
1706 TH1::SetDefaultSumw2();
1711 TAxis trackletAxis(1000, 0, 10000);
1712 FixAxis(trackletAxis,
"#it{N}_{tracklets}");
1714 kGreen+2, 20, trackletAxis);
1716 kRed+2, 20, trackletAxis);
1723 kGreen+2, 20, trackletAxis);
1725 kRed+2, 20, trackletAxis);
1731 TAxis generatedAxis(1000, 0, 15000);
1732 FixAxis(generatedAxis,
"#it{N}_{generated,|#eta|<2}");
1734 kGreen+2, 24, generatedAxis);
1736 kRed+2, 24, generatedAxis);
1743 "Mean number of tracklets per centrality",
1754 TH1::SetDefaultSumw2(save);
1756 fStatus =
new TH1F(
"status",
"Status of task",
1759 fStatus->SetMarkerColor(kMagenta+2);
1760 fStatus->SetLineColor(kMagenta+2);
1761 fStatus->SetFillColor(kMagenta+2);
1767 fStatus->SetXTitle(
"Event have");
1768 fStatus->SetYTitle(
"# Events");
1769 fStatus->GetXaxis()->SetBinLabel(
kAll,
"Been seen");
1782 params->SetName(
"parameters");
1785 params->Add(
new DP(
"DPhiShift",
fDPhiShift,
'f'));
1787 params->Add(
new DP(
"DeltaCut",
fDeltaCut,
'f'));
1788 params->Add(
new DP(
"MaxDelta",
fMaxDelta,
'f'));
1789 params->Add(
new DP(
"TailDelta",
fTailDelta,
'f'));
1790 params->Add(
new DP(
"TailMax",
fTailMax,
'f'));
1791 params->Add(
new DP(
"AbsMinCent",
fAbsMinCent,
'f'));
1794 AliWarning(
"Failed to initialize centrality bins");
1808 AliFatal(
"No weights set!");
1812 TAxis wAxis(100,0,10);
1817 kCyan+2, 24, wAxis, wAxis);
1824 if (DebugLevel() > 1)
1825 Printf(
"Initialising on centrality bins on %s",
1826 existing ?
"master" :
"worker");
1834 "#Delta=[(#Delta#phi-#delta#phi)/#sigma_{#phi}]^{2}+"
1835 "[#Delta#thetasin^{-2}(#theta)/#sigma_{#theta}]^{2}");
1845 AliWarningF(
"Failed to initialize bin %s", bin->
GetName());
1862 AliWarningF(
"Failed to initialize %s", bin->
GetName());
1891 fSubs->SetOwner(
true);
1941 return new Histos(name, color, style, mask, veto);
1946 const TAxis& etaAxis,
1947 const TAxis& ipzAxis,
1948 const TAxis& deltaAxis)
1951 Printf(
"Initializing centrality bin %s", fName.Data());
1952 if (!
Sub::WorkerInit(parent, etaAxis, ipzAxis, deltaAxis))
return false;
1954 TAxis centAxis(20, fLow, fHigh);
1955 FixAxis(centAxis,
"Centrality [%]");
1957 kMagenta+2,20,centAxis);
1961 fCentIPz->SetYTitle(
"#LTc#GT");
1964 while ((h = static_cast<Histos*>(next()))) {
1973 const TAxis& etaAxis,
1974 const TAxis& ipzAxis,
1975 const TAxis& deltaAxis)
1977 if (!
Sub::WorkerInit(parent, etaAxis, ipzAxis, deltaAxis))
return false;
1978 TString shrt(Form(
"%c", GetName()[0]));
1980 if (
GetC(parent,
"generated",
false) != 0) shrt.Append(
"'");
1983 if (!IsPrimary() && !IsSecondary())
1985 kRed+2, 20, etaAxis, ipzAxis);
1989 Form(
"#Delta_{%s}",shrt.Data()),
1990 kBlue+2, 21, etaAxis, deltaAxis, ipzAxis);
1991 if (!IsGenerated() &&
1997 "Parent particle type",
1998 kGreen+2, 22, etaAxis,
PdgAxis(), ipzAxis);
2000 if (IsGenerated()) {
2002 "Primary particle type",
2003 kYellow+2, 30, etaAxis,
PdgAxis());
2004 TAxis ptAxis(100, 0, 5);
2005 ptAxis.SetTitle(
"#it{p}_{T}");
2008 "Primary transverse momentum",
2009 kCyan+2, 30, etaAxis, ptAxis);
2019 fEtaIPz->SetMarkerStyle(m);
2020 fEtaIPz->SetMarkerColor(c);
2021 fEtaIPz->SetLineColor(c);
2022 fEtaIPz->SetFillColor(c);
2025 fEtaDeltaIPz->SetMarkerStyle(m);
2026 fEtaDeltaIPz->SetMarkerColor(c);
2027 fEtaDeltaIPz->SetLineColor(c);
2028 fEtaDeltaIPz->SetFillColor(c);
2031 fEtaPdgIPz->SetMarkerStyle(m);
2032 fEtaPdgIPz->SetMarkerColor(c);
2033 fEtaPdgIPz->SetLineColor(c);
2034 fEtaPdgIPz->SetFillColor(c);
2037 fEtaPdg->SetMarkerStyle(m);
2038 fEtaPdg->SetMarkerColor(c);
2039 fEtaPdg->SetLineColor(c);
2040 fEtaPdg->SetFillColor(c);
2043 fEtaPt->SetMarkerStyle(m);
2044 fEtaPt->SetMarkerColor(c);
2045 fEtaPt->SetLineColor(c);
2046 fEtaPt->SetFillColor(c);
2054 if (DebugLevel() > 0) Printf(
"In user exec");
2056 const AliVVertex* ip = 0;
2057 TClonesArray* tracklets = 0;
2059 AliWarningF(
"Event didn't pass %f, %p, %p", cent, ip, tracklets);
2060 Printf(
"Argh, check data failed %f, %p, %p", cent, ip, tracklets);
2063 if (DebugLevel() > 0) Printf(
"Got centrality=%f ipZ=%f %d tracklets",
2064 cent, ip->GetZ(), tracklets->GetEntriesFast());
2073 const AliVVertex*& ip,
2074 TClonesArray*& tracklets)
2080 AliVEvent*
event = InputEvent();
2082 AliWarning(
"No event");
2089 if (!tracklets)
return false;
2094 if (!trg)
return false;
2099 if (!ip)
return false;
2103 Int_t nTracklets = 0;
2105 if (cent < 0)
return false;
2108 fIPz->Fill(ip->GetZ());
2125 if (!obj->IsA()->InheritsFrom(TClonesArray::Class())) {
2126 AliWarningF(
"Object %s is not a TClonesArray but a %s",
2127 obj->GetName(), obj->ClassName());
2130 return static_cast<TClonesArray*
>(obj);
2139 if (ip->GetNContributors() <= 0) {
2140 AliWarning(
"Not enough contributors for IP");
2144 if (ip->IsFromVertexerZ()) {
2147 ip->GetCovarianceMatrix(covar);
2148 Double_t sigmaZ = TMath::Sqrt(covar[5]);
2149 if (sigmaZ >= maxZError) {
2150 AliWarningF(
"IPz resolution = %f >= %f", sigmaZ, maxZError);
2155 if (ip->IsA()->InheritsFrom(AliVertex::Class())) {
2156 const AliVertex* ipv =
static_cast<const AliVertex*
>(ip);
2158 if (ipv->GetDispersion() >= maxDispersion) {
2159 AliWarningF(
"IP dispersion = %f >= %f",
2160 ipv->GetDispersion(), maxDispersion);
2169 AliWarningF(
"IPz = %fcm out of range [%f,%f]cm",
2181 const AliVVertex* ip =
event->GetPrimaryVertex();
2183 if (DebugLevel() > 1) AliWarning(
"No real IP for this event found!");
2186 return CheckIP(ip, maxDispersion, maxZError);
2194 static AliVertex* ip;
2197 ->FindListObject(
"AliAODSimpleHeader"));
2199 if (DebugLevel() > 1) AliWarning(
"No simple header");
2204 ip->SetXv(head->
fRecIP.X());
2205 ip->SetYv(head->
fRecIP.Y());
2206 ip->SetZv(head->
fRecIP.Z());
2207 ip->SetNContributors(10);
2209 return CheckIP(ip, maxDispersion, maxZError);
2217 const AliVVertex* ip =
FindRealIP(event,maxDispersion,maxZError);
2221 if (DebugLevel() > 1) AliWarning(
"No IP for this event found!");
2231 UInt_t evBits = fInputHandler->IsEventSelected();
2232 Bool_t trgOK = (evBits & fOfflineTriggerMask || fOfflineTriggerMask == 0);
2234 Printf(
"Trigger bits=0x%08x mask=0x%08x masked=0x%08x -> %s",
2235 evBits, fOfflineTriggerMask, evBits & fOfflineTriggerMask,
2236 trgOK ?
"selected" :
"rejected");
2243 if (centMeth.IsNull()) {
2246 AliCentrality* cent =
event->GetCentrality();
2247 if (!cent)
return -1;
2249 Double_t centPer = cent->GetCentralityPercentileUnchecked(centMeth);
2256 AliMultSelection* cent =
2257 static_cast<AliMultSelection*
>(
event->FindListObject(
"MultSelection"));
2259 AliWarning(
"No centrality in event");
2260 event->GetList()->Print();
2264 TString trkName(
"SPDTracklets");
2265 for (
Int_t i = 0; i < cent->GetNEstimators(); i++) {
2266 AliMultEstimator* e = cent->GetEstimator(i);
2269 if (trkName.EqualTo(e->GetName()))
fTrkIdx = i;
2273 AliWarningF(
"Centrality estimator %s not found",
fCentMethod.Data());
2278 AliMultEstimator* estCent = cent->GetEstimator(
fCentIdx);
2280 AliWarningF(
"Centrality estimator %s not available for this event",
2284 fCentEst->Fill(estCent->GetPercentile(), estCent->GetValue());
2287 if (
fTrkIdx < 0)
return estCent->GetPercentile();
2288 AliMultEstimator* estTracklets = cent->GetEstimator(
fTrkIdx);
2289 if (estTracklets) nTracklets = estTracklets->GetValue();
2291 return estCent->GetPercentile();
2298 if (
fCentMethod.EqualTo(
"MB", TString::kIgnoreCase)) {
2299 Printf(
"MB centrality - not checked");
2308 if (DebugLevel() > 1) Printf(
"Read centrality: %f%%", centPer);
2309 if (centPer < -safety)
return -2;
2310 if (centPer < +safety) centPer = safety;
2311 else if (centPer > 100-safety) centPer = 100-safety;
2314 AliWarningF(
"Centrality = %f lower than absolute minimum [%f]",
2319 AliWarningF(
"Centrality = %f out of range [%f,%f]",
2343 Double_t w = fWeights->LookupWeight(tracklet, cent, ipz, fWeightCorr);
2345 fEtaWeight->Fill(tracklet->
GetEta(), cent, w);
2369 const AliVVertex* ip,
2370 TClonesArray* tracklets)
2377 while ((bin = static_cast<CentBin*>(nextAcc()))) {
2378 if (!bin->
Accept(cent, ip->GetZ()))
continue;
2383 if (nAcc <= 0)
return;
2392 TIter nextTracklet(tracklets);
2393 while ((tracklet = static_cast<AliAODTracklet*>(nextTracklet()))) {
2398 nMeasured += weight;
2401 else nGood += weight;
2405 TMath::Abs(tracklet->
GetEta()) <= 2) nGenerated ++;
2406 TIter nextBin(&toRun);
2407 while ((bin = static_cast<CentBin*>(nextBin()))) {
2422 if (cent < fLow || cent >= fHigh)
return false;
2425 fCentIPz->Fill(ipz, cent);
2437 if (fDebug > 3) tracklet->
Print();
2438 while ((h = static_cast<Histos*>(next())))
2449 if (!fEtaIPz && !fEtaDeltaIPz)
return true;
2453 UChar_t flags = tracklet->
GetFlags();
2458 if (fDebug > 3) Bits2String(flags, m);
2461 if (fMask != 0 && (flags & fMask) == 0) {
2462 if (fDebug > 3) Printf(
"%14s (0x%02x,----) %6s %7s (0x%02x) ",
2463 GetName(),fMask,
"reject",m,flags);
2472 if (fEtaPdg) fEtaPdg->Fill(eta, pdgBin, weight);
2475 if (fVeto != 0 && (flags & fVeto) != 0) {
2476 if (fDebug > 3) Printf(
"%14s (----,0x%02x) %6s %7s (0x%02x) ",
2477 GetName(), fVeto,
"veto", m, flags);
2481 if (fDebug > 3) Printf(
"%14s (0x%02x,0x%02x) %6s %7s (0x%02x) ",
2482 GetName(), fMask, fVeto,
"accept", m, flags);
2485 if (fEtaIPz && (signal == 0x3)) fEtaIPz->Fill(eta, ipZ, weight);
2487 if (fEtaDeltaIPz && (signal & 0x2)) fEtaDeltaIPz->Fill(eta,delta,ipZ,weight);
2490 if (!fEtaPdgIPz && !fEtaPt)
return true;
2493 fEtaPdgIPz->Fill(eta, pdgBin, ipZ, weight);
2499 if (fEtaPt) fEtaPt ->Fill(eta, tracklet->
GetParentPt(), weight);
2510 results->SetName(Form(
"%sResults",GetName()));
2511 results->SetOwner();
2516 AliWarning(
"No sum container found!");
2521 AliWarningF(
"Failed to initialize centrality bins from %s",
2527 AliWarning(
"Failed to finalize results");
2531 PostData(2, results);
2545 while ((h = static_cast<Histos*>(next())))
2558 if (GetName()[0] ==
'm' &&
GetC(parent,
"generated")) {
2561 fEtaIPz->SetTitle(Form(
"%s'", fEtaIPz->GetTitle()));
2563 fEtaDeltaIPz->SetTitle(Form(
"#Delta_{%s}", fEtaIPz->GetTitle()));
2583 Printf(
"Event summary:");
2587 fStatus->GetXaxis()->GetBinLabel(i));
2588 for (
Int_t i = 1; i <=
fCent->GetNbinsX(); i++)
2589 Printf(
" %6.2f-%6.2f%%: %d",
2590 fCent->GetXaxis()->GetBinLowEdge(i),
2591 fCent->GetXaxis()->GetBinUpEdge(i),
2595 fIPz ->Scale(1./nEvents);
2603 while ((bin = static_cast<CentBin*>(next()))) {
2605 AliWarningF(
"Failed to finalize %s", bin->
GetName());
2617 if (o && o->IsA()->InheritsFrom(TH1::Class())) {
2618 TH1* h =
static_cast<TH1*
>(o->Clone());
2623 AliWarningF(
"Object %p (etaWeight) is not a TH1 or not found",o);
2626 if (o && o->IsA()->InheritsFrom(TH1::Class())) {
2627 TH1* h =
static_cast<TH1*
>(o->Clone());
2632 AliWarningF(
"Object %p (weightCorr) is not a TH1 or not found",o);
2634 if (!fWeights)
return true;
2636 if (!fWeights->Retrieve(
fContainer))
return false;
2637 fWeights->Store(results);
2650 result->SetName(fName);
2651 result->SetOwner(
true);
2652 parent->Add(result);
2657 ipZ->Scale(1./nEvents);
2660 cent->Scale(1./nEvents);
2668 while ((h = static_cast<Histos*>(next()))) {
2669 if (h->
GetMask() != AliAODTracklet::kInjection &&
2673 AliWarningF(
"Failed to finalize %s/%s", GetName(), h->
GetName());
2683 if (!EstimateBackground(result, measCont, genCont, h, tailDelta, tailMax)) {
2684 AliWarningF(
"Failed to estimate Bg in %s/%s", GetName(), h->
GetName());
2699 result->SetName(fName);
2700 result->SetOwner(
true);
2701 parent->Add(result);
2710 result->Add(etaIPz);
2715 TH2* etaPdg =
static_cast<TH2*
>(fEtaPdg->Clone());
2716 etaPdg->SetDirectory(0);
2717 etaPdg->Scale(1. / nEvents,
"width");
2718 result->Add(etaPdg);
2721 TAxis* yaxis = etaPdg->GetYaxis();
2722 Int_t first = yaxis->GetFirst();
2723 Int_t last = yaxis->GetLast();
2724 THStack* pdgs =
new THStack(
"all",
"");
2725 THStack* toPion =
new THStack(
"toPion",
"");
2726 THStack* toAll =
new THStack(
"toAll",
"");
2729 pdgOut->SetName(
"mix");
2730 result->Add(pdgOut);
2732 pdgOut->Add(toPion);
2735 TH1* all =
static_cast<TH1*
>(etaPdg->ProjectionX(
"total",
2736 1,etaPdg->GetNbinsY()));
2737 all->SetDirectory(0);
2738 all->SetName(
"total");
2739 all->SetTitle(
"All");
2740 all->SetYTitle(Form(
"d#it{N}_{%s}/d#eta",
"all"));
2741 all->SetFillColor(kBlack);
2742 all->SetMarkerColor(kBlack);
2743 all->SetLineColor(kBlack);
2744 all->SetMarkerStyle(20);
2745 all->SetFillStyle(0);
2746 all->SetFillColor(0);
2749 for (
Int_t i = 1; i <= etaPdg->GetNbinsY(); i++) {
2755 if (pdg < 0) pdg = 0;
2756 if (pdg == 22)
continue;
2758 TH1* h1 =
static_cast<TH1*
>(etaPdg->ProjectionX(Form(
"h%d", pdg),i,i));
2759 if (h1->GetEntries() <= 0)
continue;
2760 h1->SetDirectory(0);
2761 h1->SetName(Form(
"eta_%d", pdg));
2763 h1->SetYTitle(Form(
"d#it{N}_{%s}/d#eta", nme.Data()));
2764 h1->SetFillColor(col);
2765 h1->SetMarkerColor(col);
2766 h1->SetLineColor(col);
2767 h1->SetMarkerStyle(sty);
2768 h1->SetFillStyle(0);
2769 h1->SetFillColor(0);
2770 h1->SetBinContent(0,0);
2774 case 321: h1->SetBinContent(0, 0.15);
break;
2775 case 2212: h1->SetBinContent(0, 0.05);
break;
2776 case 310: h1->SetBinContent(0, 0.075);
break;
2777 case 3122: h1->SetBinContent(0, 0.018);
break;
2778 case 3212: h1->SetBinContent(0, 0.0055);
break;
2779 case 3322: h1->SetBinContent(0, 0.005);
break;
2780 case 211: h1->SetBinContent(0, 1);
break;
2781 default: h1->SetBinContent(0, -1);
break;
2785 if (pdg == 211) pion = h1;
2787 if (pdgs->GetHists()) {
2788 TIter next(pdgs->GetHists());
2792 while ((tmp = static_cast<TH1*>(next()))) {
2793 if (tmp == all)
continue;
2795 TH1* rat =
static_cast<TH1*
>(tmp->Clone());
2797 rat->SetDirectory(0);
2798 rat->SetTitle(Form(
"%s / all", tmp->GetTitle()));
2801 if (tmp == pion)
continue;
2802 Double_t r276 = tmp->GetBinContent(0);
2803 if (r276 < 0 || r276 >= 1)
continue;
2806 rat =
static_cast<TH1*
>(tmp->Clone());
2808 rat->SetTitle(Form(
"%s / %s", tmp->GetTitle(), pion->GetTitle()));
2809 rat->SetDirectory(0);
2812 g->SetName(Form(
"%s_2760", rat->GetName()));
2813 g->SetTitle(Form(
"%s in #sqrt{s_{NN}}=2.76TeV", rat->GetTitle()));
2814 g->SetPoint(0,0,r276);
2815 g->SetPointError(0,.5,0);
2816 g->SetLineColor(rat->GetLineColor());
2817 g->SetLineStyle(rat->GetLineStyle());
2818 g->SetMarkerColor(rat->GetMarkerColor());
2819 g->SetMarkerStyle(rat->GetMarkerStyle());
2820 g->SetMarkerSize(1.5*rat->GetMarkerSize());
2821 rat->GetListOfFunctions()->Add(g,
"p");
2822 rat->SetMaximum(TMath::Max(rat->GetMaximum(),r276));
2823 rat->SetMinimum(TMath::Min(rat->GetMinimum(),r276));
2824 rmin = TMath::Min(rat->GetMinimum(),rmin);
2825 rmax = TMath::Max(rat->GetMaximum(),rmax);
2830 toPion->SetMaximum(1.1*rmax);
2836 TH2* etaPt =
static_cast<TH2*
>(fEtaPt->Clone());
2837 etaPt->SetDirectory(0);
2838 etaPt->Scale(1. / nEvents,
"width");
2844 TString shn(etaIPz ? etaIPz->GetTitle() :
"X");
2851 result->Add(etaPdgIPz);
2854 TAxis* yaxis = etaPdgIPz->GetYaxis();
2855 Int_t first = yaxis->GetFirst();
2856 Int_t last = yaxis->GetLast();
2857 THStack* pdgs =
new THStack(
"all",
"");
2858 THStack* ratios =
new THStack(
"toPion",
"");
2861 pdgOut->SetName(
"types");
2862 result->Add(pdgOut);
2864 pdgOut->Add(ratios);
2865 for (
Int_t i = 1; i <= etaPdgIPz->GetNbinsY(); i++) {
2866 yaxis->SetRange(i,i);
2873 if (pdg < 0) pdg = 0;
2875 TH2* h2 =
static_cast<TH2*
>(etaPdgIPz->Project3D(
"zx e"));
2876 if (h2->GetEntries() <= 0)
continue;
2877 h2->SetDirectory(0);
2878 h2->SetName(Form(
"etaIPz_%d", pdg));
2879 h2->SetTitle(Form(
"%s#rightarrowX_{%s}", nme.Data(), shn.Data()));
2880 h2->SetYTitle(Form(
"d#it{N}^{2}_{%s#rightarrow%s}/"
2881 "(d#etadIP_{#it{z}})",
2882 nme.Data(), shn.Data()));
2883 h2->SetFillColor(col);
2884 h2->SetMarkerColor(col);
2885 h2->SetLineColor(col);
2889 h1->SetDirectory(0);
2890 h1->SetYTitle(Form(
"d#it{N}_{%s#rightarrow%s}/d#eta",
2891 nme.Data(), shn.Data()));
2892 h1->SetMarkerStyle(sty);
2895 if (pdg == 211) pion = h1;
2897 if (pdgs->GetHists()) {
2898 TIter next(pdgs->GetHists());
2900 while ((tmp = static_cast<TH1*>(next()))) {
2901 if (tmp == pion)
continue;
2902 TH1* rat =
static_cast<TH1*
>(tmp->Clone());
2904 rat->SetDirectory(0);
2909 yaxis->SetRange(first, last);
2912 if (!fEtaDeltaIPz)
return true;
2918 result->Add(etaDeltaIPz);
2922 result->Add(etaDelta);
2929 Double_t maxDelta = etaDeltaIPz->GetYaxis()->GetXmax();
2930 Int_t lowBin = etaDeltaIPz->GetYaxis()->FindBin(tailDelta);
2931 Int_t sigBin = etaDeltaIPz->GetYaxis()->FindBin(1.5);
2932 Int_t highBin = TMath::Min(etaDeltaIPz->GetYaxis()->FindBin(tailMax),
2933 etaDeltaIPz->GetYaxis()->GetNbins());
2936 TH1* etaDeltaTail = etaDelta->ProjectionX(
"etaDeltaTail");
2937 etaDeltaTail ->SetDirectory(0);
2938 etaDeltaTail ->Reset();
2939 etaDeltaTail ->SetTitle(Form(
"#scale[.7]{#int}_{%3.1f}^{%4.1f}"
2942 etaDeltaIPz->GetTitle(),
2943 etaDeltaIPz->GetTitle()));
2944 etaDeltaTail ->SetYTitle(
"#scale[.7]{#int}_{tail}d#Delta d#it{N}/d#Delta");
2946 TH2* etaIPzDeltaTail =
static_cast<TH2*
>(etaDeltaIPz->Project3D(
"zx e"));
2947 etaIPzDeltaTail->SetName(
"etaIPzDeltaTail");
2948 etaIPzDeltaTail->SetDirectory(0);
2949 etaIPzDeltaTail->Reset();
2950 etaIPzDeltaTail->SetTitle(etaDeltaTail->GetTitle());
2951 etaIPzDeltaTail->SetZTitle(etaDelta->GetYaxis()->GetTitle());
2952 TH2* etaIPzDeltaMain =
static_cast<TH2*
>(etaDeltaIPz->Project3D(
"zx e"));
2953 etaIPzDeltaMain->SetName(
"etaIPzDeltaMain");
2954 etaIPzDeltaMain->SetDirectory(0);
2955 etaIPzDeltaMain->Reset();
2956 etaIPzDeltaMain->SetTitle(etaDeltaTail->GetTitle());
2957 etaIPzDeltaMain->SetZTitle(etaDelta->GetYaxis()->GetTitle());
2960 for (
Int_t i = 1; i <= etaDeltaTail->GetNbinsX(); i++) {
2962 intg = etaDelta->IntegralAndError(i, i, lowBin, highBin, eintg);
2963 etaDeltaTail->SetBinContent(i, intg);
2964 etaDeltaTail->SetBinError (i, eintg);
2966 for (
Int_t j = 1; j <= etaIPzDeltaTail->GetNbinsY(); j++) {
2968 intg = etaDeltaIPz->IntegralAndError(i,i,lowBin,highBin,j,j,eintg);
2969 etaIPzDeltaTail->SetBinContent(i, j, intg);
2970 etaIPzDeltaTail->SetBinError (i, j, eintg);
2972 intg = etaDeltaIPz->IntegralAndError(i,i,1,sigBin,j,j,eintg);
2973 etaIPzDeltaMain->SetBinContent(i, j, intg);
2974 etaIPzDeltaMain->SetBinError (i, j, eintg);
2977 result->Add(etaIPzDeltaTail);
2978 result->Add(etaIPzDeltaMain);
2979 result->Add(etaDeltaTail);
2982 intg = etaDeltaIPz->IntegralAndError(1,etaDeltaIPz->GetNbinsX(),
2984 1,etaDeltaIPz->GetNbinsZ(),
2991 Printf(
"%10s: Integral over eta,IPz: %9.4f +/- %9.4f",
2992 GetName(), intg, eintg);
2993 intg = etaDelta->IntegralAndError(1,etaDeltaIPz->GetNbinsX(),
2996 Printf(
"%10s: Integral over eta: %9.4f +/- %9.4f",
2997 GetName(), intg, eintg);
2998 intg = delta->IntegralAndError(lowBin, highBin, eintg);
2999 Printf(
"%10s: Integral: %9.4f +/- %9.4f",
3000 GetName(), intg, eintg);
3014 if (!h || !measCont) {
3015 AliWarningF(
"No sub-histos or measured container in %s", GetName());
3020 AliWarningF(
"Failed to finalize %s/%s", GetName(), h->
GetName());
3026 AliWarningF(
"%s/%s didn't put a container on output",
3030 const char* sub = h->
GetName();
3031 TString shrt(Form(
"%c", sub[0]));
3033 if (genCont) shrt.Append(
"'");
3035 TH2* background = 0;
3036 TH2* etaIPzScale = 0;
3042 etaIPzScale =
CopyH2(measCont,
"etaIPzDeltaTail",
3044 etaIPzScale->Divide(
GetH2(bgCont,
"etaIPzDeltaTail"));
3045 etaIPzScale->SetZTitle(
"k_{#eta,IP_{#it{z}}}");
3046 etaIPzScale->SetTitle(Form(
"k_{%s,#eta,IP_{#it{z}}}",shrt.Data()));
3047 bgCont->Add(etaIPzScale);
3053 TH1* etaScale =
CopyH1(measCont,
"etaDeltaTail",
3055 etaScale->Divide(
GetH1(bgCont,
"etaDeltaTail"));
3056 etaScale->SetYTitle(
"k_{#eta}");
3057 etaScale->SetTitle(Form(
"k_{%s,#eta}", shrt.Data()));
3058 bgCont->Add(etaScale);
3065 Double_t measIntE =
GetD(measCont,
"deltaTailError", -1);
3069 Double_t scale =
RatioE(measIntg, measIntE, bgIntg, bgIntE, scaleE);
3076 "scaleEtaDeltaIPz"),
3078 scaledEtaDeltaIPz->SetTitle(Form(
"%5.3f#times%s",
3079 scale, scaledEtaDeltaIPz->GetTitle()));
3080 scaledEtaDeltaIPz->SetDirectory(0);
3081 scaledEtaDeltaIPz->SetYTitle(
"k#timesd^{3}#it{N}/"
3082 "(d#Deltad#etadIP_{#it{z}})");
3083 bgCont->Add(scaledEtaDeltaIPz);
3087 TH2* scaledEtaDelta =
CopyH2(bgCont,
"etaDelta",
"scaledEtaDelta");
3088 scaledEtaDelta->SetTitle(scaledEtaDeltaIPz->GetTitle());
3089 scaledEtaDelta->SetZTitle(
"k#timesd^{2}#it{N}/(d#Deltad#eta)");
3090 Scale(scaledEtaDelta, etaScale);
3091 bgCont->Add(scaledEtaDelta);
3093 TH1* scaledDelta =
CopyH1(bgCont,
"delta",
"scaledDelta");
3094 scaledDelta->SetTitle(scaledEtaDeltaIPz->GetTitle());
3095 scaledDelta->SetYTitle(
"k#timesd#it{N}/d#Delta");
3096 Scale(scaledDelta,scale,scaleE);
3097 bgCont->Add(scaledDelta);
3101 scaledEtaDelta->SetName(
"scaledEtaDelta");
3102 scaledEtaDelta->SetTitle(scaledEtaDeltaIPz->GetTitle());
3103 scaledEtaDelta->SetYTitle(
"k#timesd^{2}#it{N}/(d#Deltad#eta)");
3104 bgCont->Add(scaledEtaDelta);
3108 scaledDelta->SetName(
"scaledDelta");
3109 scaledDelta->SetTitle(scaledEtaDeltaIPz->GetTitle());
3110 scaledDelta->SetYTitle(
"k#timesd#it{N}/d#Delta");
3111 bgCont->Add(scaledDelta);
3114 background =
CopyH2(bgCont,
"etaIPz",
"background");
3115 if (!background) AliWarningF(
"Didn't get background in %s", sub);
3116 else background->Multiply(etaIPzScale);
3123 background =
CopyH2(bgCont,
"etaIPz",
"background");
3124 TH2* beta =
CopyH2(bgCont,
"etaIPz",
"beta");
3125 if (!background || !beta)
3126 AliWarningF(
"Didn't get background or beta in %s", sub);
3128 beta->Divide(
GetH1(measCont,
"etaIPz"));
3129 beta->SetTitle(Form(
"#beta_{%s}", shrt.Data()));
3134 AliWarningF(
"Didn't get background in %s", sub);
3137 background->SetTitle(Form(
"#it{B}_{%s}", shrt.Data()));
3138 bgCont->Add(background);
3140 TH2* signal =
CopyH2(measCont,
"etaIPz",
"signal");
3142 AliWarningF(
"Didn't get signal in %s", sub);
3146 signal->SetTitle(Form(
"#it{S}_{%s}", shrt.Data()));
3147 signal->Add(background,-1);
3149 for (
Int_t i = 1; i <= signal->GetNbinsX(); i++) {
3150 for (
Int_t j = 1; j <= signal->GetNbinsX(); j++) {
3151 if (signal->GetBinContent(i,j)<1e-6) {
3152 signal->SetBinContent(i,j,0);
3153 signal->SetBinError (i,j,0);
3158 bgCont->Add(signal);
3163 alpha =
CopyH2(genCont,
"etaIPz",
"alpha");
3164 if (alpha && signal) {
3165 alpha->Divide(signal);
3166 alpha->SetTitle(Form(
"#alpha_{%s}", shrt.Data()));
3178 const char* weights,
3179 const char* sumFile,
3180 const char* resFile)
3184 ::Error(
"Create",
"No analysis manager to connect to.");
3189 if (weights && weights[0] !=
'\0') {
3193 TFile* wfile = TFile::Open(wurl.GetFile());
3195 ::Warning(
"Create",
"Failed to open weights file: %s",
3199 TString wnam(wurl.GetAnchor());
3200 if (wnam.IsNull()) wnam =
"weights";
3201 TObject* wobj = wfile->Get(wnam);
3203 ::Warning(
"Create",
"Failed to get weights %s from file %s",
3204 wnam.Data(), wfile->GetName());
3207 if (!wobj->IsA()->InheritsFrom(AliTrackletBaseWeights::Class())) {
3208 ::Warning(
"Create",
"Object %s from file %s not an "
3209 "AliTrackletBaseWeights but a %s",
3210 wnam.Data(), wfile->GetName(), wobj->ClassName());
3213 wret->
SetWeights(static_cast<AliTrackletBaseWeights*>(wobj));
virtual Bool_t ProcessTracklet(AliAODTracklet *tracklet, Double_t ipz, UShort_t signal, Double_t weight)=0
static TProfile * GetP1(Container *parent, const char *name, Bool_t verb=true)
virtual void SetWeights(AliTrackletBaseWeights *w)
Histos & operator=(const Histos &)
static const TAxis & PdgAxis()
static void PdgAttr(Int_t pdg, TString &nme, Color_t &c, Style_t &s)
static TH2 * Make2D(Container *c, const TString &name, const TString &title, Color_t color, Style_t style, const TAxis &xAxis, const TAxis &yAxis)
virtual void SetWeightCalc(UChar_t mode=0)
void Print(Option_t *option="") const
Bool_t Connect(const char *sumFile=0, const char *resFile=0)
const AliVVertex * CheckIP(const AliVVertex *ip, Double_t maxDispersion=0.04, Double_t maxZError=0.25)
virtual ~AliTrackletAODMCdNdeta()
virtual Bool_t FinalizeInit(Container *parent)=0
virtual void SetWeightMask(UChar_t mask=0xFF)
AliTrackletAODWeightedMCdNdeta & operator=(const AliTrackletAODWeightedMCdNdeta &o)
Bool_t MasterFinalize(Container *parent, TH1 *ipz, Double_t tailCut, Double_t tailMax)
Bool_t FinalizeInit(Container *parent)
static void PrintAxis(const TAxis &axis, Int_t nSig=2, const char *alt=0)
virtual Bool_t WorkerInit()
Double_t FindMultCentrality(AliVEvent *event, Int_t &nTracklets)
static void SetAxis(TAxis &axis, Int_t n, Double_t *borders)
virtual Double_t LookupWeight(AliAODTracklet *tracklet, Double_t cent, Double_t ipz)
TProfile * fNGeneratedVsGood
void SetCalc(UChar_t mode=kProduct)
Double_t FindCompatCentrality(AliVEvent *event)
virtual void SetWeightInverse(Bool_t inv)
static TProfile2D * Make2P(Container *c, const TString &name, const TString &title, Color_t color, Style_t style, const TAxis &xAxis, const TAxis &yAxis)
static TH1 * GetH1(Container *parent, const char *name, Bool_t verb=true)
static const char * CentName(Double_t c1, Double_t c2)
void SetEtaAxis(Int_t n, Double_t max)
void Terminate(Option_t *)
static TH3 * ScaleDelta(TH3 *h, TH2 *scale)
Bool_t WorkerInit(Container *parent, const TAxis &etaAxis, const TAxis &ipzAxis, const TAxis &deltaAxis)
void SetInverse(Bool_t inv)
virtual void SetWeightVeto(UChar_t veto=0xFF)
TH1 * SetAttr(TH1 *h, Color_t color, Style_t marker=20, Double_t size=1., Style_t fill=0, Style_t line=1, Width_t width=1)
void SetMaxDelta(Double_t x=25)
ClassDef(AliTrackletAODdNdeta, 1)
static TH2 * ScaleToIPz(TH2 *h, TH1 *ipZ, Bool_t full=false)
static TH2 * ProjectEtaDelta(TH3 *h)
void SetCentralityAxis(const TString &spec)
static TH1 * AverageOverIPz(TH2 *h, const char *name, UShort_t mode, TH1 *ipz, TH2 *mask=0, Bool_t verb=true)
static TH1 * ProjectDelta(TH2 *h)
void SetWeightVeto(UChar_t veto=0x0)
static Double_t GetD(Container *parent, const char *name, Double_t def=-1, Bool_t verb=true)
TProfile * fNTrackletVsGood
virtual Real_t GetParentPt(Bool_t second=false) const
void SetTailDelta(Double_t x=5)
static TH3 * Make3D(Container *c, const TString &name, const TString &title, Color_t color, Style_t style, const TAxis &xAxis, const TAxis &yAxis, const TAxis &zAxis)
static TH1 * Scale(TH1 *h, Double_t x, Double_t xe)
void SetMask(UChar_t mask)
Bool_t IsCombinatorics() const
CentBin & operator=(const CentBin &)
virtual ~AliTrackletAODWeightedMCdNdeta()
virtual Bool_t WorkerInit(Container *parent, const TAxis &etaAxis, const TAxis &ipzAxis, const TAxis &deltaAxis)
Bool_t CheckEvent(Double_t ¢, const AliVVertex *&ip, TClonesArray *&tracklets)
AliTrackletAODWeightedMCdNdeta()
void SetIPzAxis(Int_t n, Double_t max)
Utilities for midrapidity analysis.
void SetAbsMinCent(Double_t x=-1)
CentBin & operator=(const CentBin &)
void Print(Option_t *option="") const
TClonesArray * FindTracklets(AliVEvent *event)
Bool_t MasterFinalize(Container *parent, TH1 *ipz, Double_t tailCut, Double_t tailMax)
ClassDef(AliTrackletAODMCdNdeta, 1)
void SetTailMaximum(Double_t x=-1)
void SetEtaAxis(Int_t n, Double_t min, Double_t max)
Bool_t IsSecondary() const
Bool_t InitCentBins(Container *existing)
virtual void SetDebug(UShort_t lvl)
Sub & operator=(const Sub &)
void SetWeightInverse(Bool_t inv)
virtual Bool_t MasterFinalize(Container *parent, TH1 *ipz, Double_t tailCut, Double_t tailMax)=0
void SetCentralityMethod(const TString &name)
Bool_t FinalizeInit(Container *parent)
Encode simulation weights for 2nd pass.
const AliVVertex * FindIP(AliVEvent *event, Double_t maxDispersion=0.04, Double_t maxZError=0.25)
const AliVVertex * FindSimpleIP(AliVEvent *event, Double_t maxDispersion=0.04, Double_t maxZError=0.25)
void SetDPhiShift(Double_t x=0.0045)
AliTrackletAODMCdNdeta(const AliTrackletAODdNdeta &o)
Double_t FindCentrality(AliVEvent *event, Int_t &nTracklets)
TProfile * fCentTracklets
virtual AliTrackletAODdNdeta::CentBin * MakeCentBin(Float_t c1, Float_t c2)
void SetShiftedDPhiCut(Double_t x=-1)
void Print(Option_t *option="") const
TProfile * fNGeneratedVsFake
void SetIPzAxis(Int_t n, Double_t min, Double_t max)
const AliVVertex * FindRealIP(AliVEvent *event, Double_t maxDispersion=0.04, Double_t maxZError=0.25)
Bool_t IsMeasured() const
static TH2 * CopyH2(Container *parent, const char *name, const char *newName=0, Bool_t verb=true)
virtual Short_t GetParentPdg(Bool_t second=false) const
AliTrackletAODWeightedMCdNdeta(const char *name)
virtual void Print(Option_t *option="") const
Bool_t EstimateBackground(Container *result, Container *measCont, Container *genCont, Histos *h, Double_t tailCut, Double_t tailMax)
void SetDeltaCut(Double_t x=1.5)
static TH1 * CopyH1(Container *parent, const char *name, const char *newName=0, Bool_t verb=true)
virtual const char * GetBranchName() const
void SetVeto(UChar_t veto)
static TH3 * GetH3(Container *parent, const char *name, Bool_t verb=true)
const char * GetName() const
static Double_t RatioE(Double_t n, Double_t en, Double_t d, Double_t ed, Double_t &er)
static TH2 * GetH2(Container *parent, const char *name, Bool_t verb=true)
Bool_t IsCombinatoric() const
static AliTrackletAODdNdeta * Create(Bool_t mc=false, const char *weights=0, const char *sumFile=0, const char *resFile=0)
Bool_t IsGenerated() const
Histos * MakeHistos(const char *name, Color_t color, Style_t style, UShort_t mask, UShort_t veto)
void UserExec(Option_t *)
void UserCreateOutputObjects()
AliTrackletAODMCdNdeta(const char *name)
Bool_t MasterFinalize(Container *results)
void SetPhiAxis(Int_t n, Double_t min, Double_t max)
Bool_t IsGenerated() const
ClassDef(AliTrackletAODWeightedMCdNdeta, 1)
Bool_t IsDistinct() const
void SetAttr(Color_t c, Style_t m)
void SetEtaAxis(const TString &spec)
virtual Double_t LookupWeight(AliAODTracklet *tracklet, Double_t cent, Double_t ipz)
virtual void Print(Option_t *option="") const
static Container * GetC(Container *parent, const char *name, Bool_t verb=true)
CentBin(const CentBin &o)
static Int_t PdgBin(Int_t pdg)
AliTrackletAODWeightedMCdNdeta(const AliTrackletAODWeightedMCdNdeta &o)
Bool_t ProcessTracklet(AliAODTracklet *tracklet, Double_t ipz, UShort_t signal, Double_t weight)
Bool_t Accept(Double_t cent, Double_t ipz)
void Print(Option_t *option="") const
virtual UShort_t CheckTracklet(AliAODTracklet *tracklet) const
void SetIPzAxis(const TString &spec)
virtual Bool_t MasterFinalize(Container *results)
virtual ~AliTrackletAODdNdeta()
void SetWeightMask(UChar_t mask=0xFF)
AliTrackletBaseWeights * fWeights
static TH3 * CopyH3(Container *parent, const char *name, const char *newName=0, Bool_t verb=true)
Histos(const char *name="", Color_t color=kBlack, Style_t style=1, UChar_t mask=0, UChar_t veto=0)
static TObject * CloneAndAdd(Container *c, TObject *o)
CentBin(const CentBin &o)
virtual void SetDebug(UShort_t lvl)
void SetWeightCalc(UChar_t mode=0)
virtual const char * GetBranchName() const
Bool_t WorkerInit(Container *parent, const TAxis &etaAxis, const TAxis &ipzAxis, const TAxis &deltaAxis)
static TH1 * Make1D(Container *c, const TString &name, const TString &title, Color_t color, Style_t style, const TAxis &xAxis)
TProfile * fNTrackletVsFake
virtual CentBin * MakeCentBin(Float_t c1, Float_t c2)
static TProfile * Make1P(Container *c, const TString &name, const TString &title, Color_t color, Style_t style, const TAxis &xAxis)
Bool_t IsMeasured() const
Bool_t IsInjected() const
void SetPhiAxis(Int_t n, Double_t max)
static void FixAxis(TAxis &axis, const char *title=0)
void SetCentralityAxis(Int_t n, Double_t *bins)
void SetWeights(AliTrackletBaseWeights *w)
AliTrackletAODdNdeta & operator=(const AliTrackletAODdNdeta &o)
Bool_t ProcessTracklet(AliAODTracklet *tracklet, Double_t ipz, UShort_t signal, Double_t weight)
void ProcessEvent(Double_t cent, const AliVVertex *ip, TClonesArray *tracklets)
static TProfile * GetP(Container *parent, const char *name, Bool_t verb=true)
static void CopyAttr(const TH1 *src, TH1 *dest)