]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGHF/correlationHF/macros/AddTaskD0Correlations.C
edd96a7fba5bb37e6b21c2cdc28ce5200b9190a0
[u/mrichter/AliRoot.git] / PWGHF / correlationHF / macros / AddTaskD0Correlations.C
1 AliAnalysisTaskSED0Correlations *AddTaskD0Correlations(Bool_t readMC=kFALSE, Bool_t mixing=kFALSE, Bool_t recoTrMC=kFALSE, Bool_t recoD0MC = kFALSE,  Bool_t flagsoftpicut = kTRUE, Bool_t MEthresh = kFALSE, TString cutsfilename="D0toKpiCuts.root", TString cutsfilename2="AssocPartCuts_fBit0_woITS_EffMap2D.root", TString effD0namec="D0Eff_From_c_2D.root", TString effD0nameb="D0Eff_From_b_2D.root", TString effName = "3D_eff_wo_ITScls2_f0_p8eta_FineBins.root", TString cutsD0name="D0toKpiCuts", TString cutsTrkname="AssociatedTrkCuts", Double_t etacorr=1.5, Int_t system=0/*0=pp,1=PbPb*/, Int_t flagD0D0bar=0, Float_t minC=0, Float_t maxC=0, TString finDirname="Output", Bool_t flagAOD049=kFALSE, Int_t standardbins=1, Bool_t stdcuts=kFALSE)
2 {
3   //
4   // AddTask for the AliAnalysisTaskSE for D0 candidates
5   // invariant mass histogram and association with MC truth 
6   // (using MC info in AOD) and cut variables distributions
7   // C.Bianchin  chiara.bianchin@pd.infn.it
8   // F.Colamaria fabio.colamaria@ba.infn.it
9
10
11   // Get the pointer to the existing analysis manager via the static access method.
12   //==============================================================================
13   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
14   if (!mgr) {
15     ::Error("AddTaskD0Distr", "No analysis manager to connect to.");
16     return NULL;
17   }   
18
19   TString filename="",out1name="",out2name="",out3name="",out4name="",out5name="",out6name="",out7name="",inname="";
20   filename = AliAnalysisManager::GetCommonFileName();
21   filename += ":PWG3_D2H_";
22   filename+="D0InvMass";
23   if(flagD0D0bar==1)filename+="D0";
24   if(flagD0D0bar==2)filename+="D0bar";
25   //list mass
26   out1name="coutputmassD0Mass";
27   if(flagD0D0bar==1)out1name+="D0";
28   if(flagD0D0bar==2)out1name+="D0bar";
29   //hist entries
30   out2name="nEntriesD0";
31   if(flagD0D0bar==1)out2name+="D0";
32   if(flagD0D0bar==2)out2name+="D0bar";
33   //cuts object
34   out3name="cutsD0"; 
35   if(flagD0D0bar==1)out3name+="D0";
36   if(flagD0D0bar==2)out3name+="D0bar";
37   //AliNormalizationCounter
38   out4name="normalizationCounter";
39   if(flagD0D0bar==1)out4name+="D0";
40   if(flagD0D0bar==2)out4name+="D0bar";
41   //correlation outputs
42   out5name ="correlations";
43   if(flagD0D0bar==1)out5name+="D0";
44   if(flagD0D0bar==2)out5name+="D0bar";
45   //correlation further studies
46   out6name ="MCStudyPlots";
47   if(flagD0D0bar==1)out6name+="D0";
48   if(flagD0D0bar==2)out6name+="D0bar";
49   //correlated trk cuts
50   out7name ="cutsTracks";
51   if(flagD0D0bar==1)out7name+="D0";
52   if(flagD0D0bar==2)out7name+="D0bar";
53   inname="cinputmassD0_0";
54   if(flagD0D0bar==1)inname+="D0";
55   if(flagD0D0bar==2)inname+="D0bar";
56
57   filename += finDirname.Data();
58   out1name += finDirname.Data();
59   out2name += finDirname.Data(); 
60   out3name += finDirname.Data(); 
61   out4name += finDirname.Data(); 
62   out5name += finDirname.Data();
63   out6name += finDirname.Data();
64   out7name += finDirname.Data();
65   inname += finDirname.Data();
66
67     //setting my cut values
68
69     //cuts order
70     //     printf("    |M-MD0| [GeV]    < %f\n",fD0CorrCuts[0]);
71     //     printf("    dca    [cm]  < %f\n",fD0CorrCuts[1]);
72     //     printf("    cosThetaStar     < %f\n",fD0CorrCuts[2]);
73     //     printf("    pTK     [GeV/c]    > %f\n",fD0CorrCuts[3]);
74     //     printf("    pTpi    [GeV/c]    > %f\n",fD0CorrCuts[4]);
75     //     printf("    |d0K|  [cm]  < %f\n",fD0CorrCuts[5]);
76     //     printf("    |d0pi| [cm]  < %f\n",fD0CorrCuts[6]);
77     //     printf("    d0d0  [cm^2] < %f\n",fD0CorrCuts[7]);
78     //     printf("    cosThetaPoint    > %f\n",fD0CorrCuts[8]);
79
80   TFile* filecuts=TFile::Open(cutsfilename.Data());
81   if(!filecuts->IsOpen()){
82     cout<<"Input file not found for D0 cuts: using std cut object"<<endl;
83     stdcuts=kTRUE;
84   }
85   TFile* filecuts2=TFile::Open(cutsfilename2.Data());
86   if(!filecuts2->IsOpen()){
87     cout<<"Input file not found for tracks cuts!"<<endl;
88     return;
89   }
90
91   //Cuts for D0
92   AliRDHFCutsD0toKpi* RDHFD0Corrs=new AliRDHFCutsD0toKpi();
93 //RDHFD0Corrs->SetUsePhysicsSelection(kFALSE);
94   RDHFD0Corrs->SetLowPt(kFALSE); //low-pt special PID disabled
95   if(stdcuts) {
96     if(system==0) RDHFD0Corrs->SetStandardCutsPP2010();
97     else {
98       RDHFD0Corrs->SetStandardCutsPbPb2010();
99       if(minC!=0 && maxC!=0) { //if centrality 0 and 0 leave the values in the cut object
100         RDHFD0Corrs->SetMinCentrality(minC);
101         RDHFD0Corrs->SetMaxCentrality(maxC);
102       }
103       if(flagAOD049)RDHFD0Corrs->SetUseAOD049(kTRUE);
104       RDHFD0Corrs->SetUseCentrality(AliRDHFCuts::kCentV0M);
105     }
106   }
107   else {
108     RDHFD0Corrs = (AliRDHFCutsD0toKpi*)filecuts->Get(cutsD0name.Data());
109     if(!RDHFD0Corrs){
110       cout<<"Specific AliRDHFCuts not found"<<endl;
111       return;
112     }
113     if(flagAOD049)RDHFD0Corrs->SetUseAOD049(kTRUE);
114     if(minC!=0 && maxC!=0) { //if centrality 0 and 0 leave the values in the cut object
115       RDHFD0Corrs->SetMinCentrality(minC);
116       RDHFD0Corrs->SetMaxCentrality(maxC);
117     } 
118   }
119
120   //Load efficiency map
121   TFile* fileeff=TFile::Open(effName.Data());
122   if(!fileeff->IsOpen()){
123     cout<<"Input file not found for efficiency! Exiting..."<<endl;
124     return;
125   }  
126   TCanvas *c = (TCanvas*)fileeff->Get("c");
127   TH3D *h3D = (TH3D*)c->FindObject("heff_rebin");
128
129   //Load D0 efficiency map
130   TFile* fileeffD0c=TFile::Open(effD0namec.Data());
131   if(!fileeffD0c->IsOpen()){
132     cout<<"Input file not found for efficiency! Exiting..."<<endl;
133     return;
134   }
135   TCanvas *cc = (TCanvas*)fileeffD0c->Get("c1");
136   TH2D *hEffD0c = (TH2D*)cc->FindObject("h_Eff");
137
138   //Load D0 efficiency map from b
139   if(readMC) {
140     TFile* fileeffD0b=TFile::Open(effD0nameb.Data());
141     if(!fileeffD0b->IsOpen()){
142       cout<<"Input file not found for efficiency! Exiting..."<<endl;
143       return;
144     }
145     TCanvas *cb = (TCanvas*)fileeffD0b->Get("c1");
146     TH2D *hEffD0b = (TH2D*)cb->FindObject("h_Eff");
147   }
148
149   //Cuts for correlated tracks/K0
150   AliHFAssociatedTrackCuts* corrCuts=new AliHFAssociatedTrackCuts();
151   corrCuts = (AliHFAssociatedTrackCuts*)filecuts2->Get(cutsTrkname.Data());
152   if(!corrCuts){
153       cout<<"Specific AliHFAssociatedTrackCuts not found"<<endl;
154       return;
155   }
156   corrCuts->SetTrackCutsNames();
157   corrCuts->SetvZeroCutsNames();
158   if(recoD0MC) corrCuts->SetEfficiencyWeightMap(h3D); //data and MC Reco
159   if(recoD0MC) corrCuts->SetTriggerEffWeightMap(hEffD0c); //data and MC Reco
160   if(recoD0MC && readMC) corrCuts->SetTriggerEffWeightMapB(hEffD0b); //MC Reco
161   corrCuts->PrintAll();
162
163   TString centr="";
164   if(minC!=0 && maxC!=0) centr = Form("%.0f%.0f",minC,maxC);
165   else centr = Form("%.0f%.0f",RDHFD0Corrs->GetMinCentrality(),RDHFD0Corrs->GetMaxCentrality());
166   out1name+=centr;
167   out2name+=centr;
168   out3name+=centr;
169   out4name+=centr;
170   out5name+=centr;
171   out6name+=centr;
172   out7name+=centr;
173   inname+=centr;
174
175   // Aanalysis task    
176   TString taskname="MassAndDistrAnalysis"; taskname.Prepend("D0");
177   AliAnalysisTaskSED0Correlations *massD0Task = new AliAnalysisTaskSED0Correlations(taskname.Data(),RDHFD0Corrs,corrCuts);
178   massD0Task->SetDebugLevel(2);
179   massD0Task->SetReadMC(readMC);
180   massD0Task->SetMCReconstructedTracks(recoTrMC);
181   massD0Task->SetMCReconstructedD0(recoD0MC);
182   massD0Task->SetEvMixing(mixing);
183   massD0Task->SetFillOnlyD0D0bar(flagD0D0bar);
184   massD0Task->SetSystem(system); //0=pp, 1=PbPb
185   massD0Task->SetEtaForCorrel(etacorr);
186   massD0Task->SetSoftPiFlag(flagsoftpicut);
187   massD0Task->SetMEAxisThresh(MEthresh);
188
189 //*********************
190 //correlation settings
191 //*********************
192
193   if(standardbins==1) {
194     printf("Standard bins (from D0Mass cuts object)\n");
195     massD0Task->SetNPtBinsCorr(RDHFD0Corrs->GetNPtBins()); 
196     massD0Task->SetPtBinsLimsCorr(RDHFD0Corrs->GetPtBinLimits());
197   } else {
198     Double_t ptlimits[15] = {0,0.5,1,2,3,4,5,6,7,8,12,16,20,24,9999};
199     massD0Task->SetNPtBinsCorr(15);
200     massD0Task->SetPtBinsLimsCorr(ptlimits);
201   }
202   Double_t pttreshlow[15] = {0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.};
203   Double_t pttreshup[15] = {999.,999.,999.,999.,999.,999.,999.,999.,999.,999.,999.,999.,999.,999.,999.};
204   massD0Task->SetPtTreshLow(pttreshlow);
205   massD0Task->SetPtTreshUp(pttreshup);
206
207   //  massD0Task->SetRejectSDDClusters(kTRUE);
208   //  massD0Task->SetWriteVariableTree(kTRUE);
209
210   massD0Task->PrintBinsAndLimits();
211
212   mgr->AddTask(massD0Task);
213   
214   //
215   // Create containers for input/output
216   AliAnalysisDataContainer *cinputmassD0 = mgr->CreateContainer(inname,TChain::Class(),AliAnalysisManager::kInputContainer);
217
218   AliAnalysisDataContainer *coutputmassD01 = mgr->CreateContainer(out1name,TList::Class(),AliAnalysisManager::kOutputContainer, filename.Data()); //mass
219   AliAnalysisDataContainer *coutputmassD02 = mgr->CreateContainer(out2name,TH1F::Class(),AliAnalysisManager::kOutputContainer, filename.Data()); //nev
220   AliAnalysisDataContainer *coutputmassD03 = mgr->CreateContainer(out3name,AliRDHFCutsD0toKpi::Class(),AliAnalysisManager::kOutputContainer, filename.Data()); //cuts
221   AliAnalysisDataContainer *coutputmassD04 = mgr->CreateContainer(out4name,AliNormalizationCounter::Class(),AliAnalysisManager::kOutputContainer, filename.Data()); //counter
222   AliAnalysisDataContainer *coutputmassD05 = mgr->CreateContainer(out5name,TList::Class(),AliAnalysisManager::kOutputContainer, filename.Data()); //correlations
223   AliAnalysisDataContainer *coutputmassD06 = mgr->CreateContainer(out6name,TList::Class(),AliAnalysisManager::kOutputContainer, filename.Data()); //MC study plots (for corrs)
224   AliAnalysisDataContainer *coutputmassD07 = mgr->CreateContainer(out7name,AliHFAssociatedTrackCuts::Class(),AliAnalysisManager::kOutputContainer, filename.Data()); //cuts for tracks/K0
225
226   mgr->ConnectInput(massD0Task,0,mgr->GetCommonInputContainer());
227
228   mgr->ConnectOutput(massD0Task,1,coutputmassD01);
229   mgr->ConnectOutput(massD0Task,2,coutputmassD02);
230   mgr->ConnectOutput(massD0Task,3,coutputmassD03);
231   mgr->ConnectOutput(massD0Task,4,coutputmassD04);
232   mgr->ConnectOutput(massD0Task,5,coutputmassD05);
233   mgr->ConnectOutput(massD0Task,6,coutputmassD06);
234   mgr->ConnectOutput(massD0Task,7,coutputmassD07);
235
236   return massD0Task;
237 }