class AliAnalysisDataContainer;
class AliFlowEventCuts;
class AliFlowEventTrackCuts;
+class AliFlowEventTrackSimpleCuts;
class AliRDHFCutsD0toKpi;
class AliRDHFCutsDStartoKpipi;
-void AddTaskFlowD2H(TString fileNameCuts, TString folderName, Int_t nDmeson, Int_t minCent, Int_t maxCent, Int_t myHarmonic,
- Bool_t bDoQC, Bool_t bDoSPTPC, Bool_t bDoSPVZERO, Bool_t bDoEPAlso, Int_t ptBinWidth,
- Double_t gapTPC, Double_t etaVZERO1, Double_t etaVZERO2, Double_t etaVZERO3, Double_t etaVZERO4,
- Int_t trigger, Bool_t testOnly=kFALSE ) {
+void AddTaskFlowD2H(TString fileNameCuts, TString folderName, Int_t nDmeson, Int_t myHarmonic,
+ Bool_t bDoQC, Bool_t bDoSPTPC, Bool_t bDoSPVZERO, Bool_t bDoEPTPC, Bool_t bDoEPVZERO,
+ Int_t ptBinWidth, Double_t gapTPC, Double_t etaVZERO1, Double_t etaVZERO2, Double_t etaVZERO3, Double_t etaVZERO4,
+ Bool_t bOldApproach=kFALSE, Bool_t shrinkSP=kFALSE ) {
TFile *filecuts = TFile::Open( fileNameCuts.Data() );
if( (!filecuts) || ( filecuts && !filecuts->IsOpen()) ){
AliFatal("Could not open cuts file.");
}
- filecuts->ls();
+
TString fileName = AliAnalysisManager::GetCommonFileName();
fileName.ReplaceAll(".root","");
AliAnalysisDataContainer *cinput1 = mgr->GetCommonInputContainer();
TString thecuts = folderName;
-
TString sgn = DMesonName( nDmeson ) + Form("w%d",ptBinWidth);
//**********************************************************************
// POI FILTER CUTS
AliFlowTrackSimpleCuts *filterPOIQC[50]; // MASS BANDS
AliFlowTrackSimpleCuts *filterPOISP[50][2]; // MASS BANDS || ETA || SUBEVENT GAP
- int myMassBands = NumberOfMassBins( nDmeson );
- if(testOnly)
- myMassBands = 1;
+ int myMassBands = MassBands( nDmeson, bOldApproach );
for(int mb=0; mb!=myMassBands; ++mb) {
filterPOISP[mb][0] = new AliFlowTrackSimpleCuts( Form("FilterPOISP_MB%d_ETANEG",mb) );
filterPOISP[mb][0]->SetEtaMin( -0.8 );
filterPOISP[mb][0]->SetEtaMax( 0. );
- filterPOISP[mb][0]->SetMassMin( LowMassBin(nDmeson,mb) );
- filterPOISP[mb][0]->SetMassMax( LowMassBin(nDmeson,mb+1) );
+ filterPOISP[mb][0]->SetMassMin( MassBandLowEdge(nDmeson,mb,bOldApproach) );
+ filterPOISP[mb][0]->SetMassMax( MassBandLowEdge(nDmeson,mb+1,bOldApproach) );
filterPOISP[mb][1] = new AliFlowTrackSimpleCuts( Form("FilterPOISP_MB%d_ETAPOS",mb) );
filterPOISP[mb][1]->SetEtaMin( 0. );
filterPOISP[mb][1]->SetEtaMax( +0.8 );
- filterPOISP[mb][1]->SetMassMin( LowMassBin(nDmeson,mb) );
- filterPOISP[mb][1]->SetMassMax( LowMassBin(nDmeson,mb+1) );
+ filterPOISP[mb][1]->SetMassMin( MassBandLowEdge(nDmeson,mb,bOldApproach) );
+ filterPOISP[mb][1]->SetMassMax( MassBandLowEdge(nDmeson,mb+1,bOldApproach) );
filterPOIQC[mb] = new AliFlowTrackSimpleCuts( Form("FilterPOIQC_MB%d",mb) );
filterPOIQC[mb]->SetEtaMin( -0.8 );
filterPOIQC[mb]->SetEtaMax( +0.8 );
- filterPOIQC[mb]->SetMassMin( LowMassBin(nDmeson,mb) );
- filterPOIQC[mb]->SetMassMax( LowMassBin(nDmeson,mb+1) );
+ filterPOIQC[mb]->SetMassMin( MassBandLowEdge(nDmeson,mb,bOldApproach) );
+ filterPOIQC[mb]->SetMassMax( MassBandLowEdge(nDmeson,mb+1,bOldApproach) );
}
- int minCC = minCent;
- int maxCC = maxCent;
- TString ccName = Form("cc%d%d",minCC,maxCC);
- // * EVENT CUTS ******************************************************
- AliFlowEventCuts* cutsEvent = new AliFlowEventCuts( Form("EventCuts_%s",ccName.Data()) );
- cutsEvent->SetCentralityPercentileRange(minCC,maxCC);
- cutsEvent->SetCentralityPercentileMethod(AliFlowEventCuts::kV0);
- cutsEvent->SetNContributorsRange(2);
- cutsEvent->SetPrimaryVertexZrange(-9.,9.);
- cutsEvent->SetQA(kTRUE);
- cutsEvent->SetRefMultMethod(AliESDtrackCuts::kTrackletsITSTPC);
// * DMESON SELECTOR *************************************************
AliAnalysisTaskFlowD2H *taskSel;
switch (nDmeson) {
case ( AliRDHFCuts::kD0toKpiCuts ):
- AliRDHFCutsD0toKpi *myCutsD0;
- myCutsD0 = (AliRDHFCutsD0toKpi*)filecuts->Get("D0toKpiCuts");
+ AliRDHFCutsD0toKpi *myCutsD0 = (AliRDHFCutsD0toKpi*)filecuts->Get("D0toKpiCuts");
if(!myCutsD0) {
AliFatal("Problems reaching D0toKpiCuts");
}
- taskSel = new AliAnalysisTaskFlowD2H( Form("TaskD0Selector_%s",ccName.Data()),
- cutsEvent, myCutsD0, nDmeson );
+ taskSel = new AliAnalysisTaskFlowD2H( Form("TaskD0Selector_%s",thecuts.Data()),
+ cutsRFPTPC, cutsRFPVZE, myCutsD0, nDmeson );
break;
case ( AliRDHFCuts::kDstarCuts ):
- AliRDHFCutsDStartoKpipi *myCutsDStar;
- myCutsDStar = (AliRDHFCutsDStartoKpipi*)filecuts->Get("DStartoKpipiCuts");
+ AliRDHFCutsDStartoKpipi *myCutsDStar = (AliRDHFCutsDStartoKpipi*)filecuts->Get("DStartoKpipiCuts");
if(!myCutsDStar) {
AliFatal("Problems reaching DStarToKpipiCuts");
}
- taskSel = new AliAnalysisTaskFlowD2H( Form("TaskDStarSelector_%s",ccName.Data()),
- cutsEvent, myCutsDStar, nDmeson);
+ taskSel = new AliAnalysisTaskFlowD2H( Form("TaskDStarSelector_%s",thecuts.Data()),
+ cutsRFPTPC, cutsRFPVZE, myCutsDStar, nDmeson);
break;
case (AliRDHFCuts::kDplusCuts):
- AliRDHFCutsDplustoKpipi *myCutsDplus;
- myCutsDplus = (AliRDHFCutsDplustoKpipi*)filecuts->Get("AnalysisCuts");
+ AliRDHFCutsDplustoKpipi *myCutsDplus = (AliRDHFCutsDplustoKpipi*)filecuts->Get("AnalysisCuts");
if(!myCutsDplus) {
AliFatal("Problems reaching AnalysisCuts");
}
- taskSel = new AliAnalysisTaskFlowD2H( Form("TaskDplusSelector_%s",ccName.Data()),
- cutsEvent, myCutsDplus, nDmeson );
+ taskSel = new AliAnalysisTaskFlowD2H( Form("TaskDplusSelector_%s",thecuts.Data()),
+ cutsRFPTPC, cutsRFPVZE, myCutsDplus, nDmeson );
break;
}
- taskSel->SelectCollisionCandidates(trigger);
+ taskSel->SetCommonConstants( MassBins(nDmeson), MinMass(nDmeson), MaxMass(nDmeson), ptBinWidth );
+
+ //taskSel->SelectCollisionCandidates(trigger);
//taskSel->SetDebug();
- AliAnalysisDataContainer *coutHist = mgr->CreateContainer( Form("%sSelector_%s",sgn.Data(),ccName.Data()),
+ AliAnalysisDataContainer *coutHist = mgr->CreateContainer( Form("%sSelector_%s",sgn.Data(),thecuts.Data()),
TList::Class(),AliAnalysisManager::kOutputContainer,
- Form("%s.root:FlowD2H_%s_%s",fileName.Data(),ccName.Data(),thecuts.Data()) );
- AliAnalysisDataContainer *coutArr = mgr->CreateContainer( Form("TaskSelectorCandidates_%s_%s",ccName.Data(),sgn.Data()),
- TObjArray::Class(),AliAnalysisManager::kExchangeContainer);
+ Form("%s.root:FlowD2H_%s",fileName.Data(),thecuts.Data()) );
+ AliAnalysisDataContainer *exc_TPC = mgr->CreateContainer( Form("TPCEventWithCandidates_%s_%s",sgn.Data(),thecuts.Data()),
+ AliFlowEventSimple::Class(),
+ AliAnalysisManager::kExchangeContainer );
+ AliAnalysisDataContainer *exc_VZE = mgr->CreateContainer( Form("VZEEventWithCandidates_%s_%s",sgn.Data(),thecuts.Data()),
+ AliFlowEventSimple::Class(),
+ AliAnalysisManager::kExchangeContainer );
mgr->AddTask(taskSel);
mgr->ConnectOutput(taskSel,1,coutHist);
- mgr->ConnectOutput(taskSel,2,coutArr);
+ mgr->ConnectOutput(taskSel,2,exc_TPC);
+ mgr->ConnectOutput(taskSel,3,exc_VZE);
mgr->ConnectInput (taskSel,0,cinput1);
- // * RAW FLOWEVENT TPC *************************************************
- AliAnalysisDataContainer *exc_TPC = MakeFlowEvent("TPC", ccName.Data(), fileName.Data(), thecuts.Data(), ptBinWidth, cinput1,
- coutArr, cutsEvent, cutsRFPTPC, cutsPOI, true, nDmeson, 1.0);
- // * RAW FLOWEVENT VZERO ***********************************************
- AliAnalysisDataContainer *exc_VZE = MakeFlowEvent("VZE", ccName.Data(), fileName.Data(), thecuts.Data(), ptBinWidth, cinput1,
- coutArr, cutsEvent, cutsRFPVZE, cutsPOI, false, nDmeson, 5.0);
+
// * HANGING ANALYSIS TASKS ********************************************
int harm = myHarmonic;
for(int mb=0; mb!=myMassBands; ++mb) {
if(bDoQC) {
- AddQCmethod( Form("%sQCTPCMB%d",sgn.Data(),mb), ccName.Data(), fileName.Data(), thecuts.Data(), harm, exc_TPC, filterPOIQC[mb]);
+ AddQCmethod( Form("%sQCTPCMB%d",sgn.Data(),mb), fileName.Data(), thecuts.Data(), harm, exc_TPC, filterPOIQC[mb]);
}
if(bDoSPVZERO) {
- AddSPmethod( Form("%sSPVZEMB%d",sgn.Data(),mb), ccName.Data(), fileName.Data(), thecuts.Data(), etaVZERO1, etaVZERO2, etaVZERO3, etaVZERO4,
- "Qa", harm, exc_VZE, 0, filterPOIQC[mb], NULL, bDoEPAlso );
- AddSPmethod( Form("%sSPVZEMB%d",sgn.Data(),mb), ccName.Data(), fileName.Data(), thecuts.Data(), etaVZERO1, etaVZERO2, etaVZERO3, etaVZERO4,
- "Qb", harm, exc_VZE, 0, filterPOIQC[mb], NULL, bDoEPAlso );
+ AddSPmethod( Form("%sSPVZEMB%d",sgn.Data(),mb), fileName.Data(), thecuts.Data(), etaVZERO1, etaVZERO2, etaVZERO3, etaVZERO4,
+ "Qa", harm, exc_VZE, 0, filterPOIQC[mb], NULL, false, shrinkSP );
+ AddSPmethod( Form("%sSPVZEMB%d",sgn.Data(),mb), fileName.Data(), thecuts.Data(), etaVZERO1, etaVZERO2, etaVZERO3, etaVZERO4,
+ "Qb", harm, exc_VZE, 0, filterPOIQC[mb], NULL, false, shrinkSP );
+ }
+ if(bDoEPVZERO) {
+ AddEPmethod( Form("%sEPVZEMB%d",sgn.Data(),mb), fileName.Data(), thecuts.Data(), etaVZERO1, etaVZERO2, etaVZERO3, etaVZERO4,
+ "QaQb", harm, exc_VZE, 0, filterPOIQC[mb], NULL, true, shrinkSP );
}
if(bDoSPTPC) {
for(int eg=0; eg!=2; ++eg) {
- AddSPmethod( Form("%sSPTPCMB%d",sgn.Data(),mb), ccName.Data(), fileName.Data(), thecuts.Data(), -0.8, -gapTPC*eg, +gapTPC*eg, +0.8,
- "Qa", harm, exc_TPC, eg, filterPOISP[mb][1], NULL, bDoEPAlso );
- AddSPmethod( Form("%sSPTPCMB%d",sgn.Data(),mb), ccName.Data(), fileName.Data(), thecuts.Data(), -0.8, -gapTPC*eg, +gapTPC*eg, +0.8,
- "Qb", harm, exc_TPC, eg, filterPOISP[mb][0], NULL, bDoEPAlso );
+ AddSPmethod( Form("%sSPTPCMB%d",sgn.Data(),mb), fileName.Data(), thecuts.Data(), -0.8, -gapTPC*eg, +gapTPC*eg, +0.8,
+ "Qa", harm, exc_TPC, eg, filterPOISP[mb][1], NULL, false, shrinkSP );
+ AddSPmethod( Form("%sSPTPCMB%d",sgn.Data(),mb), fileName.Data(), thecuts.Data(), -0.8, -gapTPC*eg, +gapTPC*eg, +0.8,
+ "Qb", harm, exc_TPC, eg, filterPOISP[mb][0], NULL, false, shrinkSP );
}
}
+ if(bDoEPTPC) {
+ AddSPmethod( Form("%sEPTPCMB%d",sgn.Data(),mb), fileName.Data(), thecuts.Data(), -0.8, -0.0, +0.0, +0.8,
+ "QaQb", harm, exc_TPC, 0, filterPOIQC[mb][0], NULL, true, shrinkSP );
+ }
}
}
-void AddSPmethod(char *name, char *ccName, char *fileName, char *thecuts,
+void AddSPmethod(char *name, char *fileName, char *thecuts,
double minEtaA, double maxEtaA, double minEtaB, double maxEtaB,
char *Qvector, int harmonic, AliAnalysisDataContainer *flowEvent, int eg,
AliFlowTrackSimpleCuts *cutsPOI=NULL, AliFlowTrackSimpleCuts *cutsRFP=NULL,
- bool bEP ) {
- TString myFolder = Form("%sv%d_%s",ccName,harmonic,thecuts);
- TString myNameSP = Form("%s%sSPv%d%sGAP%d",name,ccName,harmonic,Qvector,eg);
- TString myNameEP = Form("%s%sEPv%d%sGAP%d",name,ccName,harmonic,Qvector,eg);
+ bool bEP, bool shrink=false ) {
+ TString myFolder = Form("v%d_%s",harmonic,thecuts);
+ TString myNameSP = Form("%sSPv%d%sGAP%d_%s",name,harmonic,Qvector,eg,thecuts);
AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
AliAnalysisDataContainer *flowEvent2 = mgr->CreateContainer( Form("Filter_%s", myNameSP.Data()),
AliFlowEventSimple::Class(),
mgr->AddTask(tskFilter);
mgr->ConnectInput( tskFilter,0,flowEvent);
mgr->ConnectOutput(tskFilter,1,flowEvent2);
- //SP
AliAnalysisDataContainer *outSP = mgr->CreateContainer( myNameSP.Data(),
TList::Class(),AliAnalysisManager::kOutputContainer,
Form("%s.root:FlowD2H_SP_%s",fileName,myFolder.Data()) );
tskSP->SetApplyCorrectionForNUA(kTRUE);
tskSP->SetHarmonic(harmonic);
tskSP->SetTotalQvector(Qvector);
+ if(bEP) tskSP->SetBehaveAsEP();
+ if(shrink) tskSP->SetBookOnlyBasicCCH(kTRUE);
mgr->AddTask(tskSP);
mgr->ConnectInput( tskSP,0,flowEvent2);
mgr->ConnectOutput(tskSP,1,outSP);
-
- //EP
- if(bEP) {
- AliAnalysisDataContainer *outEP = mgr->CreateContainer( myNameEP.Data(),
- TList::Class(),AliAnalysisManager::kOutputContainer,
- Form("%s.root:FlowD2H_EP_%s",fileName,myFolder.Data()) );
- AliAnalysisTaskScalarProduct *tskEP = new AliAnalysisTaskScalarProduct( Form("TaskEventsPlane_%s",
- myNameEP.Data()),kFALSE);
- tskEP->SetApplyCorrectionForNUA(kTRUE);
- tskEP->SetHarmonic(harmonic);
- tskEP->SetTotalQvector(Qvector);
- tskEP->SetBehaveAsEP();
- mgr->AddTask(tskEP);
- mgr->ConnectInput( tskEP,0,flowEvent2);
- mgr->ConnectOutput(tskEP,1,outEP);
- }
}
-void AddQCmethod(char *name, char *ccName, char *fileName, char *thecuts,
+void AddQCmethod(char *name, char *fileName, char *thecuts,
int harmonic, AliAnalysisDataContainer *flowEvent,
AliFlowTrackSimpleCuts *cutsPOI=NULL, AliFlowTrackSimpleCuts *cutsRFP=NULL) {
- TString myFolder = Form("%sv%d_%s",ccName,harmonic,thecuts);
- TString myName = Form("%s%sv%d",name,ccName,harmonic);
+ TString myFolder = Form("v%d_%s",harmonic,thecuts);
+ TString myName = Form("%sv%d_%s",name,harmonic,thecuts);
AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
AliAnalysisDataContainer *flowEvent2 = mgr->CreateContainer( Form("Filter_%s", myName.Data()),
AliFlowEventSimple::Class(),
myName.Data()),kFALSE);
tskQC->SetApplyCorrectionForNUA(kTRUE);
tskQC->SetHarmonic(harmonic);
+ tskQC->SetBookOnlyBasicCCH(kTRUE);
mgr->AddTask(tskQC);
mgr->ConnectInput( tskQC,0,flowEvent2);
mgr->ConnectOutput(tskQC,1,outQC);
}
-AliAnalysisDataContainer* MakeFlowEvent(char* RFPName, char* ccName, char *fileName, char *thecuts, Int_t ptbins,
- AliAnalysisDataContainer *input,
- AliAnalysisDataContainer *array,
- AliFlowEventCuts *eventCuts,
- AliFlowTrackCuts *rfpCuts, AliFlowTrackCuts *poiCuts,
- bool turnOnQA, int nDmeson, double etaMax=1.0) {
- TString meson = DMesonName(nDmeson);
- TString myName = Form("%sFlowEventQA%s%s",meson.Data(),ccName,RFPName);
- AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
- AliAnalysisDataContainer *exc = mgr->CreateContainer( Form("exchange_%s", myName.Data()),
- AliFlowEventSimple::Class(),
- AliAnalysisManager::kExchangeContainer );
- AliAnalysisDataContainer *out = mgr->CreateContainer( myName.Data(),
- TList::Class(),AliAnalysisManager::kOutputContainer,
- Form("%s.root:FlowD2H_%s_%s",fileName,ccName,thecuts) );
- AliAnalysisTaskFlowEvent *fe = new AliAnalysisTaskFlowEvent( Form("Task_%s",myName.Data()),"", kFALSE, 666, kTRUE );
- fe->SetCutsEvent(eventCuts);
- fe->SetCutsRP(rfpCuts);
- fe->SetCutsPOI(poiCuts);
- fe->SetQAOn(turnOnQA);
- fe->SelectCollisionCandidates(AliVEvent::kCentral|AliVEvent::kSemiCentral|AliVEvent::kMB);
-
- fe->SetNbinsEta(20); fe->SetEtaMin(-etaMax); fe->SetEtaMax(+etaMax);
-
- int bins = NumberOfMassBins(nDmeson);
- fe->SetNbinsMass( bins );
- fe->SetMassMin( LowMassBin(nDmeson,0) );
- fe->SetMassMax( LowMassBin(nDmeson,bins) );
+int MassBands( int nDmeson, bool bOldApproach=false ) {
+ switch (nDmeson) {
+ case ( AliRDHFCuts::kD0toKpiCuts ):
+ if(bOldApproach) return 5;
+ else return 26;
+ case ( AliRDHFCuts::kDstarCuts ):
+ return 25;
+ }
+}
- fe->SetNbinsPt(24/ptbins); fe->SetPtMin(0); fe->SetPtMax(24);
- fe->SetNbinsMult(2); fe->SetMultMin(2); fe->SetMultMax(10);
- fe->SetNbinsPhi(20); fe->SetPhiMin(0); fe->SetPhiMax(TMath::TwoPi());
- fe->SetNbinsQ(10); fe->SetQMin( 0 ); fe->SetQMax( 3 );
+double MassBandLowEdge( int nDmeson, int mb, bool bOldApproach=false ) {
+ switch (nDmeson) {
+ case ( AliRDHFCuts::kD0toKpiCuts ): // 2 + 20 + 4
+ double lowEdgeMinimal[5+1] = {1.75,1.80,1.83,1.90,1.93,2.03};
+ double lowEdge[26+1] = { 1.66, 1.71, 1.76, 1.77, 1.78, 1.79, 1.80, 1.81, 1.82, 1.83,
+ 1.84, 1.85, 1.86, 1.87, 1.88, 1.89, 1.90, 1.91, 1.92, 1.93,
+ 1.94, 1.95, 1.96, 2.01, 2.06, 2.11, 2.16 };
+ if(bOldApproach) return lowEdgeMinimal[mb];
+ else return lowEdge[mb];
+ case ( AliRDHFCuts::kDstarCuts ): // symmetric mass bands (TOTUNE)
+ int bins = MassBands( nDmeson );
+ double min = 0.138;
+ double max = 0.158;
+ return min+mb*(max-min)/bins;
+ }
+}
- mgr->AddTask(fe);
- mgr->ConnectInput (fe,0,input);
- mgr->ConnectInput (fe,1,array);
- mgr->ConnectOutput(fe,1,exc);
- mgr->ConnectOutput(fe,2,out);
- return exc;
+double MinMass( int nDmeson ) {
+ switch (nDmeson) {
+ case ( AliRDHFCuts::kD0toKpiCuts ):
+ return 1.66;
+ case ( AliRDHFCuts::kDstarCuts ):
+ return 1.38;
+ }
}
-double LowMassBin( int nDmeson, int mb) {
- double min,max;
- int bins = NumberOfMassBins( nDmeson );
- if(mb>bins) return 0.0;
+double MaxMass( int nDmeson ) {
switch (nDmeson) {
case ( AliRDHFCuts::kD0toKpiCuts ):
- min = 1.700;
- max = 2.200;
- break;
+ return 2.16;
case ( AliRDHFCuts::kDstarCuts ):
- min = 0.138;
- max = 0.158;
- break;
+ return 1.58;
}
- return min+mb*(max-min)/bins;
}
-int NumberOfMassBins( int nDmeson ) {
+int MassBins( int nDmeson ) {
switch (nDmeson) {
case ( AliRDHFCuts::kD0toKpiCuts ):
return 50;
//==============================================================================
// FlowD2H main task:
-// >> Select candidates and passes the array to the daughter tasks.
+// >> Select candidates and passes flowevents to the daughter tasks.
// >> The POIcuts are polymorphic based on the AliRDHFCuts class allowing the
// use of all charmed candidates reconstructed in the central barrel.
// Author: Carlos Perez (cperez@cern.ch)
#include "TMath.h"
-#include "AliFlowEventCuts.h"
+#include "AliFlowCommonConstants.h"
+#include "AliFlowEvent.h"
+#include "AliFlowTrackCuts.h"
#include "AliFlowCandidateTrack.h"
#include "TObjArray.h"
//_____________________________________________________________________________
AliAnalysisTaskFlowD2H::AliAnalysisTaskFlowD2H() :
-AliAnalysisTaskSE(), fEventCuts(NULL), fCutsPOI(NULL), fSource(0),
- fDebugV2(kFALSE), fHList(NULL), fEvent(NULL), fCandidates(NULL)
+ AliAnalysisTaskSE(), fTPCEvent(NULL), fVZEEvent(NULL),
+ fCutsTPC(NULL), fCutsVZE(NULL), fNoPOIs(NULL), fCutsPOI(NULL),
+ fSource(0), fDebugV2(kFALSE), fMassBins(0), fMinMass(0.),
+ fMaxMass(0.), fPtBinWidth(0), fHList(NULL), fEvent(NULL),
+ fCC(NULL), fRFPMTPC(NULL), fRFPPhiTPC(NULL), fCandidates(NULL)
{
// Default constructor
}
//_____________________________________________________________________________
-AliAnalysisTaskFlowD2H::AliAnalysisTaskFlowD2H(const char *name,
- AliFlowEventCuts *eventCuts,
+AliAnalysisTaskFlowD2H::AliAnalysisTaskFlowD2H(const char *name,
+ AliFlowTrackCuts *cutsTPC,
+ AliFlowTrackCuts *cutsVZE,
AliRDHFCuts *cutsPOIs,
Int_t specie) :
- AliAnalysisTaskSE(name), fEventCuts(eventCuts), fCutsPOI(cutsPOIs),
- fSource(specie), fDebugV2(kFALSE), fHList(NULL), fEvent(NULL), fCandidates(NULL)
+ AliAnalysisTaskSE(name), fTPCEvent(NULL), fVZEEvent(NULL),
+ fCutsTPC(cutsTPC), fCutsVZE(cutsVZE), fNoPOIs(NULL), fCutsPOI(cutsPOIs),
+ fSource(specie), fDebugV2(kFALSE), fMassBins(0), fMinMass(0.),
+ fMaxMass(0.), fPtBinWidth(0), fHList(NULL), fEvent(NULL),
+ fCC(NULL), fRFPMTPC(NULL), fRFPPhiTPC(NULL), fCandidates(NULL)
{
// Standard constructor
DefineInput( 0,TChain::Class());
DefineOutput(1,TList::Class());
- DefineOutput(2,TObjArray::Class());
+ DefineOutput(2,AliFlowEventSimple::Class());
+ DefineOutput(3,AliFlowEventSimple::Class());
}
//_____________________________________________________________________________
AliAnalysisTaskFlowD2H::~AliAnalysisTaskFlowD2H(){
// delete objects
+ if(fTPCEvent) delete fTPCEvent;
+ if(fVZEEvent) delete fVZEEvent;
+ if(fCutsTPC) delete fCutsTPC;
+ if(fCutsVZE) delete fCutsVZE;
+ if(fNoPOIs) delete fNoPOIs;
if(fCutsPOI) delete fCutsPOI;
if(fHList) delete fHList;
if(fCandidates) delete fCandidates;
fEvent->GetXaxis()->SetBinLabel(2,"SELECTED");
fEvent->GetXaxis()->SetBinLabel(3,"DELTA AOD REACHED");
fHList->Add( fEvent );
+ fCC = new TH1D("CentralityClass","Centrality Class",50,0,100);
+ fHList->Add( fCC );
+ fRFPMTPC = new TH1D("RFPMultiplicityTPC","RFP Multiplicity TPC",300,0,3000);
+ fHList->Add( fRFPMTPC );
+ fRFPPhiTPC = new TH1D("RFPPhiTPC","RFP Phi TPC",180,0,TMath::TwoPi());
+ fHList->Add( fRFPPhiTPC );
- fCandidates = new TObjArray(300);
+ fCandidates = new TObjArray(100);
fCandidates->SetOwner();
+ AliFlowCommonConstants* cc = AliFlowCommonConstants::GetMaster();
+ cc->SetNbinsMult(1);
+ cc->SetNbinsPt(24/fPtBinWidth);
+ cc->SetNbinsPhi(1);
+ cc->SetNbinsEta(15);
+ cc->SetNbinsQ(1);
+ cc->SetNbinsMass( fMassBins );
+ cc->SetMultMin(1);
+ cc->SetMultMax(2);
+ cc->SetPtMin(0);
+ cc->SetPtMax(24);
+ cc->SetPhiMin(0);
+ cc->SetPhiMax(TMath::TwoPi());
+ cc->SetEtaMin(-3.9);
+ cc->SetEtaMax(+5.1);
+ cc->SetQMin(0);
+ cc->SetQMax(1);
+ cc->SetMassMin( fMinMass );
+ cc->SetMassMax( fMaxMass );
+
+ fTPCEvent = new AliFlowEvent(3000);
+ fVZEEvent = new AliFlowEvent(170);
+
+ fNoPOIs = new AliFlowTrackCuts( "noPOIs" );
+ fNoPOIs->SetParamType(AliFlowTrackCuts::kGlobal);
+ fNoPOIs->SetPtRange(+1,-1);
+
PostData(1,fHList);
- PostData(2,fCandidates);
+ PostData(2,fTPCEvent);
+ PostData(3,fVZEEvent);
}
//_____________________________________________________________________________
void AliAnalysisTaskFlowD2H::UserExec(Option_t *)
if(!fAOD) return;
fEvent->Fill( 0 );
- if(!fEventCuts->IsSelected(fAOD)) return;
+ // floweventcuts::isselected() and alirdhfcuts::iseventselected() cut on the same
+ // values in the same way BUT the latter also loads the PIDresponse object from the
+ // event header!!!
+ // if(!fEventCuts->IsSelected(fAOD)) return;
+ if(!fCutsPOI->IsEventSelected(fAOD)) return;
fEvent->Fill( 1 );
+ fCC->Fill( fCutsPOI->GetCentrality(fAOD) );
+
+ fCutsTPC->SetEvent( fAOD, MCEvent() );
+ fCutsVZE->SetEvent( fAOD, MCEvent() );
+ fNoPOIs->SetEvent( fAOD, MCEvent() );
+ fTPCEvent->Fill( fCutsTPC, fNoPOIs );
+ fVZEEvent->Fill( fCutsVZE, fNoPOIs );
+
+ Int_t rfps = fTPCEvent->GetNumberOfRPs();
+ fRFPMTPC->Fill( rfps );
+ for(int iRPs=0; iRPs!=rfps; ++iRPs ) {
+ AliFlowTrack *iRP = dynamic_cast<AliFlowTrack*>(fTPCEvent->GetTrack( iRPs ));
+ if (!iRP) continue;
+ fRFPPhiTPC->Fill( iRP->Phi() );
+ }
+
if (fDebugV2) printf("Event selected\n");
fCandidates->SetLast(-1); // resets the array
FillDplustoKpipi(fAOD); break;
}
- if (fDebugV2) printf("Candidates inserted: %d\n", fCandidates->GetEntriesFast() );
- PostData(1,fHList);
- PostData(2,fCandidates);
+ if(fDebugV2) printf("TPCevent %d | VZEevent %d\n", fTPCEvent->NumberOfTracks(), fVZEEvent->NumberOfTracks() );
+ //inject candidates
+ if (fDebugV2) printf("I received %d candidates\n",fCandidates->GetEntriesFast());
+ for(int iCand=0; iCand!=fCandidates->GetEntriesFast(); ++iCand ) {
+ AliFlowCandidateTrack *cand = dynamic_cast<AliFlowCandidateTrack*>(fCandidates->At(iCand));
+ if (!cand) continue;
+ if (fDebugV2) printf(" >Checking at candidate %d with %d daughters: mass %f\n",iCand,cand->GetNDaughters(),cand->Mass());
+ for(int iDau=0; iDau!=cand->GetNDaughters(); ++iDau) {
+ if(fDebugV2) printf(" >Daughter %d with fID %d", iDau, cand->GetIDDaughter(iDau));
+ for(int iRPs=0; iRPs!=fTPCEvent->NumberOfTracks(); ++iRPs ) {
+ AliFlowTrack *iRP = dynamic_cast<AliFlowTrack*>(fTPCEvent->GetTrack( iRPs ));
+ if (!iRP) continue;
+ if( !iRP->InRPSelection() ) continue;
+ if( cand->GetIDDaughter(iDau) == iRP->GetID() ) {
+ if(fDebugV2) printf(" was in RP set");
+ iRP->SetForRPSelection(kFALSE);
+ fTPCEvent->SetNumberOfRPs( fTPCEvent->GetNumberOfRPs() -1 );
+ }
+ }
+ if(fDebugV2) printf("\n");
+ }
+ cand->SetForPOISelection(kTRUE);
+ fTPCEvent->InsertTrack( ((AliFlowTrack*) cand) );
+ fVZEEvent->InsertTrack( ((AliFlowTrack*) cand) );
+ }
+ if(fDebugV2) printf("TPCevent %d | VZEevent %d\n", fTPCEvent->NumberOfTracks(), fVZEEvent->NumberOfTracks() );
+ PostData(1,fHList);
+ PostData(2,fTPCEvent);
+ PostData(3,fVZEEvent);
}
//______________________________________________________________________________
void AliAnalysisTaskFlowD2H::FillD0toKpi(const AliAODEvent *theAOD)
}
return;
}
+
+void AliAnalysisTaskFlowD2H::SetCommonConstants(Int_t massBins, Double_t minMass, Double_t maxMass, Int_t ptWidth) {
+ fMassBins = massBins;
+ fMinMass = minMass;
+ fMaxMass = maxMass;
+ fPtBinWidth = ptWidth;
+}