ROOT logo
AliAnalysisTaskSEDvsMultiplicity *AddTaskDvsMultiplicity(Int_t system=0,
							 Bool_t readMC=kFALSE,
							 Int_t MCOption=0,
							 Int_t pdgMeson=411,
							 TString finDirname="Loose",
							 TString filename="",
							 TString finAnObjname="AnalysisCuts", 
							 TString estimatorFilename="",
							 Double_t refMult=9.26,
							 Bool_t subtractDau=kFALSE,
							 Bool_t NchWeight=kFALSE,
							 Int_t recoEstimator = AliAnalysisTaskSEDvsMultiplicity::kNtrk10,
							 Int_t MCEstimator = AliAnalysisTaskSEDvsMultiplicity::kEta10,
							 Bool_t isPPbData=kFALSE)
{
  //
  // Macro for the AliAnalysisTaskSE for D candidates vs Multiplicity
  // Invariant mass histogram in pt and multiplicity bins in a 3D histogram
  //   different estimators implemented
  //============================================================================== 
  
  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
  if (!mgr) {
    ::Error("AddTaskDvsMultiplicity", "No analysis manager to connect to.");
  }
  
  Bool_t stdcuts=kFALSE;
  TFile* filecuts;
  if( filename.EqualTo("") ) {
    stdcuts=kTRUE; 
  } else {
    filecuts=TFile::Open(filename.Data());
    if(!filecuts ||(filecuts&& !filecuts->IsOpen())){
      AliFatal("Input file not found : check your cut object");
    }
  }

  
  //Analysis Task  
  AliRDHFCuts *analysiscuts=0x0;
  
  TString Name="";
  if(pdgMeson==411){
    if(stdcuts) {
      analysiscuts = new AliRDHFCutsDplustoKpipi();
      if (system == 0) analysiscuts->SetStandardCutsPP2010();
      else analysiscuts->SetStandardCutsPbPb2011();
    }
    else analysiscuts = (AliRDHFCutsDplustoKpipi*)filecuts->Get(finAnObjname);
    Name="Dplus";
   }else if(pdgMeson==421){
    if(stdcuts) {
      analysiscuts = new AliRDHFCutsD0toKpi();
      if (system == 0) analysiscuts->SetStandardCutsPP2010();
      else analysiscuts->SetStandardCutsPbPb2011();
    }
    else analysiscuts = (AliRDHFCutsD0toKpi*)filecuts->Get(finAnObjname);
    Name="D0";
  }else if(pdgMeson==413){
    if(stdcuts) {
      analysiscuts = new AliRDHFCutsDStartoKpipi();
      if (system == 0) analysiscuts->SetStandardCutsPP2010();
      else analysiscuts->SetStandardCutsPbPb2011();
    }
    else analysiscuts = (AliRDHFCutsDStartoKpipi*)filecuts->Get(finAnObjname);
    Name="DStar";
  }

  AliAnalysisTaskSEDvsMultiplicity *dMultTask = new AliAnalysisTaskSEDvsMultiplicity("dMultAnalysis",pdgMeson,analysiscuts,isPPbData);
  dMultTask->SetReadMC(readMC);  
  dMultTask->SetDebugLevel(0);
  dMultTask->SetUseBit(kTRUE);
  dMultTask->SetDoImpactParameterHistos(kFALSE);
  dMultTask->SetSubtractTrackletsFromDaughters(subtractDau);
  dMultTask->SetMultiplicityEstimator(recoEstimator);
  dMultTask->SetMCPrimariesEstimator(MCEstimator);
  dMultTask->SetMCOption(MCOption);
  if(isPPbData) dMultTask->SetIsPPbData();

  if(NchWeight){
    TH1F *hNchPrimaries = NULL; 
    if(isPPbData) hNchPrimaries = (TH1F*)filecuts->Get("hNtrUnCorrEvWithDWeight");
    else hNchPrimaries = (TH1F*)filecuts->Get("hGenPrimaryParticlesInelGt0");
    if(hNchPrimaries) {
      dMultTask->UseMCNchWeight(true);
      dMultTask->SetHistoNchWeight(hNchPrimaries);
    } else {
      AliFatal("Histogram for multiplicity weights not found");
      return 0x0;
    }
  }

  if(pdgMeson==421) { 
    dMultTask->SetMassLimits(1.5648,2.1648);
    dMultTask->SetNMassBins(200);
  }else if(pdgMeson==411)dMultTask->SetMassLimits(pdgMeson,0.2);
  
  if(estimatorFilename.EqualTo("") ) {
    printf("Estimator file not provided, multiplcity corrected histograms will not be filled\n");
  } else{
                     
    TFile* fileEstimator=TFile::Open(estimatorFilename.Data());
    if(!fileEstimator)  {
      AliFatal("File with multiplicity estimator not found\n");
      return;
    }

    dMultTask->SetReferenceMultiplcity(refMult);

    const Char_t* profilebasename="SPDmult10";
    if(recoEstimator==AliAnalysisTaskSEDvsMultiplicity::kVZEROA || recoEstimator==AliAnalysisTaskSEDvsMultiplicity::kVZEROAEq) profilebasename="VZEROAmult";
    else if(recoEstimator==AliAnalysisTaskSEDvsMultiplicity::kVZERO || recoEstimator==AliAnalysisTaskSEDvsMultiplicity::kVZEROEq) profilebasename="VZEROMmult";
    cout<<endl<<endl<<" profilebasename="<<profilebasename<<endl<<endl;

    if (isPPbData) {    //Only use two profiles if pPb
      const Char_t* periodNames[2] = {"LHC13b", "LHC13c"};
      TProfile* multEstimatorAvg[2];
      for(Int_t ip=0; ip<2; ip++) {
	cout<< " Trying to get "<<Form("%s_%s",profilebasename,periodNames[ip])<<endl;
	multEstimatorAvg[ip] = (TProfile*)(fileEstimator->Get(Form("%s_%s",profilebasename,periodNames[ip]))->Clone(Form("%s_%s_clone",profilebasename,periodNames[ip])));
	if (!multEstimatorAvg[ip]) {
	  AliFatal(Form("Multiplicity estimator for %s not found! Please check your estimator file",periodNames[ip]));
	  return;
	}
      }
      dMultTask->SetMultiplVsZProfileLHC13b(multEstimatorAvg[0]);
      dMultTask->SetMultiplVsZProfileLHC13c(multEstimatorAvg[1]);
    }
    else {
      const Char_t* periodNames[4] = {"LHC10b", "LHC10c", "LHC10d", "LHC10e"};
      TProfile* multEstimatorAvg[4];                       
      for(Int_t ip=0; ip<4; ip++) {
	multEstimatorAvg[ip] = (TProfile*)(fileEstimator->Get(Form("%s_%s",profilebasename,periodNames[ip]))->Clone(Form("%s_%s_clone",profilebasename,periodNames[ip])));
	if (!multEstimatorAvg[ip]) {
	  AliFatal(Form("Multiplicity estimator for %s not found! Please check your estimator file",periodNames[ip]));
	  return;
	}
      }
      dMultTask->SetMultiplVsZProfileLHC10b(multEstimatorAvg[0]);
      dMultTask->SetMultiplVsZProfileLHC10c(multEstimatorAvg[1]);
      dMultTask->SetMultiplVsZProfileLHC10d(multEstimatorAvg[2]);
      dMultTask->SetMultiplVsZProfileLHC10e(multEstimatorAvg[3]);
    }
  }
  mgr->AddTask(dMultTask);
  
  // Create containers for input/output 
  
  TString inname = "cinput";
  TString outname = "coutput";
  TString cutsname = "coutputCuts";
  TString normname = "coutputNorm";
  TString profname = "coutputProf";
  
  inname += Name.Data();
  outname += Name.Data();
  cutsname += Name.Data();
  normname += Name.Data();
  profname += Name.Data();
  inname += finDirname.Data();
  outname += finDirname.Data();
  cutsname += finDirname.Data();
  normname += finDirname.Data();
  profname += finDirname.Data();

  AliAnalysisDataContainer *cinput = mgr->CreateContainer(inname,TChain::Class(),AliAnalysisManager::kInputContainer);

  TString outputfile = AliAnalysisManager::GetCommonFileName();
  outputfile += ":PWG3_D2H_DMult_";
  outputfile += Name.Data(); 
  outputfile += finDirname.Data(); 
    
  AliAnalysisDataContainer *coutputCuts = mgr->CreateContainer(cutsname,TList::Class(),AliAnalysisManager::kOutputContainer,outputfile.Data());
  AliAnalysisDataContainer *coutput = mgr->CreateContainer(outname,TList::Class(),AliAnalysisManager::kOutputContainer,outputfile.Data());
  AliAnalysisDataContainer *coutputNorm = mgr->CreateContainer(normname,TList::Class(),AliAnalysisManager::kOutputContainer,outputfile.Data());
  AliAnalysisDataContainer *coutputProf = mgr->CreateContainer(profname,TList::Class(),AliAnalysisManager::kOutputContainer,outputfile.Data());
  
  mgr->ConnectInput(dMultTask,0,mgr->GetCommonInputContainer());
  
  mgr->ConnectOutput(dMultTask,1,coutput);
  
  mgr->ConnectOutput(dMultTask,2,coutputCuts);

  mgr->ConnectOutput(dMultTask,3,coutputNorm);  

  mgr->ConnectOutput(dMultTask,4,coutputProf);

  return dMultTask;
}
 AddTaskDvsMultiplicity.C:1
 AddTaskDvsMultiplicity.C:2
 AddTaskDvsMultiplicity.C:3
 AddTaskDvsMultiplicity.C:4
 AddTaskDvsMultiplicity.C:5
 AddTaskDvsMultiplicity.C:6
 AddTaskDvsMultiplicity.C:7
 AddTaskDvsMultiplicity.C:8
 AddTaskDvsMultiplicity.C:9
 AddTaskDvsMultiplicity.C:10
 AddTaskDvsMultiplicity.C:11
 AddTaskDvsMultiplicity.C:12
 AddTaskDvsMultiplicity.C:13
 AddTaskDvsMultiplicity.C:14
 AddTaskDvsMultiplicity.C:15
 AddTaskDvsMultiplicity.C:16
 AddTaskDvsMultiplicity.C:17
 AddTaskDvsMultiplicity.C:18
 AddTaskDvsMultiplicity.C:19
 AddTaskDvsMultiplicity.C:20
 AddTaskDvsMultiplicity.C:21
 AddTaskDvsMultiplicity.C:22
 AddTaskDvsMultiplicity.C:23
 AddTaskDvsMultiplicity.C:24
 AddTaskDvsMultiplicity.C:25
 AddTaskDvsMultiplicity.C:26
 AddTaskDvsMultiplicity.C:27
 AddTaskDvsMultiplicity.C:28
 AddTaskDvsMultiplicity.C:29
 AddTaskDvsMultiplicity.C:30
 AddTaskDvsMultiplicity.C:31
 AddTaskDvsMultiplicity.C:32
 AddTaskDvsMultiplicity.C:33
 AddTaskDvsMultiplicity.C:34
 AddTaskDvsMultiplicity.C:35
 AddTaskDvsMultiplicity.C:36
 AddTaskDvsMultiplicity.C:37
 AddTaskDvsMultiplicity.C:38
 AddTaskDvsMultiplicity.C:39
 AddTaskDvsMultiplicity.C:40
 AddTaskDvsMultiplicity.C:41
 AddTaskDvsMultiplicity.C:42
 AddTaskDvsMultiplicity.C:43
 AddTaskDvsMultiplicity.C:44
 AddTaskDvsMultiplicity.C:45
 AddTaskDvsMultiplicity.C:46
 AddTaskDvsMultiplicity.C:47
 AddTaskDvsMultiplicity.C:48
 AddTaskDvsMultiplicity.C:49
 AddTaskDvsMultiplicity.C:50
 AddTaskDvsMultiplicity.C:51
 AddTaskDvsMultiplicity.C:52
 AddTaskDvsMultiplicity.C:53
 AddTaskDvsMultiplicity.C:54
 AddTaskDvsMultiplicity.C:55
 AddTaskDvsMultiplicity.C:56
 AddTaskDvsMultiplicity.C:57
 AddTaskDvsMultiplicity.C:58
 AddTaskDvsMultiplicity.C:59
 AddTaskDvsMultiplicity.C:60
 AddTaskDvsMultiplicity.C:61
 AddTaskDvsMultiplicity.C:62
 AddTaskDvsMultiplicity.C:63
 AddTaskDvsMultiplicity.C:64
 AddTaskDvsMultiplicity.C:65
 AddTaskDvsMultiplicity.C:66
 AddTaskDvsMultiplicity.C:67
 AddTaskDvsMultiplicity.C:68
 AddTaskDvsMultiplicity.C:69
 AddTaskDvsMultiplicity.C:70
 AddTaskDvsMultiplicity.C:71
 AddTaskDvsMultiplicity.C:72
 AddTaskDvsMultiplicity.C:73
 AddTaskDvsMultiplicity.C:74
 AddTaskDvsMultiplicity.C:75
 AddTaskDvsMultiplicity.C:76
 AddTaskDvsMultiplicity.C:77
 AddTaskDvsMultiplicity.C:78
 AddTaskDvsMultiplicity.C:79
 AddTaskDvsMultiplicity.C:80
 AddTaskDvsMultiplicity.C:81
 AddTaskDvsMultiplicity.C:82
 AddTaskDvsMultiplicity.C:83
 AddTaskDvsMultiplicity.C:84
 AddTaskDvsMultiplicity.C:85
 AddTaskDvsMultiplicity.C:86
 AddTaskDvsMultiplicity.C:87
 AddTaskDvsMultiplicity.C:88
 AddTaskDvsMultiplicity.C:89
 AddTaskDvsMultiplicity.C:90
 AddTaskDvsMultiplicity.C:91
 AddTaskDvsMultiplicity.C:92
 AddTaskDvsMultiplicity.C:93
 AddTaskDvsMultiplicity.C:94
 AddTaskDvsMultiplicity.C:95
 AddTaskDvsMultiplicity.C:96
 AddTaskDvsMultiplicity.C:97
 AddTaskDvsMultiplicity.C:98
 AddTaskDvsMultiplicity.C:99
 AddTaskDvsMultiplicity.C:100
 AddTaskDvsMultiplicity.C:101
 AddTaskDvsMultiplicity.C:102
 AddTaskDvsMultiplicity.C:103
 AddTaskDvsMultiplicity.C:104
 AddTaskDvsMultiplicity.C:105
 AddTaskDvsMultiplicity.C:106
 AddTaskDvsMultiplicity.C:107
 AddTaskDvsMultiplicity.C:108
 AddTaskDvsMultiplicity.C:109
 AddTaskDvsMultiplicity.C:110
 AddTaskDvsMultiplicity.C:111
 AddTaskDvsMultiplicity.C:112
 AddTaskDvsMultiplicity.C:113
 AddTaskDvsMultiplicity.C:114
 AddTaskDvsMultiplicity.C:115
 AddTaskDvsMultiplicity.C:116
 AddTaskDvsMultiplicity.C:117
 AddTaskDvsMultiplicity.C:118
 AddTaskDvsMultiplicity.C:119
 AddTaskDvsMultiplicity.C:120
 AddTaskDvsMultiplicity.C:121
 AddTaskDvsMultiplicity.C:122
 AddTaskDvsMultiplicity.C:123
 AddTaskDvsMultiplicity.C:124
 AddTaskDvsMultiplicity.C:125
 AddTaskDvsMultiplicity.C:126
 AddTaskDvsMultiplicity.C:127
 AddTaskDvsMultiplicity.C:128
 AddTaskDvsMultiplicity.C:129
 AddTaskDvsMultiplicity.C:130
 AddTaskDvsMultiplicity.C:131
 AddTaskDvsMultiplicity.C:132
 AddTaskDvsMultiplicity.C:133
 AddTaskDvsMultiplicity.C:134
 AddTaskDvsMultiplicity.C:135
 AddTaskDvsMultiplicity.C:136
 AddTaskDvsMultiplicity.C:137
 AddTaskDvsMultiplicity.C:138
 AddTaskDvsMultiplicity.C:139
 AddTaskDvsMultiplicity.C:140
 AddTaskDvsMultiplicity.C:141
 AddTaskDvsMultiplicity.C:142
 AddTaskDvsMultiplicity.C:143
 AddTaskDvsMultiplicity.C:144
 AddTaskDvsMultiplicity.C:145
 AddTaskDvsMultiplicity.C:146
 AddTaskDvsMultiplicity.C:147
 AddTaskDvsMultiplicity.C:148
 AddTaskDvsMultiplicity.C:149
 AddTaskDvsMultiplicity.C:150
 AddTaskDvsMultiplicity.C:151
 AddTaskDvsMultiplicity.C:152
 AddTaskDvsMultiplicity.C:153
 AddTaskDvsMultiplicity.C:154
 AddTaskDvsMultiplicity.C:155
 AddTaskDvsMultiplicity.C:156
 AddTaskDvsMultiplicity.C:157
 AddTaskDvsMultiplicity.C:158
 AddTaskDvsMultiplicity.C:159
 AddTaskDvsMultiplicity.C:160
 AddTaskDvsMultiplicity.C:161
 AddTaskDvsMultiplicity.C:162
 AddTaskDvsMultiplicity.C:163
 AddTaskDvsMultiplicity.C:164
 AddTaskDvsMultiplicity.C:165
 AddTaskDvsMultiplicity.C:166
 AddTaskDvsMultiplicity.C:167
 AddTaskDvsMultiplicity.C:168
 AddTaskDvsMultiplicity.C:169
 AddTaskDvsMultiplicity.C:170
 AddTaskDvsMultiplicity.C:171
 AddTaskDvsMultiplicity.C:172
 AddTaskDvsMultiplicity.C:173
 AddTaskDvsMultiplicity.C:174
 AddTaskDvsMultiplicity.C:175
 AddTaskDvsMultiplicity.C:176
 AddTaskDvsMultiplicity.C:177
 AddTaskDvsMultiplicity.C:178
 AddTaskDvsMultiplicity.C:179
 AddTaskDvsMultiplicity.C:180
 AddTaskDvsMultiplicity.C:181
 AddTaskDvsMultiplicity.C:182
 AddTaskDvsMultiplicity.C:183
 AddTaskDvsMultiplicity.C:184
 AddTaskDvsMultiplicity.C:185
 AddTaskDvsMultiplicity.C:186
 AddTaskDvsMultiplicity.C:187
 AddTaskDvsMultiplicity.C:188
 AddTaskDvsMultiplicity.C:189
 AddTaskDvsMultiplicity.C:190