31 #include "TParticle.h" 32 #include "AliVParticle.h" 33 #include "AliMCParticle.h" 34 #include "AliESDEvent.h" 36 #include "AliESDcascade.h" 37 #include "AliESDMuonTrack.h" 38 #include "AliESDCaloCluster.h" 40 #include "AliMCEvent.h" 42 #include "AliGenEventHeader.h" 44 #include "AliESDVZERO.h" 73 DefineInput(0, TChain::Class());
75 DefineOutput(1, TList::Class());
101 AliInfo(
"Constructor AliAnaFwdDetsQA");
102 DefineInput(0, TChain::Class());
104 DefineOutput(1, TList::Class());
109 const char* xLabel,
const char* yLabel)
113 TH1F* result =
new TH1F(name, title, nBins, xMin, xMax);
114 result->SetOption(
"E");
115 if (xLabel) result->GetXaxis()->SetTitle(xLabel);
116 if (yLabel) result->GetYaxis()->SetTitle(yLabel);
117 result->SetMarkerStyle(kFullCircle);
125 Int_t nBins = hGen->GetNbinsX();
126 TH1F* hEff = (TH1F*) hGen->Clone(
"hEff");
128 hEff->SetStats(kFALSE);
129 hEff->SetMinimum(0.);
130 hEff->SetMaximum(110.);
131 hEff->GetYaxis()->SetTitle(
"#epsilon [%]");
133 for (
Int_t iBin = 0; iBin <= nBins; iBin++) {
134 Double_t nGenEff = hGen->GetBinContent(iBin);
135 Double_t nRecEff = hRec->GetBinContent(iBin);
138 hEff->SetBinContent(iBin, 100. * eff);
139 Double_t error = sqrt(eff*(1.-eff) / nGenEff);
140 if (error < 1e-12) error = 0.0001;
141 hEff->SetBinError(iBin, 100. * error);
144 hEff->SetBinContent(iBin, -100.);
145 hEff->SetBinError(iBin, 0);
156 static TF1* fitFunc =
new TF1(
"fitFunc",
"gaus");
157 fitFunc->SetLineWidth(2);
158 fitFunc->SetFillStyle(0);
161 if (histo->Integral() > 50) {
162 Float_t mean = histo->GetMean();
164 fitFunc->SetRange(mean - maxFitRange*rms, mean + maxFitRange*rms);
165 fitFunc->SetParameters(mean, rms);
166 histo->Fit(fitFunc,
"QRI0");
167 histo->GetFunction(
"fitFunc")->ResetBit(1<<9);
168 res = TMath::Abs(fitFunc->GetParameter(2));
169 resError = TMath::Abs(fitFunc->GetParError(2));
179 AliInfo(
"AliAnaFwdDetsQA::UserCreateOutputObjects");
182 fT0vtxRec =
CreateHisto(
"hT0vtxRec",
"Z vertex reconstructed with T0", 100, -25, 25,
"Z_{vtx} [cm]",
"");
183 fT0time =
CreateHisto(
"hT0time",
"Time0 reconstruction with T0", 5000, 10000, 20000,
"t_{0} [ps]",
"");
184 fT0time2 =
CreateHisto(
"hT0time2",
"Time0 reconstruction with T0 (mult > 10)", 5000, 10000, 20000,
"t_{0} [ps]",
"");
185 fT0mult =
CreateHisto(
"hT0mult",
"Total reconstructed multiplicity in T0", 100, -0.5, 99.5,
"Multiplicity",
"");
186 fT0vtxRes =
CreateHisto(
"hT0vtxRes",
"T0 Z vertex resolution", 100, -25, 25,
"Delta(Z_{vtx}) [cm]",
"");
187 fT0ampl =
CreateHisto(
"hT0ampl",
"T0 multiplicity in single channel (all T0 channels)",400,-0.5,99.5);
189 fT0vtxRecGen =
new TH2F(
"hT0vtxRecGen",
"T0 reconstructed vs generated Z vertex", 100, -25, 25, 100, -25, 25);
190 fT0vtxRecGen->GetXaxis()->SetTitle(
"Generated Z vertex");
191 fT0vtxRecGen->GetYaxis()->SetTitle(
"Reconstructed Z vertex");
199 fV0ampl =
CreateHisto(
"hV0ampl",
"V0 multiplicity in single channel (all V0 channels)",400,-0.5,99.5);
201 fV0multAcorr =
new TH2F(
"hV0multAcorr",
"Reconstructed vs generated (primaries only) multiplicity (V0A)",100,0.,500.,100,0.,1000.);
202 fV0multAcorr->GetXaxis()->SetTitle(
"# of primaries in V0A acceptance");
203 fV0multAcorr->GetYaxis()->SetTitle(
"Reconstructed mutiplicity in V0A");
204 fV0multCcorr =
new TH2F(
"hV0multCcorr",
"Reconstructed vs generated (primaries only) multiplicity (V0C)",100,0.,500.,100,0.,1000.);
205 fV0multCcorr->GetXaxis()->SetTitle(
"# of primaries in V0C acceptance");
206 fV0multCcorr->GetYaxis()->SetTitle(
"Reconstructed mutiplicity in V0C");
208 fV0Acorr =
new TH2F(
"hV0Acorr",
"Number of fired PMTs vs generated (primaries only) multiplicity (V0A)",100,0.,500.,65,-0.5,64.5);
209 fV0Acorr->GetXaxis()->SetTitle(
"# of primaries in V0A acceptance");
210 fV0Acorr->GetYaxis()->SetTitle(
"Number of fired PMTs in V0A");
211 fV0Ccorr =
new TH2F(
"hV0Ccorr",
"Number of fired PMTs vs generated (primaries only) multiplicity (V0C)",100,0.,500.,65,-0.5,64.5);
212 fV0Ccorr->GetXaxis()->SetTitle(
"# of primaries in V0C acceptance");
213 fV0Ccorr->GetYaxis()->SetTitle(
"Number of fired PMTs in V0C");
237 AliMCEvent* mcEvent = MCEvent();
239 Printf(
"ERROR: Could not retrieve MC event");
245 mcEvent->GenEventHeader()->PrimaryVertex(mcvtx);
247 AliStack *
stack = mcEvent->Stack();
249 Printf(
"ERROR: Could not retrieve MC stack");
255 for (
Int_t iTracks = 0; iTracks < mcEvent->GetNumberOfTracks(); iTracks++) {
256 if (!stack->IsPhysicalPrimary(iTracks))
continue;
257 AliMCParticle* track = (AliMCParticle*)mcEvent->GetTrack(iTracks);
258 TParticle* particle = track->Particle();
259 if (!particle)
continue;
260 if (track->Charge() == 0)
continue;
262 if (eta > 2.8 && eta < 5.1) {
265 if (eta > -3.7 && eta < -1.7) {
271 AliVEvent*
event = InputEvent();
273 Printf(
"ERROR: Could not retrieve event");
279 Printf(
"ERROR: Could not retrieve esd");
282 const AliESDTZERO* esdT0 = esd->GetESDTZERO();
283 Double_t t0zvtx = esdT0->GetT0zVertex();
293 for(
Int_t i = 0; i < 24; i++) {
294 t0mult += esdT0->GetT0amplitude()[i];
295 fT0ampl->Fill(esdT0->GetT0amplitude()[i]);
302 AliESDVZERO* esdV0 = esd->GetVZEROData();
303 fV0a->Fill(esdV0->GetNbPMV0A());
304 fV0c->Fill(esdV0->GetNbPMV0C());
305 fV0multA->Fill(esdV0->GetMTotV0A());
306 fV0multC->Fill(esdV0->GetMTotV0C());
313 for(
Int_t i = 0; i < 64; i++) {
314 fV0ampl->Fill(esdV0->GetMultiplicity(i));
326 Printf(
"ERROR: fListOfHistos not available");
331 Info(
"AliAnaFwdDetsQA",
"Successfully finished");
TH1F * CreateHisto(const char *name, const char *title, Int_t nBins, Double_t xMin, Double_t xMax, const char *xLabel=NULL, const char *yLabel=NULL)
TH1F * CreateEffHisto(const TH1F *hGen, const TH1F *hRec)
virtual void UserExec(Option_t *option)
virtual void UserCreateOutputObjects()
virtual void Terminate(Option_t *)
Bool_t FitHisto(TH1 *histo, Double_t &res, Double_t &resError)