6 #include "TClonesArray.h"
12 #include "TBenchmark.h"
14 #include "AliAnalysisTask.h"
15 #include "AliAnalysisManager.h"
18 #include "AliVEvent.h"
19 #include "AliESDEvent.h"
20 #include "AliMCEvent.h"
21 #include "AliESDtrack.h"
23 #include "AliTrackReference.h"
25 #include "AliT0MultiplicityTask.h"
27 ClassImp(AliT0MultiplicityTask)
30 AliT0MultiplicityTask::AliT0MultiplicityTask()
31 : AliAnalysisTaskSE("AliT0MultiplicityTask"),
47 // Default constructor
48 AliInfo("Default constructor AliT0MultiplicityTask");
49 // Define input and output slots here
50 // Input slot #0 works with a TChain
51 DefineInput(0, TChain::Class());
52 // Output slot #1 TList
53 DefineOutput(1, TList::Class());
57 AliT0MultiplicityTask::AliT0MultiplicityTask(const char* name)
58 : AliAnalysisTaskSE(name),
75 // Define input and output slots here
76 // Input slot #0 works with a TChain
77 DefineInput(0, TChain::Class());
78 // Output slot #1 TList
79 DefineOutput(1, TList::Class());
83 void AliT0MultiplicityTask::UserCreateOutputObjects()
87 // Create output container
88 fListOfHistos = new TList();
91 fOrA = new TH1F("hOrA"," T0 A", 100,2450,2700);
92 fOrC = new TH1F("hOrC"," T0 C", 100,2450,2700);
93 fMean= new TH1F("hMean"," T0 ",100, 12000, 13000);
94 fVertex = new TH1F("hVertex","Z position of vertex", 100,-30, 30);
96 fTime = new TH1F("Time", " Amp vs Time",100, 12000, 13000);
97 fAmp = new TH1F("fAmp", " Amplitude", 100, 0, 200);
99 // fHighMult = new TH1F("fHighMult", " events with high amp ",100, 0, 10);
101 fTotalMult = new TH1F("fTotalMult","total multiplicity",500,0,5000);
103 fMultRecRealA = new TH2F("fMultRecRealA"," ",100,0.,200,100,0,200);
104 fMultRecRealC = new TH2F("fMultRecRealC"," ",100,0,200,100,0,200);
105 fMultRecTotal = new TH2F("fMultRecTotal"," ",100,0,200,100,0,200);
107 fPrim = new TH1F("fPrim", " primary",100, 0, 200);
108 fRef = new TH1F("fRef", " from TR ",100, 0, 200);
109 fRec = new TH1F("fRec", " in ESD ",100, 0, 200);
111 fListOfHistos->Add(fOrA);
112 fListOfHistos->Add(fOrC);
113 fListOfHistos->Add(fMean);
114 fListOfHistos->Add(fVertex);
115 fListOfHistos->Add(fAmp);
116 fListOfHistos->Add(fTime);
117 fListOfHistos->Add(fTotalMult);
118 fListOfHistos->Add(fMultRecRealA);
119 fListOfHistos->Add(fMultRecRealC);
120 fListOfHistos->Add(fMultRecTotal);
121 fListOfHistos->Add(fPrim);
122 fListOfHistos->Add(fRef);
123 fListOfHistos->Add(fRec);
127 void AliT0MultiplicityTask::UserExec(Option_t *)
130 // Called for each event
134 AliMCEvent* mcEvent = MCEvent();
136 Printf("ERROR: Could not retrieve MC event");
146 AliStack* stack = mcEvent->Stack();
147 // printf("AliT0MultiplicityAnalysis: Number of tracks on stack %5d\n", stack->GetNtrack());
148 Int_t nTracks = mcEvent->GetNumberOfTracks();
149 for (Int_t ipart=0; ipart<nTracks; ipart++)
151 // TParticle* particle = stack->Particle(ipart);
152 AliMCParticle* track = mcEvent->GetTrack(ipart);
154 Printf("ERROR: Could not receive track %d (mc loop)", ipart);
157 Int_t label = track->GetLabel();
158 if(stack->IsPhysicalPrimary(label) == kFALSE)
162 Double_t eta=track->Eta();
164 if(eta<-2.97 && eta>-3.28) primaryC++;
165 if (eta >4.61 && eta<4.92) primaryA++;
167 // Loop over Track References
168 AliTrackReference* trackRef = 0;
170 for (Int_t iTrackRef = 0; iTrackRef < track->GetNumberOfTrackReferences(); iTrackRef++) {
171 trackRef = track->GetTrackReference(iTrackRef);
173 Int_t detectorId = trackRef->DetectorId();
174 if (detectorId == 7) refT0++;
178 fTotalMult->Fill(numPrim);
179 fPrim->Fill(primaryC+primaryA);
181 // printf (" tracks %i primaries %d \n",nTracks, numPrim);
185 AliVEvent* event = InputEvent();
187 Printf("ERROR: Could not retrieve event");
191 AliESDEvent* esd = dynamic_cast<AliESDEvent*>(event);
193 Bool_t eventTriggered = false;
194 ULong64_t triggerMask = esd->GetTriggerMask();
195 // definitions from p-p.cfg
196 ULong64_t spdFO = (1 << 14);
197 ULong64_t v0left = (1 << 11);
198 ULong64_t v0right = (1 << 12);
200 if (triggerMask & spdFO || ((triggerMask & v0left) || (triggerMask & v0right)))
201 eventTriggered == true;
203 //= AliPWG0Helper::IsEventTriggered(esd, AliPWG0Helper::kMB1);
204 // printf("!!!!! eventTriggered %i",eventTriggered);
205 // if(!eventTriggered) return;
206 Double_t besttimeC=99999.;
207 Double_t besttimeA=99999.;
209 // Float_t coefA = 0.891466;
210 // Float_t coefC = 0.922772;
215 Int_t highA=0, highC=0;
216 const Double_t *amp = esd->GetT0amplitude();
217 const Double_t *time = esd->GetT0time();
218 Float_t vertex = esd->GetT0zVertex();
219 if(vertex<999) fVertex->Fill(vertex);
220 Float_t mean = esd->GetT0();
223 for (Int_t i=0; i<12; i++) {
225 fTime->Fill(amp[i],time[i]);
227 if(time[i]<besttimeC && time[i]>0) besttimeC=time[i]; //timeC
229 fOrC->Fill(besttimeC);
231 for (Int_t i=12; i<24; i++){
234 fTime->Fill(time[i]);
235 if(time[i]<besttimeA && time[i]>0) besttimeA=time[i]; //timeC
238 fOrA->Fill(besttimeA);
240 fMultRecRealA ->Fill(primaryA, sumampA*coefA);
241 fMultRecRealC ->Fill(primaryC, sumampC*coefC);
242 fMultRecTotal->Fill(numPrim, sumampA*coefA + sumampC*coefC);
243 fRec->Fill(Int_t(sumampA+sumampC));
246 PostData(1, fListOfHistos);
250 void AliT0MultiplicityTask::Terminate(Option_t *)
252 // Draw result to the screen
253 // Called once at the end of the query
254 // printf(" AliT0MultiplicityTask::Terminate ");
256 fListOfHistos = dynamic_cast<TList*>(GetOutputData(1));
257 if (!fListOfHistos) {
258 Printf("ERROR: fListOfHistos not available");
261 // printf(" before cast ");
262 fOrA = dynamic_cast<TH1F*>(fListOfHistos->At(0));
263 fOrC = dynamic_cast<TH1F*>(fListOfHistos->At(1));
264 fMean = dynamic_cast<TH1F*>(fListOfHistos->At(2));
265 fVertex = dynamic_cast<TH1F*>(fListOfHistos->At(3));
266 fAmp = dynamic_cast<TH1F*>(fListOfHistos->At(4));
267 fTime = dynamic_cast<TH1F*>(fListOfHistos->At(5));
268 fTotalMult = dynamic_cast<TH1F*>(fListOfHistos->At(6));
269 fMultRecTotal = dynamic_cast<TH2F*>(fListOfHistos->At(7));
270 fMultRecRealA = dynamic_cast<TH2F*>(fListOfHistos->At(8));
271 fMultRecRealC= dynamic_cast<TH2F*>(fListOfHistos->At(9));
272 fPrim= dynamic_cast<TH1F*>(fListOfHistos->At(10));
273 fRef= dynamic_cast<TH1F*>(fListOfHistos->At(11));
274 fRec= dynamic_cast<TH1F*>(fListOfHistos->At(12));
276 TFile fc("MultHist.root\n", "RECREATE");
277 // printf(" File MultHist.root recreated\n");
291 fMultRecTotal->Write();
293 fMultRecRealA->Write();
295 fMultRecRealC->Write();
302 printf(" fc.Close()\n");