3 #include "AlidNdEtaTask.h"
14 #include <TParticle.h>
17 #include <TObjString.h>
22 #include <AliESDVertex.h>
23 #include <AliESDEvent.h>
25 #include <AliHeader.h>
26 #include <AliGenEventHeader.h>
27 #include <AliMultiplicity.h>
28 #include <AliAnalysisManager.h>
29 #include <AliMCEventHandler.h>
30 #include <AliMCEvent.h>
31 #include <AliESDInputHandler.h>
32 #include <AliESDHeader.h>
34 #include "AliESDtrackCuts.h"
35 #include "AliPWG0Helper.h"
36 #include "AliCorrection.h"
37 #include "AliCorrectionMatrix3D.h"
38 #include "dNdEta/dNdEtaAnalysis.h"
40 ClassImp(AlidNdEtaTask)
42 AlidNdEtaTask::AlidNdEtaTask(const char* opt) :
43 AliAnalysisTask("AlidNdEtaTask", ""),
47 fAnalysisMode(AliPWG0Helper::kTPC),
48 fTrigger(AliPWG0Helper::kMB1),
53 fOnlyPrimaries(kFALSE),
56 fdNdEtaAnalysisESD(0),
63 fdNdEtaAnalysisNSD(0),
65 fdNdEtaAnalysisTrVtx(0),
66 fdNdEtaAnalysisTracks(0),
78 // Constructor. Initialization of pointers
81 // Define input and output slots here
82 DefineInput(0, TChain::Class());
83 DefineOutput(0, TList::Class());
88 AliLog::SetClassDebugLevel("AlidNdEtaTask", AliLog::kWarning);
91 AlidNdEtaTask::~AlidNdEtaTask()
97 // histograms are in the output list and deleted when the output
98 // list is deleted by the TSelector dtor
106 Bool_t AlidNdEtaTask::Notify()
108 static Int_t count = 0;
110 Printf("Processing %d. file: %s", count, ((TTree*) GetInputData(0))->GetCurrentFile()->GetName());
114 //________________________________________________________________________
115 void AlidNdEtaTask::ConnectInputData(Option_t *)
120 Printf("AlidNdEtaTask::ConnectInputData called");
122 AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
125 Printf("ERROR: Could not get ESDInputHandler");
127 fESD = esdH->GetEvent();
129 // Enable only the needed branches
130 esdH->SetActiveBranches("AliESDHeader Vertex");
132 if (fAnalysisMode == AliPWG0Helper::kSPD)
133 esdH->SetActiveBranches("AliESDHeader Vertex AliMultiplicity");
135 if (fAnalysisMode == AliPWG0Helper::kTPC || fAnalysisMode == AliPWG0Helper::kTPCITS) {
136 esdH->SetActiveBranches("AliESDHeader Vertex Tracks");
140 // disable info messages of AliMCEvent (per event)
141 AliLog::SetClassDebugLevel("AliMCEvent", AliLog::kWarning - AliLog::kDebug + 1);
144 void AlidNdEtaTask::CreateOutputObjects()
146 // create result objects and add to output list
148 Printf("AlidNdEtaTask::CreateOutputObjects");
151 Printf("WARNING: Processing only primaries (MC information used). This is for systematical checks only.");
154 Printf("WARNING: Using MC kine information. This is for systematical checks only.");
157 Printf("WARNING: Replacing vertex by MC vertex. This is for systematical checks only.");
162 fdNdEtaAnalysisESD = new dNdEtaAnalysis("fdNdEtaAnalysisESD", "fdNdEtaAnalysisESD", fAnalysisMode);
163 fOutput->Add(fdNdEtaAnalysisESD);
165 fMult = new TH1F("fMult", "fMult;Ntracks;Count", 201, -0.5, 200.5);
168 fMultVtx = new TH1F("fMultVtx", "fMultVtx;Ntracks;Count", 201, -0.5, 200.5);
169 fOutput->Add(fMultVtx);
171 for (Int_t i=0; i<3; ++i)
173 fPartEta[i] = new TH1F(Form("dndeta_check_%d", i), Form("dndeta_check_%d", i), 60, -6, 6);
174 fPartEta[i]->Sumw2();
175 fOutput->Add(fPartEta[i]);
178 fEvents = new TH1F("dndeta_check_vertex", "dndeta_check_vertex", 800, -40, 40);
179 fOutput->Add(fEvents);
181 Float_t resMax = (fAnalysisMode == AliPWG0Helper::kSPD) ? 0.2 : 2;
182 fVertexResolution = new TH1F("dndeta_vertex_resolution_z", "dndeta_vertex_resolution_z", 1000, 0, resMax);
183 fOutput->Add(fVertexResolution);
185 fPhi = new TH1F("fPhi", "fPhi;#phi in rad.;count", 720, 0, 2 * TMath::Pi());
188 fEtaPhi = new TH2F("fEtaPhi", "fEtaPhi;#eta;#phi in rad.;count", 80, -4, 4, 18*5, 0, 2 * TMath::Pi());
189 fOutput->Add(fEtaPhi);
191 fTriggerVsTime = new TGraph; //TH1F("fTriggerVsTime", "fTriggerVsTime;trigger time;count", 100, 0, 100);
192 fTriggerVsTime->SetName("fTriggerVsTime");
193 fTriggerVsTime->GetXaxis()->SetTitle("trigger time");
194 fTriggerVsTime->GetYaxis()->SetTitle("count");
195 fOutput->Add(fTriggerVsTime);
197 fStats = new TH1F("fStats", "fStats", 2, 0.5, 2.5);
198 fStats->GetXaxis()->SetBinLabel(1, "vertexer 3d");
199 fStats->GetXaxis()->SetBinLabel(2, "vertexer z");
200 fOutput->Add(fStats);
202 if (fAnalysisMode == AliPWG0Helper::kSPD)
204 fDeltaPhi = new TH1F("fDeltaPhi", "fDeltaPhi;#Delta #phi;Entries", 500, -0.2, 0.2);
205 fOutput->Add(fDeltaPhi);
206 fFiredChips = new TH2F("fFiredChips", "fFiredChips;Chips L1 + L2;tracklets", 1201, -0.5, 1201, 50, -0.5, 49.5);
207 fOutput->Add(fFiredChips);
208 for (Int_t i=0; i<2; i++)
210 fZPhi[i] = new TH2F(Form("fZPhi_%d", i), Form("fZPhi Layer %d;z (cm);#phi (rad.)", i), 200, -20, 20, 180, 0, TMath::Pi() * 2);
211 fOutput->Add(fZPhi[i]);
215 if (fAnalysisMode == AliPWG0Helper::kTPC || fAnalysisMode == AliPWG0Helper::kTPCITS)
217 fRawPt = new TH1F("fRawPt", "raw pt;p_{T};Count", 2000, 0, 100);
218 fOutput->Add(fRawPt);
221 fVertex = new TH3F("vertex_check", "vertex_check", 100, -1, 1, 100, -1, 1, 100, -30, 30);
222 fOutput->Add(fVertex);
226 fdNdEtaAnalysis = new dNdEtaAnalysis("dndeta", "dndeta", fAnalysisMode);
227 fOutput->Add(fdNdEtaAnalysis);
229 fdNdEtaAnalysisND = new dNdEtaAnalysis("dndetaND", "dndetaND", fAnalysisMode);
230 fOutput->Add(fdNdEtaAnalysisND);
232 fdNdEtaAnalysisNSD = new dNdEtaAnalysis("dndetaNSD", "dndetaNSD", fAnalysisMode);
233 fOutput->Add(fdNdEtaAnalysisNSD);
235 fdNdEtaAnalysisTr = new dNdEtaAnalysis("dndetaTr", "dndetaTr", fAnalysisMode);
236 fOutput->Add(fdNdEtaAnalysisTr);
238 fdNdEtaAnalysisTrVtx = new dNdEtaAnalysis("dndetaTrVtx", "dndetaTrVtx", fAnalysisMode);
239 fOutput->Add(fdNdEtaAnalysisTrVtx);
241 fdNdEtaAnalysisTracks = new dNdEtaAnalysis("dndetaTracks", "dndetaTracks", fAnalysisMode);
242 fOutput->Add(fdNdEtaAnalysisTracks);
244 fPartPt = new TH1F("dndeta_check_pt", "dndeta_check_pt", 1000, 0, 10);
246 fOutput->Add(fPartPt);
251 fEsdTrackCuts->SetName("fEsdTrackCuts");
252 fOutput->Add(fEsdTrackCuts);
256 void AlidNdEtaTask::Exec(Option_t*)
260 // these variables are also used in the MC section below; however, if ESD is off they stay with their default values
261 Bool_t eventTriggered = kFALSE;
262 const AliESDVertex* vtxESD = 0;
264 // post the data already here
265 PostData(0, fOutput);
270 // check event type (should be PHYSICS = 7)
271 AliESDHeader* esdHeader = fESD->GetHeader();
274 Printf("ERROR: esdHeader could not be retrieved");
279 UInt_t eventType = esdHeader->GetEventType();
282 Printf("Skipping event because it is of type %d", eventType);
287 // trigger definition
288 eventTriggered = AliPWG0Helper::IsEventTriggered(fESD, fTrigger);
290 // get the ESD vertex
291 vtxESD = AliPWG0Helper::GetVertex(fESD, fAnalysisMode);
295 // fill z vertex resolution
298 fVertexResolution->Fill(vtxESD->GetZRes());
299 fVertex->Fill(vtxESD->GetXv(), vtxESD->GetYv(), vtxESD->GetZv());
301 if (AliPWG0Helper::TestVertex(vtxESD, fAnalysisMode))
306 if (strcmp(vtxESD->GetTitle(), "vertexer: 3D") == 0)
310 else if (strcmp(vtxESD->GetTitle(), "vertexer: Z") == 0)
317 // needed for syst. studies
321 if (fUseMCVertex || fUseMCKine || fOnlyPrimaries || fReadMC) {
323 Printf("ERROR: fUseMCVertex or fUseMCKine or fOnlyPrimaries set without fReadMC set!");
327 AliMCEventHandler* eventHandler = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
329 Printf("ERROR: Could not retrieve MC event handler");
333 AliMCEvent* mcEvent = eventHandler->MCEvent();
335 Printf("ERROR: Could not retrieve MC event");
339 AliHeader* header = mcEvent->Header();
342 AliDebug(AliLog::kError, "Header not available");
347 AliGenEventHeader* genHeader = header->GenEventHeader();
350 AliDebug(AliLog::kError, "Could not retrieve genHeader from Header");
353 genHeader->PrimaryVertex(vtxMC);
358 stack = mcEvent->Stack();
361 AliDebug(AliLog::kError, "Stack not available");
366 // create list of (label, eta, pt) tuples
367 Int_t inputCount = 0;
370 Float_t* thirdDimArr = 0;
371 if (fAnalysisMode == AliPWG0Helper::kSPD)
374 const AliMultiplicity* mult = fESD->GetMultiplicity();
377 AliDebug(AliLog::kError, "AliMultiplicity not available");
381 labelArr = new Int_t[mult->GetNumberOfTracklets()];
382 etaArr = new Float_t[mult->GetNumberOfTracklets()];
383 thirdDimArr = new Float_t[mult->GetNumberOfTracklets()];
385 // get multiplicity from SPD tracklets
386 for (Int_t i=0; i<mult->GetNumberOfTracklets(); ++i)
388 //printf("%d %f %f %f\n", i, mult->GetTheta(i), mult->GetPhi(i), mult->GetDeltaPhi(i));
391 if (mult->GetLabel(i, 0) < 0 || mult->GetLabel(i, 0) != mult->GetLabel(i, 1) || !stack->IsPhysicalPrimary(mult->GetLabel(i, 0)))
394 Float_t deltaPhi = mult->GetDeltaPhi(i);
395 // prevent values to be shifted by 2 Pi()
396 if (deltaPhi < -TMath::Pi())
397 deltaPhi += TMath::Pi() * 2;
398 if (deltaPhi > TMath::Pi())
399 deltaPhi -= TMath::Pi() * 2;
401 if (TMath::Abs(deltaPhi) > 1)
402 printf("WARNING: Very high Delta Phi: %d %f %f %f\n", i, mult->GetTheta(i), mult->GetPhi(i), deltaPhi);
404 Int_t label = mult->GetLabel(i, 0);
405 Float_t eta = mult->GetEta(i);
407 // control histograms
408 Float_t phi = mult->GetPhi(i);
410 phi += TMath::Pi() * 2;
412 fEtaPhi->Fill(eta, phi);
417 Float_t z = vtx[2] + 3.9 / TMath::Tan(2 * TMath::ATan(TMath::Exp(- eta)));
418 fZPhi[0]->Fill(z, phi);
420 z = vtx[2] + 7.6 / TMath::Tan(2 * TMath::ATan(TMath::Exp(- eta)));
421 fZPhi[1]->Fill(z, phi);
424 fDeltaPhi->Fill(deltaPhi);
426 if (fDeltaPhiCut > 0 && TMath::Abs(deltaPhi) > fDeltaPhiCut)
433 TParticle* particle = stack->Particle(label);
434 eta = particle->Eta();
435 phi = particle->Phi();
438 Printf("WARNING: fUseMCKine set without fOnlyPrimaries and no label found");
441 etaArr[inputCount] = eta;
442 labelArr[inputCount] = label;
443 thirdDimArr[inputCount] = phi;
449 // fill multiplicity in third axis
450 for (Int_t i=0; i<inputCount; ++i)
451 thirdDimArr[i] = inputCount;
454 Int_t firedChips = mult->GetNumberOfFiredChips(0) + mult->GetNumberOfFiredChips(1);
455 fFiredChips->Fill(firedChips, inputCount);
456 Printf("Accepted %d tracklets (%d fired chips)", inputCount, firedChips);
458 else if (fAnalysisMode == AliPWG0Helper::kTPC || fAnalysisMode == AliPWG0Helper::kTPCITS)
462 AliDebug(AliLog::kError, "fESDTrackCuts not available");
468 // get multiplicity from ESD tracks
469 TObjArray* list = fEsdTrackCuts->GetAcceptedTracks(fESD, (fAnalysisMode == AliPWG0Helper::kTPC));
470 Int_t nGoodTracks = list->GetEntries();
471 Printf("Accepted %d tracks", nGoodTracks);
473 labelArr = new Int_t[nGoodTracks];
474 etaArr = new Float_t[nGoodTracks];
475 thirdDimArr = new Float_t[nGoodTracks];
477 // loop over esd tracks
478 for (Int_t i=0; i<nGoodTracks; i++)
480 AliESDtrack* esdTrack = dynamic_cast<AliESDtrack*> (list->At(i));
483 AliDebug(AliLog::kError, Form("ERROR: Could not retrieve track %d.", i));
487 Float_t phi = esdTrack->Phi();
489 phi += TMath::Pi() * 2;
491 Float_t eta = esdTrack->Eta();
492 Int_t label = TMath::Abs(esdTrack->GetLabel());
493 Float_t pT = esdTrack->Pt();
496 fEtaPhi->Fill(eta, phi);
497 if (eventTriggered && vtxESD)
500 if (fOnlyPrimaries && label == 0)
507 TParticle* particle = stack->Particle(label);
508 eta = particle->Eta();
512 Printf("WARNING: fUseMCKine set without fOnlyPrimaries and no label found");
515 etaArr[inputCount] = eta;
516 labelArr[inputCount] = TMath::Abs(esdTrack->GetLabel());
517 thirdDimArr[inputCount] = pT;
521 // TODO restrict inputCount used as measure for the multiplicity to |eta| < 1
529 // Processing of ESD information (always)
533 fMult->Fill(inputCount);
534 fdNdEtaAnalysisESD->FillTriggeredEvent(inputCount);
536 fTriggerVsTime->SetPoint(fTriggerVsTime->GetN(), fESD->GetTimeStamp(), 1);
541 fMultVtx->Fill(inputCount);
543 for (Int_t i=0; i<inputCount; ++i)
545 Float_t eta = etaArr[i];
546 Float_t thirdDim = thirdDimArr[i];
548 fdNdEtaAnalysisESD->FillTrack(vtx[2], eta, thirdDim);
550 if (TMath::Abs(vtx[2]) < 10)
552 fPartEta[0]->Fill(eta);
555 fPartEta[1]->Fill(eta);
557 fPartEta[2]->Fill(eta);
561 // for event count per vertex
562 fdNdEtaAnalysisESD->FillEvent(vtx[2], inputCount);
565 fEvents->Fill(vtx[2]);
569 // from tracks is only done for triggered and vertex reconstructed events
570 for (Int_t i=0; i<inputCount; ++i)
572 Int_t label = labelArr[i];
577 //Printf("Getting particle of track %d", label);
578 TParticle* particle = stack->Particle(label);
582 AliDebug(AliLog::kError, Form("ERROR: Could not retrieve particle %d.", label));
586 Float_t thirdDim = -1;
587 if (fAnalysisMode == AliPWG0Helper::kSPD)
591 thirdDim = particle->Phi();
594 thirdDim = inputCount;
597 thirdDim = particle->Pt();
599 fdNdEtaAnalysisTracks->FillTrack(vtxMC[2], particle->Eta(), thirdDim);
600 } // end of track loop
602 // for event count per vertex
603 fdNdEtaAnalysisTracks->FillEvent(vtxMC[2], inputCount);
613 delete[] thirdDimArr;
616 if (fReadMC) // Processing of MC information (optional)
618 AliMCEventHandler* eventHandler = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
620 Printf("ERROR: Could not retrieve MC event handler");
624 AliMCEvent* mcEvent = eventHandler->MCEvent();
626 Printf("ERROR: Could not retrieve MC event");
630 AliStack* stack = mcEvent->Stack();
633 AliDebug(AliLog::kError, "Stack not available");
637 AliHeader* header = mcEvent->Header();
640 AliDebug(AliLog::kError, "Header not available");
645 AliGenEventHeader* genHeader = header->GenEventHeader();
648 AliDebug(AliLog::kError, "Could not retrieve genHeader from Header");
653 genHeader->PrimaryVertex(vtxMC);
656 Int_t processType = AliPWG0Helper::GetEventProcessType(header);
657 AliDebug(AliLog::kDebug+1, Form("Found process type %d", processType));
659 if (processType==AliPWG0Helper::kInvalidProcess)
660 AliDebug(AliLog::kError, Form("Unknown process type %d.", processType));
662 // loop over mc particles
663 Int_t nPrim = stack->GetNprimary();
665 Int_t nAcceptedParticles = 0;
667 // count particles first, then fill
668 for (Int_t iMc = 0; iMc < nPrim; ++iMc)
670 if (!stack->IsPhysicalPrimary(iMc))
673 //Printf("Getting particle %d", iMc);
674 TParticle* particle = stack->Particle(iMc);
679 if (particle->GetPDG()->Charge() == 0)
682 //AliDebug(AliLog::kDebug+1, Form("Accepted primary %d, unique ID: %d", iMc, particle->GetUniqueID()));
683 Float_t eta = particle->Eta();
685 // make a rough eta cut (so that nAcceptedParticles is not too far off the true measured value (NB: this histograms are only gathered for comparison))
686 if (TMath::Abs(eta) < 1.5) // && pt > 0.3)
687 nAcceptedParticles++;
690 for (Int_t iMc = 0; iMc < nPrim; ++iMc)
692 if (!stack->IsPhysicalPrimary(iMc))
695 //Printf("Getting particle %d", iMc);
696 TParticle* particle = stack->Particle(iMc);
701 if (particle->GetPDG()->Charge() == 0)
704 Float_t eta = particle->Eta();
705 Float_t thirdDim = -1;
707 if (fAnalysisMode == AliPWG0Helper::kSPD)
711 thirdDim = particle->Phi();
714 thirdDim = nAcceptedParticles;
717 thirdDim = particle->Pt();
719 fdNdEtaAnalysis->FillTrack(vtxMC[2], eta, thirdDim);
721 if (processType != AliPWG0Helper::kSD)
722 fdNdEtaAnalysisNSD->FillTrack(vtxMC[2], eta, thirdDim);
724 if (processType == AliPWG0Helper::kND)
725 fdNdEtaAnalysisND->FillTrack(vtxMC[2], eta, thirdDim);
729 fdNdEtaAnalysisTr->FillTrack(vtxMC[2], eta, thirdDim);
731 fdNdEtaAnalysisTrVtx->FillTrack(vtxMC[2], eta, thirdDim);
734 if (TMath::Abs(eta) < 1.0)
735 fPartPt->Fill(particle->Pt());
738 fdNdEtaAnalysis->FillEvent(vtxMC[2], nAcceptedParticles);
739 if (processType != AliPWG0Helper::kSD)
740 fdNdEtaAnalysisNSD->FillEvent(vtxMC[2], nAcceptedParticles);
741 if (processType == AliPWG0Helper::kND)
742 fdNdEtaAnalysisND->FillEvent(vtxMC[2], nAcceptedParticles);
746 fdNdEtaAnalysisTr->FillEvent(vtxMC[2], nAcceptedParticles);
748 fdNdEtaAnalysisTrVtx->FillEvent(vtxMC[2], nAcceptedParticles);
753 void AlidNdEtaTask::Terminate(Option_t *)
755 // The Terminate() function is the last function to be called during
756 // a query. It always runs on the client, it can be used to present
757 // the results graphically or save the results to file.
759 fOutput = dynamic_cast<TList*> (GetOutputData(0));
761 Printf("ERROR: fOutput not available");
765 fdNdEtaAnalysisESD = dynamic_cast<dNdEtaAnalysis*> (fOutput->FindObject("fdNdEtaAnalysisESD"));
766 fMult = dynamic_cast<TH1F*> (fOutput->FindObject("fMult"));
767 fMultVtx = dynamic_cast<TH1F*> (fOutput->FindObject("fMultVtx"));
768 for (Int_t i=0; i<3; ++i)
769 fPartEta[i] = dynamic_cast<TH1F*> (fOutput->FindObject(Form("dndeta_check_%d", i)));
770 fEvents = dynamic_cast<TH1F*> (fOutput->FindObject("dndeta_check_vertex"));
771 fVertexResolution = dynamic_cast<TH1F*> (fOutput->FindObject("dndeta_vertex_resolution_z"));
773 fPhi = dynamic_cast<TH1F*> (fOutput->FindObject("fPhi"));
774 fRawPt = dynamic_cast<TH1F*> (fOutput->FindObject("fRawPt"));
775 fEtaPhi = dynamic_cast<TH2F*> (fOutput->FindObject("fEtaPhi"));
776 for (Int_t i=0; i<2; ++i)
777 fZPhi[i] = dynamic_cast<TH2F*> (fOutput->FindObject(Form("fZPhi_%d", i)));
778 fDeltaPhi = dynamic_cast<TH1F*> (fOutput->FindObject("fDeltaPhi"));
779 fFiredChips = dynamic_cast<TH2F*> (fOutput->FindObject("fFiredChips"));
780 fTriggerVsTime = dynamic_cast<TGraph*> (fOutput->FindObject("fTriggerVsTime"));
781 fStats = dynamic_cast<TH1F*> (fOutput->FindObject("fStats"));
783 fEsdTrackCuts = dynamic_cast<AliESDtrackCuts*> (fOutput->FindObject("fEsdTrackCuts"));
786 if (!fdNdEtaAnalysisESD)
788 AliDebug(AliLog::kError, "ERROR: fdNdEtaAnalysisESD not available");
792 if (fMult && fMultVtx)
796 fMultVtx->SetLineColor(2);
797 fMultVtx->Draw("SAME");
803 fFiredChips->Draw("COLZ");
808 Int_t events1 = (Int_t) fEvents->Integral(fEvents->GetXaxis()->FindBin(-19.9), fEvents->GetXaxis()->FindBin(-0.001));
809 Int_t events2 = (Int_t) fEvents->Integral(fEvents->GetXaxis()->FindBin(0.001), fEvents->GetXaxis()->FindBin(19.9));
811 Printf("%d events with vertex used", events1 + events2);
813 if (events1 > 0 && events2 > 0)
815 fPartEta[0]->Scale(1.0 / (events1 + events2));
816 fPartEta[1]->Scale(1.0 / events1);
817 fPartEta[2]->Scale(1.0 / events2);
819 for (Int_t i=0; i<3; ++i)
820 fPartEta[i]->Scale(1.0 / fPartEta[i]->GetBinWidth(1));
822 new TCanvas("control", "control", 500, 500);
823 for (Int_t i=0; i<3; ++i)
825 fPartEta[i]->SetLineColor(i+1);
826 fPartEta[i]->Draw((i==0) ? "" : "SAME");
833 new TCanvas("control3", "control3", 500, 500);
837 TFile* fout = new TFile("analysis_esd_raw.root", "RECREATE");
839 if (fdNdEtaAnalysisESD)
840 fdNdEtaAnalysisESD->SaveHistograms();
843 fEsdTrackCuts->SaveHistograms("esd_tracks_cuts");
851 for (Int_t i=0; i<3; ++i)
853 fPartEta[i]->Write();
858 if (fVertexResolution)
859 fVertexResolution->Write();
873 for (Int_t i=0; i<2; ++i)
878 fFiredChips->Write();
881 fTriggerVsTime->Write();
886 fVertex = dynamic_cast<TH3F*> (fOutput->FindObject("vertex_check"));
893 Printf("Writting result to analysis_esd_raw.root");
900 fdNdEtaAnalysis = dynamic_cast<dNdEtaAnalysis*> (fOutput->FindObject("dndeta"));
901 fdNdEtaAnalysisND = dynamic_cast<dNdEtaAnalysis*> (fOutput->FindObject("dndetaND"));
902 fdNdEtaAnalysisNSD = dynamic_cast<dNdEtaAnalysis*> (fOutput->FindObject("dndetaNSD"));
903 fdNdEtaAnalysisTr = dynamic_cast<dNdEtaAnalysis*> (fOutput->FindObject("dndetaTr"));
904 fdNdEtaAnalysisTrVtx = dynamic_cast<dNdEtaAnalysis*> (fOutput->FindObject("dndetaTrVtx"));
905 fdNdEtaAnalysisTracks = dynamic_cast<dNdEtaAnalysis*> (fOutput->FindObject("dndetaTracks"));
906 fPartPt = dynamic_cast<TH1F*> (fOutput->FindObject("dndeta_check_pt"));
909 if (!fdNdEtaAnalysis || !fdNdEtaAnalysisTr || !fdNdEtaAnalysisTrVtx || !fPartPt)
911 AliDebug(AliLog::kError, Form("ERROR: Histograms not available %p %p", (void*) fdNdEtaAnalysis, (void*) fPartPt));
915 fdNdEtaAnalysis->Finish(0, -1, AlidNdEtaCorrection::kNone);
916 fdNdEtaAnalysisND->Finish(0, -1, AlidNdEtaCorrection::kNone);
917 fdNdEtaAnalysisNSD->Finish(0, -1, AlidNdEtaCorrection::kNone);
918 fdNdEtaAnalysisTr->Finish(0, -1, AlidNdEtaCorrection::kNone);
919 fdNdEtaAnalysisTrVtx->Finish(0, -1, AlidNdEtaCorrection::kNone);
920 fdNdEtaAnalysisTracks->Finish(0, -1, AlidNdEtaCorrection::kNone);
922 Int_t events = (Int_t) fdNdEtaAnalysis->GetData()->GetEventCorrection()->GetMeasuredHistogram()->Integral();
923 fPartPt->Scale(1.0/events);
924 fPartPt->Scale(1.0/fPartPt->GetBinWidth(1));
926 TFile* fout = new TFile("analysis_mc.root","RECREATE");
928 fdNdEtaAnalysis->SaveHistograms();
929 fdNdEtaAnalysisND->SaveHistograms();
930 fdNdEtaAnalysisNSD->SaveHistograms();
931 fdNdEtaAnalysisTr->SaveHistograms();
932 fdNdEtaAnalysisTrVtx->SaveHistograms();
933 fdNdEtaAnalysisTracks->SaveHistograms();
941 Printf("Writting result to analysis_mc.root");
945 new TCanvas("control2", "control2", 500, 500);