]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGHF/correlationHF/AliAnalysisTaskDStarCorrelations.cxx
Fix
[u/mrichter/AliRoot.git] / PWGHF / correlationHF / AliAnalysisTaskDStarCorrelations.cxx
CommitLineData
815e6bab 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//
16//
17// Base class for DStar - Hadron Correlations Analysis
18//
19//-----------------------------------------------------------------------
20//
21//
22// Author S.Bjelogrlic
23// Utrecht University
24// sandro.bjelogrlic@cern.ch
25//
26//-----------------------------------------------------------------------
27
28/* $Id$ */
29
bce70c96 30//#include <TDatabasePDG.h>
815e6bab 31#include <TParticle.h>
32#include <TVector3.h>
33#include <TChain.h>
34#include "TROOT.h"
35
36#include "AliAnalysisTaskDStarCorrelations.h"
37#include "AliRDHFCutsDStartoKpipi.h"
38#include "AliHFAssociatedTrackCuts.h"
39#include "AliAODRecoDecay.h"
40#include "AliAODRecoCascadeHF.h"
41#include "AliAODRecoDecayHF2Prong.h"
42#include "AliAODPidHF.h"
815e6bab 43#include "AliVParticle.h"
44#include "AliAnalysisManager.h"
45#include "AliAODInputHandler.h"
46#include "AliAODHandler.h"
47#include "AliESDtrack.h"
48#include "AliAODMCParticle.h"
49#include "AliNormalizationCounter.h"
50#include "AliReducedParticle.h"
bce70c96 51#include "AliHFCorrelator.h"
53454b81 52#include "AliAODMCHeader.h"
53#include "AliEventPoolManager.h"
815e6bab 54
e61afb80 55using std::cout;
56using std::endl;
815e6bab 57
c64cb1f6 58
815e6bab 59ClassImp(AliAnalysisTaskDStarCorrelations)
60
61
62//__________________________________________________________________________
63AliAnalysisTaskDStarCorrelations::AliAnalysisTaskDStarCorrelations() :
64AliAnalysisTaskSE(),
65fhandler(0x0),
815e6bab 66fmcArray(0x0),
67fCounter(0x0),
bce70c96 68fCorrelator(0x0),
815e6bab 69fselect(0),
70fmontecarlo(kFALSE),
71fmixing(kFALSE),
bce70c96 72fSystem(kFALSE),
53454b81 73fReco(kTRUE),
815e6bab 74fEvents(0),
53454b81 75fDebugLevel(0),
bce70c96 76fDisplacement(0),
815e6bab 77
53454b81 78fOutput(0x0),
79fOutputMC(0x0),
815e6bab 80fCuts(0),
81fCuts2(0)
82{
83// default constructor
84}
85
86//__________________________________________________________________________
87AliAnalysisTaskDStarCorrelations::AliAnalysisTaskDStarCorrelations(const Char_t* name,AliRDHFCutsDStartoKpipi* cuts, AliHFAssociatedTrackCuts *AsscCuts) :
88AliAnalysisTaskSE(name),
89
90fhandler(0x0),
815e6bab 91fmcArray(0x0),
92fCounter(0x0),
bce70c96 93fCorrelator(0x0),
815e6bab 94fselect(0),
95fmontecarlo(kFALSE),
96fmixing(kFALSE),
bce70c96 97fSystem(kFALSE),
53454b81 98fReco(kTRUE),
815e6bab 99fEvents(0),
53454b81 100fDebugLevel(0),
bce70c96 101fDisplacement(0),
815e6bab 102
53454b81 103fOutput(0x0),
104fOutputMC(0x0),
815e6bab 105fCuts(0),
106fCuts2(AsscCuts)
107{
108 fCuts=cuts;
109 Info("AliAnalysisTaskDStarCorrelations","Calling Constructor");
110 DefineInput(0, TChain::Class());
53454b81 111
112 DefineOutput(1,TList::Class()); // histos from data and MC
113 DefineOutput(2,TList::Class()); // histos from MC
114 DefineOutput(3,AliRDHFCutsDStartoKpipi::Class()); // my D meson cuts
115 DefineOutput(4,AliHFAssociatedTrackCuts::Class()); // my associated tracks cuts
116 DefineOutput(5,AliNormalizationCounter::Class()); // normalization
815e6bab 117}
118
119//__________________________________________________________________________
120
121AliAnalysisTaskDStarCorrelations::~AliAnalysisTaskDStarCorrelations() {
122 //
123 // destructor
124 //
125
126 Info("AliAnalysisTaskDStarCorrelations","Calling Destructor");
127
128 if(fhandler) {delete fhandler; fhandler = 0;}
bce70c96 129 //if(fPoolMgr) {delete fPoolMgr; fPoolMgr = 0;}
815e6bab 130 if(fmcArray) {delete fmcArray; fmcArray = 0;}
131 if(fCounter) {delete fCounter; fCounter = 0;}
bce70c96 132 if(fCorrelator) {delete fCorrelator; fCorrelator = 0;}
815e6bab 133 if(fOutput) {delete fOutput; fOutput = 0;}
53454b81 134 if(fOutputMC) {delete fOutputMC; fOutputMC = 0;}
815e6bab 135 if(fCuts) {delete fCuts; fCuts = 0;}
136 if(fCuts2) {delete fCuts2; fCuts2=0;}
137
138}
139
140//___________________________________________________________
141void AliAnalysisTaskDStarCorrelations::Init(){
142 //
143 // Initialization
144 //
53454b81 145 if(fDebugLevel > 1) printf("AliAnalysisTaskDStarCorrelations::Init() \n");
815e6bab 146
147 AliRDHFCutsDStartoKpipi* copyfCuts=new AliRDHFCutsDStartoKpipi(*fCuts);
bce70c96 148
149
150
151
815e6bab 152 // Post the D* cuts
53454b81 153 PostData(3,copyfCuts);
815e6bab 154
155 // Post the hadron cuts
156 PostData(4,fCuts2);
157
c84dbedf 158
159
815e6bab 160 return;
161}
162
163
164//_________________________________________________
165void AliAnalysisTaskDStarCorrelations::UserCreateOutputObjects(){
166 Info("UserCreateOutputObjects","CreateOutputObjects of task %s\n", GetName());
167
168 //slot #1
169 //OpenFile(0);
170 fOutput = new TList();
171 fOutput->SetOwner();
172
53454b81 173 fOutputMC = new TList();
174 fOutputMC->SetOwner();
175
815e6bab 176 // define histograms
177 DefineHistoForAnalysis();
53454b81 178 fCounter = new AliNormalizationCounter(Form("%s",GetOutputSlot(5)->GetContainer()->GetName()));
815e6bab 179 fCounter->Init();
180
bce70c96 181 Double_t Pi = TMath::Pi();
182 fCorrelator = new AliHFCorrelator("Correlator",fCuts2,fSystem); // fCuts2 is the hadron cut object, fSystem to switch between pp or PbPb
183 fCorrelator->SetDeltaPhiInterval((-0.5-1./32)*Pi,(1.5-1./32)*Pi); // set correct phi interval
bce70c96 184 fCorrelator->SetEventMixing(fmixing); //set kFALSE/kTRUE for mixing Off/On
185 fCorrelator->SetAssociatedParticleType(fselect); // set 1/2/3 for hadron/kaons/kzeros
186 fCorrelator->SetApplyDisplacementCut(fDisplacement); //set kFALSE/kTRUE for using the displacement cut
187 fCorrelator->SetUseMC(fmontecarlo);
53454b81 188 fCorrelator->SetUseReco(fReco);
bce70c96 189 Bool_t pooldef = fCorrelator->DefineEventPool();
815e6bab 190
bce70c96 191 if(!pooldef) AliInfo("Warning:: Event pool not defined properly");
192
53454b81 193
815e6bab 194
c84dbedf 195 PostData(1,fOutput); // set the outputs
53454b81 196 PostData(2,fOutputMC); // set the outputs
197 PostData(5,fCounter); // set the outputs
815e6bab 198}
199//_________________________________________________
200void AliAnalysisTaskDStarCorrelations::UserExec(Option_t *){
201
815e6bab 202
53454b81 203 if(fDebugLevel){
204
205 if(fReco) std::cout << "USING RECONSTRUCTION" << std::endl;
206 if(!fReco) std::cout << "USING MC TRUTH" << std::endl;
207 std::cout << " " << std::endl;
208 std::cout << "=================================================================================" << std::endl;
209 if(!fmixing){
210 if(fselect==1) std::cout << "TASK::Correlation with hadrons on SE "<< std::endl;
211 if(fselect==2) std::cout << "TASK::Correlation with kaons on SE "<< std::endl;
212 if(fselect==3) std::cout << "TASK::Correlation with kzeros on SE "<< std::endl;
213 }
214 if(fmixing){
215 if(fselect==1) std::cout << "TASK::Correlation with hadrons on ME "<< std::endl;
216 if(fselect==2) std::cout << "TASK::Correlation with kaons on ME "<< std::endl;
217 if(fselect==3) std::cout << "TASK::Correlation with kzeros on ME "<< std::endl;
218 }
219
220 }// end if debug
221
815e6bab 222 if (!fInputEvent) {
223 Error("UserExec","NO EVENT FOUND!");
224 return;
225 }
226
bf658d5c 227 AliAODEvent* aodEvent = dynamic_cast<AliAODEvent*>(fInputEvent);
228 if(!aodEvent){
229 AliError("AOD event not found!");
230 return;
231 }
bce70c96 232
53454b81 233
815e6bab 234
235 fEvents++; // event counter
236 ((TH1D*)fOutput->FindObject("NofEvents"))->Fill(0);
53454b81 237 fCounter->StoreEvent(aodEvent,fCuts,fmontecarlo);
238
239 // load MC array
815e6bab 240 fmcArray = dynamic_cast<TClonesArray*>(aodEvent->FindListObject(AliAODMCParticle::StdBranchName()));
bf658d5c 241 if(fmontecarlo && !fmcArray){
242 AliError("Array of MC particles not found");
243 return;
244 }
53454b81 245
246
247
248
bce70c96 249 Bool_t isEvSel=fCuts->IsEventSelected(aodEvent);
250 if(!isEvSel) return;
53454b81 251
252 fCorrelator->SetAODEvent(aodEvent); // set the event to be processed
253
254 ((TH1D*)fOutput->FindObject("NofEvents"))->Fill(1);
bce70c96 255 //
256 Bool_t correlatorON = fCorrelator->Initialize(); //define the pool for mixing
257 if(!correlatorON) {
258 AliInfo("AliHFCorrelator didn't initialize the pool correctly or processed a bad event");
815e6bab 259 return;
260 }
c84dbedf 261 ((TH1D*)fOutput->FindObject("NofEvents"))->Fill(2);
815e6bab 262
bce70c96 263 if(fmontecarlo) fCorrelator->SetMCArray(fmcArray);
53454b81 264
265
266 // check the event type
267 // load MC header
268
269 if(fmontecarlo){
270 AliAODMCHeader *mcHeader = dynamic_cast<AliAODMCHeader*>(aodEvent->GetList()->FindObject(AliAODMCHeader::StdBranchName()));
271 if (fmontecarlo && !mcHeader) {
272 AliError("Could not find MC Header in AOD");
273 return;
274 }
275
276 Bool_t isMCeventgood = kFALSE;
277
278
279 Int_t eventType = mcHeader->GetEventType();
280 Int_t NMCevents = fCuts2->GetNofMCEventType();
281
282 for(Int_t k=0; k<NMCevents; k++){
283 Int_t * MCEventType = fCuts2->GetMCEventType();
284
285 if(eventType == MCEventType[k]) isMCeventgood= kTRUE;
286 ((TH1D*)fOutputMC->FindObject("EventTypeMC"))->Fill(eventType);
287 }
288
289 if(NMCevents && !isMCeventgood){
290 if(fDebugLevel) std::cout << "The MC event " << eventType << " not interesting for this analysis: skipping" << std::endl;
291 return;
292 }
293
294 } // end if montecarlo
295
815e6bab 296 // D* reconstruction
815e6bab 297 TClonesArray *arrayDStartoD0pi=0;
815e6bab 298 if(!aodEvent && AODEvent() && IsStandardAOD()) {
299 // In case there is an AOD handler writing a standard AOD, use the AOD
300 // event in memory rather than the input (ESD) event.
301 aodEvent = dynamic_cast<AliAODEvent*> (AODEvent());
302 // in this case the braches in the deltaAOD (AliAOD.VertexingHF.root)
303 // have to taken from the AOD event hold by the AliAODExtension
304 AliAODHandler* aodHandler = (AliAODHandler*)
305 ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
306 if(aodHandler->GetExtensions()) {
307 AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject("AliAOD.VertexingHF.root");
308 AliAODEvent *aodFromExt = ext->GetAOD();
309 arrayDStartoD0pi=(TClonesArray*)aodFromExt->GetList()->FindObject("Dstar");
310 }
311 } else {
312 arrayDStartoD0pi=(TClonesArray*)aodEvent->GetList()->FindObject("Dstar");
313 }
314
315 if(!aodEvent->GetPrimaryVertex() || TMath::Abs(aodEvent->GetMagneticField())<0.001) return;
316
317 // initialize variables you will need for the D*
318
319 Double_t ptDStar;//
320 Double_t phiDStar;//
321 Double_t etaDStar;//
322 Bool_t isInPeak, isInSideBand, isDStarMCtag;
323 Double_t invMassDZero;
324 Double_t deltainvMDStar;
325
326
bce70c96 327 Double_t mPDGD0=1.8648;//TDatabasePDG::Instance()->GetParticle(421)->Mass();
328 Double_t mPDGDstar=2.01022;//TDatabasePDG::Instance()->GetParticle(413)->Mass();
c84dbedf 329
815e6bab 330
331 //MC tagging for DStar
332 //D* and D0 prongs needed to MatchToMC method
333 Int_t pdgDgDStartoD0pi[2]={421,211};
334 Int_t pdgDgD0toKpi[2]={321,211};
bce70c96 335
53454b81 336 Bool_t isDStarCand = kFALSE;
815e6bab 337 //loop on D* candidates
338 for (Int_t iDStartoD0pi = 0; iDStartoD0pi<arrayDStartoD0pi->GetEntriesFast(); iDStartoD0pi++) {
339 isInPeak = kFALSE;
340 isInSideBand = kFALSE;
341 isDStarMCtag = kFALSE;
342 ptDStar = -123.4;
343 phiDStar = -999;
344 etaDStar = -56.;
345 invMassDZero = - 999;
346 deltainvMDStar = -998;
347
815e6bab 348 AliAODRecoCascadeHF* dstarD0pi = (AliAODRecoCascadeHF*)arrayDStartoD0pi->At(iDStartoD0pi);
349 if(!dstarD0pi->GetSecondaryVtx()) continue;
350 AliAODRecoDecayHF2Prong* theD0particle = (AliAODRecoDecayHF2Prong*)dstarD0pi->Get2Prong();
351 if (!theD0particle) continue;
bce70c96 352
815e6bab 353
354 // track quality cuts
355 Int_t isTkSelected = fCuts->IsSelected(dstarD0pi,AliRDHFCuts::kTracks); // quality cuts on tracks
356 // region of interest + topological cuts + PID
357 Int_t isSelected=fCuts->IsSelected(dstarD0pi,AliRDHFCuts::kCandidate); //selected
815e6bab 358 //apply selections
359 if(!isTkSelected) continue;
360 if(!isSelected) continue;
361 if(!fCuts->IsInFiducialAcceptance(dstarD0pi->Pt(),dstarD0pi->YDstar())) continue;
bce70c96 362 Int_t mcLabelDStar = -999;
815e6bab 363 if(fmontecarlo){
364 // find associated MC particle for D* ->D0toKpi
bce70c96 365 mcLabelDStar = dstarD0pi->MatchToMC(413,421,pdgDgDStartoD0pi,pdgDgD0toKpi,fmcArray,kFALSE);
815e6bab 366 if(mcLabelDStar>=0) isDStarMCtag = kTRUE;
367 }
368
369 ptDStar = dstarD0pi->Pt();
370 phiDStar = dstarD0pi->Phi();
371 etaDStar = dstarD0pi->Eta();
372
bce70c96 373 phiDStar = fCorrelator->SetCorrectPhiRange(phiDStar); // set the phi of the D meson in the correct range
374
815e6bab 375 Int_t ptbin=fCuts->PtBin(dstarD0pi->Pt());
376
377 Double_t dmDStarWindow =0.0019;// 0.0019 = 3 sigma
378 Double_t mD0Window=0.074;
379
bce70c96 380 if (!fSystem){ // pp
381 if (ptbin==1) mD0Window = 0.026; //0.5-1
382 if (ptbin==2) mD0Window = 0.022; //1-2
383 if (ptbin==3) mD0Window = 0.024; //2-3
384 if (ptbin==4) mD0Window = 0.032;
385 if (ptbin==5) mD0Window = 0.032;
386 if (ptbin==6) mD0Window = 0.036;
387 if (ptbin==7) mD0Window = 0.036;
388 if (ptbin==8) mD0Window = 0.036;
389 if (ptbin==9) mD0Window = 0.058;
390 if (ptbin==10) mD0Window = 0.058;
391 if (ptbin>10) mD0Window = 0.074;
392 }
393 if(fSystem){// PbPb
394 if (ptbin==0) mD0Window = 0.032; //1-1
395 if (ptbin==1) mD0Window = 0.032; //2-3
396 if (ptbin==2) mD0Window = 0.032; //3-4
397 if (ptbin==3) mD0Window = 0.032; //4-5
398 if (ptbin==4) mD0Window = 0.036; //5-6
399 if (ptbin==5) mD0Window = 0.036; //6-8
400 if (ptbin==6) mD0Window = 0.055; //8-12
401 if (ptbin==7) mD0Window = 0.074; //12-16
402 if (ptbin==8) mD0Window = 0.074; //16-24
403 if (ptbin==9) mD0Window = 0.074; //24-35
404 }
815e6bab 405
406 invMassDZero = dstarD0pi->InvMassD0();
407 ((TH2F*)fOutput->FindObject("D0InvMass"))->Fill(ptDStar,invMassDZero);
408
409 deltainvMDStar = dstarD0pi->DeltaInvMass();
410
bce70c96 411
815e6bab 412 //good candidates
413 if (TMath::Abs(invMassDZero-mPDGD0)<mD0Window){
414
415 ((TH2F*)fOutput->FindObject("DeltaInvMass"))->Fill(ptDStar,deltainvMDStar);
416 if(TMath::Abs(deltainvMDStar-(mPDGDstar-mPDGD0))<dmDStarWindow){ // is in DStar peak region?
417
418 ((TH1F*)fOutput->FindObject("RecoPtDStar"))->Fill(ptDStar);
419 isInPeak = kTRUE;
bce70c96 420 ((TH2F*)fOutput->FindObject("PhiEtaTrigger"))->Fill(phiDStar,etaDStar);
815e6bab 421 }
422 }// end if good candidates
423
424 //sidebands
425 if (TMath::Abs(invMassDZero-mPDGD0)>1.3*mD0Window && TMath::Abs(invMassDZero-mPDGD0)<4.*mD0Window ){
426 ((TH2F*)fOutput->FindObject("bkgDeltaInvMass"))->Fill(ptDStar,deltainvMDStar);
427 ((TH2F*)fOutput->FindObject("D0InvMassinSB"))->Fill(ptDStar,invMassDZero);
428
429 if(TMath::Abs(deltainvMDStar-(mPDGDstar-mPDGD0))<dmDStarWindow){ // is in DStar peak region?
430 ((TH1F*)fOutput->FindObject("RecoPtBkg"))->Fill(ptDStar);
431 isInSideBand = kTRUE;
bce70c96 432 ((TH2F*)fOutput->FindObject("PhiEtaSideBand"))->Fill(phiDStar,etaDStar);
815e6bab 433 }
434
435 }//end if sidebands
bce70c96 436 // getting the number of triggers in the MCtag D* case
437
815e6bab 438
bce70c96 439 if(fmontecarlo && isDStarMCtag) ((TH1F*)fOutput->FindObject("MCtagPtDStar"))->Fill(ptDStar);
440
815e6bab 441
442 if(!isInPeak && !isInSideBand) continue; // skip if it is not side band or peak event - SAVE CPU TIME
443
53454b81 444 isDStarCand = kTRUE;
bce70c96 445
446 fCorrelator->SetTriggerParticleProperties(ptDStar,phiDStar,etaDStar); // pass to the object the necessary trigger part parameters
c84dbedf 447
448 Short_t daughtercharge = ((AliAODTrack*)theD0particle->GetDaughter(0))->Charge();
449 fCorrelator->SetTriggerParticleDaughterCharge(daughtercharge);
bce70c96 450
451
815e6bab 452 Int_t trackiddaugh0 = ((AliAODTrack*)theD0particle->GetDaughter(0))->GetID();
453 Int_t trackiddaugh1 = ((AliAODTrack*)theD0particle->GetDaughter(1))->GetID();
454 Int_t trackidsoftPi = ((AliAODTrack*)dstarD0pi->GetBachelor())->GetID();
455
bce70c96 456 Bool_t execPool = fCorrelator->ProcessEventPool();
457 if(fmixing && !execPool) {
458 AliInfo("Mixed event analysis: pool is not ready");
459 continue;
460 }
461
462 Int_t NofEventsinPool = 1;
463 if(fmixing) NofEventsinPool = fCorrelator->GetNofEventsInPool();
815e6bab 464
bce70c96 465 for (Int_t jMix =0; jMix < NofEventsinPool; jMix++){// loop on events in the pool; if it is SE analysis, stops at one
466
467 Bool_t analyzetracks = fCorrelator->ProcessAssociatedTracks(jMix);
468
469 if(!analyzetracks) {
470 AliInfo("AliHFCorrelator::Cannot process the track array");
471 continue;
472 }
473
53454b81 474 //initialization of variables for correlations with leading particles
475 Double_t DeltaPhiLeading = -999.;
476 Double_t DeltaEtaLeading = -999.;
477 //Double_t ptleading = -999.;
478 Int_t labelleading = -999;
bce70c96 479
480 Int_t NofTracks = fCorrelator->GetNofTracks();
53454b81 481
bce70c96 482 for(Int_t iTrack = 0; iTrack<NofTracks; iTrack++){ // looping on track candidates
483
484 Bool_t runcorrelation = fCorrelator->Correlate(iTrack);
485 if(!runcorrelation) continue;
486
487 Double_t DeltaPhi = fCorrelator->GetDeltaPhi();
488 Double_t DeltaEta = fCorrelator->GetDeltaEta();
489
490 AliReducedParticle * hadron = fCorrelator->GetAssociatedParticle();
491
492 Double_t ptHad = hadron->Pt();
493 Double_t phiHad = hadron->Phi();
494 Double_t etaHad = hadron->Eta();
495 Double_t label = hadron->GetLabel();
53454b81 496 Int_t trackid = hadron->GetID();
bce70c96 497
498 phiHad = fCorrelator->SetCorrectPhiRange(phiHad);
499
500 if(!fmixing){ // skip D* Daughetrs
501 if(trackid == trackiddaugh0) continue;
502 if(trackid == trackiddaugh1) continue;
503 if(trackid == trackidsoftPi) continue;
504 }
505
506 // from here on it is up to the user to decide what object to fill
815e6bab 507
508 if(fmontecarlo && isDStarMCtag){ // check correlations of MC tagged DStars in MonteCarlo
bce70c96 509
53454b81 510 Bool_t* PartSource = fCuts2->IsMCpartFromHF(label,fmcArray); // check source of associated particle (hadron/kaon/K0)
bce70c96 511 FillMCTagCorrelations(ptDStar,DeltaPhi,DeltaEta,ptHad,PartSource);
53454b81 512
513
514 ((TH3F*)fOutputMC->FindObject("MCPhiEtaPart"))->Fill(phiHad,etaHad,0);
515 if(PartSource[0]) ((TH3F*)fOutputMC->FindObject("MCPhiEtaPart"))->Fill(phiHad,etaHad,1);
516 if(PartSource[1]) ((TH3F*)fOutputMC->FindObject("MCPhiEtaPart"))->Fill(phiHad,etaHad,2);
517 if(PartSource[2]&&PartSource[0]) ((TH3F*)fOutputMC->FindObject("MCPhiEtaPart"))->Fill(phiHad,etaHad,3);
518 if(PartSource[2]&&PartSource[1]) ((TH3F*)fOutputMC->FindObject("MCPhiEtaPart"))->Fill(phiHad,etaHad,4);
519 if(PartSource[3]) ((TH3F*)fOutputMC->FindObject("MCPhiEtaPart"))->Fill(phiHad,etaHad,5);
520
bce70c96 521
815e6bab 522 }
bce70c96 523
815e6bab 524 if(isInPeak) {
2faf0b4b 525
bce70c96 526 if(fselect==1) ((TH3D*)fOutput->FindObject("DPhiDStarHadron"))->Fill(DeltaPhi,ptDStar,DeltaEta);
527 if(fselect==2) ((TH3D*)fOutput->FindObject("DPhiDStarKaon"))->Fill(DeltaPhi,ptDStar,DeltaEta);
528 if(fselect==3) ((TH3D*)fOutput->FindObject("DPhiDStarKZero"))->Fill(DeltaPhi,ptDStar,DeltaEta);
529 ((TH2F*)fOutput->FindObject("PhiEtaPart"))->Fill(phiHad,etaHad);
530 //counterPeak++; // count tracks per peak per event
2faf0b4b 531
bce70c96 532 }
815e6bab 533
bce70c96 534 if(isInSideBand) {
535
536 if(fselect==1) ((TH3D*)fOutput->FindObject("bkgDPhiDStarHadron"))->Fill(DeltaPhi,ptDStar,DeltaEta);
537 if(fselect==2) ((TH3D*)fOutput->FindObject("bkgDPhiDStarKaon"))->Fill(DeltaPhi,ptDStar,DeltaEta);
538 if(fselect==3) ((TH3D*)fOutput->FindObject("bkgDPhiDStarKZero"))->Fill(DeltaPhi,ptDStar,DeltaEta);
539
2faf0b4b 540
815e6bab 541
bce70c96 542 //counterSB++;
543 }
815e6bab 544
bce70c96 545
546 } // end loop on track candidates
53454b81 547
548 // fill the leading particle histograms
549
550 if(isInPeak) ((TH3D*)fOutput->FindObject("LeadingCand"))->Fill(DeltaPhiLeading,ptDStar,DeltaEtaLeading);
551 if(isInSideBand) ((TH3D*)fOutput->FindObject("LeadingSB"))->Fill(DeltaPhiLeading,ptDStar,DeltaEtaLeading);
552
553 if(fmontecarlo && isDStarMCtag){
554 Bool_t* LeadPartSource = fCuts2->IsMCpartFromHF(labelleading,fmcArray);
555 FillMCTagLeadingCorrelations(ptDStar,DeltaPhiLeading,DeltaEtaLeading,LeadPartSource);
556
557 }
558
bce70c96 559 } // end loop on events in the pool
560
815e6bab 561 }// end loop on D* candidates
53454b81 562
563
bce70c96 564 Bool_t updated = fCorrelator->PoolUpdate();
53454b81 565
566 if(updated) EventMixingChecks(aodEvent);
bce70c96 567 if(!updated) AliInfo("Pool was not updated");
815e6bab 568
815e6bab 569
c84dbedf 570
815e6bab 571
572} //end the exec
573
574//________________________________________ terminate ___________________________
575void AliAnalysisTaskDStarCorrelations::Terminate(Option_t*)
576{
577 // The Terminate() function is the last function to be called during
578 // a query. It always runs on the client, it can be used to present
579 // the results graphically or save the results to file.
580
581 AliAnalysisTaskSE::Terminate();
582
583 fOutput = dynamic_cast<TList*> (GetOutputData(1));
584 if (!fOutput) {
585 printf("ERROR: fOutput not available\n");
586 return;
587 }
588
589 return;
590}
591
592
815e6bab 593//_____________________________________________________
594void AliAnalysisTaskDStarCorrelations::DefineHistoForAnalysis(){
595
596 Double_t Pi = TMath::Pi();
597 Int_t nbinscorr = 32;
598 Double_t lowcorrbin = -0.5*Pi - Pi/32; // shift the bin by half the width so that at 0 is it the bin center
599 Double_t upcorrbin = 1.5*Pi - Pi/32;
600
601 // ========================= histograms for both Data and MonteCarlo
602
603
53454b81 604 TH1D * NofEvents = new TH1D("NofEvents","NofEvents",11,0,11);
815e6bab 605 fOutput->Add(NofEvents);
53454b81 606
607
608
609
610
815e6bab 611 TH2F *D0InvMass = new TH2F("D0InvMass","K#pi invariant mass distribution",300,0,30,1500,0.5,3.5);
612 fOutput->Add(D0InvMass);
613
614 TH2F *D0InvMassinSB = new TH2F("D0InvMassinSB","K#pi invariant mass distribution in sb",300,0,30,1500,0.5,3.5);
615 fOutput->Add(D0InvMassinSB);
616
617 TH2F *DeltaInvMass = new TH2F("DeltaInvMass","K#pi#pi - K#pi invariant mass distribution",300,0,30,750,0.1,0.2);
618 fOutput->Add(DeltaInvMass);
619
620 TH2F *bkgDeltaInvMass = new TH2F("bkgDeltaInvMass","K#pi#pi - K#pi invariant mass distribution",300,0,30,750,0.1,0.2);
621 fOutput->Add(bkgDeltaInvMass);
622
53454b81 623 TH1F *RecoPtDStar = new TH1F("RecoPtDStar","RECO DStar pt distribution",50,0,50);
815e6bab 624 fOutput->Add(RecoPtDStar);
625
53454b81 626 TH1F *RecoPtBkg = new TH1F("RecoPtBkg","RECO pt distribution side bands",50,0,50);
815e6bab 627 fOutput->Add(RecoPtBkg);
628
53454b81 629 TH1F *MCtagPtDStar = new TH1F("MCtagPtDStar","RECO pt of MCtagged DStars side bands",50,0,50);
bce70c96 630 fOutput->Add(MCtagPtDStar);
631
815e6bab 632 TH2F *KZeroSpectra = new TH2F("KZeroSpectra","Spectra of K0s",500,0.3,0.8,250,0,25);
633 if(fselect==3) fOutput->Add(KZeroSpectra);
634
635 TH2F *KZeroSpectraifHF = new TH2F("KZeroSpectraifHF","Spectra of K0s in association with a D*",500,0.3,0.8,250,0,25);
636 if(fselect==3) fOutput->Add(KZeroSpectraifHF);
637
638 TH1D * NofTracksInPeak = new TH1D("NofTracksInPeak","NofTracksInPeak",500,0.5,500.5);
639 fOutput->Add(NofTracksInPeak);
640
641 TH1D * NofTracksInSB = new TH1D("NofTracksInSB","NofTracksInSB",500,0.5,500.5);
642 fOutput->Add(NofTracksInSB);
643
644 TH2I * EventMixingCheck = new TH2I("EventMixingCheck","EventMixingCheck",5,-0.5,4.5,7,-0.5,6.5);
645 if(fmixing) fOutput->Add(EventMixingCheck);
646
53454b81 647
815e6bab 648
649
815e6bab 650
bce70c96 651 TH2F * PhiEtaTrigger = new TH2F("PhiEtaTrigger","#phi distribution of the trigger particle",36,-0.5*Pi,1.5*Pi,18,-0.9,0.9);
652 fOutput->Add(PhiEtaTrigger);
815e6bab 653
bce70c96 654 TH2F * PhiEtaSideBand = new TH2F("PhiEtaSideBand","#phi distribution of the sideband particle",36,-0.5*Pi,1.5*Pi,18,-0.9,0.9);
655 fOutput->Add(PhiEtaSideBand);
815e6bab 656
bce70c96 657 TH2F * PhiEtaPart = new TH2F("PhiEtaPart","#phi distribution of the associated particle",36,-0.5*Pi,1.5*Pi,18,-0.9,0.9);
658 fOutput->Add(PhiEtaPart);
53454b81 659
660
815e6bab 661 //correlations histograms
662 TString histoname1 = "DPhiDStar";
663 if(fselect==1) histoname1 += "Hadron";
664 if(fselect==2) histoname1 += "Kaon";
665 if(fselect==3) histoname1 += "KZero";
815e6bab 666
815e6bab 667
53454b81 668 TH3D * DPhiDStar = new TH3D(histoname1.Data(),histoname1.Data(),nbinscorr,lowcorrbin,upcorrbin,50,0,50,39,-1.95,1.95);
669
670 TH3D * DPhiDStarKZero1 = new TH3D("DPhiDStarKZero1","DPhiDStarKZero1",nbinscorr,lowcorrbin,upcorrbin,50,0,50,39,-1.95,1.95);
815e6bab 671
672 //side band background histograms
673 TString histoname2 = "bkg";
674 histoname2 += histoname1;
53454b81 675 TH3D * bkgDPhiDStar = new TH3D(histoname2.Data(),histoname2.Data(),nbinscorr,lowcorrbin,upcorrbin,50,0,50,39,-1.95,1.95);
676 TH3D * bkgDPhiDStarKZero1 = new TH3D("bkgDPhiDStarKZero1","bkgDPhiDStarKZero1",nbinscorr,lowcorrbin,upcorrbin,50,0,50,39,-1.95,1.95);
815e6bab 677
678
679 fOutput->Add(DPhiDStar);
53454b81 680
815e6bab 681 if(fselect==3){fOutput->Add(DPhiDStarKZero1);}
682
683 fOutput->Add(bkgDPhiDStar);
53454b81 684
815e6bab 685 if(fselect==3){fOutput->Add(bkgDPhiDStarKZero1);}
53454b81 686
687
688 // leading particle
689 TH3D * leadingcand = new TH3D("LeadingCand","LeadingCand",nbinscorr,lowcorrbin,upcorrbin,50,0,50,39,-1.95,1.95);
690 TH3D * leadingsidebands = new TH3D("LeadingSB","LeadingSB",nbinscorr,lowcorrbin,upcorrbin,50,0,50,39,-1.95,1.95);
691
692 fOutput->Add(leadingcand);
693 fOutput->Add(leadingsidebands);
694
695 // ========================= histos for analysis on MC only
696
697 TH1D * EventTypeMC = new TH1D("EventTypeMC","EventTypeMC",100,-0.5,99.5);
698 if(fmontecarlo) fOutputMC->Add(EventTypeMC);
699
700 TH1F * MCSources = new TH1F("MCSources","Origin of associated particles in MC", 10, -0.5, 9.5);
701 MCSources->GetXaxis()->SetBinLabel(1,"All ");
702 MCSources->GetXaxis()->SetBinLabel(2," from hadron Heavy flavour");
703 MCSources->GetXaxis()->SetBinLabel(3," from c->D");
704 MCSources->GetXaxis()->SetBinLabel(4," from b->D");
705 MCSources->GetXaxis()->SetBinLabel(5," from b->B");
706 MCSources->GetXaxis()->SetBinLabel(6," from quark Heavy flavour");
707 MCSources->GetXaxis()->SetBinLabel(7," from c");
708 MCSources->GetXaxis()->SetBinLabel(8," from b");
709
710 if(fmontecarlo) fOutputMC->Add(MCSources);
711
712 // leading particle from mc source
713 TH1F * LeadingMCSources = new TH1F("LeadingMCSources","Origin of associated leading particles in MC", 10, -0.5, 9.5);
714 LeadingMCSources->GetXaxis()->SetBinLabel(1,"All ");
715 LeadingMCSources->GetXaxis()->SetBinLabel(2," from hadron Heavy flavour");
716 LeadingMCSources->GetXaxis()->SetBinLabel(3," from c->D");
717 LeadingMCSources->GetXaxis()->SetBinLabel(4," from b->D");
718 LeadingMCSources->GetXaxis()->SetBinLabel(5," from b->B");
719 LeadingMCSources->GetXaxis()->SetBinLabel(6," from quark Heavy flavour");
720 LeadingMCSources->GetXaxis()->SetBinLabel(7," from c");
721 LeadingMCSources->GetXaxis()->SetBinLabel(8," from b");
722
723 if(fmontecarlo) fOutputMC->Add(LeadingMCSources);
724
725 // all hadrons
815e6bab 726 TString histoname3 = "MCTag";
727 histoname3 += histoname1;
53454b81 728 TH3D * MCTagDPhiDStar = new TH3D(histoname3.Data(),histoname3.Data(),nbinscorr,lowcorrbin,upcorrbin,50,0,50,39,-1.95,1.95);
729
815e6bab 730 TString histoname44 = "CharmDOrigin";
731 histoname44 += histoname1;
732 histoname44 += "MC";
733
53454b81 734 TH3D * CharmDOriginDPhiDStar = new TH3D(histoname44.Data(),histoname44.Data(),nbinscorr,lowcorrbin,upcorrbin,50,0,50,39,-1.95,1.95);
815e6bab 735
736
737 TString histoname54 = "BeautyDOrigin";
738 histoname54 += histoname1;
739 histoname54 += "MC";
53454b81 740 TH3D * BeautyDOriginDPhiDStar = new TH3D(histoname54.Data(),histoname54.Data(),nbinscorr,lowcorrbin,upcorrbin,50,0,50,39,-1.95,1.95);
815e6bab 741
742 TString histoname55 = "BeautyBOrigin";
743 histoname55 += histoname1;
744 histoname55 += "MC";
53454b81 745 TH3D * BeautyBOriginDPhiDStar = new TH3D(histoname55.Data(),histoname55.Data(),nbinscorr,lowcorrbin,upcorrbin,50,0,50,39,-1.95,1.95);
746
747 TString histoname4 = "CharmQuarkOrigin";
748 histoname4 += histoname1;
749 histoname4 += "MC";
750 TH3D * CharmQuarkOriginDPhiDStar = new TH3D(histoname4.Data(),histoname4.Data(),nbinscorr,lowcorrbin,upcorrbin,50,0,50,39,-1.95,1.95);
751
752 TString histoname5 = "BeautyQuarkOrigin";
753 histoname5 += histoname1;
754 histoname5 += "MC";
755 TH3D * BeautyQuarkOriginDPhiDStar = new TH3D(histoname5.Data(),histoname5.Data(),nbinscorr,lowcorrbin,upcorrbin,50,0,50,39,-1.95,1.95);
756
757 if(fmontecarlo){
758
759 fOutputMC->Add(MCTagDPhiDStar);
760 fOutputMC->Add(CharmDOriginDPhiDStar);
761 fOutputMC->Add(BeautyDOriginDPhiDStar);
762 fOutputMC->Add(BeautyBOriginDPhiDStar);
763 fOutputMC->Add(CharmQuarkOriginDPhiDStar);
764 fOutputMC->Add(BeautyQuarkOriginDPhiDStar);
765
766 }
767
768 // ========================= histos for analysis on MC
769 // all leading hadron
770 TString Leadinghistoname3 = "LeadingMCTag";
771 Leadinghistoname3 += histoname1;
772 TH3D * LeadingMCTagDPhiDStar = new TH3D(Leadinghistoname3.Data(),Leadinghistoname3.Data(),nbinscorr,lowcorrbin,upcorrbin,50,0,50,39,-1.95,1.95);
773
774 TString Leadinghistoname44 = "LeadingCharmDOrigin";
775 Leadinghistoname44 += histoname1;
776 Leadinghistoname44 += "MC";
777
778 TH3D * LeadingCharmDOriginDPhiDStar = new TH3D(Leadinghistoname44.Data(),Leadinghistoname44.Data(),nbinscorr,lowcorrbin,upcorrbin,50,0,50,39,-1.95,1.95);
779
780
781 TString Leadinghistoname54 = "LeadingBeautyDOrigin";
782 Leadinghistoname54 += histoname1;
783 Leadinghistoname54 += "MC";
784 TH3D * LeadingBeautyDOriginDPhiDStar = new TH3D(Leadinghistoname54.Data(),Leadinghistoname54.Data(),nbinscorr,lowcorrbin,upcorrbin,50,0,50,39,-1.95,1.95);
785
786 TString Leadinghistoname55 = "LeadingBeautyBOrigin";
787 Leadinghistoname55 += histoname1;
788 Leadinghistoname55 += "MC";
789 TH3D * LeadingBeautyBOriginDPhiDStar = new TH3D(Leadinghistoname55.Data(),Leadinghistoname55.Data(),nbinscorr,lowcorrbin,upcorrbin,50,0,50,39,-1.95,1.95);
790
791 TString Leadinghistoname4 = "LeadingCharmQuarkOrigin";
792 Leadinghistoname4 += histoname1;
793 Leadinghistoname4 += "MC";
794 TH3D * LeadingCharmQuarkOriginDPhiDStar = new TH3D(Leadinghistoname4.Data(),Leadinghistoname4.Data(),nbinscorr,lowcorrbin,upcorrbin,50,0,50,39,-1.95,1.95);
795
796 TString Leadinghistoname5 = "LeadingBeautyQuarkOrigin";
797 Leadinghistoname5 += histoname1;
798 Leadinghistoname5 += "MC";
799 TH3D * LeadingBeautyQuarkOriginDPhiDStar = new TH3D(Leadinghistoname5.Data(),Leadinghistoname5.Data(),nbinscorr,lowcorrbin,upcorrbin,50,0,50,39,-1.95,1.95);
800
801
802
815e6bab 803
804 if(fmontecarlo){
53454b81 805
806 fOutputMC->Add(LeadingMCTagDPhiDStar);
807 fOutputMC->Add(LeadingCharmDOriginDPhiDStar);
808 fOutputMC->Add(LeadingBeautyDOriginDPhiDStar);
809 fOutputMC->Add(LeadingBeautyBOriginDPhiDStar);
810 fOutputMC->Add(LeadingCharmQuarkOriginDPhiDStar);
811 fOutputMC->Add(LeadingBeautyQuarkOriginDPhiDStar);
812
813 }
815e6bab 814
53454b81 815 TH3F * MCPhiEtaPart = new TH3F("MCPhiEtaPart","#phi distribution of the associated particle",36,-0.5*Pi,1.5*Pi,50,-2.5,2.5,6,-0.5,6.5);
816 MCPhiEtaPart->GetZaxis()->SetBinLabel(1,"All particles");
817 MCPhiEtaPart->GetZaxis()->SetBinLabel(2,"from c quark");
818 MCPhiEtaPart->GetZaxis()->SetBinLabel(3,"from b quark");
819 MCPhiEtaPart->GetZaxis()->SetBinLabel(4,"from D from c");
820 MCPhiEtaPart->GetZaxis()->SetBinLabel(5,"from D from b");
821 MCPhiEtaPart->GetZaxis()->SetBinLabel(6,"from B from b");
822 if(fmontecarlo) fOutputMC->Add(MCPhiEtaPart);
823
824 // ============================= EVENT MIXING CHECKS ======================================
825
826 Int_t MaxNofEvents = fCuts2->GetMaxNEventsInPool();
827 Int_t MinNofTracks = fCuts2->GetMinNTracksInPool();
828 Int_t NofCentBins = fCuts2->GetNCentPoolBins();
829 Double_t * CentBins = fCuts2->GetCentPoolBins();
830 Int_t NofZVrtxBins = fCuts2->GetNZvtxPoolBins();
831 Double_t *ZVrtxBins = fCuts2->GetZvtxPoolBins();
832
833 Int_t k =0;
834
835 if(fSystem) k = 100; // PbPb centrality
836 if(!fSystem) k = NofCentBins; // pp multiplicity
837
838
839 Double_t minvalue = CentBins[0];
840 Double_t maxvalue = CentBins[NofCentBins+1];
841 Double_t Zminvalue = ZVrtxBins[0];
842 Double_t Zmaxvalue = ZVrtxBins[NofCentBins+1];
815e6bab 843
815e6bab 844
845
53454b81 846 Double_t Nevents[]={0,2*MaxNofEvents/10,4*MaxNofEvents/10,6*MaxNofEvents/10,8*MaxNofEvents/10,MaxNofEvents};
847 Double_t * events = Nevents;
848
849 TH3D * EventsPerPoolBin = new TH3D("EventsPerPoolBin","Number of events in bin pool",NofCentBins,CentBins,NofZVrtxBins,ZVrtxBins,5,events);
850 EventsPerPoolBin->GetXaxis()->SetTitle("Centrality/multiplicity ");
851 EventsPerPoolBin->GetYaxis()->SetTitle("Z vertex [cm]");
852 EventsPerPoolBin->GetZaxis()->SetTitle("Number of events in pool bin");
853 if(fmixing) fOutput->Add(EventsPerPoolBin);
854
855 Int_t MaxNofTracks = (MaxNofEvents+1)*MinNofTracks;
856 Int_t Diff = MaxNofTracks-MinNofTracks;
857
858 Double_t Ntracks[]={MinNofTracks,MinNofTracks+Diff/5,MinNofTracks+2*Diff/5,MinNofTracks+3*Diff/5,MinNofTracks+4*Diff/5,MaxNofTracks};
859 Double_t * trackN = Ntracks;
860
861 TH3D * NofTracksPerPoolBin = new TH3D("NofTracksPerPoolBin","Number of tracks in bin pool",NofCentBins,CentBins,NofZVrtxBins,ZVrtxBins,5,trackN);
862 NofTracksPerPoolBin->GetXaxis()->SetTitle("Centrality/multiplicity ");
863 NofTracksPerPoolBin->GetYaxis()->SetTitle("Z vertex [cm]");
864 NofTracksPerPoolBin->GetZaxis()->SetTitle("Number of tracks per bin");
865
866 if(fmixing) fOutput->Add(NofTracksPerPoolBin);
867
868 TH2D * NofPoolBinCalls = new TH2D("NofPoolBinCalls","Number of tracks in bin pool",NofCentBins,CentBins,NofZVrtxBins,ZVrtxBins);
869 NofPoolBinCalls->GetXaxis()->SetTitle("Centrality/multiplicity ");
870 NofPoolBinCalls->GetYaxis()->SetTitle("Z vertex [cm]");
871 if(fmixing) fOutput->Add(NofPoolBinCalls);
872
873
874
875 TH2D * EventProps = new TH2D("EventProps","Number of tracks in bin pool",k,minvalue,maxvalue,100,Zminvalue,Zmaxvalue);
876 EventProps->GetXaxis()->SetTitle("Centrality/multiplicity ");
877 EventProps->GetYaxis()->SetTitle("Z vertex [cm]");
878 if(fmixing) fOutput->Add(EventProps);
815e6bab 879
880}
881
882
815e6bab 883
bce70c96 884//____________________________ Function for MC correlations ___________________________________________________
53454b81 885void AliAnalysisTaskDStarCorrelations::FillMCTagCorrelations(Double_t ptTrig, Double_t DelPhi, Double_t DelEta, Double_t ptTrack, Bool_t *mcSource){
815e6bab 886
53454b81 887
888
889
890
891 if(fselect==1) ((TH3D*)fOutputMC->FindObject("MCTagDPhiDStarHadron"))->Fill(DelPhi,ptTrig,DelEta);
892 if(fselect==2 && ptTrack <1.5) ((TH3D*)fOutputMC->FindObject("MCTagDPhiDStarKaon"))->Fill(DelPhi,ptTrig,DelEta);
893 if(fselect==3) ((TH3D*)fOutputMC->FindObject("MCTagDPhiDStarKZero"))->Fill(DelPhi,ptTrig,DelEta);
894
895
896
897 ((TH1F*)fOutputMC->FindObject("MCSources"))->Fill(0);
898
899 if(fDebugLevel){
900 std::cout << "MC source " << mcSource[0] << " " << mcSource[1] << " " << mcSource[2] << " " << mcSource[3] << std::endl;
901
902 if(mcSource[0]) std::cout << "mcSource 0 " << std::endl;
903 if(mcSource[1]) std::cout << "mcSource 1 " << std::endl;
904 if(mcSource[2]) std::cout << "mcSource 2 " << std::endl;
905 if(mcSource[3]) std::cout << "mcSource 3 " << std::endl;
906
907 }
908 if(mcSource[0]){ // is from charm quark
909 ((TH1F*)fOutputMC->FindObject("MCSources"))->Fill(5); // all HF quarks
910 ((TH1F*)fOutputMC->FindObject("MCSources"))->Fill(6); // charm quarks
911 if(fselect==1) ((TH3D*)fOutputMC->FindObject("CharmQuarkOriginDPhiDStarHadronMC"))->Fill(DelPhi,ptTrig,DelEta);
912 if(fselect==2 && ptTrack <1.5) ((TH3D*)fOutputMC->FindObject("CharmQuarkOriginDPhiDStarKaonMC"))->Fill(DelPhi,ptTrig,DelEta);
913 if(fselect==3) ((TH3D*)fOutputMC->FindObject("CharmQuarkOriginDPhiDStarKZeroMC"))->Fill(DelPhi,ptTrig,DelEta);
914 }
915
916 if(mcSource[1]){ // is from b quark
917 ((TH1F*)fOutputMC->FindObject("MCSources"))->Fill(5); // all HF quarks
918 ((TH1F*)fOutputMC->FindObject("MCSources"))->Fill(7); // beauty quarks
919 if(fselect==1) ((TH3D*)fOutputMC->FindObject("BeautyQuarkOriginDPhiDStarHadronMC"))->Fill(DelPhi,ptTrig,DelEta);
920 if(fselect==2 && ptTrack <1.5) ((TH3D*)fOutputMC->FindObject("BeautyQuarkOriginDPhiDStarKaonMC"))->Fill(DelPhi,ptTrig,DelEta);
921 if(fselect==3) ((TH3D*)fOutputMC->FindObject("BeautyQuarkOriginDPhiDStarKZeroMC"))->Fill(DelPhi,ptTrig,DelEta);
922
923 }
924
925 if(mcSource[2]&&mcSource[0]){ // is from D meson and charm quark
926 ((TH1F*)fOutputMC->FindObject("MCSources"))->Fill(1); // all HF mesons
927 ((TH1F*)fOutputMC->FindObject("MCSources"))->Fill(2); // charm + D
928 if(fselect==1) ((TH3D*)fOutputMC->FindObject("CharmDOriginDPhiDStarHadronMC"))->Fill(DelPhi,ptTrig,DelEta);
929 if(fselect==2 && ptTrack <1.5) ((TH3D*)fOutputMC->FindObject("CharmDOriginDPhiDStarKaonMC"))->Fill(DelPhi,ptTrig,DelEta);
930 if(fselect==3) ((TH3D*)fOutputMC->FindObject("CharmDOriginDPhiDStarKZeroMC"))->Fill(DelPhi,ptTrig,DelEta);
931 }
932
933 if(mcSource[2]&&mcSource[1]){ // is from D meson and b quark
934 ((TH1F*)fOutputMC->FindObject("MCSources"))->Fill(1); // all HF mesons
935 ((TH1F*)fOutputMC->FindObject("MCSources"))->Fill(3); // beauty + D
936 if(fselect==1) ((TH3D*)fOutputMC->FindObject("BeautyDOriginDPhiDStarHadronMC"))->Fill(DelPhi,ptTrig,DelEta);
937 if(fselect==2 && ptTrack <1.5) ((TH3D*)fOutputMC->FindObject("BeautyDOriginDPhiDStarKaonMC"))->Fill(DelPhi,ptTrig,DelEta);
938 if(fselect==3) ((TH3D*)fOutputMC->FindObject("BeautyDOriginDPhiDStarKZeroMC"))->Fill(DelPhi,ptTrig,DelEta);
939 }
940
941 return;
942}
815e6bab 943
53454b81 944//____________________________ Function for MC leading part correlations ___________________________________________________
945void AliAnalysisTaskDStarCorrelations::FillMCTagLeadingCorrelations(Double_t ptTrig, Double_t DelPhi, Double_t DelEta, Bool_t *mcSource){
946 // correlations with leading hadron on MC
947
948 if(fselect==1) ((TH3D*)fOutputMC->FindObject("LeadingMCTagDPhiDStarHadron"))->Fill(DelPhi,ptTrig,DelEta);
949
950
951
952 ((TH1F*)fOutputMC->FindObject("LeadingMCSources"))->Fill(0);
953
954 if(fDebugLevel){ std::cout << "MC source " << mcSource[0] << " " << mcSource[1] << " " << mcSource[2] << " " << mcSource[3] << std::endl;
955
956 if(mcSource[0]) std::cout << "mcSource 0 " << std::endl;
957 if(mcSource[1]) std::cout << "mcSource 1 " << std::endl;
958 if(mcSource[2]) std::cout << "mcSource 2 " << std::endl;
959 if(mcSource[3]) std::cout << "mcSource 3 " << std::endl;
960 }
961
962 if(mcSource[0]){ // is from charm quark
963 ((TH1F*)fOutputMC->FindObject("LeadingMCSources"))->Fill(5); // all HF quarks
964 ((TH1F*)fOutputMC->FindObject("LeadingMCSources"))->Fill(6); // charm quarks
965 if(fselect==1) ((TH3D*)fOutputMC->FindObject("LeadingCharmQuarkOriginDPhiDStarHadronMC"))->Fill(DelPhi,ptTrig,DelEta);
966
967 }
968
969 if(mcSource[1]){ // is from b quaLeadingrk
970 ((TH1F*)fOutputMC->FindObject("LeadingMCSources"))->Fill(5); // all HF quarks
971 ((TH1F*)fOutputMC->FindObject("LeadingMCSources"))->Fill(7); // beauty quarks
972 if(fselect==1) ((TH3D*)fOutputMC->FindObject("LeadingBeautyQuarkOriginDPhiDStarHadronMC"))->Fill(DelPhi,ptTrig,DelEta);
973
974
975 }
976
977 if(mcSource[2]&&mcSource[0]){ // is from D meson and charm quark
978 ((TH1F*)fOutputMC->FindObject("LeadingMCSources"))->Fill(1); // all HF mesons
979 ((TH1F*)fOutputMC->FindObject("LeadingMCSources"))->Fill(2); // charm + D
980 if(fselect==1) ((TH3D*)fOutputMC->FindObject("LeadingCharmDOriginDPhiDStarHadronMC"))->Fill(DelPhi,ptTrig,DelEta);
981
982 }
983
984 if(mcSource[2]&&mcSource[1]){ // is from D meson and b quark
985 ((TH1F*)fOutputMC->FindObject("LeadingMCSources"))->Fill(1); // all HF mesons
986 ((TH1F*)fOutputMC->FindObject("LeadingMCSources"))->Fill(3); // beauty + D
987 if(fselect==1) ((TH3D*)fOutputMC->FindObject("LeadingBeautyDOriginDPhiDStarHadronMC"))->Fill(DelPhi,ptTrig,DelEta);
988
989 }
990
991
992 return;
993}
815e6bab 994
2faf0b4b 995
53454b81 996//____________________________ Run checks on event mixing ___________________________________________________
997void AliAnalysisTaskDStarCorrelations::EventMixingChecks(AliAODEvent* AOD){
815e6bab 998
53454b81 999 AliCentrality *centralityObj = 0;
1000 Int_t multiplicity = -1;
1001 Double_t MultipOrCent = -1;
815e6bab 1002
53454b81 1003 // get the pool for event mixing
1004 if(!fSystem){ // pp
1005 multiplicity = AOD->GetNTracks();
1006 MultipOrCent = multiplicity; // convert from Int_t to Double_t
815e6bab 1007 }
53454b81 1008 if(fSystem){ // PbPb
1009
1010 centralityObj = AOD->GetHeader()->GetCentralityP();
1011 MultipOrCent = centralityObj->GetCentralityPercentileUnchecked("V0M");
1012 AliInfo(Form("Centrality is %f", MultipOrCent));
815e6bab 1013 }
53454b81 1014
1015 AliAODVertex *vtx = AOD->GetPrimaryVertex();
1016 Double_t zvertex = vtx->GetZ(); // zvertex
1017
1018
1019
1020
1021 AliEventPool * pool = fCorrelator->GetPool();
1022
2faf0b4b 1023
53454b81 1024
1025
1026 ((TH2D*)fOutput->FindObject("NofPoolBinCalls"))->Fill(MultipOrCent,zvertex); // number of calls of pool
1027 ((TH2D*)fOutput->FindObject("EventProps"))->Fill(MultipOrCent,zvertex); // event properties
1028
1029 ((TH3D*)fOutput->FindObject("EventsPerPoolBin"))->Fill(MultipOrCent,zvertex,pool->NTracksInPool()); // number of events in the pool
1030 ((TH3D*)fOutput->FindObject("NofTracksPerPoolBin"))->Fill(MultipOrCent,zvertex,pool->GetCurrentNEvents()); // number of calls of pool
815e6bab 1031}
53454b81 1032
815e6bab 1033
1034
1035
1036