1 #ifndef SPECTRAANALYSIS_C 2 #define SPECTRAANALYSIS_C 7 # include <TParticle.h> 8 # include <TObjArray.h> 10 # include <TParticlePDG.h> 11 # include <TGraphErrors.h> 79 h->SetXTitle(
"p_{T}");
80 h->SetYTitle(
"dN/dp_{T}");
82 h->SetMarkerColor(col);
85 h->SetMarkerStyle(sty);
92 h->SetXTitle(
"m_{T}");
93 h->SetYTitle(
"dN/dm_{T}");
95 h->SetMarkerColor(col);
98 h->SetMarkerStyle(sty);
104 TH1* h =
new TH1D(
"dNdm",
"Mass distribution", 300, 0, 3);
105 h->SetXTitle(
"m\\ \\mathrm{(GeV)}");
106 h->SetYTitle(
"\\mathrm{d}N/\\mathrm{d}m");
108 h->SetMarkerColor(kBlack);
109 h->SetLineColor(kBlack);
110 h->SetFillColor(kBlack);
111 h->SetMarkerStyle(20);
127 h->SetXTitle(Form(
"%d/211",pdg));
128 h->SetYTitle(
"Events");
130 h->SetMarkerColor(col);
131 h->SetLineColor(col);
132 h->SetFillColor(col);
133 h->SetMarkerStyle(sty);
152 TH2* d2Ndptdy =
new TH2D(
"d2Ndptdy",
"Spectra", 20, -10, +10, 100, 0, 10);
153 d2Ndptdy->SetDirectory(0);
154 d2Ndptdy->SetXTitle(
"\\mathit{y}");
155 d2Ndptdy->SetYTitle(
"p_{\\mathrm{T}}");
156 d2Ndptdy->SetZTitle(
"\\mathrm{d}^{2}N_{\\mathrm{ch}}/" 157 "\\mathrm{d}p_{\\mathrm{T}}\\mathrm{d}y");
160 TH2* d2Ndmdy =
new TH2D(
"d2Ndmdy",
"Mass", 20, -10, +10, 300, 0, 3);
161 d2Ndmdy->SetDirectory(0);
162 d2Ndmdy->SetXTitle(
"\\mathit{y}");
163 d2Ndmdy->SetYTitle(
"\\mathit{m}\\ \\hbox{GeV}");
164 d2Ndmdy->SetZTitle(
"Events");
177 Info(
"SlaveBegin",
"Making dN/dpt histogram");
180 Warning(
"SlaveBegin",
"Failed to make histograms");
191 fdNdm =
static_cast<TH1*
>(l->At(5));
214 if (
fNpi <= 0)
return;
229 Int_t pdg = TMath::Abs(p->GetPdgCode());
233 if (TMath::Abs(y) >
fMaxY)
return true;
238 else if (pdg == 321) {
fdNdptK ->Fill(pT);
fNK++; }
239 else if (pdg == 2212) {
fdNdptP ->Fill(pT);
fNP++; }
253 case -1:
return "dNdpt";
254 case 211:
return "dNdptPi";
255 case 321:
return "dNdptK";
256 case 2212:
return "dNdptP";
270 case -1:
return "dNdmt";
271 case 211:
return "dNdmtPi";
272 case 321:
return "dNdmtK";
273 case 2212:
return "dNdmtP";
287 case 321:
return "KtoPiRatio";
288 case 2212:
return "PtoPiRatio";
303 ::Warning(
"Scale",
"No %s histogram found",
dNdptName(pdg));
307 h->Scale(1./nOK/intg,
"width");
323 ::Warning(
"Ratio",
"No %s histogram found",
RatioName(pdg));
326 r->SetBinContent(bin, h->GetMean());
327 r->SetBinError(bin, h->GetRMS());
340 TH1* ratios =
new TH1D(
"ratios",
"Ratios to #pi", 3, .5, 3.5);
341 ratios->GetXaxis()->SetBinLabel(1,
"K/#pi");
342 ratios->GetXaxis()->SetBinLabel(2,
"p/#pi");
343 ratios->GetXaxis()->SetBinLabel(3,
"other/#pi");
344 ratios->SetFillColor(kCyan+2);
345 ratios->SetLineColor(kCyan+2);
346 ratios->SetMarkerColor(kCyan+2);
347 ratios->SetMarkerStyle(20);
348 ratios->SetDirectory(0);
349 Ratio(l, ratios, 1, 321);
350 Ratio(l, ratios, 2, 2212);
351 Ratio(l, ratios, 3, 0);
354 TH2* d2Ndptdy =
static_cast<TH2D*
>(l->FindObject(
"d2Ndptdy"));
355 TProfile* meanPt = d2Ndptdy->ProfileX(
"meanPt");
356 meanPt->SetTitle(
"\\langle p_{\\mathrm{T}}\\rangle");
357 meanPt->SetDirectory(0);
358 meanPt->SetXTitle(
"\\mathit{y}");
359 meanPt->SetYTitle(
"\\langle p_{\\mathrm{T}}\\rangle");
362 TH2* d2Ndmdy =
static_cast<TH2D*
>(l->FindObject(
"d2Ndmdy"));
363 TProfile* meanM = d2Ndmdy->ProfileX(
"meanM");
364 meanM->SetTitle(
"\\langle p_{\\mathrm{T}}\\rangle");
365 meanM->SetDirectory(0);
366 meanM->SetXTitle(
"\\mathit{y}");
367 meanM->SetYTitle(
"\\langle p_{\\mathrm{T}}\\rangle");
370 TH1* mpvPt =
new TH1D(
"mpvPt",
"\\lambda(p_{\\mathrm{T}}",
372 meanPt->GetXaxis()->GetXmin(),
373 meanPt->GetXaxis()->GetXmax());
374 mpvPt->SetDirectory(0);
376 mpvPt->SetXTitle(
"\\mathit{y}");
377 mpvPt->SetYTitle(mpvPt->GetTitle());
378 mpvPt->SetLineColor(meanPt->GetLineColor());
379 mpvPt->SetMarkerColor(meanPt->GetMarkerColor());
380 mpvPt->SetMarkerStyle(meanPt->GetMarkerStyle()+4);
381 mpvPt->SetMarkerSize(meanPt->GetMarkerSize());
382 for (
Int_t i = 1; i <= mpvPt->GetNbinsX(); i++) {
383 d2Ndptdy->GetXaxis()->SetRange(i,i);
385 Int_t maxBin = d2Ndptdy->GetMaximumBin(ix, iy, iz);
386 Double_t mpv = d2Ndptdy->GetYaxis()->GetBinCenter(iy);
387 Double_t empv = d2Ndptdy->GetYaxis()->GetBinWidth(iy);
388 mpvPt->SetBinContent(i, mpv);
389 mpvPt->SetBinError (i, empv);
393 TH1* mpvM =
new TH1D(
"mpvM",
"\\lambda(m)",
395 meanM->GetXaxis()->GetXmin(),
396 meanM->GetXaxis()->GetXmax());
397 mpvM->SetDirectory(0);
399 mpvM->SetXTitle(
"\\mathit{y}");
400 mpvM->SetYTitle(mpvM->GetTitle());
401 mpvM->SetLineColor(meanM->GetLineColor());
402 mpvM->SetMarkerColor(meanM->GetMarkerColor());
403 mpvM->SetMarkerStyle(meanM->GetMarkerStyle()+4);
404 mpvM->SetMarkerSize(meanM->GetMarkerSize());
405 for (
Int_t i = 1; i <= mpvM->GetNbinsX(); i++) {
406 d2Ndmdy->GetXaxis()->SetRange(i,i);
408 Int_t maxBin = d2Ndmdy->GetMaximumBin(ix, iy, iz);
409 Double_t mpv = d2Ndmdy->GetYaxis()->GetBinCenter(iy);
410 Double_t empv = d2Ndmdy->GetYaxis()->GetBinWidth(iy);
411 mpvM->SetBinContent(i, mpv);
412 mpvM->SetBinError (i, empv);
427 Warning(
"Terminate",
"No events selected");
430 Printf(
"A total of %ld events",
fOK);
442 m1->SetUniqueID(0x8);
452 Printf(
" Max rapidity: +/-%f",
fMaxY);
493 :
Base(verbose,monitor)
522 :
Base(verbose,monitor),
582 return fCentBin >= 0;
586 static_cast<TH1*
>(out->At(0)) ->Add(
fdNdpt);
591 static_cast<TH1*
>(out->At(5)) ->Add(
fdNdm);
609 if (fCentBin < 0)
return;
627 h->SetMarkerColor(col);
628 h->SetMarkerStyle(sty);
630 h->SetLineColor(col);
645 Warning(
"Terminate",
"No events selected");
653 TH1* meanPt =
static_cast<TH1*
>(fHelper.
fCentAll->Clone(
"cmeanPt"));
656 fOutput->Add(meanPt);
658 TH1* mpvPt =
static_cast<TH1*
>(meanPt->Clone(
"cmpvPt"));
663 TH1* meanM =
static_cast<TH1*
>(fHelper.
fCentAll->Clone(
"cmeanM"));
668 TH1* mpvM =
static_cast<TH1*
>(meanM->Clone(
"cmpvM"));
675 SetAttr(pt2m,
"\\langle p_{\\mathrm{T}}\\rangle/\\langle m\\rangle",
679 TH1* lpt2m =
static_cast<TH1*
>(pt2m->Clone(
"clpt2m"));
681 SetAttr(lpt2m,
"\\lambda\\left(p_{\\mathrm{T}}\\right)/\\lambda(m)",
685 TH1* mpt2m =
static_cast<TH1*
>(pt2m->Clone(
"cmpt2m"));
687 SetAttr(mpt2m,
"\\lambda\\left(p_{\\mathrm{T}}\\right)/\\langle m\\rangle",
706 for (
Int_t i = 1; i <= meanPt->GetNbinsX(); i++) {
709 TH1* dNdpt =
static_cast<TH1*
>(out->At(0));
710 TH1* dNdptPi =
static_cast<TH1*
>(out->At(1));
711 TH1* dNdptK =
static_cast<TH1*
>(out->At(2));
712 TH1* dNdptP =
static_cast<TH1*
>(out->At(3));
713 TH1* dNdptO =
static_cast<TH1*
>(out->At(4));
714 TH1* dNdm =
static_cast<TH1*
>(out->At(5));
715 TH1* k2piRatio =
static_cast<TH1*
>(out->At(6));
716 TH1* p2piRatio =
static_cast<TH1*
>(out->At(7));
717 TH1* o2piRatio =
static_cast<TH1*
>(out->At(8));
718 TH2* d2Ndptdy =
static_cast<TH2*
>(out->At(9));
719 TH2* d2Ndmdy =
static_cast<TH2*
>(out->At(10));
720 TH1* rat =
static_cast<TH1*
>(out->At(11));
721 Int_t bPt = dNdpt->GetMaximumBin();
722 Int_t bM = dNdm ->GetMaximumBin();
723 meanPt->SetBinContent(i, dNdpt->GetMean());
724 meanPt->SetBinError (i, dNdpt->GetMeanError());
725 meanM ->SetBinContent(i, dNdm ->GetMean());
726 meanM ->SetBinError (i, dNdm ->GetMeanError());
727 mpvPt->SetBinContent (i, dNdpt->GetXaxis()->GetBinCenter(bPt));
728 mpvPt->SetBinError (i, dNdpt->GetXaxis()->GetBinWidth (bPt));
729 mpvM ->SetBinContent (i, dNdm ->GetXaxis()->GetBinCenter(bM));
730 mpvM ->SetBinError (i, dNdm ->GetXaxis()->GetBinWidth (bM));
731 k2pi ->SetBinContent(i, rat ->GetBinContent(1));
732 k2pi ->SetBinError (i, rat ->GetBinError (1));
733 p2pi ->SetBinContent(i, rat ->GetBinContent(2));
734 p2pi ->SetBinError (i, rat ->GetBinError (2));
735 o2pi ->SetBinContent(i, rat ->GetBinContent(3));
736 o2pi ->SetBinError (i, rat ->GetBinError (3));
743 mpt2m->Divide(meanM);
745 Double_t fit[] = { 1.61,1.60,1.57,1.50,1.47,1.48,1.51,1.52,1.49,1.47,0};
746 Double_t err[] = { 0.02,0.02,0.02,0.02,0.02,0.02,0.02,0.03,0.03,0.04,0};
748 static_cast<TProfile*
>(fOutput->FindObject(
"centNPartMean"));
750 ptm->SetName(
"cptm");
751 ptm->SetTitle(
"\\langle p_{\\mathrm{T}}\\rangle/\\langle m\\rangle");
753 ptm->SetMarkerStyle(
kPiSty);
757 lptm->SetName(
"clptm");
758 lptm->SetTitle(
"\\lambda\\left(p_{\\mathrm{T}}\\right)/\\lambda(m)");
760 lptm->SetMarkerStyle(
kPiSty+4);
763 for (
Int_t i = 1; i <= nPart->GetNbinsX(); i++) {
764 Double_t nP = nPart->GetBinContent(i);
765 Double_t eP = nPart->GetBinError (i);
766 Double_t p2m = pt2m ->GetBinContent(i);
767 Double_t ep2m = pt2m ->GetBinError (i);
768 Double_t lp2m = lpt2m->GetBinContent(i);
769 Double_t lep2m = lpt2m->GetBinError (i);
770 ptm->SetPoint (i-1, nP, p2m);
771 ptm->SetPointError (i-1, eP, ep2m);
772 lptm->SetPoint (i-1, nP, lp2m);
773 lptm->SetPointError(i-1, eP, lep2m);
774 Printf(
"%2d Npart=%5.1f+/-%4.1f <pT>/<m>=%5.3f+/-%5.3f " 775 "l(pT)/l(m)=%5.3f+/-%5.3f a=%5.3f+/-%5.3f",
776 i, nP, eP, p2m, ep2m, lp2m, lep2m, fit[i-1], err[i-1]);
778 TMultiGraph* mg =
new TMultiGraph;
780 mg->SetTitle(
"Estimates");
785 THStack* means =
new THStack(
"meansCent",
"Particle means");
790 THStack* ptms =
new THStack(
"ptmsCent",
"Particle ptms");
796 THStack* ratios =
new THStack(
"ratiosCent",
"Particle ratios");
800 fOutput->Add(ratios);
802 ptm->SaveAs(
"ptm.C");
815 m0->SetUniqueID(0x8);
816 m3->SetUniqueID(0x8);
828 Printf(
" Least # events: %d", fMinEvents);
829 fHelper.
Print(option);
862 if (t.EqualTo(
"V0AND")) ret =
new spectra::V0AND(verbose,monitor);
863 else if (t.BeginsWith(
"CENT")) {
865 if (!(w.BeginsWith(
"RefMult") ||
866 w.BeginsWith(
"ZNA") ||
867 w.BeginsWith(
"ZNC") ||
868 w.BeginsWith(
"ZPA") ||
869 w.BeginsWith(
"ZPC") ||
870 w.BeginsWith(
"V0M") ||
871 w.BeginsWith(
"V0A") ||
872 w.BeginsWith(
"V0C") ||
875 Printf(
"Warning: spectraMaker::Make: Unknown estimator: %s",
885 TPair* tp =
static_cast<TPair*
>(uopt.FindObject(
"trig"));
886 if (tp) ret->
SetTrigger(tp->Value()->GetName());
887 TPair* my =
static_cast<TPair*
>(uopt.FindObject(
"maxy"));
888 if (my) ret->
fMaxY =
TString(my->Value()->GetName()).Atof();
891 Printf(
"Error: spectraMaker::Run: Invalid spec: %s", t.Data());
900 Printf(
" <default> - Inelastic");
901 Printf(
" V0AND - Visible X-section");
902 Printf(
" CENT<est> - Centrality classes. <est> is one of ");
903 Printf(
" ZNA - ZNA signal");
904 Printf(
" ZNC - ZNC signal");
905 Printf(
" ZPA - ZPA signal");
906 Printf(
" ZPC - ZPC signal");
907 Printf(
" V0M - V0-A + -C");
908 Printf(
" V0A - V0-A");
909 Printf(
" V0C - V0-C");
914 const char*
Script()
const {
return __FILE__; }
void Print(Option_t *option="") const
Bool_t CheckTrigger() const
spectraMaker * _spectraMaker
static Bool_t Scale(TList *l, UInt_t pdg, Int_t nOK)
FastShortHeader * fHeader
static const char * RatioName(UInt_t pdg)
static TH1 * CreateMt(UInt_t pdg, Color_t col, Style_t sty)
virtual Bool_t SetupEstimator()
Bool_t Finalize(TCollection *output, Long_t minEvents, TH1 *(*callback)(TObject *, Int_t))
virtual Bool_t SetupEstimator()
const char * Script() const
This script defines classes for looping over the data produced by FastSim.C.
static TH1 * CreateSpectra(UInt_t pdg, Color_t col, Style_t sty)
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)
static const char * dNdmtName(UInt_t pdg)
static TObject * CreateOutput()
virtual void Clear(Option_t *option="")
void Print(Option_t *option="") const
static TH1 * CreateRatio(UInt_t pdg, Color_t col, Style_t sty)
virtual Bool_t ProcessHeader()
virtual void SlaveBegin(TTree *t)
Base(Bool_t verbose=false, Int_t monitor=0)
static Bool_t Ratio(TList *l, TH1 *r, Int_t bin, UInt_t pdg)
virtual void SlaveBegin(TTree *)
static TH1 * Normalize(TObject *o, Int_t nEv)
Cent(const char *method="V0M", Bool_t verbose=true, Int_t monitor=0)
void CreateHistos(TCollection *output, TObject *(*callback)())
virtual void Print(Option_t *option="") const
Double_t GetCentrality() const
virtual TList * GetMonitorObjects()
virtual void ProcessParticles()
virtual void ProcessParticles()
TCollection * CentCollection(Int_t bin) const
void Print(Option_t *option="") const
virtual TList * GetMonitorObjects()
virtual Bool_t ProcessParticle(const TParticle *p)
void CreateDiagnostics(TCollection *output, TH1 *centHist)
static const char * dNdptName(UInt_t pdg)
V0AND(Bool_t verbose=false, Int_t monitor=0)
virtual Bool_t ProcessHeader()
Int_t CheckCentrality(Double_t cent, Double_t mult, Double_t b, Double_t nPart, Double_t nBin)
virtual void SetAttr(TH1 *h, const char *title, Color_t col, Style_t sty)
void SetTrigger(UInt_t mask)
virtual void FillOut(TList *out)
static TH1 * CreateMass()
virtual void Clear(Option_t *option="")
FastAnalysis * Make(const TString &subtype, Int_t monitor, Bool_t verbose, TMap &uopt)