8 #include "TProfile2D.h"
10 #include "TGraphErrors.h"
12 #include <TClonesArray.h>
13 #include <TObjArray.h>
16 // #include "AliPID.h"
17 #include "AliESDEvent.h"
18 #include "AliESDInputHandler.h"
19 #include "AliTrackReference.h"
21 #include "AliAnalysisTask.h"
22 // #include "AliAnalysisManager.h"
24 #include "AliTRDtrackerV1.h"
25 #include "AliTRDtrackV1.h"
26 #include "AliTRDcluster.h"
27 #include "AliTRDReconstructor.h"
28 #include "AliCDBManager.h"
29 // #include "../Cal/AliTRDCalPID.h"
30 #include "AliTRDpidUtil.h"
33 #include "AliTRDpidChecker.h"
34 #include "AliTRDtrackInfo/AliTRDtrackInfo.h"
36 // calculate pion efficiency at 90% electron efficiency for 11 momentum bins
37 // this task should be used with simulated data only
39 ClassImp(AliTRDpidChecker)
41 //________________________________________________________________________
42 AliTRDpidChecker::AliTRDpidChecker()
43 :AliTRDrecoTask("PID", "PID Checker")
47 // Default constructor
50 fReconstructor = new AliTRDReconstructor();
51 fReconstructor->SetRecoParam(AliTRDrecoParam::GetLowFluxParam());
55 //________________________________________________________________________
56 AliTRDpidChecker::~AliTRDpidChecker()
58 if(fReconstructor) delete fReconstructor;
62 //________________________________________________________________________
63 void AliTRDpidChecker::CreateOutputObjects()
68 OpenFile(0, "RECREATE");
69 Int_t xBins = AliPID::kSPECIES*AliTRDCalPID::kNMom;
70 fContainer = new TObjArray();
71 fContainer -> Expand(kGraphNN + 1);
73 const Float_t epsilon = 1./(2*(AliTRDpidUtil::kBins-1)); // get nice histos with bin center at 0 and 1
75 // histos of the electron probability of all 5 particle species and 11 momenta for the 2-dim LQ method
77 new TH2F("PID_LQ", "",
78 xBins, -0.5, xBins - 0.5,
79 AliTRDpidUtil::kBins, 0.-epsilon, 1.+epsilon)
83 // histos of the electron probability of all 5 particle species and 11 momenta for the neural network method
85 new TH2F("PID_NN", "",
86 xBins, -0.5, xBins - 0.5,
87 AliTRDpidUtil::kBins, 0.-epsilon, 1.+epsilon)
90 // histos of the dE/dx distribution for all 5 particle species and 11 momenta
93 xBins, -0.5, xBins - 0.5,
97 // histos of the dE/dx distribution for all 5 particle species and 11 momenta
99 new TH2F("dEdxSlice", "",
100 xBins*AliTRDReconstructor::kLQslices, -0.5, xBins*AliTRDReconstructor::kLQslices - 0.5,
104 // histos of the pulse height distribution for all 5 particle species and 11 momenta
106 new TProfile2D("PH", "",
107 xBins, -0.5, xBins - 0.5,
108 AliTRDtrackerV1::GetNTimeBins(), -0.5, AliTRDtrackerV1::GetNTimeBins() - 0.5)
111 // histos of the number of clusters distribution for all 5 particle species and 11 momenta
113 new TH2F("NClus", "",
114 xBins, -0.5, xBins - 0.5,
115 AliTRDtrackerV1::GetNTimeBins(), -0.5, AliTRDtrackerV1::GetNTimeBins() - 0.5)
119 // momentum distributions - absolute and in momentum bins
120 fContainer->AddAt(new TH1F("hMom", "momentum distribution", 100, 0., 12.),kMomentum);
121 fContainer->AddAt(new TH1F("hMomBin", "momentum distribution in momentum bins", AliTRDCalPID::kNMom, 0.5, 11.5),kMomentumBin);
124 // TGraph of the pion efficiencies
126 TGraphErrors *gEffisLQ = 0x0;
127 TGraphErrors *gEffisNN = 0x0;
129 fContainer->AddAt(gEffisLQ = new TGraphErrors(), kGraphLQ);
130 gEffisLQ->SetLineColor(kBlue);
131 gEffisLQ->SetMarkerColor(kBlue);
132 gEffisLQ->SetMarkerStyle(29);
134 fContainer -> AddAt(gEffisNN = new TGraphErrors(),kGraphNN);
135 gEffisNN->SetLineColor(kRed);
136 gEffisNN->SetMarkerColor(kRed);
137 gEffisNN->SetMarkerStyle(29);
139 gEffisLQ -> SetNameTitle("gEffisLQErr", "Efficiencies and Errors of the 2-dim LQ method");
140 gEffisNN -> SetNameTitle("gEffisNNErr", "Efficiencies and Errors of the NN method");
144 //________________________________________________________________________
145 void AliTRDpidChecker::Exec(Option_t *)
148 // Called for each event
151 // if(!AliTracker::GetFieldMap()){
152 // AliMagFMaps* field = new AliMagFMaps("Maps","Maps", 2, 1., 10., AliMagFMaps::k5kG);
153 // AliTracker::SetFieldMap(field, kTRUE);
163 hPIDLQ = (TH2F*)fContainer->At(kLQlikelihood);
164 hPIDNN = (TH2F*)fContainer->At(kNNlikelihood);
165 hdEdx = (TH2F*)fContainer->At(kdEdx);
166 hdEdxSlice = (TH2F*)fContainer->At(kdEdxSlice);
167 hPH = (TProfile2D*)fContainer->At(kPH);
168 hNClus = (TH2F*)fContainer->At(kNClus);
170 TH1F *hMom = (TH1F*)fContainer->At(kMomentum);
171 TH1F *hMomBin = (TH1F*)fContainer->At(kMomentumBin);
173 Int_t labelsacc[10000];
174 memset(labelsacc, 0, sizeof(Int_t) * 10000);
181 AliTRDtrackInfo *track = 0x0;
182 AliTRDtrackV1 *TRDtrack = 0x0;
183 AliTrackReference *ref = 0x0;
184 AliExternalTrackParam *esd = 0x0;
186 AliTRDseedV1 *TRDtracklet[AliTRDgeometry::kNlayer];
187 for(Int_t iChamb = 0; iChamb < AliTRDgeometry::kNlayer; iChamb++)
188 TRDtracklet[iChamb] = 0x0;
190 AliTRDcluster *TRDcluster = 0x0;
192 AliTRDpidUtil *util = new AliTRDpidUtil();
193 for(Int_t itrk=0; itrk<fTracks->GetEntriesFast(); itrk++){
194 track = (AliTRDtrackInfo*)fTracks->UncheckedAt(itrk);
195 if(!track->HasESDtrack()) continue;
196 status = track->GetStatus();
197 if(!(status&AliESDtrack::kTPCout)) continue;
199 if(!(TRDtrack = track->GetTrack())) continue;
200 //&&(track->GetNumberOfClustersRefit()
202 // use only tracks that hit 6 chambers
203 if(!(TRDtrack->GetNumberOfTracklets() == AliTRDgeometry::kNlayer)) continue;
205 ref = track->GetTrackRef(0);
206 esd = track->GetOuterParam();
207 mom = ref ? ref->P(): esd->P();
209 labelsacc[nTRD] = track->GetLabel();
213 // set the 11 momentum bins
215 iMomBin = util -> GetMomentumBin(mom);
216 if(fDebugLevel>=4) Printf("MomBin[%d] MomTot[%f]", iMomBin, mom);
219 // fill momentum histo to have the momentum distribution
221 hMomBin -> Fill(iMomBin);
224 // set the reconstructor
225 TRDtrack -> SetReconstructor(fReconstructor);
228 // if no monte carlo data available -> use TRDpid
230 fReconstructor -> SetOption("nn");
231 TRDtrack -> CookPID();
232 if(TRDtrack -> GetPID(0) > TRDtrack -> GetPID(1) + TRDtrack -> GetPID(2) + TRDtrack -> GetPID(3) + TRDtrack -> GetPID(4)){
233 track -> SetPDG(kElectron);
235 else if(TRDtrack -> GetPID(4) > TRDtrack -> GetPID(2) && TRDtrack -> GetPID(4) > TRDtrack -> GetPID(3) && TRDtrack -> GetPID(4) > TRDtrack -> GetPID(1)){
236 track -> SetPDG(kProton);
238 else if(TRDtrack -> GetPID(3) > TRDtrack -> GetPID(1) && TRDtrack -> GetPID(3) > TRDtrack -> GetPID(2)){
239 track -> SetPDG(kKPlus);
241 else if(TRDtrack -> GetPID(1) > TRDtrack -> GetPID(2)){
242 track -> SetPDG(kMuonPlus);
245 track -> SetPDG(kPiPlus);
250 // calculate the probabilities for electron probability using 2-dim LQ, the deposited charge per chamber and the pulse height spectra and fill histograms
251 fReconstructor -> SetOption("!nn");
252 TRDtrack -> CookPID();
254 if(fDebugLevel>=4) Printf("PIDmethod[%d] Slices[%d] PDG[%d] LQLike[%f]", fReconstructor->GetPIDMethod(), fReconstructor->GetNdEdxSlices(), track->GetPDG(), TRDtrack -> GetPID(0));
257 // Bool_t bChange = kFALSE;
259 Float_t SumdEdx[AliTRDgeometry::kNlayer];
260 Int_t iNClus[AliTRDgeometry::kNlayer];
261 Float_t dEdxSlice[AliTRDgeometry::kNlayer][AliTRDReconstructor::kLQslices];
263 for(Int_t iChamb = 0; iChamb < AliTRDgeometry::kNlayer; iChamb++){
264 TRDtracklet[iChamb] = TRDtrack -> GetTracklet(iChamb);
266 // if(!(TRDtracklet[iChamb] -> GetNChange() == 0))
269 SumdEdx[iChamb] = 0.;
271 iNClus[iChamb] = TRDtracklet[iChamb] -> GetN();
272 // Printf("NClus[%d]", iNClus[iChamb]);
273 fdEdx = TRDtracklet[iChamb] -> GetdEdx();
274 SumdEdx[iChamb] += fdEdx[0] + fdEdx[1] + fdEdx[2];
275 for(Int_t iSlice = 0; iSlice < AliTRDReconstructor::kLQslices; iSlice++){
276 dEdxSlice[iChamb][iSlice] = fdEdx[iSlice];
280 // if(bChange == kTRUE)
283 switch(track->GetPDG()){
286 hPIDLQ -> Fill(AliPID::kElectron * AliTRDCalPID::kNMom + iMomBin, TRDtrack -> GetPID(AliPID::kElectron));
287 for(Int_t iChamb = 0; iChamb < AliTRDgeometry::kNlayer; iChamb++){
288 hdEdx -> Fill(AliPID::kElectron * AliTRDCalPID::kNMom + iMomBin, SumdEdx[iChamb]);
289 for(Int_t iSlice = 0; iSlice < AliTRDReconstructor::kLQslices; iSlice++){
290 hdEdxSlice -> Fill(AliPID::kElectron * AliTRDCalPID::kNMom * AliTRDReconstructor::kLQslices + iMomBin * AliTRDReconstructor::kLQslices + iSlice,
291 dEdxSlice[iChamb][iSlice]);
293 hNClus -> Fill(AliPID::kElectron * AliTRDCalPID::kNMom + iMomBin, iNClus[iChamb]);
294 for(Int_t iClus = 0; iClus < AliTRDtrackerV1::GetNTimeBins(); iClus++){
295 if(!(TRDcluster = (AliTRDcluster*)TRDtracklet[iChamb] -> GetClusters(iClus)))
297 hPH -> Fill(AliPID::kElectron * AliTRDCalPID::kNMom + iMomBin, TRDcluster -> GetLocalTimeBin(), TRDtracklet[iChamb] -> GetdQdl(iClus));
303 hPIDLQ -> Fill(AliPID::kMuon * AliTRDCalPID::kNMom + iMomBin, TRDtrack -> GetPID(AliPID::kElectron));
304 for(Int_t iChamb = 0; iChamb < AliTRDgeometry::kNlayer; iChamb++){
305 hdEdx -> Fill(AliPID::kMuon * AliTRDCalPID::kNMom + iMomBin, SumdEdx[iChamb]);
306 for(Int_t iSlice = 0; iSlice < AliTRDReconstructor::kLQslices; iSlice++){
307 hdEdxSlice -> Fill(AliPID::kMuon * AliTRDCalPID::kNMom * AliTRDReconstructor::kLQslices + iMomBin * AliTRDReconstructor::kLQslices + iSlice,
308 dEdxSlice[iChamb][iSlice]);
310 hNClus -> Fill(AliPID::kMuon * AliTRDCalPID::kNMom + iMomBin, iNClus[iChamb]);
311 for(Int_t iClus = 0; iClus < AliTRDtrackerV1::GetNTimeBins(); iClus++){
312 if(!(TRDcluster = (AliTRDcluster*)TRDtracklet[iChamb] -> GetClusters(iClus)))
314 hPH -> Fill(AliPID::kMuon * AliTRDCalPID::kNMom + iMomBin, TRDcluster -> GetLocalTimeBin(), TRDtracklet[iChamb] -> GetdQdl(iClus));
320 hPIDLQ -> Fill(AliPID::kPion * AliTRDCalPID::kNMom + iMomBin, TRDtrack -> GetPID(AliPID::kElectron));
321 for(Int_t iChamb = 0; iChamb < AliTRDgeometry::kNlayer; iChamb++){
322 hdEdx -> Fill(AliPID::kPion * AliTRDCalPID::kNMom + iMomBin, SumdEdx[iChamb]);
323 for(Int_t iSlice = 0; iSlice < AliTRDReconstructor::kLQslices; iSlice++){
324 hdEdxSlice -> Fill(AliPID::kPion * AliTRDCalPID::kNMom * AliTRDReconstructor::kLQslices + iMomBin * AliTRDReconstructor::kLQslices + iSlice,
325 dEdxSlice[iChamb][iSlice]);
327 hNClus -> Fill(AliPID::kPion * AliTRDCalPID::kNMom + iMomBin, iNClus[iChamb]);
328 for(Int_t iClus = 0; iClus < AliTRDtrackerV1::GetNTimeBins(); iClus++){
329 if(!(TRDcluster = (AliTRDcluster*)TRDtracklet[iChamb] -> GetClusters(iClus)))
331 hPH -> Fill(AliPID::kPion * AliTRDCalPID::kNMom + iMomBin, TRDcluster -> GetLocalTimeBin(), TRDtracklet[iChamb] -> GetdQdl(iClus));
337 hPIDLQ -> Fill(AliPID::kKaon * AliTRDCalPID::kNMom + iMomBin, TRDtrack -> GetPID(AliPID::kElectron));
338 for(Int_t iChamb = 0; iChamb < AliTRDgeometry::kNlayer; iChamb++){
339 hdEdx -> Fill(AliPID::kKaon * AliTRDCalPID::kNMom + iMomBin, SumdEdx[iChamb]);
340 for(Int_t iSlice = 0; iSlice < AliTRDReconstructor::kLQslices; iSlice++){
341 hdEdxSlice -> Fill(AliPID::kKaon * AliTRDCalPID::kNMom * AliTRDReconstructor::kLQslices + iMomBin * AliTRDReconstructor::kLQslices + iSlice,
342 dEdxSlice[iChamb][iSlice]);
344 hNClus -> Fill(AliPID::kKaon * AliTRDCalPID::kNMom + iMomBin, iNClus[iChamb]);
345 for(Int_t iClus = 0; iClus < AliTRDtrackerV1::GetNTimeBins(); iClus++){
346 if(!(TRDcluster = (AliTRDcluster*)TRDtracklet[iChamb] -> GetClusters(iClus)))
348 hPH -> Fill(AliPID::kKaon * AliTRDCalPID::kNMom + iMomBin, TRDcluster -> GetLocalTimeBin(), TRDtracklet[iChamb] -> GetdQdl(iClus));
354 hPIDLQ -> Fill(AliPID::kProton * AliTRDCalPID::kNMom + iMomBin, TRDtrack -> GetPID(AliPID::kElectron));
355 for(Int_t iChamb = 0; iChamb < AliTRDgeometry::kNlayer; iChamb++){
356 hdEdx -> Fill(AliPID::kProton * AliTRDCalPID::kNMom + iMomBin, SumdEdx[iChamb]);
357 for(Int_t iSlice = 0; iSlice < AliTRDReconstructor::kLQslices; iSlice++){
358 hdEdxSlice -> Fill(AliPID::kProton * AliTRDCalPID::kNMom * AliTRDReconstructor::kLQslices + iMomBin * AliTRDReconstructor::kLQslices + iSlice,
359 dEdxSlice[iChamb][iSlice]);
361 hNClus -> Fill(AliPID::kProton * AliTRDCalPID::kNMom + iMomBin, iNClus[iChamb]);
362 for(Int_t iClus = 0; iClus < AliTRDtrackerV1::GetNTimeBins(); iClus++){
363 if(!(TRDcluster = (AliTRDcluster*)TRDtracklet[iChamb] -> GetClusters(iClus)))
365 hPH -> Fill(AliPID::kProton * AliTRDCalPID::kNMom + iMomBin, TRDcluster -> GetLocalTimeBin(), TRDtracklet[iChamb] -> GetdQdl(iClus));
372 // calculate the probabilities and fill histograms for electrons using NN
373 fReconstructor -> SetOption("nn");
377 if(fDebugLevel>=4) Printf("PIDmethod[%d] Slices[%d] PDG[%d] NNLike[%f]", fReconstructor->GetPIDMethod(), fReconstructor->GetNdEdxSlices(), track->GetPDG(), TRDtrack -> GetPID(0));
380 switch(track->GetPDG()){
383 hPIDNN -> Fill(AliPID::kElectron * AliTRDCalPID::kNMom + iMomBin, TRDtrack -> GetPID(AliPID::kElectron));
387 hPIDNN -> Fill(AliPID::kMuon * AliTRDCalPID::kNMom + iMomBin, TRDtrack -> GetPID(AliPID::kElectron));
391 hPIDNN -> Fill(AliPID::kPion * AliTRDCalPID::kNMom + iMomBin, TRDtrack -> GetPID(AliPID::kElectron));
395 hPIDNN -> Fill(AliPID::kKaon * AliTRDCalPID::kNMom + iMomBin, TRDtrack -> GetPID(AliPID::kElectron));
399 hPIDNN -> Fill(AliPID::kProton * AliTRDCalPID::kNMom + iMomBin, TRDtrack -> GetPID(AliPID::kElectron));
406 PostData(0, fContainer);
410 //________________________________________________________
411 void AliTRDpidChecker::GetRefFigure(Int_t ifig)
413 Bool_t FIRST = kTRUE;
414 TGraphErrors *g = 0x0;
419 g = (TGraphErrors*)fContainer->At(kGraphStart);
421 g->GetHistogram()->GetXaxis()->SetTitle("p [GeV/c]");
422 g->GetHistogram()->GetXaxis()->SetRangeUser(.6, 10.5);
423 g->GetHistogram()->GetYaxis()->SetTitle("#epsilon_{#pi} [%]");
424 ((TGraphErrors*)fContainer->At(kGraphStart+1))->Draw("pl");
431 // save 2.0 GeV projection as reference
433 h2 = (TH2F*)(fContainer->At(kdEdx));
434 for(Int_t is = AliPID::kSPECIES-1; is>=0; is--){
435 Int_t bin = is*AliTRDCalPID::kNMom+4;
436 h1 = h2->ProjectionY("px", bin, bin);
437 if(!h1->GetEntries()) continue;
438 h1->Scale(1./h1->Integral());
439 h1->SetLineColor(AliTRDCalPID::GetPartColor(is));
440 h1->DrawClone(FIRST ? "c" : "samec");
449 // save 2.0 GeV projection as reference
451 h2 = (TH2F*)(fContainer->At(kPH));
452 for(Int_t is=0; is<AliPID::kSPECIES; is++){
453 Int_t bin = is*AliTRDCalPID::kNMom+4;
454 h1 = h2->ProjectionY("py", bin, bin);
455 if(!h1->GetEntries()) continue;
456 h1->SetMarkerStyle(24);
457 h1->SetMarkerColor(AliTRDCalPID::GetPartColor(is));
458 h1->SetLineColor(AliTRDCalPID::GetPartColor(is));
459 h1->DrawClone(FIRST ? "e2" : "same e2");
468 // save 2.0 GeV projection as reference
470 h2 = (TH2F*)(fContainer->At(kNClus));
471 for(Int_t is=0; is<AliPID::kSPECIES; is++){
472 Int_t bin = is*AliTRDCalPID::kNMom+4;
473 h1 = h2->ProjectionY("py", bin, bin);
474 if(!h1->GetEntries()) continue;
475 h1->SetMarkerStyle(24);
476 h1->SetMarkerColor(AliTRDCalPID::GetPartColor(is));
477 h1->SetLineColor(AliTRDCalPID::GetPartColor(is));
478 h1->DrawClone(FIRST ? "e2" : "same e2");
489 //________________________________________________________________________
490 Bool_t AliTRDpidChecker::PostProcess()
492 // Draw result to the screen
493 // Called once at the end of the query
496 Printf("ERROR: list not available");
499 // return kTRUE; // testing protection
502 // container for the pion efficiencies and the errors
503 Double_t PionEffiLQ[AliTRDCalPID::kNMom],
504 PionEffiErrorLQ[AliTRDCalPID::kNMom],
505 EleEffiLQ[AliTRDCalPID::kNMom],
506 ThresholdLQ[AliTRDCalPID::kNMom];
508 Double_t PionEffiNN[AliTRDCalPID::kNMom],
509 PionEffiErrorNN[AliTRDCalPID::kNMom],
510 EleEffiNN[AliTRDCalPID::kNMom],
511 ThresholdNN[AliTRDCalPID::kNMom];
515 TH1D *Histo1=0x0, *Histo2=0x0;
517 TH2F *hPIDLQ=0x0, *hPIDNN=0x0;
518 hPIDLQ = (TH2F*)fContainer->At(kLQlikelihood);
519 hPIDNN = (TH2F*)fContainer->At(kNNlikelihood);
521 // calculate the pion efficiencies and the errors for 90% electron efficiency (2-dim LQ)
522 for(Int_t iMom = 0; iMom < AliTRDCalPID::kNMom; iMom++){
524 AliTRDpidUtil *util = new AliTRDpidUtil();
525 mom = AliTRDCalPID::GetMomentum(iMom);
527 Histo1 = hPIDLQ -> ProjectionY("LQ_ele",AliTRDCalPID::kNMom*AliPID::kElectron+iMom+1,AliTRDCalPID::kNMom*AliPID::kElectron+iMom+1);
528 Histo2 = hPIDLQ -> ProjectionY("LQ_pio",AliTRDCalPID::kNMom*AliPID::kPion+iMom+1,AliTRDCalPID::kNMom*AliPID::kPion+iMom+1);
530 util -> CalculatePionEffi(Histo1, Histo2);
532 PionEffiLQ[iMom] = util -> GetPionEfficiency();
533 PionEffiErrorLQ[iMom] = util -> GetError();
534 EleEffiLQ[iMom] = util -> GetCalcElectronEfficiency();
535 ThresholdLQ[iMom] = util -> GetThreshold();
537 if(fDebugLevel>=1) Printf("Pion Efficiency for 2-dim LQ is : %f +/- %f\n\n", PionEffiLQ[iMom], PionEffiErrorLQ[iMom]);
543 // calculate the pion efficiencies and the errors for 90% electron efficiency (NN)
544 for(Int_t iMom = 0; iMom < AliTRDCalPID::kNMom; iMom++){
546 AliTRDpidUtil *util = new AliTRDpidUtil();
547 mom = AliTRDCalPID::GetMomentum(iMom);
549 Histo1 = hPIDNN -> ProjectionY("NN_ele",AliTRDCalPID::kNMom*AliPID::kElectron+iMom+1,AliTRDCalPID::kNMom*AliPID::kElectron+iMom+1);
550 Histo2 = hPIDNN -> ProjectionY("NN_pio",AliTRDCalPID::kNMom*AliPID::kPion+iMom+1,AliTRDCalPID::kNMom*AliPID::kPion+iMom+1);
552 util -> CalculatePionEffi(Histo1, Histo2);
554 PionEffiNN[iMom] = util -> GetPionEfficiency();
555 PionEffiErrorNN[iMom] = util -> GetError();
556 EleEffiNN[iMom] = util -> GetCalcElectronEfficiency();
557 ThresholdNN[iMom] = util -> GetThreshold();
559 if(fDebugLevel>=1) Printf("Pion Efficiency for NN is : %f +/- %f\n\n", PionEffiNN[iMom], PionEffiErrorNN[iMom]);
565 // create TGraph to plot the pion efficiencies
566 TGraphErrors *gEffisLQ=0x0, *gEffisNN=0x0;
567 gEffisLQ = (TGraphErrors*)fContainer->At(kGraphLQ);
568 gEffisNN = (TGraphErrors*)fContainer->At(kGraphNN);
571 for(Int_t iBin = 0; iBin < AliTRDCalPID::kNMom; iBin++){
573 Float_t momentum = AliTRDCalPID::GetMomentum(iBin);
574 gEffisLQ->SetPoint(iBin, momentum, PionEffiLQ[iBin]);
575 gEffisLQ->SetPointError(iBin, 0., PionEffiErrorLQ[iBin]);
577 gEffisNN->SetPoint(iBin, momentum, PionEffiNN[iBin]);
578 gEffisNN->SetPointError(iBin, 0., PionEffiErrorNN[iBin]);
582 fNRefFigures = 4/*1*/;
583 return kTRUE; // testing protection
587 //________________________________________________________________________
588 void AliTRDpidChecker::Terminate(Option_t *)
590 // Draw result to the screen
591 // Called once at the end of the query
593 fContainer = dynamic_cast<TObjArray*>(GetOutputData(0));
595 Printf("ERROR: list not available");