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;
277 AliFlowEventSimple* pEvent = new AliFlowEventSimple(10);
279 Int_t iN = iNumberOfInputTracks; //maximum number of tracks in AliFlowEventSimple
280 Int_t iGoodTracks = 0; //number of good tracks
281 Int_t itrkN = 0; //track counter
282 Int_t iSelParticlesDiff = 0; //number of tracks selected for Diff
283 Int_t iSelParticlesInt = 0; //number of tracks selected for Int
287 while (iGoodTracks < iN && itrkN < iNumberOfInputTracks) {
289 AliMCParticle* pParticle = anInput->GetTrack(itrkN);
290 //make new AliFlowTrackSimple
291 AliFlowTrackSimple* pTrack = new AliFlowTrackSimple();
292 pTrack->SetPt(pParticle->Pt() );
293 pTrack->SetEta(pParticle->Eta() );
294 pTrack->SetPhi(pParticle->Phi() );
296 //check if pParticle passes the cuts
297 if (intCFManager->CheckParticleCuts(AliCFManager::kPartGenCuts,pParticle)) {
298 pTrack->SetForIntegratedFlow(kTRUE);
299 //cout<<"integrated selection. PID = "<<pParticle->Particle()->GetPdgCode()<<endl;
301 if (diffCFManager->CheckParticleCuts(AliCFManager::kPartGenCuts,pParticle)) {
302 pTrack->SetForDifferentialFlow(kTRUE);
303 //cout<<"differential selection. PID = "<<pParticle->Particle()->GetPdgCode()<<endl;
306 //check if any bits are set
307 TBits bFlowBits = pTrack->GetFlowBits();
308 if (bFlowBits.CountBits() != 0) {
309 //cout<<"The number of bits set = "<<bFlowBits.CountBits()<<endl;
310 pEvent->TrackCollection()->Add(pTrack) ;
313 if (pTrack->UseForIntegratedFlow())
314 { iSelParticlesInt++; }
315 if (pTrack->UseForDifferentialFlow())
316 { iSelParticlesDiff++; }
322 pEvent-> SetEventNSelTracksIntFlow(iSelParticlesInt);
323 pEvent-> SetNumberOfTracks(iGoodTracks);
324 cout<<" iGoodTracks = "<<iGoodTracks<<endl;
325 cout << " iSelectedTracksInt = " << iSelParticlesInt << endl;
331 //-----------------------------------------------------------------------
332 AliFlowEventSimple* AliFlowEventSimpleMaker::FillTracks(AliESDEvent* anInput)
334 //Fills the event from the ESD
336 Int_t iNumberOfInputTracks = anInput->GetNumberOfTracks() ;
337 cerr<<"anInput->GetNumberOfTracks() = "<<iNumberOfInputTracks<<endl;
339 AliFlowEventSimple* pEvent = new AliFlowEventSimple(10);
341 //Int_t iN = 256; //multiplicity for chi=1
342 Int_t iN = iNumberOfInputTracks;
343 Int_t iGoodTracks = 0;
345 Int_t iSelParticlesDiff = 0;
346 Int_t iSelParticlesInt = 0;
350 while (iGoodTracks < iN && itrkN < iNumberOfInputTracks) {
351 AliESDtrack* pParticle = anInput->GetTrack(itrkN); //get input particle
353 if (TMath::Abs(pParticle->Eta()) < 0.9)
355 AliFlowTrackSimple* pTrack = new AliFlowTrackSimple();
356 pTrack->SetPt(pParticle->Pt() );
357 pTrack->SetEta(pParticle->Eta() );
358 pTrack->SetPhi(pParticle->Phi() );
359 pTrack->SetForIntegratedFlow(kTRUE);
360 pTrack->SetForDifferentialFlow(kTRUE);
362 if (pTrack->UseForIntegratedFlow())
363 { iSelParticlesInt++; }
364 if (pTrack->UseForDifferentialFlow())
365 { iSelParticlesDiff++; }
367 pEvent->TrackCollection()->Add(pTrack) ;
373 pEvent-> SetEventNSelTracksIntFlow(iSelParticlesInt);
374 pEvent->SetNumberOfTracks(iGoodTracks);
375 cout<<" iGoodTracks = "<<iGoodTracks<<endl;
376 cout << " iSelectedTracksInt = " << iSelParticlesInt << endl;
383 //-----------------------------------------------------------------------
384 AliFlowEventSimple* AliFlowEventSimpleMaker::FillTracks(AliESDEvent* anInput, AliCFManager* intCFManager, AliCFManager* diffCFManager)
386 //Fills the event from the ESD
388 Int_t iNumberOfInputTracks = anInput->GetNumberOfTracks() ;
389 cerr<<"anInput->GetNumberOfTracks() = "<<iNumberOfInputTracks<<endl;
391 AliFlowEventSimple* pEvent = new AliFlowEventSimple(10);
393 Int_t iN = iNumberOfInputTracks; //maximum number of tracks in AliFlowEventSimple
394 Int_t iGoodTracks = 0; //number of good tracks
395 Int_t itrkN = 0; //track counter
396 Int_t iSelParticlesDiff = 0; //number of tracks selected for Diff
397 Int_t iSelParticlesInt = 0; //number of tracks selected for Int
400 while (iGoodTracks < iN && itrkN < iNumberOfInputTracks) {
401 AliESDtrack* pParticle = anInput->GetTrack(itrkN); //get input particle
402 //make new AliFLowTrackSimple
403 AliFlowTrackSimple* pTrack = new AliFlowTrackSimple();
404 pTrack->SetPt(pParticle->Pt() );
405 pTrack->SetEta(pParticle->Eta() );
406 pTrack->SetPhi(pParticle->Phi() );
407 //check if pParticle passes the cuts
409 if (intCFManager->CheckParticleCuts(AliCFManager::kPartRecCuts,pParticle) &&
410 intCFManager->CheckParticleCuts(AliCFManager::kPartSelCuts,pParticle)) {
411 pTrack->SetForIntegratedFlow(kTRUE);
413 if (diffCFManager->CheckParticleCuts(AliCFManager::kPartRecCuts,pParticle) &&
414 diffCFManager->CheckParticleCuts(AliCFManager::kPartSelCuts,pParticle)) {
415 pTrack->SetForDifferentialFlow(kTRUE);}
417 //check if any bits are set
418 TBits bFlowBits = pTrack->GetFlowBits();
419 if (bFlowBits.CountBits() !=0) {
420 pEvent->TrackCollection()->Add(pTrack) ;
423 if (pTrack->UseForIntegratedFlow())
424 { iSelParticlesInt++; }
425 if (pTrack->UseForDifferentialFlow())
426 { iSelParticlesDiff++; }
432 pEvent-> SetEventNSelTracksIntFlow(iSelParticlesInt);
433 pEvent->SetNumberOfTracks(iGoodTracks);
434 cout<<" iGoodTracks = "<<iGoodTracks<<endl;
435 cout << " iSelectedTracksInt = " << iSelParticlesInt << endl;
441 //-----------------------------------------------------------------------
442 AliFlowEventSimple* AliFlowEventSimpleMaker::FillTracks(AliAODEvent* anInput)
444 //Fills the event from the AOD
446 Int_t iNumberOfInputTracks = anInput->GetNumberOfTracks() ;
447 cerr<<"anInput->GetNumberOfTracks() = "<<iNumberOfInputTracks<<endl;
449 AliFlowEventSimple* pEvent = new AliFlowEventSimple(10);
451 //Int_t iN = 256; //multiplicity for chi=1
452 Int_t iN = iNumberOfInputTracks;
453 Int_t iGoodTracks = 0;
455 Int_t iSelParticlesDiff = 0;
456 Int_t iSelParticlesInt = 0;
459 while (iGoodTracks < iN && itrkN < iNumberOfInputTracks) {
460 AliAODTrack* pParticle = anInput->GetTrack(itrkN); //get input particle
462 if (TMath::Abs(pParticle->Eta()) < 0.9)
464 AliFlowTrackSimple* pTrack = new AliFlowTrackSimple();
465 pTrack->SetPt(pParticle->Pt() );
466 pTrack->SetEta(pParticle->Eta() );
467 pTrack->SetPhi(pParticle->Phi() );
468 pTrack->SetForIntegratedFlow(kTRUE);
469 pTrack->SetForDifferentialFlow(kTRUE);
471 if (pTrack->UseForIntegratedFlow())
472 { iSelParticlesInt++; }
473 if (pTrack->UseForDifferentialFlow())
474 { iSelParticlesDiff++; }
476 pEvent->TrackCollection()->Add(pTrack) ;
482 pEvent-> SetEventNSelTracksIntFlow(iSelParticlesInt);
483 pEvent->SetNumberOfTracks(iGoodTracks);
484 cout<<" iGoodTracks = "<<iGoodTracks<<endl;
485 cout << " iSelectedTracksInt = " << iSelParticlesInt << endl;
491 //-----------------------------------------------------------------------
492 AliFlowEventSimple* AliFlowEventSimpleMaker::FillTracks(AliAODEvent* anInput, AliCFManager* intCFManager, AliCFManager* diffCFManager)
494 //Fills the event from the AOD
496 Int_t iNumberOfInputTracks = anInput->GetNumberOfTracks() ;
497 cerr<<"anInput->GetNumberOfTracks() = "<<iNumberOfInputTracks<<endl;
499 AliFlowEventSimple* pEvent = new AliFlowEventSimple(10);
501 Int_t iN = iNumberOfInputTracks; //maximum number of tracks in AliFlowEventSimple
502 Int_t iGoodTracks = 0; //number of good tracks
503 Int_t itrkN = 0; //track counter
504 Int_t iSelParticlesDiff = 0; //number of tracks selected for Diff
505 Int_t iSelParticlesInt = 0; //number of tracks selected for Int
508 while (iGoodTracks < iN && itrkN < iNumberOfInputTracks) {
509 AliAODTrack* pParticle = anInput->GetTrack(itrkN); //get input particle
510 //make new AliFlowTrackSimple
511 AliFlowTrackSimple* pTrack = new AliFlowTrackSimple();
512 pTrack->SetPt(pParticle->Pt() );
513 pTrack->SetEta(pParticle->Eta() );
514 pTrack->SetPhi(pParticle->Phi() );
516 //check if pParticle passes the cuts
517 if (intCFManager->CheckParticleCuts(AliCFManager::kPartRecCuts,pParticle) &&
518 intCFManager->CheckParticleCuts(AliCFManager::kPartSelCuts,pParticle)) {
519 pTrack->SetForIntegratedFlow(kTRUE); }
520 if (diffCFManager->CheckParticleCuts(AliCFManager::kPartRecCuts,pParticle) &&
521 diffCFManager->CheckParticleCuts(AliCFManager::kPartSelCuts,pParticle)) {
522 pTrack->SetForDifferentialFlow(kTRUE);}
524 //check if any bits are set
525 TBits bFlowBits = pTrack->GetFlowBits();
526 if (bFlowBits.CountBits() !=0) {
527 pEvent->TrackCollection()->Add(pTrack) ;
530 if (pTrack->UseForIntegratedFlow())
531 { iSelParticlesInt++; }
532 if (pTrack->UseForDifferentialFlow())
533 { iSelParticlesDiff++; }
540 pEvent-> SetEventNSelTracksIntFlow(iSelParticlesInt);
541 pEvent->SetNumberOfTracks(iGoodTracks);
542 cout<<" iGoodTracks = "<<iGoodTracks<<endl;
543 cout << " iSelectedTracksInt = " << iSelParticlesInt << endl;
548 //-----------------------------------------------------------------------
549 AliFlowEventSimple* AliFlowEventSimpleMaker::FillTracks(AliESDEvent* anInput, AliMCEvent* anInputMc, Int_t anOption)
551 //fills the event with tracks from the ESD and kinematics from the MC info via the track label
553 if (!(anOption ==0 || anOption ==1)) {
554 cout<<"WRONG OPTION IN AliFlowEventSimpleMaker::FillTracks(AliESDEvent* anInput, AliMCEvent* anInputMc, Int_t anOption)"<<endl;
558 Int_t iNumberOfInputTracks = anInput->GetNumberOfTracks() ;
559 cerr<<"anInput->GetNumberOfTracks() = "<<iNumberOfInputTracks<<endl;
561 AliFlowEventSimple* pEvent = new AliFlowEventSimple(10);
563 //Int_t iN = 256; //multiplicity for chi=1
564 Int_t iN = iNumberOfInputTracks;
565 Int_t iGoodTracks = 0;
567 Int_t iSelParticlesDiff = 0;
568 Int_t iSelParticlesInt = 0;
571 while (iGoodTracks < iN && itrkN < iNumberOfInputTracks) {
572 AliESDtrack* pParticle = anInput->GetTrack(itrkN); //get input particle
574 Int_t iLabel = pParticle->GetLabel();
575 //match to mc particle
576 AliMCParticle* pMcParticle = anInputMc->GetTrack(TMath::Abs(iLabel));
579 if (TMath::Abs(pParticle->GetLabel())!=pMcParticle->Label()) cout<<"pParticle->GetLabel()!=pMcParticle->Label() "<<pParticle->GetLabel()<<" "<<pMcParticle->Label()<<endl;
582 if (TMath::Abs(pParticle->Eta()) < 0.2)
585 TMath::Abs(pMcParticle->Particle()->GetPdgCode()) == 211 //pions
586 // TMath::Abs(pMcParticle->Particle()->GetPdgCode()) == 211 ||
587 // TMath::Abs(pMcParticle->Particle()->GetPdgCode()) == 321 ||
588 // TMath::Abs(pMcParticle->Particle()->GetPdgCode()) == 2212
591 AliFlowTrackSimple* pTrack = new AliFlowTrackSimple();
592 if(anOption == 0) { //take the PID from the MC & the kinematics from the ESD
593 pTrack->SetPt(pParticle->Pt() );
594 pTrack->SetEta(pParticle->Eta() );
595 pTrack->SetPhi(pParticle->Phi() );
596 pTrack->SetForIntegratedFlow(kTRUE);
597 pTrack->SetForDifferentialFlow(kTRUE);
599 else if (anOption == 1) { //take the PID and kinematics from the MC
600 pTrack->SetPt(pMcParticle->Pt() );
601 pTrack->SetEta(pMcParticle->Eta() );
602 pTrack->SetPhi(pMcParticle->Phi() );
603 pTrack->SetForIntegratedFlow(kTRUE);
604 pTrack->SetForDifferentialFlow(kTRUE);
606 else { cout<<"Not a valid option"<<endl; }
607 if (pTrack->UseForIntegratedFlow())
608 { iSelParticlesInt++; }
609 if (pTrack->UseForDifferentialFlow())
610 { iSelParticlesDiff++; }
612 pEvent->TrackCollection()->Add(pTrack) ;
618 pEvent-> SetEventNSelTracksIntFlow(iSelParticlesInt);
619 pEvent->SetNumberOfTracks(iGoodTracks);
620 cout<<" iGoodTracks = "<<iGoodTracks<<endl;
621 cout << " iSelectedTracksInt = " << iSelParticlesInt << endl;
627 //-----------------------------------------------------------------------
628 AliFlowEventSimple* AliFlowEventSimpleMaker::FillTracks(AliESDEvent* anInput, AliMCEvent* anInputMc, AliCFManager* intCFManager, AliCFManager* diffCFManager, Int_t anOption)
630 //fills the event with tracks from the ESD and kinematics from the MC info via the track label
633 if (!(anOption ==0 || anOption ==1)) {
634 cout<<"WRONG OPTION IN AliFlowEventSimpleMaker::FillTracks(AliESDEvent* anInput, AliMCEvent* anInputMc, Int_t anOption)"<<endl;
638 Int_t iNumberOfInputTracks = anInput->GetNumberOfTracks() ;
639 cerr<<"anInput->GetNumberOfTracks() = "<<iNumberOfInputTracks<<endl;
641 AliFlowEventSimple* pEvent = new AliFlowEventSimple(10);
643 Int_t iN = iNumberOfInputTracks; //maximum number of tracks in AliFlowEventSimple
644 Int_t iGoodTracks = 0; //number of good tracks
645 Int_t itrkN = 0; //track counter
646 Int_t iSelParticlesDiff = 0; //number of tracks selected for Diff
647 Int_t iSelParticlesInt = 0; //number of tracks selected for Int
651 while (iGoodTracks < iN && itrkN < iNumberOfInputTracks) {
652 AliESDtrack* pParticle = anInput->GetTrack(itrkN); //get input particle
654 Int_t iLabel = pParticle->GetLabel();
655 //match to mc particle
656 AliMCParticle* pMcParticle = anInputMc->GetTrack(TMath::Abs(iLabel));
659 if (TMath::Abs(pParticle->GetLabel())!=pMcParticle->Label()) cout<<"pParticle->GetLabel()!=pMcParticle->Label() "<<pParticle->GetLabel()<<" "<<pMcParticle->Label()<<endl;
661 //make new AliFlowTrackSimple
662 AliFlowTrackSimple* pTrack = new AliFlowTrackSimple();
663 if(anOption == 0) { //take the PID from the MC & the kinematics from the ESD
664 pTrack->SetPt(pParticle->Pt() );
665 pTrack->SetEta(pParticle->Eta() );
666 pTrack->SetPhi(pParticle->Phi() );
668 else if (anOption == 1) { //take the PID and kinematics from the MC
669 pTrack->SetPt(pMcParticle->Pt() );
670 pTrack->SetEta(pMcParticle->Eta() );
671 pTrack->SetPhi(pMcParticle->Phi() );
673 else { cout<<"Not a valid option"<<endl; }
675 //check if pParticle passes the cuts
677 //cout<<"take the PID from the MC & the kinematics from the ESD"<<endl;
678 if (intCFManager->CheckParticleCuts(AliCFManager::kPartGenCuts,pMcParticle,"mcGenCuts1") &&
679 intCFManager->CheckParticleCuts(AliCFManager::kPartRecCuts,pParticle)) {
680 pTrack->SetForIntegratedFlow(kTRUE); }
681 if (diffCFManager->CheckParticleCuts(AliCFManager::kPartGenCuts,pMcParticle,"mcGenCuts2") &&
682 diffCFManager->CheckParticleCuts(AliCFManager::kPartRecCuts,pParticle)) {
683 pTrack->SetForDifferentialFlow(kTRUE);}
685 else if (anOption == 1) {
686 //cout<<"take the PID and kinematics from the MC"<<endl;
687 if (intCFManager->CheckParticleCuts(AliCFManager::kPartGenCuts,pMcParticle)) {
688 pTrack->SetForIntegratedFlow(kTRUE); }
689 if (diffCFManager->CheckParticleCuts(AliCFManager::kPartGenCuts,pMcParticle)) {
690 pTrack->SetForDifferentialFlow(kTRUE);}
692 else { cout<<"Not a valid option"<<endl; }
694 //check if any bits are set
695 TBits bFlowBits = pTrack->GetFlowBits();
696 if (bFlowBits.CountBits() !=0) {
697 pEvent->TrackCollection()->Add(pTrack) ;
700 if (pTrack->UseForIntegratedFlow())
701 { iSelParticlesInt++; }
702 if (pTrack->UseForDifferentialFlow())
703 { iSelParticlesDiff++; }
709 pEvent-> SetEventNSelTracksIntFlow(iSelParticlesInt);
710 pEvent->SetNumberOfTracks(iGoodTracks);
711 cout<<" iGoodTracks = "<<iGoodTracks<<endl;
712 cout << " iSelectedTracksInt = " << iSelParticlesInt << endl;