4 //Measure Jet-hadron correlations
5 //Does event Mixing using AliEventPoolManager
8 #include "AliAnalysisTaskEmcalJetHMEC.h"
15 #include "THnSparse.h"
17 #include <TClonesArray.h>
18 #include <TParticle.h>
19 #include "AliVTrack.h"
20 #include "TParameter.h"
22 #include "AliAODEvent.h"
23 #include "AliAnalysisTask.h"
24 #include "AliAnalysisManager.h"
26 #include "AliESDEvent.h"
27 #include "AliESDInputHandler.h"
28 #include "AliESDCaloCluster.h"
29 #include "AliESDVertex.h"
30 #include "AliCentrality.h"
31 #include "AliAODJet.h"
32 #include "AliEmcalJet.h"
33 #include "AliESDtrackCuts.h"
36 #include "AliPicoTrack.h"
37 #include "AliEventPoolManager.h"
39 ClassImp(AliAnalysisTaskEmcalJetHMEC)
41 //________________________________________________________________________
42 AliAnalysisTaskEmcalJetHMEC::AliAnalysisTaskEmcalJetHMEC() :
43 AliAnalysisTaskEmcalJet("HMEC",kFALSE),
55 fMixingTracks(50000), fNMIXtracks(5000), fNMIXevents(5),
56 fTriggerEventType(AliVEvent::kEMCEJE), fMixingEventType(AliVEvent::kMB | AliVEvent::kCentral | AliVEvent::kSemiCentral),
57 fDoLessSparseAxes(0), fDoWiderTrackBin(0),
69 // Default Constructor
71 for(Int_t ipta=0; ipta<7; ipta++){
72 fHistTrackEtaPhi[ipta]=0;
75 for(Int_t icent = 0; icent<6; ++icent){
77 fHistJetPtBias[icent]=0;
78 fHistLeadJetPt[icent]=0;
79 fHistLeadJetPtBias[icent]=0;
80 fHistJetPtTT[icent]=0;
81 for(Int_t iptjet = 0; iptjet<5; ++iptjet){
82 for(Int_t ieta = 0; ieta<3; ++ieta){
83 fHistJetH[icent][iptjet][ieta]=0;
84 fHistJetHBias[icent][iptjet][ieta]=0;
85 fHistJetHTT[icent][iptjet][ieta]=0;
91 //________________________________________________________________________
92 AliAnalysisTaskEmcalJetHMEC::AliAnalysisTaskEmcalJetHMEC(const char *name) :
93 AliAnalysisTaskEmcalJet(name,kTRUE),
105 fMixingTracks(50000), fNMIXtracks(5000), fNMIXevents(5),
106 fTriggerEventType(AliVEvent::kEMCEJE), fMixingEventType(AliVEvent::kMB | AliVEvent::kCentral | AliVEvent::kSemiCentral),
107 fDoLessSparseAxes(0), fDoWiderTrackBin(0),
120 for(Int_t ipta=0; ipta<7; ipta++){
121 fHistTrackEtaPhi[ipta]=0;
123 for(Int_t icent = 0; icent<6; ++icent){
125 fHistJetPtBias[icent]=0;
126 fHistLeadJetPt[icent]=0;
127 fHistLeadJetPtBias[icent]=0;
128 fHistJetPtTT[icent]=0;
129 for(Int_t iptjet = 0; iptjet<5; ++iptjet){
130 for(Int_t ieta = 0; ieta<3; ++ieta){
131 fHistJetH[icent][iptjet][ieta]=0;
132 fHistJetHBias[icent][iptjet][ieta]=0;
133 fHistJetHTT[icent][iptjet][ieta]=0;
140 //________________________________________________________________________
141 void AliAnalysisTaskEmcalJetHMEC::UserCreateOutputObjects() {
143 AliAnalysisTaskEmcalJet::UserCreateOutputObjects();
147 fHistTrackPt = new TH1F("fHistTrackPt", "P_{T} distribution", 1000, 0.0, 100.0);
148 fHistCentrality = new TH1F("fHistCentrality","centrality",100,0,100);
149 fHistJetEtaPhi = new TH2F("fHistJetEtaPhi","Jet eta-phi",900,-1.8,1.8,720,-3.2,3.2);
150 fHistJetHEtaPhi = new TH2F("fHistJetHEtaPhi","Jet-Hadron deta-dphi",900,-1.8,1.8,720,-1.6,4.8);
154 for(Int_t ipta=0; ipta<7; ++ipta){
155 name = Form("fHistTrackEtaPhi_%i", ipta);
156 fHistTrackEtaPhi[ipta] = new TH2F(name,name,400,-1,1,720,0.0,2.0*TMath::Pi());
157 fOutput->Add(fHistTrackEtaPhi[ipta]);
160 for(Int_t icent = 0; icent<6; ++icent){
161 name = Form("fHistJetPt_%i",icent);
162 fHistJetPt[icent] = new TH1F(name,name,200,0,200);
163 fOutput->Add(fHistJetPt[icent]);
165 name = Form("fHistJetPtBias_%i",icent);
166 fHistJetPtBias[icent] = new TH1F(name,name,200,0,200);
167 fOutput->Add(fHistJetPtBias[icent]);
169 name = Form("fHistLeadJetPt_%i",icent);
170 fHistLeadJetPt[icent] = new TH1F(name,name,200,0,200);
171 fOutput->Add(fHistLeadJetPt[icent]);
173 name = Form("fHistLeadJetPtBias_%i",icent);
174 fHistLeadJetPtBias[icent] = new TH1F(name,name,200,0,200);
175 fOutput->Add(fHistLeadJetPtBias[icent]);
177 name = Form("fHistJetPtTT_%i",icent);
178 fHistJetPtTT[icent] = new TH1F(name,name,200,0,200);
179 fOutput->Add(fHistJetPtTT[icent]);
181 for(Int_t iptjet = 0; iptjet<5; ++iptjet){
182 for(Int_t ieta = 0; ieta<3; ++ieta){
183 name = Form("fHistJetH_%i_%i_%i",icent,iptjet,ieta);
184 fHistJetH[icent][iptjet][ieta]=new TH2F(name,name,72,-0.5*TMath::Pi(),1.5*TMath::Pi(),300,0,30);
185 fOutput->Add(fHistJetH[icent][iptjet][ieta]);
187 name = Form("fHistJetHBias_%i_%i_%i",icent,iptjet,ieta);
188 fHistJetHBias[icent][iptjet][ieta]=new TH2F(name,name,72,-0.5*TMath::Pi(),1.5*TMath::Pi(),300,0,30);
189 fOutput->Add(fHistJetHBias[icent][iptjet][ieta]);
191 name = Form("fHistJetHTT_%i_%i_%i",icent,iptjet,ieta);
192 fHistJetHTT[icent][iptjet][ieta]=new TH2F(name,name,72,-0.5*TMath::Pi(),1.5*TMath::Pi(),300,0,30);
193 fOutput->Add(fHistJetHTT[icent][iptjet][ieta]);
199 UInt_t cifras = 0; // bit coded, see GetDimParams() below
200 if(fDoLessSparseAxes) {
201 cifras = 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5;
203 cifras = 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5 | 1<<6 | 1<<7;
205 fhnJH = NewTHnSparseF("fhnJH", cifras);
210 if(fDoLessSparseAxes) {
211 cifras = 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5;
213 cifras = 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5 | 1<<6 | 1<<7;
215 fhnMixedEvents = NewTHnSparseF("fhnMixedEvents", cifras);
216 fhnMixedEvents->Sumw2();
217 fOutput->Add(fhnMixedEvents);
220 fOutput->Add(fHistTrackPt);
221 fOutput->Add(fHistCentrality);
222 fOutput->Add(fHistJetEtaPhi);
223 fOutput->Add(fHistJetHEtaPhi);
225 PostData(1, fOutput);
228 Int_t trackDepth = fMixingTracks;
229 Int_t poolsize = 1000; // Maximum number of events, ignored in the present implemented of AliEventPoolManager
231 Int_t nZvtxBins = 5+1+5;
232 // bins for second buffer are shifted by 100 cm
233 Double_t vertexBins[] = { -10, -8, -6, -4, -2, 0, 2, 4, 6, 8, 10, };
234 Double_t* zvtxbin = vertexBins;
236 // Int_t nCentralityBins = 100;
237 Int_t nCentralityBins = 100;
239 if(fCentBinSize==1) {
240 nCentralityBins = 100;
242 } else if(fCentBinSize==2){
243 nCentralityBins = 50;
245 } else if(fCentBinSize==5){
246 nCentralityBins = 20;
248 } else if(fCentBinSize==10){
249 nCentralityBins = 10;
252 Double_t centralityBins[nCentralityBins];
253 for(Int_t ic=0; ic<nCentralityBins; ic++){
254 centralityBins[ic]=mult*ic;
257 fPoolMgr = new AliEventPoolManager(poolsize, trackDepth, nCentralityBins, centralityBins, nZvtxBins, zvtxbin);
261 //________________________________________________________________________
263 Double_t AliAnalysisTaskEmcalJetHMEC:: RelativePhi(Double_t mphi,Double_t vphi) {
265 if (vphi < -1*TMath::Pi()) vphi += (2*TMath::Pi());
266 else if (vphi > TMath::Pi()) vphi -= (2*TMath::Pi());
267 if (mphi < -1*TMath::Pi()) mphi += (2*TMath::Pi());
268 else if (mphi > TMath::Pi()) mphi -= (2*TMath::Pi());
269 Double_t dphi = vphi-mphi;
270 if (dphi < -1*TMath::Pi()) dphi += (2*TMath::Pi());
271 else if (dphi > TMath::Pi()) dphi -= (2*TMath::Pi());
273 return dphi;//dphi in [-Pi, Pi]
276 //________________________________________________________________________
277 Int_t AliAnalysisTaskEmcalJetHMEC::GetCentBin(Double_t cent) const {
278 // Get centrality bin.
281 if (cent>=0 && cent<10) centbin = 0;
282 else if (cent>=10 && cent<20) centbin = 1;
283 else if (cent>=20 && cent<30) centbin = 2;
284 else if (cent>=30 && cent<40) centbin = 3;
285 else if (cent>=40 && cent<50) centbin = 4;
286 else if (cent>=50 && cent<90) centbin = 5;
290 //________________________________________________________________________
291 Int_t AliAnalysisTaskEmcalJetHMEC::GetEtaBin(Double_t eta) const {
292 // Get eta bin for histos.
295 if (TMath::Abs(eta)<=0.4) etabin = 0;
296 else if (TMath::Abs(eta)>0.4 && TMath::Abs(eta)<0.8) etabin = 1;
297 else if (TMath::Abs(eta)>=0.8) etabin = 2;
300 //________________________________________________________________________
301 Int_t AliAnalysisTaskEmcalJetHMEC::GetpTjetBin(Double_t pt) const
303 // Get jet pt bin for histos.
306 if (pt>=15 && pt<20) ptbin = 0;
307 else if (pt>=20 && pt<25) ptbin = 1;
308 else if (pt>=25 && pt<30) ptbin = 2;
309 else if (pt>=30 && pt<60) ptbin = 3;
310 else if (pt>=60) ptbin = 4;
315 //________________________________________________________________________
316 void AliAnalysisTaskEmcalJetHMEC::ExecOnce() {
317 AliAnalysisTaskEmcalJet::ExecOnce();
321 //________________________________________________________________________
322 Bool_t AliAnalysisTaskEmcalJetHMEC::Run() {
323 // Main loop called for each event
325 AliError(Form("No fTracks object!!\n"));
329 AliError(Form("No fJets object!!\n"));
333 // what kind of event do we have: AOD or ESD?
334 Bool_t esdMode = kTRUE;
335 if (dynamic_cast<AliAODEvent*>(InputEvent())) esdMode = kFALSE;
337 // if we have ESD event, set up ESD object
339 fESD = dynamic_cast<AliESDEvent*>(InputEvent());
341 AliError(Form("ERROR: fESD not available\n"));
346 // if we have AOD event, set up AOD object
348 fAOD = dynamic_cast<AliAODEvent*>(InputEvent());
350 AliError(Form("ERROR: fAOD not available\n"));
355 TList *list = InputEvent()->GetList();
357 AliError(Form("ERROR: list not attached\n"));
363 AliError(Form("Centrality negative: %f", fCent));
367 Int_t centbin = GetCentBin(fCent);
368 if(centbin<0) return kTRUE;
370 Double_t fvertex[3]={0,0,0};
371 InputEvent()->GetPrimaryVertex()->GetXYZ(fvertex);
372 Double_t zVtx=fvertex[2];
374 if(fabs(zVtx)>10.0) return kTRUE;
376 fHistCentrality->Fill(fCent);
378 TClonesArray *jets = 0;
379 TClonesArray *tracks = 0;
381 tracks = dynamic_cast<TClonesArray*>(list->FindObject(fTracks));
383 AliError(Form("Pointer to tracks %s == 0", fTracks->GetName() ));
386 const Int_t Ntracks=tracks->GetEntries();
388 jets= dynamic_cast<TClonesArray*>(list->FindObject(fJets));
390 AliError(Form("Pointer to tracks %s == 0", fJets->GetName() ));
393 const Int_t Njets = jets->GetEntries();
395 //Leticia's loop to find hardest track
399 for (Int_t iTracks = 0; iTracks < Ntracks; iTracks++) {
400 AliVTrack* track = static_cast<AliVTrack*>(tracks->At(iTracks));
402 printf("ERROR: Could not receive track %d\n", iTracks);
406 if(TMath::Abs(track->Eta())>0.9) continue;
407 if(track->Pt()<0.15) continue;
409 if(track->Pt()>ptmax){
416 Double_t highestjetpt=0.0;
419 for (Int_t ijets = 0; ijets < Njets; ijets++){
420 AliEmcalJet *jet = static_cast<AliEmcalJet*>(jets->At(ijets));
422 if(!AcceptthisJet(jet)) continue;
424 Double_t jetPt = jet->Pt();
426 if(highestjetpt<jetPt){
432 // see if event is selected
433 UInt_t trig = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
435 for (Int_t ijet = 0; ijet < Njets; ijet++){
436 AliEmcalJet *jet = static_cast<AliEmcalJet*>(jets->At(ijet));
439 // see if event is selected and our jet came from trigger event
440 if (!(trig & fTriggerEventType)) continue;
441 if (jet->Pt()<0.1) continue;
443 if(!AcceptthisJet(jet)) continue;
445 Double_t jetphi = jet->Phi();
446 Double_t jetPt = jet->Pt();
447 Double_t jeteta=jet->Eta();
450 if (ijet==ijethi) leadjet=1;
452 fHistJetPt[centbin]->Fill(jet->Pt());
453 fHistLeadJetPt[centbin]->Fill(jet->Pt());
455 if ((jet->MaxTrackPt()>fTrkBias) || (jet->MaxClusterPt()>fClusBias)){
456 fHistJetPtBias[centbin]->Fill(jet->Pt());
457 fHistLeadJetPtBias[centbin]->Fill(jet->Pt());
460 fHistJetEtaPhi->Fill(jet->Eta(),jetphi);
463 AliVTrack* TT = static_cast<AliVTrack*>(tracks->At(iTT));
464 if(TMath::Abs(jetphi-TT->Phi()-TMath::Pi())<0.6) passedTTcut=1;
469 fHistJetPtTT[centbin]->Fill(jet->Pt());
472 iptjet=GetpTjetBin(jetPt);
473 if(iptjet<0) continue;
477 for (Int_t iTracks = 0; iTracks < Ntracks; iTracks++) {
478 AliVTrack* track = static_cast<AliVTrack*>(tracks->At(iTracks));
480 printf("ERROR: Could not receive track %d\n", iTracks);
484 if(TMath::Abs(track->Eta())>fTrkEta) continue;
486 fHistTrackPt->Fill(track->Pt());
488 if (track->Pt()<0.15) continue;
490 Double_t trackphi = track->Phi();
491 if (trackphi > TMath::Pi())
492 trackphi = trackphi-2*TMath::Pi();
494 Double_t tracketa=track->Eta();
495 Double_t trackpt=track->Pt();
496 Double_t deta=tracketa-jeteta;
497 Int_t ieta=GetEtaBin(deta);
499 AliError(Form("Eta Bin negative: %f", deta));
503 //Jet pt, track pt, dPhi,deta,fCent
504 Double_t dphijh = RelativePhi(jetphi,trackphi);
505 if (dphijh < -0.5*TMath::Pi())
506 dphijh+= 2*TMath::Pi();
507 if (dphijh > 1.5*TMath::Pi())
508 dphijh-=2.*TMath::Pi();
510 fHistJetH[centbin][iptjet][ieta]->Fill(dphijh,track->Pt());
511 fHistJetHEtaPhi->Fill(deta,dphijh);
513 Double_t dR=sqrt(deta*deta+dphijh*dphijh);
515 if ((jet->MaxTrackPt()>fTrkBias) || (jet->MaxClusterPt()>fClusBias)){
516 fHistJetHBias[centbin][iptjet][ieta]->Fill(dphijh,trackpt);
518 if(fDoLessSparseAxes) { // check if we want all dimensions
519 Double_t triggerEntries[6] = {fCent,jetPt,trackpt,deta,dphijh,leadjet};
520 fhnJH->Fill(triggerEntries);
522 Double_t triggerEntries[8] = {fCent,jetPt,trackpt,deta,dphijh,leadjet,0.0,dR};
523 fhnJH->Fill(triggerEntries);
528 fHistJetHTT[centbin][iptjet][ieta]->Fill(dphijh,trackpt);
534 //Prepare to do event mixing
536 // create a list of reduced objects. This speeds up processing and reduces memory consumption for the event pool
537 TObjArray* tracksClone = 0x0;
539 if(fDoEventMixing>0){
543 // 1. First get an event pool corresponding in mult (cent) and
544 // zvertex to the current event. Once initialized, the pool
545 // should contain nMix (reduced) events. This routine does not
546 // pre-scan the chain. The first several events of every chain
547 // will be skipped until the needed pools are filled to the
548 // specified depth. If the pool categories are not too rare, this
549 // should not be a problem. If they are rare, you could lose
552 // 2. Collect the whole pool's content of tracks into one TObjArray
553 // (bgTracks), which is effectively a single background super-event.
555 // 3. The reduced and bgTracks arrays must both be passed into
556 // FillCorrelations(). Also nMix should be passed in, so a weight
557 // of 1./nMix can be applied.
559 UInt_t trigger = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
560 // if event was not selected (triggered) for any reseason (should never happen) then return
561 if (trigger==0) return kTRUE;
563 AliEventPool* pool = fPoolMgr->GetEventPool(fCent, zVtx);
566 AliFatal(Form("No pool found for centrality = %f, zVtx = %f", fCent, zVtx));
570 if(trigger & fTriggerEventType) {
571 //check for a trigger jet
572 if (pool->IsReady() || pool->NTracksInPool() > fNMIXtracks || pool->GetCurrentNEvents() >= fNMIXevents) {
574 for (Int_t ijet = 0; ijet < Njets; ijet++){
576 if (ijet==ijethi) leadjet=1;
578 AliEmcalJet *jet = static_cast<AliEmcalJet*>(jets->At(ijet));
581 if(!AcceptthisJet(jet)) continue;
583 Double_t jetPt = jet->Pt();
584 Double_t jetphi = jet->Phi();
585 Double_t jeteta=jet->Eta();
587 // make sure event contains jet above our threshold (reduce stats of sparse)
588 if (jetPt < 15) continue;
590 Int_t nMix = pool->GetCurrentNEvents();
592 //Fill for biased jet triggers only
593 if ((jet->MaxTrackPt()>fTrkBias) || (jet->MaxClusterPt()>fClusBias)){
595 // Fill mixed-event histos here
596 for (Int_t jMix=0; jMix<nMix; jMix++) {
597 TObjArray* bgTracks = pool->GetEvent(jMix);
598 const Int_t Nbgtrks = bgTracks->GetEntries();
600 for(Int_t ibg=0; ibg<Nbgtrks; ibg++){
601 AliPicoTrack *part = static_cast<AliPicoTrack*>(bgTracks->At(ibg));
603 if(TMath::Abs(part->Eta())>0.9) continue;
604 if(part->Pt()<0.15) continue;
606 Double_t DEta = part->Eta()-jeteta;
607 Double_t DPhi = RelativePhi(jetphi,part->Phi());
609 Double_t DR=TMath::Sqrt(DPhi*DPhi+DEta*DEta);
610 if(DPhi<-0.5*TMath::Pi()) DPhi+=2.*TMath::Pi();
611 if(DPhi>3./2.*TMath::Pi()) DPhi-=2.*TMath::Pi();
612 if(fDoLessSparseAxes) { // check if we want all the axis filled
613 Double_t triggerEntries[6] = {fCent,jetPt,part->Pt(),DEta,DPhi,leadjet};
614 fhnMixedEvents->Fill(triggerEntries,1./nMix);
616 Double_t triggerEntries[8] = {fCent,jetPt,part->Pt(),DEta,DPhi,leadjet,0.0,DR};
617 fhnMixedEvents->Fill(triggerEntries,1./nMix);
626 if(trigger & fMixingEventType) {
627 tracksClone = CloneAndReduceTrackList(tracks);
629 //update pool if jet in event or not
630 pool->UpdatePool(tracksClone);
633 } // end of event mixing
638 //________________________________________________________________________
639 void AliAnalysisTaskEmcalJetHMEC::Terminate(Option_t *)
644 //________________________________________________________________________
645 Int_t AliAnalysisTaskEmcalJetHMEC::AcceptthisJet(AliEmcalJet *jet)
647 //applies all jet cuts except pt
648 float jetphi = jet->Phi();
649 if (jetphi>TMath::Pi())
650 jetphi = jetphi-2*TMath::Pi();
652 if ((jet->Phi()<fPhimin)||(jet->Phi()>fPhimax))
654 if ((jet->Eta()<fEtamin)||(jet->Eta()>fEtamax))
656 if (jet->Area()<fAreacut)
658 //prevents 0 area jets from sneaking by when area cut == 0
661 //exclude jets with extremely high pt tracks which are likely misreconstructed
662 if(jet->MaxTrackPt()>100)
665 //passed all above cuts
669 //________________________________________________________________________
671 THnSparse* AliAnalysisTaskEmcalJetHMEC::NewTHnSparseF(const char* name, UInt_t entries){
672 // generate new THnSparseF, axes are defined in GetDimParams()
675 UInt_t tmp = entries;
678 tmp = tmp &~ -tmp; // clear lowest bit
681 TString hnTitle(name);
682 const Int_t dim = count;
689 while(c<dim && i<32){
693 GetDimParams(i, label, nbins[c], xmin[c], xmax[c]);
694 hnTitle += Form(";%s",label.Data());
702 return new THnSparseF(name, hnTitle.Data(), dim, nbins, xmin, xmax);
705 void AliAnalysisTaskEmcalJetHMEC::GetDimParams(Int_t iEntry, TString &label, Int_t &nbins, Double_t &xmin, Double_t &xmax)
707 // stores label and binning of axis for THnSparse
709 const Double_t pi = TMath::Pi();
714 label = "V0 centrality (%)";
721 label = "corrected jet pt";
728 if(fDoWiderTrackBin) {
756 label = "leading jet";
763 label = "trigger track";
777 label = "leading track";
785 //_________________________________________________
786 // From CF event mixing code PhiCorrelations
787 TObjArray* AliAnalysisTaskEmcalJetHMEC::CloneAndReduceTrackList(TObjArray* tracks)
789 // clones a track list by using AliPicoTrack which uses much less memory (used for event mixing)
791 TObjArray* tracksClone = new TObjArray;
792 tracksClone->SetOwner(kTRUE);
794 for (Int_t i=0; i<tracks->GetEntriesFast(); i++)
796 AliVParticle* particle = (AliVParticle*) tracks->At(i);
797 if(TMath::Abs(particle->Eta())>fTrkEta) continue;
798 if(particle->Pt()<0.15) continue;
800 Double_t trackpt=particle->Pt();
803 if(trackpt<0.5) hadbin=0;
804 else if(trackpt<1) hadbin=1;
805 else if(trackpt<2) hadbin=2;
806 else if(trackpt<3) hadbin=3;
807 else if(trackpt<5) hadbin=4;
808 else if(trackpt<8) hadbin=5;
809 else if(trackpt<20) hadbin=6;
811 if(hadbin>-1) fHistTrackEtaPhi[hadbin]->Fill(particle->Eta(),particle->Phi());
813 tracksClone->Add(new AliPicoTrack(particle->Pt(), particle->Eta(), particle->Phi(), particle->Charge(), 0, 0, 0, 0));