From e821bc8b77b35ecbdc6529ff6ff94cb851f20cf2 Mon Sep 17 00:00:00 2001 From: mkrzewic Date: Mon, 3 Jun 2013 09:31:02 +0000 Subject: [PATCH] from Panos: take care of applying event level cuts in case MC (i.e. generator level) is analysed: i) external reference multiplicity ii) impact parameter range from the MC header --- .../Base/AliFlowAnalysisWithQCumulants.cxx | 1 + PWG/FLOW/Tasks/AliAnalysisTaskFlowEvent.cxx | 3 +- PWG/FLOW/Tasks/AliAnalysisTaskFlowStrange.cxx | 2 +- PWG/FLOW/Tasks/AliAnalysisTaskPIDflowQA.cxx | 2 +- PWG/FLOW/Tasks/AliAnalysisTaskQAflow.cxx | 2 +- PWG/FLOW/Tasks/AliFlowEventCuts.cxx | 41 +++++++++++++++---- PWG/FLOW/Tasks/AliFlowEventCuts.h | 10 ++++- 7 files changed, 47 insertions(+), 14 deletions(-) diff --git a/PWG/FLOW/Base/AliFlowAnalysisWithQCumulants.cxx b/PWG/FLOW/Base/AliFlowAnalysisWithQCumulants.cxx index be74f453f95..6e1db8b2243 100644 --- a/PWG/FLOW/Base/AliFlowAnalysisWithQCumulants.cxx +++ b/PWG/FLOW/Base/AliFlowAnalysisWithQCumulants.cxx @@ -366,6 +366,7 @@ void AliFlowAnalysisWithQCumulants::Make(AliFlowEventSimple* anEvent) if(fExactNoRPs > 0 && fNumberOfRPsEBEGetNumberOfPOIs(); // number of POIs (i.e. number of particles of interest) fReferenceMultiplicityEBE = anEvent->GetReferenceMultiplicity(); // reference multiplicity for current event + //Printf("Reference multiplicity (QC): %.1f",fReferenceMultiplicityEBE); Double_t ptEta[2] = {0.,0.}; // 0 = dPt, 1 = dEta // c) Fill the common control histograms and call the method to fill fAvMultiplicity: diff --git a/PWG/FLOW/Tasks/AliAnalysisTaskFlowEvent.cxx b/PWG/FLOW/Tasks/AliAnalysisTaskFlowEvent.cxx index 3643f8ebb20..e678dcc97c2 100644 --- a/PWG/FLOW/Tasks/AliAnalysisTaskFlowEvent.cxx +++ b/PWG/FLOW/Tasks/AliAnalysisTaskFlowEvent.cxx @@ -323,7 +323,8 @@ void AliAnalysisTaskFlowEvent::UserExec(Option_t *) if (fAnalysisType == "AUTOMATIC") { //check event cuts - if (InputEvent() && !fCutsEvent->IsSelected(InputEvent())) return; + if (InputEvent() && !fCutsEvent->IsSelected(InputEvent(),MCEvent())) + return; //first attach all possible information to the cuts fCutsRP->SetEvent( InputEvent(), MCEvent() ); //attach event diff --git a/PWG/FLOW/Tasks/AliAnalysisTaskFlowStrange.cxx b/PWG/FLOW/Tasks/AliAnalysisTaskFlowStrange.cxx index 190285466fb..c10479ec532 100644 --- a/PWG/FLOW/Tasks/AliAnalysisTaskFlowStrange.cxx +++ b/PWG/FLOW/Tasks/AliAnalysisTaskFlowStrange.cxx @@ -450,7 +450,7 @@ void AliAnalysisTaskFlowStrange::MyUserExec(Option_t *) Bool_t tESelection = TMath::Abs(tVtxZ-tSPDVtxZ) < 0.5; Bool_t tDSelection = kTRUE; if(fUseEventSelection) { - tDSelection = fCutsEvent->IsSelected(tAOD); + tDSelection = fCutsEvent->IsSelected(tAOD,0x0); } else { if(TMath::Abs(tVtxZ)>10.0) tDSelection = kFALSE; // Cut on VtxZ mandatory! } diff --git a/PWG/FLOW/Tasks/AliAnalysisTaskPIDflowQA.cxx b/PWG/FLOW/Tasks/AliAnalysisTaskPIDflowQA.cxx index 35c6cfe8995..b0724a1e4e3 100644 --- a/PWG/FLOW/Tasks/AliAnalysisTaskPIDflowQA.cxx +++ b/PWG/FLOW/Tasks/AliAnalysisTaskPIDflowQA.cxx @@ -553,7 +553,7 @@ void AliAnalysisTaskPIDflowQA::UserExec(Option_t *) return; } - if (!(fEventCuts->IsSelected(fESD))) + if (!(fEventCuts->IsSelected(fESD,0x0))) { return; } diff --git a/PWG/FLOW/Tasks/AliAnalysisTaskQAflow.cxx b/PWG/FLOW/Tasks/AliAnalysisTaskQAflow.cxx index 7f2e6f8e90e..781cedb37ed 100644 --- a/PWG/FLOW/Tasks/AliAnalysisTaskQAflow.cxx +++ b/PWG/FLOW/Tasks/AliAnalysisTaskQAflow.cxx @@ -222,7 +222,7 @@ void AliAnalysisTaskQAflow::UserExec(Option_t *) TH1* hstdspdtrmultB = static_cast(before->At(23)); TH1* hstdspdtrmultA = static_cast(after->At(23)); - Bool_t passevent = fEventCuts->IsSelected(event); + Bool_t passevent = fEventCuts->IsSelected(event,0x0); Bool_t isSelectedEventSelection = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kMB); AliMultiplicity* tracklets = const_cast(event->GetMultiplicity()); diff --git a/PWG/FLOW/Tasks/AliFlowEventCuts.cxx b/PWG/FLOW/Tasks/AliFlowEventCuts.cxx index f03b7a85388..11eefa588ff 100644 --- a/PWG/FLOW/Tasks/AliFlowEventCuts.cxx +++ b/PWG/FLOW/Tasks/AliFlowEventCuts.cxx @@ -40,6 +40,8 @@ #include "AliFlowEventCuts.h" #include "AliFlowTrackCuts.h" #include "AliTriggerAnalysis.h" +#include "AliCollisionGeometry.h" +#include "AliGenEventHeader.h" ClassImp(AliFlowEventCuts) @@ -84,7 +86,10 @@ AliFlowEventCuts::AliFlowEventCuts(): fCentralityPercentileMax(100.), fCentralityPercentileMin(0.), fCutZDCtiming(kFALSE), - fTrigAna() + fTrigAna(), + fCutImpactParameter(kFALSE), + fImpactParameterMin(0.0), + fImpactParameterMax(100.0) { //constructor } @@ -130,7 +135,10 @@ AliFlowEventCuts::AliFlowEventCuts(const char* name, const char* title): fCentralityPercentileMax(100.), fCentralityPercentileMin(0.), fCutZDCtiming(kFALSE), - fTrigAna() + fTrigAna(), + fCutImpactParameter(kFALSE), + fImpactParameterMin(0.0), + fImpactParameterMax(100.0) { //constructor } @@ -176,7 +184,10 @@ AliFlowEventCuts::AliFlowEventCuts(const AliFlowEventCuts& that): fCentralityPercentileMax(that.fCentralityPercentileMax), fCentralityPercentileMin(that.fCentralityPercentileMin), fCutZDCtiming(that.fCutZDCtiming), - fTrigAna() + fTrigAna(), + fCutImpactParameter(that.fCutImpactParameter), + fImpactParameterMin(that.fImpactParameterMin), + fImpactParameterMax(that.fImpactParameterMax) { if (that.fQA) DefineHistograms(); //copy constructor @@ -262,15 +273,16 @@ AliFlowEventCuts& AliFlowEventCuts::operator=(const AliFlowEventCuts& that) } //----------------------------------------------------------------------- -Bool_t AliFlowEventCuts::IsSelected(TObject* obj) +Bool_t AliFlowEventCuts::IsSelected(TObject* obj, TObject* objmc) { //check cuts AliVEvent* vevent = dynamic_cast(obj); - if (vevent) return PassesCuts(vevent); + AliMCEvent* mcevent = dynamic_cast(objmc); + if (vevent) return PassesCuts(vevent,mcevent);; return kFALSE; //when passed wrong type of object } //----------------------------------------------------------------------- -Bool_t AliFlowEventCuts::PassesCuts(AliVEvent *event) +Bool_t AliFlowEventCuts::PassesCuts(AliVEvent *event, AliMCEvent *mcevent) { ///check if event passes cuts const AliVVertex* pvtx=event->GetPrimaryVertex(); @@ -365,10 +377,10 @@ Bool_t AliFlowEventCuts::PassesCuts(AliVEvent *event) } if(fCutNumberOfTracks) {if ( event->GetNumberOfTracks() < fNumberOfTracksMin || event->GetNumberOfTracks() >= fNumberOfTracksMax ) pass=kFALSE;} - if(fCutRefMult&&esdevent) + if((fCutRefMult&&mcevent)||(fCutRefMult&&esdevent)) { //reference multiplicity still to be defined - Double_t refMult = RefMult(event,0x0); + Double_t refMult = RefMult(event,mcevent); if (refMult < fRefMultMin || refMult >= fRefMultMax ) { pass=kFALSE; @@ -425,6 +437,19 @@ Bool_t AliFlowEventCuts::PassesCuts(AliVEvent *event) if (nselected) meanpt=meanpt/nselected; if (meanpt= fMeanPtMax) pass=kFALSE; } + + //impact parameter cut + if(fCutImpactParameter) { + Double_t gImpactParameter = 0.; + if(mcevent) { + AliCollisionGeometry* headerH = dynamic_cast(dynamic_cast(mcevent)->GenEventHeader()); + if(headerH) + gImpactParameter = headerH->ImpactParameter(); + } + if ((gImpactParameter < fImpactParameterMin) || (gImpactParameter >= fImpactParameterMax )) + pass=kFALSE; + } + if (fQA&&pass) { QAafter(1)->Fill(multGlobal,multTPC); diff --git a/PWG/FLOW/Tasks/AliFlowEventCuts.h b/PWG/FLOW/Tasks/AliFlowEventCuts.h index 2d76801f556..6ed557e5218 100644 --- a/PWG/FLOW/Tasks/AliFlowEventCuts.h +++ b/PWG/FLOW/Tasks/AliFlowEventCuts.h @@ -32,9 +32,9 @@ class AliFlowEventCuts : public TNamed { AliFlowEventCuts& operator=(const AliFlowEventCuts& someCuts); virtual ~AliFlowEventCuts(); - virtual Bool_t IsSelected(TObject* obj); + virtual Bool_t IsSelected(TObject* obj, TObject *objmc); - Bool_t PassesCuts(AliVEvent* event); + Bool_t PassesCuts(AliVEvent* event, AliMCEvent *mcevent); static AliFlowEventCuts* StandardCuts(); @@ -44,6 +44,9 @@ class AliFlowEventCuts : public TNamed { void SetRefMultMax(Int_t value) {fRefMultMax=value;fCutRefMult=kTRUE;} void SetRefMultMin(Int_t value) {fRefMultMin=value;fCutRefMult=kTRUE;} void SetRefMultRange(Int_t min, Int_t max) {fRefMultMin=min;fRefMultMax=max;fCutRefMult=kTRUE;} + void SetImpactParameterMax(Double_t value) {fImpactParameterMax=value;fCutImpactParameter=kTRUE;} + void SetImpactParameterMin(Double_t value) {fImpactParameterMin=value;fCutImpactParameter=kTRUE;} + void SetImpactParameterRange(Double_t min, Double_t max) {fImpactParameterMin=min;fImpactParameterMax=max;fCutImpactParameter=kTRUE;} void SetPrimaryVertexXrange(Double_t min, Double_t max) {fCutPrimaryVertexX=kTRUE; fPrimaryVertexXmin=min; fPrimaryVertexXmax=max;} void SetPrimaryVertexYrange(Double_t min, Double_t max) @@ -128,6 +131,9 @@ class AliFlowEventCuts : public TNamed { Float_t fCentralityPercentileMin; // min centr. perc Bool_t fCutZDCtiming; //cut on ZDC timing AliTriggerAnalysis fTrigAna; //trigger analysis object + Bool_t fCutImpactParameter; //cut on impact parameter (MC header) + Double_t fImpactParameterMin; // min impact parameter + Double_t fImpactParameterMax; // max impact parameter ClassDef(AliFlowEventCuts,4) }; -- 2.43.5