1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
17 #include "Riostream.h"
18 #include "AliFlowEventSimpleMaker.h"
19 #include "AliFlowEventSimple.h"
20 #include "AliFlowTrackSimple.h"
22 #include "TParticle.h"
23 #include "AliMCEvent.h"
24 #include "AliMCParticle.h"
25 #include "AliESDEvent.h"
26 #include "AliESDtrack.h"
27 #include "AliAODEvent.h"
28 #include "AliAODTrack.h"
29 #include "../../CORRFW/AliCFManager.h"
31 // AliFlowEventSimpleMaker:
32 // Class to fill the AliFlowEventSimple
33 // with AliFlowTrackSimple objects
34 // Has fill methods for TTree, AliMCEvent, AliESDEvent and AliAODEvent
35 // author: N. van der Kolk (kolk@nikhef.nl)
37 ClassImp(AliFlowEventSimpleMaker)
38 //-----------------------------------------------------------------------
39 AliFlowEventSimpleMaker::AliFlowEventSimpleMaker()
44 //-----------------------------------------------------------------------
45 AliFlowEventSimpleMaker::~AliFlowEventSimpleMaker()
50 //-----------------------------------------------------------------------
51 AliFlowEventSimple* AliFlowEventSimpleMaker::FillTracks(TTree* anInput)
53 //fills the event from a TTree of kinematic.root files
54 Bool_t bDoubleLoop = kFALSE;
56 Int_t iNumberOfInputTracks = anInput->GetEntries() ;
57 //cerr<<"iNumberOfInputTracks = "<<iNumberOfInputTracks<<endl;
58 TParticle* pParticle = new TParticle();
59 anInput->SetBranchAddress("Particles",&pParticle);
60 // AliFlowEventSimple* pEvent = new AliFlowEventSimple(iNumberOfInputTracks);
61 AliFlowEventSimple* pEvent = new AliFlowEventSimple(10);
62 //cerr<<pEvent<<" pEvent "<<endl;
64 Int_t iN = iNumberOfInputTracks;
65 // Int_t iN = 576; //multiplicity for chi=1.5
66 // Int_t iN = 256; //multiplicity for chi=1
67 // Int_t iN = 164; //multiplicity for chi=0.8
68 Int_t iGoodTracks = 0;
70 Int_t iSelParticlesDiff = 0;
71 Int_t iSelParticlesInt = 0;
75 while (iGoodTracks < iN*2 && itrkN < iNumberOfInputTracks)
77 anInput->GetEntry(itrkN); //get input particle
79 if(TMath::Abs(pParticle->Eta()) < 0.9)
81 // Int_t fLoop = floor(2.*fParticle->Pt())+2;
82 // for(Int_t d=0;d<fLoop;d++)
83 for(Int_t d=0;d<2;d++)
86 TMath::Abs(pParticle->GetPdgCode()) == 211
87 // TMath::Abs(pParticle->GetPdgCode()) == 211 ||
88 // TMath::Abs(pParticle->GetPdgCode()) == 321 ||
89 // TMath::Abs(pParticle->GetPdgCode()) == 2212
92 AliFlowTrackSimple* pTrack = new AliFlowTrackSimple();
93 pTrack->SetPt(pParticle->Pt() );
94 pTrack->SetEta(pParticle->Eta() );
95 pTrack->SetPhi(pParticle->Phi() );
96 pTrack->SetForIntegratedFlow(kTRUE);
97 pTrack->SetForDifferentialFlow(kTRUE);
99 if (pTrack->UseForIntegratedFlow())
100 { iSelParticlesInt++; }
101 if (pTrack->UseForDifferentialFlow())
102 { iSelParticlesDiff++; }
104 pEvent->TrackCollection()->Add(pTrack);
108 TMath::Abs(pParticle->GetPdgCode()) == 2212
111 AliFlowTrackSimple* pTrack = new AliFlowTrackSimple();
112 pTrack->SetPt(pParticle->Pt() );
113 pTrack->SetEta(pParticle->Eta() );
114 pTrack->SetPhi(pParticle->Phi() );
115 pTrack->SetForIntegratedFlow(kFALSE);
116 pTrack->SetForDifferentialFlow(kTRUE);
118 if (pTrack->UseForIntegratedFlow())
119 { iSelParticlesInt++; }
120 if (pTrack->UseForDifferentialFlow())
121 { iSelParticlesDiff++; }
123 pEvent->TrackCollection()->Add(pTrack);
133 while (iGoodTracks < iN && itrkN < iNumberOfInputTracks) {
134 anInput->GetEntry(itrkN); //get input particle
136 if (TMath::Abs(pParticle->Eta()) < 0.2)
139 TMath::Abs(pParticle->GetPdgCode()) == 211
140 // TMath::Abs(pParticle->GetPdgCode()) == 211 ||
141 // TMath::Abs(pParticle->GetPdgCode()) == 321 ||
142 // TMath::Abs(pParticle->GetPdgCode()) == 2212
145 AliFlowTrackSimple* pTrack = new AliFlowTrackSimple();
146 pTrack->SetPt(pParticle->Pt() );
147 pTrack->SetEta(pParticle->Eta() );
148 pTrack->SetPhi(pParticle->Phi() );
149 pTrack->SetForIntegratedFlow(kTRUE);
150 pTrack->SetForDifferentialFlow(kTRUE);
152 if (pTrack->UseForIntegratedFlow())
153 { iSelParticlesInt++; }
154 if (pTrack->UseForDifferentialFlow())
155 { iSelParticlesDiff++; }
157 pEvent->TrackCollection()->Add(pTrack) ;
160 TMath::Abs(pParticle->GetPdgCode()) == 211
163 AliFlowTrackSimple* pTrack = new AliFlowTrackSimple();
164 pTrack->SetPt(pParticle->Pt() );
165 pTrack->SetEta(pParticle->Eta() );
166 pTrack->SetPhi(pParticle->Phi() );
167 pTrack->SetForIntegratedFlow(kFALSE);
168 pTrack->SetForDifferentialFlow(kTRUE);
170 if (pTrack->UseForIntegratedFlow())
171 { iSelParticlesInt++; }
172 if (pTrack->UseForDifferentialFlow())
173 { iSelParticlesDiff++; }
175 pEvent->TrackCollection()->Add(pTrack);
184 pEvent-> SetEventNSelTracksIntFlow(iSelParticlesInt);
185 pEvent->SetNumberOfTracks(iGoodTracks);
186 cout<<" iGoodTracks = "<<iGoodTracks<<endl;
187 //cout << " iSelectedTracksInt = " << iSelParticlesInt << endl;
192 //-----------------------------------------------------------------------
193 AliFlowEventSimple* AliFlowEventSimpleMaker::FillTracks(AliMCEvent* anInput)
195 //Fills the event from the MC kinematic information
197 Int_t iNumberOfInputTracks = anInput->GetNumberOfTracks() ;
198 cerr<<"anInput->GetNumberOfTracks() = "<<iNumberOfInputTracks<<endl;
200 AliFlowEventSimple* pEvent = new AliFlowEventSimple(10);
202 //Int_t iN = 256; //multiplicity for chi=1
203 Int_t iN = iNumberOfInputTracks;
204 Int_t iGoodTracks = 0;
206 Int_t iSelParticlesDiff = 0;
207 Int_t iSelParticlesInt = 0;
210 while (iGoodTracks < iN && itrkN < iNumberOfInputTracks) {
211 AliMCParticle* pParticle = anInput->GetTrack(itrkN); //get input particle
213 if (TMath::Abs(pParticle->Eta()) < 0.9)
216 TMath::Abs(pParticle->Particle()->GetPdgCode()) == 211
217 // TMath::Abs(pParticle->Particle()->GetPdgCode()) == 211 ||
218 // TMath::Abs(pParticle->Particle()->GetPdgCode()) == 321 ||
219 // TMath::Abs(pParticle->Particle()->GetPdgCode()) == 2212
222 AliFlowTrackSimple* pTrack = new AliFlowTrackSimple();
223 pTrack->SetPt(pParticle->Pt() );
224 pTrack->SetEta(pParticle->Eta() );
225 pTrack->SetPhi(pParticle->Phi() );
226 pTrack->SetForIntegratedFlow(kTRUE);
227 pTrack->SetForDifferentialFlow(kTRUE);
229 if (pTrack->UseForIntegratedFlow())
230 { iSelParticlesInt++; }
231 if (pTrack->UseForDifferentialFlow())
232 { iSelParticlesDiff++; }
234 pEvent->TrackCollection()->Add(pTrack) ;
237 TMath::Abs(pParticle->Particle()->GetPdgCode()) == 211
240 AliFlowTrackSimple* pTrack = new AliFlowTrackSimple();
241 pTrack->SetPt(pParticle->Pt() );
242 pTrack->SetEta(pParticle->Eta() );
243 pTrack->SetPhi(pParticle->Phi() );
244 pTrack->SetForIntegratedFlow(kFALSE);
245 pTrack->SetForDifferentialFlow(kTRUE);
247 if (pTrack->UseForIntegratedFlow())
248 { iSelParticlesInt++; }
249 if (pTrack->UseForDifferentialFlow())
250 { iSelParticlesDiff++; }
252 pEvent->TrackCollection()->Add(pTrack);
260 pEvent-> SetEventNSelTracksIntFlow(iSelParticlesInt);
261 pEvent->SetNumberOfTracks(iGoodTracks);
262 cout<<" iGoodTracks = "<<iGoodTracks<<endl;
263 //cout << " iSelectedTracksInt = " << iSelParticlesInt << endl;
269 //-----------------------------------------------------------------------
270 AliFlowEventSimple* AliFlowEventSimpleMaker::FillTracks(AliMCEvent* anInput, AliCFManager* intCFManager, AliCFManager* diffCFManager)
272 //Fills the event from the MC kinematic information
274 Int_t iNumberOfInputTracks = anInput->GetNumberOfTracks() ;
275 cerr<<"anInput->GetNumberOfTracks() = "<<iNumberOfInputTracks<<endl;
276 if (iNumberOfInputTracks==-1) {
277 cout<<"Skipping Event -- No MC information available for this event"<<endl;
281 AliFlowEventSimple* pEvent = new AliFlowEventSimple(10);
283 Int_t iN = iNumberOfInputTracks; //maximum number of tracks in AliFlowEventSimple
284 Int_t iGoodTracks = 0; //number of good tracks
285 Int_t itrkN = 0; //track counter
286 Int_t iSelParticlesDiff = 0; //number of tracks selected for Diff
287 Int_t iSelParticlesInt = 0; //number of tracks selected for Int
291 while (iGoodTracks < iN && itrkN < iNumberOfInputTracks) {
293 AliMCParticle* pParticle = anInput->GetTrack(itrkN);
294 //make new AliFlowTrackSimple
295 AliFlowTrackSimple* pTrack = new AliFlowTrackSimple();
296 pTrack->SetPt(pParticle->Pt() );
297 pTrack->SetEta(pParticle->Eta() );
298 pTrack->SetPhi(pParticle->Phi() );
300 //check if pParticle passes the cuts
301 if (intCFManager->CheckParticleCuts(AliCFManager::kPartGenCuts,pParticle)) {
302 pTrack->SetForIntegratedFlow(kTRUE);
303 //cout<<"integrated selection. PID = "<<pParticle->Particle()->GetPdgCode()<<endl;
305 if (diffCFManager->CheckParticleCuts(AliCFManager::kPartGenCuts,pParticle)) {
306 pTrack->SetForDifferentialFlow(kTRUE);
307 //cout<<"differential selection. PID = "<<pParticle->Particle()->GetPdgCode()<<endl;
310 //check if any bits are set
311 TBits bFlowBits = pTrack->GetFlowBits();
312 if (bFlowBits.CountBits() ==0) {
313 delete pTrack; } //track will not be used anymore
315 pEvent->TrackCollection()->Add(pTrack) ;
318 if (pTrack->UseForIntegratedFlow())
319 { iSelParticlesInt++; }
320 if (pTrack->UseForDifferentialFlow())
321 { iSelParticlesDiff++; }
327 pEvent-> SetEventNSelTracksIntFlow(iSelParticlesInt);
328 pEvent-> SetNumberOfTracks(iGoodTracks);
329 cout<<" iGoodTracks = "<<iGoodTracks<<endl;
330 //cout << " iSelectedTracksInt = " << iSelParticlesInt << endl;
336 //-----------------------------------------------------------------------
337 AliFlowEventSimple* AliFlowEventSimpleMaker::FillTracks(AliESDEvent* anInput)
339 //Fills the event from the ESD
341 Int_t iNumberOfInputTracks = anInput->GetNumberOfTracks() ;
342 cerr<<"anInput->GetNumberOfTracks() = "<<iNumberOfInputTracks<<endl;
344 AliFlowEventSimple* pEvent = new AliFlowEventSimple(10);
346 //Int_t iN = 256; //multiplicity for chi=1
347 Int_t iN = iNumberOfInputTracks;
348 Int_t iGoodTracks = 0;
350 Int_t iSelParticlesDiff = 0;
351 Int_t iSelParticlesInt = 0;
355 while (iGoodTracks < iN && itrkN < iNumberOfInputTracks) {
356 AliESDtrack* pParticle = anInput->GetTrack(itrkN); //get input particle
358 if (TMath::Abs(pParticle->Eta()) < 0.9)
360 AliFlowTrackSimple* pTrack = new AliFlowTrackSimple();
361 pTrack->SetPt(pParticle->Pt() );
362 pTrack->SetEta(pParticle->Eta() );
363 pTrack->SetPhi(pParticle->Phi() );
364 pTrack->SetForIntegratedFlow(kTRUE);
365 pTrack->SetForDifferentialFlow(kTRUE);
367 if (pTrack->UseForIntegratedFlow())
368 { iSelParticlesInt++; }
369 if (pTrack->UseForDifferentialFlow())
370 { iSelParticlesDiff++; }
372 pEvent->TrackCollection()->Add(pTrack) ;
378 pEvent-> SetEventNSelTracksIntFlow(iSelParticlesInt);
379 pEvent->SetNumberOfTracks(iGoodTracks);
380 cout<<" iGoodTracks = "<<iGoodTracks<<endl;
381 //cout << " iSelectedTracksInt = " << iSelParticlesInt << endl;
388 //-----------------------------------------------------------------------
389 AliFlowEventSimple* AliFlowEventSimpleMaker::FillTracks(AliESDEvent* anInput, AliCFManager* intCFManager, AliCFManager* diffCFManager)
391 //Fills the event from the ESD
393 Int_t iNumberOfInputTracks = anInput->GetNumberOfTracks() ;
394 cerr<<"anInput->GetNumberOfTracks() = "<<iNumberOfInputTracks<<endl;
396 AliFlowEventSimple* pEvent = new AliFlowEventSimple(10);
398 Int_t iN = iNumberOfInputTracks; //maximum number of tracks in AliFlowEventSimple
399 Int_t iGoodTracks = 0; //number of good tracks
400 Int_t itrkN = 0; //track counter
401 Int_t iSelParticlesDiff = 0; //number of tracks selected for Diff
402 Int_t iSelParticlesInt = 0; //number of tracks selected for Int
405 while (iGoodTracks < iN && itrkN < iNumberOfInputTracks) {
406 AliESDtrack* pParticle = anInput->GetTrack(itrkN); //get input particle
407 //make new AliFLowTrackSimple
408 AliFlowTrackSimple* pTrack = new AliFlowTrackSimple();
409 pTrack->SetPt(pParticle->Pt() );
410 pTrack->SetEta(pParticle->Eta() );
411 pTrack->SetPhi(pParticle->Phi() );
412 //check if pParticle passes the cuts
414 if (intCFManager->CheckParticleCuts(AliCFManager::kPartRecCuts,pParticle) &&
415 intCFManager->CheckParticleCuts(AliCFManager::kPartSelCuts,pParticle)) {
416 pTrack->SetForIntegratedFlow(kTRUE);
418 if (diffCFManager->CheckParticleCuts(AliCFManager::kPartRecCuts,pParticle) &&
419 diffCFManager->CheckParticleCuts(AliCFManager::kPartSelCuts,pParticle)) {
420 pTrack->SetForDifferentialFlow(kTRUE);}
422 //check if any bits are set
423 TBits bFlowBits = pTrack->GetFlowBits();
424 if (bFlowBits.CountBits() ==0) {
425 delete pTrack; } //track will not be used anymore
427 pEvent->TrackCollection()->Add(pTrack) ;
430 if (pTrack->UseForIntegratedFlow())
431 { iSelParticlesInt++; }
432 if (pTrack->UseForDifferentialFlow())
433 { iSelParticlesDiff++; }
440 pEvent-> SetEventNSelTracksIntFlow(iSelParticlesInt);
441 pEvent->SetNumberOfTracks(iGoodTracks);
442 cout<<" iGoodTracks = "<<iGoodTracks<<endl;
443 //cout << " iSelectedTracksInt = " << iSelParticlesInt << endl;
449 //-----------------------------------------------------------------------
450 AliFlowEventSimple* AliFlowEventSimpleMaker::FillTracks(AliAODEvent* anInput)
452 //Fills the event from the AOD
454 Int_t iNumberOfInputTracks = anInput->GetNumberOfTracks() ;
455 cerr<<"anInput->GetNumberOfTracks() = "<<iNumberOfInputTracks<<endl;
457 AliFlowEventSimple* pEvent = new AliFlowEventSimple(10);
459 //Int_t iN = 256; //multiplicity for chi=1
460 Int_t iN = iNumberOfInputTracks;
461 Int_t iGoodTracks = 0;
463 Int_t iSelParticlesDiff = 0;
464 Int_t iSelParticlesInt = 0;
467 while (iGoodTracks < iN && itrkN < iNumberOfInputTracks) {
468 AliAODTrack* pParticle = anInput->GetTrack(itrkN); //get input particle
470 if (TMath::Abs(pParticle->Eta()) < 0.9)
472 AliFlowTrackSimple* pTrack = new AliFlowTrackSimple();
473 pTrack->SetPt(pParticle->Pt() );
474 pTrack->SetEta(pParticle->Eta() );
475 pTrack->SetPhi(pParticle->Phi() );
476 pTrack->SetForIntegratedFlow(kTRUE);
477 pTrack->SetForDifferentialFlow(kTRUE);
479 if (pTrack->UseForIntegratedFlow())
480 { iSelParticlesInt++; }
481 if (pTrack->UseForDifferentialFlow())
482 { iSelParticlesDiff++; }
484 pEvent->TrackCollection()->Add(pTrack) ;
490 pEvent-> SetEventNSelTracksIntFlow(iSelParticlesInt);
491 pEvent->SetNumberOfTracks(iGoodTracks);
492 cout<<" iGoodTracks = "<<iGoodTracks<<endl;
493 //cout << " iSelectedTracksInt = " << iSelParticlesInt << endl;
499 //-----------------------------------------------------------------------
500 AliFlowEventSimple* AliFlowEventSimpleMaker::FillTracks(AliAODEvent* anInput, AliCFManager* intCFManager, AliCFManager* diffCFManager)
502 //Fills the event from the AOD
504 Int_t iNumberOfInputTracks = anInput->GetNumberOfTracks() ;
505 cerr<<"anInput->GetNumberOfTracks() = "<<iNumberOfInputTracks<<endl;
507 AliFlowEventSimple* pEvent = new AliFlowEventSimple(10);
509 Int_t iN = iNumberOfInputTracks; //maximum number of tracks in AliFlowEventSimple
510 Int_t iGoodTracks = 0; //number of good tracks
511 Int_t itrkN = 0; //track counter
512 Int_t iSelParticlesDiff = 0; //number of tracks selected for Diff
513 Int_t iSelParticlesInt = 0; //number of tracks selected for Int
516 while (iGoodTracks < iN && itrkN < iNumberOfInputTracks) {
517 AliAODTrack* pParticle = anInput->GetTrack(itrkN); //get input particle
518 //make new AliFlowTrackSimple
519 AliFlowTrackSimple* pTrack = new AliFlowTrackSimple();
520 pTrack->SetPt(pParticle->Pt() );
521 pTrack->SetEta(pParticle->Eta() );
522 pTrack->SetPhi(pParticle->Phi() );
524 //check if pParticle passes the cuts
525 if (intCFManager->CheckParticleCuts(AliCFManager::kPartRecCuts,pParticle) &&
526 intCFManager->CheckParticleCuts(AliCFManager::kPartSelCuts,pParticle)) {
527 pTrack->SetForIntegratedFlow(kTRUE); }
528 if (diffCFManager->CheckParticleCuts(AliCFManager::kPartRecCuts,pParticle) &&
529 diffCFManager->CheckParticleCuts(AliCFManager::kPartSelCuts,pParticle)) {
530 pTrack->SetForDifferentialFlow(kTRUE);}
532 //check if any bits are set
533 TBits bFlowBits = pTrack->GetFlowBits();
534 if (bFlowBits.CountBits() ==0) {
535 delete pTrack; } //track will not be used anymore
537 pEvent->TrackCollection()->Add(pTrack) ;
540 if (pTrack->UseForIntegratedFlow())
541 { iSelParticlesInt++; }
542 if (pTrack->UseForDifferentialFlow())
543 { iSelParticlesDiff++; }
550 pEvent-> SetEventNSelTracksIntFlow(iSelParticlesInt);
551 pEvent->SetNumberOfTracks(iGoodTracks);
552 cout<<" iGoodTracks = "<<iGoodTracks<<endl;
553 //cout << " iSelectedTracksInt = " << iSelParticlesInt << endl;
558 //-----------------------------------------------------------------------
559 AliFlowEventSimple* AliFlowEventSimpleMaker::FillTracks(AliESDEvent* anInput, AliMCEvent* anInputMc, Int_t anOption)
561 //fills the event with tracks from the ESD and kinematics from the MC info via the track label
563 if (!(anOption ==0 || anOption ==1)) {
564 cout<<"WRONG OPTION IN AliFlowEventSimpleMaker::FillTracks(AliESDEvent* anInput, AliMCEvent* anInputMc, Int_t anOption)"<<endl;
568 Int_t iNumberOfInputTracks = anInput->GetNumberOfTracks() ;
569 cerr<<"anInput->GetNumberOfTracks() = "<<iNumberOfInputTracks<<endl;
571 AliFlowEventSimple* pEvent = new AliFlowEventSimple(10);
573 //Int_t iN = 256; //multiplicity for chi=1
574 Int_t iN = iNumberOfInputTracks;
575 Int_t iGoodTracks = 0;
577 Int_t iSelParticlesDiff = 0;
578 Int_t iSelParticlesInt = 0;
581 while (iGoodTracks < iN && itrkN < iNumberOfInputTracks) {
582 AliESDtrack* pParticle = anInput->GetTrack(itrkN); //get input particle
584 Int_t iLabel = pParticle->GetLabel();
585 //match to mc particle
586 AliMCParticle* pMcParticle = anInputMc->GetTrack(TMath::Abs(iLabel));
589 if (TMath::Abs(pParticle->GetLabel())!=pMcParticle->Label()) cout<<"pParticle->GetLabel()!=pMcParticle->Label() "<<pParticle->GetLabel()<<" "<<pMcParticle->Label()<<endl;
592 if (TMath::Abs(pParticle->Eta()) < 0.2)
595 TMath::Abs(pMcParticle->Particle()->GetPdgCode()) == 211 //pions
596 // TMath::Abs(pMcParticle->Particle()->GetPdgCode()) == 211 ||
597 // TMath::Abs(pMcParticle->Particle()->GetPdgCode()) == 321 ||
598 // TMath::Abs(pMcParticle->Particle()->GetPdgCode()) == 2212
601 AliFlowTrackSimple* pTrack = new AliFlowTrackSimple();
602 if(anOption == 0) { //take the PID from the MC & the kinematics from the ESD
603 pTrack->SetPt(pParticle->Pt() );
604 pTrack->SetEta(pParticle->Eta() );
605 pTrack->SetPhi(pParticle->Phi() );
606 pTrack->SetForIntegratedFlow(kTRUE);
607 pTrack->SetForDifferentialFlow(kTRUE);
609 else if (anOption == 1) { //take the PID and kinematics from the MC
610 pTrack->SetPt(pMcParticle->Pt() );
611 pTrack->SetEta(pMcParticle->Eta() );
612 pTrack->SetPhi(pMcParticle->Phi() );
613 pTrack->SetForIntegratedFlow(kTRUE);
614 pTrack->SetForDifferentialFlow(kTRUE);
616 else { cout<<"Not a valid option"<<endl; }
617 if (pTrack->UseForIntegratedFlow())
618 { iSelParticlesInt++; }
619 if (pTrack->UseForDifferentialFlow())
620 { iSelParticlesDiff++; }
622 pEvent->TrackCollection()->Add(pTrack) ;
628 pEvent-> SetEventNSelTracksIntFlow(iSelParticlesInt);
629 pEvent->SetNumberOfTracks(iGoodTracks);
630 cout<<" iGoodTracks = "<<iGoodTracks<<endl;
631 //cout << " iSelectedTracksInt = " << iSelParticlesInt << endl;
637 //-----------------------------------------------------------------------
638 AliFlowEventSimple* AliFlowEventSimpleMaker::FillTracks(AliESDEvent* anInput, AliMCEvent* anInputMc, AliCFManager* intCFManager, AliCFManager* diffCFManager, Int_t anOption)
640 //fills the event with tracks from the ESD and kinematics from the MC info via the track label
643 if (!(anOption ==0 || anOption ==1)) {
644 cout<<"WRONG OPTION IN AliFlowEventSimpleMaker::FillTracks(AliESDEvent* anInput, AliMCEvent* anInputMc, Int_t anOption)"<<endl;
648 Int_t iNumberOfInputTracks = anInput->GetNumberOfTracks() ;
649 cerr<<"anInput->GetNumberOfTracks() = "<<iNumberOfInputTracks<<endl;
650 Int_t iNumberOfInputTracksMC = anInputMc->GetNumberOfTracks() ;
651 cerr<<"anInputMc->GetNumberOfTracks() = "<<iNumberOfInputTracksMC<<endl;
652 if (iNumberOfInputTracksMC==-1) {
653 cout<<"Skipping Event -- No MC information available for this event"<<endl;
657 AliFlowEventSimple* pEvent = new AliFlowEventSimple(10);
659 Int_t iN = iNumberOfInputTracks; //maximum number of tracks in AliFlowEventSimple
660 Int_t iGoodTracks = 0; //number of good tracks
661 Int_t itrkN = 0; //track counter
662 Int_t iSelParticlesDiff = 0; //number of tracks selected for Diff
663 Int_t iSelParticlesInt = 0; //number of tracks selected for Int
667 while (iGoodTracks < iN && itrkN < iNumberOfInputTracks) {
668 AliESDtrack* pParticle = anInput->GetTrack(itrkN); //get input particle
670 Int_t iLabel = pParticle->GetLabel();
671 //match to mc particle
672 AliMCParticle* pMcParticle = anInputMc->GetTrack(TMath::Abs(iLabel));
675 if (TMath::Abs(pParticle->GetLabel())!=pMcParticle->Label()) cout<<"pParticle->GetLabel()!=pMcParticle->Label() "<<pParticle->GetLabel()<<" "<<pMcParticle->Label()<<endl;
677 //make new AliFlowTrackSimple
678 AliFlowTrackSimple* pTrack = new AliFlowTrackSimple();
679 if(anOption == 0) { //take the PID from the MC & the kinematics from the ESD
680 pTrack->SetPt(pParticle->Pt() );
681 pTrack->SetEta(pParticle->Eta() );
682 pTrack->SetPhi(pParticle->Phi() );
684 else if (anOption == 1) { //take the PID and kinematics from the MC
685 pTrack->SetPt(pMcParticle->Pt() );
686 pTrack->SetEta(pMcParticle->Eta() );
687 pTrack->SetPhi(pMcParticle->Phi() );
689 else { cout<<"Not a valid option"<<endl; }
691 //check if pParticle passes the cuts
693 //cout<<"take the PID from the MC & the kinematics from the ESD"<<endl;
694 if (intCFManager->CheckParticleCuts(AliCFManager::kPartGenCuts,pMcParticle,"mcGenCuts1") &&
695 intCFManager->CheckParticleCuts(AliCFManager::kPartRecCuts,pParticle)) {
696 pTrack->SetForIntegratedFlow(kTRUE); }
697 if (diffCFManager->CheckParticleCuts(AliCFManager::kPartGenCuts,pMcParticle,"mcGenCuts2") &&
698 diffCFManager->CheckParticleCuts(AliCFManager::kPartRecCuts,pParticle)) {
699 pTrack->SetForDifferentialFlow(kTRUE);}
701 else if (anOption == 1) {
702 //cout<<"take the PID and kinematics from the MC"<<endl;
703 if (intCFManager->CheckParticleCuts(AliCFManager::kPartGenCuts,pMcParticle)) {
704 pTrack->SetForIntegratedFlow(kTRUE); }
705 if (diffCFManager->CheckParticleCuts(AliCFManager::kPartGenCuts,pMcParticle)) {
706 pTrack->SetForDifferentialFlow(kTRUE);}
708 else { cout<<"Not a valid option"<<endl; }
710 //check if any bits are set
711 TBits bFlowBits = pTrack->GetFlowBits();
712 if (bFlowBits.CountBits() ==0) {
713 delete pTrack; } //track will not be used anymore
715 pEvent->TrackCollection()->Add(pTrack) ;
718 if (pTrack->UseForIntegratedFlow())
719 { iSelParticlesInt++; }
720 if (pTrack->UseForDifferentialFlow())
721 { iSelParticlesDiff++; }
728 pEvent-> SetEventNSelTracksIntFlow(iSelParticlesInt);
729 pEvent->SetNumberOfTracks(iGoodTracks);
730 cout<<" iGoodTracks = "<<iGoodTracks<<endl;
731 //cout << " iSelectedTracksInt = " << iSelParticlesInt << endl;