]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG3/vertexingHF/AliAnalysisTaskSEDStarSpectra.cxx
fix to the proper NSD
[u/mrichter/AliRoot.git] / PWG3 / vertexingHF / AliAnalysisTaskSEDStarSpectra.cxx
CommitLineData
645e004b 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 *
dfb051fd 11 * appeuear in the supporting documentation. The authors make no claims *
645e004b 12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
27de2dfb 15
16/* $Id$ */
17
645e004b 18//
19//
20// Base class for DStar Analysis
21//
645e004b 22//
645e004b 23// The D* spectra study is done in pt bins:
dfb051fd 24// [0.7,1] [1,2] [2,3] [3,5] [5,8] [8,12],[12,18]
645e004b 25//
46f6e464 26// Optimized cuts used and TPC PID is on request (flag in che .C)
27// Cuts option of analysis: 0 Heidelberg ; 1 Utrecht
28// Side Band and like sign background are implemented in the macro
29//
645e004b 30//-----------------------------------------------------------------------
31//
32// Author A.Grelli
46f6e464 33// ERC-QGP Utrecht University - a.grelli@uu.nl,
34// Author Y.Wang
35// University of Heidelberg - yifei@physi.uni-heidelberg.de
36// Author C.Ivan
37// ERC-QGP Utrecht University - c.ivan@uu.nl,
645e004b 38//
39//-----------------------------------------------------------------------
40
41#include <TSystem.h>
42#include <TParticle.h>
43#include <TH1I.h>
44#include "TROOT.h"
45
dfb051fd 46
47#include <AliAnalysisDataSlot.h>
48#include <AliAnalysisDataContainer.h>
49#include "AliRDHFCutsDStartoKpipi.h"
645e004b 50#include "AliPID.h"
51#include "AliTPCPIDResponse.h"
46f6e464 52//#include "AliAODPidHF.h"
645e004b 53#include "AliStack.h"
54#include "AliMCEvent.h"
55#include "AliAnalysisManager.h"
56#include "AliAODMCHeader.h"
57#include "AliAODHandler.h"
58#include "AliLog.h"
59#include "AliAODVertex.h"
dfb051fd 60//#include "AliAODJet.h"
645e004b 61#include "AliAODRecoDecay.h"
62#include "AliAODRecoDecayHF.h"
63#include "AliAODRecoCascadeHF.h"
64#include "AliAODRecoDecayHF2Prong.h"
65#include "AliAnalysisVertexingHF.h"
66#include "AliESDtrack.h"
dfb051fd 67//#include "AliVertexerTracks.h"
645e004b 68#include "AliAODMCParticle.h"
dfb051fd 69#include "AliAnalysisTaskSE.h"
645e004b 70#include "AliAnalysisTaskSEDStarSpectra.h"
71
72ClassImp(AliAnalysisTaskSEDStarSpectra)
73
48815220 74
75// I like pink
76
645e004b 77//__________________________________________________________________________
78AliAnalysisTaskSEDStarSpectra::AliAnalysisTaskSEDStarSpectra():
79 AliAnalysisTaskSE(),
80 fEvents(0),
46f6e464 81 fAnalysis(0),
46f6e464 82 fD0Window(0),
83 fPeakWindow(0),
dfb051fd 84 fUseMCInfo(kFALSE),
645e004b 85 fOutput(0),
46f6e464 86 fOutputSpectrum(0),
87 fOutputAll(0),
88 fOutputPID3(0),
89 fOutputPID2(0),
90 fOutputPID1(0),
645e004b 91 fNSigma(3),
92 fPID(kTRUE),
dfb051fd 93 fCuts(0),
645e004b 94 fCEvents(0),
46f6e464 95 fTrueDiff2(0)
645e004b 96{
97 //
98 // Default ctor
99 //
100}
101//___________________________________________________________________________
dfb051fd 102AliAnalysisTaskSEDStarSpectra::AliAnalysisTaskSEDStarSpectra(const Char_t* name, AliRDHFCutsDStartoKpipi* cuts) :
645e004b 103 AliAnalysisTaskSE(name),
104 fEvents(0),
46f6e464 105 fAnalysis(0),
46f6e464 106 fD0Window(0),
107 fPeakWindow(0),
dfb051fd 108 fUseMCInfo(kFALSE),
645e004b 109 fOutput(0),
46f6e464 110 fOutputSpectrum(0),
111 fOutputAll(0),
112 fOutputPID3(0),
113 fOutputPID2(0),
114 fOutputPID1(0),
645e004b 115 fNSigma(3),
116 fPID(kTRUE),
dfb051fd 117 fCuts(0),
645e004b 118 fCEvents(0),
46f6e464 119 fTrueDiff2(0)
645e004b 120{
121 //
122 // Constructor. Initialization of Inputs and Outputs
123 //
124 Info("AliAnalysisTaskSEDStarSpectra","Calling Constructor");
645e004b 125
dfb051fd 126 fCuts=cuts;
127
128 DefineOutput(1,TList::Class()); //conters
129 DefineOutput(2,TList::Class()); //Spectrum output
130 DefineOutput(3,TList::Class()); //All Entries output
131 DefineOutput(4,TList::Class()); //3sigma PID output
132 DefineOutput(5,TList::Class()); //2sigma PID output
133 DefineOutput(6,TList::Class()); //1sigma PID output
134 DefineOutput(7,AliRDHFCutsDStartoKpipi::Class()); //My private output
645e004b 135
645e004b 136}
137
138//___________________________________________________________________________
139AliAnalysisTaskSEDStarSpectra::~AliAnalysisTaskSEDStarSpectra() {
140 //
141 // destructor
142 //
143 Info("~AliAnalysisTaskSEDStarSpectra","Calling Destructor");
144
145 if (fOutput) {
146 delete fOutput;
147 fOutput = 0;
148 }
46f6e464 149 if (fOutputSpectrum) {
150 delete fOutputSpectrum;
151 fOutputSpectrum = 0;
152 }
153 if (fOutputAll) {
154 delete fOutputAll;
155 fOutputAll = 0;
156 }
157 if (fOutputPID3) {
158 delete fOutputPID3;
159 fOutputPID3 = 0;
160 }
161 if (fOutputPID2) {
162 delete fOutputPID2;
163 fOutputPID2 = 0;
164 }
165 if (fOutputPID1) {
166 delete fOutputPID1;
167 fOutputPID1 = 0;
168 }
dfb051fd 169 if (fCuts) {
170 delete fCuts;
171 fCuts = 0;
172 }
173 if(fCEvents){
174 delete fCEvents;
175 fCEvents =0;
46f6e464 176 }
645e004b 177}
178//_________________________________________________
179void AliAnalysisTaskSEDStarSpectra::Init(){
180 //
181 // Initialization
182 //
183
184 if(fDebug > 1) printf("AnalysisTaskSEDStarSpectra::Init() \n");
dfb051fd 185 AliRDHFCutsDStartoKpipi* copyfCuts=new AliRDHFCutsDStartoKpipi(*fCuts);
186 // Post the data
187 PostData(7,copyfCuts);
645e004b 188
189 return;
190}
191
192//_________________________________________________
193void AliAnalysisTaskSEDStarSpectra::UserExec(Option_t *)
194{
195 // user exec
196 if (!fInputEvent) {
197 Error("UserExec","NO EVENT FOUND!");
198 return;
199 }
200
645e004b 201 AliAODEvent* aodEvent = dynamic_cast<AliAODEvent*>(fInputEvent);
202 TClonesArray *arrayDStartoD0pi=0;
dfb051fd 203
645e004b 204 if(!aodEvent && AODEvent() && IsStandardAOD()) {
205 // In case there is an AOD handler writing a standard AOD, use the AOD
206 // event in memory rather than the input (ESD) event.
207 aodEvent = dynamic_cast<AliAODEvent*> (AODEvent());
208 // in this case the braches in the deltaAOD (AliAOD.VertexingHF.root)
209 // have to taken from the AOD event hold by the AliAODExtension
210 AliAODHandler* aodHandler = (AliAODHandler*)
211 ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
212 if(aodHandler->GetExtensions()) {
213 AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject("AliAOD.VertexingHF.root");
214 AliAODEvent *aodFromExt = ext->GetAOD();
215 arrayDStartoD0pi=(TClonesArray*)aodFromExt->GetList()->FindObject("Dstar");
216 }
217 } else {
218 arrayDStartoD0pi=(TClonesArray*)aodEvent->GetList()->FindObject("Dstar");
219 }
7c23877d 220
221
222 // fix for temporary bug in ESDfilter
223 // the AODs with null vertex pointer didn't pass the PhysSel
5806c290 224 if(!aodEvent->GetPrimaryVertex() || TMath::Abs(aodEvent->GetMagneticField())<0.001) return;
645e004b 225
7c23877d 226
227 fCEvents->Fill(1);
228 // Load the event
229 fEvents++;
230 AliInfo(Form("Event %d",fEvents));
231 if (fEvents%10000 ==0) AliInfo(Form("Event %d",fEvents));
232
645e004b 233 // counters for efficiencies
234 Int_t icountReco = 0;
235
236 //D* and D0 prongs needed to MatchToMC method
237 Int_t pdgDgDStartoD0pi[2]={421,211};
238 Int_t pdgDgD0toKpi[2]={321,211};
dfb051fd 239
240 // AOD primary vertex
241 AliAODVertex *vtx1 = (AliAODVertex*)aodEvent->GetPrimaryVertex();
242 if(!vtx1) return;
243 if(vtx1->GetNContributors()<1) return;
244
645e004b 245 if (!arrayDStartoD0pi){
246 AliInfo("Could not find array of HF vertices, skipping the event");
247 return;
248 }else AliDebug(2, Form("Found %d vertices",arrayDStartoD0pi->GetEntriesFast()));
dfb051fd 249
645e004b 250 // loop over the tracks to search for candidates soft pion
251
252 for (Int_t iDStartoD0pi = 0; iDStartoD0pi<arrayDStartoD0pi->GetEntriesFast(); iDStartoD0pi++) {
dfb051fd 253
254 // D* candidates and D0 from D*
645e004b 255 AliAODRecoCascadeHF* dstarD0pi = (AliAODRecoCascadeHF*)arrayDStartoD0pi->At(iDStartoD0pi);
f2667483 256 if(!dstarD0pi->GetSecondaryVtx()) continue;
645e004b 257 AliAODRecoDecayHF2Prong* theD0particle = (AliAODRecoDecayHF2Prong*)dstarD0pi->Get2Prong();
dfb051fd 258 if (!theD0particle) continue;
48815220 259
46f6e464 260 Int_t isDStar = 0;
48815220 261
262 TClonesArray *mcArray = 0; // fix coverity
263
645e004b 264 // mc analysis
265 if(fUseMCInfo){
266 //MC array need for maching
48815220 267 mcArray = dynamic_cast<TClonesArray*>(aodEvent->FindListObject(AliAODMCParticle::StdBranchName()));
86df816f 268 if (!mcArray) {
269 AliError("Could not find Monte-Carlo in AOD");
270 return;
271 }
645e004b 272 // find associated MC particle for D* ->D0toKpi
273 Int_t mcLabel = dstarD0pi->MatchToMC(413,421,pdgDgDStartoD0pi,pdgDgD0toKpi,mcArray);
274 if(mcLabel>=0) isDStar = 1;
275 }
276
dfb051fd 277 // soft pion candidate
645e004b 278 AliAODTrack *track2 = (AliAODTrack*)dstarD0pi->GetBachelor();
645e004b 279
280 Double_t pt = dstarD0pi->Pt();
dfb051fd 281 Int_t isTkSelected = fCuts->IsSelected(dstarD0pi,AliRDHFCuts::kTracks); // quality cuts on tracks
282 if(!isTkSelected) continue;
645e004b 283
dfb051fd 284 // cut in acceptance for the soft pion and for the D0 daughters - TO BE REMOVED ONCE WILL BE IN THE CUTTING CLASS
285 Bool_t okTracks = SingleTrackSelections(theD0particle, track2);
46f6e464 286 if (!okTracks) continue;
dfb051fd 287
288 Int_t ptbin=fCuts->PtBin(dstarD0pi->Pt());
289
290 // set the D0 search window bin by bin
291 if (ptbin==0){
292 if(fAnalysis==1){
293 fD0Window=0.015;
294 fPeakWindow=0.0018;
295 }else{
296 fD0Window=0.020;
297 fPeakWindow=0.0018;
298 }
299 }
300 if (ptbin==1){
301 if(fAnalysis==1){
302 fD0Window=0.015;
303 fPeakWindow=0.0018;
304 }else{
305 fD0Window=0.020;
306 fPeakWindow=0.0018;
307 }
308 }
309 if (ptbin==2){
310 if(fAnalysis==1){
311 fD0Window=0.018;
312 fPeakWindow=0.0018;
313 }else{
314 fD0Window=0.020;
315 fPeakWindow=0.0018;
316 }
317 }
318 if (ptbin==3){
319 if(fAnalysis==1){
320 fD0Window=0.036;
321 fPeakWindow=0.0018;
322 }else{
323 fD0Window=0.022;
324 fPeakWindow=0.0016;
325 }
326 }
327 if (ptbin==4){
328 if(fAnalysis==1){
329 fD0Window=0.036;
330 fPeakWindow=0.0016;
331 }else{
332 fD0Window=0.026;
333 fPeakWindow=0.0014;
334 }
335 }
336 if (ptbin>=5){
337 if(fAnalysis==1){
338 fD0Window=0.062;
339 fPeakWindow=0.0014;
340 }else{
341 fD0Window=0.026;
342 fPeakWindow=0.0014;
343 }
344 }
345
346 FillSpectrum(dstarD0pi,isDStar,1,3,fCuts,fOutputPID3);
347 FillSpectrum(dstarD0pi,isDStar,1,2,fCuts,fOutputPID2);
348 FillSpectrum(dstarD0pi,isDStar,1,1,fCuts,fOutputPID1);
349 FillSpectrum(dstarD0pi,isDStar,fPID,fNSigma,fCuts,fOutputSpectrum);
350 //FillSpectrum(dstarD0pi,isDStar,0,0,fCuts,fOutputAll);
351
352 SideBandBackground(dstarD0pi,1,3,fCuts,fOutputPID3);
353 SideBandBackground(dstarD0pi,1,2,fCuts,fOutputPID2);
354 SideBandBackground(dstarD0pi,1,1,fCuts,fOutputPID1);
355 SideBandBackground(dstarD0pi,fPID,fNSigma,fCuts,fOutputSpectrum);
356 //SideBandBackground(dstarD0pi,0,0,fCuts,fOutputAll);
357
358 WrongSignForDStar(dstarD0pi,1,3,fCuts,fOutputPID3);
359 WrongSignForDStar(dstarD0pi,1,2,fCuts,fOutputPID2);
360 WrongSignForDStar(dstarD0pi,1,1,fCuts,fOutputPID1);
361 WrongSignForDStar(dstarD0pi,fPID,fNSigma,fCuts,fOutputSpectrum);
362 //WrongSignForDStar(dstarD0pi,0,0,fCuts,fOutputAll);
46f6e464 363
364 if(isDStar == 1) {
365 fTrueDiff2->Fill(pt,dstarD0pi->DeltaInvMass());
645e004b 366 }
46f6e464 367
645e004b 368 }
369
370 AliDebug(2, Form("Found %i Reco particles that are D*!!",icountReco));
371
372 PostData(1,fOutput);
46f6e464 373 PostData(2,fOutputSpectrum);
374 PostData(3,fOutputAll);
375 PostData(4,fOutputPID3);
376 PostData(5,fOutputPID2);
377 PostData(6,fOutputPID1);
378
379
645e004b 380}
381//________________________________________ terminate ___________________________
382void AliAnalysisTaskSEDStarSpectra::Terminate(Option_t*)
383{
384 // The Terminate() function is the last function to be called during
385 // a query. It always runs on the client, it can be used to present
386 // the results graphically or save the results to file.
387
dd9a1906 388 //Info("Terminate","");
645e004b 389 AliAnalysisTaskSE::Terminate();
390
391 fOutput = dynamic_cast<TList*> (GetOutputData(1));
392 if (!fOutput) {
393 printf("ERROR: fOutput not available\n");
394 return;
395 }
396
645e004b 397 fCEvents = dynamic_cast<TH1F*>(fOutput->FindObject("fCEvents"));
645e004b 398 fTrueDiff2 = dynamic_cast<TH2F*>(fOutput->FindObject("fTrueDiff2"));
46f6e464 399
400 fOutputSpectrum = dynamic_cast<TList*> (GetOutputData(2));
401 if (!fOutputSpectrum) {
402 printf("ERROR: fOutputSpectrum not available\n");
403 return;
404 }
405 fOutputAll = dynamic_cast<TList*> (GetOutputData(3));
406 if (!fOutputAll) {
407 printf("ERROR: fOutputAll not available\n");
408 return;
409 }
410 fOutputPID3 = dynamic_cast<TList*> (GetOutputData(4));
411 if (!fOutputPID3) {
412 printf("ERROR: fOutputPID3 not available\n");
413 return;
414 }
415 fOutputPID2 = dynamic_cast<TList*> (GetOutputData(5));
416 if (!fOutputPID2) {
417 printf("ERROR: fOutputPID2 not available\n");
418 return;
419 }
420 fOutputPID1 = dynamic_cast<TList*> (GetOutputData(6));
421 if (!fOutputPID1) {
422 printf("ERROR: fOutputPID1 not available\n");
423 return;
424 }
645e004b 425
dfb051fd 426 return;
645e004b 427}
428//___________________________________________________________________________
429void AliAnalysisTaskSEDStarSpectra::UserCreateOutputObjects() {
430 // output
431 Info("UserCreateOutputObjects","CreateOutputObjects of task %s\n", GetName());
432
433 //slot #1
dfb051fd 434 //OpenFile(1);
645e004b 435 fOutput = new TList();
436 fOutput->SetOwner();
dfb051fd 437 fOutput->SetName("chist0");
438
46f6e464 439
440 fOutputSpectrum = new TList();
441 fOutputSpectrum->SetOwner();
442 fOutputSpectrum->SetName("listSpectrum");
443
444 fOutputPID3 = new TList();
445 fOutputPID3->SetOwner();
446 fOutputPID3->SetName("listPID3");
447
448 fOutputPID2 = new TList();
449 fOutputPID2->SetOwner();
450 fOutputPID2->SetName("listPID2");
451
452 fOutputPID1 = new TList();
453 fOutputPID1->SetOwner();
454 fOutputPID1->SetName("listPID1");
455
456 fOutputAll = new TList();
457 fOutputAll->SetOwner();
458 fOutputAll->SetName("listAll");
459
645e004b 460 // define histograms
46f6e464 461 DefineHistograms();
dfb051fd 462
463 PostData(1,fOutput);
464 PostData(2,fOutputSpectrum);
465 PostData(3,fOutputAll);
466 PostData(4,fOutputPID3);
467 PostData(5,fOutputPID2);
468 PostData(6,fOutputPID1);
469
645e004b 470 return;
471}
645e004b 472//___________________________________ hiostograms _______________________________________
46f6e464 473void AliAnalysisTaskSEDStarSpectra::DefineHistograms(){
645e004b 474
475 fCEvents = new TH1F("fCEvents","conter",10,0,10);
476 fCEvents->SetStats(kTRUE);
477 fCEvents->GetXaxis()->SetTitle("1");
478 fCEvents->GetYaxis()->SetTitle("counts");
645e004b 479 fOutput->Add(fCEvents);
480
46f6e464 481 fTrueDiff2 = new TH2F("DiffDstar_pt","True Reco diff vs pt",200,0,15,900,0,0.3);
482 fOutput->Add(fTrueDiff2);
645e004b 483
f782bfba 484 const Int_t nhist=9;
46f6e464 485 TString nameMass=" ", nameSgn=" ", nameBkg=" ";
486
dfb051fd 487 for(Int_t i=-2;i<nhist;i++){
46f6e464 488 nameMass="histDeltaMass_";
489 nameMass+=i+1;
490 nameSgn="histDeltaSgn_";
491 nameSgn+=i+1;
492 nameBkg="histDeltaBkg_";
493 nameBkg+=i+1;
dfb051fd 494
495 if (i==-2) {
46f6e464 496 nameMass="histDeltaMass";
497 nameSgn="histDeltaSgn";
498 nameBkg="histDeltaBkg";
499 }
500
501 TH1F* spectrumMass = new TH1F(nameMass.Data(),"D^{*}-D^{0} invariant mass; #DeltaM [GeV/c^{2}]; Entries",200,0.1,0.2);
502 TH1F* spectrumSgn = new TH1F(nameSgn.Data(), "D^{*}-D^{0} Signal invariant mass - MC; #DeltaM [GeV/c^{2}]; Entries",200,0.1,0.2);
503 TH1F* spectrumBkg = new TH1F(nameBkg.Data(), "D^{*}-D^{0} Background invariant mass - MC; #DeltaM [GeV/c^{2}]; Entries",200,0.1,0.2);
dfb051fd 504
46f6e464 505 nameMass="histD0Mass_";
506 nameMass+=i+1;
507 nameSgn="histD0Sgn_";
508 nameSgn+=i+1;
509 nameBkg="histD0Bkg_";
510 nameBkg+=i+1;
dfb051fd 511
512 if (i==-2) {
46f6e464 513 nameMass="histD0Mass";
514 nameSgn="histD0Sgn";
515 nameBkg="histD0Bkg";
516 }
645e004b 517
46f6e464 518 TH1F* spectrumD0Mass = new TH1F(nameMass.Data(),"D^{0} invariant mass; M(D^{0}) [GeV/c^{2}]; Entries",200,1.75,1.95);
519 TH1F* spectrumD0Sgn = new TH1F(nameSgn.Data(), "D^{0} Signal invariant mass - MC; M(D^{0}) [GeV/c^{2}]; Entries",200,1.75,1.95);
520 TH1F* spectrumD0Bkg = new TH1F(nameBkg.Data(), "D^{0} Background invariant mass - MC; M(D^{0}) [GeV/c^{2}]; Entries",200,1.75,1.95);
521
522 nameMass="histDstarMass_";
523 nameMass+=i+1;
524 nameSgn="histDstarSgn_";
525 nameSgn+=i+1;
526 nameBkg="histDstarBkg_";
527 nameBkg+=i+1;
528
dfb051fd 529 if (i==-2) {
46f6e464 530 nameMass="histDstarMass";
531 nameSgn="histDstarSgn";
532 nameBkg="histDstarBkg";
533 }
645e004b 534
46f6e464 535 TH1F* spectrumDstarMass = new TH1F(nameMass.Data(),"D^{*} invariant mass; M(D^{*}) [GeV/c^{2}]; Entries",200,1.9,2.1);
536 TH1F* spectrumDstarSgn = new TH1F(nameSgn.Data(), "D^{*} Signal invariant mass - MC; M(D^{*}) [GeV/c^{2}]; Entries",200,1.9,2.1);
537 TH1F* spectrumDstarBkg = new TH1F(nameBkg.Data(), "D^{*} Background invariant mass - MC; M(D^{*}) [GeV/c^{2}]; Entries",200,1.9,2.1);
645e004b 538
46f6e464 539 nameMass="histSideBandMass_";
540 nameMass+=i+1;
dfb051fd 541 if (i==-2) {
46f6e464 542 nameMass="histSideBandMass";
543 }
544
545 TH1F* spectrumSideBandMass = new TH1F(nameMass.Data(),"D^{*}-D^{0} sideband mass; M(D^{*}) [GeV/c^{2}]; Entries",200,0.1,0.2);
645e004b 546
46f6e464 547 nameMass="histWrongSignMass_";
548 nameMass+=i+1;
dfb051fd 549 if (i==-2) {
46f6e464 550 nameMass="histWrongSignMass";
551 }
552
553 TH1F* spectrumWrongSignMass = new TH1F(nameMass.Data(),"D^{*}-D^{0} wrongsign mass; M(D^{*}) [GeV/c^{2}]; Entries",200,0.1,0.2);
645e004b 554
645e004b 555
46f6e464 556 spectrumMass->Sumw2();
557 spectrumSgn->Sumw2();
558 spectrumBkg->Sumw2();
559
560 spectrumMass->SetLineColor(6);
561 spectrumSgn->SetLineColor(2);
562 spectrumBkg->SetLineColor(4);
563
564 spectrumMass->SetMarkerStyle(20);
565 spectrumSgn->SetMarkerStyle(20);
566 spectrumBkg->SetMarkerStyle(20);
567 spectrumMass->SetMarkerSize(0.6);
568 spectrumSgn->SetMarkerSize(0.6);
569 spectrumBkg->SetMarkerSize(0.6);
570 spectrumMass->SetMarkerColor(6);
571 spectrumSgn->SetMarkerColor(2);
572 spectrumBkg->SetMarkerColor(4);
573
574 spectrumD0Mass->Sumw2();
575 spectrumD0Sgn->Sumw2();
576 spectrumD0Bkg->Sumw2();
577
578 spectrumD0Mass->SetLineColor(6);
579 spectrumD0Sgn->SetLineColor(2);
580 spectrumD0Bkg->SetLineColor(4);
581
582 spectrumD0Mass->SetMarkerStyle(20);
583 spectrumD0Sgn->SetMarkerStyle(20);
584 spectrumD0Bkg->SetMarkerStyle(20);
585 spectrumD0Mass->SetMarkerSize(0.6);
586 spectrumD0Sgn->SetMarkerSize(0.6);
587 spectrumD0Bkg->SetMarkerSize(0.6);
588 spectrumD0Mass->SetMarkerColor(6);
589 spectrumD0Sgn->SetMarkerColor(2);
590 spectrumD0Bkg->SetMarkerColor(4);
591
592 spectrumDstarMass->Sumw2();
593 spectrumDstarSgn->Sumw2();
594 spectrumDstarBkg->Sumw2();
595
596 spectrumDstarMass->SetLineColor(6);
597 spectrumDstarSgn->SetLineColor(2);
598 spectrumDstarBkg->SetLineColor(4);
599
600 spectrumDstarMass->SetMarkerStyle(20);
601 spectrumDstarSgn->SetMarkerStyle(20);
602 spectrumDstarBkg->SetMarkerStyle(20);
603 spectrumDstarMass->SetMarkerSize(0.6);
604 spectrumDstarSgn->SetMarkerSize(0.6);
605 spectrumDstarBkg->SetMarkerSize(0.6);
606 spectrumDstarMass->SetMarkerColor(6);
607 spectrumDstarSgn->SetMarkerColor(2);
608 spectrumDstarBkg->SetMarkerColor(4);
609
610 spectrumSideBandMass->Sumw2();
611 spectrumSideBandMass->SetLineColor(4);
612 spectrumSideBandMass->SetMarkerStyle(20);
613 spectrumSideBandMass->SetMarkerSize(0.6);
614 spectrumSideBandMass->SetMarkerColor(4);
615
616 spectrumWrongSignMass->Sumw2();
617 spectrumWrongSignMass->SetLineColor(4);
618 spectrumWrongSignMass->SetMarkerStyle(20);
619 spectrumWrongSignMass->SetMarkerSize(0.6);
620 spectrumWrongSignMass->SetMarkerColor(4);
621
622 TH1F* allMass = (TH1F*)spectrumMass->Clone();
623 TH1F* allSgn = (TH1F*)spectrumSgn->Clone();
624 TH1F* allBkg = (TH1F*)spectrumBkg->Clone();
625
626 TH1F* pid3Mass = (TH1F*)spectrumMass->Clone();
627 TH1F* pid3Sgn = (TH1F*)spectrumSgn->Clone();
628 TH1F* pid3Bkg = (TH1F*)spectrumBkg->Clone();
629
630 TH1F* pid2Mass = (TH1F*)spectrumMass->Clone();
631 TH1F* pid2Sgn = (TH1F*)spectrumSgn->Clone();
632 TH1F* pid2Bkg = (TH1F*)spectrumBkg->Clone();
633
634 TH1F* pid1Mass = (TH1F*)spectrumMass->Clone();
635 TH1F* pid1Sgn = (TH1F*)spectrumSgn->Clone();
636 TH1F* pid1Bkg = (TH1F*)spectrumBkg->Clone();
637
638 fOutputSpectrum->Add(spectrumMass);
639 fOutputSpectrum->Add(spectrumSgn);
640 fOutputSpectrum->Add(spectrumBkg);
641
642 fOutputAll->Add(allMass);
643 fOutputAll->Add(allSgn);
644 fOutputAll->Add(allBkg);
645
646 fOutputPID3->Add(pid3Mass);
647 fOutputPID3->Add(pid3Sgn);
648 fOutputPID3->Add(pid3Bkg);
649
650 fOutputPID2->Add(pid2Mass);
651 fOutputPID2->Add(pid2Sgn);
652 fOutputPID2->Add(pid2Bkg);
653
654 fOutputPID1->Add(pid1Mass);
655 fOutputPID1->Add(pid1Sgn);
656 fOutputPID1->Add(pid1Bkg);
657
658 TH1F* allD0Mass = (TH1F*)spectrumD0Mass->Clone();
659 TH1F* allD0Sgn = (TH1F*)spectrumD0Sgn->Clone();
660 TH1F* allD0Bkg = (TH1F*)spectrumD0Bkg->Clone();
661
662 TH1F* pid3D0Mass = (TH1F*)spectrumD0Mass->Clone();
663 TH1F* pid3D0Sgn = (TH1F*)spectrumD0Sgn->Clone();
664 TH1F* pid3D0Bkg = (TH1F*)spectrumD0Bkg->Clone();
665
666 TH1F* pid2D0Mass = (TH1F*)spectrumD0Mass->Clone();
667 TH1F* pid2D0Sgn = (TH1F*)spectrumD0Sgn->Clone();
668 TH1F* pid2D0Bkg = (TH1F*)spectrumD0Bkg->Clone();
669
670 TH1F* pid1D0Mass = (TH1F*)spectrumD0Mass->Clone();
671 TH1F* pid1D0Sgn = (TH1F*)spectrumD0Sgn->Clone();
672 TH1F* pid1D0Bkg = (TH1F*)spectrumD0Bkg->Clone();
673
674 fOutputSpectrum->Add(spectrumD0Mass);
675 fOutputSpectrum->Add(spectrumD0Sgn);
676 fOutputSpectrum->Add(spectrumD0Bkg);
677
678 fOutputAll->Add(allD0Mass);
679 fOutputAll->Add(allD0Sgn);
680 fOutputAll->Add(allD0Bkg);
681
682 fOutputPID3->Add(pid3D0Mass);
683 fOutputPID3->Add(pid3D0Sgn);
684 fOutputPID3->Add(pid3D0Bkg);
685
686 fOutputPID2->Add(pid2D0Mass);
687 fOutputPID2->Add(pid2D0Sgn);
688 fOutputPID2->Add(pid2D0Bkg);
689
690 fOutputPID1->Add(pid1D0Mass);
691 fOutputPID1->Add(pid1D0Sgn);
692 fOutputPID1->Add(pid1D0Bkg);
645e004b 693
46f6e464 694 TH1F* allDstarMass = (TH1F*)spectrumDstarMass->Clone();
695 TH1F* allDstarSgn = (TH1F*)spectrumDstarSgn->Clone();
696 TH1F* allDstarBkg = (TH1F*)spectrumDstarBkg->Clone();
697
698 TH1F* pid3DstarMass = (TH1F*)spectrumDstarMass->Clone();
699 TH1F* pid3DstarSgn = (TH1F*)spectrumDstarSgn->Clone();
700 TH1F* pid3DstarBkg = (TH1F*)spectrumDstarBkg->Clone();
701
702 TH1F* pid2DstarMass = (TH1F*)spectrumDstarMass->Clone();
703 TH1F* pid2DstarSgn = (TH1F*)spectrumDstarSgn->Clone();
704 TH1F* pid2DstarBkg = (TH1F*)spectrumDstarBkg->Clone();
705
706 TH1F* pid1DstarMass = (TH1F*)spectrumDstarMass->Clone();
707 TH1F* pid1DstarSgn = (TH1F*)spectrumDstarSgn->Clone();
708 TH1F* pid1DstarBkg = (TH1F*)spectrumDstarBkg->Clone();
709
710 fOutputSpectrum->Add(spectrumDstarMass);
711 fOutputSpectrum->Add(spectrumDstarSgn);
712 fOutputSpectrum->Add(spectrumDstarBkg);
713
714 fOutputAll->Add(allDstarMass);
715 fOutputAll->Add(allDstarSgn);
716 fOutputAll->Add(allDstarBkg);
717
718 fOutputPID3->Add(pid3DstarMass);
719 fOutputPID3->Add(pid3DstarSgn);
720 fOutputPID3->Add(pid3DstarBkg);
721
722 fOutputPID2->Add(pid2DstarMass);
723 fOutputPID2->Add(pid2DstarSgn);
724 fOutputPID2->Add(pid2DstarBkg);
725
726 fOutputPID1->Add(pid1DstarMass);
727 fOutputPID1->Add(pid1DstarSgn);
728 fOutputPID1->Add(pid1DstarBkg);
729
730 TH1F* allSideBandMass = (TH1F*)spectrumSideBandMass->Clone();
731 TH1F* pid3SideBandMass = (TH1F*)spectrumSideBandMass->Clone();
732 TH1F* pid2SideBandMass = (TH1F*)spectrumSideBandMass->Clone();
733 TH1F* pid1SideBandMass = (TH1F*)spectrumSideBandMass->Clone();
734
735 fOutputSpectrum->Add(spectrumSideBandMass);
736 fOutputAll->Add(allSideBandMass);
737 fOutputPID3->Add(pid3SideBandMass);
738 fOutputPID2->Add(pid2SideBandMass);
739 fOutputPID1->Add(pid1SideBandMass);
740
741 TH1F* allWrongSignMass = (TH1F*)spectrumWrongSignMass->Clone();
742 TH1F* pid3WrongSignMass = (TH1F*)spectrumWrongSignMass->Clone();
743 TH1F* pid2WrongSignMass = (TH1F*)spectrumWrongSignMass->Clone();
744 TH1F* pid1WrongSignMass = (TH1F*)spectrumWrongSignMass->Clone();
745
746 fOutputSpectrum->Add(spectrumWrongSignMass);
747 fOutputAll->Add(allWrongSignMass);
748 fOutputPID3->Add(pid3WrongSignMass);
749 fOutputPID2->Add(pid2WrongSignMass);
750 fOutputPID1->Add(pid1WrongSignMass);
dfb051fd 751
46f6e464 752 }
dfb051fd 753
754 // pt spectra
755 nameMass="ptMass";
756 nameSgn="ptSgn";
757 nameBkg="ptBkg";
758
759 TH1F* ptspectrumMass = new TH1F(nameMass.Data(),"D^{*} p_{T}; p_{T} [GeV]; Entries",200,0,10);
760 TH1F* ptspectrumSgn = new TH1F(nameSgn.Data(), "D^{*} Signal p_{T} - MC; p_{T} [GeV]; Entries",200,0,10);
761 TH1F* ptspectrumBkg = new TH1F(nameBkg.Data(), "D^{*} Background p_{T} - MC; p_{T} [GeV]; Entries",200,0,10);
762
763 ptspectrumMass->Sumw2();
764 ptspectrumSgn->Sumw2();
765 ptspectrumBkg->Sumw2();
766
767 ptspectrumMass->SetLineColor(6);
768 ptspectrumSgn->SetLineColor(2);
769 ptspectrumBkg->SetLineColor(4);
770
771 ptspectrumMass->SetMarkerStyle(20);
772 ptspectrumSgn->SetMarkerStyle(20);
773 ptspectrumBkg->SetMarkerStyle(20);
774 ptspectrumMass->SetMarkerSize(0.6);
775 ptspectrumSgn->SetMarkerSize(0.6);
776 ptspectrumBkg->SetMarkerSize(0.6);
777 ptspectrumMass->SetMarkerColor(6);
778 ptspectrumSgn->SetMarkerColor(2);
779 ptspectrumBkg->SetMarkerColor(4);
780
781 TH1F* ptallMass = (TH1F*)ptspectrumMass->Clone();
782 TH1F* ptallSgn = (TH1F*)ptspectrumSgn->Clone();
783 TH1F* ptallBkg = (TH1F*)ptspectrumBkg->Clone();
784
785 TH1F* ptpid3Mass = (TH1F*)ptspectrumMass->Clone();
786 TH1F* ptpid3Sgn = (TH1F*)ptspectrumSgn->Clone();
787 TH1F* ptpid3Bkg = (TH1F*)ptspectrumBkg->Clone();
788
789 TH1F* ptpid2Mass = (TH1F*)ptspectrumMass->Clone();
790 TH1F* ptpid2Sgn = (TH1F*)ptspectrumSgn->Clone();
791 TH1F* ptpid2Bkg = (TH1F*)ptspectrumBkg->Clone();
792
793 TH1F* ptpid1Mass = (TH1F*)ptspectrumMass->Clone();
794 TH1F* ptpid1Sgn = (TH1F*)ptspectrumSgn->Clone();
795 TH1F* ptpid1Bkg = (TH1F*)ptspectrumBkg->Clone();
796
797 fOutputSpectrum->Add(ptspectrumMass);
798 fOutputSpectrum->Add(ptspectrumSgn);
799 fOutputSpectrum->Add(ptspectrumBkg);
800
801 fOutputAll->Add(ptallMass);
802 fOutputAll->Add(ptallSgn);
803 fOutputAll->Add(ptallBkg);
804
805 fOutputPID3->Add(ptpid3Mass);
806 fOutputPID3->Add(ptpid3Sgn);
807 fOutputPID3->Add(ptpid3Bkg);
808
809 fOutputPID2->Add(ptpid2Mass);
810 fOutputPID2->Add(ptpid2Sgn);
811 fOutputPID2->Add(ptpid2Bkg);
812
813 fOutputPID1->Add(ptpid1Mass);
814 fOutputPID1->Add(ptpid1Sgn);
815 fOutputPID1->Add(ptpid1Bkg);
816
817 // eta spectra
818 nameMass="etaMass";
819 nameSgn="etaSgn";
820 nameBkg="etaBkg";
821
822 TH1F* etaspectrumMass = new TH1F(nameMass.Data(),"D^{*} #eta; #eta; Entries",200,-1,1);
823 TH1F* etaspectrumSgn = new TH1F(nameSgn.Data(), "D^{*} Signal #eta - MC; #eta; Entries",200,-1,1);
824 TH1F* etaspectrumBkg = new TH1F(nameBkg.Data(), "D^{*} Background #eta - MC; #eta; Entries",200,-1,1);
825
826 etaspectrumMass->Sumw2();
827 etaspectrumSgn->Sumw2();
828 etaspectrumBkg->Sumw2();
829
830 etaspectrumMass->SetLineColor(6);
831 etaspectrumSgn->SetLineColor(2);
832 etaspectrumBkg->SetLineColor(4);
833
834 etaspectrumMass->SetMarkerStyle(20);
835 etaspectrumSgn->SetMarkerStyle(20);
836 etaspectrumBkg->SetMarkerStyle(20);
837 etaspectrumMass->SetMarkerSize(0.6);
838 etaspectrumSgn->SetMarkerSize(0.6);
839 etaspectrumBkg->SetMarkerSize(0.6);
840 etaspectrumMass->SetMarkerColor(6);
841 etaspectrumSgn->SetMarkerColor(2);
842 etaspectrumBkg->SetMarkerColor(4);
843
844 TH1F* etaallMass = (TH1F*)etaspectrumMass->Clone();
845 TH1F* etaallSgn = (TH1F*)etaspectrumSgn->Clone();
846 TH1F* etaallBkg = (TH1F*)etaspectrumBkg->Clone();
847
848 TH1F* etapid3Mass = (TH1F*)etaspectrumMass->Clone();
849 TH1F* etapid3Sgn = (TH1F*)etaspectrumSgn->Clone();
850 TH1F* etapid3Bkg = (TH1F*)etaspectrumBkg->Clone();
851
852 TH1F* etapid2Mass = (TH1F*)etaspectrumMass->Clone();
853 TH1F* etapid2Sgn = (TH1F*)etaspectrumSgn->Clone();
854 TH1F* etapid2Bkg = (TH1F*)etaspectrumBkg->Clone();
855
856 TH1F* etapid1Mass = (TH1F*)etaspectrumMass->Clone();
857 TH1F* etapid1Sgn = (TH1F*)etaspectrumSgn->Clone();
858 TH1F* etapid1Bkg = (TH1F*)etaspectrumBkg->Clone();
859
860 fOutputSpectrum->Add(etaspectrumMass);
861 fOutputSpectrum->Add(etaspectrumSgn);
862 fOutputSpectrum->Add(etaspectrumBkg);
863
864 fOutputAll->Add(etaallMass);
865 fOutputAll->Add(etaallSgn);
866 fOutputAll->Add(etaallBkg);
867
868 fOutputPID3->Add(etapid3Mass);
869 fOutputPID3->Add(etapid3Sgn);
870 fOutputPID3->Add(etapid3Bkg);
871
872 fOutputPID2->Add(etapid2Mass);
873 fOutputPID2->Add(etapid2Sgn);
874 fOutputPID2->Add(etapid2Bkg);
875
876 fOutputPID1->Add(etapid1Mass);
877 fOutputPID1->Add(etapid1Sgn);
878 fOutputPID1->Add(etapid1Bkg);
879
46f6e464 880 return;
881}
882//________________________________________________________________________
dfb051fd 883void AliAnalysisTaskSEDStarSpectra::FillSpectrum(AliAODRecoCascadeHF *part, Int_t isDStar, Bool_t PIDon, Int_t nSigma, AliRDHFCutsDStartoKpipi *cuts, TList *listout){
46f6e464 884 //
885 // Fill histos for D* spectrum
886 //
645e004b 887
dfb051fd 888 Int_t ptbin=cuts->PtBin(part->Pt());
645e004b 889
dfb051fd 890 Int_t isSelected=cuts->IsSelected(part,AliRDHFCuts::kCandidate); //selected
891 if (!isSelected){
892 return;
893 }
894
895 Double_t invmassD0 = part->InvMassD0();
896 if (TMath::Abs(invmassD0-1.865)>fD0Window) return;
897
898 Double_t pt = part->Pt();
899 Double_t eta = part->Eta();
900
901 AliAODTrack *softPi = (AliAODTrack*)part->GetBachelor();
902
903 //PID of D0 daughters
904 AliAODTrack *pos = (AliAODTrack*)part->Get2Prong()->GetDaughter(0);
905 AliAODTrack *neg = (AliAODTrack*)part->Get2Prong()->GetDaughter(1);
906
907 Bool_t isPID = kTRUE;
908
909 // Double_t cutsN = -1;
46f6e464 910
dfb051fd 911 //if(part->Charge()<0){
912 // cutsN = (pos->Pt()-neg->Pt())/(part->Get2Prong()->Pt());
913 // }
914 //if(part->Charge()>0){
915 // cutsN = (neg->Pt()-pos->Pt())/(part->Get2Prong()->Pt());
916 // }
917
918 // if(ptbin==1 || ptbin==2){
919 // if(cutsN>0.7) return;
920 // }
921 //if(ptbin==3){
922 // if(cutsN>0.8) return;
923 // }
924
925
926 if(fAnalysis==1 && ptbin==1){
927 if(part->Get2Prong()->DecayLength()>0.1 || part->Get2Prong()->DecayLength()<0.015)return; //(0.05)
928 }
929 if(fAnalysis==1 && ptbin==2){
930 if(part->Get2Prong()->DecayLength()>0.1 || part->Get2Prong()->DecayLength()<0.015)return;
931 }
932
933 if (PIDon) {
934 if(fDebug > 1) printf("AnalysisTaskSEDStar::TPCPIDon \n");
935 if(fDebug > 1) printf("AnalysisTaskSEDStar::NSigmaTPC: %d\n", nSigma);
46f6e464 936
dfb051fd 937 if (part->Charge()>0){
938 if(!SelectPID(pos, AliPID::kPion, nSigma)) return;//pion+
939 if(!SelectPID(neg, AliPID::kKaon, nSigma)) return;//kaon-
940 }else{
941 if(!SelectPID(pos, AliPID::kKaon, nSigma)) return;//kaon+
942 if(!SelectPID(neg, AliPID::kPion, nSigma)) return;//pion-
943 }
944 if (ptbin>1){
945 isPID =SelectTOFPID(part->Get2Prong(), softPi);
946 if(!isPID) return;
947 }
948 }
949
950 Double_t invmassDelta = part->DeltaInvMass();
951 Double_t invmassDstar = part->InvMassDstarKpipi();
952
953 TString fillthis="";
954 Bool_t massInRange=kFALSE;
955 if (TMath::Abs(invmassDelta-0.14557)<fPeakWindow) massInRange=kTRUE;
956
957
958 if(fUseMCInfo) {
959 if(isDStar==1) {
960 fillthis="histD0Sgn_";
961 fillthis+=ptbin;
962 ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassD0);
963 fillthis="histD0Sgn";
964 ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassD0);
965 fillthis="histDstarSgn_";
966 fillthis+=ptbin;
967 ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassDstar);
968 fillthis="histDstarSgn";
969 ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassDstar);
970 fillthis="histDeltaSgn_";
971 fillthis+=ptbin;
972 ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassDelta);
973 fillthis="histDeltaSgn";
974 ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassDelta);
975 //if (massInRange) {
976 if(ptbin<=1){
977 fillthis="ptSgn";
978 ((TH1F*)(listout->FindObject(fillthis)))->Fill(pt);
979 fillthis="etaSgn";
980 ((TH1F*)(listout->FindObject(fillthis)))->Fill(eta);
46f6e464 981 }
982 }
dfb051fd 983 else {//background
984 fillthis="histD0Bkg_";
985 fillthis+=ptbin;
986 ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassD0);
987 fillthis="histD0Bkg";
988 ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassD0);
989 fillthis="histDstarBkg_";
990 fillthis+=ptbin;
991 ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassDstar);
992 fillthis="histDstarBkg";
993 ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassDstar);
994 fillthis="histDeltaBkg_";
995 fillthis+=ptbin;
996 ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassDelta);
997 fillthis="histDeltaBkg";
998 ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassDelta);
999 //if (massInRange) {
1000 if(ptbin<=1){
1001 fillthis="ptBkg";
1002 ((TH1F*)(listout->FindObject(fillthis)))->Fill(pt);
1003 fillthis="etaBkg";
1004 ((TH1F*)(listout->FindObject(fillthis)))->Fill(eta);
1005 }
46f6e464 1006 }
dfb051fd 1007 }
1008 //no MC info, just cut selection
1009 fillthis="histD0Mass_";
1010 fillthis+=ptbin;
1011 ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassD0);
1012 fillthis="histD0Mass";
1013 ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassD0);
1014 fillthis="histDstarMass_";
1015 fillthis+=ptbin;
1016 ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassDstar);
1017 fillthis="histDstarMass";
1018 ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassDstar);
1019 fillthis="histDeltaMass_";
1020 fillthis+=ptbin;
1021 ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassDelta);
1022 fillthis="histDeltaMass";
1023 ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassDelta);
645e004b 1024
dfb051fd 1025 if (massInRange) {
1026 fillthis="ptMass";
1027 ((TH1F*)(listout->FindObject(fillthis)))->Fill(pt);
1028 fillthis="etaMass";
1029 ((TH1F*)(listout->FindObject(fillthis)))->Fill(eta);
1030 }
1031
46f6e464 1032 return;
645e004b 1033}
1034//______________________________ side band background for D*___________________________________
dfb051fd 1035void AliAnalysisTaskSEDStarSpectra::SideBandBackground(AliAODRecoCascadeHF *part, Bool_t PIDon, Int_t nSigma, AliRDHFCutsDStartoKpipi *cuts, TList *listout){
645e004b 1036
1037 // D* side band background method. Two side bands, in M(Kpi) are taken at ~6 sigmas
1038 // (expected detector resolution) on the left and right frm the D0 mass. Each band
1039 // has a width of ~5 sigmas. Two band needed for opening angle considerations
645e004b 1040
dfb051fd 1041 Int_t ptbin=cuts->PtBin(part->Pt());
1042
1043 Bool_t massInRange=kFALSE;
46f6e464 1044
dfb051fd 1045 Int_t isSelected=cuts->IsSelected(part,AliRDHFCuts::kCandidate); //selected
1046 if (!isSelected){
1047 return;
1048 }
1049 // Double_t pt = part->Pt();
46f6e464 1050
dfb051fd 1051 AliAODTrack *softPi = (AliAODTrack*)part->GetBachelor();
1052
1053 // select the side bands intervall
1054 Double_t invmassD0 = part->InvMassD0();
1055 if(TMath::Abs(invmassD0-1.865)>4*fD0Window && TMath::Abs(invmassD0-1.865)<8*fD0Window){
1056
1057 // for pt and eta
1058 Double_t invmassDelta = part->DeltaInvMass();
1059 if (TMath::Abs(invmassDelta-0.14557)<fPeakWindow) massInRange=kTRUE;
1060
1061 //PID of D0 daughters
1062 AliAODTrack *pos = (AliAODTrack*)part->Get2Prong()->GetDaughter(0);
1063 AliAODTrack *neg = (AliAODTrack*)part->Get2Prong()->GetDaughter(1);
1064
1065 //Double_t cutsN = -1;
1066
1067
1068 /* if(part->Charge()<0){
1069 cutsN = (pos->Pt()-neg->Pt())/(part->Get2Prong()->Pt());
1070 }
1071 if(part->Charge()>0){
1072 cutsN = (neg->Pt()-pos->Pt())/(part->Get2Prong()->Pt());
1073 }
1074
1075 if(ptbin==1 || ptbin==2){
1076 if(cutsN>0.5) return;
1077 }
1078 if(ptbin==3){
1079 if(cutsN>0.7) return;
1080 }
1081 */
1082 if(fAnalysis==1 && ptbin==1){
1083 if(part->Get2Prong()->DecayLength()>0.08 || part->Get2Prong()->DecayLength()<0.022)return; //(0.05)
1084 }
1085 if(fAnalysis==1 && ptbin==2){
1086 if(part->Get2Prong()->DecayLength()>0.08 || part->Get2Prong()->DecayLength()<0.017)return;
1087 }
1088
1089 Bool_t isPID = kTRUE;
1090
1091 if (PIDon) {
1092 if(fDebug > 1) printf("AnalysisTaskSEDStar::TPCPIDon \n");
1093 if(fDebug > 1) printf("AnalysisTaskSEDStar::NSigmaTPC: %d\n", nSigma);
46f6e464 1094
dfb051fd 1095 if (part->Charge()>0){
1096 if(!SelectPID(pos, AliPID::kPion, nSigma)) return;//pion+
1097 if(!SelectPID(neg, AliPID::kKaon, nSigma)) return;//kaon-
1098 }else{
1099 if(!SelectPID(pos, AliPID::kKaon, nSigma)) return;//kaon+
1100 if(!SelectPID(neg, AliPID::kPion, nSigma)) return;//pion-
1101 }
1102 if (ptbin>2){
1103 isPID =SelectTOFPID(part->Get2Prong(), softPi);
1104 if(!isPID) return;
1105 }
645e004b 1106 }
dfb051fd 1107
1108 TString fillthis="";
1109 fillthis="histSideBandMass_";
1110 fillthis+=ptbin;
1111 ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassDelta);
1112 fillthis="histSideBandMass";
1113 ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassDelta);
1114
645e004b 1115 }
1116}
645e004b 1117//________________________________________________________________________________________________________________
dfb051fd 1118void AliAnalysisTaskSEDStarSpectra::WrongSignForDStar(AliAODRecoCascadeHF *part, Bool_t PIDon, Int_t nSigma, AliRDHFCutsDStartoKpipi *cuts, TList *listout){
645e004b 1119 //
1120 // assign the wrong charge to the soft pion to create background
1121 //
dfb051fd 1122 Int_t ptbin=cuts->PtBin(part->Pt());
46f6e464 1123
1124 AliAODRecoDecayHF2Prong* theD0particle = (AliAODRecoDecayHF2Prong*)part->Get2Prong();
dfb051fd 1125 AliAODTrack *theSoftPi = (AliAODTrack*)part->GetBachelor();
1126
46f6e464 1127 Int_t okD0WrongSign,okD0barWrongSign;
dfb051fd 1128 Double_t wrongMassD0=0.;
1129
1130 Int_t isSelected=cuts->IsSelected(part,AliRDHFCuts::kCandidate); //selected
1131 if (!isSelected){
1132 return;
1133 }
1134
1135 okD0WrongSign = 1;
1136 okD0barWrongSign = 1;
46f6e464 1137
dfb051fd 1138 //if is D*+ than assume D0bar
1139 if(part->Charge()>0 && (isSelected ==1)) {
9a83c91e 1140 okD0WrongSign = 0;
dfb051fd 1141 }
1142 if(part->Charge()<0 && (isSelected ==2)){
1143 okD0barWrongSign = 0;
1144 }
1145
1146 // assign the wrong mass in case the cuts return both D0 and D0bar
1147 if(part->Charge()>0 && (isSelected ==3)) {
1148 okD0WrongSign = 0;
1149 } else if(part->Charge()<0 && (isSelected ==3)){
9a83c91e 1150 okD0barWrongSign = 0;
1151 }
dfb051fd 1152
46f6e464 1153 //wrong D0 inv mass
dfb051fd 1154 if(okD0WrongSign!=0){
46f6e464 1155 wrongMassD0 = theD0particle->InvMassD0();
1156 }else if(okD0WrongSign==0){
1157 wrongMassD0 = theD0particle->InvMassD0bar();
645e004b 1158 }
46f6e464 1159
dfb051fd 1160 if(TMath::Abs(wrongMassD0-1.865)<fD0Window){
1161
1162 //PID of D0 daughters
1163 AliAODTrack *pos = (AliAODTrack*)part->Get2Prong()->GetDaughter(0);
1164 AliAODTrack *neg = (AliAODTrack*)part->Get2Prong()->GetDaughter(1);
1165
1166 Bool_t isPID = kTRUE;
1167
1168
1169 if(fAnalysis==1 && ptbin==1){
1170 if(part->Get2Prong()->DecayLength()>0.08 || part->Get2Prong()->DecayLength()<0.022)return; //(0.05)
1171 }
1172 if(fAnalysis==1 && ptbin==2){
1173 if(part->Get2Prong()->DecayLength()>0.08 || part->Get2Prong()->DecayLength()<0.017)return;
1174 }
1175
1176 if (PIDon) {
1177 if(fDebug > 1) printf("AnalysisTaskSEDStar::TPCPIDon \n");
1178 if(fDebug > 1) printf("AnalysisTaskSEDStar::NSigmaTPC: %d\n", nSigma);
46f6e464 1179
dfb051fd 1180 if (part->Charge()>0){
1181 if(!SelectPID(pos, AliPID::kPion, nSigma)) return;//pion+
1182 if(!SelectPID(neg, AliPID::kKaon, nSigma)) return;//kaon-
1183 }else{
1184 if(!SelectPID(pos, AliPID::kKaon, nSigma)) return;//kaon+
1185 if(!SelectPID(neg, AliPID::kPion, nSigma)) return;//pion-
1186 }
1187 if (ptbin>2){
1188 isPID =SelectTOFPID(theD0particle, theSoftPi);
1189 if(!isPID) return;
1190 }
46f6e464 1191 }
dfb051fd 1192
1193 // wrong D* inv mass
1194 Double_t e[3];
1195 if (part->Charge()>0){
1196 e[0]=theD0particle->EProng(0,321);
1197 e[1]=theD0particle->EProng(1,211);
1198 }else{
1199 e[0]=theD0particle->EProng(0,211);
1200 e[1]=theD0particle->EProng(1,321);
1201 }
1202 e[2]=part->EProng(0,211);
1203
1204 Double_t esum = e[0]+e[1]+e[2];
1205 Double_t pds = part->P();
1206
1207 Double_t wrongMassDstar = TMath::Sqrt(esum*esum-pds*pds);
1208
1209 TString fillthis="";
1210 fillthis="histWrongSignMass_";
1211 fillthis+=ptbin;
1212 ((TH1F*)(listout->FindObject(fillthis)))->Fill(wrongMassDstar-wrongMassD0);
1213 fillthis="histWrongSignMass";
1214 ((TH1F*)(listout->FindObject(fillthis)))->Fill(wrongMassDstar-wrongMassD0);
1215
645e004b 1216 }
46f6e464 1217}
dfb051fd 1218
46f6e464 1219//_____________________________________________SINGLE TRACK PRE-SELECTION___________________________________________
dfb051fd 1220Bool_t AliAnalysisTaskSEDStarSpectra::SingleTrackSelections(const AliAODRecoDecayHF2Prong* theD0particle, const AliAODTrack *track2){
46f6e464 1221
1222 // Preselection on D0 daughters and the soft pion
46f6e464 1223
1224 // cut in acceptance for the soft pion and for the D0 daughters
dfb051fd 1225 Bool_t acceptanceProng0 = (TMath::Abs(theD0particle->EtaProng(0))<= 0.9);
1226 Bool_t acceptanceProng1 = (TMath::Abs(theD0particle->EtaProng(1))<= 0.9);
46f6e464 1227 // soft pion acceptance ... is it fine 0.9?????
dfb051fd 1228 Bool_t acceptanceProng2 = (TMath::Abs(track2->Eta())<= 1.0);
46f6e464 1229
1230 if (!(acceptanceProng0 && acceptanceProng1 && acceptanceProng2)) return kFALSE;
1231 AliDebug(2,"D* reco daughters in acceptance");
1232
645e004b 1233 return kTRUE;
1234}
46f6e464 1235
645e004b 1236//_____________________________ pid _______________________________________-
dfb051fd 1237Bool_t AliAnalysisTaskSEDStarSpectra::SelectPID(const AliAODTrack *track, AliPID::EParticleType type, Double_t nsig){//type(0-4): {e,mu,pi,K,p}
46f6e464 1238 //
1239 // Method to extract the PID for the pion/kaon. The particle type for PID can be set by user
1240 // At the moment only TPC PID.
1241 //
1242
645e004b 1243 //TPC
46f6e464 1244
1245 Bool_t isParticle=kTRUE;
1246 if ((track->GetStatus()&AliESDtrack::kTPCpid )==0) return isParticle;
645e004b 1247 AliAODPid *pid = track->GetDetPid();
1248 static AliTPCPIDResponse theTPCpid;
46f6e464 1249 Double_t nsigma = theTPCpid.GetNumberOfSigmas(track->P(),pid->GetTPCsignal(),track->GetTPCClusterMap().CountBits(), type);
1250 if (TMath::Abs(nsigma)>nsig) isParticle=kFALSE;
dfb051fd 1251
46f6e464 1252 return isParticle;
645e004b 1253}
dfb051fd 1254//-------------------------------------------------
1255Bool_t AliAnalysisTaskSEDStarSpectra::SelectTOFPID(const AliAODRecoDecayHF2Prong* d, const AliAODTrack *tracksoft){
1256
1257
1258 // ######### SPECIAL PID CUTS #################################
1259 Int_t isKaon[2]={0,0};
1260 Bool_t isD0D0barPID[2]={kTRUE,kTRUE};
1261 for(Int_t daught=0;daught<2;daught++){
1262
1263
1264 AliAODTrack *aodtrack=(AliAODTrack*)d->GetDaughter(daught);
1265 // AliESDtrack *esdtrack=new
1266 AliESDtrack((AliVTrack*)d->GetDaughter(daught));
1267 if(!(aodtrack->GetStatus()&AliESDtrack::kTOFpid)){
1268 isKaon[daught]=0;
1269 //delete esdtrack;
1270 return kTRUE;
1271 }
1272 if(!(aodtrack->GetStatus()&AliESDtrack::kTOFout)){
1273 isKaon[daught]=0;
1274 // delete esdtrack;
1275 return kTRUE;
1276 }
1277 if(!(aodtrack->GetStatus()&AliESDtrack::kTIME)){
1278 isKaon[daught]=0;
1279 //delete esdtrack;
1280 return kTRUE;
1281 }
1282 if(!(aodtrack->GetStatus()&AliESDtrack::kTPCrefit)){
1283 isKaon[daught]=0;
1284 // delete esdtrack;
1285 return kTRUE;
1286 }
1287 if(!(aodtrack->GetStatus()&AliESDtrack::kITSrefit)){
1288 isKaon[daught]=0;
1289 // delete esdtrack;
1290 return kTRUE;
1291 }
1292
1293 AliAODPid *pid=aodtrack->GetDetPid();
1294 if(!pid) {
1295 isKaon[daught]=0;
1296 //delete esdtrack;
1297 return kTRUE;
1298 }
1299 Double_t tofSig=pid->GetTOFsignal();
1300
1301 Double_t times[5];
1302 // esdtrack->GetIntegratedTimes(times);
1303 pid->GetIntegratedTimes(times);
1304 //fHistCheck->Fill(esdtrack->P(),esdtrack->GetTOFsignal()-times[3]); //
1305 //3 is the kaon
1306
1307 // printf("Test momentum VS time %f, %f \n",aodtrack->P(),tofSig-times[3]);
1308 if(TMath::Abs(tofSig-times[3])>3.*160.){
1309 isKaon[daught]=2;
1310 if(aodtrack->Charge()==-1){
1311 isD0D0barPID[0]=kFALSE;
1312 }
1313 else isD0D0barPID[1]=kFALSE;
1314 }
1315 else {
1316 isKaon[daught]=1;
1317
1318 if(aodtrack->P()<1.5){
1319 if(aodtrack->Charge()==-1){
1320 isD0D0barPID[1]=kFALSE;
1321 }
1322 else isD0D0barPID[0]=kFALSE;
1323
1324 }
1325 //delete esdtrack;
1326 }
1327 }
1328
1329 Double_t psCharge = tracksoft->Charge();
1330
1331 if(psCharge>0 && !isD0D0barPID[0]) return kFALSE;
1332 if(psCharge<0 && !isD0D0barPID[1]) return kFALSE;
1333
1334 return kTRUE;
1335}