]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGHF/vertexingHF/charmFlow/AddTaskFlowD2H.C
Added support for dylib in test mode
[u/mrichter/AliRoot.git] / PWGHF / vertexingHF / charmFlow / AddTaskFlowD2H.C
index b4989062eec9d8d8aaf0d91f18e1a46770808f54..cc1e27c3c40316a72d0e8d6640a8cc2daceff657 100644 (file)
-void AddTaskFlowD2H( int nDmeson, TString fileName, int RPsource,
-                     int EtaGapSP=3, double aMax=-0.2, double bMin=+0.2,
-                     int minCent=30, int maxCent=50, TString suffixName="C" )
-{
-  suffixName += Form("%d%d_%s",minCent,maxCent,fileName.Data());
-  //-R-P---c-u-t-s--------------------------------------------------------------
-  AliFlowTrackCuts* cutsRP;
-  double aMin, aMax, bMin, bMax;    // For SP method
-  switch (RPsource) {
-    case (0):
-      cutsRP = (AliFlowTrackCuts*) 
-               AliFlowTrackCuts::GetStandardTPCStandaloneTrackCuts2010();
-      cutsRP->SetEtaRange( -0.8, +0.8 );
-      cutsRP->SetPtRange( 0.2, 5.0 );
-      cutsRP->SetAODfilterBit(1);
-      cutsRP->SetName( Form("rp_cuts_%s",suffixName.Data()) );
-      aMin=-0.8, bMax=0.8;
-      break;
-    case (1):
-      cutsRP = (AliFlowTrackCuts*) 
-               AliFlowTrackCuts::GetStandardVZEROOnlyTrackCuts();
-      aMin = -3.7; aMax = -2.2 ; bMin = 3.4; bMax = +5.1;
-      break;
-  }
-  fileName.Append(".root");
-  //-P-O-I---c-u-t-s------------------------------------------------------------
-  double flowBands[5][2];
-  switch (nDmeson) { //thanks to ROOT for allowing this
-    case (AliRDHFCuts::kD0toKpiCuts):
-      AliRDHFCutsD0toKpi *cutsPOI = new AliRDHFCutsD0toKpi( Form("D0toKpi_%s",suffixName.Data()) );
-      flowBands[0][0]=1.700; flowBands[0][1]=1.750;
-      flowBands[1][0]=1.750; flowBands[1][1]=1.800;
-      flowBands[2][0]=1.830; flowBands[2][1]=1.900;
-      flowBands[3][0]=1.930; flowBands[3][1]=1.970;
-      flowBands[4][0]=1.970; flowBands[4][1]=2.030;
-      break;
-    case (AliRDHFCuts::kDstarCuts):
-      AliRDHFCutsDStartoKpipi *cutsPOI = new AliRDHFCutsDStartoKpipi( Form("DStartoKpipi_%s",suffixName.Data()) );
-      flowBands[0][0]=0.140; flowBands[0][1]=0.142;
-      flowBands[1][0]=0.144; flowBands[1][1]=0.147;
-      flowBands[2][0]=0.150; flowBands[2][1]=0.155;
-      flowBands[3][0]=0.155; flowBands[3][1]=0.160;
-      flowBands[4][0]=0.160; flowBands[4][1]=0.165;
-      break;
+class AliAnalysisDataContainer;
+class AliFlowEventCuts;
+class AliFlowEventTrackCuts;
+class AliFlowEventTrackSimpleCuts;
+class AliRDHFCutsD0toKpi;
+class AliRDHFCutsDStartoKpipi; 
+
+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, Bool_t swapAssumption=kFALSE, Int_t nTPCClusters=70 ) {
+  TFile *filecuts = TFile::Open( fileNameCuts.Data() );
+  if( (!filecuts) || ( filecuts && !filecuts->IsOpen()) ){
+    AliFatal("Could not open cuts file.");
   }
-  cutsPOI->SetStandardCutsPbPb2010();
-  cutsPOI->SetUseCentrality(AliRDHFCuts::kCentV0M);
-  cutsPOI->SetMinCentrality(minCent); cutsPOI->SetMaxCentrality(maxCent);
-  cutsPOI->SetUseAOD049();
+
+  TString fileName = AliAnalysisManager::GetCommonFileName();
+  fileName.ReplaceAll(".root","");
 
   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
   AliAnalysisDataContainer *cinput1 = mgr->GetCommonInputContainer();
 
-  //-----------------FLOWD2H TASK----------------------------
-  AliAnalysisTaskFlowD2H *taskSel = new AliAnalysisTaskFlowD2H(
-                                    Form("FlowD2H_%s",suffixName.Data()),
-                                    cutsRP, cutsPOI, nDmeson);
-  taskSel->SelectCollisionCandidates(AliVEvent::kMB);
-  taskSel->SetDebug();
-  taskSel->SetFlowEtaRangeAB( aMin, aMax, bMin, bMax );
-  TString Qvector;
-  switch (EtaGapSP) {
-    case 0:
-      taskSel->SetPOIEtaRange( -1.5, aMax );
-      Qvector = "Qb";
-      break;
-    case 1:
-      taskSel->SetPOIEtaRange( bMin, +1.5 );
-      Qvector = "Qa";
-      break;
-    case 3:
-      taskSel->SetPOIEtaRange( -1.5, 1.5 );
-      Qvector = "QaQb"; // dummy
-      break;
+  TString thecuts = folderName;
+  TString sgn = DMesonName( nDmeson ) + Form("w%d",ptBinWidth);
+
+  //**********************************************************************
+  // FLOW TRACK CUTS
+  AliFlowTrackCuts* cutsRFPTPC = new AliFlowTrackCuts( "GlobalRFPTPC" );
+  cutsRFPTPC->SetParamType(AliFlowTrackCuts::kGlobal);
+  cutsRFPTPC->SetPtRange(0.2,5.);
+  cutsRFPTPC->SetEtaRange(-0.8,0.8);
+  cutsRFPTPC->SetMinNClustersTPC(nTPCClusters);
+  cutsRFPTPC->SetMinChi2PerClusterTPC(0.2);
+  cutsRFPTPC->SetMaxChi2PerClusterTPC(4.0);
+  cutsRFPTPC->SetAcceptKinkDaughters(kFALSE);
+  cutsRFPTPC->SetMinimalTPCdedx(10.);
+  cutsRFPTPC->SetAODfilterBit(1);
+  //  cutsRFPTPC->SetQA(kTRUE);
+  AliFlowTrackCuts* cutsRFPVZE = new AliFlowTrackCuts( "GlobalRFPVZE" );
+  cutsRFPVZE->SetParamType(AliFlowTrackCuts::kVZERO);
+  cutsRFPVZE->SetEtaRange(-10,+10);
+  cutsRFPVZE->SetPhiMin(0);
+  cutsRFPVZE->SetPhiMax(TMath::TwoPi());
+  //  cutsRFPVZE->SetQA(kTRUE);
+  AliFlowTrackCuts* cutsPOI = new AliFlowTrackCuts( "GlobalPOI" );
+  cutsPOI->SetParamType(AliFlowTrackCuts::kGlobal);
+  cutsPOI->SetPtRange(0.2,-5.);
+  cutsPOI->SetEtaRange(0.8,-0.8);
+
+  //**********************************************************************
+  // POI FILTER CUTS
+  AliFlowTrackSimpleCuts *filterPOIQC[50]; // MASS BANDS
+  AliFlowTrackSimpleCuts *filterPOISP[50][2]; // MASS BANDS || ETA || SUBEVENT GAP
+  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( 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( 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( MassBandLowEdge(nDmeson,mb,bOldApproach) );
+    filterPOIQC[mb]->SetMassMax( MassBandLowEdge(nDmeson,mb+1,bOldApproach) );
+  }
+
+  // * DMESON SELECTOR *************************************************
+  AliAnalysisTaskFlowD2H *taskSel;
+  switch (nDmeson) {
+  case ( AliRDHFCuts::kD0toKpiCuts ):
+    AliRDHFCutsD0toKpi *myCutsD0 = (AliRDHFCutsD0toKpi*)filecuts->Get("D0toKpiCuts");
+    if(!myCutsD0) {
+      AliFatal("Problems reaching D0toKpiCuts");
+    }
+    taskSel = new AliAnalysisTaskFlowD2H( Form("TaskD0Selector_%s",thecuts.Data()), 
+                                         cutsRFPTPC, cutsRFPVZE, myCutsD0, nDmeson );
+    break;
+  case ( AliRDHFCuts::kDstarCuts ):
+    AliRDHFCutsDStartoKpipi *myCutsDStar = (AliRDHFCutsDStartoKpipi*)filecuts->Get("DStartoKpipiCuts");
+    if(!myCutsDStar) {
+      AliFatal("Problems reaching DStarToKpipiCuts");
+    }
+    taskSel = new AliAnalysisTaskFlowD2H( Form("TaskDStarSelector_%s",thecuts.Data()),
+                                         cutsRFPTPC, cutsRFPVZE, myCutsDStar, nDmeson);
+    break;
+  case (AliRDHFCuts::kDplusCuts):
+    AliRDHFCutsDplustoKpipi *myCutsDplus = (AliRDHFCutsDplustoKpipi*)filecuts->Get("AnalysisCuts");
+    if(!myCutsDplus) {
+      AliFatal("Problems reaching AnalysisCuts");
+    }
+    taskSel = new AliAnalysisTaskFlowD2H( Form("TaskDplusSelector_%s",thecuts.Data()), 
+                                         cutsRFPTPC, cutsRFPVZE, myCutsDplus, nDmeson );
+    break;
   }
-  taskSel->SetFlowPtRange( 2, 16 );
-  for(int i=0; i!=5; ++i)
-    taskSel->SetFlowBandRange( i, flowBands[i][0], flowBands[i][1] );
+  taskSel->SetCommonConstants( MassBins(nDmeson), MinMass(nDmeson), MaxMass(nDmeson), ptBinWidth );
+  if (swapAssumption)
+    taskSel->SetSwapAsumption();
+
+  //taskSel->SelectCollisionCandidates(trigger);
+  //taskSel->SetDebug();
+  AliAnalysisDataContainer *coutHist = mgr->CreateContainer( Form("%sSelector_%s",sgn.Data(),thecuts.Data()),
+                                                            TList::Class(),AliAnalysisManager::kOutputContainer,
+                                                            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);
-  AliAnalysisDataContainer *coutputCandidatesQA = mgr->CreateContainer(
-     Form("QA_%s",suffixName.Data()),TList::Class(),
-     AliAnalysisManager::kOutputContainer, fileName+":QACandidates");
-  mgr->ConnectOutput(taskSel,1,coutputCandidatesQA);
+  mgr->ConnectOutput(taskSel,1,coutHist);
+  mgr->ConnectOutput(taskSel,2,exc_TPC);
+  mgr->ConnectOutput(taskSel,3,exc_VZE);
   mgr->ConnectInput (taskSel,0,cinput1);
-  AliAnalysisDataContainer *coutputCandidates[5];
-  for(int r=0; r!=5; ++r) {
-    coutputCandidates[r] = mgr->CreateContainer(
-       Form("Flow_MassBand%d_%s",r,suffixName.Data()),
-       AliFlowEventSimple::Class(), AliAnalysisManager::kExchangeContainer);
-    mgr->ConnectOutput(taskSel,2+r,coutputCandidates[r]);
+
+  // * HANGING ANALYSIS TASKS ********************************************
+  int harm = myHarmonic;
+  for(int mb=0; mb!=myMassBands; ++mb) {
+    if(bDoQC) {
+      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), 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) {
+      AddSPmethod( 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), 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], NULL, true, shrinkSP );
+    }
+  }
+}
+
+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, 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(),
+                                                              AliAnalysisManager::kExchangeContainer );
+  AliAnalysisTaskFilterFE *tskFilter = new AliAnalysisTaskFilterFE( Form("TaskFilter_%s",myNameSP.Data()),
+                                                                   cutsRFP, cutsPOI);
+  tskFilter->SetSubeventEtaRange( minEtaA, maxEtaA, minEtaB, maxEtaB );
+  mgr->AddTask(tskFilter);
+  mgr->ConnectInput( tskFilter,0,flowEvent);
+  mgr->ConnectOutput(tskFilter,1,flowEvent2);
+  AliAnalysisDataContainer *outSP = mgr->CreateContainer( myNameSP.Data(),
+                                                         TList::Class(),AliAnalysisManager::kOutputContainer,
+                                                         Form("%s.root:FlowD2H_SP_%s",fileName,myFolder.Data()) );
+  AliAnalysisTaskScalarProduct *tskSP = new AliAnalysisTaskScalarProduct( Form("TaskScalarProduct_%s",
+                                                                              myNameSP.Data()),kFALSE);
+  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);
+}
+
+void AddQCmethod(char *name, char *fileName, char *thecuts,
+                int harmonic, AliAnalysisDataContainer *flowEvent,
+                AliFlowTrackSimpleCuts *cutsPOI=NULL, AliFlowTrackSimpleCuts *cutsRFP=NULL) {
+  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(),
+                                                              AliAnalysisManager::kExchangeContainer );
+  AliAnalysisTaskFilterFE *tskFilter = new AliAnalysisTaskFilterFE( Form("TaskFilter_%s",myName.Data()),
+                                                                   cutsRFP, cutsPOI);
+  mgr->AddTask(tskFilter);
+  mgr->ConnectInput( tskFilter,0,flowEvent);
+  mgr->ConnectOutput(tskFilter,1,flowEvent2);
+  AliAnalysisDataContainer *outQC = mgr->CreateContainer( myName.Data(),
+                                                         TList::Class(),AliAnalysisManager::kOutputContainer,
+                                                         Form("%s.root:FlowD2H_QC_%s",fileName,myFolder.Data()) );
+  AliAnalysisTaskQCumulants *tskQC = new AliAnalysisTaskQCumulants( Form("TaskQCumulants_%s",
+                                                                        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);
+}
+
+int MassBands( int nDmeson, bool bOldApproach=false ) {
+  switch (nDmeson) {
+  case ( AliRDHFCuts::kDplusCuts ):
+  case ( AliRDHFCuts::kD0toKpiCuts ):
+    if(bOldApproach) return 5;
+    else return 26;
+  case ( AliRDHFCuts::kDstarCuts ):
+    return 13; 
   }
-  // Scalar Product
-  AliAnalysisTaskScalarProduct *taskSP[5];
-  AliAnalysisDataContainer *coutputSP[5];
-  for(int r=0; r!=5; ++r) {
-    taskSP[r] = new AliAnalysisTaskScalarProduct(
-             Form("SP_MassBand%d_%s",r,suffixName.Data()),kFALSE);
-    taskSP[r]->SetRelDiffMsub(1.0);
-    taskSP[r]->SetApplyCorrectionForNUA(kTRUE);
-    taskSP[r]->SetTotalQvector( Qvector.Data() );
-    mgr->AddTask( taskSP[r] );
-    TString outputSP = fileName + Form(":outputSP_MassBand%d",r);
-    coutputSP[r] = mgr->CreateContainer(
-         Form("cobjSP_MassBand%d_%s",r,suffixName.Data()),TList::Class(),
-         AliAnalysisManager::kOutputContainer,outputSP.Data());
-    mgr->ConnectInput(taskSP[r],0,coutputCandidates[r]);
-    mgr->ConnectOutput(taskSP[r],1,coutputSP[r]);
+}
+
+double MassBandLowEdge( int nDmeson, int mb, bool bOldApproach=false ) {
+  switch (nDmeson) {
+  case ( AliRDHFCuts::kDplusCuts ):
+  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 ): // 2 + 10 + 3
+    double lowEdge[13+1]={0.138, 0.139, 0.141, 0.143, 0.144, 0.145, 0.146, 0.147, 0.148, 0.150, 0.152,  0.154, 0.156, 0.158}; 
+    return lowEdge[mb];
   }
-  if(RPsource!=0)
-    return;
-  if(EtaGapSP!=3)
-    return;
-  cout << "HERE!\n";
-  // Event Plane
-  AliAnalysisTaskEventPlane *taskEP[5];
-  AliAnalysisDataContainer *coutputEP[5];
-  for(int r=0; r!=5; ++r) {
-    taskEP[r] = new AliAnalysisTaskEventPlane(
-             Form("EP_MassBand%d_%s",r,suffixName.Data()),kFALSE);
-    taskEP[r]->SetApplyCorrectionForNUA(kTRUE);
-    taskEP[r]->SetNormalizationType( 0 );
-    mgr->AddTask( taskEP[r] );
-    TString outputEP = fileName + Form(":outputEP_MassBand%d",r);
-    coutputEP[r] = mgr->CreateContainer(
-         Form("cobjEP_MassBand%d_%s",r,suffixName.Data()),TList::Class(),
-         AliAnalysisManager::kOutputContainer,outputEP.Data());
-    mgr->ConnectInput(taskEP[r],0,coutputCandidates[r]);
-    mgr->ConnectOutput(taskEP[r],1,coutputEP[r]);
+}
+
+double MinMass( int nDmeson ) {
+  switch (nDmeson) {
+  case ( AliRDHFCuts::kDplusCuts ):
+  case ( AliRDHFCuts::kD0toKpiCuts ):
+    return 1.66;
+  case ( AliRDHFCuts::kDstarCuts ):
+    return 0.138;
   }
-  // Event Plane 2
-  AliAnalysisTaskEventPlane *taskEP2[5];
-  AliAnalysisDataContainer *coutputEP2[5];
-  for(int r=0; r!=5; ++r) {
-    taskEP2[r] = new AliAnalysisTaskEventPlane(
-             Form("EP2_MassBand%d_%s",r,suffixName.Data()),kFALSE);
-    taskEP2[r]->SetApplyCorrectionForNUA(kTRUE);
-    taskEP2[r]->SetNormalizationType( 0 );
-    mgr->AddTask( taskEP2[r] );
-    TString outputEP2 = fileName + Form(":outputEP2_MassBand%d",r);
-    coutputEP2[r] = mgr->CreateContainer(
-         Form("cobjEP2_MassBand%d_%s",r,suffixName.Data()),TList::Class(),
-         AliAnalysisManager::kOutputContainer,outputEP2.Data());
-    mgr->ConnectInput(taskEP2[r],0,coutputCandidates[r]);
-    mgr->ConnectOutput(taskEP2[r],1,coutputEP2[r]);
+}
+
+double MaxMass( int nDmeson ) {
+  switch (nDmeson) {
+  case ( AliRDHFCuts::kDplusCuts ):
+  case ( AliRDHFCuts::kD0toKpiCuts ):
+    return 2.16;
+  case ( AliRDHFCuts::kDstarCuts ):
+    return 0.158;
   }
-  // Q-Cumulants
-  AliAnalysisTaskQCumulants *taskQC[5];
-  AliAnalysisDataContainer *coutputQC[5];
-  for(int r=0; r!=5; ++r) {
-    taskQC[r] = new AliAnalysisTaskQCumulants(
-             Form("QC_MassBand%d_%s",r,suffixName.Data()),kFALSE);
-    taskQC[r]->SetCalculateCumulantsVsM(kFALSE);
-    taskQC[r]->SetnBinsMult(10000);
-    taskQC[r]->SetMinMult(0.);
-    taskQC[r]->SetMaxMult(10000.);
-    taskQC[r]->SetApplyCorrectionForNUA(kTRUE);
-    taskQC[r]->SetFillMultipleControlHistograms(kFALSE);
-    mgr->AddTask( taskQC[r] );
-    TString outputQC = fileName + Form(":outputQC_MassBand%d",r);
-    coutputQC[r] = mgr->CreateContainer(
-         Form("cobjQC_MassBand%d_%s",r,suffixName.Data()),TList::Class(),
-         AliAnalysisManager::kOutputContainer,outputQC.Data());
-    mgr->ConnectInput(taskQC[r],0,coutputCandidates[r]);
-    mgr->ConnectOutput(taskQC[r],1,coutputQC[r]);
+}
+
+int MassBins( int nDmeson ) {
+  switch (nDmeson) {
+  case ( AliRDHFCuts::kDplusCuts ):
+  case ( AliRDHFCuts::kD0toKpiCuts ):
+    return 50;
+  case ( AliRDHFCuts::kDstarCuts ):
+    return 40; 
   }
 }
 
+TString DMesonName( int nDmeson ) {
+  TString toReturn;
+  switch (nDmeson) {
+  case ( AliRDHFCuts::kDplusCuts ):
+    toReturn = "DPlus"; break;
+  case ( AliRDHFCuts::kD0toKpiCuts ):
+    toReturn = "D0"; break;
+  case ( AliRDHFCuts::kDstarCuts ):
+    toReturn = "DStar"; break;
+  }
+  return toReturn;
+}