ROOT logo
AliAnalysisTaskSED0Mass *AddTaskD0Mass(Int_t flag=0/*0 = D0,1 = LS*/,Bool_t readMC=kFALSE,
				       Bool_t filldistr=kFALSE,Bool_t cutOnDistr=kFALSE,
				       Int_t system=0/*0=pp,1=PbPb*/,Int_t flagD0D0bar=0,
				       Float_t minC=0, Float_t maxC=0,
				       TString finDirname="Loose",
				       TString finname="",TString finObjname="D0toKpiCuts", Bool_t flagAOD049=kFALSE,
				       Bool_t FillMassPt=false, Bool_t FillImpPar=false,
				       Bool_t DrawDetSignal=false, Bool_t PIDCheck=false, Bool_t FillMassY=false)
{
  //
  // AddTask for the AliAnalysisTaskSE for D0 candidates
  // invariant mass histogram and association with MC truth 
  // (using MC info in AOD) and cut variables distributions
  // C.Bianchin  chiara.bianchin@pd.infn.it
  //


  // Get the pointer to the existing analysis manager via the static access method.
  //==============================================================================
  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
  if (!mgr) {
    ::Error("AddTaskD0Distr", "No analysis manager to connect to.");
    return NULL;
  }   

  TString filename="",out1name="",out2name="",out3name="",out4name="",out5name="",out6name="",out7name="",out8name="",out9name="", inname="";
  filename = AliAnalysisManager::GetCommonFileName();
  filename += ":PWG3_D2H_";
  if(flag==0){
    filename+="D0InvMass";
    if(cutOnDistr) filename+="C"; 
    if(flagD0D0bar==1)filename+="D0";
    if(flagD0D0bar==2)filename+="D0bar";
    //list mass
    out1name="coutputmassD0Mass";
    if(cutOnDistr) out1name+="C"; 
    if(flagD0D0bar==1)out1name+="D0";
    if(flagD0D0bar==2)out1name+="D0bar";
    //list distr
    out2name="coutputmassD0distr";
    if(cutOnDistr) out2name+="C"; 
    if(flagD0D0bar==1)out2name+="D0";
    if(flagD0D0bar==2)out2name+="D0bar";
   //hist entries
    out3name="nEntriesD0";
    if(cutOnDistr) out3name+="C"; 
    if(flagD0D0bar==1)out3name+="D0";
    if(flagD0D0bar==2)out3name+="D0bar";
   //cuts object
    out4name="cutsD0";
    if(cutOnDistr) out4name+="C"; 
    if(flagD0D0bar==1)out4name+="D0";
    if(flagD0D0bar==2)out4name+="D0bar";

    //AliNormalizationCounter
    out5name="normalizationCounter";
    if(cutOnDistr) out5name+="C"; 
    if(flagD0D0bar==1)out5name+="D0";
    if(flagD0D0bar==2)out5name+="D0bar";

    // mass, pt, imp param distr
    out6name="coutputmassD0MassPt";
    if(cutOnDistr) out6name+="C"; 
    if(flagD0D0bar==1)out6name+="D0";
    if(flagD0D0bar==2)out6name+="D0bar";

    out7name ="coutputVarTree";

    //detector signal hists
    out8name="detectorSignals";
    if(cutOnDistr) out8name+="C"; 
    if(flagD0D0bar==1)out8name+="D0";
    if(flagD0D0bar==2)out8name+="D0bar";

    // mass, y distr
    out9name="coutputmassD0MassY";
    if(cutOnDistr) out9name+="C"; 
    if(flagD0D0bar==1)out9name+="D0";
    if(flagD0D0bar==2)out9name+="D0bar";


    inname="cinputmassD0_0";
    if(cutOnDistr) inname+="C"; 
    if(flagD0D0bar==1)inname+="D0";
    if(flagD0D0bar==2)inname+="D0bar";

  } else {
    filename+="D0InvMassLikeSign";
    if(cutOnDistr) filename+="C"; 
    if(flagD0D0bar==1)filename+="D0";
    if(flagD0D0bar==2)filename+="D0bar";
    //list mass
    out1name="coutputmassLSMass";
    if(cutOnDistr) out1name+="C"; 
    if(flagD0D0bar==1)out1name+="D0";
    if(flagD0D0bar==2)out1name+="D0bar";
    //list distr
    out2name="coutputmassLSdistr";
    if(cutOnDistr) out2name+="C"; 
    if(flagD0D0bar==1)out2name+="D0";
    if(flagD0D0bar==2)out2name+="D0bar";
   //hist entries
    out3name="nEntriesLS";
    if(cutOnDistr) out3name+="C"; 
    if(flagD0D0bar==1)out3name+="D0";
    if(flagD0D0bar==2)out3name+="D0bar";
   //cuts object
    out4name="cutsLS";
    if(cutOnDistr) out4name+="C"; 
    if(flagD0D0bar==1)out4name+="D0";
    if(flagD0D0bar==2)out4name+="D0bar";

    //AliNormalizationCounter
    out5name="normalizationCounterLS";
    if(cutOnDistr) out5name+="C"; 
    if(flagD0D0bar==1)out5name+="D0";
    if(flagD0D0bar==2)out5name+="D0bar";

    // mass, pt, imp param distr
    out6name="coutputmassD0MassPtLS";
    if(cutOnDistr) out6name+="C"; 
    if(flagD0D0bar==1)out6name+="D0";
    if(flagD0D0bar==2)out6name+="D0bar";

    out7name ="coutputVarTreeLS";

    //detector signal hists
    out8name="detectorSignalsLS";
    if(cutOnDistr) out8name+="C"; 
    if(flagD0D0bar==1)out8name+="D0";
    if(flagD0D0bar==2)out8name+="D0bar";

    // mass, y distr
    out9name="coutputmassD0MassYLS";
    if(cutOnDistr) out9name+="C"; 
    if(flagD0D0bar==1)out9name+="D0";
    if(flagD0D0bar==2)out9name+="D0bar";

    
    inname="cinputmassD0_1";
    if(cutOnDistr) inname+="C"; 
    if(flagD0D0bar==1)inname+="D0";
    if(flagD0D0bar==2)inname+="D0bar";
  }
  filename += finDirname.Data();
  out1name += finDirname.Data();
  out2name += finDirname.Data();
  out3name += finDirname.Data(); 
  out4name += finDirname.Data(); 
  out5name += finDirname.Data(); 
  out6name += finDirname.Data();
  out7name += finDirname.Data();
  out8name += finDirname.Data();
  out9name += finDirname.Data();
  inname += finDirname.Data();

   //setting my cut values

    //cuts order
    //       printf("    |M-MD0| [GeV]    < %f\n",fD0toKpiCuts[0]);
    //     printf("    dca    [cm]  < %f\n",fD0toKpiCuts[1]);
    //     printf("    cosThetaStar     < %f\n",fD0toKpiCuts[2]);
    //     printf("    pTK     [GeV/c]    > %f\n",fD0toKpiCuts[3]);
    //     printf("    pTpi    [GeV/c]    > %f\n",fD0toKpiCuts[4]);
    //     printf("    |d0K|  [cm]  < %f\n",fD0toKpiCuts[5]);
    //     printf("    |d0pi| [cm]  < %f\n",fD0toKpiCuts[6]);
    //     printf("    d0d0  [cm^2] < %f\n",fD0toKpiCuts[7]);
    //     printf("    cosThetaPoint    > %f\n",fD0toKpiCuts[8]);

  Bool_t stdcuts=kFALSE;
  TFile* filecuts;
  if( finname.EqualTo("") ) {
    stdcuts=kTRUE; 
  } else {
      filecuts=TFile::Open(finname.Data());
      if(!filecuts ||(filecuts&& !filecuts->IsOpen())){
	AliFatal("Input file not found : check your cut object");
      }
  }

  AliRDHFCutsD0toKpi* RDHFD0toKpi=new AliRDHFCutsD0toKpi();
  if(stdcuts) {
    if(system==0) RDHFD0toKpi->SetStandardCutsPP2010();
    else {
      RDHFD0toKpi->SetStandardCutsPbPb2011();
      if(minC!=0 && maxC!=0) { //if centrality 0 and 0 leave the values in the cut object
	RDHFD0toKpi->SetMinCentrality(minC);
	RDHFD0toKpi->SetMaxCentrality(maxC);
      }
      if(flagAOD049)RDHFD0toKpi->SetUseAOD049(kTRUE);
      RDHFD0toKpi->SetUseCentrality(AliRDHFCuts::kCentV0M);
    }
  }
  else   {
    RDHFD0toKpi = (AliRDHFCutsD0toKpi*)filecuts->Get(finObjname.Data());
    if(!RDHFD0toKpi){
      AliFatal("Specific AliRDHFCuts not found");
      return;
    }
    if(flagAOD049)RDHFD0toKpi->SetUseAOD049(kTRUE);
    if(minC!=0 && maxC!=0) { //if centrality 0 and 0 leave the values in the cut object
      RDHFD0toKpi->SetMinCentrality(minC);
      RDHFD0toKpi->SetMaxCentrality(maxC);
    } 
  }
  //  RDHFD0toKpi->SetName(Form("D0toKpiCuts%d",flag));

  TString centr="";
  if(minC!=0 && maxC!=0) centr = Form("%.0f%.0f",minC,maxC);
  else centr = Form("%.0f%.0f",RDHFD0toKpi->GetMinCentrality(),RDHFD0toKpi->GetMaxCentrality());
  out1name+=centr;
  out2name+=centr;
  out3name+=centr;
  out4name+=centr;
  out5name+=centr;
  out6name+=centr;
  out7name+=centr;
  out8name+=centr;
  out9name+=centr;
  inname+=centr;

  // Aanalysis task    
  TString taskname="MassAndDistrAnalysis";
  if (flag==0)taskname.Prepend("D0");
  else taskname.Prepend("LS");
  AliAnalysisTaskSED0Mass *massD0Task = new AliAnalysisTaskSED0Mass(taskname.Data(),RDHFD0toKpi);
  massD0Task->SetDebugLevel(0);
  massD0Task->SetArray(flag);
  massD0Task->SetReadMC(readMC);
  massD0Task->SetCutOnDistr(cutOnDistr);
  massD0Task->SetUsePid4Distr(kFALSE);
  massD0Task->SetFillOnlyD0D0bar(flagD0D0bar);
  massD0Task->SetSystem(system); //0=pp, 1=PbPb
  massD0Task->SetFillVarHists(filldistr); // default is FALSE if System=PbPb

  massD0Task->SetFillPtHistos(FillMassPt);
  massD0Task->SetFillImpactParameterHistos(FillImpPar);
  massD0Task->SetFillYHistos(FillMassY);
  massD0Task->SetDrawDetSignal(DrawDetSignal);
  massD0Task->SetPIDCheck(PIDCheck);
  //  massD0Task->SetRejectSDDClusters(kTRUE);

  //   massD0Task->SetWriteVariableTree(kTRUE);

  mgr->AddTask(massD0Task);
  
  //
  // Create containers for input/output
  AliAnalysisDataContainer *cinputmassD0 = mgr->CreateContainer(inname,TChain::Class(), 
							  AliAnalysisManager::kInputContainer);

  AliAnalysisDataContainer *coutputmassD01 = mgr->CreateContainer(out1name,TList::Class(),AliAnalysisManager::kOutputContainer, filename.Data()); //mass
  AliAnalysisDataContainer *coutputmassD02 = mgr->CreateContainer(out2name,TList::Class(),AliAnalysisManager::kOutputContainer, filename.Data()); //distr
  AliAnalysisDataContainer *coutputmassD03 = mgr->CreateContainer(out3name,TH1F::Class(),AliAnalysisManager::kOutputContainer, filename.Data()); //nev
  AliAnalysisDataContainer *coutputmassD04 = mgr->CreateContainer(out4name,AliRDHFCutsD0toKpi::Class(),AliAnalysisManager::kOutputContainer, filename.Data()); //cuts
  AliAnalysisDataContainer *coutputmassD05 = mgr->CreateContainer(out5name,AliNormalizationCounter::Class(),AliAnalysisManager::kOutputContainer, filename.Data()); //counter
  AliAnalysisDataContainer *coutputmassD06 = mgr->CreateContainer(out6name,TList::Class(),AliAnalysisManager::kOutputContainer, filename.Data()); //mass vs pt vs impt par
  AliAnalysisDataContainer *coutputmassD07 = mgr->CreateContainer(out7name,TTree::Class(),AliAnalysisManager::kOutputContainer, filename.Data()); //mass vs pt vs impt par
  AliAnalysisDataContainer *coutputmassD08 = mgr->CreateContainer(out8name,TList::Class(),AliAnalysisManager::kOutputContainer, filename.Data()); //dedx
  AliAnalysisDataContainer *coutputmassD09 = mgr->CreateContainer(out9name,TList::Class(),AliAnalysisManager::kOutputContainer, filename.Data()); //mass vs y
  

  
  mgr->ConnectInput(massD0Task,0,mgr->GetCommonInputContainer());

  mgr->ConnectOutput(massD0Task,1,coutputmassD01);
  mgr->ConnectOutput(massD0Task,2,coutputmassD02);
  mgr->ConnectOutput(massD0Task,3,coutputmassD03);
  mgr->ConnectOutput(massD0Task,4,coutputmassD04);
  mgr->ConnectOutput(massD0Task,5,coutputmassD05);
  mgr->ConnectOutput(massD0Task,6,coutputmassD06);
  mgr->ConnectOutput(massD0Task,7,coutputmassD07);
  mgr->ConnectOutput(massD0Task,8,coutputmassD08);
  mgr->ConnectOutput(massD0Task,9,coutputmassD09);


  return massD0Task;
}
 AddTaskD0Mass.C:1
 AddTaskD0Mass.C:2
 AddTaskD0Mass.C:3
 AddTaskD0Mass.C:4
 AddTaskD0Mass.C:5
 AddTaskD0Mass.C:6
 AddTaskD0Mass.C:7
 AddTaskD0Mass.C:8
 AddTaskD0Mass.C:9
 AddTaskD0Mass.C:10
 AddTaskD0Mass.C:11
 AddTaskD0Mass.C:12
 AddTaskD0Mass.C:13
 AddTaskD0Mass.C:14
 AddTaskD0Mass.C:15
 AddTaskD0Mass.C:16
 AddTaskD0Mass.C:17
 AddTaskD0Mass.C:18
 AddTaskD0Mass.C:19
 AddTaskD0Mass.C:20
 AddTaskD0Mass.C:21
 AddTaskD0Mass.C:22
 AddTaskD0Mass.C:23
 AddTaskD0Mass.C:24
 AddTaskD0Mass.C:25
 AddTaskD0Mass.C:26
 AddTaskD0Mass.C:27
 AddTaskD0Mass.C:28
 AddTaskD0Mass.C:29
 AddTaskD0Mass.C:30
 AddTaskD0Mass.C:31
 AddTaskD0Mass.C:32
 AddTaskD0Mass.C:33
 AddTaskD0Mass.C:34
 AddTaskD0Mass.C:35
 AddTaskD0Mass.C:36
 AddTaskD0Mass.C:37
 AddTaskD0Mass.C:38
 AddTaskD0Mass.C:39
 AddTaskD0Mass.C:40
 AddTaskD0Mass.C:41
 AddTaskD0Mass.C:42
 AddTaskD0Mass.C:43
 AddTaskD0Mass.C:44
 AddTaskD0Mass.C:45
 AddTaskD0Mass.C:46
 AddTaskD0Mass.C:47
 AddTaskD0Mass.C:48
 AddTaskD0Mass.C:49
 AddTaskD0Mass.C:50
 AddTaskD0Mass.C:51
 AddTaskD0Mass.C:52
 AddTaskD0Mass.C:53
 AddTaskD0Mass.C:54
 AddTaskD0Mass.C:55
 AddTaskD0Mass.C:56
 AddTaskD0Mass.C:57
 AddTaskD0Mass.C:58
 AddTaskD0Mass.C:59
 AddTaskD0Mass.C:60
 AddTaskD0Mass.C:61
 AddTaskD0Mass.C:62
 AddTaskD0Mass.C:63
 AddTaskD0Mass.C:64
 AddTaskD0Mass.C:65
 AddTaskD0Mass.C:66
 AddTaskD0Mass.C:67
 AddTaskD0Mass.C:68
 AddTaskD0Mass.C:69
 AddTaskD0Mass.C:70
 AddTaskD0Mass.C:71
 AddTaskD0Mass.C:72
 AddTaskD0Mass.C:73
 AddTaskD0Mass.C:74
 AddTaskD0Mass.C:75
 AddTaskD0Mass.C:76
 AddTaskD0Mass.C:77
 AddTaskD0Mass.C:78
 AddTaskD0Mass.C:79
 AddTaskD0Mass.C:80
 AddTaskD0Mass.C:81
 AddTaskD0Mass.C:82
 AddTaskD0Mass.C:83
 AddTaskD0Mass.C:84
 AddTaskD0Mass.C:85
 AddTaskD0Mass.C:86
 AddTaskD0Mass.C:87
 AddTaskD0Mass.C:88
 AddTaskD0Mass.C:89
 AddTaskD0Mass.C:90
 AddTaskD0Mass.C:91
 AddTaskD0Mass.C:92
 AddTaskD0Mass.C:93
 AddTaskD0Mass.C:94
 AddTaskD0Mass.C:95
 AddTaskD0Mass.C:96
 AddTaskD0Mass.C:97
 AddTaskD0Mass.C:98
 AddTaskD0Mass.C:99
 AddTaskD0Mass.C:100
 AddTaskD0Mass.C:101
 AddTaskD0Mass.C:102
 AddTaskD0Mass.C:103
 AddTaskD0Mass.C:104
 AddTaskD0Mass.C:105
 AddTaskD0Mass.C:106
 AddTaskD0Mass.C:107
 AddTaskD0Mass.C:108
 AddTaskD0Mass.C:109
 AddTaskD0Mass.C:110
 AddTaskD0Mass.C:111
 AddTaskD0Mass.C:112
 AddTaskD0Mass.C:113
 AddTaskD0Mass.C:114
 AddTaskD0Mass.C:115
 AddTaskD0Mass.C:116
 AddTaskD0Mass.C:117
 AddTaskD0Mass.C:118
 AddTaskD0Mass.C:119
 AddTaskD0Mass.C:120
 AddTaskD0Mass.C:121
 AddTaskD0Mass.C:122
 AddTaskD0Mass.C:123
 AddTaskD0Mass.C:124
 AddTaskD0Mass.C:125
 AddTaskD0Mass.C:126
 AddTaskD0Mass.C:127
 AddTaskD0Mass.C:128
 AddTaskD0Mass.C:129
 AddTaskD0Mass.C:130
 AddTaskD0Mass.C:131
 AddTaskD0Mass.C:132
 AddTaskD0Mass.C:133
 AddTaskD0Mass.C:134
 AddTaskD0Mass.C:135
 AddTaskD0Mass.C:136
 AddTaskD0Mass.C:137
 AddTaskD0Mass.C:138
 AddTaskD0Mass.C:139
 AddTaskD0Mass.C:140
 AddTaskD0Mass.C:141
 AddTaskD0Mass.C:142
 AddTaskD0Mass.C:143
 AddTaskD0Mass.C:144
 AddTaskD0Mass.C:145
 AddTaskD0Mass.C:146
 AddTaskD0Mass.C:147
 AddTaskD0Mass.C:148
 AddTaskD0Mass.C:149
 AddTaskD0Mass.C:150
 AddTaskD0Mass.C:151
 AddTaskD0Mass.C:152
 AddTaskD0Mass.C:153
 AddTaskD0Mass.C:154
 AddTaskD0Mass.C:155
 AddTaskD0Mass.C:156
 AddTaskD0Mass.C:157
 AddTaskD0Mass.C:158
 AddTaskD0Mass.C:159
 AddTaskD0Mass.C:160
 AddTaskD0Mass.C:161
 AddTaskD0Mass.C:162
 AddTaskD0Mass.C:163
 AddTaskD0Mass.C:164
 AddTaskD0Mass.C:165
 AddTaskD0Mass.C:166
 AddTaskD0Mass.C:167
 AddTaskD0Mass.C:168
 AddTaskD0Mass.C:169
 AddTaskD0Mass.C:170
 AddTaskD0Mass.C:171
 AddTaskD0Mass.C:172
 AddTaskD0Mass.C:173
 AddTaskD0Mass.C:174
 AddTaskD0Mass.C:175
 AddTaskD0Mass.C:176
 AddTaskD0Mass.C:177
 AddTaskD0Mass.C:178
 AddTaskD0Mass.C:179
 AddTaskD0Mass.C:180
 AddTaskD0Mass.C:181
 AddTaskD0Mass.C:182
 AddTaskD0Mass.C:183
 AddTaskD0Mass.C:184
 AddTaskD0Mass.C:185
 AddTaskD0Mass.C:186
 AddTaskD0Mass.C:187
 AddTaskD0Mass.C:188
 AddTaskD0Mass.C:189
 AddTaskD0Mass.C:190
 AddTaskD0Mass.C:191
 AddTaskD0Mass.C:192
 AddTaskD0Mass.C:193
 AddTaskD0Mass.C:194
 AddTaskD0Mass.C:195
 AddTaskD0Mass.C:196
 AddTaskD0Mass.C:197
 AddTaskD0Mass.C:198
 AddTaskD0Mass.C:199
 AddTaskD0Mass.C:200
 AddTaskD0Mass.C:201
 AddTaskD0Mass.C:202
 AddTaskD0Mass.C:203
 AddTaskD0Mass.C:204
 AddTaskD0Mass.C:205
 AddTaskD0Mass.C:206
 AddTaskD0Mass.C:207
 AddTaskD0Mass.C:208
 AddTaskD0Mass.C:209
 AddTaskD0Mass.C:210
 AddTaskD0Mass.C:211
 AddTaskD0Mass.C:212
 AddTaskD0Mass.C:213
 AddTaskD0Mass.C:214
 AddTaskD0Mass.C:215
 AddTaskD0Mass.C:216
 AddTaskD0Mass.C:217
 AddTaskD0Mass.C:218
 AddTaskD0Mass.C:219
 AddTaskD0Mass.C:220
 AddTaskD0Mass.C:221
 AddTaskD0Mass.C:222
 AddTaskD0Mass.C:223
 AddTaskD0Mass.C:224
 AddTaskD0Mass.C:225
 AddTaskD0Mass.C:226
 AddTaskD0Mass.C:227
 AddTaskD0Mass.C:228
 AddTaskD0Mass.C:229
 AddTaskD0Mass.C:230
 AddTaskD0Mass.C:231
 AddTaskD0Mass.C:232
 AddTaskD0Mass.C:233
 AddTaskD0Mass.C:234
 AddTaskD0Mass.C:235
 AddTaskD0Mass.C:236
 AddTaskD0Mass.C:237
 AddTaskD0Mass.C:238
 AddTaskD0Mass.C:239
 AddTaskD0Mass.C:240
 AddTaskD0Mass.C:241
 AddTaskD0Mass.C:242
 AddTaskD0Mass.C:243
 AddTaskD0Mass.C:244
 AddTaskD0Mass.C:245
 AddTaskD0Mass.C:246
 AddTaskD0Mass.C:247
 AddTaskD0Mass.C:248
 AddTaskD0Mass.C:249
 AddTaskD0Mass.C:250
 AddTaskD0Mass.C:251
 AddTaskD0Mass.C:252
 AddTaskD0Mass.C:253
 AddTaskD0Mass.C:254
 AddTaskD0Mass.C:255
 AddTaskD0Mass.C:256
 AddTaskD0Mass.C:257
 AddTaskD0Mass.C:258
 AddTaskD0Mass.C:259
 AddTaskD0Mass.C:260
 AddTaskD0Mass.C:261
 AddTaskD0Mass.C:262
 AddTaskD0Mass.C:263
 AddTaskD0Mass.C:264
 AddTaskD0Mass.C:265
 AddTaskD0Mass.C:266
 AddTaskD0Mass.C:267
 AddTaskD0Mass.C:268
 AddTaskD0Mass.C:269
 AddTaskD0Mass.C:270
 AddTaskD0Mass.C:271
 AddTaskD0Mass.C:272
 AddTaskD0Mass.C:273
 AddTaskD0Mass.C:274
 AddTaskD0Mass.C:275
 AddTaskD0Mass.C:276
 AddTaskD0Mass.C:277
 AddTaskD0Mass.C:278
 AddTaskD0Mass.C:279