]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGHF/vertexingHF/macros/AddTaskDvsMultiplicity.C
fixing coverity 23947 + introduction of reflection plots when running on MC + removin...
[u/mrichter/AliRoot.git] / PWGHF / vertexingHF / macros / AddTaskDvsMultiplicity.C
1 AliAnalysisTaskSEDvsMultiplicity *AddTaskDvsMultiplicity(Int_t system=0,
2                                                          Bool_t readMC=kFALSE,
3                                                          Int_t MCOption=0,
4                                                          Int_t pdgMeson=411,
5                                                          TString finDirname="Loose",
6                                                          TString filename="",
7                                                          TString finAnObjname="AnalysisCuts", 
8                                                          TString estimatorFilename="",
9                                                          Double_t refMult=9.26,
10                                                          Bool_t subtractDau=kFALSE,
11                                                          Bool_t NchWeight=kFALSE,
12                                                          Int_t recoEstimator = AliAnalysisTaskSEDvsMultiplicity::kNtrk10,
13                                                          Int_t MCEstimator = AliAnalysisTaskSEDvsMultiplicity::kEta10,
14                                                          Bool_t isPPbData=kFALSE)
15 {
16   //
17   // Macro for the AliAnalysisTaskSE for D candidates vs Multiplicity
18   // Invariant mass histogram in pt and multiplicity bins in a 3D histogram
19   //   different estimators implemented
20   //============================================================================== 
21   
22   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
23   if (!mgr) {
24     ::Error("AddTaskDvsMultiplicity", "No analysis manager to connect to.");
25   }
26   
27   Bool_t stdcuts=kFALSE;
28   TFile* filecuts;
29   if( filename.EqualTo("") ) {
30     stdcuts=kTRUE; 
31   } else {
32     filecuts=TFile::Open(filename.Data());
33     if(!filecuts ||(filecuts&& !filecuts->IsOpen())){
34       AliFatal("Input file not found : check your cut object");
35     }
36   }
37
38   
39   //Analysis Task  
40   AliRDHFCuts *analysiscuts=0x0;
41   
42   TString Name="";
43   if(pdgMeson==411){
44     if(stdcuts) {
45       analysiscuts = new AliRDHFCutsDplustoKpipi();
46       if (system == 0) analysiscuts->SetStandardCutsPP2010();
47       else analysiscuts->SetStandardCutsPbPb2011();
48     }
49     else analysiscuts = (AliRDHFCutsDplustoKpipi*)filecuts->Get(finAnObjname);
50     Name="Dplus";
51    }else if(pdgMeson==421){
52     if(stdcuts) {
53       analysiscuts = new AliRDHFCutsD0toKpi();
54       if (system == 0) analysiscuts->SetStandardCutsPP2010();
55       else analysiscuts->SetStandardCutsPbPb2011();
56     }
57     else analysiscuts = (AliRDHFCutsD0toKpi*)filecuts->Get(finAnObjname);
58     Name="D0";
59   }else if(pdgMeson==413){
60     if(stdcuts) {
61       analysiscuts = new AliRDHFCutsDStartoKpipi();
62       if (system == 0) analysiscuts->SetStandardCutsPP2010();
63       else analysiscuts->SetStandardCutsPbPb2011();
64     }
65     else analysiscuts = (AliRDHFCutsDStartoKpipi*)filecuts->Get(finAnObjname);
66     Name="DStar";
67   }
68
69   AliAnalysisTaskSEDvsMultiplicity *dMultTask = new AliAnalysisTaskSEDvsMultiplicity("dMultAnalysis",pdgMeson,analysiscuts,isPPbData);
70   dMultTask->SetReadMC(readMC);  
71   dMultTask->SetDebugLevel(0);
72   dMultTask->SetUseBit(kTRUE);
73   dMultTask->SetDoImpactParameterHistos(kFALSE);
74   dMultTask->SetSubtractTrackletsFromDaughters(subtractDau);
75   dMultTask->SetMultiplicityEstimator(recoEstimator);
76   dMultTask->SetMCPrimariesEstimator(MCEstimator);
77   dMultTask->SetMCOption(MCOption);
78   if(isPPbData) dMultTask->SetIsPPbData();
79
80   if(NchWeight){
81     TH1F *hNchPrimaries = NULL; 
82     if(isPPbData) hNchPrimaries = (TH1F*)filecuts->Get("hNtrUnCorrEvWithDWeight");
83     else hNchPrimaries = (TH1F*)filecuts->Get("hGenPrimaryParticlesInelGt0");
84     if(hNchPrimaries) {
85       dMultTask->UseMCNchWeight(true);
86       dMultTask->SetHistoNchWeight(hNchPrimaries);
87     } else {
88       AliFatal("Histogram for multiplicity weights not found");
89       return 0x0;
90     }
91   }
92
93   if(pdgMeson==421) { 
94     dMultTask->SetMassLimits(1.5648,2.1648);
95     dMultTask->SetNMassBins(200);
96   }else if(pdgMeson==411)dMultTask->SetMassLimits(pdgMeson,0.2);
97   
98   if(estimatorFilename.EqualTo("") ) {
99     printf("Estimator file not provided, multiplcity corrected histograms will not be filled\n");
100   } else{
101                      
102     TFile* fileEstimator=TFile::Open(estimatorFilename.Data());
103     if(!fileEstimator)  {
104       AliFatal("File with multiplicity estimator not found\n");
105       return;
106     }
107
108     dMultTask->SetReferenceMultiplcity(refMult);
109
110     if (isPPbData) {    //Only use two profiles if pPb
111       const Char_t* periodNames[2] = {"LHC13b", "LHC13c"};
112       TProfile* multEstimatorAvg[2];
113       for(Int_t ip=0; ip<2; ip++) {
114         multEstimatorAvg[ip] = (TProfile*)(fileEstimator->Get(Form("SPDmult10_%s",periodNames[ip]))->Clone(Form("SPDmult10_%s_clone",periodNames[ip])));
115         if (!multEstimatorAvg[ip]) {
116           AliFatal(Form("Multiplicity estimator for %s not found! Please check your estimator file",periodNames[ip]));
117           return;
118         }
119       }
120       dMultTask->SetMultiplVsZProfileLHC13b(multEstimatorAvg[0]);
121       dMultTask->SetMultiplVsZProfileLHC13c(multEstimatorAvg[1]);
122     }
123     else {
124       const Char_t* periodNames[4] = {"LHC10b", "LHC10c", "LHC10d", "LHC10e"};
125       TProfile* multEstimatorAvg[4];                       
126       for(Int_t ip=0; ip<4; ip++) {
127         multEstimatorAvg[ip] = (TProfile*)(fileEstimator->Get(Form("SPDmult10_%s",periodNames[ip]))->Clone(Form("SPDmult10_%s_clone",periodNames[ip])));
128         if (!multEstimatorAvg[ip]) {
129           AliFatal(Form("Multiplicity estimator for %s not found! Please check your estimator file",periodNames[ip]));
130           return;
131         }
132       }
133       dMultTask->SetMultiplVsZProfileLHC10b(multEstimatorAvg[0]);
134       dMultTask->SetMultiplVsZProfileLHC10c(multEstimatorAvg[1]);
135       dMultTask->SetMultiplVsZProfileLHC10d(multEstimatorAvg[2]);
136       dMultTask->SetMultiplVsZProfileLHC10e(multEstimatorAvg[3]);
137     }
138   }
139   mgr->AddTask(dMultTask);
140   
141   // Create containers for input/output 
142   
143   TString inname = "cinput";
144   TString outname = "coutput";
145   TString cutsname = "coutputCuts";
146   TString normname = "coutputNorm";
147   TString profname = "coutputProf";
148   
149   inname += Name.Data();
150   outname += Name.Data();
151   cutsname += Name.Data();
152   normname += Name.Data();
153   profname += Name.Data();
154   inname += finDirname.Data();
155   outname += finDirname.Data();
156   cutsname += finDirname.Data();
157   normname += finDirname.Data();
158   profname += finDirname.Data();
159
160   AliAnalysisDataContainer *cinput = mgr->CreateContainer(inname,TChain::Class(),AliAnalysisManager::kInputContainer);
161
162   TString outputfile = AliAnalysisManager::GetCommonFileName();
163   outputfile += ":PWG3_D2H_DMult_";
164   outputfile += Name.Data(); 
165   outputfile += finDirname.Data(); 
166     
167   AliAnalysisDataContainer *coutputCuts = mgr->CreateContainer(cutsname,TList::Class(),AliAnalysisManager::kOutputContainer,outputfile.Data());
168   AliAnalysisDataContainer *coutput = mgr->CreateContainer(outname,TList::Class(),AliAnalysisManager::kOutputContainer,outputfile.Data());
169   AliAnalysisDataContainer *coutputNorm = mgr->CreateContainer(normname,TList::Class(),AliAnalysisManager::kOutputContainer,outputfile.Data());
170   AliAnalysisDataContainer *coutputProf = mgr->CreateContainer(profname,TList::Class(),AliAnalysisManager::kOutputContainer,outputfile.Data());
171   
172   mgr->ConnectInput(dMultTask,0,mgr->GetCommonInputContainer());
173   
174   mgr->ConnectOutput(dMultTask,1,coutput);
175   
176   mgr->ConnectOutput(dMultTask,2,coutputCuts);
177
178   mgr->ConnectOutput(dMultTask,3,coutputNorm);  
179
180   mgr->ConnectOutput(dMultTask,4,coutputProf);
181
182   return dMultTask;
183 }