8 # include <TParticle.h> 9 # include <TObjArray.h> 11 # include <TGraphErrors.h> 12 # include <TMultiGraph.h> 47 TH1D* h =
new TH1D(
"dNdy",
"Charged particle-rapidity density",
48 Int_t(2*maxY/dY+.5), -maxY, +maxY);
50 h->SetXTitle(
"\\mathit{y}");
51 h->SetYTitle(
"\\hbox{d}N_{\\hbox{ch}}/\\hbox{d}y");
52 h->SetMarkerColor(kRed+2);
53 h->SetMarkerStyle(20);
64 Info(
"SlaveBegin",
"Making dN/dy histogram");
66 fdNdy->SetMarkerColor(kBlack);
67 fdNdy->SetMarkerStyle(21);
68 fdNdy->SetTitle(GetName());
91 Warning(
"Terminate",
"No events selected");
97 Warning(
"Terminate",
"No dN/deta histogram found");
100 Printf(
"A total of %ld events",
fOK);
101 TH1* copy =
static_cast<TH1*
>(fdNdy->Clone(
"before"));
104 fdNdy->Scale(1. /
fOK,
"width");
116 m1->SetUniqueID(0x8);
140 :
Base(verbose, monitor)
170 :
Base(verbose,monitor)
195 :
Base(verbose,monitor)
223 :
Base(verbose,monitor)
253 :
Base(verbose,monitor),
275 fdNdy->SetName(
"cache");
276 fdNdy->SetTitle(
"Cache");
310 return fCentBin >= 0;
323 if (fCentBin < 0)
return;
336 Printf(
"Centrality %6.2f-%6.2f (bin %4d) " 337 "Nch=%8.1f/%4.2f=%8.1f out=%s (%d)",
338 fHelper.
fCentAxis->GetBinLowEdge(fCentBin),
339 fHelper.
fCentAxis->GetBinUpEdge(fCentBin),
343 Int_t(out->GetBinContent(0)));
347 fdNdy->SetBinContent(0,0);
352 out->SetBinContent(0, out->GetBinContent(0)+1);
365 Warning(
"Terminate",
"No events selected");
374 sigma->SetTitle(
"\\sigma");
375 sigma->SetDirectory(0);
376 sigma->SetMarkerColor(kRed+2);
377 sigma->SetMarkerStyle(20);
378 sigma->SetLineColor(kRed+2);
382 gsigma->SetName(
"gsigma");
383 gsigma->SetTitle(
"\\sigma");
384 gsigma->SetMarkerColor(kRed+2);
385 gsigma->SetMarkerStyle(20);
386 gsigma->SetLineColor(kRed+2);
387 fOutput->Add(gsigma);
390 asigma->SetName(
"asigma");
391 asigma->SetTitle(
"\\sigma");
392 asigma->SetMarkerColor(kGreen+2);
393 asigma->SetMarkerStyle(22);
394 asigma->SetLineColor(kGreen+2);
395 fOutput->Add(asigma);
398 grms->SetName(
"grms");
399 grms->SetTitle(
"RMS");
400 grms->SetMarkerColor(kBlue+2);
401 grms->SetMarkerStyle(21);
402 grms->SetLineColor(kBlue+2);
406 static_cast<TProfile*
>(fOutput->FindObject(
"centNPartMean"));
408 Warning(
"Terminate",
"Output \"centNpartMean\" not found");
412 for (
Int_t i = 1; i <= sigma->GetNbinsX(); i++) {
418 TF1* func = dndy->GetFunction(
"f");
420 Warning(
"Terminate",
"Function not found for bin %d", i);
423 TF1* afun = dndy->GetFunction(
"g");
425 Warning(
"Terminate",
"Function not found for bin %d", i);
428 Double_t sig = func->GetParameter(2);
429 Double_t esig = func->GetParError (2);
430 Double_t asig = afun->GetParameter(2);
431 Double_t easig = afun->GetParError (2);
432 Double_t nP = nPart->GetBinContent(i);
433 Double_t eP = nPart->GetBinError (i);
435 Double_t erms = dndy->GetRMSError();
436 Printf(
"%2d: %s %6.2f +/- %6.2f -> " 437 "%4.2f +/- %4.2f [%4.2f +/- %4.2f] (%4.2f +/- %4.2f)",
438 i, dndy->GetName(), nP, eP, sig, esig, rms, erms);
439 sigma->SetBinContent (i, sig);
440 sigma->SetBinError (i, esig);
441 gsigma->SetPoint (j, nP, sig);
442 gsigma->SetPointError(j, eP, esig);
443 asigma->SetPoint (j, nP, asig);
444 asigma->SetPointError(j, eP, easig);
445 grms ->SetPoint (j, nP, rms);
446 grms ->SetPointError(j, eP, erms);
449 TMultiGraph* widths =
new TMultiGraph(
"widths",
"Widths");
453 fOutput->Add(widths);
454 gsigma->SaveAs(
"sigma.C");
455 asigma->SaveAs(
"asigma.C");
456 grms ->SaveAs(
"rms.C");
460 if (!o->IsA()->InheritsFrom(TH1::Class()))
return 0;
461 TH1* h =
static_cast<TH1*
>(o);
462 Int_t m = h->GetBinContent(0);
464 ::Warning(
"Normalize",
"Different event count here:%d helper:%d",m,n);
465 h->SetBinContent(0,0);
466 h->Scale(1. / n,
"width");
467 TF1* f =
new TF1(
"f",
"gausn", -5, 5);
468 f->SetParameters(1,0,4);
469 f->FixParameter(1,0);
471 TF1* g =
new TF1(
"g",
"gausn(0)*pol1(3)", -5, 5);
472 g->SetParameters(1,0,4,1,1);
473 g->FixParameter(0,1);
474 g->FixParameter(1,0);
475 g->SetParLimits(1,1,10);
491 m3->SetUniqueID(0x8);
523 Double_t bins[]={ 0, 3, 6, 9, 14, 19, 24, 29, 39, 49, 59, 69, 79, 89, 99};
524 fHelper.SetCentAxis(14, bins);
556 if (t.EqualTo(
"INEL"))
return new dNdy::INEL(verbose,monitor);
557 else if (t.EqualTo(
"NSD"))
return new dNdy::NSD(verbose,monitor);
558 else if (t.EqualTo(
"INELGt0"))
return new dNdy::INELGt0(verbose,monitor);
559 else if (t.EqualTo(
"V0AND"))
return new dNdy::V0AND(verbose,monitor);
560 else if (t.BeginsWith(
"MULT") || t.BeginsWith(
"CENT")) {
562 if (!(w.BeginsWith(
"RefMult") ||
563 w.BeginsWith(
"ZNA") ||
564 w.BeginsWith(
"ZNC") ||
565 w.BeginsWith(
"ZPA") ||
566 w.BeginsWith(
"ZPC") ||
567 w.BeginsWith(
"V0M") ||
568 w.BeginsWith(
"V0A") ||
569 w.BeginsWith(
"V0C") ||
572 Printf(
"Warning: dNdyMaker::Make: Unknown estimator: %s",
576 if (t.BeginsWith(
"MULT"))
581 Printf(
"Error: dNdyMaker::Run: Invalid spec: %s", t.Data());
590 Printf(
" INEL - inelastic");
591 Printf(
" INELGt0 - inelastic with at least 1 particle in |eta|<1");
592 Printf(
" NSD - Non-single diffractive");
593 Printf(
" V0AND - Visible X-section");
594 Printf(
" CENT<est> - Centrality classes. <est> is one of ");
595 Printf(
" ZNA - ZNA signal");
596 Printf(
" ZNC - ZNC signal");
597 Printf(
" ZPA - ZPA signal");
598 Printf(
" ZPC - ZPC signal");
599 Printf(
" V0M - V0-A + -C");
600 Printf(
" V0A - V0-A");
601 Printf(
" V0C - V0-C");
606 const char*
Script()
const {
return __FILE__; }
614 #pragma link C++ nestedclasses; 615 #pragma link C++ namespace dNdy;
TObject * GetOutputObject(const char *name, TClass *cls)
Bool_t CheckTrigger() const
virtual void Clear(Option_t *option="")
FastShortHeader * fHeader
virtual Bool_t ProcessHeader()
INELGt0(Bool_t verbose=false, Int_t monitor=0)
virtual Bool_t SetupEstimator()
Bool_t Finalize(TCollection *output, Long_t minEvents, TH1 *(*callback)(TObject *, Int_t))
TH1 * CentHist(Int_t bin) const
virtual Bool_t ProcessHeader()
virtual TList * GetMonitorObjects()
This script defines classes for looping over the data produced by FastSim.C.
virtual Bool_t SetupEstimator()
virtual void ProcessParticles()
Base(Bool_t verbose=false, Int_t monitor=0)
virtual Bool_t ProcessHeader()
virtual void SlaveBegin(TTree *)
virtual void SlaveBegin(TTree *t)
static TH1D * CreatedNdy()
void CreateHistos(TCollection *output, TObject *(*callback)())
Double_t GetCentrality() const
virtual void ProcessParticles()
FastAnalysis * Make(const TString &subtype, Int_t monitor, Bool_t verbose, TMap &uopt)
const char * Script() const
Cent(const char *method="V0M", Bool_t verbose=true, Int_t monitor=0)
virtual TList * GetMonitorObjects()
void CreateDiagnostics(TCollection *output, TH1 *centHist)
static TObject * CreateOutput()
Mult(const char *method="RefMult00d80", Bool_t verbose=false, Int_t monitor=0)
static TH1 * Normalize(TObject *o, Int_t n)
virtual Bool_t ProcessHeader()
Int_t CheckCentrality(Double_t cent, Double_t mult, Double_t b, Double_t nPart, Double_t nBin)
INEL(Bool_t verbose=false, Int_t monitor=0)
void SetTrigger(UInt_t mask)
virtual Bool_t ProcessParticle(const TParticle *p)
V0AND(Bool_t verbose=false, Int_t monitor=0)
virtual void Fill(Double_t y)
NSD(Bool_t verbose=false, Int_t monitor=0)
virtual TH1 * CreateSingle()
virtual void Clear(Option_t *option="")
virtual Bool_t ProcessHeader()