24 #include "Riostream.h" 26 #include "TParticle.h" 30 #include "AliMCEvent.h" 31 #include "AliMCParticle.h" 32 #include "AliESDEvent.h" 33 #include "AliESDtrack.h" 34 #include "AliAODEvent.h" 35 #include "AliAODTrack.h" 36 #include "AliCFManager.h" 45 fMCReactionPlaneAngle(0.),
48 fEllipticFlowValue(0.),
49 fMultiplicityOfEvent(1000000000),
71 Int_t iNumberOfInputTracks = anInput->GetNumberOfTracks() ;
73 if (iNumberOfInputTracks==-1) {
74 cout<<
"Skipping Event -- No MC information available for this event"<<endl;
78 Int_t iN = iNumberOfInputTracks;
79 Int_t iGoodTracks = 0;
81 Int_t iSelParticlesPOI = 0;
82 Int_t iSelParticlesRP = 0;
85 if (intCFManager->CheckEventCuts(AliCFManager::kEvtGenCuts,anInput)) {
91 while (iGoodTracks < iN && itrkN < iNumberOfInputTracks) {
93 AliMCParticle* pParticle = (AliMCParticle*) anInput->GetTrack(itrkN);
96 pTrack->
SetPt(pParticle->Pt() );
97 pTrack->
SetEta(pParticle->Eta() );
98 pTrack->
SetPhi(pParticle->Phi() );
101 if (intCFManager->CheckParticleCuts(AliCFManager::kPartGenCuts,pParticle)) {
105 if (diffCFManager->CheckParticleCuts(AliCFManager::kPartGenCuts,pParticle)) {
112 if (bFlowBits->CountBits() ==0) {
119 { iSelParticlesRP++; }
121 { iSelParticlesPOI++; }
127 pEvent-> SetEventNSelTracksRP(iSelParticlesRP);
131 if ( (++
fCount % 100) == 0) {
134 cout<<
" iGoodTracks = "<<iGoodTracks<<endl;
135 cout<<
" # of RP selected tracks = "<<iSelParticlesRP<<endl;
136 cout<<
" # of POI selected tracks = "<<iSelParticlesPOI<<endl;
137 cout <<
"# " <<
fCount <<
" events processed" << endl;
142 cout<<
"Not enough tracks in the FlowEventSimple"<<endl;
147 cout<<
"Event does not pass multiplicity cuts"<<endl;
160 Bool_t bPassedRPFlowCuts = kFALSE;
161 Bool_t bPassedPOIFlowCuts = kFALSE;
163 Int_t iNumberOfInputTracks = anInput->GetNumberOfTracks() ;
165 Int_t iGoodTracks = 0;
167 Int_t iSelParticlesRP = 0;
168 Int_t iSelParticlesPOI = 0;
171 if (intCFManager->CheckEventCuts(AliCFManager::kEvtRecCuts,anInput)) {
177 while (itrkN < iNumberOfInputTracks) {
178 AliESDtrack* pParticle = anInput->GetTrack(itrkN);
181 if (intCFManager->CheckParticleCuts(AliCFManager::kPartRecCuts,pParticle) &&
182 intCFManager->CheckParticleCuts(AliCFManager::kPartSelCuts,pParticle)) {
183 bPassedRPFlowCuts = kTRUE;
185 if (diffCFManager->CheckParticleCuts(AliCFManager::kPartRecCuts,pParticle) &&
186 diffCFManager->CheckParticleCuts(AliCFManager::kPartSelCuts,pParticle)) {
187 bPassedPOIFlowCuts = kTRUE;
190 if (bPassedRPFlowCuts || bPassedPOIFlowCuts) {
193 pTrack->
SetPt(pParticle->Pt() );
194 pTrack->
SetEta(pParticle->Eta() );
197 else { pTrack->
SetPhi(pParticle->Phi() ); }
200 if(bPassedRPFlowCuts) {
213 if(bPassedPOIFlowCuts) {
222 bPassedRPFlowCuts = kFALSE;
223 bPassedPOIFlowCuts = kFALSE;
231 if ( (++
fCount % 100) == 0) {
233 else cout<<
" MC Reaction Plane Angle = unknown "<< endl;
234 cout<<
" iGoodTracks = "<<iGoodTracks<<endl;
235 cout<<
" # of RP selected tracks = "<<iSelParticlesRP<<endl;
236 cout<<
" # of POI selected tracks = "<<iSelParticlesPOI<<endl;
237 cout <<
"# " <<
fCount <<
" events processed" << endl;
242 cout<<
"Not enough tracks in the FlowEventSimple"<<endl;
247 cout<<
"Event does not pass multiplicity cuts"<<endl;
258 Int_t iNumberOfInputTracks = anInput->GetNumberOfTracks() ;
260 Int_t iN = iNumberOfInputTracks;
261 Int_t iGoodTracks = 0;
263 Int_t iSelParticlesPOI = 0;
264 Int_t iSelParticlesRP = 0;
267 if (intCFManager->CheckEventCuts(AliCFManager::kEvtRecCuts,anInput)) {
273 while (iGoodTracks < iN && itrkN < iNumberOfInputTracks) {
274 AliAODTrack* pParticle =
dynamic_cast<AliAODTrack*
>(anInput->GetTrack(itrkN));
275 assert((pParticle)&&
"Not a standard AOD");
278 pTrack->
SetPt(pParticle->Pt() );
279 pTrack->
SetEta(pParticle->Eta() );
280 pTrack->
SetPhi(pParticle->Phi() );
283 if (intCFManager->CheckParticleCuts(AliCFManager::kPartRecCuts,pParticle) &&
284 intCFManager->CheckParticleCuts(AliCFManager::kPartSelCuts,pParticle)) {
286 if (diffCFManager->CheckParticleCuts(AliCFManager::kPartRecCuts,pParticle) &&
287 diffCFManager->CheckParticleCuts(AliCFManager::kPartSelCuts,pParticle)) {
293 if (bFlowBits->CountBits() ==0) {
300 { iSelParticlesRP++; }
302 { iSelParticlesPOI++; }
309 pEvent-> SetEventNSelTracksRP(iSelParticlesRP);
313 if ( (++
fCount % 100) == 0) {
315 else cout<<
" MC Reaction Plane Angle = unknown "<< endl;
316 cout<<
" iGoodTracks = "<<iGoodTracks<<endl;
317 cout<<
" # of RP selected tracks = "<<iSelParticlesRP<<endl;
318 cout<<
" # of POI selected tracks = "<<iSelParticlesPOI<<endl;
319 cout <<
"# " <<
fCount <<
" events processed" << endl;
324 cout<<
"Not enough tracks in the FlowEventSimple"<<endl;
329 cout<<
"Event does not pass multiplicity cuts"<<endl;
341 if (!(anOption ==0 || anOption ==1)) {
342 cout<<
"WRONG OPTION IN AliFlowEventSimpleMaker::FillTracks(AliESDEvent* anInput, AliMCEvent* anInputMc, Int_t anOption)"<<endl;
346 Int_t iNumberOfInputTracks = anInput->GetNumberOfTracks() ;
348 Int_t iNumberOfInputTracksMC = anInputMc->GetNumberOfTracks() ;
349 if (iNumberOfInputTracksMC==-1) {
350 cout<<
"Skipping Event -- No MC information available for this event"<<endl;
354 Int_t iN = iNumberOfInputTracks;
355 Int_t iGoodTracks = 0;
357 Int_t iSelParticlesPOI = 0;
358 Int_t iSelParticlesRP = 0;
361 if (intCFManager->CheckEventCuts(AliCFManager::kEvtRecCuts,anInput)) {
367 while (iGoodTracks < iN && itrkN < iNumberOfInputTracks) {
368 AliESDtrack* pParticle = anInput->GetTrack(itrkN);
370 Int_t iLabel = pParticle->GetLabel();
372 AliMCParticle* pMcParticle = (AliMCParticle*) anInputMc->GetTrack(TMath::Abs(iLabel));
375 if (TMath::Abs(pParticle->GetLabel())!=pMcParticle->Label()) cout<<
"pParticle->GetLabel()!=pMcParticle->Label() "<<pParticle->GetLabel()<<
" "<<pMcParticle->Label()<<endl;
380 pTrack->
SetPt(pParticle->Pt() );
381 pTrack->
SetEta(pParticle->Eta() );
382 pTrack->
SetPhi(pParticle->Phi() );
384 else if (anOption == 1) {
385 pTrack->
SetPt(pMcParticle->Pt() );
386 pTrack->
SetEta(pMcParticle->Eta() );
387 pTrack->
SetPhi(pMcParticle->Phi() );
389 else { cout<<
"Not a valid option"<<endl; }
394 if (intCFManager->CheckParticleCuts(AliCFManager::kPartGenCuts,pMcParticle,
"mcGenCuts1") &&
395 intCFManager->CheckParticleCuts(AliCFManager::kPartRecCuts,pParticle)) {
397 if (diffCFManager->CheckParticleCuts(AliCFManager::kPartGenCuts,pMcParticle,
"mcGenCuts2") &&
398 diffCFManager->CheckParticleCuts(AliCFManager::kPartRecCuts,pParticle)) {
401 else if (anOption == 1) {
403 if (intCFManager->CheckParticleCuts(AliCFManager::kPartGenCuts,pMcParticle)) {
405 if (diffCFManager->CheckParticleCuts(AliCFManager::kPartGenCuts,pMcParticle)) {
408 else { cout<<
"Not a valid option"<<endl; }
412 if (bFlowBits->CountBits() ==0) {
419 { iSelParticlesRP++; }
421 { iSelParticlesPOI++; }
432 if ( (++
fCount % 100) == 0) {
434 else cout<<
" MC Reaction Plane Angle = unknown "<< endl;
435 cout <<
" Number of MC input tracks = " << iNumberOfInputTracksMC << endl;
436 cout<<
" iGoodTracks = "<<iGoodTracks<<endl;
437 cout<<
" # of RP selected tracks = "<<iSelParticlesRP<<endl;
438 cout<<
" # of POI selected tracks = "<<iSelParticlesPOI<<endl;
439 cout <<
"# " <<
fCount <<
" events processed" << endl;
444 cout<<
"Not enough tracks in the FlowEventSimple"<<endl;
449 cout<<
"Event does not pass multiplicity cuts"<<endl;
464 Bool_t bPassedRPFlowCuts = kFALSE;
465 Bool_t bPassedPOIFlowCuts = kFALSE;
484 Int_t iNumberOfInputTracks = anInput->GetEntries() ;
486 TParticle* pParticle =
new TParticle();
487 anInput->SetBranchAddress(
"Particles",&pParticle);
495 Int_t iGoodTracks = 0;
497 Int_t iSelParticlesRP = 0;
498 Int_t iSelParticlesPOI = 0;
500 while (itrkN < iNumberOfInputTracks) {
501 anInput->GetEntry(itrkN);
502 if (pParticle->IsPrimary()) {
504 if (pParticle->Pt() > dPtMinRP && pParticle->Pt() < dPtMaxRP &&
505 pParticle->Eta() > dEtaMinRP && pParticle->Eta() < dEtaMaxRP &&
506 pParticle->Phi() > dPhiMinRP && pParticle->Phi() < dPhiMaxRP &&
507 TMath::Abs(pParticle->GetPdgCode()) == iPIDRP) {
508 bPassedRPFlowCuts = kTRUE;
511 if (pParticle->Pt() > dPtMinPOI && pParticle->Pt() < dPtMaxPOI &&
512 pParticle->Eta() > dEtaMinPOI && pParticle->Eta() < dEtaMaxPOI &&
513 pParticle->Phi() > dPhiMinPOI && pParticle->Phi() < dPhiMaxPOI &&
514 TMath::Abs(pParticle->GetPdgCode()) == iPIDPOI){
515 bPassedPOIFlowCuts = kTRUE;
518 if (bPassedRPFlowCuts || bPassedPOIFlowCuts) {
521 pTrack->
SetPt(pParticle->Pt());
522 pTrack->
SetEta(pParticle->Eta());
531 if(bPassedPOIFlowCuts && iGoodTracks%fNoOfLoops==0) {
541 bPassedRPFlowCuts = kFALSE;
542 bPassedPOIFlowCuts = kFALSE;
548 if ( (++
fCount % 100) == 0) {
550 else cout<<
" MC Reaction Plane Angle = unknown "<< endl;
551 cout<<
" iGoodTracks = "<< iGoodTracks << endl;
552 cout<<
" # of RP selected tracks = "<<iSelParticlesRP<<endl;
553 cout<<
" # of POI selected tracks = "<<iSelParticlesPOI<<endl;
554 cout <<
"# " <<
fCount <<
" events processed" << endl;
566 Int_t iNumberOfInputTracks = anInput->GetNumberOfTracks() ;
571 Int_t iN = iNumberOfInputTracks;
572 Int_t iGoodTracks = 0;
574 Int_t iSelParticlesPOI = 0;
575 Int_t iSelParticlesRP = 0;
578 while (iGoodTracks < iN && itrkN < iNumberOfInputTracks) {
579 AliMCParticle* pParticle = (AliMCParticle*) anInput->GetTrack(itrkN);
581 if (TMath::Abs(pParticle->Eta()) < 0.9)
584 TMath::Abs(pParticle->Particle()->GetPdgCode()) == 211
591 pTrack->
SetPt(pParticle->Pt() );
592 pTrack->
SetEta(pParticle->Eta() );
593 pTrack->
SetPhi(pParticle->Phi() );
598 { iSelParticlesRP++; }
600 { iSelParticlesPOI++; }
628 pEvent-> SetEventNSelTracksRP(iSelParticlesRP);
631 if ( (++
fCount % 100) == 0) {
633 else cout<<
" MC Reaction Plane Angle = unknown "<< endl;
634 cout<<
" iGoodTracks = "<<iGoodTracks<<endl;
635 cout<<
" # of RP selected tracks = "<<iSelParticlesRP<<endl;
636 cout<<
" # of POI selected tracks = "<<iSelParticlesPOI<<endl;
637 cout <<
"# " <<
fCount <<
" events processed" << endl;
649 Int_t iNumberOfInputTracks = anInput->GetNumberOfTracks() ;
654 Int_t iN = iNumberOfInputTracks;
655 Int_t iGoodTracks = 0;
657 Int_t iSelParticlesPOI = 0;
658 Int_t iSelParticlesRP = 0;
663 while (iGoodTracks < iN && itrkN < iNumberOfInputTracks) {
664 AliESDtrack* pParticle = anInput->GetTrack(itrkN);
666 if (TMath::Abs(pParticle->Eta()) < 0.9)
672 pTrack->
SetPt(pParticle->Pt() );
673 pTrack->
SetEta(pParticle->Eta() );
674 pTrack->
SetPhi(pParticle->Phi() );
679 { iSelParticlesRP++; }
681 { iSelParticlesPOI++; }
689 pEvent-> SetEventNSelTracksRP(iSelParticlesRP);
692 if ( (++
fCount % 100) == 0) {
694 else cout<<
" MC Reaction Plane Angle = unknown "<< endl;
695 cout<<
" iGoodTracks = "<<iGoodTracks<<endl;
696 cout<<
" # of RP selected tracks = "<<iSelParticlesRP<<endl;
697 cout<<
" # of POI selected tracks = "<<iSelParticlesPOI<<endl;
698 cout <<
"# " <<
fCount <<
" events processed" << endl;
710 Int_t iNumberOfInputTracks = anInput->GetNumberOfTracks() ;
715 Int_t iN = iNumberOfInputTracks;
716 Int_t iGoodTracks = 0;
718 Int_t iSelParticlesPOI = 0;
719 Int_t iSelParticlesRP = 0;
722 while (iGoodTracks < iN && itrkN < iNumberOfInputTracks) {
723 AliAODTrack* pParticle =
dynamic_cast<AliAODTrack*
>(anInput->GetTrack(itrkN));
724 assert((pParticle)&&
"Not a standard AOD");
726 if (TMath::Abs(pParticle->Eta()) < 0.9)
729 pTrack->
SetPt(pParticle->Pt() );
730 pTrack->
SetEta(pParticle->Eta() );
731 pTrack->
SetPhi(pParticle->Phi() );
736 { iSelParticlesRP++; }
738 { iSelParticlesPOI++; }
746 pEvent-> SetEventNSelTracksRP(iSelParticlesRP);
749 if ( (++
fCount % 100) == 0) {
751 else cout<<
" MC Reaction Plane Angle = unknown "<< endl;
752 cout<<
" iGoodTracks = "<<iGoodTracks<<endl;
753 cout<<
" # of RP selected tracks = "<<iSelParticlesRP<<endl;
754 cout<<
" # of POI selected tracks = "<<iSelParticlesPOI<<endl;
755 cout <<
"# " <<
fCount <<
" events processed" << endl;
766 if (!(anOption ==0 || anOption ==1)) {
767 cout<<
"WRONG OPTION IN AliFlowEventSimpleMaker::FillTracks(AliESDEvent* anInput, AliMCEvent* anInputMc, Int_t anOption)"<<endl;
771 Int_t iNumberOfInputTracks = anInput->GetNumberOfTracks() ;
776 Int_t iN = iNumberOfInputTracks;
777 Int_t iGoodTracks = 0;
779 Int_t iSelParticlesPOI = 0;
780 Int_t iSelParticlesRP = 0;
783 while (iGoodTracks < iN && itrkN < iNumberOfInputTracks) {
784 AliESDtrack* pParticle = anInput->GetTrack(itrkN);
786 Int_t iLabel = pParticle->GetLabel();
788 AliMCParticle* pMcParticle = (AliMCParticle*) anInputMc->GetTrack(TMath::Abs(iLabel));
791 if (TMath::Abs(pParticle->GetLabel())!=pMcParticle->Label()) cout<<
"pParticle->GetLabel()!=pMcParticle->Label() "<<pParticle->GetLabel()<<
" "<<pMcParticle->Label()<<endl;
794 if (TMath::Abs(pParticle->Eta()) < 0.2)
797 TMath::Abs(pMcParticle->Particle()->GetPdgCode()) == 211
805 pTrack->
SetPt(pParticle->Pt() );
806 pTrack->
SetEta(pParticle->Eta() );
807 pTrack->
SetPhi(pParticle->Phi() );
811 else if (anOption == 1) {
812 pTrack->
SetPt(pMcParticle->Pt() );
813 pTrack->
SetEta(pMcParticle->Eta() );
814 pTrack->
SetPhi(pMcParticle->Phi() );
818 else { cout<<
"Not a valid option"<<endl; }
820 { iSelParticlesRP++; }
822 { iSelParticlesPOI++; }
830 pEvent-> SetEventNSelTracksRP(iSelParticlesRP);
833 if ( (++
fCount % 100) == 0) {
835 else cout<<
" MC Reaction Plane Angle = unknown "<< endl;
836 cout<<
" iGoodTracks = "<<iGoodTracks<<endl;
837 cout<<
" # of RP selected tracks = "<<iSelParticlesRP<<endl;
838 cout<<
" # of POI selected tracks = "<<iSelParticlesPOI<<endl;
839 cout <<
"# " <<
fCount <<
" events processed" << endl;
void SetForSubevent(Int_t i)
Double_t fEllipticFlowValue
Double_t GetPtMin() const
const TBits * GetFlowBits() const
void SetEta(Double_t eta)
void AddTrack(AliFlowTrackSimple *track)
Int_t fMultiplicityOfEvent
Double_t GetEtaMax() const
Bool_t InRPSelection() const
Double_t GetPhiMax() const
void SetForRPSelection(Bool_t b=kTRUE)
AliFlowEventSimple * FillTracks(TTree *anInput, const AliFlowTrackSimpleCuts *rpCuts, const AliFlowTrackSimpleCuts *poiCuts)
virtual ~AliFlowEventSimpleMaker()
Double_t fMCReactionPlaneAngle
Double_t GetPhiMin() const
void SetPhi(Double_t phi)
Double_t GetPtMax() const
void SetEventNSelTracksRP(Int_t nr)
void SetForPOISelection(Bool_t b=kTRUE)
void SetMCReactionPlaneAngle(Double_t fPhiRP)
Bool_t InPOISelection(Int_t poiType=1) const
Double_t GetEtaMin() const