11 #include "AliVEvent.h"
12 #include "AliVParticle.h"
14 #include "AliESDEvent.h"
15 #include "AliESDtrack.h"
16 #include "AliMultiplicity.h"
17 #include "AliESDtrackCuts.h"
19 #include "AliAODEvent.h"
20 #include "AliAODTrack.h"
21 #include "AliAODMCParticle.h"
24 #include "AliMCEvent.h"
25 #include "AliMCParticle.h"
26 #include "AliGenEventHeader.h"
28 #include "AliAnalysisManager.h"
30 #include "AliAnalysisTaskMinijet.h"
32 // Analysis Task for mini jet activity analysis
33 // Authors: Eva Sicking
35 ClassImp(AliAnalysisTaskMinijet)
37 //________________________________________________________________________
38 AliAnalysisTaskMinijet::AliAnalysisTaskMinijet(const char *name)
39 : AliAnalysisTaskSE(name),
55 for(Int_t i = 0;i< 4;i++){
61 fDPhiDEtaEventAxis[i] = 0;
63 fTriggerTracklet[i] = 0;
67 fNch07Tracklet[i] = 0;
69 pNch07Tracklet[i] = 0;
70 for(Int_t j=0;j<150;j++){
71 fDPhiEventAxisNchBin[i][j] = 0;
72 fDPhiEventAxisNchBinTrig[i][j] = 0;
74 fDPhiEventAxisTrackletBin[i][j] = 0;
75 fDPhiEventAxisTrackletBinTrig[i][j] = 0;
78 DefineOutput(1, TList::Class());
81 //________________________________________________________________________
82 AliAnalysisTaskMinijet::~AliAnalysisTaskMinijet()
86 if (fHists && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) delete fHists;
89 //________________________________________________________________________
90 void AliAnalysisTaskMinijet::UserCreateOutputObjects()
96 fHistPt = new TH1F("fHistPt", "P_{T} distribution REC", 15, 0.1, 3.1);
97 fHistPt->GetXaxis()->SetTitle("P_{T} (GeV/c)");
98 fHistPt->GetYaxis()->SetTitle("dN/dP_{T} (c/GeV)");
99 fHistPt->SetMarkerStyle(kFullCircle);
103 fHistPtMC = new TH1F("fHistPtMC", "P_{T} distribution MC", 15, 0.1, 3.1);
104 fHistPtMC->GetXaxis()->SetTitle("P_{T} (GeV/c)");
105 fHistPtMC->GetYaxis()->SetTitle("dN/dP_{T} (c/GeV)");
106 fHistPtMC->SetMarkerStyle(kFullCircle);
109 TString labels[4]={"ESDrec", "ESDmc", "AODrec", "AODmc"};
111 for(Int_t i=2*fMode;i<1+2*fMode+fUseMC;i++){
113 fVertexZ[i] = new TH1F(Form("fVertexZ%s",labels[i].Data()),
114 Form("fVertexZ%s",labels[i].Data()) ,
116 fPt[i] = new TH1F(Form("fPt%s",labels[i].Data()),
117 Form("fPt%s",labels[i].Data()) ,
119 fEta[i] = new TH1F (Form("fEta%s",labels[i].Data()),
120 Form("fEta%s",labels[i].Data()) ,
122 fPhi[i] = new TH1F(Form("fPhi%s",labels[i].Data()),
123 Form("fPhi%s",labels[i].Data()) ,
124 360, 0.,2*TMath::Pi());
125 fDPhiDEtaEventAxis[i] = new TH2F(Form("fDPhiDEtaEventAxis%s",labels[i].Data()),
126 Form("fDPhiDEtaEventAxis%s",labels[i].Data()) ,
127 180, -1., 2*TMath::Pi()-1, 200, -2.,2.);
128 fTriggerNch[i] = new TH1F(Form("fTriggerNch%s",labels[i].Data()),
129 Form("fTriggerNch%s",labels[i].Data()) ,
131 fTriggerTracklet[i] = new TH1F(Form("fTriggerTracklet%s",labels[i].Data()),
132 Form("fTriggerTracklet%s",labels[i].Data()) ,
134 fNch07Nch[i] = new TH2F(Form("fNch07Nch%s",labels[i].Data()),
135 Form("fNch07Nch%s",labels[i].Data()) ,
136 250, -2.5, 247.5,250, -2.5, 247.5);
137 pNch07Nch[i] = new TProfile(Form("pNch07Nch%s",labels[i].Data()),
138 Form("pNch07Nch%s",labels[i].Data()) ,
140 fNch07Tracklet[i] = new TH2F(Form("fNch07Tracklet%s",labels[i].Data()),
141 Form("fNch07Tracklet%s",labels[i].Data()) ,
142 250, -2.5, 247.5,250, -2.5, 247.5);
143 fNchTracklet[i] = new TH2F(Form("fNchTracklet%s",labels[i].Data()),
144 Form("fNchTracklet%s",labels[i].Data()) ,
145 250, -2.5, 247.5,250, -2.5, 247.5);
146 pNch07Tracklet[i] = new TProfile(Form("pNch07Tracklet%s",labels[i].Data()),
147 Form("pNch07Tracklet%s",labels[i].Data()) ,
149 for(Int_t j=0;j<150;j++){
150 fDPhiEventAxisNchBin[i][j] = new TH1F(Form("fDPhiEventAxisNchBin%s%02d",
152 Form("fDPhiEventAxisNchBin%s%02d",
153 labels[i].Data(),j) ,
154 180, 0., TMath::Pi());
155 fDPhiEventAxisNchBinTrig[i][j] = new TH1F(Form("fDPhiEventAxisNchBinTrig%s%02d",
157 Form("fDPhiEventAxisNchBinTrig%s%02d",
158 labels[i].Data(),j) ,
159 180, 0., TMath::Pi());
161 fDPhiEventAxisTrackletBin[i][j] = new TH1F(Form("fDPhiEventAxisTrackletBin%s%02d",
163 Form("fDPhiEventAxisTrackletBin%s%02d",
164 labels[i].Data(),j) ,
165 180, 0., TMath::Pi());
166 fDPhiEventAxisTrackletBinTrig[i][j] = new TH1F(Form("fDPhiEventAxisTrackletBinTrig%s%02d",
168 Form("fDPhiEventAxisTrackletBinTrig%s%02d",
169 labels[i].Data(),j) ,
170 180, 0., TMath::Pi());
174 fHists = new TList();
177 fHists->Add(fHistPt);
178 if(fUseMC)fHists->Add(fHistPtMC);
180 for(Int_t i=2*fMode;i<1+2*fMode+fUseMC;i++){
181 fHists->Add(fVertexZ[i]);
183 fHists->Add(fEta[i]);
184 fHists->Add(fPhi[i]);
185 fHists->Add(fDPhiDEtaEventAxis[i]);
186 fHists->Add(fTriggerNch[i]);
187 fHists->Add(fTriggerTracklet[i]);
188 fHists->Add(fNch07Nch[i]);
189 fHists->Add(pNch07Nch[i]);
190 fHists->Add(fNch07Tracklet[i]);
191 fHists->Add(fNchTracklet[i]);
192 fHists->Add(pNch07Tracklet[i]);
193 for(Int_t j=0;j<150;j++){
194 fHists->Add(fDPhiEventAxisNchBin[i][j]);
195 fHists->Add(fDPhiEventAxisNchBinTrig[i][j]);
197 fHists->Add(fDPhiEventAxisTrackletBin[i][j]);
198 fHists->Add(fDPhiEventAxisTrackletBinTrig[i][j]);
205 //________________________________________________________________________
206 void AliAnalysisTaskMinijet::UserExec(Option_t *)
209 // Called for each event
211 AliVEvent *event = InputEvent();
213 Error("UserExec", "Could not retrieve event");
217 //get events, either ESD or AOD
218 fESDEvent = dynamic_cast<AliESDEvent*> (InputEvent());
219 fAODEvent = dynamic_cast<AliAODEvent*> (InputEvent());
222 //arrays for track properties
226 //number of accepted tracks and tracklets
227 Int_t ntracks = 0; //return value for reading functions for ESD and AOD
228 Int_t *numbers = 0; // numbers[0]=nAcceptedTracks, numbers[1]=ntracklets,
231 //read data and analyse. Implemented for ESD, ESDmc, AOD, AODmc
232 //-------------------------------------------------------------
233 if (fESDEvent && fMode==0) {//ESDs
234 //ESD reading and analysis
236 ntracks = LoopESD(&pt, &eta, &phi, &numbers); //read tracks
239 Printf("ntracks=%d", numbers[0]);
240 Printf("ntracklets=%d", numbers[1]);
242 Analyse(pt, eta, phi, ntracks, numbers[1], 0); //analyse tracks
244 CleanArrays(pt, eta, phi, numbers); // clean up array memory
247 //ESD MC reading and analysis
250 ntracks = LoopESDMC(&pt, &eta, &phi); //read mc particles
252 Analyse(pt, eta, phi, ntracks, 0, 1);//analyse
254 CleanArrays(pt, eta, phi);// clean up array memory
259 if (fAODEvent && fMode==1) {//AODs
261 //AOD reading and analysis
263 ntracks = LoopAOD(&pt, &eta, &phi, &numbers);//read tracks
266 Printf("ntracks=%d", numbers[0]);
267 Printf("ntracklets=%d", numbers[1]);
269 Analyse(pt, eta, phi, ntracks, numbers[1], 2);//analyse
271 CleanArrays(pt, eta, phi, numbers);// clean up array memory
274 //AOD MCreading and analysis
277 ntracks = LoopAODMC(&pt, &eta, &phi);//read tracks
279 Analyse(pt, eta, phi, ntracks, 0, 3);//analyse
281 CleanArrays(pt, eta, phi);// clean up array memory
285 //-------------------------------------------------------------
289 // PostData(1, fHists);
294 //________________________________________________________________________
295 Int_t AliAnalysisTaskMinijet::LoopESD(Float_t **ptArray, Float_t ** etaArray,
296 Float_t ** phiArray, Int_t **numbers )
298 // gives back the number of esd tracks and pointer to arrays with track
299 // properties (pt, eta, phi)
301 // Retreive the number of all tracks for this event.
302 Int_t ntracks = fESDEvent->GetNumberOfTracks();
303 if(fDebug)Printf("all ESD tracks: %d", ntracks);
306 //first loop to check how many tracks are accepted
308 Int_t nAcceptedTracks=0;
309 for (Int_t iTracks = 0; iTracks < ntracks; iTracks++) {
310 AliESDtrack *track = (AliESDtrack *)fESDEvent->GetTrack(iTracks);
312 Error("UserExec", "Could not receive track %d", iTracks);
315 if (fCuts->AcceptTrack(track)) ++nAcceptedTracks;
320 *ptArray = new Float_t[nAcceptedTracks];
321 *etaArray = new Float_t[nAcceptedTracks];
322 *phiArray = new Float_t[nAcceptedTracks];
323 *numbers = new Int_t[2]; //ntracksAccepted, ntracklets
325 //check if event is pile up or no tracks are accepted, return to user exec
326 if(fESDEvent->IsPileupFromSPD(3,0,8)) return 0;
327 if(nAcceptedTracks==0) return 0;
329 //accept event only, if vertex is good and is within fVertexZcut region
330 const AliESDVertex* vertexESD = fESDEvent->GetPrimaryVertex();
331 if(vertexESD->GetNContributors()==0)return 0;
332 Float_t fVz= vertexESD->GetZ();
333 if(TMath::Abs(fVz)>fVertexZCut) return 0;
334 fVertexZ[0]->Fill(fVz);
338 Int_t iAcceptedTrack=0;
339 for (Int_t iTracks = 0; iTracks < ntracks; iTracks++) {
340 AliESDtrack *track = (AliESDtrack *)fESDEvent->GetTrack(iTracks);
342 Error("UserExec", "Could not receive track %d", iTracks);
345 if (fCuts->AcceptTrack(track)){
346 (*ptArray)[iAcceptedTrack] = track->Pt();
347 (*etaArray)[iAcceptedTrack] = track->Eta();
348 (*phiArray)[iAcceptedTrack++] = track->Phi();
349 fHistPt->Fill(track->Pt());
355 Int_t ntrackletsAccept=0;
356 AliMultiplicity * mult = (AliMultiplicity*)(fESDEvent->GetMultiplicity());
357 Int_t ntracklets = mult->GetNumberOfTracklets();
358 for(Int_t i=0;i< ntracklets;i++){
359 if(mult->GetDeltaPhi(i)<0.05){
364 (*numbers)[0] = nAcceptedTracks;
365 (*numbers)[1] = ntrackletsAccept;
367 return nAcceptedTracks;
371 //________________________________________________________________________
372 Int_t AliAnalysisTaskMinijet::LoopESDMC(Float_t **ptArray, Float_t ** etaArray,
375 // gives back the number of charged prim MC particle and pointer to arrays
376 // with particle properties (pt, eta, phi)
378 AliMCEvent *mcEvent = (AliMCEvent*) MCEvent();
380 Error("UserExec", "Could not retrieve MC event");
384 AliStack* stack = 0x0;
385 if(fUseMC) stack = MCEvent()->Stack();
387 Int_t ntracks = mcEvent->GetNumberOfTracks();
388 if(fDebug)Printf("MC particles: %d", ntracks);
391 //----------------------------------
392 //first track loop to check how many chared primary tracks are available
393 Int_t nChargedPrimaries=0;
394 for (Int_t iTracks = 0; iTracks < ntracks; iTracks++) {
395 AliMCParticle *track = dynamic_cast<AliMCParticle*>(mcEvent->GetTrack(iTracks));
397 Error("UserExec", "Could not receive track %d", iTracks);
400 if (!(stack->IsPhysicalPrimary(track->Label()))) continue;
401 if (track->Particle()->GetPDG()->Charge() == 0) continue;
402 //same cuts as on ESDtracks
403 if(TMath::Abs(track->Eta())>0.9 || track->Pt()<0.2 || track->Pt()>200) continue;
406 //----------------------------------
409 *ptArray = new Float_t[nChargedPrimaries];
410 *etaArray = new Float_t[nChargedPrimaries];
411 *phiArray = new Float_t[nChargedPrimaries];
413 if(nChargedPrimaries==0) return 0;
415 AliGenEventHeader* header = MCEvent()->GenEventHeader();
417 header->PrimaryVertex(mcV);
418 Float_t vzMC = mcV[2];
419 if(TMath::Abs(vzMC)>fVertexZCut) return 0;
420 fVertexZ[1]->Fill(vzMC);
425 Int_t iChargedPrimaries=0;
426 for (Int_t iTracks = 0; iTracks < ntracks; iTracks++) {
427 AliMCParticle *track = dynamic_cast<AliMCParticle*>(mcEvent->GetTrack(iTracks));
429 Error("UserExec", "Could not receive track %d", iTracks);
432 if (!(stack->IsPhysicalPrimary(track->Label()))) continue;
433 if (track->Particle()->GetPDG()->Charge() == 0) continue;
434 //same cuts as on ESDtracks
435 if(TMath::Abs(track->Eta())>0.9 || track->Pt()<0.2 || track->Pt()>200) continue;
438 fHistPtMC->Fill(track->Pt());
439 //fills arrays with track properties
440 (*ptArray)[iChargedPrimaries] = track->Pt();
441 (*etaArray)[iChargedPrimaries] = track->Eta();
442 (*phiArray)[iChargedPrimaries++] = track->Phi();
446 return nChargedPrimaries;
450 //________________________________________________________________________
451 Int_t AliAnalysisTaskMinijet::LoopAOD(Float_t **ptArray, Float_t ** etaArray,
452 Float_t ** phiArray, Int_t ** numbers)
454 // gives back the number of AOD tracks and pointer to arrays with track
455 // properties (pt, eta, phi)
458 // Retreive the number of tracks for this event.
459 Int_t ntracks = fAODEvent->GetNumberOfTracks();
460 if(fDebug) Printf("AOD tracks: %d", ntracks);
463 Int_t nAcceptedTracks=0;
464 for (Int_t iTracks = 0; iTracks < ntracks; iTracks++) {
465 AliAODTrack *track = (AliAODTrack *)fAODEvent->GetTrack(iTracks);
467 Error("UserExec", "Could not receive track %d", iTracks);
470 if(track->TestFilterBit(16))nAcceptedTracks++;
473 *ptArray = new Float_t[nAcceptedTracks];
474 *etaArray = new Float_t[nAcceptedTracks];
475 *phiArray = new Float_t[nAcceptedTracks];
476 *numbers = new Int_t[2];
479 if(nAcceptedTracks==0) return 0;
480 AliAODVertex* vertex= fAODEvent->GetPrimaryVertex();
481 if(!vertex) return 0;
482 Double_t vzAOD=vertex->GetZ();
483 if(vertex->GetNContributors()==0) return 0;
484 if(TMath::Abs(vzAOD)>fVertexZCut) return 0;
485 fVertexZ[2]->Fill(vzAOD);
487 // Track loop to fill a pT spectrum
488 Int_t iAcceptedTracks=0;
489 for (Int_t iTracks = 0; iTracks < ntracks; iTracks++) {
490 AliAODTrack *track = (AliAODTrack *)fAODEvent->GetTrack(iTracks);
492 Error("UserExec", "Could not receive track %d", iTracks);
495 if(!track->TestFilterBit(16))continue;
496 fHistPt->Fill(track->Pt());
498 //fills arrays with track properties
499 (*ptArray)[iAcceptedTracks] = track->Pt();
500 (*etaArray)[iAcceptedTracks] = track->Eta();
501 (*phiArray)[iAcceptedTracks++] = track->Phi();
506 Int_t ntrackletsAccept=0;
507 AliAODTracklets * mult= (AliAODTracklets*)fAODEvent->GetTracklets();
508 for(Int_t i=0;i<mult->GetNumberOfTracklets();++i){
509 if(TMath::Abs(mult->GetDeltaPhi(i))<0.05){
514 (*numbers)[0] = nAcceptedTracks;
515 (*numbers)[1] = ntrackletsAccept;
517 return nAcceptedTracks;
521 //________________________________________________________________________
522 Int_t AliAnalysisTaskMinijet::LoopAODMC(Float_t **ptArray, Float_t ** etaArray,
525 // gives back the number of AOD MC particles and pointer to arrays with particle
526 // properties (pt, eta, phi)
528 //retreive MC particles from event
529 TClonesArray *mcArray = (TClonesArray*)fAODEvent->
530 FindListObject(AliAODMCParticle::StdBranchName());
532 Printf("%s:%d No MC particle branch found",(char*)__FILE__,__LINE__);
536 Int_t ntracks = mcArray->GetEntriesFast();
537 if(fDebug)Printf("MC particles: %d", ntracks);
540 // Track loop: chek how many particles will be accepted
542 Int_t nAcceptedTracks=0;
543 for (Int_t it = 0; it < ntracks; it++) {
544 AliAODMCParticle *track = (AliAODMCParticle*)mcArray->At(it);
546 Error("UserExec", "Could not receive track %d", it);
549 if(!track->IsPhysicalPrimary())continue;
550 if (track->Charge() == 0) continue;
551 if(TMath::Abs(track->Eta())>1. || track->Pt()<0.2 || track->Pt()>200) continue; //same cuts as in ESD filter
552 if(track->TestBit(16))nAcceptedTracks++;
553 if(nAcceptedTracks==1) vzMC= track->Zv(); // check only one time. (only one vertex per event allowed)
556 //generate array with size of number of accepted tracks
557 *ptArray = new Float_t[nAcceptedTracks];
558 *etaArray = new Float_t[nAcceptedTracks];
559 *phiArray = new Float_t[nAcceptedTracks];
561 if(nAcceptedTracks==0) return 0;
564 if(TMath::Abs(vzMC)>fVertexZCut) return 0;
565 fVertexZ[3]->Fill(vzMC);
568 // Track loop: fill arrays for accepted tracks
569 Int_t iAcceptedTracks=0;
570 for (Int_t it = 0; it < ntracks; it++) {
571 AliAODMCParticle *track = (AliAODMCParticle*)mcArray->At(it);
573 Error("UserExec", "Could not receive track %d", it);
576 if(!track->IsPhysicalPrimary())continue;
577 if (track->Charge() == 0) continue;
578 if(TMath::Abs(track->Eta())>0.9 || track->Pt()<0.2 || track->Pt()>200) continue;
580 if(track->TestBit(16)){
581 fHistPtMC->Fill(track->Pt());
582 (*ptArray)[iAcceptedTracks] = track->Pt();
583 (*etaArray)[iAcceptedTracks] = track->Eta();
584 (*phiArray)[iAcceptedTracks++] = track->Phi();
588 return nAcceptedTracks;
592 //________________________________________________________________________
593 void AliAnalysisTaskMinijet::Analyse(Float_t *pt, Float_t *eta, Float_t *phi, Int_t ntracks,
594 Int_t ntracklets, Int_t mode)
597 // analyse track properties (comming from either ESDs or AODs) in order to compute
598 // mini jet activity (chared tracks) as function of charged multiplicity
600 // ntracks and ntracklets are already the number of accepted tracks and tracklets
602 if(fDebug) Printf("In Analysis\n");
604 Float_t ptEventAxis=0; // pt leading
605 Float_t etaEventAxis=0; // eta leading
606 Float_t phiEventAxis=0; // phi leading
608 Float_t ptOthers = 0; // pt others // for all other tracks around event axis -> see loop
609 Float_t etaOthers = 0; // eta others
610 Float_t phiOthers = 0; // phi others
612 Int_t *pindex = new Int_t[ntracks];//index needed for sorting of pt array
614 for (Int_t i = 0; i < ntracks; i++) {
615 //filling of simple check plots
616 fPt[mode] ->Fill( pt[i]);
617 fEta[mode] ->Fill(eta[i]);
618 fPhi[mode] ->Fill(phi[i]);
619 pindex[i]=0; //set all values to zero
622 //sort all tracks according to their pt
623 if(ntracks) TMath::Sort(ntracks, pt, pindex, kTRUE);
626 // define event axis: leading or random track (with pt>fTriggerPtCut)
627 // ---------------------------------------
628 Int_t highPtTracks=0;
629 for(Int_t i=0;i<ntracks;i++){//show just the filled entries, skip empty ones.
630 if(fDebug) Printf("%d: pt = %f, number %i \n",mode, pt[pindex[i]],i);
631 if(pt[pindex[i]]>fTriggerPtCut) highPtTracks++;
634 // plot of multiplicity distributions
635 fNch07Nch[mode]->Fill(ntracks, highPtTracks);
636 pNch07Nch[mode]->Fill(ntracks, highPtTracks);
638 fNch07Tracklet[mode]->Fill(ntracklets, highPtTracks);
639 fNchTracklet[mode]->Fill(ntracklets, ntracks);
640 pNch07Tracklet[mode]->Fill(ntracklets, highPtTracks);
643 //analysis can only be performed with event axis, defined by high pt track
646 //check setter of event axis
647 //default option: random=1,
648 //second option:leading=0
650 if(fLeadingOrRandom==0)axis=0;
651 else if (fLeadingOrRandom==1)axis= Int_t((highPtTracks)*gRandom->Rndm());
652 else Printf("Wrong settings for event axis.");
653 if(fDebug)Printf("Axis tracks has pT=%f", pt[pindex[axis]]);
655 //---------------------------------------
658 if(ntracks>1){ // require at least two tracks (leading and prob. accosicates)
660 //EventAxisRandom track properties
661 ptEventAxis = pt [pindex[axis]];
662 etaEventAxis = eta[pindex[axis]];
663 phiEventAxis = phi[pindex[axis]];
666 //track loop for event propoerties around event axis with pt>triggerPtCut
667 //loop only over already accepted tracks except event axis
668 if(ptEventAxis>fTriggerPtCut){
670 for (Int_t iTrack = 0; iTrack < ntracks; iTrack++) {
672 if(axis==iTrack)continue; // no double counting
674 ptOthers = pt [pindex[iTrack]];
675 etaOthers = eta[pindex[iTrack]];
676 phiOthers = phi[pindex[iTrack]];
679 if(ptOthers>fAssociatePtCut){ // only tracks which fullfill associate pt cut
681 Float_t dPhi=TMath::Abs(phiOthers-phiEventAxis);
682 if(dPhi>TMath::Pi()) dPhi=2*TMath::Pi()-dPhi;
683 Float_t dEta=etaOthers-etaEventAxis;
685 Float_t dphiplot = phiOthers-phiEventAxis;
686 if(dphiplot>2*TMath::Pi()-1) dphiplot = dphiplot-2*TMath::Pi();
687 else if(dphiplot<-1)dphiplot=dphiplot+2*TMath::Pi();
688 fDPhiDEtaEventAxis[mode]->Fill(dphiplot, dEta);
691 fDPhiEventAxisNchBin[mode][ntracks]->Fill(dPhi);
692 if(ptOthers>fTriggerPtCut)
693 fDPhiEventAxisNchBinTrig[mode][ntracks]->Fill(dPhi);
697 fDPhiEventAxisTrackletBin[mode][ntracklets]->Fill(dPhi);
698 if(ptOthers>fTriggerPtCut)
699 fDPhiEventAxisTrackletBinTrig[mode][ntracklets]->Fill(dPhi);
702 }//tracks fulfill assoc track cut
707 // fill histogram with number of tracks (pt>fAssociatePtCut) around event axis
708 // how often is there a trigger particle at a certain Nch bin
709 fTriggerNch[mode]->Fill(ntracks);
710 fTriggerTracklet[mode]->Fill(ntracklets);
712 }//if track pt is at least trigger pt
714 } //if there are more than 1 track
716 }//if there is at least one high pt track
718 if(pindex){// clean up array memory used for TMath::Sort
727 //________________________________________________________________________
728 void AliAnalysisTaskMinijet::Terminate(Option_t*)
730 //terminate function is called at the end
731 //can be used to draw histograms etc.
735 //________________________________________________________________________
736 void AliAnalysisTaskMinijet::CleanArrays(Float_t* pt, Float_t* eta, Float_t* phi,Int_t* numbers)
738 //clean up of memory used for arrays of track properties