]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG3/vertexingHF/AliAnalysisTaskSED0Mass.cxx
possibility to exclude events with SDD clusters plus a fix on the histogram filling...
[u/mrichter/AliRoot.git] / PWG3 / vertexingHF / AliAnalysisTaskSED0Mass.cxx
CommitLineData
49061176 1/**************************************************************************
2 * Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15
27de2dfb 16/* $Id$ */
17
49061176 18/////////////////////////////////////////////////////////////
19//
20// AliAnalysisTaskSE for D0 candidates invariant mass histogram
a41f6fad 21// and comparison with the MC truth and cut variables distributions.
49061176 22//
23// Authors: A.Dainese, andrea.dainese@lnl.infn.it
feb73eca 24// Chiara Bianchin, chiara.bianchin@pd.infn.it (invariant mass)
25// Carmelo Di Giglio, carmelo.digiglio@ba.infn.it (like sign)
49061176 26/////////////////////////////////////////////////////////////
27
28#include <Riostream.h>
29#include <TClonesArray.h>
527f330b 30#include <TCanvas.h>
49061176 31#include <TNtuple.h>
32#include <TList.h>
33#include <TH1F.h>
a41f6fad 34#include <TH2F.h>
35#include <TDatabasePDG.h>
49061176 36
5b2e5fae 37#include <AliAnalysisDataSlot.h>
38#include <AliAnalysisDataContainer.h>
b557eb43 39#include "AliAnalysisManager.h"
34137226 40#include "AliESDtrack.h"
4e61a020 41#include "AliVertexerTracks.h"
b557eb43 42#include "AliAODHandler.h"
49061176 43#include "AliAODEvent.h"
44#include "AliAODVertex.h"
45#include "AliAODTrack.h"
46#include "AliAODMCHeader.h"
47#include "AliAODMCParticle.h"
48#include "AliAODRecoDecayHF2Prong.h"
49#include "AliAODRecoCascadeHF.h"
50#include "AliAnalysisVertexingHF.h"
51#include "AliAnalysisTaskSE.h"
52#include "AliAnalysisTaskSED0Mass.h"
a96083b9 53#include "AliNormalizationCounter.h"
b557eb43 54
49061176 55ClassImp(AliAnalysisTaskSED0Mass)
56
57
58//________________________________________________________________________
59AliAnalysisTaskSED0Mass::AliAnalysisTaskSED0Mass():
60AliAnalysisTaskSE(),
a220990f 61 fOutputMass(0),
62 fDistr(0),
63 fNentries(0),
64 fCuts(0),
65 fArray(0),
66 fReadMC(0),
67 fCutOnDistr(0),
68 fUsePid4Distr(0),
69 fCounter(0),
70 fNPtBins(1),
71 fLsNormalization(1.),
72 fFillOnlyD0D0bar(0),
73 fDaughterTracks(),
74 fIsSelectedCandidate(0),
75 fFillVarHists(kTRUE),
2b35ac47 76 fSys(0),
77 fIsRejectSDDClusters(0)
49061176 78{
79 // Default constructor
80}
81
82//________________________________________________________________________
ea0d8716 83AliAnalysisTaskSED0Mass::AliAnalysisTaskSED0Mass(const char *name,AliRDHFCutsD0toKpi* cuts):
a220990f 84 AliAnalysisTaskSE(name),
85 fOutputMass(0),
86 fDistr(0),
87 fNentries(0),
88 fCuts(0),
89 fArray(0),
90 fReadMC(0),
91 fCutOnDistr(0),
92 fUsePid4Distr(0),
93 fCounter(0),
94 fNPtBins(1),
95 fLsNormalization(1.),
96 fFillOnlyD0D0bar(0),
97 fDaughterTracks(),
98 fIsSelectedCandidate(0),
99 fFillVarHists(kTRUE),
2b35ac47 100 fSys(0),
101 fIsRejectSDDClusters(0)
49061176 102{
103 // Default constructor
87020237 104
105 fNPtBins=cuts->GetNPtBins();
4b4a1d25 106
ea0d8716 107 fCuts=cuts;
108
109 // Output slot #1 writes into a TList container (mass with cuts)
49061176 110 DefineOutput(1,TList::Class()); //My private output
ea0d8716 111 // Output slot #2 writes into a TList container (distributions)
a8ce111e 112 if(fFillVarHists) DefineOutput(2,TList::Class()); //My private output
ea0d8716 113 // Output slot #3 writes into a TH1F container (number of events)
a4ae02cd 114 DefineOutput(3,TH1F::Class()); //My private output
700e80e0 115 // Output slot #4 writes into a TList container (cuts)
116 DefineOutput(4,AliRDHFCutsD0toKpi::Class()); //My private output
117 // Output slot #5 writes Normalization Counter
118 DefineOutput(5,AliNormalizationCounter::Class());
49061176 119}
120
121//________________________________________________________________________
122AliAnalysisTaskSED0Mass::~AliAnalysisTaskSED0Mass()
123{
a8ce111e 124 if (fOutputMass) {
ea0d8716 125 delete fOutputMass;
126 fOutputMass = 0;
a4ae02cd 127 }
a41f6fad 128 if (fDistr) {
129 delete fDistr;
130 fDistr = 0;
131 }
ea0d8716 132 if (fCuts) {
133 delete fCuts;
134 fCuts = 0;
49061176 135 }
46c96ce5 136 if (fNentries){
137 delete fNentries;
138 fNentries = 0;
139 }
a96083b9 140 if(fCounter){
141 delete fCounter;
142 fCounter=0;
143 }
ea0d8716 144
49061176 145}
146
147//________________________________________________________________________
148void AliAnalysisTaskSED0Mass::Init()
149{
150 // Initialization
151
152 if(fDebug > 1) printf("AnalysisTaskSED0Mass::Init() \n");
153
ea0d8716 154
ea0d8716 155 AliRDHFCutsD0toKpi* copyfCuts=new AliRDHFCutsD0toKpi(*fCuts);
700e80e0 156 const char* nameoutput=GetOutputSlot(4)->GetContainer()->GetName();
4e61a020 157 copyfCuts->SetName(nameoutput);
ea0d8716 158 // Post the data
700e80e0 159 PostData(4,copyfCuts);
4e61a020 160
49061176 161
49061176 162 return;
163}
164
165//________________________________________________________________________
166void AliAnalysisTaskSED0Mass::UserCreateOutputObjects()
167{
168
169 // Create the output container
170 //
171 if(fDebug > 1) printf("AnalysisTaskSED0Mass::UserCreateOutputObjects() \n");
172
173 // Several histograms are more conveniently managed in a TList
ea0d8716 174 fOutputMass = new TList();
175 fOutputMass->SetOwner();
176 fOutputMass->SetName("listMass");
49061176 177
a41f6fad 178 fDistr = new TList();
179 fDistr->SetOwner();
180 fDistr->SetName("distributionslist");
181
0108fa62 182 TString nameMass=" ",nameSgn27=" ",nameSgn=" ", nameBkg=" ", nameRfl=" ",nameMassNocutsS =" ",nameMassNocutsB =" ", namedistr=" ";
49061176 183
ea0d8716 184 for(Int_t i=0;i<fCuts->GetNPtBins();i++){
b272aebf 185
7646d6da 186 nameMass="histMass_";
ea0d8716 187 nameMass+=i;
9de8c723 188 nameSgn27="histSgn27_";
ea0d8716 189 nameSgn27+=i;
7646d6da 190 nameSgn="histSgn_";
ea0d8716 191 nameSgn+=i;
7646d6da 192 nameBkg="histBkg_";
ea0d8716 193 nameBkg+=i;
a4ae02cd 194 nameRfl="histRfl_";
ea0d8716 195 nameRfl+=i;
0108fa62 196 nameMassNocutsS="hMassS_";
ea0d8716 197 nameMassNocutsS+=i;
0108fa62 198 nameMassNocutsB="hMassB_";
ea0d8716 199 nameMassNocutsB+=i;
7646d6da 200
b272aebf 201 //histograms of cut variable distributions
a8ce111e 202 if(fFillVarHists){
a220990f 203 if(fReadMC){
204 // dca
205 namedistr="hdcaS_";
206 namedistr+=i;
207 TH1F *hdcaS = new TH1F(namedistr.Data(), "DCA distribution;dca [cm]",200,0.,0.1);
208 // impact parameter
209 namedistr="hd0piS_";
210 namedistr+=i;
211 TH1F *hd0piS = new TH1F(namedistr.Data(), "Impact parameter distribution (pions);d0(#pi) [cm]",200,-0.1,0.1);
b272aebf 212
a220990f 213 namedistr="hd0KS_";
214 namedistr+=i;
215 TH1F *hd0KS = new TH1F(namedistr.Data(), "Impact parameter distribution (kaons);d0(K) [cm]",200,-0.1,0.1);
216 namedistr="hd0d0S_";
217 namedistr+=i;
218 TH1F *hd0d0S = new TH1F(namedistr.Data(), "d_{0}#timesd_{0} distribution;d_{0}#timesd_{0} [cm^{2}]",200,-0.001,0.001);
219
220 //decay lenght
221 namedistr="hdeclS_";
222 namedistr+=i;
223 TH1F *hdeclengthS = new TH1F(namedistr.Data(), "Decay Length^{2} distribution;Decay Length^{2} [cm]",200,0,0.015);
b272aebf 224
a220990f 225 namedistr="hnormdeclS_";
226 namedistr+=i;
227 TH1F *hnormdeclengthS = new TH1F(namedistr.Data(), "Normalized Decay Length^{2} distribution;(Decay Length/Err)^{2} ",200,0,12.);
228
229 namedistr="hdeclxyS_";
230 namedistr+=i;
231 TH1F* hdeclxyS=new TH1F(namedistr.Data(),"Decay Length XY distribution;Decay Length XY [cm]",200,0,0.15);
232 namedistr="hnormdeclxyS_";
233 namedistr+=i;
234 TH1F* hnormdeclxyS=new TH1F(namedistr.Data(),"Normalized decay Length XY distribution;Decay Length XY/Err",200,0,6.);
235
236 namedistr="hdeclxyd0d0S_";
237 namedistr+=i;
238 TH2F* hdeclxyd0d0S=new TH2F(namedistr.Data(),"Correlation decay Length XY - d_{0}#times d_{0};Decay Length XY [cm];d_{0}#times d_{0}[cm^{2}]",200,0,0.15,200,-0.001,0.001);
239
240 namedistr="hnormdeclxyd0d0S_";
241 namedistr+=i;
242 TH2F* hnormdeclxyd0d0S=new TH2F(namedistr.Data(),"Correlation normalized decay Length XY - d_{0}#times d_{0};Decay Length XY/Err;d_{0}#times d_{0}[cm^{2}]",200,0,6,200,-0.001,0.001);
243
244 // costhetapoint
245 namedistr="hcosthetapointS_";
246 namedistr+=i;
247 TH1F *hcosthetapointS = new TH1F(namedistr.Data(), "cos#theta_{Point} distribution;cos#theta_{Point}",200,0,1.);
248
249 namedistr="hcosthetapointxyS_";
250 namedistr+=i;
251 TH1F *hcosthetapointxyS = new TH1F(namedistr.Data(), "cos#theta_{Point} XYdistribution;cos#theta_{Point}",300,0.,1.);
b272aebf 252
a220990f 253 TH1F* tmpMS = new TH1F(nameMassNocutsS.Data(),"D^{0} invariant mass; M [GeV]; Entries",300,1.5648,2.1648); //range (MD0-300MeV, mD0 + 300MeV)
254 tmpMS->Sumw2();
255
256
257 fDistr->Add(hdcaS);
258
259 fDistr->Add(hd0piS);
260 fDistr->Add(hd0KS);
261
262 fDistr->Add(hd0d0S);
263
264 fDistr->Add(hcosthetapointS);
265
266 fDistr->Add(hcosthetapointxyS);
267
268 fDistr->Add(hdeclengthS);
269
270 fDistr->Add(hnormdeclengthS);
271
272 fDistr->Add(hdeclxyS);
273
274 fDistr->Add(hnormdeclxyS);
275
276 fDistr->Add(hdeclxyd0d0S);
277 fDistr->Add(hnormdeclxyd0d0S);
278
279 fDistr->Add(tmpMS);
280 }
b272aebf 281
a8ce111e 282 // dca
a8ce111e 283 namedistr="hdcaB_";
284 namedistr+=i;
285 TH1F *hdcaB = new TH1F(namedistr.Data(), "DCA distribution;dca [cm]",200,0.,0.1);
b272aebf 286
a8ce111e 287 // impact parameter
a8ce111e 288 namedistr="hd0B_";
289 namedistr+=i;
290 TH1F *hd0B = new TH1F(namedistr.Data(), "Impact parameter distribution (both);d0 [cm]",200,-0.1,0.1);
291
a8ce111e 292 namedistr="hd0d0B_";
293 namedistr+=i;
294 TH1F *hd0d0B = new TH1F(namedistr.Data(), "d_{0}#timesd_{0} distribution;d_{0}#timesd_{0} [cm^{2}]",200,-0.001,0.001);
9af24f46 295
a8ce111e 296 //decay lenght
a220990f 297 namedistr="hdeclB_";
9af24f46 298 namedistr+=i;
a220990f 299 TH1F *hdeclengthB = new TH1F(namedistr.Data(), "Decay Length^{2} distribution;Decay Length^{2} [cm^{2}]",200,0,0.015);
9af24f46 300
a220990f 301 namedistr="hnormdeclB_";
9af24f46 302 namedistr+=i;
a220990f 303 TH1F *hnormdeclengthB = new TH1F(namedistr.Data(), "Normalized Decay Length distribution;(Decay Length/Err)^{2} ",200,0,12.);
a8ce111e 304
a220990f 305 namedistr="hdeclxyB_";
9af24f46 306 namedistr+=i;
a220990f 307 TH1F* hdeclxyB=new TH1F(namedistr.Data(),"Decay Length XY distribution;Decay Length XY [cm]",200,0,0.15);
308 namedistr="hnormdeclxyB_";
309 namedistr+=i;
310 TH1F* hnormdeclxyB=new TH1F(namedistr.Data(),"Normalized decay Length XY distribution;Decay Length XY/Err",200,0,6.);
9af24f46 311
a220990f 312 namedistr="hdeclxyd0d0B_";
9af24f46 313 namedistr+=i;
a220990f 314 TH2F* hdeclxyd0d0B=new TH2F(namedistr.Data(),"Correlation decay Length XY - d_{0}#times d_{0};Decay Length XY [cm];d_{0}#times d_{0}[cm^{2}]",200,0,0.15,200,-0.001,0.001);
9af24f46 315
a220990f 316 namedistr="hnormdeclxyd0d0B_";
a8ce111e 317 namedistr+=i;
a220990f 318 TH2F* hnormdeclxyd0d0B=new TH2F(namedistr.Data(),"Correlation normalized decay Length XY - d_{0}#times d_{0};Decay Length XY/Err;d_{0}#times d_{0}[cm^{2}]",200,0,6,200,-0.001,0.001);
319
320 // costhetapoint
a8ce111e 321 namedistr="hcosthetapointB_";
9af24f46 322 namedistr+=i;
a8ce111e 323 TH1F *hcosthetapointB = new TH1F(namedistr.Data(), "cos#theta_{Point} distribution;cos#theta_{Point}",200,0,1.);
9af24f46 324
a220990f 325 namedistr="hcosthetapointxyB_";
a8ce111e 326 namedistr+=i;
a220990f 327 TH1F *hcosthetapointxyB = new TH1F(namedistr.Data(), "cos#theta_{Point} XY distribution;cos#theta_{Point} XY",300,0.,1.);
328
329 TH1F* tmpMB = new TH1F(nameMassNocutsB.Data(),"D^{0} invariant mass; M [GeV]; Entries",300,1.5648,2.1648); //range (MD0-300MeV, mD0 + 300MeV)
330 tmpMB->Sumw2();
9af24f46 331
a8ce111e 332
a8ce111e 333
a8ce111e 334 fDistr->Add(hdcaB);
335
a8ce111e 336 fDistr->Add(hd0B);
337
a8ce111e 338 fDistr->Add(hd0d0B);
339
a8ce111e 340 fDistr->Add(hcosthetapointB);
341
a220990f 342 fDistr->Add(hcosthetapointxyB);
a8ce111e 343
a8ce111e 344 fDistr->Add(hdeclengthB);
345
a8ce111e 346 fDistr->Add(hnormdeclengthB);
347
a8ce111e 348 fDistr->Add(hdeclxyB);
349
a8ce111e 350 fDistr->Add(hnormdeclxyB);
351
a220990f 352 fDistr->Add(hdeclxyd0d0B);
353 fDistr->Add(hnormdeclxyd0d0B);
354
355 fDistr->Add(tmpMB);
356
a8ce111e 357 //histograms filled only when the secondary vertex is recalculated w/o the daughter tracks (as requested in the cut object)
358
359 if(fCuts->GetIsPrimaryWithoutDaughters()){
a220990f 360 if(fReadMC){
361 namedistr="hd0vpiS_";
362 namedistr+=i;
363 TH1F *hd0vpiS = new TH1F(namedistr.Data(), "Impact parameter distribution (pions)(vtx w/o these tracks);d0(#pi) [cm]",200,-0.1,0.1);
364
365 namedistr="hd0vKS_";
366 namedistr+=i;
367 TH1F *hd0vKS = new TH1F(namedistr.Data(), "Impact parameter distribution (kaons) (vtx w/o these tracks);d0(K) [cm]",200,-0.1,0.1);
368
369 namedistr="hd0d0vS_";
370 namedistr+=i;
371 TH1F *hd0d0vS = new TH1F(namedistr.Data(), "d_{0}#timesd_{0} distribution (vtx w/o these tracks);d_{0}#timesd_{0} [cm^{2}]",200,-0.001,0.001);
372
373 namedistr="hdeclvS_";
374 namedistr+=i;
375 TH1F *hdeclengthvS = new TH1F(namedistr.Data(), "Decay Length distribution (vtx w/o tracks);Decay Length [cm]",200,0,0.6);
376
377 namedistr="hnormdeclvS_";
378 namedistr+=i;
379 TH1F *hnormdeclengthvS = new TH1F(namedistr.Data(), "Normalized Decay Length distribution (vtx w/o tracks);Decay Length/Err ",200,0,10.);
380
381 fDistr->Add(hd0vpiS);
382 fDistr->Add(hd0vKS);
383 fDistr->Add(hd0d0vS);
384 fDistr->Add(hdeclengthvS);
385 fDistr->Add(hnormdeclengthvS);
386
387 }
388
a8ce111e 389 namedistr="hd0vmoresB_";
390 namedistr+=i;
391 TH1F *hd0vmoresB = new TH1F(namedistr.Data(), "Impact parameter distribution (both);d0 [cm]",200,-0.1,0.1);
392
393 namedistr="hd0d0vmoresB_";
394 namedistr+=i;
395 TH1F *hd0d0vmoresB = new TH1F(namedistr.Data(), "Impact parameter distribution (prong +);d0 [cm]",200,-0.001,0.001);
396
397
a8ce111e 398 namedistr="hd0vB_";
399 namedistr+=i;
400 TH1F *hd0vB = new TH1F(namedistr.Data(), "Impact parameter distribution (vtx w/o these tracks);d0 [cm]",200,-0.1,0.1);
401
402 namedistr="hd0vp0B_";
403 namedistr+=i;
404 TH1F *hd0vp0B = new TH1F(namedistr.Data(), "Impact parameter distribution (prong + ** vtx w/o these tracks);d0 [cm]",200,-0.1,0.1);
405
406 namedistr="hd0vp1B_";
407 namedistr+=i;
408 TH1F *hd0vp1B = new TH1F(namedistr.Data(), "Impact parameter distribution (prong - ** vtx w/o these tracks);d0 [cm]",200,-0.1,0.1);
409
a8ce111e 410 namedistr="hd0d0vB_";
411 namedistr+=i;
412 TH1F *hd0d0vB = new TH1F(namedistr.Data(), "d_{0}#timesd_{0} distribution (vtx w/o these tracks);d_{0}#timesd_{0} [cm^{2}]",200,-0.001,0.001);
9af24f46 413
a8ce111e 414 namedistr="hdeclvB_";
415 namedistr+=i;
416 TH1F *hdeclengthvB = new TH1F(namedistr.Data(), "Decay Length distribution (vtx w/o tracks);Decay Length [cm]",200,0,0.6);
9af24f46 417
a8ce111e 418 namedistr="hnormdeclvB_";
419 namedistr+=i;
420 TH1F *hnormdeclengthvB = new TH1F(namedistr.Data(), "Normalized Decay Length distribution (vtx w/o tracks);Decay Length/Err ",200,0,10.);
9af24f46 421
a8ce111e 422 fDistr->Add(hd0vB);
423 fDistr->Add(hd0vp0B);
424 fDistr->Add(hd0vp1B);
425 fDistr->Add(hd0vmoresB);
9af24f46 426
a8ce111e 427 fDistr->Add(hd0d0vB);
428 fDistr->Add(hd0d0vmoresB);
9af24f46 429
a8ce111e 430 fDistr->Add(hdeclengthvB);
9af24f46 431
a8ce111e 432 fDistr->Add(hnormdeclengthvB);
433 }
b272aebf 434
a8ce111e 435
436 }
437 //histograms of invariant mass distributions
a4ae02cd 438
0108fa62 439
a220990f 440 //MC signal
441 if(fReadMC){
442 TH1F* tmpSt = new TH1F(nameSgn.Data(), "D^{0} invariant mass - MC; M [GeV]; Entries",200,1.5648,2.1648);
a4ae02cd 443
a220990f 444 TH1F *tmpSl=(TH1F*)tmpSt->Clone();
445 tmpSt->Sumw2();
446 tmpSl->Sumw2();
a4ae02cd 447
a220990f 448 //Reflection: histo filled with D0Mass which pass the cut (also) as D0bar and with D0bar which pass (also) the cut as D0
449 TH1F* tmpRt = new TH1F(nameRfl.Data(), "Reflected signal invariant mass - MC; M [GeV]; Entries",200,1.5648,2.1648);
450 //TH1F *tmpRl=(TH1F*)tmpRt->Clone();
451 TH1F* tmpBt = new TH1F(nameBkg.Data(), "Background invariant mass - MC; M [GeV]; Entries",200,1.5648,2.1648);
452 //TH1F *tmpBl=(TH1F*)tmpBt->Clone();
453 tmpBt->Sumw2();
454 //tmpBl->Sumw2();
455 tmpRt->Sumw2();
456 //tmpRl->Sumw2();
a4ae02cd 457
a220990f 458 fOutputMass->Add(tmpSt);
459 fOutputMass->Add(tmpRt);
460 fOutputMass->Add(tmpBt);
461
462 }
ea0d8716 463
a8ce111e 464 //mass
465 TH1F* tmpMt = new TH1F(nameMass.Data(),"D^{0} invariant mass; M [GeV]; Entries",200,1.5648,2.1648);
a220990f 466 //TH1F *tmpMl=(TH1F*)tmpMt->Clone();
a8ce111e 467 tmpMt->Sumw2();
a220990f 468 //tmpMl->Sumw2();
a8ce111e 469 //distribution w/o cuts large range
470 // TH1F* tmpMS = new TH1F(nameMassNocutsS.Data(),"D^{0} invariant mass; M [GeV]; Entries",300,0.7,3.);
471
472 fOutputMass->Add(tmpMt);
473
474 if(fSys==0){ //histograms filled only in pp to save time in PbPb
475 if(fFillVarHists){
a8ce111e 476
a220990f 477 if(fReadMC){
478 // pT
479 namedistr="hptpiS_";
480 namedistr+=i;
481 TH1F *hptpiS = new TH1F(namedistr.Data(), "P_{T} distribution (pions);p_{T} [GeV/c]",200,0.,8.);
482
483 namedistr="hptKS_";
484 namedistr+=i;
485 TH1F *hptKS = new TH1F(namedistr.Data(), "P_{T} distribution (kaons);p_{T} [GeV/c]",200,0.,8.);
486
487 // costhetastar
488 namedistr="hcosthetastarS_";
489 namedistr+=i;
490 TH1F *hcosthetastarS = new TH1F(namedistr.Data(), "cos#theta* distribution;cos#theta*",200,-1.,1.);
491
492 //pT no mass cut
493
494 namedistr="hptpiSnoMcut_";
495 namedistr+=i;
496 TH1F *hptpiSnoMcut = new TH1F(namedistr.Data(), "P_{T} distribution (pions);p_{T} [GeV/c]",200,0.,8.);
497
498 namedistr="hptKSnoMcut_";
499 namedistr+=i;
500 TH1F *hptKSnoMcut = new TH1F(namedistr.Data(), "P_{T} distribution (kaons);p_{T} [GeV/c]",200,0.,8.);
501
502 fDistr->Add(hptpiS);
503 fDistr->Add(hptKS);
504 fDistr->Add(hcosthetastarS);
505
506 fDistr->Add(hptpiSnoMcut);
507 fDistr->Add(hptKSnoMcut);
508
509 // costhetapoint vs d0 or d0d0
510 namedistr="hcosthpointd0S_";
511 namedistr+=i;
512 TH2F *hcosthpointd0S= new TH2F(namedistr.Data(),"Correlation cos#theta_{Point}-d_{0};cos#theta_{Point};d_{0} [cm^{2}]",200,0,1.,200,-0.001,0.001);
513 namedistr="hcosthpointd0d0S_";
514 namedistr+=i;
515 TH2F *hcosthpointd0d0S= new TH2F(namedistr.Data(),"Correlation cos#theta_{Point}-d_{0}#timesd_{0};cos#theta_{Point};d_{0}#timesd_{0} [cm^{2}]",200,0,1.,200,-0.001,0.001);
516
517 fDistr->Add(hcosthpointd0S);
518 fDistr->Add(hcosthpointd0d0S);
519
520 //to compare with AliAnalysisTaskCharmFraction
521 TH1F* tmpS27t = new TH1F(nameSgn27.Data(),"D^{0} invariant mass in M(D^{0}) +/- 27 MeV - MC; M [GeV]; Entries",200,1.5648,2.1648);
522 TH1F *tmpS27l=(TH1F*)tmpS27t->Clone();
523 tmpS27t->Sumw2();
524 tmpS27l->Sumw2();
525
526 fOutputMass->Add(tmpS27t);
527 fOutputMass->Add(tmpS27l);
528
529 }
530
531 // pT
532 namedistr="hptB_";
a8ce111e 533 namedistr+=i;
a220990f 534 TH1F *hptB = new TH1F(namedistr.Data(), "P_{T} distribution;p_{T} [GeV/c]",200,0.,8.);
a8ce111e 535
a220990f 536 // costhetastar
537 namedistr="hcosthetastarB_";
a8ce111e 538 namedistr+=i;
a220990f 539 TH1F *hcosthetastarB = new TH1F(namedistr.Data(), "cos#theta* distribution;cos#theta*",200,-1.,1.);
a8ce111e 540
a220990f 541 //pT no mass cut
a8ce111e 542 namedistr="hptB1prongnoMcut_";
543 namedistr+=i;
544 TH1F *hptB1pnoMcut = new TH1F(namedistr.Data(), "P_{T} distribution;p_{T} [GeV/c]",200,0.,8.);
545
546 namedistr="hptB2prongsnoMcut_";
547 namedistr+=i;
548 TH1F *hptB2pnoMcut = new TH1F(namedistr.Data(), "P_{T} distribution;p_{T} [GeV/c]",200,0.,8.);
549
a220990f 550 fDistr->Add(hptB);
551 fDistr->Add(hcosthetastarB);
552
a8ce111e 553 fDistr->Add(hptB1pnoMcut);
554 fDistr->Add(hptB2pnoMcut);
555
556 //impact parameter of negative/positive track
557 namedistr="hd0p0B_";
558 namedistr+=i;
559 TH1F *hd0p0B = new TH1F(namedistr.Data(), "Impact parameter distribution (prong +);d0 [cm]",200,-0.1,0.1);
560
561 namedistr="hd0p1B_";
562 namedistr+=i;
563 TH1F *hd0p1B = new TH1F(namedistr.Data(), "Impact parameter distribution (prong -);d0 [cm]",200,-0.1,0.1);
564
565 //impact parameter corrected for strangeness
566 namedistr="hd0moresB_";
567 namedistr+=i;
568 TH1F *hd0moresB = new TH1F(namedistr.Data(), "Impact parameter distribution (both);d0 [cm]",200,-0.1,0.1);
0108fa62 569
a8ce111e 570 namedistr="hd0d0moresB_";
571 namedistr+=i;
572 TH1F *hd0d0moresB = new TH1F(namedistr.Data(), "Impact parameter distribution (prong +);d0 [cm]",200,-0.001,0.001);
573
574
575 namedistr="hcosthetapointmoresB_";
576 namedistr+=i;
577 TH1F *hcosthetapointmoresB = new TH1F(namedistr.Data(), "cos#theta_{Point} distribution;cos#theta_{Point}",200,0,1.);
578
579 // costhetapoint vs d0 or d0d0
a8ce111e 580 namedistr="hcosthpointd0B_";
581 namedistr+=i;
582 TH2F *hcosthpointd0B= new TH2F(namedistr.Data(),"Correlation cos#theta_{Point}-d_{0};cos#theta_{Point};d_{0} [cm^{2}]",200,0,1.,200,-0.001,0.001);
583
a8ce111e 584 namedistr="hcosthpointd0d0B_";
585 namedistr+=i;
586 TH2F *hcosthpointd0d0B= new TH2F(namedistr.Data(),"Correlation cos#theta_{Point}-d_{0}#timesd_{0};cos#theta_{Point};d_{0}#timesd_{0} [cm^{2}]",200,0,1.,200,-0.001,0.001);
587
588 fDistr->Add(hd0p0B);
589 fDistr->Add(hd0p1B);
590
591 fDistr->Add(hd0moresB);
592 fDistr->Add(hd0d0moresB);
593 fDistr->Add(hcosthetapointmoresB);
594
a220990f 595
a8ce111e 596 fDistr->Add(hcosthpointd0B);
597
a220990f 598
a8ce111e 599 fDistr->Add(hcosthpointd0d0B);
600 }
34137226 601
a8ce111e 602 } //end pp histo
7646d6da 603 }
a4ae02cd 604
a8ce111e 605
606 //for Like sign analysis
607
9af24f46 608 if(fArray==1){
609 namedistr="hpospair";
82487ae7 610 TH1F* hpospair=new TH1F(namedistr.Data(),"Number of positive pairs",fCuts->GetNPtBins(),-0.5,fCuts->GetNPtBins()-0.5);
9af24f46 611 namedistr="hnegpair";
82487ae7 612 TH1F* hnegpair=new TH1F(namedistr.Data(),"Number of negative pairs",fCuts->GetNPtBins(),-0.5,fCuts->GetNPtBins()-0.5);
818c1271 613 fOutputMass->Add(hpospair);
614 fOutputMass->Add(hnegpair);
9af24f46 615 }
449b1302 616
5b2e5fae 617 const char* nameoutput=GetOutputSlot(3)->GetContainer()->GetName();
4e61a020 618
2b35ac47 619 fNentries=new TH1F(nameoutput, "Integral(1,2) = number of AODs *** Integral(2,3) = number of candidates selected with cuts *** Integral(3,4) = number of D0 selected with cuts *** Integral(4,5) = events with good vertex *** Integral(5,6) = pt out of bounds", 17,-0.5,16.5);
34137226 620
621 fNentries->GetXaxis()->SetBinLabel(1,"nEventsAnal");
4e61a020 622 fNentries->GetXaxis()->SetBinLabel(2,"nCandSel(Cuts)");
818c1271 623 if(fReadMC) fNentries->GetXaxis()->SetBinLabel(3,"nD0Selected");
624 else fNentries->GetXaxis()->SetBinLabel(3,"Dstar<-D0");
6b3e3c78 625 fNentries->GetXaxis()->SetBinLabel(4,"nEventsGoodVtxS");
700e80e0 626 fNentries->GetXaxis()->SetBinLabel(5,"ptbin = -1");
627 fNentries->GetXaxis()->SetBinLabel(6,"no daughter");
a8ce111e 628 if(fSys==0) fNentries->GetXaxis()->SetBinLabel(7,"nCandSel(Tr)");
629 if(fFillVarHists){
630 fNentries->GetXaxis()->SetBinLabel(8,"PID=0");
631 fNentries->GetXaxis()->SetBinLabel(9,"PID=1");
632 fNentries->GetXaxis()->SetBinLabel(10,"PID=2");
633 fNentries->GetXaxis()->SetBinLabel(11,"PID=3");
634 }
635 if(fReadMC && fSys==0){
636 fNentries->GetXaxis()->SetBinLabel(12,"K");
637 fNentries->GetXaxis()->SetBinLabel(13,"Lambda");
638 }
700e80e0 639 fNentries->GetXaxis()->SetBinLabel(14,"Pile-up Rej");
a3aa1279 640 fNentries->GetXaxis()->SetBinLabel(15,"N. of 0SMH");
a220990f 641 if(fSys==1) fNentries->GetXaxis()->SetBinLabel(16,"Nev in centr");
2b35ac47 642 if(fIsRejectSDDClusters) fNentries->GetXaxis()->SetBinLabel(17,"SDD-Cls Rej");
34137226 643 fNentries->GetXaxis()->SetNdivisions(1,kFALSE);
a4ae02cd 644
700e80e0 645 fCounter = new AliNormalizationCounter(Form("%s",GetOutputSlot(5)->GetContainer()->GetName()));
a96083b9 646
40445ada 647 // Post the data
ea0d8716 648 PostData(1,fOutputMass);
a8ce111e 649 if(fFillVarHists) PostData(2,fDistr);
40445ada 650 PostData(3,fNentries);
700e80e0 651 PostData(5,fCounter);
49061176 652 return;
653}
654
655//________________________________________________________________________
656void AliAnalysisTaskSED0Mass::UserExec(Option_t */*option*/)
657{
658 // Execute analysis for current event:
659 // heavy flavor candidates association to MC truth
a4ae02cd 660 //cout<<"I'm in UserExec"<<endl;
ea0d8716 661
662
a220990f 663 //cuts order
664 // printf(" |M-MD0| [GeV] < %f\n",fD0toKpiCuts[0]);
665 // printf(" dca [cm] < %f\n",fD0toKpiCuts[1]);
666 // printf(" cosThetaStar < %f\n",fD0toKpiCuts[2]);
667 // printf(" pTK [GeV/c] > %f\n",fD0toKpiCuts[3]);
668 // printf(" pTpi [GeV/c] > %f\n",fD0toKpiCuts[4]);
669 // printf(" |d0K| [cm] < %f\n",fD0toKpiCuts[5]);
670 // printf(" |d0pi| [cm] < %f\n",fD0toKpiCuts[6]);
671 // printf(" d0d0 [cm^2] < %f\n",fD0toKpiCuts[7]);
672 // printf(" cosThetaPoint > %f\n",fD0toKpiCuts[8]);
ea0d8716 673
674
49061176 675 AliAODEvent *aod = dynamic_cast<AliAODEvent*> (InputEvent());
feb73eca 676
b557eb43 677 TString bname;
feb73eca 678 if(fArray==0){ //D0 candidates
b557eb43 679 // load D0->Kpi candidates
feb73eca 680 //cout<<"D0 candidates"<<endl;
b557eb43 681 bname="D0toKpi";
feb73eca 682 } else { //LikeSign candidates
feb73eca 683 // load like sign candidates
b557eb43 684 //cout<<"LS candidates"<<endl;
685 bname="LikeSign2Prong";
686 }
687
688 TClonesArray *inputArray=0;
34137226 689
b557eb43 690 if(!aod && AODEvent() && IsStandardAOD()) {
691 // In case there is an AOD handler writing a standard AOD, use the AOD
692 // event in memory rather than the input (ESD) event.
693 aod = dynamic_cast<AliAODEvent*> (AODEvent());
694 // in this case the braches in the deltaAOD (AliAOD.VertexingHF.root)
695 // have to taken from the AOD event hold by the AliAODExtension
696 AliAODHandler* aodHandler = (AliAODHandler*)
697 ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
34137226 698
b557eb43 699 if(aodHandler->GetExtensions()) {
700 AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject("AliAOD.VertexingHF.root");
34137226 701 AliAODEvent* aodFromExt = ext->GetAOD();
b557eb43 702 inputArray=(TClonesArray*)aodFromExt->GetList()->FindObject(bname.Data());
feb73eca 703 }
dc222f77 704 } else if(aod) {
b557eb43 705 inputArray=(TClonesArray*)aod->GetList()->FindObject(bname.Data());
706 }
feb73eca 707
b557eb43 708
dc222f77 709 if(!inputArray || !aod) {
b557eb43 710 printf("AliAnalysisTaskSED0Mass::UserExec: input branch not found!\n");
711 return;
49061176 712 }
713
6b3e3c78 714 // fix for temporary bug in ESDfilter
7c23877d 715 // the AODs with null vertex pointer didn't pass the PhysSel
5806c290 716 if(!aod->GetPrimaryVertex() || TMath::Abs(aod->GetMagneticField())<0.001) return;
717
7c23877d 718
ce39f0ac 719 TClonesArray *mcArray = 0;
720 AliAODMCHeader *mcHeader = 0;
721
722 if(fReadMC) {
723 // load MC particles
724 mcArray = (TClonesArray*)aod->GetList()->FindObject(AliAODMCParticle::StdBranchName());
725 if(!mcArray) {
726 printf("AliAnalysisTaskSED0Mass::UserExec: MC particles branch not found!\n");
727 return;
728 }
40445ada 729
ce39f0ac 730 // load MC header
731 mcHeader = (AliAODMCHeader*)aod->GetList()->FindObject(AliAODMCHeader::StdBranchName());
732 if(!mcHeader) {
733 printf("AliAnalysisTaskSED0Mass::UserExec: MC header branch not found!\n");
734 return;
735 }
49061176 736 }
737
b557eb43 738 //printf("VERTEX Z %f %f\n",vtx1->GetZ(),mcHeader->GetVtxZ());
40445ada 739
a4ae02cd 740 //histogram filled with 1 for every AOD
34137226 741 fNentries->Fill(0);
a3aa1279 742 fCounter->StoreEvent(aod,fReadMC);
743
744 // trigger class for PbPb C0SMH-B-NOPF-ALLNOTRD, C0SMH-B-NOPF-ALL
745 TString trigclass=aod->GetFiredTriggerClasses();
746 if(trigclass.Contains("C0SMH-B-NOPF-ALLNOTRD") || trigclass.Contains("C0SMH-B-NOPF-ALL")) fNentries->Fill(14);
747
d52f7b50 748 if(!fCuts->IsEventSelected(aod)) {
749 if(fCuts->GetWhyRejection()==1) // rejected for pileup
700e80e0 750 fNentries->Fill(13);
a220990f 751 if(fSys==1 && (fCuts->GetWhyRejection()==2 || fCuts->GetWhyRejection()==3)) fNentries->Fill(15);
d52f7b50 752 return;
753 }
2b35ac47 754
755 // Check the Nb of SDD clusters
756 if (fIsRejectSDDClusters) {
757 Bool_t skipEvent = kFALSE;
758 Int_t ntracks = 0;
759 if (aod) ntracks = aod->GetNTracks();
760 for(Int_t itrack=0; itrack<ntracks; itrack++) { // loop on tacks
761 // ... get the track
762 AliAODTrack * track = aod->GetTrack(itrack);
763 if(TESTBIT(track->GetITSClusterMap(),2) || TESTBIT(track->GetITSClusterMap(),3) ){
764 skipEvent=kTRUE;
765 fNentries->Fill(16);
766 break;
767 }
768 }
769 if (skipEvent) return;
770 }
40445ada 771
772 // AOD primary vertex
773 AliAODVertex *vtx1 = (AliAODVertex*)aod->GetPrimaryVertex();
b272aebf 774
40445ada 775 Bool_t isGoodVtx=kFALSE;
b272aebf 776
a220990f 777 //vtx1->Print();
40445ada 778 TString primTitle = vtx1->GetTitle();
779 if(primTitle.Contains("VertexerTracks") && vtx1->GetNContributors()>0) {
780 isGoodVtx=kTRUE;
781 fNentries->Fill(3);
782 }
783
75638da0 784 // loop over candidates
785 Int_t nInD0toKpi = inputArray->GetEntriesFast();
4e61a020 786 if(fDebug>2) printf("Number of D0->Kpi: %d\n",nInD0toKpi);
75638da0 787
6b3e3c78 788 // FILE *f=fopen("4display.txt","a");
789 // fprintf(f,"Number of D0->Kpi: %d\n",nInD0toKpi);
a96083b9 790 Int_t nSelectedloose=0,nSelectedtight=0;
75638da0 791 for (Int_t iD0toKpi = 0; iD0toKpi < nInD0toKpi; iD0toKpi++) {
75638da0 792 AliAODRecoDecayHF2Prong *d = (AliAODRecoDecayHF2Prong*)inputArray->UncheckedAt(iD0toKpi);
818c1271 793
794 if(d->GetSelectionMap()) if(!d->HasSelectionBit(AliRDHFCuts::kD0toKpiCuts)){
795 fNentries->Fill(2);
796 continue; //skip the D0 from Dstar
797 }
a220990f 798
600faffe 799 // Bool_t unsetvtx=kFALSE;
800 // if(!d->GetOwnPrimaryVtx()) {
801 // d->SetOwnPrimaryVtx(vtx1); // needed to compute all variables
802 // unsetvtx=kTRUE;
803 // }
ea0d8716 804
4e61a020 805
4e61a020 806 if ( fCuts->IsInFiducialAcceptance(d->Pt(),d->Y(421)) ) {
a96083b9 807 nSelectedloose++;
d7688946 808 nSelectedtight++;
a8ce111e 809 if(fSys==0){
810 if(fCuts->IsSelected(d,AliRDHFCuts::kTracks,aod))fNentries->Fill(6);
811 }
6b3e3c78 812 Int_t ptbin=fCuts->PtBin(d->Pt());
700e80e0 813 if(ptbin==-1) {fNentries->Fill(4); continue;} //out of bounds
d7688946 814 fIsSelectedCandidate=fCuts->IsSelected(d,AliRDHFCuts::kCandidate,aod); //selected
815 if(fFillVarHists) {
a8ce111e 816 //if(!fCutOnDistr || (fCutOnDistr && fIsSelectedCandidate)) {
a220990f 817 fDaughterTracks.AddAt((AliAODTrack*)d->GetDaughter(0),0);
818 fDaughterTracks.AddAt((AliAODTrack*)d->GetDaughter(1),1);
819 //check daughters
820 if(!fDaughterTracks.UncheckedAt(0) || !fDaughterTracks.UncheckedAt(1)) {
821 AliDebug(1,"at least one daughter not found!");
822 fNentries->Fill(5);
823 fDaughterTracks.Clear();
824 continue;
825 }
826 //}
d7688946 827 FillVarHists(aod,d,mcArray,fCuts,fDistr);
828 }
a8ce111e 829
d7688946 830 FillMassHists(d,mcArray,fCuts,fOutputMass);
75638da0 831 }
ea0d8716 832
d7688946 833 fDaughterTracks.Clear();
600faffe 834 //if(unsetvtx) d->UnsetOwnPrimaryVtx();
75638da0 835 } //end for prongs
a96083b9 836 fCounter->StoreCandidates(aod,nSelectedloose,kTRUE);
837 fCounter->StoreCandidates(aod,nSelectedtight,kFALSE);
40445ada 838 // Post the data
ea0d8716 839 PostData(1,fOutputMass);
a8ce111e 840 if(fFillVarHists) PostData(2,fDistr);
40445ada 841 PostData(3,fNentries);
700e80e0 842 PostData(5,fCounter);
40445ada 843 return;
844}
b272aebf 845
40445ada 846//____________________________________________________________________________
4e61a020 847void AliAnalysisTaskSED0Mass::FillVarHists(AliAODEvent* aod,AliAODRecoDecayHF2Prong *part, TClonesArray *arrMC, AliRDHFCutsD0toKpi *cuts, TList *listout){
40445ada 848 //
849 // function used in UserExec to fill variable histograms:
850 //
b272aebf 851
b272aebf 852
40445ada 853 Int_t pdgDgD0toKpi[2]={321,211};
854 Int_t lab=-9999;
855 if(fReadMC) lab=part->MatchToMC(421,arrMC,2,pdgDgD0toKpi); //return MC particle label if the array corresponds to a D0, -1 if not (cf. AliAODRecoDecay.cxx)
856 //Double_t pt = d->Pt(); //mother pt
a8ce111e 857 Int_t isSelectedPID=3;
858 if(!fReadMC || (fReadMC && fUsePid4Distr)) isSelectedPID=cuts->IsSelectedPID(part); //0 rejected,1 D0,2 Dobar, 3 both
700e80e0 859 if (isSelectedPID==0)fNentries->Fill(7);
860 if (isSelectedPID==1)fNentries->Fill(8);
861 if (isSelectedPID==2)fNentries->Fill(9);
862 if (isSelectedPID==3)fNentries->Fill(10);
a220990f 863 //fNentries->Fill(8+isSelectedPID);
3cc4604b 864
a8ce111e 865 if(fCutOnDistr && !fIsSelectedCandidate) return;
d7688946 866 //printf("\nif no cuts or cuts passed\n");
867
868
869 //add distr here
870 UInt_t pdgs[2];
871
872 Double_t mPDG=TDatabasePDG::Instance()->GetParticle(421)->Mass();
873 pdgs[0]=211;
874 pdgs[1]=321;
875 Double_t minvD0 = part->InvMassD0();
876 pdgs[1]=211;
877 pdgs[0]=321;
878 Double_t minvD0bar = part->InvMassD0bar();
879 //cout<<"inside mass cut"<<endl;
0108fa62 880
4e61a020 881 Double_t invmasscut=0.03;
882
40445ada 883 TString fillthispi="",fillthisK="",fillthis="";
b272aebf 884
ea0d8716 885 Int_t ptbin=cuts->PtBin(part->Pt());
6b3e3c78 886
4e61a020 887 Double_t dz1[2],dz2[2],covar1[3],covar2[3];//,d0xd0proper,errd0xd0proper;
888 dz1[0]=-99; dz2[0]=-99;
9af24f46 889 Double_t d0[2];
890 Double_t decl[2]={-99,-99};
891 Bool_t recalcvtx=kFALSE;
892
d7688946 893
894
9af24f46 895 if(fCuts->GetIsPrimaryWithoutDaughters()){
896 recalcvtx=kTRUE;
897 //recalculate vertex
898 AliAODVertex *vtxProp=0x0;
d7688946 899 vtxProp=GetPrimaryVtxSkipped(aod);
9af24f46 900 if(vtxProp) {
901 part->SetOwnPrimaryVtx(vtxProp);
902 //Bool_t unsetvtx=kTRUE;
903 //Calculate d0 for daughter tracks with Vtx Skipped
d7688946 904 AliESDtrack *esdtrack1=new AliESDtrack((AliVTrack*)fDaughterTracks.UncheckedAt(0));
905 AliESDtrack *esdtrack2=new AliESDtrack((AliVTrack*)fDaughterTracks.UncheckedAt(1));
9af24f46 906 esdtrack1->PropagateToDCA(vtxProp,aod->GetMagneticField(),1.,dz1,covar1);
907 esdtrack2->PropagateToDCA(vtxProp,aod->GetMagneticField(),1.,dz2,covar2);
908 delete vtxProp; vtxProp=NULL;
909 delete esdtrack1;
910 delete esdtrack2;
911 }
912
913 d0[0]=dz1[0];
914 d0[1]=dz2[0];
915
a8ce111e 916 decl[0]=part->DecayLength2();
917 decl[1]=part->NormalizedDecayLength2();
9af24f46 918 part->UnsetOwnPrimaryVtx();
919
4e61a020 920 }
921
d7688946 922 Double_t cosThetaStarD0 = 99;
923 Double_t cosThetaStarD0bar = 99;
924 Double_t cosPointingAngle = 99;
a8ce111e 925 Double_t normalizedDecayLength2 = -1, normalizedDecayLengthxy=-1;
926 Double_t decayLength2 = -1, decayLengthxy=-1;
d7688946 927 Double_t ptProng[2]={-99,-99};
a8ce111e 928 Double_t d0Prong[2]={-99,-99};
d7688946 929
0108fa62 930
a220990f 931 //disable the PID
932 if(!fUsePid4Distr) isSelectedPID=0;
933 if((lab>=0 && fReadMC) || (!fReadMC && isSelectedPID)){ //signal (from MC or PID)
9af24f46 934
a220990f 935 //check pdg of the prongs
936 AliAODTrack *prong0=(AliAODTrack*)fDaughterTracks.UncheckedAt(0);
937 AliAODTrack *prong1=(AliAODTrack*)fDaughterTracks.UncheckedAt(1);
6b3e3c78 938
a220990f 939 if(!prong0 || !prong1) {
940 return;
941 }
942 Int_t labprong[2];
943 if(fReadMC){
944 labprong[0]=prong0->GetLabel();
945 labprong[1]=prong1->GetLabel();
946 }
947 AliAODMCParticle *mcprong=0;
948 Int_t pdgProng[2]={0,0};
949
950 for (Int_t iprong=0;iprong<2;iprong++){
951 if(fReadMC && labprong[iprong]>=0) {
952 mcprong= (AliAODMCParticle*)arrMC->At(labprong[iprong]);
953 pdgProng[iprong]=mcprong->GetPdgCode();
0108fa62 954 }
a220990f 955 }
6b3e3c78 956
a220990f 957 if(fSys==0){
958 //no mass cut ditributions: ptbis
40445ada 959
a220990f 960 fillthispi="hptpiSnoMcut_";
961 fillthispi+=ptbin;
a8ce111e 962
a220990f 963 fillthisK="hptKSnoMcut_";
964 fillthisK+=ptbin;
a8ce111e 965
a220990f 966 if ((TMath::Abs(pdgProng[0]) == 211 && TMath::Abs(pdgProng[1]) == 321)
967 || (isSelectedPID==1 || isSelectedPID==3)){
968 ((TH1F*)listout->FindObject(fillthispi))->Fill(prong0->Pt());
969 ((TH1F*)listout->FindObject(fillthisK))->Fill(prong1->Pt());
970 }
a8ce111e 971
a220990f 972 if ((TMath::Abs(pdgProng[0]) == 321 && TMath::Abs(pdgProng[1]) == 211)
973 || (isSelectedPID==2 || isSelectedPID==3)){
974 ((TH1F*)listout->FindObject(fillthisK))->Fill(prong0->Pt());
975 ((TH1F*)listout->FindObject(fillthispi))->Fill(prong1->Pt());
a8ce111e 976 }
a220990f 977 }
a8ce111e 978
a220990f 979 //no mass cut ditributions: mass
980 fillthis="hMassS_";
981 fillthis+=ptbin;
40445ada 982
a220990f 983 if ((fReadMC && ((AliAODMCParticle*)arrMC->At(lab))->GetPdgCode() == 421)
984 || (!fReadMC && (isSelectedPID==1 || isSelectedPID==3))){//D0
985 ((TH1F*)listout->FindObject(fillthis))->Fill(minvD0);
986 }
987 else { //D0bar
988 if(fReadMC || (!fReadMC && isSelectedPID > 1))
40445ada 989 ((TH1F*)listout->FindObject(fillthis))->Fill(minvD0bar);
a220990f 990 }
4e61a020 991
a220990f 992 //apply cut on invariant mass on the pair
993 if(TMath::Abs(minvD0-mPDG)<invmasscut || TMath::Abs(minvD0bar-mPDG)<invmasscut){
d7688946 994
a220990f 995 cosThetaStarD0 = part->CosThetaStarD0();
996 cosThetaStarD0bar = part->CosThetaStarD0bar();
997 cosPointingAngle = part->CosPointingAngle();
998 normalizedDecayLength2 = part->NormalizedDecayLength2();
999 decayLength2 = part->DecayLength2();
1000 decayLengthxy = part->DecayLengthXY();
1001 normalizedDecayLengthxy=decayLengthxy/part->DecayLengthXYError();
a8ce111e 1002
a220990f 1003 ptProng[0]=prong0->Pt(); ptProng[1]=prong1->Pt();
a220990f 1004 d0Prong[0]=part->Getd0Prong(0); d0Prong[1]=part->Getd0Prong(1);
a8ce111e 1005
a220990f 1006 if(fArray==1) cout<<"LS signal: ERROR"<<endl;
1007 for (Int_t iprong=0; iprong<2; iprong++){
1008 AliAODTrack *prong=(AliAODTrack*)fDaughterTracks.UncheckedAt(iprong);
1009 if (fReadMC) labprong[iprong]=prong->GetLabel();
40445ada 1010
a220990f 1011 //cout<<"prong name = "<<prong->GetName()<<" label = "<<prong->GetLabel()<<endl;
1012 Int_t pdgprong=0;
1013 if(fReadMC && labprong[iprong]>=0) {
1014 mcprong= (AliAODMCParticle*)arrMC->At(labprong[iprong]);
1015 pdgprong=mcprong->GetPdgCode();
1016 }
6b3e3c78 1017
a220990f 1018 Bool_t isPionHere[2]={(isSelectedPID==1 || isSelectedPID==3) ? kTRUE : kFALSE,(isSelectedPID==2 || isSelectedPID==3) ? kTRUE : kFALSE};
6b3e3c78 1019
a220990f 1020 if(TMath::Abs(pdgprong)==211 || isPionHere[iprong]) {
1021 //cout<<"pi"<<endl;
1022
1023 if(fSys==0){
40445ada 1024 fillthispi="hptpiS_";
1025 fillthispi+=ptbin;
d7688946 1026 ((TH1F*)listout->FindObject(fillthispi))->Fill(ptProng[iprong]);
a220990f 1027 }
1028 fillthispi="hd0piS_";
1029 fillthispi+=ptbin;
1030 ((TH1F*)listout->FindObject(fillthispi))->Fill(d0Prong[iprong]);
1031 if(recalcvtx) {
4e61a020 1032
a220990f 1033 fillthispi="hd0vpiS_";
1034 fillthispi+=ptbin;
1035 ((TH1F*)listout->FindObject(fillthispi))->Fill(d0[iprong]);
b272aebf 1036 }
a220990f 1037
1038 }
40445ada 1039
a220990f 1040 if(TMath::Abs(pdgprong)==321 || !isPionHere[iprong]) {
1041 //cout<<"kappa"<<endl;
1042 if(fSys==0){
40445ada 1043 fillthisK="hptKS_";
1044 fillthisK+=ptbin;
d7688946 1045 ((TH1F*)listout->FindObject(fillthisK))->Fill(ptProng[iprong]);
a220990f 1046 }
1047 fillthisK="hd0KS_";
1048 fillthisK+=ptbin;
1049 ((TH1F*)listout->FindObject(fillthisK))->Fill(d0Prong[iprong]);
1050 if (recalcvtx){
1051 fillthisK="hd0vKS_";
40445ada 1052 fillthisK+=ptbin;
a220990f 1053 ((TH1F*)listout->FindObject(fillthisK))->Fill(d0[iprong]);
b272aebf 1054 }
a220990f 1055 }
b272aebf 1056
a220990f 1057 if(fSys==0){
1058 fillthis="hcosthpointd0S_";
1059 fillthis+=ptbin;
1060 ((TH1F*)listout->FindObject(fillthis))->Fill(cosPointingAngle,d0Prong[iprong]);
1061 }
1062 } //end loop on prongs
b272aebf 1063
a220990f 1064 fillthis="hdcaS_";
1065 fillthis+=ptbin;
1066 ((TH1F*)listout->FindObject(fillthis))->Fill(part->GetDCA());
4e61a020 1067
a220990f 1068 fillthis="hcosthetapointS_";
1069 fillthis+=ptbin;
1070 ((TH1F*)listout->FindObject(fillthis))->Fill(cosPointingAngle);
4e61a020 1071
a220990f 1072 fillthis="hcosthetapointxyS_";
1073 fillthis+=ptbin;
1074 ((TH1F*)listout->FindObject(fillthis))->Fill(part->CosPointingAngleXY());
a8ce111e 1075
4e61a020 1076
a220990f 1077 fillthis="hd0d0S_";
1078 fillthis+=ptbin;
1079 ((TH1F*)listout->FindObject(fillthis))->Fill(part->Prodd0d0());
4e61a020 1080
a220990f 1081 fillthis="hdeclS_";
1082 fillthis+=ptbin;
1083 ((TH1F*)listout->FindObject(fillthis))->Fill(decayLength2);
a8ce111e 1084
a220990f 1085 fillthis="hnormdeclS_";
1086 fillthis+=ptbin;
1087 ((TH1F*)listout->FindObject(fillthis))->Fill(normalizedDecayLength2);
1088
1089 fillthis="hdeclxyS_";
1090 fillthis+=ptbin;
1091 ((TH1F*)listout->FindObject(fillthis))->Fill(decayLengthxy);
1092
1093 fillthis="hnormdeclxyS_";
1094 fillthis+=ptbin;
1095 ((TH1F*)listout->FindObject(fillthis))->Fill(normalizedDecayLengthxy);
1096
1097 fillthis="hdeclxyd0d0S_";
1098 fillthis+=ptbin;
1099 ((TH2F*)listout->FindObject(fillthis))->Fill(decayLengthxy,d0Prong[0]*d0Prong[1]);
1100
1101 fillthis="hnormdeclxyd0d0S_";
1102 fillthis+=ptbin;
1103 ((TH2F*)listout->FindObject(fillthis))->Fill(normalizedDecayLengthxy,d0Prong[0]*d0Prong[1]);
a8ce111e 1104
a220990f 1105 if(recalcvtx) {
1106 fillthis="hdeclvS_";
a8ce111e 1107 fillthis+=ptbin;
a220990f 1108 ((TH1F*)listout->FindObject(fillthis))->Fill(decl[0]);
a2121012 1109
a220990f 1110 fillthis="hnormdeclvS_";
1111 fillthis+=ptbin;
1112 ((TH1F*)listout->FindObject(fillthis))->Fill(decl[1]);
a2121012 1113
a220990f 1114 fillthis="hd0d0vS_";
1115 fillthis+=ptbin;
1116 ((TH1F*)listout->FindObject(fillthis))->Fill(d0[0]*d0[1]);
1117 }
a8ce111e 1118
a220990f 1119 if(fSys==0){
1120 fillthis="hcosthetastarS_";
1121 fillthis+=ptbin;
1122 if ((fReadMC && ((AliAODMCParticle*)arrMC->At(lab))->GetPdgCode() == 421)) ((TH1F*)listout->FindObject(fillthis))->Fill(cosThetaStarD0);
1123 else {
1124 if (fReadMC || isSelectedPID>1)((TH1F*)listout->FindObject(fillthis))->Fill(cosThetaStarD0bar);
1125 if(isSelectedPID==1 || isSelectedPID==3)((TH1F*)listout->FindObject(fillthis))->Fill(cosThetaStarD0);
a8ce111e 1126 }
1127
a220990f 1128 fillthis="hcosthpointd0d0S_";
1129 fillthis+=ptbin;
1130 ((TH2F*)listout->FindObject(fillthis))->Fill(cosPointingAngle,part->Prodd0d0());
1131 }
a8ce111e 1132
a220990f 1133 } //end mass cut
4e61a020 1134
a220990f 1135 } else{ //Background or LS
1136 //if(!fReadMC){
1137 //cout<<"is background"<<endl;
40445ada 1138
a220990f 1139 //no mass cut distributions: mass, ptbis
1140 fillthis="hMassB_";
1141 fillthis+=ptbin;
a8ce111e 1142
a220990f 1143 if (!fCutOnDistr || (fCutOnDistr && (fIsSelectedCandidate==1 || fIsSelectedCandidate==3))) ((TH1F*)listout->FindObject(fillthis))->Fill(minvD0);
1144 if (!fCutOnDistr || (fCutOnDistr && fIsSelectedCandidate>1)) ((TH1F*)listout->FindObject(fillthis))->Fill(minvD0bar);
1145 if(fSys==0){
1146 fillthis="hptB1prongnoMcut_";
1147 fillthis+=ptbin;
40445ada 1148
a220990f 1149 ((TH1F*)listout->FindObject(fillthis))->Fill(((AliAODTrack*)fDaughterTracks.UncheckedAt(0))->Pt());
40445ada 1150
a220990f 1151 fillthis="hptB2prongsnoMcut_";
1152 fillthis+=ptbin;
1153 ((TH1F*)listout->FindObject(fillthis))->Fill(((AliAODTrack*)fDaughterTracks.UncheckedAt(0))->Pt());
818c1271 1154 ((TH1F*)listout->FindObject(fillthis))->Fill(((AliAODTrack*)fDaughterTracks.UncheckedAt(0))->Pt());
a220990f 1155 }
1156 //apply cut on invariant mass on the pair
1157 if(TMath::Abs(minvD0-mPDG)<invmasscut || TMath::Abs(minvD0bar-mPDG)<invmasscut){
1158 if(fSys==0){
818c1271 1159 ptProng[0]=((AliAODTrack*)fDaughterTracks.UncheckedAt(0))->Pt(); ptProng[1]=((AliAODTrack*)fDaughterTracks.UncheckedAt(0))->Pt();
d7688946 1160 cosThetaStarD0 = part->CosThetaStarD0();
1161 cosThetaStarD0bar = part->CosThetaStarD0bar();
a220990f 1162 }
1163
1164 cosPointingAngle = part->CosPointingAngle();
1165 normalizedDecayLength2 = part->NormalizedDecayLength2();
1166 decayLength2 = part->DecayLength2();
1167 decayLengthxy = part->DecayLengthXY();
1168 normalizedDecayLengthxy=decayLengthxy/part->DecayLengthXYError();
1169 d0Prong[0]=part->Getd0Prong(0); d0Prong[1]=part->Getd0Prong(1);
1170
1171
1172 AliAODTrack *prongg=(AliAODTrack*)fDaughterTracks.UncheckedAt(0);
1173 if(!prongg) {
1174 if(fDebug>2) cout<<"No daughter found";
1175 return;
1176 }
1177 else{
1178 if(fArray==1){
1179 if(prongg->Charge()==1) {
1180 //fTotPosPairs[ptbin]++;
600faffe 1181 ((TH1F*)fOutputMass->FindObject("hpospair"))->Fill(ptbin);
a220990f 1182 } else {
1183 //fTotNegPairs[ptbin]++;
600faffe 1184 ((TH1F*)fOutputMass->FindObject("hnegpair"))->Fill(ptbin);
449b1302 1185 }
0108fa62 1186 }
a220990f 1187 }
40445ada 1188
a220990f 1189 fillthis="hd0B_";
1190 fillthis+=ptbin;
1191 ((TH1F*)listout->FindObject(fillthis))->Fill(d0Prong[0]);
1192 ((TH1F*)listout->FindObject(fillthis))->Fill(d0Prong[1]);
0108fa62 1193
a220990f 1194 if(fReadMC){
1195 Int_t pdgMother[2]={0,0};
1196 Double_t factor[2]={1,1};
4e61a020 1197
a220990f 1198 for(Int_t iprong=0;iprong<2;iprong++){
1199 AliAODTrack *prong=(AliAODTrack*)fDaughterTracks.UncheckedAt(iprong);
1200 lab=prong->GetLabel();
1201 if(lab>=0){
1202 AliAODMCParticle* mcprong=(AliAODMCParticle*)arrMC->At(lab);
1203 if(mcprong){
1204 Int_t labmom=mcprong->GetMother();
1205 if(labmom>=0){
1206 AliAODMCParticle* mcmother=(AliAODMCParticle*)arrMC->At(labmom);
1207 if(mcmother) pdgMother[iprong]=mcmother->GetPdgCode();
6b3e3c78 1208 }
1209 }
a220990f 1210 }
6b3e3c78 1211
a220990f 1212 if(fSys==0){
a8ce111e 1213
a220990f 1214 fillthis="hd0moresB_";
1215 fillthis+=ptbin;
6b3e3c78 1216
a220990f 1217 if(TMath::Abs(pdgMother[iprong])==310 || TMath::Abs(pdgMother[iprong])==130 || TMath::Abs(pdgMother[iprong])==321){ //K^0_S, K^0_L, K^+-
1218 if(ptProng[iprong]<=1)factor[iprong]=1./.7;
1219 else factor[iprong]=1./.6;
1220 fNentries->Fill(11);
1221 }
6b3e3c78 1222
a220990f 1223 if(TMath::Abs(pdgMother[iprong])==3122) { //Lambda
1224 factor[iprong]=1./0.25;
1225 fNentries->Fill(12);
1226 }
1227 fillthis="hd0moresB_";
1228 fillthis+=ptbin;
6b3e3c78 1229
a220990f 1230 ((TH1F*)listout->FindObject(fillthis))->Fill(d0Prong[iprong],factor[iprong]);
6b3e3c78 1231
a220990f 1232 if(recalcvtx){
1233 fillthis="hd0vmoresB_";
1234 fillthis+=ptbin;
1235 ((TH1F*)listout->FindObject(fillthis))->Fill(d0[iprong],factor[iprong]);
9af24f46 1236 }
a220990f 1237 }
1238 } //loop on prongs
6b3e3c78 1239
a220990f 1240 if(fSys==0){
6b3e3c78 1241 fillthis="hd0d0moresB_";
1242 fillthis+=ptbin;
1243 ((TH1F*)listout->FindObject(fillthis))->Fill(part->Prodd0d0(),factor[0]*factor[1]);
1244
a8ce111e 1245 fillthis="hcosthetapointmoresB_";
1246 fillthis+=ptbin;
1247 ((TH1F*)listout->FindObject(fillthis))->Fill(cosPointingAngle,factor[0]*factor[1]);
1248
9af24f46 1249 if(recalcvtx){
1250 fillthis="hd0d0vmoresB_";
1251 fillthis+=ptbin;
1252 ((TH1F*)listout->FindObject(fillthis))->Fill(d0[0]*d0[1],factor[0]*factor[1]);
1253 }
a220990f 1254 }
1255 } //readMC
ce39f0ac 1256
a220990f 1257 if(fSys==0){
1258 //normalise pt distr to half afterwards
1259 fillthis="hptB_";
40445ada 1260 fillthis+=ptbin;
a220990f 1261 ((TH1F*)listout->FindObject(fillthis))->Fill(ptProng[0]);
1262 ((TH1F*)listout->FindObject(fillthis))->Fill(ptProng[1]);
34137226 1263
40445ada 1264 fillthis="hcosthetastarB_";
1265 fillthis+=ptbin;
d7688946 1266 if (!fCutOnDistr || (fCutOnDistr && (fIsSelectedCandidate==1 || fIsSelectedCandidate==3)))((TH1F*)listout->FindObject(fillthis))->Fill(cosThetaStarD0);
1267 if (!fCutOnDistr || (fCutOnDistr && fIsSelectedCandidate>1))((TH1F*)listout->FindObject(fillthis))->Fill(cosThetaStarD0bar);
40445ada 1268
a220990f 1269
1270 fillthis="hd0p0B_";
40445ada 1271 fillthis+=ptbin;
a220990f 1272 ((TH1F*)listout->FindObject(fillthis))->Fill(d0Prong[0]);
1273 fillthis="hd0p1B_";
1274 fillthis+=ptbin;
1275 ((TH1F*)listout->FindObject(fillthis))->Fill(d0Prong[1]);
1276
1277 fillthis="hcosthpointd0d0B_";
1278 fillthis+=ptbin;
1279 ((TH2F*)listout->FindObject(fillthis))->Fill(cosPointingAngle,part->Prodd0d0());
1280
1281 fillthis="hcosthpointd0B_";
1282 fillthis+=ptbin;
1283 ((TH1F*)listout->FindObject(fillthis))->Fill(cosPointingAngle,d0Prong[0]);
1284 ((TH1F*)listout->FindObject(fillthis))->Fill(cosPointingAngle,d0Prong[1]);
1285
40445ada 1286
9af24f46 1287 if(recalcvtx){
a220990f 1288
1289 fillthis="hd0vp0B_";
1290 fillthis+=ptbin;
1291 ((TH1F*)listout->FindObject(fillthis))->Fill(d0[0]);
1292 fillthis="hd0vp1B_";
1293 fillthis+=ptbin;
1294 ((TH1F*)listout->FindObject(fillthis))->Fill(d0[1]);
1295
1296 fillthis="hd0vB_";
a2121012 1297 fillthis+=ptbin;
a220990f 1298 ((TH1F*)listout->FindObject(fillthis))->Fill(d0[0]);
1299 ((TH1F*)listout->FindObject(fillthis))->Fill(d0[1]);
1300
a2121012 1301 }
1302
a220990f 1303 }
40445ada 1304
a220990f 1305 fillthis="hdcaB_";
1306 fillthis+=ptbin;
1307 ((TH1F*)listout->FindObject(fillthis))->Fill(part->GetDCA());
a2121012 1308
a220990f 1309 fillthis="hd0d0B_";
1310 fillthis+=ptbin;
1311 ((TH1F*)listout->FindObject(fillthis))->Fill(d0Prong[0]*d0Prong[1]);
a8ce111e 1312
a220990f 1313 if(recalcvtx){
1314 fillthis="hd0d0vB_";
a8ce111e 1315 fillthis+=ptbin;
a220990f 1316 ((TH1F*)listout->FindObject(fillthis))->Fill(d0[0]*d0[1]);
1317 }
a8ce111e 1318
a220990f 1319 fillthis="hcosthetapointB_";
1320 fillthis+=ptbin;
1321 ((TH1F*)listout->FindObject(fillthis))->Fill(cosPointingAngle);
a2121012 1322
a220990f 1323 fillthis="hcosthetapointxyB_";
1324 fillthis+=ptbin;
1325 ((TH1F*)listout->FindObject(fillthis))->Fill(part->CosPointingAngleXY());
9af24f46 1326
a220990f 1327 fillthis="hdeclB_";
1328 fillthis+=ptbin;
1329 ((TH1F*)listout->FindObject(fillthis))->Fill(decayLength2);
a2121012 1330
a220990f 1331 fillthis="hnormdeclB_";
1332 fillthis+=ptbin;
1333 ((TH1F*)listout->FindObject(fillthis))->Fill(normalizedDecayLength2);
9af24f46 1334
a220990f 1335 fillthis="hdeclxyB_";
1336 fillthis+=ptbin;
1337 ((TH1F*)listout->FindObject(fillthis))->Fill(decayLengthxy);
a8ce111e 1338
a220990f 1339 fillthis="hnormdeclxyB_";
1340 fillthis+=ptbin;
1341 ((TH1F*)listout->FindObject(fillthis))->Fill(normalizedDecayLengthxy);
1342
1343 fillthis="hdeclxyd0d0B_";
1344 fillthis+=ptbin;
1345 ((TH2F*)listout->FindObject(fillthis))->Fill(decayLengthxy,d0Prong[0]*d0Prong[1]);
1346
1347 fillthis="hnormdeclxyd0d0B_";
1348 fillthis+=ptbin;
1349 ((TH2F*)listout->FindObject(fillthis))->Fill(normalizedDecayLengthxy,d0Prong[0]*d0Prong[1]);
1350
1351 if(recalcvtx) {
1352
1353 fillthis="hdeclvB_";
1354 fillthis+=ptbin;
1355 ((TH1F*)listout->FindObject(fillthis))->Fill(decl[0]);
1356
1357 fillthis="hnormdeclvB_";
1358 fillthis+=ptbin;
1359 ((TH1F*)listout->FindObject(fillthis))->Fill(decl[1]);
1360
1361
1362 }
1363 }//mass cut
1364 }//else (background)
d7688946 1365
49061176 1366 return;
1367}
ea0d8716 1368//____________________________________________________________________________
1369
d7688946 1370void AliAnalysisTaskSED0Mass::FillMassHists(AliAODRecoDecayHF2Prong *part, TClonesArray *arrMC, AliRDHFCutsD0toKpi* cuts, TList *listout){
49061176 1371 //
40445ada 1372 // function used in UserExec to fill mass histograms:
49061176 1373 //
9de8c723 1374
1375
a8ce111e 1376 Double_t mPDG=TDatabasePDG::Instance()->GetParticle(421)->Mass();
9de8c723 1377
d7688946 1378 //cout<<"is selected = "<<fIsSelectedCandidate<<endl;
feb73eca 1379
ea0d8716 1380 //cout<<"check cuts = "<<endl;
1381 //cuts->PrintAll();
d7688946 1382 if (!fIsSelectedCandidate){
ea0d8716 1383 //cout<<"Not Selected"<<endl;
6b3e3c78 1384 //cout<<"Rejected because "<<cuts->GetWhy()<<endl;
ea0d8716 1385 return;
1386 }
9de8c723 1387
6b3e3c78 1388
4e61a020 1389 if(fDebug>2) cout<<"Candidate selected"<<endl;
a41f6fad 1390
ea0d8716 1391 Double_t invmassD0 = part->InvMassD0(), invmassD0bar = part->InvMassD0bar();
1392 //printf("SELECTED\n");
1393 Int_t ptbin=cuts->PtBin(part->Pt());
9de8c723 1394
818c1271 1395 // AliAODTrack *prong=(AliAODTrack*)fDaughterTracks.UncheckedAt(0);
1396 // if(!prong) {
1397 // AliDebug(2,"No daughter found");
1398 // return;
1399 // }
1400 // else{
a8ce111e 1401 // if(prong->Charge()==1) {
1402 // ((TH1F*)fDistr->FindObject("hpospair"))->Fill(fCuts->GetNPtBins()+ptbin);
1403 // //fTotPosPairs[ptbin]++;
1404 // } else {
1405 // ((TH1F*)fDistr->FindObject("hnegpair"))->Fill(fCuts->GetNPtBins()+ptbin);
1406 // //fTotNegPairs[ptbin]++;
1407 // }
818c1271 1408 // }
700e80e0 1409
9af24f46 1410 // for(Int_t it=0;it<2;it++){
1411
1412 // //request on spd points to be addes
1413 // if(/*nSPD==2 && */part->Pt() > 5. && (TMath::Abs(invmassD0-mPDG)<0.01 || TMath::Abs(invmassD0bar-mPDG)<0.01)){
1414 // FILE *f=fopen("4display.txt","a");
1415 // fprintf(f,"pt: %f \n Rapidity: %f \t Period Number: %x \t Run Number: %d \t BunchCrossNumb: %d \t OrbitNumber: %d\n",part->Pt(),part->Y(421),aod->GetPeriodNumber(),aod->GetRunNumber(),aod->GetBunchCrossNumber(),aod->GetOrbitNumber());
1416 // fclose(f);
1417 // //printf("PrimVtx NContributors: %d \n Prongs Rel Angle: %f \n \n",ncont,relangle);
1418 // }
1419 // }
6b3e3c78 1420
ea0d8716 1421 TString fillthis="";
1422 Int_t pdgDgD0toKpi[2]={321,211};
1423 Int_t labD0=-1;
1424 if (fReadMC) labD0 = part->MatchToMC(421,arrMC,2,pdgDgD0toKpi); //return MC particle label if the array corresponds to a D0, -1 if not (cf. AliAODRecoDecay.cxx)
1425
1426 //count candidates selected by cuts
1427 fNentries->Fill(1);
1428 //count true D0 selected by cuts
1429 if (fReadMC && labD0>=0) fNentries->Fill(2);
ea0d8716 1430
d7688946 1431 if ((fIsSelectedCandidate==1 || fIsSelectedCandidate==3) && fFillOnlyD0D0bar<2) { //D0
a220990f 1432 if(fReadMC){
1433 if(labD0>=0) {
1434 if(fArray==1) cout<<"LS signal ERROR"<<endl;
1435
1436 AliAODMCParticle *partD0 = (AliAODMCParticle*)arrMC->At(labD0);
1437 Int_t pdgD0 = partD0->GetPdgCode();
2b35ac47 1438 // cout<<"pdg = "<<pdgD0<<endl;
a220990f 1439 if (pdgD0==421){ //D0
2b35ac47 1440 // cout<<"Fill S with D0"<<endl;
a220990f 1441 fillthis="histSgn_";
1442 fillthis+=ptbin;
1443 ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassD0);
1444 if(fSys==0){
2b35ac47 1445 if(TMath::Abs(invmassD0 - mPDG) < 0.027 && fFillVarHists){
a220990f 1446 fillthis="histSgn27_";
1447 fillthis+=ptbin;
1448 ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassD0);
1449 }
1450 }
1451 } else{ //it was a D0bar
1452 fillthis="histRfl_";
a8ce111e 1453 fillthis+=ptbin;
1454 ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassD0);
1455 }
a220990f 1456 } else {//background
1457 fillthis="histBkg_";
a4ae02cd 1458 fillthis+=ptbin;
1459 ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassD0);
1460 }
a220990f 1461
1462 }else{
1463 fillthis="histMass_";
a4ae02cd 1464 fillthis+=ptbin;
2b35ac47 1465 // cout<<"Filling "<<fillthis<<endl;
a220990f 1466
2b35ac47 1467 // printf("Fill mass with D0");
ea0d8716 1468 ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassD0);
1469 }
a220990f 1470
ea0d8716 1471 }
d7688946 1472 if (fIsSelectedCandidate>1 && (fFillOnlyD0D0bar==0 || fFillOnlyD0D0bar==2)) { //D0bar
a220990f 1473 if(fReadMC){
1474 if(labD0>=0) {
1475 if(fArray==1) cout<<"LS signal ERROR"<<endl;
1476 AliAODMCParticle *partD0 = (AliAODMCParticle*)arrMC->At(labD0);
1477 Int_t pdgD0 = partD0->GetPdgCode();
2b35ac47 1478 // cout<<" pdg = "<<pdgD0<<endl;
a220990f 1479 if (pdgD0==-421){ //D0bar
1480 fillthis="histSgn_";
1481 fillthis+=ptbin;
1482 ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassD0bar);
1483 // if (TMath::Abs(invmassD0bar - mPDG) < 0.027){
1484 // fillthis="histSgn27_";
1485 // fillthis+=ptbin;
1486 // ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassD0bar);
1487 // }
9de8c723 1488
a4ae02cd 1489
a220990f 1490 } else{
1491 fillthis="histRfl_";
1492 fillthis+=ptbin;
1493 ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassD0bar);
1494 }
1495 } else {//background or LS
1496 fillthis="histBkg_";
a4ae02cd 1497 fillthis+=ptbin;
1498 ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassD0bar);
1499 }
a220990f 1500 }else{
1501 fillthis="histMass_";
ea0d8716 1502 fillthis+=ptbin;
2b35ac47 1503 // printf("Fill mass with D0bar");
a220990f 1504 ((TH1F*)listout->FindObject(fillthis))->Fill(invmassD0bar);
1505
a4ae02cd 1506 }
ea0d8716 1507 }
a4ae02cd 1508
40445ada 1509 return;
49061176 1510}
4e61a020 1511
1512//__________________________________________________________________________
d7688946 1513AliAODVertex* AliAnalysisTaskSED0Mass::GetPrimaryVtxSkipped(AliAODEvent *aodev){
4e61a020 1514 //Calculate the primary vertex w/o the daughter tracks of the candidate
1515
4e61a020 1516 Int_t skipped[2];
1517 Int_t nTrksToSkip=2;
d7688946 1518 AliAODTrack *dgTrack = (AliAODTrack*)fDaughterTracks.UncheckedAt(0);
4e61a020 1519 if(!dgTrack){
1520 AliDebug(2,"no daughter found!");
1521 return 0x0;
1522 }
1523 skipped[0]=dgTrack->GetID();
d7688946 1524 dgTrack = (AliAODTrack*)fDaughterTracks.UncheckedAt(1);
4e61a020 1525 if(!dgTrack){
1526 AliDebug(2,"no daughter found!");
1527 return 0x0;
1528 }
1529 skipped[1]=dgTrack->GetID();
1530
6b3e3c78 1531 AliESDVertex *vertexESD=0x0;
1532 AliAODVertex *vertexAOD=0x0;
1533 AliVertexerTracks *vertexer = new AliVertexerTracks(aodev->GetMagneticField());
1534
4e61a020 1535 //
1536 vertexer->SetSkipTracks(nTrksToSkip,skipped);
4e61a020 1537 vertexer->SetMinClusters(4);
a2121012 1538 vertexESD = (AliESDVertex*)vertexer->FindPrimaryVertex(aodev);
4e61a020 1539 if(!vertexESD) return vertexAOD;
1540 if(vertexESD->GetNContributors()<=0) {
1541 AliDebug(2,"vertexing failed");
1542 delete vertexESD; vertexESD=NULL;
1543 return vertexAOD;
1544 }
1545
1546 delete vertexer; vertexer=NULL;
1547
1548
1549 // convert to AliAODVertex
1550 Double_t pos[3],cov[6],chi2perNDF;
1551 vertexESD->GetXYZ(pos); // position
1552 vertexESD->GetCovMatrix(cov); //covariance matrix
1553 chi2perNDF = vertexESD->GetChi2toNDF();
1554 delete vertexESD; vertexESD=NULL;
1555
1556 vertexAOD = new AliAODVertex(pos,cov,chi2perNDF);
1557 return vertexAOD;
1558
1559}
1560
1561
49061176 1562//________________________________________________________________________
1563void AliAnalysisTaskSED0Mass::Terminate(Option_t */*option*/)
1564{
1565 // Terminate analysis
1566 //
1567 if(fDebug > 1) printf("AnalysisTaskSED0Mass: Terminate() \n");
1568
6321ee46 1569
ea0d8716 1570 fOutputMass = dynamic_cast<TList*> (GetOutputData(1));
1571 if (!fOutputMass) {
1572 printf("ERROR: fOutputMass not available\n");
a4ae02cd 1573 return;
1574 }
a8ce111e 1575 if(fFillVarHists){
1576 fDistr = dynamic_cast<TList*> (GetOutputData(2));
1577 if (!fDistr) {
1578 printf("ERROR: fDistr not available\n");
1579 return;
1580 }
a41f6fad 1581 }
a8ce111e 1582
40445ada 1583 fNentries = dynamic_cast<TH1F*>(GetOutputData(3));
5b2e5fae 1584
40445ada 1585 if(!fNentries){
1586 printf("ERROR: fNEntries not available\n");
1587 return;
1588 }
700e80e0 1589 fCuts = dynamic_cast<AliRDHFCutsD0toKpi*>(GetOutputData(4));
1590 if(!fCuts){
1591 printf("ERROR: fCuts not available\n");
34137226 1592 return;
1593 }
700e80e0 1594 fCounter = dynamic_cast<AliNormalizationCounter*>(GetOutputData(5));
a96083b9 1595 if (!fCounter) {
1596 printf("ERROR: fCounter not available\n");
1597 return;
1598 }
700e80e0 1599 Int_t nptbins=fCuts->GetNPtBins();
1600 for(Int_t ipt=0;ipt<nptbins;ipt++){
4e61a020 1601
a8ce111e 1602 if(fArray==1 && fFillVarHists){
84f75f2e 1603 fLsNormalization = 2.*TMath::Sqrt(((TH1F*)fOutputMass->FindObject("hpospair"))->Integral(nptbins+ipt+1,nptbins+ipt+2)*((TH1F*)fOutputMass->FindObject("hnegpair"))->Integral(nptbins+ipt+1,nptbins+ipt+2)); //after cuts
feb73eca 1604
1605
ea0d8716 1606 if(fLsNormalization>1e-6) {
9de8c723 1607
feb73eca 1608 TString massName="histMass_";
ea0d8716 1609 massName+=ipt;
1610 ((TH1F*)fOutputMass->FindObject(massName))->Scale((1/fLsNormalization)*((TH1F*)fOutputMass->FindObject(massName))->GetEntries());
1611
feb73eca 1612 }
40445ada 1613
feb73eca 1614
84f75f2e 1615 fLsNormalization = 2.*TMath::Sqrt(((TH1F*)fOutputMass->FindObject("hpospair"))->Integral(ipt+1,ipt+2)*((TH1F*)fOutputMass->FindObject("hnegpair"))->Integral(ipt+1,ipt+2));
700e80e0 1616 //fLsNormalization = 2.*TMath::Sqrt(fTotPosPairs[4]*fTotNegPairs[4]);
40445ada 1617
ea0d8716 1618 if(fLsNormalization>1e-6) {
40445ada 1619
1620 TString nameDistr="hptB_";
ea0d8716 1621 nameDistr+=ipt;
40445ada 1622 ((TH1F*)fDistr->FindObject(nameDistr))->Scale((1/fLsNormalization)*((TH1F*)fDistr->FindObject(nameDistr))->GetEntries());
1623 nameDistr="hdcaB_";
ea0d8716 1624 nameDistr+=ipt;
40445ada 1625 ((TH1F*)fDistr->FindObject(nameDistr))->Scale((1/fLsNormalization)*((TH1F*)fDistr->FindObject(nameDistr))->GetEntries());
1626 nameDistr="hcosthetastarB_";
ea0d8716 1627 nameDistr+=ipt;
40445ada 1628 ((TH1F*)fDistr->FindObject(nameDistr))->Scale((1/fLsNormalization)*((TH1F*)fDistr->FindObject(nameDistr))->GetEntries());
1629 nameDistr="hd0B_";
ea0d8716 1630 nameDistr+=ipt;
40445ada 1631 ((TH1F*)fDistr->FindObject(nameDistr))->Scale((1/fLsNormalization)*((TH1F*)fDistr->FindObject(nameDistr))->GetEntries());
1632 nameDistr="hd0d0B_";
ea0d8716 1633 nameDistr+=ipt;
40445ada 1634 ((TH1F*)fDistr->FindObject(nameDistr))->Scale((1/fLsNormalization)*((TH1F*)fDistr->FindObject(nameDistr))->GetEntries());
1635 nameDistr="hcosthetapointB_";
ea0d8716 1636 nameDistr+=ipt;
40445ada 1637 ((TH1F*)fDistr->FindObject(nameDistr))->Scale((1/fLsNormalization)*((TH1F*)fDistr->FindObject(nameDistr))->GetEntries());
a220990f 1638 if(fSys==0){
1639 nameDistr="hcosthpointd0d0B_";
1640 nameDistr+=ipt;
1641 ((TH2F*)fDistr->FindObject(nameDistr))->Scale((1/fLsNormalization)*((TH2F*)fDistr->FindObject(nameDistr))->GetEntries());
1642 }
40445ada 1643 }
feb73eca 1644 }
1645 }
4e61a020 1646 TString cvname,cstname;
527f330b 1647
1648 if (fArray==0){
1649 cvname="D0invmass";
4e61a020 1650 cstname="cstat0";
1651 } else {
1652 cvname="LSinvmass";
1653 cstname="cstat1";
1654 }
527f330b 1655
34137226 1656 TCanvas *cMass=new TCanvas(cvname,cvname);
1657 cMass->cd();
ea0d8716 1658 ((TH1F*)fOutputMass->FindObject("histMass_3"))->Draw();
527f330b 1659
4e61a020 1660 TCanvas* cStat=new TCanvas(cstname,Form("Stat%s",fArray ? "LS" : "D0"));
34137226 1661 cStat->cd();
1662 cStat->SetGridy();
1663 fNentries->Draw("htext0");
527f330b 1664
4e61a020 1665 // TCanvas *ccheck=new TCanvas(Form("cc%d",fArray),Form("cc%d",fArray));
1666 // ccheck->cd();
1667
49061176 1668 return;
1669}
1670