]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGHF/vertexingHF/AliAnalysisTaskSELc2V0bachelor.cxx
Coverity
[u/mrichter/AliRoot.git] / PWGHF / vertexingHF / AliAnalysisTaskSELc2V0bachelor.cxx
CommitLineData
992ba7d8 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 * appeuear 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/* $Id$ */
17
18//
19//
20// Base class for Lc2V0 Analysis
21//
22//
23// The Lc spectra study is done 2D histograms:
24// cascade_invariantMass VS cascade_pT
25//
26// Cuts have been centralized in AliRDHFCutsLctoV0 class
27//
28//-------------------------------------------------------------------------
29//
30// Authors: A.De Caro(a,b), P. Pagano(b)
e7af8919 31// (a) Centro 'E.Fermi' - Roma
32// (b) INFN and University of Salerno
992ba7d8 33//
e7af8919 34// Contatcs: decaro@sa.infn.it
35// paola.pagano@sa.infn.it
992ba7d8 36//-------------------------------------------------------------------------
37
38#include <TSystem.h>
39#include <TParticle.h>
40#include <TParticlePDG.h>
41#include <TH1F.h>
a578b2da 42#include <TH1I.h>
992ba7d8 43#include <TH2F.h>
a578b2da 44#include <TTree.h>
992ba7d8 45#include "TROOT.h"
46#include <TDatabasePDG.h>
47#include <AliAnalysisDataSlot.h>
48#include <AliAnalysisDataContainer.h>
49#include "AliStack.h"
50#include "AliMCEvent.h"
51#include "AliAnalysisManager.h"
52#include "AliAODMCHeader.h"
53#include "AliAODHandler.h"
54#include "AliLog.h"
55#include "AliAODVertex.h"
56#include "AliAODRecoDecay.h"
57#include "AliAODRecoDecayHF.h"
58#include "AliAODRecoCascadeHF.h"
59#include "AliAnalysisVertexingHF.h"
60#include "AliESDtrack.h"
61#include "AliAODTrack.h"
62#include "AliAODv0.h"
63#include "AliAODMCParticle.h"
64#include "AliAnalysisTaskSE.h"
65#include "AliAnalysisTaskSELc2V0bachelor.h"
66#include "AliNormalizationCounter.h"
67#include "AliAODPidHF.h"
68#include "AliPIDResponse.h"
69#include "AliTOFPIDResponse.h"
70#include "AliInputEventHandler.h"
71
c64cb1f6 72using std::cout;
73using std::endl;
74
992ba7d8 75ClassImp(AliAnalysisTaskSELc2V0bachelor)
76
77//__________________________________________________________________________
78AliAnalysisTaskSELc2V0bachelor::AliAnalysisTaskSELc2V0bachelor():
79 AliAnalysisTaskSE(),
80 fUseMCInfo(kFALSE),
81 fOutput(0),
82 fOutputAll(0),
83 fOutputPIDBach(0),
84 fCEvents(0),
85 fPIDResponse(0),
86 fIsK0sAnalysis(kFALSE),
87 fCounter(0),
88 fProdCuts(0),
89 fAnalCuts(0),
0dbd1d4f 90 fListCuts(0),
91 fUseOnTheFlyV0(kFALSE),
a578b2da 92 fIsEventSelected(kFALSE),
93 fWriteVariableTree(kFALSE),
94 fVariablesTree(0),
95 fCandidateVariables(),
96 fVtx1(0),
97 fBzkG(0)
992ba7d8 98{
99 //
100 // Default ctor
101 //
102}
103//___________________________________________________________________________
0dbd1d4f 104AliAnalysisTaskSELc2V0bachelor::AliAnalysisTaskSELc2V0bachelor(const Char_t* name, AliRDHFCutsLctoV0* prodCuts,
a578b2da 105 AliRDHFCutsLctoV0* analCuts, Bool_t useOnTheFly,
106 Bool_t writeVariableTree) :
992ba7d8 107 AliAnalysisTaskSE(name),
108 fUseMCInfo(kFALSE),
109 fOutput(0),
110 fOutputAll(0),
111 fOutputPIDBach(0),
112 fCEvents(0),
113 fPIDResponse(0),
114 fIsK0sAnalysis(kFALSE),
115 fCounter(0),
116 fProdCuts(prodCuts),
117 fAnalCuts(analCuts),
0dbd1d4f 118 fListCuts(0),
119 fUseOnTheFlyV0(useOnTheFly),
a578b2da 120 fIsEventSelected(kFALSE),
121 fWriteVariableTree(writeVariableTree),
122 fVariablesTree(0),
123 fCandidateVariables(),
124 fVtx1(0),
125 fBzkG(0)
992ba7d8 126{
127 //
128 // Constructor. Initialization of Inputs and Outputs
129 //
130 Info("AliAnalysisTaskSELc2V0bachelor","Calling Constructor");
131
132 DefineOutput(1,TList::Class()); //conters
133 DefineOutput(2,TList::Class()); //All Entries output
134 DefineOutput(3,TList::Class()); //3sigma PID output
135 DefineOutput(4,AliNormalizationCounter::Class());
136 DefineOutput(5,TList::Class());
137
a578b2da 138 // Output slot #6 keeps a tree of the candidate variables after track selection
139 if (fWriteVariableTree) DefineOutput(6,TTree::Class()); //My private output
140
992ba7d8 141}
142
143//___________________________________________________________________________
144AliAnalysisTaskSELc2V0bachelor::~AliAnalysisTaskSELc2V0bachelor() {
145 //
146 // destructor
147 //
148 Info("~AliAnalysisTaskSELc2V0bachelor","Calling Destructor");
149
150 if (fOutput) {
151 delete fOutput;
152 fOutput = 0;
153 }
154
155 if (fOutputAll) {
156 delete fOutputAll;
157 fOutputAll = 0;
158 }
159
160 if (fOutputPIDBach) {
161 delete fOutputPIDBach;
162 fOutputPIDBach = 0;
163 }
164
165 if (fPIDResponse) {
166 delete fPIDResponse;
167 }
168
169 if (fCounter) {
170 delete fCounter;
171 fCounter = 0;
172 }
173
174 if (fProdCuts) {
175 delete fProdCuts;
176 fProdCuts = 0;
177 }
178
179 if (fAnalCuts) {
180 delete fAnalCuts;
181 fAnalCuts = 0;
182 }
183
184 if (fListCuts) {
185 delete fListCuts;
186 fListCuts = 0;
187 }
188
a578b2da 189 if(fVariablesTree){
190 delete fVariablesTree;
191 fVariablesTree = 0;
192 }
193
992ba7d8 194}
195//_________________________________________________
196void AliAnalysisTaskSELc2V0bachelor::Init() {
197 //
198 // Initialization
199 //
200
0dbd1d4f 201 fIsEventSelected=kFALSE;
202
992ba7d8 203 if (fDebug > 1) AliInfo("Init");
204
205 fListCuts = new TList();
206 fListCuts->SetOwner();
207 fListCuts->Add(new AliRDHFCutsLctoV0(*fProdCuts));
208 fListCuts->Add(new AliRDHFCutsLctoV0(*fAnalCuts));
209 PostData(5,fListCuts);
210
211 return;
212}
213
214//_________________________________________________
215void AliAnalysisTaskSELc2V0bachelor::UserExec(Option_t *)
216{
217 // user exec
218 if (!fInputEvent) {
219 AliError("NO EVENT FOUND!");
220 return;
221 }
222
223 AliAODEvent* aodEvent = dynamic_cast<AliAODEvent*>(fInputEvent);
224 TClonesArray *arrayLctopKos=0;
225
226 if (!aodEvent && AODEvent() && IsStandardAOD()) {
227 // In case there is an AOD handler writing a standard AOD, use the AOD
228 // event in memory rather than the input (ESD) event.
229 aodEvent = dynamic_cast<AliAODEvent*> (AODEvent());
230 // in this case the braches in the deltaAOD (AliAOD.VertexingHF.root)
231 // have to taken from the AOD event hold by the AliAODExtension
232 AliAODHandler* aodHandler = (AliAODHandler*)
233 ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
234
235 if (aodHandler->GetExtensions()) {
236 AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject("AliAOD.VertexingHF.root");
237 AliAODEvent *aodFromExt = ext->GetAOD();
238 arrayLctopKos=(TClonesArray*)aodFromExt->GetList()->FindObject("CascadesHF");
239 }
240 } else {
241 arrayLctopKos=(TClonesArray*)aodEvent->GetList()->FindObject("CascadesHF");
242 }
243
244 fCEvents->Fill(1);
245 fCounter->StoreEvent(aodEvent,fAnalCuts,fUseMCInfo);
246
0dbd1d4f 247 // AOD primary vertex
a578b2da 248 fVtx1 = (AliAODVertex*)aodEvent->GetPrimaryVertex();
249 if (!fVtx1) return;
0dbd1d4f 250
992ba7d8 251 // fix for temporary bug in ESDfilter
a578b2da 252 fBzkG = (Double_t)aodEvent->GetMagneticField();
253 if (TMath::Abs(fBzkG)<0.001) return;
992ba7d8 254 fCEvents->Fill(2);
255
a578b2da 256 Float_t zVertex = fVtx1->GetZ();
0dbd1d4f 257 ((TH1F*)(fOutput->FindObject("hZ2")))->Fill(zVertex);
992ba7d8 258
a578b2da 259 if (fVtx1->GetNContributors()<1) return;
992ba7d8 260 fCEvents->Fill(3);
261
0dbd1d4f 262 ((TH1F*)(fOutput->FindObject("hZ3")))->Fill(zVertex);
263
992ba7d8 264 if (!arrayLctopKos) {
265 AliInfo("Could not find array of HF cascades, skipping the event");
266 return;
267 } else {
0dbd1d4f 268 if (arrayLctopKos->GetEntriesFast()) {
992ba7d8 269 AliInfo(Form("Found %d cascades",arrayLctopKos->GetEntriesFast()));
270 }
271 }
992ba7d8 272 fCEvents->Fill(4);
0dbd1d4f 273 ((TH1F*)(fOutput->FindObject("hZ4")))->Fill(zVertex);
274
0dbd1d4f 275 ///////////////////////
276 Bool_t check1 = kFALSE;
277 TString firedTriggerClasses = aodEvent->GetFiredTriggerClasses(); // trigger class
278 if ( !fUseMCInfo && // don't do for MC...
279 (aodEvent->GetRunNumber()<136851 || aodEvent->GetRunNumber()>139517) ) { // ...and for PbPb 2010 data
280 if ( !(firedTriggerClasses.Contains("CINT1")) ) {
281 AliInfo(Form(" ======================== firedTriggerClasses.Data() = %s",firedTriggerClasses.Data()));
282 fCEvents->Fill(8);
283 ((TH1F*)(fOutput->FindObject("hZ8")))->Fill(zVertex);
284 check1 = kTRUE;
285 }
286 }
287
288 ULong64_t fTriggerMask=AliVEvent::kAnyINT;
289 Bool_t isSelectedAAA = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & fTriggerMask);
290 if (!isSelectedAAA) {
291 fCEvents->Fill(9);
292 ((TH1F*)(fOutput->FindObject("hZ9")))->Fill(zVertex);
293 }
294
295 if (!isSelectedAAA || check1) {
296 fCEvents->Fill(16);
297 ((TH1F*)(fOutput->FindObject("hZ16")))->Fill(zVertex);
298 }
299
300 fTriggerMask=AliVEvent::kAny;
301 Bool_t isSelectedBBB = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & fTriggerMask);
302 if (!isSelectedBBB) {
303 fCEvents->Fill(10);
304 ((TH1F*)(fOutput->FindObject("hZ10")))->Fill(zVertex);
305 }
306
a578b2da 307 TString titleVtx=fVtx1->GetTitle();
308 if (titleVtx.Contains("Z")) {
0dbd1d4f 309 fCEvents->Fill(11);
310 ((TH1F*)(fOutput->FindObject("hZ11")))->Fill(zVertex);
311 }
a578b2da 312 else if (titleVtx.Contains("3D")) {
0dbd1d4f 313 fCEvents->Fill(12);
314 ((TH1F*)(fOutput->FindObject("hZ12")))->Fill(zVertex);
315 } else {
316 fCEvents->Fill(13);
317 ((TH1F*)(fOutput->FindObject("hZ13")))->Fill(zVertex);
318 }
319
320 if (TMath::Abs(zVertex)<=fAnalCuts->GetMaxVtxZ()) {
321 fCEvents->Fill(14);
322 ((TH1F*)(fOutput->FindObject("hZ14")))->Fill(zVertex);
323 }
324
325 fIsEventSelected = fAnalCuts->IsEventSelected(aodEvent);
326 if ( fIsEventSelected ) {
327 fCEvents->Fill(7);
328 ((TH1F*)(fOutput->FindObject("hZ7")))->Fill(zVertex);
329 } else {
330 fCEvents->Fill(15);
331 ((TH1F*)(fOutput->FindObject("hZ15")))->Fill(zVertex);
0dbd1d4f 332 }
333 ///////////////////////
334
a578b2da 335 if ( !fIsEventSelected ) return; // don't take into account not selected events
992ba7d8 336
337 // mc analysis
338 TClonesArray *mcArray = 0;
339 AliAODMCHeader *mcHeader=0;
340
341 if (fUseMCInfo) {
342 // MC array need for maching
343 mcArray = dynamic_cast<TClonesArray*>(aodEvent->FindListObject(AliAODMCParticle::StdBranchName()));
344 if (!mcArray) {
345 AliError("Could not find Monte-Carlo in AOD");
346 return;
347 }
348 fCEvents->Fill(5); // in case of MC events
0dbd1d4f 349 ((TH1F*)(fOutput->FindObject("hZ5")))->Fill(zVertex);
992ba7d8 350
351 // load MC header
352 mcHeader = (AliAODMCHeader*)aodEvent->GetList()->FindObject(AliAODMCHeader::StdBranchName());
353 if (!mcHeader) {
354 AliError("AliAnalysisTaskSELc2V0bachelor::UserExec: MC header branch not found!\n");
355 return;
356 }
357 fCEvents->Fill(6);
0dbd1d4f 358 ((TH1F*)(fOutput->FindObject("hZ6")))->Fill(zVertex);
992ba7d8 359
992ba7d8 360 // check on MC Lc Daughter
361 SearchLcDaughter(mcArray);
362
363 }
364
992ba7d8 365 Int_t nSelectedProd = 0;
366 Int_t nSelectedAnal = 0;
0dbd1d4f 367 if (fIsK0sAnalysis) {
a578b2da 368 MakeAnalysisForLc2prK0S(arrayLctopKos,mcArray,
0dbd1d4f 369 nSelectedProd, fProdCuts, nSelectedAnal, fAnalCuts);
370
371 if (nSelectedAnal) {
372
373 ((TH1I*)(fOutput->FindObject("hEventsWithCandidates")))->Fill(4);
374 ((TH1F*)(fOutput->FindObject("hZ4a")))->Fill(zVertex);
375
0dbd1d4f 376 Bool_t check1a = kFALSE;
377 if ( !fUseMCInfo && // don't do for MC...
378 (aodEvent->GetRunNumber()<136851 || aodEvent->GetRunNumber()>139517) ) { // ...and for PbPb 2010 data
379 if ( !(firedTriggerClasses.Contains("CINT1")) ) {
380 AliInfo(Form(" ======================== firedTriggerClasses.Data() = %s",firedTriggerClasses.Data()));
381 ((TH1I*)(fOutput->FindObject("hEventsWithCandidates")))->Fill(8);
382 ((TH1F*)(fOutput->FindObject("hZ8a")))->Fill(zVertex);
383 check1a = kTRUE;
384 }
385 }
386
0dbd1d4f 387 fTriggerMask=AliVEvent::kAnyINT;
388 Bool_t isSelectedAAAa = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & fTriggerMask);
389 if (!isSelectedAAAa) {
390 ((TH1I*)(fOutput->FindObject("hEventsWithCandidates")))->Fill(9);
391 ((TH1F*)(fOutput->FindObject("hZ9a")))->Fill(zVertex);
392 }
393
394 if (!isSelectedAAAa || check1a) {
395 ((TH1I*)(fOutput->FindObject("hEventsWithCandidates")))->Fill(16);
396 ((TH1F*)(fOutput->FindObject("hZ16a")))->Fill(zVertex);
397 }
398
399 fTriggerMask=AliVEvent::kAny;
400 Bool_t isSelectedBBBa = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & fTriggerMask);
401 if (!isSelectedBBBa) {
402 ((TH1I*)(fOutput->FindObject("hEventsWithCandidates")))->Fill(10);
403 ((TH1F*)(fOutput->FindObject("hZ10a")))->Fill(zVertex);
404 }
405
a578b2da 406 if (titleVtx.Contains("Z")) {
0dbd1d4f 407 ((TH1I*)(fOutput->FindObject("hEventsWithCandidates")))->Fill(11);
408 ((TH1F*)(fOutput->FindObject("hZ11a")))->Fill(zVertex);
409 }
a578b2da 410 else if (titleVtx.Contains("3D")) {
0dbd1d4f 411 ((TH1I*)(fOutput->FindObject("hEventsWithCandidates")))->Fill(12);
412 ((TH1F*)(fOutput->FindObject("hZ12a")))->Fill(zVertex);
413 } else {
414 ((TH1I*)(fOutput->FindObject("hEventsWithCandidates")))->Fill(13);
415 ((TH1F*)(fOutput->FindObject("hZ13a")))->Fill(zVertex);
416 }
417
418 if (TMath::Abs(zVertex)<=fAnalCuts->GetMaxVtxZ()) {
419 ((TH1I*)(fOutput->FindObject("hEventsWithCandidates")))->Fill(14);
420 ((TH1F*)(fOutput->FindObject("hZ14a")))->Fill(zVertex);
421 }
422
0dbd1d4f 423 if ( fIsEventSelected ) {
424 ((TH1I*)(fOutput->FindObject("hEventsWithCandidates")))->Fill(7);
425 ((TH1F*)(fOutput->FindObject("hZ7a")))->Fill(zVertex);
426 } else {
427 ((TH1I*)(fOutput->FindObject("hEventsWithCandidates")))->Fill(15);
428 ((TH1F*)(fOutput->FindObject("hZ15a")))->Fill(zVertex);
429 }
430 }
431
432 }
433
992ba7d8 434
435 fCounter->StoreCandidates(aodEvent,nSelectedProd,kTRUE);
436 fCounter->StoreCandidates(aodEvent,nSelectedAnal,kFALSE);
437
438 PostData(1,fOutput);
439 PostData(2,fOutputAll);
440 PostData(3,fOutputPIDBach);
441 PostData(4,fCounter);
a578b2da 442 if (fWriteVariableTree) PostData(6,fVariablesTree);
992ba7d8 443
444}
445//________________________________________ terminate ___________________________
446void AliAnalysisTaskSELc2V0bachelor::Terminate(Option_t*)
447{
448 // The Terminate() function is the last function to be called during
449 // a query. It always runs on the client, it can be used to present
450 // the results graphically or save the results to file.
451
452 //AliInfo("Terminate","");
453 AliAnalysisTaskSE::Terminate();
454
455 fOutput = dynamic_cast<TList*> (GetOutputData(1));
456 if (!fOutput) {
457 AliError("fOutput not available");
458 return;
459 }
460
a578b2da 461 //fCEvents = dynamic_cast<TH1F*>(fOutput->FindObject("fCEvents"));
992ba7d8 462
463 fOutputAll = dynamic_cast<TList*> (GetOutputData(2));
464 if (!fOutputAll) {
465 AliError("fOutputAll not available");
466 return;
467 }
468
469 fOutputPIDBach = dynamic_cast<TList*> (GetOutputData(3));
470 if (!fOutputPIDBach) {
471 AliError("fOutputPIDBach not available");
472 return;
473 }
474
475 return;
476}
477//___________________________________________________________________________
478void AliAnalysisTaskSELc2V0bachelor::UserCreateOutputObjects() {
479 // output
480 AliInfo(Form("CreateOutputObjects of task %s\n", GetName()));
481
482 //slot #1
483 //OpenFile(1);
484 fOutput = new TList();
485 fOutput->SetOwner();
486 fOutput->SetName("chist0");
487
488 fOutputAll = new TList();
489 fOutputAll->SetOwner();
490 fOutputAll->SetName("listAll");
491
492 fOutputPIDBach = new TList();
493 fOutputPIDBach->SetOwner();
494 fOutputPIDBach->SetName("listPIDBach");
495
496 // define histograms
497 DefineHistograms();
498
499 AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
500 AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
501 fPIDResponse = inputHandler->GetPIDResponse();
502
503 if (fProdCuts->GetIsUsePID()){
504 fProdCuts->GetPidHF()->SetPidResponse(fPIDResponse);
505 fProdCuts->GetPidV0pos()->SetPidResponse(fPIDResponse);
506 fProdCuts->GetPidV0neg()->SetPidResponse(fPIDResponse);
507 fProdCuts->GetPidHF()->SetOldPid(kFALSE);
508 fProdCuts->GetPidV0pos()->SetOldPid(kFALSE);
509 fProdCuts->GetPidV0neg()->SetOldPid(kFALSE);
510 }
511 if (fAnalCuts->GetIsUsePID()){
512 fAnalCuts->GetPidHF()->SetPidResponse(fPIDResponse);
513 fAnalCuts->GetPidV0pos()->SetPidResponse(fPIDResponse);
514 fAnalCuts->GetPidV0neg()->SetPidResponse(fPIDResponse);
515 fAnalCuts->GetPidHF()->SetOldPid(kFALSE);
516 fAnalCuts->GetPidV0pos()->SetOldPid(kFALSE);
517 fAnalCuts->GetPidV0neg()->SetOldPid(kFALSE);
518 }
519
520 PostData(1,fOutput);
521 PostData(2,fOutputAll);
522 PostData(3,fOutputPIDBach);
523
524 fCounter = new AliNormalizationCounter("NormalizationCounter");
525 fCounter->Init();
526 PostData(4,fCounter);
a578b2da 527
528 // Output slot 6: tree of the candidate variables
529 if (fWriteVariableTree) {
530 const char* nameoutput = GetOutputSlot(6)->GetContainer()->GetName();
531 fVariablesTree = new TTree(nameoutput,"Candidates variables tree");
532 Int_t nVar = 71;
533 fCandidateVariables = new Float_t [nVar];
534 TString * fCandidateVariableNames = new TString[nVar];
535 fCandidateVariableNames[0]="isLcByMC";
536 fCandidateVariableNames[1]="isV0ByMC";
537 fCandidateVariableNames[2]="massLc2K0Sp";
538 fCandidateVariableNames[3]="massLc2Lambdapi";
539 fCandidateVariableNames[4]="massK0S";
540 fCandidateVariableNames[5]="massLambda";
541 fCandidateVariableNames[6]="massLambdaBar";
542 fCandidateVariableNames[7]="cosPAK0S";
543 fCandidateVariableNames[8]="dcaV0ptp";
544 fCandidateVariableNames[9]="tImpParBach";
545 fCandidateVariableNames[10]="tImpParV0";
546 fCandidateVariableNames[11]="nSigmaTPCpr";
547 fCandidateVariableNames[12]="nSigmaTPCpi";
548 fCandidateVariableNames[13]="nSigmaTPCka";
549 fCandidateVariableNames[14]="nSigmaTOFpr";
550 fCandidateVariableNames[15]="nSigmaTOFpi";
551 fCandidateVariableNames[16]="nSigmaTOFka";
552 fCandidateVariableNames[17]="bachelorPx";
553 fCandidateVariableNames[18]="bachelorPy";
554 fCandidateVariableNames[19]="bachelorPz";
555 fCandidateVariableNames[20]="V0positivePx";
556 fCandidateVariableNames[21]="V0positivePy";
557 fCandidateVariableNames[22]="V0positivePz";
558 fCandidateVariableNames[23]="V0negativePx";
559 fCandidateVariableNames[24]="V0negativePy";
560 fCandidateVariableNames[25]="V0negativePz";
561 fCandidateVariableNames[26]="qtLc";
562 fCandidateVariableNames[27]="alphaLc";
563 fCandidateVariableNames[28]="dcaV0postoPV";
564 fCandidateVariableNames[29]="dcaV0negtoPV";
565 fCandidateVariableNames[30]="bachelorPxDCA";
566 fCandidateVariableNames[31]="bachelorPyDCA";
567 fCandidateVariableNames[32]="bachelorPzDCA";
568 fCandidateVariableNames[33]="v0PxDCA";
569 fCandidateVariableNames[34]="v0PyDCA";
570 fCandidateVariableNames[35]="v0PzDCA";
571 fCandidateVariableNames[36]="V0positivePxDCA";
572 fCandidateVariableNames[37]="V0positivePyDCA";
573 fCandidateVariableNames[38]="V0positivePzDCA";
574 fCandidateVariableNames[39]="V0negativePxDCA";
575 fCandidateVariableNames[40]="V0negativePyDCA";
576 fCandidateVariableNames[41]="V0negativePzDCA";
577 fCandidateVariableNames[42]="flagToCheckCandidate";
578 fCandidateVariableNames[43]="massGamma";
579
580 fCandidateVariableNames[44]="bachelorP"; // @ prim vtx
581 fCandidateVariableNames[45]="bachelorPt"; // @ prim vtx
582 fCandidateVariableNames[46]="V0positiveP"; // @ prim vtx
583 fCandidateVariableNames[47]="V0positivePt"; // @ prim vtx
584 fCandidateVariableNames[48]="V0negativeP"; // @ prim vtx
585 fCandidateVariableNames[49]="V0negativePt"; // @ prim vtx
586 fCandidateVariableNames[50]="bachelorPDCA"; // @ DCA
587 fCandidateVariableNames[51]="bachelorPtDCA"; // @ DCA
588 fCandidateVariableNames[52]="v0PDCA"; // @ DCA
589 fCandidateVariableNames[53]="v0PtDCA"; // @ DCA
590 fCandidateVariableNames[54]="V0positivePDCA"; // @ DCA
591 fCandidateVariableNames[55]="V0positivePtDCA"; // @ DCA
592 fCandidateVariableNames[56]="V0negativePDCA"; // @ DCA
593 fCandidateVariableNames[57]="V0negativePtDCA"; // @ DCA
594 fCandidateVariableNames[58]="LcP"; // @ DCA
595 fCandidateVariableNames[59]="LcPt"; // @ DCA
596 fCandidateVariableNames[60]="v0P"; // @ V0 DCA
597 fCandidateVariableNames[61]="v0Pt"; // @ V0 DCA
598
599 fCandidateVariableNames[62]="cosPALc";
600 fCandidateVariableNames[63]="decayLengthLc";
601 fCandidateVariableNames[64]="decayLengthV0";
602
603 fCandidateVariableNames[65]="yLc";
604
605 fCandidateVariableNames[66]="massD2K0Spi"; // D+ -> pi+ K0S
606 fCandidateVariableNames[67]="massDS2K0SK"; // D+S -> K+ K0S
607
608 fCandidateVariableNames[68]="nSigmaITSpi"; // nSigmaITSpi
609 fCandidateVariableNames[69]="nSigmaITSka"; // nSigmaITSka
610 fCandidateVariableNames[70]="nSigmaITSpr"; // nSigmaITSpr
611
612 for(Int_t ivar=0; ivar<nVar; ivar++){
613 fVariablesTree->Branch(fCandidateVariableNames[ivar].Data(),&fCandidateVariables[ivar],Form("%s/f",fCandidateVariableNames[ivar].Data()));
614 }
615 PostData(6,fVariablesTree);
616 }
617
992ba7d8 618 return;
619}
620//___________________________________ hiostograms _______________________________________
621void AliAnalysisTaskSELc2V0bachelor::DefineHistograms() {
622
a578b2da 623 fCEvents = new TH1F("fCEvents","conter",17,0,17);
992ba7d8 624 fCEvents->SetStats(kTRUE);
a578b2da 625 fCEvents->GetXaxis()->SetBinLabel(1,"X1");
0dbd1d4f 626 fCEvents->GetXaxis()->SetBinLabel(2,"Analyzed events");
627 fCEvents->GetXaxis()->SetBinLabel(3,"AliAODVertex exists");
628 fCEvents->GetXaxis()->SetBinLabel(4,"GetNContributors()>0");
a578b2da 629 fCEvents->GetXaxis()->SetBinLabel(5,"MCarray exists");
630 fCEvents->GetXaxis()->SetBinLabel(6,"CascadesHF exists");
631 fCEvents->GetXaxis()->SetBinLabel(7,"MCheader exists");
632 fCEvents->GetXaxis()->SetBinLabel(8,"IsEventSelected");
0dbd1d4f 633 fCEvents->GetXaxis()->SetBinLabel(9,"triggerClass!=CINT1");
634 fCEvents->GetXaxis()->SetBinLabel(10,"triggerMask!=kAnyINT");
635 fCEvents->GetXaxis()->SetBinLabel(11,"triggerMask!=kAny");
636 fCEvents->GetXaxis()->SetBinLabel(12,"vtxTitle.Contains(Z)");
637 fCEvents->GetXaxis()->SetBinLabel(13,"vtxTitle.Contains(3D)");
638 fCEvents->GetXaxis()->SetBinLabel(14,"vtxTitle.Doesn'tContain(Z-3D)");
a578b2da 639 fCEvents->GetXaxis()->SetBinLabel(15,Form("zVtx<=%2.0fcm",fAnalCuts->GetMaxVtxZ()));
0dbd1d4f 640 fCEvents->GetXaxis()->SetBinLabel(16,"!IsEventSelected");
641 fCEvents->GetXaxis()->SetBinLabel(17,"triggerMask!=kAnyINT || triggerClass!=CINT1");
0dbd1d4f 642 //fCEvents->GetXaxis()->SetTitle("");
992ba7d8 643 fCEvents->GetYaxis()->SetTitle("counts");
644
645 fOutput->Add(fCEvents);
646 TString fillthis="";
647
648 if (fUseMCInfo) {
649 fillthis="histMcStatLc";
650 TH1F* mcStatisticLc = new TH1F(fillthis.Data(),"#Lambda_{C} generated and their decays",19,-9.5,9.5);
651 fOutput->Add(mcStatisticLc);
652 }
653
a578b2da 654 //fillthis="histopionV0SigmaVspTOF";
655 //TH2F *hpionV0SigmaVspTOF=new TH2F(fillthis.Data(),fillthis.Data(),300,0.,30.,100,-5.,5.);
992ba7d8 656 fillthis="histoprotonBachSigmaVspTOF";
a578b2da 657 TH2F *hprotonBachSigmaVspTOF=new TH2F(fillthis.Data(),fillthis.Data(),300,0.,30.,100,-5.,5.);
992ba7d8 658
a578b2da 659 //fOutput->Add(hpionV0SigmaVspTOF);
992ba7d8 660 fOutput->Add(hprotonBachSigmaVspTOF);
661
a578b2da 662 //fillthis="histopionV0SigmaVspTPC";
663 //TH2F *hpionV0SigmaVspTPC=new TH2F(fillthis.Data(),fillthis.Data(),300,0.,30.,100,-5.,5.);
992ba7d8 664 fillthis="histoprotonBachSigmaVspTPC";
a578b2da 665 TH2F *hprotonBachSigmaVspTPC=new TH2F(fillthis.Data(),fillthis.Data(),300,0.,30.,100,-5.,5.);
992ba7d8 666
a578b2da 667 //fOutput->Add(hpionV0SigmaVspTPC);
992ba7d8 668 fOutput->Add(hprotonBachSigmaVspTPC);
669
a578b2da 670 if (fUseMCInfo) {
671
672 //fillthis="histopionV0SigmaVspTOFsgn";
673 //TH2F *hpionV0SigmaVspTOFsgn=new TH2F(fillthis.Data(),fillthis.Data(),300,0.,30.,100,-5.,5.);
674 fillthis="histoprotonBachSigmaVspTOFsgn";
675 TH2F *hprotonBachSigmaVspTOFsgn=new TH2F(fillthis.Data(),fillthis.Data(),300,0.,30.,100,-5.,5.);
676
677 //fOutput->Add(hpionV0SigmaVspTOFsgn);
678 fOutput->Add(hprotonBachSigmaVspTOFsgn);
679
680 //fillthis="histopionV0SigmaVspTPCsgn";
681 //TH2F *hpionV0SigmaVspTPCsgn=new TH2F(fillthis.Data(),fillthis.Data(),300,0.,30.,100,-5.,5.);
682 fillthis="histoprotonBachSigmaVspTPCsgn";
683 TH2F *hprotonBachSigmaVspTPCsgn=new TH2F(fillthis.Data(),fillthis.Data(),300,0.,30.,100,-5.,5.);
684
685 //fOutput->Add(hpionV0SigmaVspTPCsgn);
686 fOutput->Add(hprotonBachSigmaVspTPCsgn);
687
688
689 //fillthis="histopionV0SigmaVspTOFbkg";
690 //TH2F *hpionV0SigmaVspTOFbkg=new TH2F(fillthis.Data(),fillthis.Data(),300,0.,30.,100,-5.,5.);
691 fillthis="histoprotonBachSigmaVspTOFbkg";
692 TH2F *hprotonBachSigmaVspTOFbkg=new TH2F(fillthis.Data(),fillthis.Data(),300,0.,30.,100,-5.,5.);
693
694 //fOutput->Add(hpionV0SigmaVspTOFbkg);
695 fOutput->Add(hprotonBachSigmaVspTOFbkg);
696
697 //fillthis="histopionV0SigmaVspTPCbkg";
698 //TH2F *hpionV0SigmaVspTPCbkg=new TH2F(fillthis.Data(),fillthis.Data(),300,0.,30.,100,-5.,5.);
699 fillthis="histoprotonBachSigmaVspTPCbkg";
700 TH2F *hprotonBachSigmaVspTPCbkg=new TH2F(fillthis.Data(),fillthis.Data(),300,0.,30.,100,-5.,5.);
701
702 //fOutput->Add(hpionV0SigmaVspTPCbkg);
703 fOutput->Add(hprotonBachSigmaVspTPCbkg);
704
705
706 }
707
708
0dbd1d4f 709 TH1F *hZ2 = new TH1F("hZ2","",100,-50.,50.);
710 fOutput->Add(hZ2);
711 TH1F *hZ3 = new TH1F("hZ3","",100,-50.,50.);
712 fOutput->Add(hZ3);
713 TH1F *hZ4 = new TH1F("hZ4","",100,-50.,50.);
714 fOutput->Add(hZ4);
715 TH1F *hZ5 = new TH1F("hZ5","",100,-50.,50.);
716 fOutput->Add(hZ5);
717 TH1F *hZ6 = new TH1F("hZ6","",100,-50.,50.);
718 fOutput->Add(hZ6);
719 TH1F *hZ7 = new TH1F("hZ7","",100,-50.,50.);
720 fOutput->Add(hZ7);
721 TH1F *hZ8 = new TH1F("hZ8","",100,-50.,50.);
722 fOutput->Add(hZ8);
723 TH1F *hZ9 = new TH1F("hZ9","",100,-50.,50.);
724 fOutput->Add(hZ9);
725 TH1F *hZ10 = new TH1F("hZ10","",100,-50.,50.);
726 fOutput->Add(hZ10);
727 TH1F *hZ11 = new TH1F("hZ11","",100,-50.,50.);
728 fOutput->Add(hZ11);
729 TH1F *hZ12 = new TH1F("hZ12","",100,-50.,50.);
730 fOutput->Add(hZ12);
731 TH1F *hZ13 = new TH1F("hZ13","",100,-50.,50.);
732 fOutput->Add(hZ13);
733 TH1F *hZ14 = new TH1F("hZ14","",100,-50.,50.);
734 fOutput->Add(hZ14);
735 TH1F *hZ15 = new TH1F("hZ15","",100,-50.,50.);
736 fOutput->Add(hZ15);
737 TH1F *hZ16 = new TH1F("hZ16","",100,-50.,50.);
738 fOutput->Add(hZ16);
739
a578b2da 740 TH1I *hCandidateSelection = new TH1I("hCandidateSelection","",14,0,14);
0dbd1d4f 741 hCandidateSelection->GetXaxis()->SetBinLabel(1,"IsEventSelected");
742 hCandidateSelection->GetXaxis()->SetBinLabel(2,"IsSecondaryVtx");
743 hCandidateSelection->GetXaxis()->SetBinLabel(3,"V0toPosNeg");
a578b2da 744 hCandidateSelection->GetXaxis()->SetBinLabel(4,"offlineV0");
745 hCandidateSelection->GetXaxis()->SetBinLabel(5,"prodCuts::kTracks");
746 hCandidateSelection->GetXaxis()->SetBinLabel(6,"prodCuts::kCandidate");
747 hCandidateSelection->GetXaxis()->SetBinLabel(7,"prodCuts::kPID");
748 hCandidateSelection->GetXaxis()->SetBinLabel(8,"prodCuts::kAll");
749 hCandidateSelection->GetXaxis()->SetBinLabel(9,"offlineV0");
750 hCandidateSelection->GetXaxis()->SetBinLabel(10,"isInFiducialAcceptance");
751 hCandidateSelection->GetXaxis()->SetBinLabel(11,"analCuts::kTracks");
752 hCandidateSelection->GetXaxis()->SetBinLabel(12,"analCuts::kCandidate");
753 hCandidateSelection->GetXaxis()->SetBinLabel(13,"analCuts::kPID");
754 hCandidateSelection->GetXaxis()->SetBinLabel(14,"analCuts::kAll");
0dbd1d4f 755 fOutput->Add(hCandidateSelection);
756
757 TH1I *hEventsWithCandidates = new TH1I("hEventsWithCandidates","conter",17,0,17);
758 fOutput->Add(hEventsWithCandidates);
759
760 TH1F *hZ2a = new TH1F("hZ2a","",100,-50.,50.);
761 fOutput->Add(hZ2a);
762 TH1F *hZ3a = new TH1F("hZ3a","",100,-50.,50.);
763 fOutput->Add(hZ3a);
764 TH1F *hZ4a = new TH1F("hZ4a","",100,-50.,50.);
765 fOutput->Add(hZ4a);
766 TH1F *hZ5a = new TH1F("hZ5a","",100,-50.,50.);
767 fOutput->Add(hZ5a);
768 TH1F *hZ6a = new TH1F("hZ6a","",100,-50.,50.);
769 fOutput->Add(hZ6a);
770 TH1F *hZ7a = new TH1F("hZ7a","",100,-50.,50.);
771 fOutput->Add(hZ7a);
772 TH1F *hZ8a = new TH1F("hZ8a","",100,-50.,50.);
773 fOutput->Add(hZ8a);
774 TH1F *hZ9a = new TH1F("hZ9a","",100,-50.,50.);
775 fOutput->Add(hZ9a);
776 TH1F *hZ10a = new TH1F("hZ10a","",100,-50.,50.);
777 fOutput->Add(hZ10a);
778 TH1F *hZ11a = new TH1F("hZ11a","",100,-50.,50.);
779 fOutput->Add(hZ11a);
780 TH1F *hZ12a = new TH1F("hZ12a","",100,-50.,50.);
781 fOutput->Add(hZ12a);
782 TH1F *hZ13a = new TH1F("hZ13a","",100,-50.,50.);
783 fOutput->Add(hZ13a);
784 TH1F *hZ14a = new TH1F("hZ14a","",100,-50.,50.);
785 fOutput->Add(hZ14a);
786 TH1F *hZ15a = new TH1F("hZ15a","",100,-50.,50.);
787 fOutput->Add(hZ15a);
788 TH1F *hZ16a = new TH1F("hZ16a","",100,-50.,50.);
789 fOutput->Add(hZ16a);
790
a578b2da 791 TH1I *hSwitchOnCandidates1 = new TH1I("hSwitchOnCandidates1","",16,-8,8);
0dbd1d4f 792 fOutput->Add(hSwitchOnCandidates1);
a578b2da 793 TH1I *hSwitchOnCandidates2 = new TH1I("hSwitchOnCandidates2","",16,-8,8);
0dbd1d4f 794 fOutput->Add(hSwitchOnCandidates2);
a578b2da 795 TH1I *hSwitchOnCandidates3 = new TH1I("hSwitchOnCandidates3","",16,-8,8);
0dbd1d4f 796 fOutput->Add(hSwitchOnCandidates3);
a578b2da 797 TH1I *hSwitchOnCandidates4 = new TH1I("hSwitchOnCandidates4","",16,-8,8);
0dbd1d4f 798 fOutput->Add(hSwitchOnCandidates4);
799
992ba7d8 800 if (fIsK0sAnalysis) DefineK0SHistos();// hK0S histos declarations
801
802 return;
803}
804//________________________________________________________________________
805void AliAnalysisTaskSELc2V0bachelor::FillLc2pK0Sspectrum(AliAODRecoCascadeHF *part,
a578b2da 806 Int_t isLc,
807 Int_t &nSelectedProd,
808 AliRDHFCutsLctoV0 *cutsProd,
809 Int_t &nSelectedAnal,
810 AliRDHFCutsLctoV0 *cutsAnal,
811 TClonesArray *mcArray)
992ba7d8 812{
813 //
814 // Fill histos for Lc -> K0S+proton
815 //
992ba7d8 816
817 TString fillthis="";
818
819 Double_t invmassLc = part->InvMassLctoK0sP();
a578b2da 820 Double_t lambdacpt = part->Pt();
992ba7d8 821
822 AliAODv0 * v0part = (AliAODv0*)part->Getv0();
823 Bool_t onFlyV0 = v0part->GetOnFlyStatus(); // on-the-flight V0s
a578b2da 824 Double_t momK0s = TMath::Sqrt(v0part->Ptot2V0());
992ba7d8 825 Double_t ptK0s = TMath::Sqrt(v0part->Pt2V0());
a578b2da 826 Double_t dcaV0ptp = v0part->GetDCA();
992ba7d8 827 Double_t invmassK0s = v0part->MassK0Short();
a578b2da 828 Bool_t isInV0windowProd = (((cutsProd->IsSelectedSingleCut(part,AliRDHFCuts::kCandidate,2))&(AliRDHFCutsLctoV0::kLcToK0Spr))==(AliRDHFCutsLctoV0::kLcToK0Spr)); // cut on V0 invMass
829 Bool_t isInCascadeWindow = (((cutsAnal->IsSelectedSingleCut(part,AliRDHFCuts::kCandidate,0))&(AliRDHFCutsLctoV0::kLcToK0Spr))==(AliRDHFCutsLctoV0::kLcToK0Spr)); // cut on Lc->p+K0S invMass
830 Bool_t isCandidateSelectedCuts = (((cutsAnal->IsSelected(part,AliRDHFCuts::kCandidate))&(AliRDHFCutsLctoV0::kLcToK0Spr))==(AliRDHFCutsLctoV0::kLcToK0Spr)); // kinematic/topological cuts
992ba7d8 831
832 AliAODTrack *bachelor = (AliAODTrack*)part->GetBachelor();
833 Double_t momBach = bachelor->P();
0dbd1d4f 834 Bool_t isBachelorID = (((cutsAnal->IsSelected(part,AliRDHFCuts::kPID))&(AliRDHFCutsLctoV0::kLcToK0Spr))==(AliRDHFCutsLctoV0::kLcToK0Spr)); // ID x bachelor
835
a578b2da 836 /*
837 if (fIsEventSelected) {
838 if ( ( !onFlyV0 ||
839 (onFlyV0 && fUseOnTheFlyV0) ) &&
840 isCandidateSelectedCuts && isBachelorID) {
841 fillthis="hist1LcMassOfflineByK0S";
842 if (isBachelorID) ((TH2F*)(fOutput->FindObject(fillthis)))->Fill(invmassLc,lambdacpt);
843 }
844 } else {
845 if ( ( !onFlyV0 ||
846 (onFlyV0 && fUseOnTheFlyV0) ) &&
847 isCandidateSelectedCuts && isBachelorID) {
848 fillthis="hist0LcMassOfflineByK0S";
849 if (isBachelorID) ((TH2F*)(fOutput->FindObject(fillthis)))->Fill(invmassLc,lambdacpt);
850 }
851 return; // don't take into account not selected events
852 }
853 */
854
855 if ( !onFlyV0 )
856 ((TH1I*)(fOutput->FindObject("hCandidateSelection")))->Fill(3); // it counts number of candidates coming from offline V0s
857
858 if ( !( !onFlyV0 || (onFlyV0 && fUseOnTheFlyV0) ) ) return;
859
860 if ( !( ( (cutsProd->IsSelected(part,AliRDHFCuts::kTracks))&(AliRDHFCutsLctoV0::kLcToK0Spr)) == (AliRDHFCutsLctoV0::kLcToK0Spr) ) ) return;
861 ((TH1I*)(fOutput->FindObject("hCandidateSelection")))->Fill(4);
862 if ( ( ( (cutsProd->IsSelected(part,AliRDHFCuts::kCandidate))&(AliRDHFCutsLctoV0::kLcToK0Spr)) == (AliRDHFCutsLctoV0::kLcToK0Spr) ) )
863 ((TH1I*)(fOutput->FindObject("hCandidateSelection")))->Fill(5);
864 if ( ( ( (cutsProd->IsSelected(part,AliRDHFCuts::kPID))&(AliRDHFCutsLctoV0::kLcToK0Spr)) == (AliRDHFCutsLctoV0::kLcToK0Spr) ) )
865 ((TH1I*)(fOutput->FindObject("hCandidateSelection")))->Fill(6);
866 if ( ( ( (cutsProd->IsSelected(part,AliRDHFCuts::kAll))&(AliRDHFCutsLctoV0::kLcToK0Spr)) == (AliRDHFCutsLctoV0::kLcToK0Spr) ) ) {
867 ((TH1I*)(fOutput->FindObject("hCandidateSelection")))->Fill(7);
868 nSelectedProd++;
869 }
870
871
872 if ( !onFlyV0 )
873 ((TH1I*)(fOutput->FindObject("hCandidateSelection")))->Fill(8); // it counts number of candidates coming from offline V0s
874
875 if ( cutsAnal->IsInFiducialAcceptance(part->Pt(),part->Y(4122)) )
876 ((TH1I*)(fOutput->FindObject("hCandidateSelection")))->Fill(9);
877 if ( (((cutsAnal->IsSelected(part,AliRDHFCuts::kTracks))&(AliRDHFCutsLctoV0::kLcToK0Spr))==(AliRDHFCutsLctoV0::kLcToK0Spr)) )
0dbd1d4f 878 ((TH1I*)(fOutput->FindObject("hCandidateSelection")))->Fill(10);
a578b2da 879 if ( (((cutsAnal->IsSelected(part,AliRDHFCuts::kCandidate))&(AliRDHFCutsLctoV0::kLcToK0Spr))==(AliRDHFCutsLctoV0::kLcToK0Spr)) )
880 ((TH1I*)(fOutput->FindObject("hCandidateSelection")))->Fill(11);
881 if ( (((cutsAnal->IsSelected(part,AliRDHFCuts::kPID))&(AliRDHFCutsLctoV0::kLcToK0Spr))==(AliRDHFCutsLctoV0::kLcToK0Spr)) )
882 ((TH1I*)(fOutput->FindObject("hCandidateSelection")))->Fill(12);
883 if ( (((cutsAnal->IsSelected(part,AliRDHFCuts::kAll))&(AliRDHFCutsLctoV0::kLcToK0Spr))==(AliRDHFCutsLctoV0::kLcToK0Spr)) ) {
884 ((TH1I*)(fOutput->FindObject("hCandidateSelection")))->Fill(13);
885 nSelectedAnal++;
886 }
887
888 if ( !(cutsAnal->IsInFiducialAcceptance(part->Pt(),part->Y(4122))) ) return;
889
890 if ( !( ( (cutsAnal->IsSelected(part,AliRDHFCuts::kTracks))&(AliRDHFCutsLctoV0::kLcToK0Spr)) == (AliRDHFCutsLctoV0::kLcToK0Spr) ) ) return;
891
892 Int_t aaa = cutsAnal->IsSelected(part,AliRDHFCuts::kTracks);
893 if ( (aaa&AliRDHFCutsLctoV0::kLcToK0Spr)==AliRDHFCutsLctoV0::kLcToK0Spr ) {
894 if ( ( (aaa&AliRDHFCutsLctoV0::kLcToLpi)==AliRDHFCutsLctoV0::kLcToLpi && bachelor->Charge()==-1) ||
895 ( (aaa&AliRDHFCutsLctoV0::kLcToLBarpi)==AliRDHFCutsLctoV0::kLcToLBarpi && bachelor->Charge()==+1) )
896 ((TH1I*)(fOutput->FindObject("hSwitchOnCandidates1")))->Fill( -aaa );
897 else
898 ((TH1I*)(fOutput->FindObject("hSwitchOnCandidates1")))->Fill( aaa );
899 }
900
901 aaa = cutsAnal->IsSelected(part,AliRDHFCuts::kCandidate);
902 if ((aaa&AliRDHFCutsLctoV0::kLcToK0Spr)==AliRDHFCutsLctoV0::kLcToK0Spr) {
903 if ( ( (aaa&AliRDHFCutsLctoV0::kLcToLpi)==AliRDHFCutsLctoV0::kLcToLpi && bachelor->Charge()==-1) ||
904 ( (aaa&AliRDHFCutsLctoV0::kLcToLBarpi)==AliRDHFCutsLctoV0::kLcToLBarpi && bachelor->Charge()==+1) )
905 ((TH1I*)(fOutput->FindObject("hSwitchOnCandidates2")))->Fill( -aaa );
906 else
907 ((TH1I*)(fOutput->FindObject("hSwitchOnCandidates2")))->Fill( aaa );
908 }
909
910 aaa = cutsAnal->IsSelected(part,AliRDHFCuts::kPID);
911 if ((aaa&AliRDHFCutsLctoV0::kLcToK0Spr)==AliRDHFCutsLctoV0::kLcToK0Spr) {
912 if ( ( (aaa&AliRDHFCutsLctoV0::kLcToLpi)==AliRDHFCutsLctoV0::kLcToLpi && bachelor->Charge()==-1) ||
913 ( (aaa&AliRDHFCutsLctoV0::kLcToLBarpi)==AliRDHFCutsLctoV0::kLcToLBarpi && bachelor->Charge()==+1) )
914 ((TH1I*)(fOutput->FindObject("hSwitchOnCandidates3")))->Fill( -aaa );
915 else
916 ((TH1I*)(fOutput->FindObject("hSwitchOnCandidates3")))->Fill( aaa );
917 }
918
919 aaa = cutsAnal->IsSelected(part,AliRDHFCuts::kAll);
920 if ((aaa&AliRDHFCutsLctoV0::kLcToK0Spr)==AliRDHFCutsLctoV0::kLcToK0Spr) {
921 if ( ( (aaa&AliRDHFCutsLctoV0::kLcToLpi)==AliRDHFCutsLctoV0::kLcToLpi && bachelor->Charge()==-1) ||
922 ( (aaa&AliRDHFCutsLctoV0::kLcToLBarpi)==AliRDHFCutsLctoV0::kLcToLBarpi && bachelor->Charge()==+1) )
923 ((TH1I*)(fOutput->FindObject("hSwitchOnCandidates4")))->Fill( -aaa );
924 else
925 ((TH1I*)(fOutput->FindObject("hSwitchOnCandidates4")))->Fill( aaa );
926 }
927
928
929
930
931 aaa = cutsAnal->IsSelected(part,AliRDHFCuts::kCandidate);
932 Int_t flagToCheckCandidate = 0;
933 if ( (aaa&AliRDHFCutsLctoV0::kLcToK0Spr)==AliRDHFCutsLctoV0::kLcToK0Spr ) {
934 if ( aaa==AliRDHFCutsLctoV0::kLcToK0Spr ) {
935 flagToCheckCandidate = aaa; // Lc->K0S+p OK
936 } else {
937 if ( (aaa&AliRDHFCutsLctoV0::kLcToLpi)==AliRDHFCutsLctoV0::kLcToLpi ) {
938 if (bachelor->Charge()==+1)
939 flagToCheckCandidate = aaa; // Lc->Lambda+pi+
940 else if (bachelor->Charge()==-1)
941 flagToCheckCandidate =-aaa;//+(AliRDHFCutsLctoV0::kLcToK0Spr); // Lambda+pi- AS Lc->K0S+p candidate
942 }
943 if ( (aaa&AliRDHFCutsLctoV0::kLcToLBarpi)==AliRDHFCutsLctoV0::kLcToLBarpi ) {
944 if (bachelor->Charge()==-1)
945 flagToCheckCandidate = aaa; // Lc->LambdaBar+pi-
946 else if (bachelor->Charge()==+1)
947 flagToCheckCandidate =-aaa;//+(AliRDHFCutsLctoV0::kLcToK0Spr); // LambdaBar+pi+ AS Lc->K0S+p candidate
948 }
949 }
950 } else {
951 if ( aaa==AliRDHFCutsLctoV0::kLcToK0Spr ) {
952 flagToCheckCandidate = -10-(AliRDHFCutsLctoV0::kLcToK0Spr); // NEVER
953 } else {
954 if ( (aaa&AliRDHFCutsLctoV0::kLcToLpi)==AliRDHFCutsLctoV0::kLcToLpi ) {
955 if (bachelor->Charge()==+1)
956 flagToCheckCandidate = aaa; // Lc->Lambda+pi+ OK
957 else if (bachelor->Charge()==-1)
958 flagToCheckCandidate =-aaa;//+(AliRDHFCutsLctoV0::kLcToK0Spr); // Lambda+pi- AS Lc->Lambda+pi+ candidate
959 }
960 if ( (aaa&AliRDHFCutsLctoV0::kLcToLBarpi)==AliRDHFCutsLctoV0::kLcToLBarpi ) {
961 if (bachelor->Charge()==-1)
962 flagToCheckCandidate = aaa; // Lc->LambdaBar+pi- OK
963 else if (bachelor->Charge()==+1)
964 flagToCheckCandidate =-aaa;//+(AliRDHFCutsLctoV0::kLcToK0Spr); // LambdaBar+pi+ AS Lc->LambdaBar+pi- candidate
965 }
0dbd1d4f 966 }
967 }
992ba7d8 968
992ba7d8 969
992ba7d8 970
a578b2da 971 Int_t pdgCand = 4122;
972 Int_t pdgDgLctoV0bachelor[2]={3122,211};
973 Int_t pdgDgV0toDaughters[2]={2212,211};
974 Int_t isLc2LBarpi=0, isLc2Lpi=0;
975 Int_t mcLabel = 0;
976 if (fUseMCInfo) {
977 mcLabel = part->MatchToMC(pdgCand,pdgDgLctoV0bachelor[0],pdgDgLctoV0bachelor,pdgDgV0toDaughters,mcArray,kTRUE);
978 if (mcLabel>=0) {
979 if (bachelor->Charge()==-1) isLc2LBarpi=1;
980 if (bachelor->Charge()==+1) isLc2Lpi=1;
981 }
982 }
992ba7d8 983
a578b2da 984 Int_t pdgDg2prong[2] = {211, 211};
985 Int_t labelK0S = 0;
986 Int_t isK0S = 0;
987 if (fUseMCInfo) {
988 labelK0S = v0part->MatchToMC(310,mcArray,2,pdgDg2prong);
989 if (labelK0S>=0) isK0S = 1;
990 }
992ba7d8 991
a578b2da 992 pdgDg2prong[0] = 211;
993 pdgDg2prong[1] = 2212;
994 Int_t isLambda = 0;
995 Int_t isLambdaBar = 0;
996 Int_t lambdaLabel = 0;
997 if (fUseMCInfo) {
998 lambdaLabel = v0part->MatchToMC(3122,mcArray,2,pdgDg2prong);
999 if (lambdaLabel>=0) {
1000 AliAODMCParticle *lambdaTrack = (AliAODMCParticle*)mcArray->At(lambdaLabel);
1001 if (lambdaTrack->GetPdgCode()==3122) isLambda = 1;
1002 else if (lambdaTrack->GetPdgCode()==-3122) isLambdaBar = 1;
1003 }
1004 }
0dbd1d4f 1005
a578b2da 1006 pdgDg2prong[0] = 11;
1007 pdgDg2prong[1] = 11;
1008 Int_t isGamma = 0;
1009 Int_t gammaLabel = 0;
1010 if (fUseMCInfo) {
1011 gammaLabel = v0part->MatchToMC(22,mcArray,2,pdgDg2prong);
1012 if (gammaLabel>=0) {
1013 AliAODMCParticle *gammaTrack = (AliAODMCParticle*)mcArray->At(gammaLabel);
1014 if (gammaTrack->GetPdgCode()==22) isGamma = 1;
1015 }
1016 }
0dbd1d4f 1017
a578b2da 1018 Double_t invmassLc2Lpi = part->InvMassLctoLambdaPi();
1019 Double_t invmassLambda = v0part->MassLambda();
1020 Double_t invmassLambdaBar = v0part->MassAntiLambda();
1021
1022 Int_t isLcByMC = isLc+isLc2LBarpi*2+isLc2Lpi*4;
1023 Int_t isV0ByMC = isK0S+isLambdaBar*2+isLambda*4+isGamma*8;
1024
1025 Double_t nSigmaITSpr=-999.;
1026 cutsAnal->GetPidHF()->GetnSigmaITS(bachelor,4,nSigmaITSpr);
1027 Double_t nSigmaTPCpr=-999.;
1028 cutsAnal->GetPidHF()->GetnSigmaTPC(bachelor,4,nSigmaTPCpr);
1029 Double_t nSigmaTOFpr=-999.;
1030 cutsAnal->GetPidHF()->GetnSigmaTOF(bachelor,4,nSigmaTOFpr);
1031
1032 Double_t nSigmaITSpi=-999.;
1033 cutsAnal->GetPidHF()->GetnSigmaITS(bachelor,2,nSigmaITSpi);
1034 Double_t nSigmaTPCpi=-999.;
1035 cutsAnal->GetPidHF()->GetnSigmaTPC(bachelor,2,nSigmaTPCpi);
1036 Double_t nSigmaTOFpi=-999.;
1037 cutsAnal->GetPidHF()->GetnSigmaTOF(bachelor,2,nSigmaTOFpi);
1038
1039 Double_t nSigmaITSka=-999.;
1040 cutsAnal->GetPidHF()->GetnSigmaITS(bachelor,3,nSigmaITSka);
1041 Double_t nSigmaTPCka=-999.;
1042 cutsAnal->GetPidHF()->GetnSigmaTPC(bachelor,3,nSigmaTPCka);
1043 Double_t nSigmaTOFka=-999.;
1044 cutsAnal->GetPidHF()->GetnSigmaTOF(bachelor,3,nSigmaTOFka);
1045
1046
1047 // Fill candidate variable Tree (track selection, V0 invMass selection)
1048 if ( fWriteVariableTree && !onFlyV0 && isInV0windowProd && isInCascadeWindow && part->CosV0PointingAngle()>0.99) {
1049
1050 fCandidateVariables[0] = fUseMCInfo+isLcByMC; // 0: real data; 1: bkg; 2: Lc->K0S+p; 3: Lc->LambdaBar+pbar; 5: Lc->Lambda+p
1051 fCandidateVariables[1] = fUseMCInfo+isV0ByMC; // 0: real data; 1: bkg; 2: K0S->pi+pi; 3: LambdaBar->pbar+pi+; 5: Lambda->p+pi-
1052 fCandidateVariables[2] = invmassLc;
1053 fCandidateVariables[3] = invmassLc2Lpi;
1054 fCandidateVariables[4] = invmassK0s;
1055 fCandidateVariables[5] = invmassLambda;
1056 fCandidateVariables[6] = invmassLambdaBar;
1057 fCandidateVariables[7] = part->CosV0PointingAngle();
1058 fCandidateVariables[8] = dcaV0ptp;
1059 fCandidateVariables[9] = part->Getd0Prong(0);
1060 fCandidateVariables[10] = part->Getd0Prong(1);
1061 fCandidateVariables[11] = nSigmaTPCpr;
1062 fCandidateVariables[12] = nSigmaTPCpi;
1063 fCandidateVariables[13] = nSigmaTPCka;
1064 fCandidateVariables[14] = nSigmaTOFpr;
1065 fCandidateVariables[15] = nSigmaTOFpi;
1066 fCandidateVariables[16] = nSigmaTOFka;
1067 fCandidateVariables[17] = bachelor->Px();
1068 fCandidateVariables[18] = bachelor->Py();
1069 fCandidateVariables[19] = bachelor->Pz();
1070 AliAODTrack *v0neg = (AliAODTrack*)part->Getv0NegativeTrack();
1071 fCandidateVariables[20] = v0neg->Px();
1072 fCandidateVariables[21] = v0neg->Py();
1073 fCandidateVariables[22] = v0neg->Pz();
1074 AliAODTrack *v0pos = (AliAODTrack*)part->Getv0PositiveTrack();
1075 fCandidateVariables[23] = v0pos->Px();
1076 fCandidateVariables[24] = v0pos->Py();
1077 fCandidateVariables[25] = v0pos->Pz();
1078 fCandidateVariables[26] = part->QtProng(0);
1079 fCandidateVariables[27] = part->Alpha();
1080 fCandidateVariables[28] = v0part->Getd0Prong(0);
1081 fCandidateVariables[29] = v0part->Getd0Prong(1);
1082 fCandidateVariables[30] = part->PxProng(0);
1083 fCandidateVariables[31] = part->PyProng(0);
1084 fCandidateVariables[32] = part->PzProng(0);
1085 fCandidateVariables[33] = part->PxProng(1);
1086 fCandidateVariables[34] = part->PyProng(1);
1087 fCandidateVariables[35] = part->PzProng(1);
1088 fCandidateVariables[36] = v0part->PxProng(0);
1089 fCandidateVariables[37] = v0part->PyProng(0);
1090 fCandidateVariables[38] = v0part->PzProng(0);
1091 fCandidateVariables[39] = v0part->PxProng(1);
1092 fCandidateVariables[40] = v0part->PyProng(1);
1093 fCandidateVariables[41] = v0part->PzProng(1);
1094 fCandidateVariables[42] = flagToCheckCandidate;
1095 fCandidateVariables[43] = v0part->InvMass2Prongs(0,1,11,11);
1096
1097 fCandidateVariables[44] = bachelor->P();
1098 fCandidateVariables[45] = bachelor->Pt();
1099 fCandidateVariables[46] = v0pos->P();
1100 fCandidateVariables[47] = v0pos->Pt();
1101 fCandidateVariables[48] = v0neg->P();
1102 fCandidateVariables[49] = v0neg->Pt();
1103 fCandidateVariables[50] = part->PProng(0);
1104 fCandidateVariables[51] = part->PtProng(0);
1105 fCandidateVariables[52] = part->PProng(1);
1106 fCandidateVariables[53] = part->PtProng(1);
1107 fCandidateVariables[54] = v0part->PProng(0);
1108 fCandidateVariables[55] = v0part->PtProng(0);
1109 fCandidateVariables[56] = v0part->PProng(1);
1110 fCandidateVariables[57] = v0part->PtProng(1);
1111 fCandidateVariables[58] = part->P();
1112 fCandidateVariables[59] = part->Pt();
1113 fCandidateVariables[60] = v0part->P();
1114 fCandidateVariables[61] = v0part->Pt();
1115
1116 fCandidateVariables[62] = part->CosPointingAngle();
1117 fCandidateVariables[63] = part->DecayLength();
1118 fCandidateVariables[64] = part->DecayLengthV0();
1119
1120 fCandidateVariables[65] = part->Y(4122);
1121
1122 fCandidateVariables[66] = part->InvMass2Prongs(0,1,211,310); // D+ -> pi+ K0S
1123 fCandidateVariables[67] = part->InvMass2Prongs(0,1,321,310); // D+S -> K+ K0S
1124
1125 fCandidateVariables[68] = nSigmaITSpr;
1126 fCandidateVariables[69] = nSigmaITSpi;
1127 fCandidateVariables[70] = nSigmaITSka;
1128
1129 //AliInfo(Form(" partP: %2.1f %2.1f %2.1f",part->PxProng(0)/bachelor->Px(),part->PyProng(0)/bachelor->Px(),part->PzProng(0)/bachelor->Px())); // !=1, as expected
1130 //AliInfo(Form(" V0posP: %2.1f %2.1f %2.1f",v0part->PxProng(0)/v0pos->Px(),v0part->PyProng(0)/v0pos->Px(),v0part->PzProng(0)/v0pos->Px())); // !=1, as expected
1131 //AliInfo(Form(" V0negP: %2.1f %2.1f %2.1f",v0part->PxProng(1)/v0neg->Px(),v0part->PyProng(1)/v0neg->Px(),v0part->PzProng(1)/v0neg->Px())); // !=1, as expected
1132
1133 Double_t v0Momentum = (v0part->PxProng(0)+v0part->PxProng(1))*(v0part->PxProng(0)+v0part->PxProng(1));
1134 v0Momentum += (v0part->PyProng(0)+v0part->PyProng(1))*(v0part->PyProng(0)+v0part->PyProng(1));
1135 v0Momentum += (v0part->PzProng(0)+v0part->PzProng(1))*(v0part->PzProng(0)+v0part->PzProng(1));
1136 v0Momentum = TMath::Sqrt(v0Momentum);
1137
1138 Double_t lcMomentum = (part->PxProng(0)+part->PxProng(1))*(part->PxProng(0)+part->PxProng(1));
1139 lcMomentum += (part->PyProng(0)+part->PyProng(1))*(part->PyProng(0)+part->PyProng(1));
1140 lcMomentum += (part->PzProng(0)+part->PzProng(1))*(part->PzProng(0)+part->PzProng(1));
1141 lcMomentum = TMath::Sqrt(lcMomentum);
1142
1143 //AliInfo(Form(" v0Momentum-ratio=%2.1f - lcMomentum-ratio=%2.1f",v0Momentum/v0part->P(),lcMomentum/part->P()));// ==1, as expected
1144
1145 fVariablesTree->Fill();
0dbd1d4f 1146 }
1147
a578b2da 1148
1149
0dbd1d4f 1150 if (onFlyV0 && fUseOnTheFlyV0) {
992ba7d8 1151
1152 fillthis="histK0SMass";
1153 ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(invmassK0s,ptK0s);
1154 if (isBachelorID) ((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(invmassK0s,ptK0s);
1155
a578b2da 1156 if (isCandidateSelectedCuts) {
0dbd1d4f 1157
1158 fillthis="histpK0Svsp";
1159 ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(momBach,momK0s);
1160 if (isBachelorID) ((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(momBach,momK0s);
1161
a578b2da 1162 fillthis="histDCAtoPVvspK0S";
1163 ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(momK0s,dcaV0ptp);
1164 if (isBachelorID) ((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(momK0s,dcaV0ptp);
0dbd1d4f 1165
1166 fillthis="histArmPodK0s";
1167 FillArmPodDistribution(v0part,fillthis,fOutputAll);
1168 if (isBachelorID) FillArmPodDistribution(v0part,fillthis,fOutputPIDBach);
1169
992ba7d8 1170 fillthis="histLcMassByK0S";
1171 ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(invmassLc,lambdacpt);
1172 if (isBachelorID)((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(invmassLc,lambdacpt);
1173
0dbd1d4f 1174 }
992ba7d8 1175 }
0dbd1d4f 1176 else if (!onFlyV0) {
992ba7d8 1177
1178 fillthis="histK0SMassOffline";
1179 ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(invmassK0s,ptK0s);
1180 if (isBachelorID) ((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(invmassK0s,ptK0s);
1181
a578b2da 1182 if (isCandidateSelectedCuts) {
1183
1184 fillthis="histoprotonBachSigmaVspTOF";
1185 ((TH2F*)(fOutput->FindObject(fillthis)))->Fill(momBach,nSigmaTOFpr);
1186 fillthis="histoprotonBachSigmaVspTPC";
1187 ((TH2F*)(fOutput->FindObject(fillthis)))->Fill(momBach,nSigmaTPCpr);
1188
0dbd1d4f 1189
1190 fillthis="histpK0SvspOffline";
1191 ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(momBach,momK0s);
1192 if (isBachelorID) ((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(momBach,momK0s);
1193
a578b2da 1194 fillthis="histDCAtoPVvspK0SOffline";
1195 ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(momK0s,dcaV0ptp);
1196 if (isBachelorID) ((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(momK0s,dcaV0ptp);
0dbd1d4f 1197
1198 fillthis="histOfflineArmPodK0s";
1199 FillArmPodDistribution(v0part,fillthis,fOutputAll);
1200 if (isBachelorID) FillArmPodDistribution(v0part,fillthis,fOutputPIDBach);
1201
992ba7d8 1202 fillthis="histLcMassOfflineByK0S";
1203 ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(invmassLc,lambdacpt);
a578b2da 1204 if (isBachelorID)((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(invmassLc,lambdacpt); // main histogram
0dbd1d4f 1205
992ba7d8 1206 }
1207 }
1208
1209
1210 if (fUseMCInfo) {
1211 if (isLc==1) {
0dbd1d4f 1212 if (onFlyV0 && fUseOnTheFlyV0) {
992ba7d8 1213
1214 fillthis="histK0SMassSgn";
1215 ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(invmassK0s,ptK0s);
1216 if (isBachelorID) ((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(invmassK0s,ptK0s);
1217
a578b2da 1218 if (isCandidateSelectedCuts) {
0dbd1d4f 1219
1220 fillthis="histpK0SvspSgn";
1221 ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(momBach,momK0s);
1222 if (isBachelorID) ((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(momBach,momK0s);
1223
a578b2da 1224 fillthis="histDCAtoPVvspK0SSgn";
1225 ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(momK0s,dcaV0ptp);
1226 if (isBachelorID) ((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(momK0s,dcaV0ptp);
992ba7d8 1227
1228 fillthis="histArmPodK0sSgn";
1229 FillArmPodDistribution(v0part,fillthis,fOutputAll);
1230 if (isBachelorID) FillArmPodDistribution(v0part,fillthis,fOutputPIDBach);
0dbd1d4f 1231
1232 fillthis="histLcMassByK0SSgn";
1233 ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(invmassLc,lambdacpt);
1234 if (isBachelorID) ((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(invmassLc,lambdacpt);
1235
992ba7d8 1236 }
1237
1238 }
0dbd1d4f 1239 else if (!onFlyV0) {
992ba7d8 1240
992ba7d8 1241 fillthis="histK0SMassOfflineSgn";
1242 ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(invmassK0s,ptK0s);
1243 if (isBachelorID) ((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(invmassK0s,ptK0s);
1244
a578b2da 1245 if (isCandidateSelectedCuts) {
1246
1247 fillthis="histoprotonBachSigmaVspTOFsgn";
1248 ((TH2F*)(fOutput->FindObject(fillthis)))->Fill(momBach,nSigmaTOFpr);
1249 fillthis="histoprotonBachSigmaVspTPCsgn";
1250 ((TH2F*)(fOutput->FindObject(fillthis)))->Fill(momBach,nSigmaTPCpr);
1251
0dbd1d4f 1252
1253 fillthis="histpK0SvspOfflineSgn";
1254 ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(momBach,momK0s);
1255 if (isBachelorID) ((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(momBach,momK0s);
1256
a578b2da 1257 fillthis="histDCAtoPVvspK0SOfflineSgn";
1258 ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(momK0s,dcaV0ptp);
1259 if (isBachelorID) ((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(momK0s,dcaV0ptp);
0dbd1d4f 1260
1261 fillthis="histOfflineArmPodK0sSgn";
1262 FillArmPodDistribution(v0part,fillthis,fOutputAll);
1263 if (isBachelorID) FillArmPodDistribution(v0part,fillthis,fOutputPIDBach);
992ba7d8 1264
992ba7d8 1265 fillthis="histLcMassOfflineByK0SSgn";
1266 ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(invmassLc,lambdacpt);
1267 if (isBachelorID) ((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(invmassLc,lambdacpt);
1268
992ba7d8 1269 }
1270
1271 }
1272
1273 }// sgn
1274 else { // bkg
0dbd1d4f 1275 if (onFlyV0 && fUseOnTheFlyV0) {
992ba7d8 1276
1277 fillthis="histK0SMassBkg";
1278 ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(invmassK0s,ptK0s);
1279 if (isBachelorID) ((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(invmassK0s,ptK0s);
1280
a578b2da 1281 if (isCandidateSelectedCuts) {
0dbd1d4f 1282
1283 fillthis="histpK0SvspBkg";
1284 ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(momBach,momK0s);
1285 if (isBachelorID) ((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(momBach,momK0s);
1286
a578b2da 1287 fillthis="histDCAtoPVvspK0SBkg";
1288 ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(momK0s,dcaV0ptp);
1289 if (isBachelorID) ((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(momK0s,dcaV0ptp);
0dbd1d4f 1290
1291 fillthis="histArmPodK0sBkg";
1292 FillArmPodDistribution(v0part,fillthis,fOutputAll);
1293 if (isBachelorID) FillArmPodDistribution(v0part,fillthis,fOutputPIDBach);
1294
992ba7d8 1295 fillthis="histLcMassByK0SBkg";
1296 ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(invmassLc,lambdacpt);
1297 if (isBachelorID) ((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(invmassLc,lambdacpt);
1298
992ba7d8 1299 }
1300
1301 }
0dbd1d4f 1302 else if (!onFlyV0) {
992ba7d8 1303
1304 fillthis="histK0SMassOfflineBkg";
1305 ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(invmassK0s,ptK0s);
1306 if (isBachelorID) ((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(invmassK0s,ptK0s);
1307
a578b2da 1308 if (isCandidateSelectedCuts) {
1309
1310 fillthis="histoprotonBachSigmaVspTOFbkg";
1311 ((TH2F*)(fOutput->FindObject(fillthis)))->Fill(momBach,nSigmaTOFpr);
1312 fillthis="histoprotonBachSigmaVspTPCbkg";
1313 ((TH2F*)(fOutput->FindObject(fillthis)))->Fill(momBach,nSigmaTPCpr);
1314
0dbd1d4f 1315
1316 fillthis="histpK0SvspOfflineBkg";
1317 ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(momBach,momK0s);
1318 if (isBachelorID) ((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(momBach,momK0s);
1319
a578b2da 1320 fillthis="histDCAtoPVvspK0SOfflineBkg";
1321 ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(momK0s,dcaV0ptp);
1322 if (isBachelorID) ((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(momK0s,dcaV0ptp);
0dbd1d4f 1323
1324 fillthis="histOfflineArmPodK0sBkg";
1325 FillArmPodDistribution(v0part,fillthis,fOutputAll);
1326 if (isBachelorID) FillArmPodDistribution(v0part,fillthis,fOutputPIDBach);
1327
992ba7d8 1328 fillthis="histLcMassOfflineByK0SBkg";
1329 ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(invmassLc,lambdacpt);
1330 if (isBachelorID) ((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(invmassLc,lambdacpt);
1331
992ba7d8 1332 }
0dbd1d4f 1333
1334 }
1335
992ba7d8 1336 }
1337 } // if fUseMCInfo
1338
1339 return;
1340}
1341//-------------------------------------------------------------------------------
1342Int_t AliAnalysisTaskSELc2V0bachelor::CheckOrigin(TClonesArray* arrayMC, AliAODMCParticle *mcPartCandidate) const {
1343 //
1344 // checking whether the mother of the particles come from a charm or a bottom quark
1345 //
1346
1347 Int_t pdgGranma = 0;
1348 Int_t abspdgGranma =0;
1349 Bool_t isFromB=kFALSE;
1350 Bool_t isQuarkFound=kFALSE;
1351 Int_t mother = mcPartCandidate->GetMother();
1352 Int_t istep = 0;
1353 while (mother>0) {
1354 istep++;
1355 AliAODMCParticle* mcGranma = dynamic_cast<AliAODMCParticle*>(arrayMC->At(mother));
1356 if (mcGranma) {
1357 pdgGranma = mcGranma->GetPdgCode();
1358 abspdgGranma = TMath::Abs(pdgGranma);
1359 if ( (abspdgGranma > 500 && abspdgGranma < 600 ) ||
1360 (abspdgGranma > 5000 && abspdgGranma < 6000) ) isFromB=kTRUE;
1361 else if (abspdgGranma==4 || abspdgGranma==5) isQuarkFound=kTRUE;
1362 mother = mcGranma->GetMother();
1363 } else {
1364 AliError("Failed casting the mother particle!");
1365 break;
1366 }
1367 }
1368
1369 if (isFromB) return 5;
1370 else return 4;
1371
1372}
1373
1374//-------------------------------------------------------------------------------
a578b2da 1375void AliAnalysisTaskSELc2V0bachelor::MakeAnalysisForLc2prK0S(TClonesArray *arrayLctopKos,
1376 TClonesArray *mcArray,
1377 Int_t &nSelectedProd,
1378 AliRDHFCutsLctoV0 *cutsProd,
1379 Int_t &nSelectedAnal,
1380 AliRDHFCutsLctoV0 *cutsAnal)
992ba7d8 1381{
1382
1383 // counters for efficiencies
1384 Int_t icountReco = 0;
1385
1386 //Lc prong needed to MatchToMC method
1387
e7af8919 1388 Int_t pdgCand = 4122;
1389 Int_t pdgDgLctoV0bachelorOld[2]={2212,310};
1390 Int_t pdgDgLctoV0bachelor[2]={310,2212};
1391 Int_t pdgDgV0toDaughters[2]={211,211};
992ba7d8 1392
1393 // loop over cascades to search for candidates Lc->p+K0S
1394 Int_t nCascades= arrayLctopKos->GetEntriesFast();
0dbd1d4f 1395 if (nCascades==0) {
1396 AliInfo("Could not find cascades, skipping the event");
1397 return;
1398 }
992ba7d8 1399 for (Int_t iLctopK0s = 0; iLctopK0s<nCascades; iLctopK0s++) {
1400
0dbd1d4f 1401 ((TH1I*)(fOutput->FindObject("hCandidateSelection")))->Fill(0);
1402
992ba7d8 1403 // Lc candidates and K0s from Lc
1404 AliAODRecoCascadeHF* lcK0spr = (AliAODRecoCascadeHF*)arrayLctopKos->At(iLctopK0s);
1405 if (!lcK0spr->GetSecondaryVtx()) {
1406 AliInfo("No secondary vertex");
1407 continue;
1408 }
1409
0dbd1d4f 1410 ((TH1I*)(fOutput->FindObject("hCandidateSelection")))->Fill(1);
1411
992ba7d8 1412 AliAODTrack * v0Pos = lcK0spr->Getv0PositiveTrack();
1413 AliAODTrack * v0Neg = lcK0spr->Getv0NegativeTrack();
1414 if (v0Pos->Charge() == v0Neg->Charge()) continue;
1415
0dbd1d4f 1416 ((TH1I*)(fOutput->FindObject("hCandidateSelection")))->Fill(2);
1417
992ba7d8 1418 Int_t isLc = 0;
1419
1420 if (fUseMCInfo) {
1421
1422 Bool_t isPrimary=kTRUE;
1423
1424 Int_t pdgCode=-2;
1425
1426 // find associated MC particle for Lc -> p+K0 and K0S->pi+pi
e7af8919 1427 Int_t mcLabelOld = MatchToMC(lcK0spr,pdgDgLctoV0bachelorOld,pdgDgV0toDaughters,mcArray);
1428 Int_t mcLabel = lcK0spr->MatchToMC(pdgCand,pdgDgLctoV0bachelor[0],pdgDgLctoV0bachelor,pdgDgV0toDaughters,mcArray,kTRUE);
1429 if (mcLabelOld!=mcLabel) AliInfo(Form(" Changed MC label: oldONE=%d wrt rightONE=%d",mcLabelOld,mcLabel));
992ba7d8 1430 if (mcLabel>=0) {
a578b2da 1431 AliInfo(Form(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~cascade number %d (total cascade number = %d)", iLctopK0s,nCascades));
992ba7d8 1432
1433 AliAODMCParticle *partLc = (AliAODMCParticle*)mcArray->At(mcLabel);
1434 Int_t checkOrigin = CheckOrigin(mcArray,partLc);
1435 if (checkOrigin==5) isPrimary=kFALSE;
1436
1437 pdgCode = partLc->GetPdgCode();
a578b2da 1438 if (pdgCode<0) AliInfo(Form(" ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ MClabel=%d ~~~~~~~~~~ pdgCode=%d", mcLabel, pdgCode));
992ba7d8 1439 pdgCode = TMath::Abs(pdgCode);
1440 isLc = 1;
1441 } else {
1442 pdgCode=-1;
1443 }
1444 }
1445
992ba7d8 1446 FillLc2pK0Sspectrum(lcK0spr, isLc,
1447 nSelectedProd, cutsProd,
a578b2da 1448 nSelectedAnal, cutsAnal,
1449 mcArray);
992ba7d8 1450
1451 }
1452
1453 AliDebug(2, Form("Found %d Reco particles that are Lc!!", icountReco));
1454
1455}
1456//-------------------------------------------------------------------------------
1457Int_t AliAnalysisTaskSELc2V0bachelor::MatchToMC(AliAODRecoCascadeHF *lc2bacV0,
1458 Int_t *pdgDgLc2bacV0, Int_t *pdgDgV0,
1459 TClonesArray *mcArray)
1460{
1461
1462 // bachelor
1463 AliAODTrack *bachelor = (AliAODTrack*)lc2bacV0->GetBachelor();
1464 Int_t labBachelor = bachelor->GetLabel();
1465 if (labBachelor<0) return -1;
1466 AliAODMCParticle *partBachelor = (AliAODMCParticle*)mcArray->At(labBachelor);
1467 if (TMath::Abs(partBachelor->GetPdgCode())!=pdgDgLc2bacV0[0]) return -1;
1468
1469 Int_t labBacMother = partBachelor->GetMother();
1470 if (labBacMother<0) return -1;
1471 AliAODMCParticle *partBacMother = (AliAODMCParticle*)mcArray->At(labBacMother);
1472 if (TMath::Abs(partBacMother->GetPdgCode())!=4122) return -1;
1473
1474 // V0
1475 AliAODTrack *posV0Daugh = (AliAODTrack*)lc2bacV0->Getv0PositiveTrack();
1476 AliAODTrack *negV0Daugh = (AliAODTrack*)lc2bacV0->Getv0NegativeTrack();
1477 Int_t labV0pos = posV0Daugh->GetLabel();
1478 Int_t labV0neg = negV0Daugh->GetLabel();
1479
1480 if (labV0pos<0 || labV0neg<0) return -1;
1481 AliAODMCParticle *partV0pos = (AliAODMCParticle*)mcArray->At(labV0neg);
1482 AliAODMCParticle *partV0neg = (AliAODMCParticle*)mcArray->At(labV0pos);
1483
1484 if ( ! ( (TMath::Abs(partV0pos->GetPdgCode())==pdgDgV0[0] &&
1485 TMath::Abs(partV0neg->GetPdgCode())==pdgDgV0[1]) ||
1486 (TMath::Abs(partV0pos->GetPdgCode())==pdgDgV0[1] &&
1487 TMath::Abs(partV0neg->GetPdgCode())==pdgDgV0[0]) ) ) return -1;
1488 Int_t labV0posMother = partV0pos->GetMother();
1489 Int_t labV0negMother = partV0neg->GetMother();
1490
1491 if (labV0posMother<0 || labV0negMother<0) return -1;
1492 if (labV0posMother!=labV0negMother) return -1;
1493
1494 AliAODMCParticle *motherV0 = (AliAODMCParticle*)mcArray->At(labV0posMother);
1495
1496 if (TMath::Abs(motherV0->GetPdgCode())!=pdgDgLc2bacV0[1]) return -1;
1497 Int_t labV0mother = motherV0->GetMother();
1498 if (labV0mother<0) return -1;
1499 AliAODMCParticle *gMotherV0 = (AliAODMCParticle*)mcArray->At(labV0mother);
1500
1501 if ( !(pdgDgLc2bacV0[1]==310 && TMath::Abs(gMotherV0->GetPdgCode())==311) &&
1502 !(pdgDgLc2bacV0[1]==3122 && TMath::Abs(motherV0->GetPdgCode())==3122) ) return -1;
1503
1504 if ( (pdgDgLc2bacV0[1]==310 && TMath::Abs(gMotherV0->GetPdgCode())==311) ) {
1505 Int_t labV0GMother = gMotherV0->GetMother();
1506 if (labV0GMother<0) return -1;
1507 AliAODMCParticle *ggMotherV0 = (AliAODMCParticle*)mcArray->At(labV0GMother);
1508
1509 if (TMath::Abs(ggMotherV0->GetPdgCode())!=4122) return -1;
1510 gMotherV0 = (AliAODMCParticle*)ggMotherV0;
1511 labV0mother=labV0GMother;
1512 }
1513 else if (pdgDgLc2bacV0[1]==3122 && TMath::Abs(motherV0->GetPdgCode())==3122) {
1514 if (TMath::Abs(gMotherV0->GetPdgCode())!=4122) return -1;
1515 }
1516
1517 if (labBacMother!=labV0mother) {
a578b2da 1518 //AliInfo(Form(" bachelor mother label=%d - V0 mother label=%d",labBacMother, labV0mother));
992ba7d8 1519 return -1;
1520 }
1521
a578b2da 1522 //AliInfo(Form(" V0: %d (label=%d) -> %d (label=%d) + %d (label=%d) --- GM %d (PDG=%d)",
1523 //motherV0->GetPdgCode(), labV0posMother,
1524 //partV0pos->GetPdgCode(), labV0pos,
1525 //partV0neg->GetPdgCode(), labV0neg,
1526 //labV0mother, gMotherV0->GetPdgCode()));
992ba7d8 1527
a578b2da 1528 //AliInfo(Form(" Bachelor: %d (label=%d) --- M %d (label=%d)",
1529 //partBachelor->GetPdgCode(), labBachelor,
1530 //labBacMother, partBacMother->GetPdgCode()));
992ba7d8 1531 return labBacMother;//labV0mother;//
1532
1533}
1534
1535//-----------------------
1536void AliAnalysisTaskSELc2V0bachelor::SearchLcDaughter(TClonesArray *arrayMC)
1537{
1538
e7af8919 1539 AliAODMCParticle *searchLc=0;
1540 AliAODMCParticle *daugh=0;
1541 AliAODMCParticle *daugh1=0;
1542 AliAODMCParticle *daugh2=0;
1543 AliAODMCParticle *daughK0=0;
1544 AliAODMCParticle *daughK0s1=0;
1545 AliAODMCParticle *daughK0s2=0;
1546 AliAODMCParticle *daughL1=0;
1547 AliAODMCParticle *daughL2=0;
992ba7d8 1548
e7af8919 1549 Int_t nDaughLc=0;
992ba7d8 1550 Int_t nDaughK0=0;
1551 Int_t nDaughK0s=0;
1552 Int_t searchLcpdg=0;
1553 Int_t daughPdg1=0;
1554 Int_t daughPdg2=0;
1555 Int_t daughK0Pdg=0;
1556 Int_t nDaughL=0;
1557 Int_t daughK0s1pdg;
1558 Int_t daughK0s2pdg;
1559 Int_t daughL1pdg=0;
1560 Int_t daughL2pdg=0;
1561
1562 TString fillthis="";
1563 fillthis="histMcStatLc";
1564
1565 for (Int_t iii=0; iii<arrayMC->GetEntries(); iii++) {
1566 searchLc = (AliAODMCParticle*)arrayMC->At(iii);
1567 searchLcpdg = searchLc->GetPdgCode();
1568 if (TMath::Abs(searchLcpdg) == 4122) {
1569 ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(0);
1570 nDaughLc= searchLc->GetNDaughters();
1571
1572 if (searchLcpdg == 4122) { // It is Lc+
1573 ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(1);
1574 if (nDaughLc!=2) continue;
a578b2da 1575 if (searchLc->GetDaughter(0)<0 || searchLc->GetDaughter(1)) continue;
992ba7d8 1576 daugh1 = (AliAODMCParticle*)arrayMC->At(searchLc->GetDaughter(0));
992ba7d8 1577 daugh2 = (AliAODMCParticle*)arrayMC->At(searchLc->GetDaughter(1));
a578b2da 1578 if (!daugh1 || !daugh2) continue;
1579 daughPdg1=daugh1->GetPdgCode();
992ba7d8 1580 daughPdg2=daugh2->GetPdgCode();
a578b2da 1581
992ba7d8 1582 if ( (daughPdg1==2212 && daughPdg2==-311) ||
1583 (daughPdg2==2212 && daughPdg1==-311) ) { // Lc+ -> p K0bar
1584 ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(2);
a578b2da 1585
992ba7d8 1586 if (daughPdg1==-311) {
992ba7d8 1587 nDaughK0=daugh1->GetNDaughters();
e7af8919 1588 if (nDaughK0!=1) {
1589 ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(4);
1590 continue;
e7af8919 1591 }
a578b2da 1592 daughK0 = (AliAODMCParticle*)arrayMC->At(daugh1->GetDaughter(0)); // K0S
1593 } else { // if (daughPdg2==-311)
e7af8919 1594 nDaughK0=daugh2->GetNDaughters();
1595 if (nDaughK0!=1) {
1596 ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(4);
1597 continue;
e7af8919 1598 }
a578b2da 1599 daughK0 = (AliAODMCParticle*)arrayMC->At(daugh2->GetDaughter(0)); // K0S
992ba7d8 1600 }
e7af8919 1601 if (!daughK0) {
1602 //((TH1F*)(fOutput->FindObject(fillthis)))->Fill(4);
1603 continue;
992ba7d8 1604 }
e7af8919 1605 AliInfo(" Found positive daughK0 ");
1606 daughK0Pdg=daughK0->GetPdgCode();
1607 if (daughK0Pdg!=310) {
1608 ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(4);
1609 continue;
a578b2da 1610 }
1611 ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(3);
1612 nDaughK0s=daughK0->GetNDaughters();
1613 if (nDaughK0s!=2) {
1614 ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(6);
1615 continue;
1616 }
1617 if (daughK0->GetDaughter(0)<0 || daughK0->GetDaughter(1)<0) continue;
1618 daughK0s1= (AliAODMCParticle*)arrayMC->At(daughK0->GetDaughter(0));
1619 daughK0s2= (AliAODMCParticle*)arrayMC->At(daughK0->GetDaughter(1));
1620 if (!daughK0s1 || !daughK0s2) continue;
1621 daughK0s1pdg=daughK0s1->GetPdgCode();
1622 daughK0s2pdg=daughK0s2->GetPdgCode();
1623
1624 if ( ((daughK0s1pdg==211) && (daughK0s2pdg==-211)) ||
1625 ((daughK0s2pdg==211) && (daughK0s1pdg==-211)) ) ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(5);
1626 else ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(6);
e7af8919 1627
a578b2da 1628 } //if ((daughPdg1==2212 && daughPdg2==-311)||(daughPdg2==2212 && daughPdg1==-311))
992ba7d8 1629
1630 else if ( (daughPdg1==3122 && daughPdg2==211) ||
1631 (daughPdg2==3122 && daughPdg1==211) ) { // Lc+ -> pi+ Lambda
1632 ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(7);
a578b2da 1633
e7af8919 1634 if (daughPdg1==3122)
1635 daugh = (AliAODMCParticle*)arrayMC->At(searchLc->GetDaughter(0)); // Lambda
1636 else
1637 daugh = (AliAODMCParticle*)arrayMC->At(searchLc->GetDaughter(1)); // Lambda
1638 if (!daugh) continue;
e7af8919 1639 AliInfo(" Found positive daughL ");
992ba7d8 1640 nDaughL=daugh->GetNDaughters();
a578b2da 1641 if (nDaughL!=2) {
1642 ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(9);
1643 continue;
1644 }
1645 if (daugh->GetDaughter(0)<0 || daugh->GetDaughter(1)<0) continue;
1646 daughL1= (AliAODMCParticle*)arrayMC->At(daugh->GetDaughter(0));
1647 daughL2= (AliAODMCParticle*)arrayMC->At(daugh->GetDaughter(1));
1648 if (!daughL1 || !daughL2) continue;
1649 daughL1pdg=daughL1->GetPdgCode();
1650 daughL2pdg=daughL2->GetPdgCode();
1651 if ( ((daughL1pdg==-211) && (daughL2pdg==2212)) ||
1652 ((daughL2pdg==-211) && (daughL1pdg==2212)) ) ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(8);
992ba7d8 1653 else ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(9);
992ba7d8 1654
a578b2da 1655 }//else if ((daughPdg1==3122 && daughPdg2==211)||(daughPdg2==3122 && daughPdg1==211))
992ba7d8 1656
1657 }//if (searchLcpdg == 4122)
1658
1659 if (searchLcpdg == -4122) { // It is Lc+
a578b2da 1660
992ba7d8 1661 ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(-1);
a578b2da 1662
992ba7d8 1663 if (nDaughLc!=2) continue;
a578b2da 1664 if (searchLc->GetDaughter(0)<0 || searchLc->GetDaughter(1)<0) continue;
992ba7d8 1665 daugh1 = (AliAODMCParticle*)arrayMC->At(searchLc->GetDaughter(0));
992ba7d8 1666 daugh2 = (AliAODMCParticle*)arrayMC->At(searchLc->GetDaughter(1));
a578b2da 1667 if (!daugh1 || !daugh2) continue;
1668 daughPdg1=daugh1->GetPdgCode();
992ba7d8 1669 daughPdg2=daugh2->GetPdgCode();
1670 if ( (daughPdg1==-2212 && daughPdg2==311) ||
1671 (daughPdg2==-2212 && daughPdg1==311) ) { // Lc- -> pbar K0
1672 ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(-2);
a578b2da 1673
992ba7d8 1674 if (daughPdg1==311) {
992ba7d8 1675 nDaughK0=daugh1->GetNDaughters();
e7af8919 1676 if (nDaughK0!=1) {
1677 ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(-4);
1678 continue;
e7af8919 1679 }
a578b2da 1680 daughK0 = (AliAODMCParticle*)arrayMC->At(daugh1->GetDaughter(0));
1681
e7af8919 1682 } else {
1683 nDaughK0=daugh2->GetNDaughters();
1684 if (nDaughK0!=1) {
1685 ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(-4);
1686 continue;
e7af8919 1687 }
a578b2da 1688 daughK0 = (AliAODMCParticle*)arrayMC->At(daugh2->GetDaughter(0));
1689
e7af8919 1690 }
1691 if (!daughK0) {
1692 //((TH1F*)(fOutput->FindObject(fillthis)))->Fill(4);
1693 continue;
992ba7d8 1694 }
a578b2da 1695
e7af8919 1696 AliInfo(" Found negative daughK0 ");
1697 daughK0Pdg=daughK0->GetPdgCode();
1698 if (daughK0Pdg!=310) {
1699 ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(-4);
1700 continue;
a578b2da 1701 }
1702 ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(-3);
1703 nDaughK0s=daughK0->GetNDaughters();
1704 if (nDaughK0s!=2) {
1705 ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(-6);
1706 continue;
1707 }
1708 if (daughK0->GetDaughter(0)<0 || daughK0->GetDaughter(1)<0) continue;
1709 daughK0s1= (AliAODMCParticle*)arrayMC->At(daughK0->GetDaughter(0));
1710 daughK0s2= (AliAODMCParticle*)arrayMC->At(daughK0->GetDaughter(1));
1711 if (!daughK0s1 || !daughK0s2) continue;
1712 daughK0s1pdg=daughK0s1->GetPdgCode();
1713 daughK0s2pdg=daughK0s2->GetPdgCode();
1714 if ( ((daughK0s1pdg==211) && (daughK0s2pdg==-211)) ||
1715 ((daughK0s2pdg==211) && (daughK0s1pdg==-211)) ) ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(-5);
1716 else ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(-6);
1717
992ba7d8 1718 }//if ((daughPdg1==-2212 && daughPdg2==-311)||(daughPdg2==-2212 && daughPdg1==-311))
1719
e7af8919 1720 else if ( (daughPdg1==-3122 && daughPdg2==-211) ||
1721 (daughPdg2==-3122 && daughPdg1==-211) ) {
992ba7d8 1722 ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(-7);
e7af8919 1723 if (daughPdg1==-3122)
1724 daugh = (AliAODMCParticle*)arrayMC->At(searchLc->GetDaughter(0));
1725 else
1726 daugh = (AliAODMCParticle*)arrayMC->At(searchLc->GetDaughter(1));
1727 if (!daugh) continue;
e7af8919 1728 AliInfo(" Found negative daughL ");
992ba7d8 1729 nDaughL=daugh->GetNDaughters();
a578b2da 1730 if (nDaughL!=2) {
1731 ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(-9);
1732 continue;
1733 }
1734 daughL1 = (AliAODMCParticle*)arrayMC->At(daugh->GetDaughter(0));
1735 daughL2 = (AliAODMCParticle*)arrayMC->At(daugh->GetDaughter(1));
1736 daughL1pdg=daughL1->GetPdgCode();
1737 daughL2pdg= daughL2->GetPdgCode();
1738 if ( ((daughL1pdg==211) && (daughL2pdg==-2212)) ||
1739 ((daughL2pdg==211) && (daughL1pdg==-2212)) ) ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(-8);
992ba7d8 1740 else ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(-9);
992ba7d8 1741
a578b2da 1742 }//else if ((daughPdg1==-3122 && daughPdg2==-211)||(daughPdg2==-3122 && daughPdg1==-211))
992ba7d8 1743
a578b2da 1744 } // pdgLc==-4122
992ba7d8 1745 }// if (TMath::Abs(searchLcpdg) == 4122)
1746 }// for (Int_t iii=0; iii<arrayMC->GetEntries(); iii++)
1747
1748}
1749//----------------------------------------------------
1750
1751void AliAnalysisTaskSELc2V0bachelor::FillArmPodDistribution(AliAODv0 *vZero,
1752 TString histoTitle,
1753 TList *histoList) {
1754
1755 Double_t alpha = vZero->AlphaV0();
1756 Double_t qT = vZero->PtArmV0();
1757
1758 ((TH2F*)(histoList->FindObject(histoTitle)))->Fill(alpha,qT);
1759
1760}
1761//----------------------------------------------------
1762
1763void AliAnalysisTaskSELc2V0bachelor::DefineK0SHistos()
1764{
1765
1766 TString nameMass=" ", nameSgn=" ", nameBkg=" ";
1767
1768 ///---------------- START K0S HISTOS DECLARATIONS -------------------///
1769
0dbd1d4f 1770 if (fUseOnTheFlyV0) {
1771
1772 // V0 invariant masses (on-the-fly)
1773 nameMass="histK0SMass";
a578b2da 1774 TH2F* spectrumK0SMass = new TH2F(nameMass.Data(),"K^{0}_{S} invariant mass VS p_{T}; M(#pi^{+}#pi^{-}) [GeV/c^{2}]; p_{T}(K^{0}_{S}) [GeV/c]; Entries",
0dbd1d4f 1775 520,0.43,0.56,200,0.,20.);
0dbd1d4f 1776
1777 // Lc invariant masses (x K0S on-the-fly)
1778 nameMass="histLcMassByK0S";
a578b2da 1779 TH2F* spectrumLcMassByK0S = new TH2F(nameMass.Data(),"#Lambda_{C} invariant mass (by K^{0}_{S}) vs p_{T} ; M(#Lambda_{C}) [GeV/c^{2}]; p_{T} [GeV/c]",
1780 1200,2.,2.6,200,0.,20.);
1781
1782 //nameMass="histcosOAK0Spvsp";
1783 //TH2F* cosOpeningAngleK0Spvsp = new TH2F(nameMass.Data(),"#Lambda_{C}: cosine of K^{0}_{S} - p opening angle vs #Lambda_{c} momentum; Cos(Opening Angle) ; p [GeV/c]",
1784 //200,-1.,1.,200,0.,20.);
1785
0dbd1d4f 1786 nameMass="histpK0Svsp";
a578b2da 1787 TH2F* momentumDistributionK0Svsp = new TH2F(nameMass.Data(),"#Lambda_{C}: p(K^{0}_{S}) vs p(p); p_{p}; p_{K^{0}_{S}} ",
1788 200,0.,20.,200,0.,20.);
0dbd1d4f 1789
1790 nameMass="histArmPodK0s";
a578b2da 1791 TH2F* armenterosPodK0s = new TH2F(nameMass.Data(),"K^{0}_{S}: Armenteros-Podolanski distribution; #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]",
0dbd1d4f 1792 200,-1.,1.,300,0.,0.3);
1793
a578b2da 1794 nameMass="histDCAtoPVvspK0S";
1795 TH2F *dcatoPVvspK0s = new TH2F(nameMass.Data(),"K^{0}_{S}: DCA to Primary Vertex vs K^{0}_{S} momentum ; p(K^{0}_{S}) [GeV/c]; DCA to Primary Vertex []; Entries",
1796 200,0.,20.,100,0.,10.);
1797
1798 nameMass="histK0ScosPAwrtPVvspK0s";
1799 TH2F *cosPAwrtPVvspK0s = new TH2F(nameMass.Data(),"K^{0}_{S}: cosine of pointing angle wrt primary vertex vs K^{0}_{S} momentum ; p(K^{0}_{S}) [GeV/c]; cosine; Entries",
1800 200,0.,20.,100,0.99,1.);
0dbd1d4f 1801
1802 TH2F* allspectrumK0SMass = (TH2F*)spectrumK0SMass->Clone();
1803 TH2F* allspectrumLcMassByK0S = (TH2F*)spectrumLcMassByK0S->Clone();
a578b2da 1804 //TH2F* allcosOpeningAngleK0Spvsp= (TH2F*)cosOpeningAngleK0Spvsp->Clone();
0dbd1d4f 1805 TH2F* allmomentumDistributionK0Svsp= (TH2F*)momentumDistributionK0Svsp->Clone();
1806 TH2F* alldcatoPVvspK0s=(TH2F*)dcatoPVvspK0s->Clone();
a578b2da 1807 TH2F* allcosV0PAwrtPVvspK0s=(TH2F*)cosPAwrtPVvspK0s->Clone();
0dbd1d4f 1808
1809 TH2F* pidBachspectrumK0SMass = (TH2F*)spectrumK0SMass->Clone();
1810 TH2F* pidBachspectrumLcMassByK0S = (TH2F*)spectrumLcMassByK0S->Clone();
a578b2da 1811 //TH2F* pidBachcosOpeningAngleK0Spvsp= (TH2F*)cosOpeningAngleK0Spvsp->Clone();
0dbd1d4f 1812 TH2F* pidBachmomentumDistributionK0Svsp= (TH2F*)momentumDistributionK0Svsp->Clone();
1813 TH2F* pidBachdcatoPVvspK0s=(TH2F*)dcatoPVvspK0s->Clone();
a578b2da 1814 TH2F* pidBachcosV0PAwrtPVvspK0s=(TH2F*)cosPAwrtPVvspK0s->Clone();
0dbd1d4f 1815
1816 TH2F* allArmenterosPodK0s = (TH2F*)armenterosPodK0s->Clone();
1817 TH2F* pidBachArmenterosPodK0s = (TH2F*)armenterosPodK0s->Clone();
1818
1819 fOutputAll->Add(allspectrumK0SMass);
1820 fOutputAll->Add(allspectrumLcMassByK0S);
a578b2da 1821 //fOutputAll->Add(allcosOpeningAngleK0Spvsp);
0dbd1d4f 1822 fOutputAll->Add(allmomentumDistributionK0Svsp);
1823 fOutputAll->Add(allArmenterosPodK0s);
1824 fOutputAll->Add(alldcatoPVvspK0s);
a578b2da 1825 fOutputAll->Add(allcosV0PAwrtPVvspK0s);
0dbd1d4f 1826
1827 fOutputPIDBach->Add(pidBachspectrumK0SMass);
1828 fOutputPIDBach->Add(pidBachspectrumLcMassByK0S);
a578b2da 1829 //fOutputPIDBach->Add(pidBachcosOpeningAngleK0Spvsp);
0dbd1d4f 1830 fOutputPIDBach->Add(pidBachmomentumDistributionK0Svsp);
1831 fOutputPIDBach->Add(pidBachArmenterosPodK0s);
1832 fOutputPIDBach->Add(pidBachdcatoPVvspK0s);
a578b2da 1833 fOutputPIDBach->Add(pidBachcosV0PAwrtPVvspK0s);
0dbd1d4f 1834
1835 }
992ba7d8 1836
1837 // V0 invariant masses (offline)
1838 nameMass="histK0SMassOffline";
a578b2da 1839 TH2F* spectrumK0SMassOffline = new TH2F(nameMass.Data(),"K^{0}_{S} invariant mass VS p_{T}; M(#pi^{+}#pi^{-}) [GeV/c^{2}]; p_{T}(K^{0}_{S}) [GeV/c]; Entries",
992ba7d8 1840 520,0.43,0.56,200,0.,20.);
992ba7d8 1841
992ba7d8 1842 // Lc invariant masses (x K0S offline)
1843 nameMass="histLcMassOfflineByK0S";
a578b2da 1844 TH2F* spectrumLcMassOfflineByK0S = new TH2F(nameMass.Data(),"#Lambda_{C} invariant mass (by K^{0}_{S}) vs p_{T}; M(K^{0}_{S}p) [GeV/c^{2}]; p_{T} [GeV/c]",
1845 1200,2.,2.6,200,0.,20.);
992ba7d8 1846
1847
a578b2da 1848 //nameMass="histcosOAK0SpvspOffline";
1849 //TH2F* cosOpeningAngleK0SpvspOffline = new TH2F(nameMass.Data(),"#Lambda_{C}: K^{0}_{S} - p opening angle vs p - Offline ; Cos(Opening Angle) ; p [GeV/c]",
1850 //200,-1.,1.,200,0.,20.);
0dbd1d4f 1851
992ba7d8 1852 nameMass="histpK0SvspOffline";
a578b2da 1853 TH2F* momentumDistributionK0SvspOffline = new TH2F(nameMass.Data(),"#Lambda_{C}: p(K^{0}_{S}) vs p(p) - Offline ; p_{p} [GeV/c]; p_{K^{0}_{S}} [GeV/c]",
992ba7d8 1854 200,0.,20.,200,0.,20.);
0dbd1d4f 1855
992ba7d8 1856 nameMass="histOfflineArmPodK0s";
a578b2da 1857 TH2F* armenterosPodK0sOff = new TH2F(nameMass.Data(),"K^{0}_{S} Armenteros-Podolanski distribution - Offline; #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]",
0dbd1d4f 1858 200,-1.,1.,300,0.,0.3);
992ba7d8 1859
a578b2da 1860 nameMass="histDCAtoPVvspK0SOffline";
1861 TH2F *dcatoPVvspK0sOffline = new TH2F(nameMass.Data(),"K^{0}_{S}: DCA to Primary Vertex vs K^{0}_{S} invariant mass - Offline; p(K^{0}_{S}) [GeV/c]; DCA to Primary Vertex []; Entries",
1862 200,0.,20.,100,0.,10.);
1863
1864 nameMass="histK0ScosPAwrtPVvspK0sOffline";
1865 TH2F *cosPAwrtPVvspK0sOffline = new TH2F(nameMass.Data(),"K^{0}_{S}: cosine of pointing angle wrt primary vertex vs K^{0}_{S} momentum - Offline; p(K^{0}_{S}) [GeV/c]; cosine; Entries",
1866 200,0.,20.,100,0.99,1.);
992ba7d8 1867
1868
1869
992ba7d8 1870 TH2F* allspectrumK0SMassOffline = (TH2F*)spectrumK0SMassOffline->Clone();
992ba7d8 1871 TH2F* allspectrumLcMassOfflineByK0S = (TH2F*)spectrumLcMassOfflineByK0S->Clone();
a578b2da 1872 //TH2F* allcosOpeningAngleK0SpvspOffline= (TH2F*)cosOpeningAngleK0SpvspOffline->Clone();
992ba7d8 1873 TH2F* allmomentumDistributionK0SvspOffline= (TH2F*)momentumDistributionK0SvspOffline->Clone();
992ba7d8 1874 TH2F* alldcatoPVvspK0sOffline=(TH2F*)dcatoPVvspK0sOffline->Clone();
a578b2da 1875 TH2F* allcosPAwrtPVvspK0sOffline=(TH2F*)cosPAwrtPVvspK0sOffline->Clone();
992ba7d8 1876
992ba7d8 1877 TH2F* pidBachspectrumK0SMassOffline = (TH2F*)spectrumK0SMassOffline->Clone();
992ba7d8 1878 TH2F* pidBachspectrumLcMassOfflineByK0S = (TH2F*)spectrumLcMassOfflineByK0S->Clone();
a578b2da 1879 //TH2F* pidBachcosOpeningAngleK0SpvspOffline= (TH2F*)cosOpeningAngleK0SpvspOffline->Clone();
992ba7d8 1880 TH2F* pidBachmomentumDistributionK0SvspOffline= (TH2F*)momentumDistributionK0SvspOffline->Clone();
992ba7d8 1881 TH2F* pidBachdcatoPVvspK0sOffline=(TH2F*)dcatoPVvspK0sOffline->Clone();
a578b2da 1882 TH2F* pidBachcosPAwrtPVvspK0sOffline=(TH2F*)cosPAwrtPVvspK0sOffline->Clone();
992ba7d8 1883
992ba7d8 1884 TH2F* allArmenterosPodK0sOff = (TH2F*)armenterosPodK0sOff->Clone();
992ba7d8 1885 TH2F* pidBachArmenterosPodK0sOff = (TH2F*)armenterosPodK0sOff->Clone();
1886
1887
992ba7d8 1888 fOutputAll->Add(allspectrumK0SMassOffline);
992ba7d8 1889 fOutputAll->Add(allspectrumLcMassOfflineByK0S);
a578b2da 1890 //fOutputAll->Add(allcosOpeningAngleK0SpvspOffline);
992ba7d8 1891 fOutputAll->Add(allmomentumDistributionK0SvspOffline);
992ba7d8 1892 fOutputAll->Add(allArmenterosPodK0sOff);
992ba7d8 1893 fOutputAll->Add(alldcatoPVvspK0sOffline);
a578b2da 1894 fOutputAll->Add(allcosPAwrtPVvspK0sOffline);
992ba7d8 1895
992ba7d8 1896 fOutputPIDBach->Add(pidBachspectrumK0SMassOffline);
992ba7d8 1897 fOutputPIDBach->Add(pidBachspectrumLcMassOfflineByK0S);
a578b2da 1898 //fOutputPIDBach->Add(pidBachcosOpeningAngleK0SpvspOffline);
992ba7d8 1899 fOutputPIDBach->Add(pidBachmomentumDistributionK0SvspOffline);
992ba7d8 1900 fOutputPIDBach->Add(pidBachArmenterosPodK0sOff);
992ba7d8 1901 fOutputPIDBach->Add(pidBachdcatoPVvspK0sOffline);
a578b2da 1902 fOutputPIDBach->Add(pidBachcosPAwrtPVvspK0sOffline);
992ba7d8 1903
a578b2da 1904 /*
0dbd1d4f 1905 nameMass="hist1LcMassOfflineByK0S";
a578b2da 1906 TH2D* h1 = new TH2D(nameMass.Data(),"IsEventSelected; M(#Lambda_{C}) [GeV/c^{2}]; p_{T}",1200,2.,2.6,200,0.,20.);
0dbd1d4f 1907 fOutput->Add(h1);
1908 nameMass="hist0LcMassOfflineByK0S";
a578b2da 1909 TH2D* h0 = new TH2D(nameMass.Data(),"!IsEventSelected; M(#Lambda_{C}) [GeV/c^{2}]; p_{T}",1200,2.,2.6,200,0.,20.);
0dbd1d4f 1910 fOutput->Add(h0);
a578b2da 1911 */
992ba7d8 1912
1913 if (fUseMCInfo) {
1914
0dbd1d4f 1915 if (fUseOnTheFlyV0) {
1916
1917 nameSgn="histK0SMassSgn";
1918 nameBkg="histK0SMassBkg";
1919 TH2F* spectrumK0SMassSgn = new TH2F(nameSgn.Data(), "K^{0}_{S} Signal invariant mass VS p_{T} - MC; M(K^{0}_{S}) [GeV/c^{2}]; p_{T}(K^{0}_{S}) [GeV/c]; Entries", 520,0.43,0.56,200,0.,20.);
1920 TH2F* spectrumK0SMassBkg = new TH2F(nameBkg.Data(), "K^{0}_{S} Background invariant mass VS p_{T} - MC; M(K^{0}_{S}) [GeV/c^{2}]; p_{T}(K^{0}_{S}) [GeV/c]; Entries", 520,0.43,0.56,200,0.,20.);
0dbd1d4f 1921
1922 TH2F* allspectrumK0SMassSgn = (TH2F*)spectrumK0SMassSgn->Clone();
1923 TH2F* allspectrumK0SMassBkg = (TH2F*) spectrumK0SMassBkg->Clone();
1924 TH2F* pidBachspectrumK0SMassSgn = (TH2F*)spectrumK0SMassSgn->Clone();
1925 TH2F* pidBachspectrumK0SMassBkg = (TH2F*) spectrumK0SMassBkg->Clone();
992ba7d8 1926
1927
0dbd1d4f 1928 fOutputAll->Add(allspectrumK0SMassSgn);
1929 fOutputAll->Add(allspectrumK0SMassBkg);
1930 fOutputPIDBach->Add(pidBachspectrumK0SMassSgn);
1931 fOutputPIDBach->Add(pidBachspectrumK0SMassBkg);
1932
1933
1934 nameSgn="histLcMassByK0SSgn";
1935 nameBkg="histLcMassByK0SBkg";
1936 TH2F* spectrumLcMassByK0SSgn = new TH2F(nameSgn.Data(), "#Lambda_{C} Signal invariant mass (by K^{0}_{S}) vs p_{T} - MC; M(#Lambda_{C}) [GeV/c^{2}]; p_{T}",
a578b2da 1937 1200,2.,2.6,200,0.,20.);
0dbd1d4f 1938 TH2F* spectrumLcMassByK0SBkg = new TH2F(nameBkg.Data(), "#Lambda_{C} Background invariant mass (by K^{0}_{S}) vs p_{T} - MC; M(#Lambda_{C}) [GeV/c^{2}]; p_{T}",
a578b2da 1939 1200,2.,2.6,200,0.,20.);
0dbd1d4f 1940
1941 TH2F* allspectrumLcMassByK0SSgn = (TH2F*)spectrumLcMassByK0SSgn->Clone();
1942 TH2F* allspectrumLcMassByK0SBkg = (TH2F*) spectrumLcMassByK0SBkg->Clone();
1943 TH2F* pidBachspectrumLcMassByK0SSgn = (TH2F*)spectrumLcMassByK0SSgn->Clone();
1944 TH2F* pidBachspectrumLcMassByK0SBkg = (TH2F*) spectrumLcMassByK0SBkg->Clone();
1945 fOutputAll->Add(allspectrumLcMassByK0SSgn);
1946 fOutputAll->Add(allspectrumLcMassByK0SBkg);
1947 fOutputPIDBach->Add(pidBachspectrumLcMassByK0SSgn);
1948 fOutputPIDBach->Add(pidBachspectrumLcMassByK0SBkg);
1949
a578b2da 1950 /*
0dbd1d4f 1951 nameSgn="histcosOAK0SpSgnvsp";
1952 nameBkg="histcosOAK0SpBkgvsp";
1953 TH2F* cosOpeningAngleK0SpSgnvsp= new TH2F(nameSgn.Data(),"#Lambda_{C} SGN : K^{0}_{S} - p Opening Angle vs p - MC ; Cos(Opening Angle); p ",
1954 200,-1.,1.,200,0.,20.);
1955 TH2F* cosOpeningAngleK0SpBkgvsp= new TH2F(nameBkg.Data(),"#Lambda_{C} BKG : K^{0}_{S} - p Opening Angle vs p - MC; Cos(Opening Angle); p ",
1956 200,-1.,1.,200,0.,20.);
1957
1958 TH2F* allcosOpeningAngleK0SpSgnvsp= (TH2F*)cosOpeningAngleK0SpSgnvsp->Clone();
1959 TH2F* allcosOpeningAngleK0SpBkgvsp= (TH2F*)cosOpeningAngleK0SpBkgvsp->Clone();
1960 TH2F* pidBachcosOpeningAngleK0SpSgnvsp= (TH2F*)cosOpeningAngleK0SpSgnvsp->Clone();
1961 TH2F* pidBachcosOpeningAngleK0SpBkgvsp= (TH2F*)cosOpeningAngleK0SpBkgvsp->Clone();
1962 fOutputAll->Add(allcosOpeningAngleK0SpSgnvsp);
1963 fOutputAll->Add(allcosOpeningAngleK0SpBkgvsp);
1964 fOutputPIDBach->Add(pidBachcosOpeningAngleK0SpSgnvsp);
1965 fOutputPIDBach->Add(pidBachcosOpeningAngleK0SpBkgvsp);
a578b2da 1966 */
0dbd1d4f 1967
1968 nameSgn="histpK0SvspSgn";
1969 nameBkg="histpK0SvspBkg";
1970 TH2F* momentumDistributionK0SvspSgn= new TH2F(nameSgn.Data(),"#Lambda_{C} SGN : K^{0}_{S} vs p Total Momentum Distribution - MC; p_{p}; p_{K^{0}_{S}}",
1971 200,0.,20.,200,0.,20.);
1972 TH2F* momentumDistributionK0SvspBkg= new TH2F(nameBkg.Data(),"#Lambda_{C} BKG : K^{0}_{S} vs p Total Momentum Distribution - MC; p_{p}; p_{K^{0}_{S}}",
1973 200,0.,20.,200,0.,20.);
1974
1975 TH2F* allmomentumDistributionK0SvspSgn= (TH2F*)momentumDistributionK0SvspSgn->Clone();
1976 TH2F* allmomentumDistributionK0SvspBkg= (TH2F*)momentumDistributionK0SvspBkg->Clone();
1977 TH2F* pidBachmomentumDistributionK0SvspSgn= (TH2F*)momentumDistributionK0SvspSgn->Clone();
1978 TH2F* pidBachmomentumDistributionK0SvspBkg= (TH2F*)momentumDistributionK0SvspBkg->Clone();
1979 fOutputAll->Add(allmomentumDistributionK0SvspSgn);
1980 fOutputAll->Add(allmomentumDistributionK0SvspBkg);
1981 fOutputPIDBach->Add(pidBachmomentumDistributionK0SvspSgn);
1982 fOutputPIDBach->Add(pidBachmomentumDistributionK0SvspBkg);
1983
1984
1985 // armenteros-podolanski plots K0S
1986 nameSgn="histArmPodK0sSgn";
1987 nameBkg="histArmPodK0sBkg";
1988 TH2F* armenterosPodK0sSgn = new TH2F(nameSgn.Data(),"K^{0}_{S} Armenteros-Podolanski distribution (sgn); #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]",
1989 200,-1.,1.,300,0.,0.3);
1990 TH2F* armenterosPodK0sBkg = new TH2F(nameBkg.Data(),"K^{0}_{S} Armenteros-Podolanski distribution (bkg); #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]",
1991 200,-1.,1.,300,0.,0.3);
1992
1993 TH2F* allArmenterosPodK0sSgn = (TH2F*)armenterosPodK0sSgn->Clone();
1994 TH2F* allArmenterosPodK0sBkg = (TH2F*)armenterosPodK0sBkg->Clone();
1995 TH2F* pidBachArmenterosPodK0sSgn = (TH2F*)armenterosPodK0sSgn->Clone();
1996 TH2F* pidBachArmenterosPodK0sBkg = (TH2F*)armenterosPodK0sBkg->Clone();
1997
1998 fOutputAll->Add(allArmenterosPodK0sSgn);
1999 fOutputAll->Add(allArmenterosPodK0sBkg);
2000
2001 fOutputPIDBach->Add(pidBachArmenterosPodK0sSgn);
2002 fOutputPIDBach->Add(pidBachArmenterosPodK0sBkg);
2003
2004
a578b2da 2005 nameSgn="histDCAtoPVvspK0SSgn";
2006 nameBkg="histDCAtoPVvspK0SBkg";
2007 TH2F *dcatoPVvspK0sSgn=new TH2F(nameSgn.Data(),"K^{0}_{S}: DCA to Primary Vertex vs K^{0}_{S} invariant mass (sgn); p(K^{0}_{S}) [GeV/c]; DCA to Primary Vertex []; Entries",200,0.,20.,100,0.,10.0);
2008 TH2F *dcatoPVvspK0sBkg=new TH2F(nameBkg.Data(),"K^{0}_{S}: DCA to Primary Vertex vs K^{0}_{S} invariant mass (bkg); p(K^{0}_{S}) [GeV/c]; DCA to Primary Vertex []; Entries",200,0.,20.,100,0.,10.0);
0dbd1d4f 2009
2010 TH2F* alldcatoPVvspK0sSgn= (TH2F*)dcatoPVvspK0sSgn->Clone();
2011 TH2F* alldcatoPVvspK0sBkg= (TH2F*)dcatoPVvspK0sBkg->Clone();
2012 TH2F* pidBachdcatoPVvspK0sSgn= (TH2F*)dcatoPVvspK0sSgn->Clone();
2013 TH2F* pidBachdcatoPVvspK0sBkg= (TH2F*)dcatoPVvspK0sBkg->Clone();
2014
2015 fOutputAll->Add(alldcatoPVvspK0sSgn);
2016 fOutputPIDBach->Add(pidBachdcatoPVvspK0sSgn);
2017 fOutputAll->Add(alldcatoPVvspK0sBkg);
2018 fOutputPIDBach->Add(pidBachdcatoPVvspK0sBkg);
2019
2020 }
992ba7d8 2021
2022
2023 nameSgn="histK0SMassOfflineSgn";
2024 nameBkg="histK0SMassOfflineBkg";
2025 TH2F* spectrumK0SMassOfflineSgn = new TH2F(nameSgn.Data(), "K^{0}_{S} Signal invariant mass VS p_{T} - MC; M(K^{0}_{S}) [GeV/c^{2}]; p_{T}(K^{0}_{S}) [GeV/c]; Entries",
2026 520,0.43,0.56,200,0.,20.);
2027 TH2F* spectrumK0SMassOfflineBkg = new TH2F(nameBkg.Data(), "K^{0}_{S} Background invariant mass VS p_{T} - MC; M(K^{0}_{S}) [GeV/c^{2}]; p_{T}(K^{0}_{S}) [GeV/c]; Entries",
2028 520,0.43,0.56,200,0.,20.);
992ba7d8 2029
992ba7d8 2030 TH2F* allspectrumK0SMassOfflineSgn = (TH2F*)spectrumK0SMassOfflineSgn->Clone();
2031 TH2F* allspectrumK0SMassOfflineBkg = (TH2F*) spectrumK0SMassOfflineBkg->Clone();
992ba7d8 2032 fOutputAll->Add(allspectrumK0SMassOfflineSgn);
2033 fOutputAll->Add(allspectrumK0SMassOfflineBkg);
992ba7d8 2034
2035
0dbd1d4f 2036 TH2F* pidBachspectrumK0SMassOfflineSgn = (TH2F*)spectrumK0SMassOfflineSgn->Clone();
2037 TH2F* pidBachspectrumK0SMassOfflineBkg = (TH2F*) spectrumK0SMassOfflineBkg->Clone();
2038 fOutputPIDBach->Add(pidBachspectrumK0SMassOfflineSgn);
2039 fOutputPIDBach->Add(pidBachspectrumK0SMassOfflineBkg);
992ba7d8 2040
2041
2042 nameSgn="histLcMassOfflineByK0SSgn";
2043 nameBkg="histLcMassOfflineByK0SBkg";
2044 TH2F* spectrumLcMassOfflineByK0SSgn = new TH2F(nameSgn.Data(), "#Lambda_{C} Signal invariant mass (by K^{0}_{S}) vs p_{T} - MC; M(#Lambda_{C}) [GeV/c^{2}]; p_{T}",
a578b2da 2045 1200,2.,2.6,200,0.,20.);
992ba7d8 2046 TH2F* spectrumLcMassOfflineByK0SBkg = new TH2F(nameBkg.Data(), "#Lambda_{C} Background invariant mass (by K^{0}_{S}) vs p_{T} - MC; M(#Lambda_{C}) [GeV/c^{2}]; p_{T}",
a578b2da 2047 1200,2.,2.6,200,0.,20.);
992ba7d8 2048
2049
2050 TH2F* allspectrumLcMassOfflineByK0SSgn = (TH2F*)spectrumLcMassOfflineByK0SSgn->Clone();
2051 TH2F* allspectrumLcMassOfflineByK0SBkg = (TH2F*) spectrumLcMassOfflineByK0SBkg->Clone();
2052 TH2F* pidBachspectrumLcMassOfflineByK0SSgn = (TH2F*)spectrumLcMassOfflineByK0SSgn->Clone();
2053 TH2F* pidBachspectrumLcMassOfflineByK0SBkg = (TH2F*) spectrumLcMassOfflineByK0SBkg->Clone();
2054 fOutputAll->Add(allspectrumLcMassOfflineByK0SSgn);
2055 fOutputAll->Add(allspectrumLcMassOfflineByK0SBkg);
2056 fOutputPIDBach->Add(pidBachspectrumLcMassOfflineByK0SSgn);
2057 fOutputPIDBach->Add(pidBachspectrumLcMassOfflineByK0SBkg);
2058
992ba7d8 2059
2060
a578b2da 2061 /*
992ba7d8 2062 nameSgn="histcosOAK0SpSgnvspOffline";
2063 nameBkg="histcosOAK0SpBkgvspOffline";
e7af8919 2064 TH2F* cosOpeningAngleK0SpSgnvspOffline= new TH2F(nameSgn.Data(),"#Lambda_{C} SGN : K^{0}_{S} - p Opening Angle vs p - Offline - MC ; Cos(Opening Angle); p ",
992ba7d8 2065 200,-1.,1.,200,0.,20.);
e7af8919 2066 TH2F* cosOpeningAngleK0SpBkgvspOffline= new TH2F(nameBkg.Data(),"#Lambda_{C} BKG : K^{0}_{S} - p Opening Angle vs p - Offline - MC; Cos(Opening Angle); p ",
992ba7d8 2067 200,-1.,1.,200,0.,20.);
2068
2069
2070 TH2F* allcosOpeningAngleK0SpSgnvspOffline= (TH2F*)cosOpeningAngleK0SpSgnvspOffline->Clone();
2071 TH2F* allcosOpeningAngleK0SpBkgvspOffline= (TH2F*)cosOpeningAngleK0SpBkgvspOffline->Clone();
2072 TH2F* pidBachcosOpeningAngleK0SpSgnvspOffline= (TH2F*)cosOpeningAngleK0SpSgnvspOffline->Clone();
2073 TH2F* pidBachcosOpeningAngleK0SpBkgvspOffline= (TH2F*)cosOpeningAngleK0SpBkgvspOffline->Clone();
2074 fOutputAll->Add(allcosOpeningAngleK0SpSgnvspOffline);
2075 fOutputAll->Add(allcosOpeningAngleK0SpBkgvspOffline);
2076 fOutputPIDBach->Add(pidBachcosOpeningAngleK0SpSgnvspOffline);
2077 fOutputPIDBach->Add(pidBachcosOpeningAngleK0SpBkgvspOffline);
a578b2da 2078 */
992ba7d8 2079
2080
2081
992ba7d8 2082 nameSgn="histpK0SvspOfflineSgn";
2083 nameBkg="histpK0SvspOfflineBkg";
e7af8919 2084 TH2F* momentumDistributionK0SvspOfflineSgn= new TH2F(nameSgn.Data(),"#Lambda_{C} SGN : K^{0}_{S} vs p Total Momentum Distribution - Offline - MC; p_{p}; p_{K^{0}_{S}}",
992ba7d8 2085 200,0.,20.,200,0.,20.);
e7af8919 2086 TH2F* momentumDistributionK0SvspOfflineBkg= new TH2F(nameBkg.Data(),"#Lambda_{C} BKG : K^{0}_{S} vs p Total Momentum Distribution - Offline - MC; p_{p}; p_{K^{0}_{S}}",
992ba7d8 2087 200,0.,20.,200,0.,20.);
2088
2089
2090 TH2F* allmomentumDistributionK0SvspOfflineSgn= (TH2F*)momentumDistributionK0SvspOfflineSgn->Clone();
2091 TH2F* allmomentumDistributionK0SvspOfflineBkg= (TH2F*)momentumDistributionK0SvspOfflineBkg->Clone();
2092 TH2F* pidBachmomentumDistributionK0SvspOfflineSgn= (TH2F*)momentumDistributionK0SvspOfflineSgn->Clone();
2093 TH2F* pidBachmomentumDistributionK0SvspOfflineBkg= (TH2F*)momentumDistributionK0SvspOfflineBkg->Clone();
2094 fOutputAll->Add(allmomentumDistributionK0SvspOfflineSgn);
2095 fOutputAll->Add(allmomentumDistributionK0SvspOfflineBkg);
2096 fOutputPIDBach->Add(pidBachmomentumDistributionK0SvspOfflineSgn);
2097 fOutputPIDBach->Add(pidBachmomentumDistributionK0SvspOfflineBkg);
2098
2099
2100
2101
2102
992ba7d8 2103 // armenteros-podolanski plots K0S (offline)
2104 nameSgn="histOfflineArmPodK0sSgn";
2105 nameBkg="histOfflineArmPodK0sBkg";
2106 TH2F* armenterosPodK0sOffSgn = new TH2F(nameSgn.Data(),"K^{0}_{S} Armenteros-Podolanski distribution (sgn) -offline-; #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]",200,-1.,1.,300,0.,0.3);
2107 TH2F* armenterosPodK0sOffBkg = new TH2F(nameBkg.Data(),"K^{0}_{S} Armenteros-Podolanski distribution (bkg) -offline-; #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]",200,-1.,1.,300,0.,0.3);
2108
2109
992ba7d8 2110 TH2F* allArmenterosPodK0sOffSgn = (TH2F*)armenterosPodK0sOffSgn->Clone();
2111 TH2F* allArmenterosPodK0sOffBkg = (TH2F*)armenterosPodK0sOffBkg->Clone();
992ba7d8 2112 TH2F* pidBachArmenterosPodK0sOffSgn = (TH2F*)armenterosPodK0sOffSgn->Clone();
2113 TH2F* pidBachArmenterosPodK0sOffBkg = (TH2F*)armenterosPodK0sOffBkg->Clone();
2114
0dbd1d4f 2115
992ba7d8 2116 fOutputAll->Add(allArmenterosPodK0sOffSgn);
2117 fOutputAll->Add(allArmenterosPodK0sOffBkg);
992ba7d8 2118 fOutputPIDBach->Add(pidBachArmenterosPodK0sOffSgn);
2119 fOutputPIDBach->Add(pidBachArmenterosPodK0sOffBkg);
2120
2121
a578b2da 2122 nameSgn="histDCAtoPVvspK0SOfflineSgn";
2123 nameBkg="histDCAtoPVvspK0SOfflineBkg";
2124 TH2F *dcatoPVvspK0sOfflineSgn=new TH2F(nameSgn.Data(),"K^{0}_{S}: DCA to Primary Vertex vs K^{0}_{S} invariant mass -offline - (sgn); p(K^{0}_{S}) [GeV/c]; DCA to Primary Vertex []; Entries",200,0.,20.,100,0.,10.0);
2125 TH2F *dcatoPVvspK0sOfflineBkg=new TH2F(nameBkg.Data(),"K^{0}_{S}: DCA to Primary Vertex vs K^{0}_{S} invariant mass -offline - (bkg); p(K^{0}_{S}) [GeV/c]; DCA to Primary Vertex []; Entries",200,0.,20.,100,0.,10.0);
992ba7d8 2126
2127
992ba7d8 2128 TH2F* alldcatoPVvspK0sOfflineSgn= (TH2F*)dcatoPVvspK0sOfflineSgn->Clone();
2129 TH2F* pidBachdcatoPVvspK0sOfflineSgn= (TH2F*)dcatoPVvspK0sOfflineSgn->Clone();
2130 TH2F* alldcatoPVvspK0sOfflineBkg= (TH2F*)dcatoPVvspK0sOfflineBkg->Clone();
2131 TH2F* pidBachdcatoPVvspK0sOfflineBkg= (TH2F*)dcatoPVvspK0sOfflineBkg->Clone();
2132
2133
2134
992ba7d8 2135 fOutputAll->Add(alldcatoPVvspK0sOfflineSgn);
2136 fOutputPIDBach->Add(pidBachdcatoPVvspK0sOfflineSgn);
2137 fOutputAll->Add(alldcatoPVvspK0sOfflineBkg);
2138 fOutputPIDBach->Add(pidBachdcatoPVvspK0sOfflineBkg);
2139
2140 }
2141
2142
2143 ///---------------- END K0S HISTOS DECLARATIONS -------------------///
2144}