]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGHF/vertexingHF/macros/AddTaskDvsMultiplicity.C
Refinements to improve memory consumption
[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   // Test macro for the AliAnalysisTaskSE for D+ candidates
18   //Invariant mass histogram and    
19   // association with MC truth (using MC info in AOD)
20   //  R. Bala, bala@to.infn.it
21   // Get the pointer to the existing analysis manager via the static access method. 
22   //============================================================================== 
23   
24   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
25   if (!mgr) {
26     ::Error("AddTaskDvsMultiplicity", "No analysis manager to connect to.");
27   }
28   
29   Bool_t stdcuts=kFALSE;
30   TFile* filecuts;
31   if( filename.EqualTo("") ) {
32     stdcuts=kTRUE; 
33   } else {
34     filecuts=TFile::Open(filename.Data());
35     if(!filecuts ||(filecuts&& !filecuts->IsOpen())){
36       AliFatal("Input file not found : check your cut object");
37     }
38   }
39
40   
41   //Analysis Task  
42   AliRDHFCuts *analysiscuts=0x0;
43   
44   TString Name="";
45   if(pdgMeson==411){
46     if(stdcuts) {
47       analysiscuts = new AliRDHFCutsDplustoKpipi();
48       if (system == 0) analysiscuts->SetStandardCutsPP2010();
49       else analysiscuts->SetStandardCutsPbPb2011();
50     }
51     else analysiscuts = (AliRDHFCutsDplustoKpipi*)filecuts->Get(finAnObjname);
52     Name="Dplus";
53    }else if(pdgMeson==421){
54     if(stdcuts) {
55       analysiscuts = new AliRDHFCutsD0toKpi();
56       if (system == 0) analysiscuts->SetStandardCutsPP2010();
57       else analysiscuts->SetStandardCutsPbPb2011();
58     }
59     else analysiscuts = (AliRDHFCutsD0toKpi*)filecuts->Get(finAnObjname);
60     Name="D0";
61   }else if(pdgMeson==413){
62     if(stdcuts) {
63       analysiscuts = new AliRDHFCutsDStartoKpipi();
64       if (system == 0) analysiscuts->SetStandardCutsPP2010();
65       else analysiscuts->SetStandardCutsPbPb2011();
66     }
67     else analysiscuts = (AliRDHFCutsDStartoKpipi*)filecuts->Get(finAnObjname);
68     Name="DStar";
69   }
70
71   AliAnalysisTaskSEDvsMultiplicity *dMultTask = new AliAnalysisTaskSEDvsMultiplicity("dMultAnalysis",pdgMeson,analysiscuts,isPPbData);
72   dMultTask->SetReadMC(readMC);  
73   dMultTask->SetDebugLevel(0);
74   dMultTask->SetUseBit(kTRUE);
75   dMultTask->SetDoImpactParameterHistos(kFALSE);
76   dMultTask->SetSubtractTrackletsFromDaughters(subtractDau);
77   dMultTask->SetMultiplicityEstimator(recoEstimator);
78   dMultTask->SetMCPrimariesEstimator(MCEstimator);
79   dMultTask->SetMCOption(MCOption);
80   if(isPPbData) dMultTask->SetIsPPbData();
81
82   if(NchWeight){
83     TH1F *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 }