]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGLF/STRANGENESS/Cascades/AliAnalysisTaskCheckCascadePbPb.cxx
Min number of TPC clusters as parameter
[u/mrichter/AliRoot.git] / PWGLF / STRANGENESS / Cascades / AliAnalysisTaskCheckCascadePbPb.cxx
CommitLineData
f9a6cab5 1/**************************************************************************
2 * Authors : Antonin Maire, Boris Hippolyte *
3 * Contributors are mentioned in the code where appropriate. *
4 * *
5 * Permission to use, copy, modify and distribute this software and its *
6 * documentation strictly for non-commercial purposes is hereby granted *
7 * without fee, provided that the above copyright notice appears in all *
8 * copies and that both the copyright notice and this permission notice *
9 * appear in the supporting documentation. The authors make no claims *
10 * about the suitability of this software for any purpose. It is *
11 * provided "as is" without express or implied warranty. *
12 **************************************************************************/
13
14//-----------------------------------------------------------------
15// AliAnalysisTaskCheckCascadePbPb class
16//
17// Origin AliAnalysisTaskCheckCascade which has four roles :
18// 1. QAing the Cascades from ESD and AOD
19// Origin: AliAnalysisTaskESDCheckV0 by Boris Hippolyte Nov2007, hippolyt@in2p3.fr
20// 2. Prepare the plots which stand as raw material for yield extraction (wi/wo PID)
21// 3. Supply an AliCFContainer meant to define the optimised topological selections
22// 4. Rough azimuthal correlation study (Eta, Phi)
23// Adapted to Cascade : A.Maire Mar2008, antonin.maire@ires.in2p3.fr
24// Modified : A.Maire Mar2010
25//
39b18694 26// Adapted to PbPb analysis: M. Nicassio, maria.nicassio@ba.infn.it
27// Feb-August2011
28// - Physics selection moved to the run.C macro
79313da9 29// - Centrality selection added (+ setters)
30// - setters added (vertex range)
39b18694 31// - histo added and histo/container binning changed
32// - protection in the destructor for CAF usage
33// - AliWarning disabled
39b18694 34// - automatic settings for PID
35// September2011
36// - proper time histos/container added (V0 and Cascades)
39b18694 37// November2011
ff9a705e 38// - re-run V0's and cascade's vertexers (SetCuts instead of SetDefaultCuts!!)
79313da9 39// Genuary2012
39b18694 40// - AOD analysis part completed
79313da9 41// March2012
42// - min number of TPC clusters for track selection as a parameter
f9a6cab5 43//-----------------------------------------------------------------
44
45class TTree;
46class TParticle;
47class TVector3;
48
49class AliESDVertex;
50class AliAODVertex;
51class AliESDv0;
52class AliAODv0;
53
54#include <Riostream.h>
55#include "TList.h"
56#include "TH1.h"
57#include "TH2.h"
58#include "TH3.h"
59#include "THnSparse.h"
60#include "TVector3.h"
61#include "TCanvas.h"
62#include "TMath.h"
63#include "TLegend.h"
64
65
66#include "AliLog.h"
67#include "AliCentrality.h"
68#include "AliESDEvent.h"
69#include "AliAODEvent.h"
39b18694 70#include "AliV0vertexer.h"
71#include "AliCascadeVertexer.h"
11bcd1e4 72#include "AliESDtrackCuts.h"
73#include "AliPIDResponse.h"
f9a6cab5 74
75#include "AliESDVZERO.h"
76
77#include "AliInputEventHandler.h"
78#include "AliAnalysisManager.h"
79#include "AliMCEventHandler.h"
39b18694 80#include "AliESDInputHandler.h"
81#include "AliAODInputHandler.h"
f9a6cab5 82#include "AliCFContainer.h"
83#include "AliMultiplicity.h"
84
85#include "AliESDcascade.h"
86#include "AliAODcascade.h"
39b18694 87#include "AliAODTrack.h"
f9a6cab5 88
89#include "AliAnalysisTaskCheckCascadePbPb.h"
90
91ClassImp(AliAnalysisTaskCheckCascadePbPb)
92
93
94
95//________________________________________________________________________
96AliAnalysisTaskCheckCascadePbPb::AliAnalysisTaskCheckCascadePbPb()
39b18694 97 : AliAnalysisTaskSE(), fAnalysisType("ESD"), fESDtrackCuts(0),/*fPaveTextBookKeeping(0),*/
11bcd1e4 98 fPIDResponse (0),
f9a6cab5 99 fkRerunV0CascVertexers (0),
100 fkQualityCutZprimVtxPos (kTRUE),
101 fkQualityCutNoTPConlyPrimVtx(kTRUE),
102 fkQualityCutTPCrefit (kTRUE),
79313da9 103 fkQualityCutnTPCcls (kTRUE),
104 fMinnTPCcls (0),
f9a6cab5 105 fkExtraSelections (0),
106 fCentrLowLim (0),
107 fCentrUpLim (0),
108 fCentrEstimator (0),
109 fVtxRange (0),
f9a6cab5 110
111
112 // - Cascade part initialisation
113 fListHistCascade(0),
11bcd1e4 114 fHistEvtsInCentralityBinsvsNtracks(0),
f9a6cab5 115 fHistCascadeMultiplicityBeforeEvSel(0),
116 fHistCascadeMultiplicityForCentrEvt(0), fHistTrackMultiplicityForCentrEvt(0), fHistTPCrefitTrackMultiplicityForCentrEvt(0),
f9a6cab5 117 fHistCascadeMultiplicityForSelEvt(0),
118 fHistPosBestPrimaryVtxXForSelEvt(0), fHistPosBestPrimaryVtxYForSelEvt(0), fHistPosBestPrimaryVtxZForSelEvt(0),
119 fHistTPCrefitTrackMultiplicityForCascadeEvt(0),
120 fHistPosV0TPCClusters(0), fHistNegV0TPCClusters(0), fHistBachTPCClusters(0),
121 fHistVtxStatus(0),
122
123 fHistPosTrkgPrimaryVtxXForCascadeEvt(0), fHistPosTrkgPrimaryVtxYForCascadeEvt(0), fHistPosTrkgPrimaryVtxZForCascadeEvt(0), fHistTrkgPrimaryVtxRadius(0),
124 fHistPosBestPrimaryVtxXForCascadeEvt(0), fHistPosBestPrimaryVtxYForCascadeEvt(0), fHistPosBestPrimaryVtxZForCascadeEvt(0), fHistBestPrimaryVtxRadius(0),
125 f2dHistTrkgPrimVtxVsBestPrimVtx(0),
126
127 fHistEffMassXi(0), fHistChi2Xi(0),
128
129 fHistDcaXiDaughters(0), fHistDcaBachToPrimVertex(0), fHistXiCosineOfPointingAngle(0), fHistXiRadius(0),
130
131 fHistMassLambdaAsCascDghter(0),
132 fHistV0Chi2Xi(0),
133 fHistDcaV0DaughtersXi(0),
134 fHistDcaV0ToPrimVertexXi(0),
988a1924 135 fHistV0CosineOfPointingAngle(0),
f9a6cab5 136 fHistV0RadiusXi(0),
137 fHistDcaPosToPrimVertexXi(0), fHistDcaNegToPrimVertexXi(0),
138
139 fHistMassXiMinus(0), fHistMassXiPlus(0),
140 fHistMassOmegaMinus(0), fHistMassOmegaPlus(0),
141 fHistMassWithCombPIDXiMinus(0), fHistMassWithCombPIDXiPlus(0),
142 fHistMassWithCombPIDOmegaMinus(0), fHistMassWithCombPIDOmegaPlus(0),
143
144 fHistXiTransvMom(0), fHistXiTotMom(0),
145 fHistBachTransvMomXi(0), fHistBachTotMomXi(0),
146
147 fHistChargeXi(0),
148 fHistV0toXiCosineOfPointingAngle(0),
149
150 fHistRapXi(0), fHistRapOmega(0), fHistEtaXi(0),
151 fHistThetaXi(0), fHistPhiXi(0),
152
153 f2dHistArmenteros(0),
154 f2dHistEffMassLambdaVsEffMassXiMinus(0), f2dHistEffMassXiVsEffMassOmegaMinus(0),
155 f2dHistEffMassLambdaVsEffMassXiPlus(0), f2dHistEffMassXiVsEffMassOmegaPlus(0),
156 f2dHistXiRadiusVsEffMassXiMinus(0), f2dHistXiRadiusVsEffMassXiPlus(0),
157 f2dHistXiRadiusVsEffMassOmegaMinus(0), f2dHistXiRadiusVsEffMassOmegaPlus(0),
158
159 f2dHistTPCdEdxOfCascDghters(0),
160
161// f3dHistXiPtVsEffMassVsYXiMinus(0), f3dHistXiPtVsEffMassVsYXiPlus(0),
162// f3dHistXiPtVsEffMassVsYOmegaMinus(0), f3dHistXiPtVsEffMassVsYOmegaPlus(0),
163
164 fCFContCascadePIDXiMinus(0),
165 fCFContCascadePIDXiPlus(0),
166 fCFContCascadePIDOmegaMinus(0),
167 fCFContCascadePIDOmegaPlus(0),
168 fCFContCascadeCuts(0),
169
170// fHnSpAngularCorrXiMinus(0), fHnSpAngularCorrXiPlus(0),
171// fHnSpAngularCorrOmegaMinus(0), fHnSpAngularCorrOmegaPlus(0),
172 fV0Ampl(0),
173
174 fHistDcaXiDaughtersvsInvMass(0), fHistDcaBachToPrimVertexvsInvMass(0), fHistXiCosineOfPointingAnglevsInvMass(0),
175 fHistMassLambdaAsCascDghtervsInvMass(0),fHistDcaV0DaughtersXivsInvMass(0),fHistDcaV0ToPrimVertexXivsInvMass(0)
176
177
178{
179 // Dummy Constructor
f9a6cab5 180 for(Int_t iV0selIdx = 0; iV0selIdx < 7; iV0selIdx++ ) { fV0Sels [iV0selIdx ] = -1.; }
181 for(Int_t iCascSelIdx = 0; iCascSelIdx < 8; iCascSelIdx++ ) { fCascSels [iCascSelIdx ] = -1.; }
182}
183
184
185//________________________________________________________________________
186AliAnalysisTaskCheckCascadePbPb::AliAnalysisTaskCheckCascadePbPb(const char *name)
39b18694 187 : AliAnalysisTaskSE(name), fAnalysisType("ESD"), fESDtrackCuts(0), /*fPaveTextBookKeeping(0),*/
11bcd1e4 188 fPIDResponse (0),
f9a6cab5 189 fkRerunV0CascVertexers (0),
190 fkQualityCutZprimVtxPos (kTRUE),
191 fkQualityCutNoTPConlyPrimVtx(kTRUE),
192 fkQualityCutTPCrefit (kTRUE),
79313da9 193 fkQualityCutnTPCcls (kTRUE),
194 fMinnTPCcls (0),
f9a6cab5 195 fkExtraSelections (0),
196 fCentrLowLim (0),
197 fCentrUpLim (0),
198 fCentrEstimator (0),
199 fVtxRange (0),
f9a6cab5 200
201 // - Cascade part initialisation
202 fListHistCascade(0),
11bcd1e4 203 fHistEvtsInCentralityBinsvsNtracks(0),
f9a6cab5 204 fHistCascadeMultiplicityBeforeEvSel(0),
205 fHistCascadeMultiplicityForCentrEvt(0), fHistTrackMultiplicityForCentrEvt(0), fHistTPCrefitTrackMultiplicityForCentrEvt(0),
f9a6cab5 206 fHistCascadeMultiplicityForSelEvt(0),
207 fHistPosBestPrimaryVtxXForSelEvt(0), fHistPosBestPrimaryVtxYForSelEvt(0), fHistPosBestPrimaryVtxZForSelEvt(0),
208 fHistTPCrefitTrackMultiplicityForCascadeEvt(0),
209 fHistPosV0TPCClusters(0), fHistNegV0TPCClusters(0), fHistBachTPCClusters(0),
210 fHistVtxStatus(0),
211
212 fHistPosTrkgPrimaryVtxXForCascadeEvt(0), fHistPosTrkgPrimaryVtxYForCascadeEvt(0), fHistPosTrkgPrimaryVtxZForCascadeEvt(0), fHistTrkgPrimaryVtxRadius(0),
213 fHistPosBestPrimaryVtxXForCascadeEvt(0), fHistPosBestPrimaryVtxYForCascadeEvt(0), fHistPosBestPrimaryVtxZForCascadeEvt(0), fHistBestPrimaryVtxRadius(0),
214 f2dHistTrkgPrimVtxVsBestPrimVtx(0),
215
216 fHistEffMassXi(0), fHistChi2Xi(0),
217 fHistDcaXiDaughters(0), fHistDcaBachToPrimVertex(0), fHistXiCosineOfPointingAngle(0), fHistXiRadius(0),
218
219 fHistMassLambdaAsCascDghter(0),
220 fHistV0Chi2Xi(0),
221 fHistDcaV0DaughtersXi(0),
222 fHistDcaV0ToPrimVertexXi(0),
988a1924 223 fHistV0CosineOfPointingAngle(0),
f9a6cab5 224 fHistV0RadiusXi(0),
225 fHistDcaPosToPrimVertexXi(0), fHistDcaNegToPrimVertexXi(0),
226
227 fHistMassXiMinus(0), fHistMassXiPlus(0),
228 fHistMassOmegaMinus(0), fHistMassOmegaPlus(0),
229 fHistMassWithCombPIDXiMinus(0), fHistMassWithCombPIDXiPlus(0),
230 fHistMassWithCombPIDOmegaMinus(0), fHistMassWithCombPIDOmegaPlus(0),
231
232 fHistXiTransvMom(0), fHistXiTotMom(0),
233 fHistBachTransvMomXi(0), fHistBachTotMomXi(0),
234
235 fHistChargeXi(0),
236 fHistV0toXiCosineOfPointingAngle(0),
237
238 fHistRapXi(0), fHistRapOmega(0), fHistEtaXi(0),
239 fHistThetaXi(0), fHistPhiXi(0),
240
241 f2dHistArmenteros(0),
242 f2dHistEffMassLambdaVsEffMassXiMinus(0), f2dHistEffMassXiVsEffMassOmegaMinus(0),
243 f2dHistEffMassLambdaVsEffMassXiPlus(0), f2dHistEffMassXiVsEffMassOmegaPlus(0),
244 f2dHistXiRadiusVsEffMassXiMinus(0), f2dHistXiRadiusVsEffMassXiPlus(0),
245 f2dHistXiRadiusVsEffMassOmegaMinus(0), f2dHistXiRadiusVsEffMassOmegaPlus(0),
246
247 f2dHistTPCdEdxOfCascDghters(0),
248
249// f3dHistXiPtVsEffMassVsYXiMinus(0), f3dHistXiPtVsEffMassVsYXiPlus(0),
250// f3dHistXiPtVsEffMassVsYOmegaMinus(0), f3dHistXiPtVsEffMassVsYOmegaPlus(0),
251
252 fCFContCascadePIDXiMinus(0),
253 fCFContCascadePIDXiPlus(0),
254 fCFContCascadePIDOmegaMinus(0),
255 fCFContCascadePIDOmegaPlus(0),
256 fCFContCascadeCuts(0),
257
258// fHnSpAngularCorrXiMinus(0), fHnSpAngularCorrXiPlus(0),
259// fHnSpAngularCorrOmegaMinus(0), fHnSpAngularCorrOmegaPlus(0),
260 fV0Ampl(0),
261
262 fHistDcaXiDaughtersvsInvMass(0), fHistDcaBachToPrimVertexvsInvMass(0), fHistXiCosineOfPointingAnglevsInvMass(0),
263 fHistMassLambdaAsCascDghtervsInvMass(0),fHistDcaV0DaughtersXivsInvMass(0),fHistDcaV0ToPrimVertexXivsInvMass(0)
264
265
266{
267 // Constructor
268
269 // Define input and output slots here
270 // Input slot #0 works with a TChain
271 // DefineInput(0, TChain::Class());
272 // Output slot #1 writes into a TList container (cascade)
39b18694 273 // default Pb-Pb values
f9a6cab5 274 fV0Sels[0] = 33. ; // max allowed chi2
39b18694 275 fV0Sels[1] = 0.1; // min allowed impact parameter for the 1st daughter
276 fV0Sels[2] = 0.1; // min allowed impact parameter for the 2nd daughter
277 fV0Sels[3] = 1.; // max allowed DCA between the daughter tracks
278 fV0Sels[4] = .998 ;// min allowed cosine of V0's pointing angle
279 fV0Sels[5] = 0.9 ; // min radius of the fiducial volume
280 fV0Sels[6] = 100. ; // max radius of the fiducial volume
f9a6cab5 281
282 fCascSels[0] = 33. ; // max allowed chi2 (same as PDC07)
39b18694 283 fCascSels[1] = 0.05; // min allowed V0 impact parameter
284 fCascSels[2] = 0.008; // "window" around the Lambda mass
285 fCascSels[3] = 0.03; // min allowed bachelor's impact parameter //check cuts
286 fCascSels[4] = 0.3 ; // max allowed DCA between the V0 and the bachelor
287 fCascSels[5] = 0.999 ;// min allowed cosine of the cascade pointing angle
288 fCascSels[6] = 0.9 ; // min radius of the fiducial volume
289 fCascSels[7] = 100. ; // max radius of the fiducial volume
f9a6cab5 290
291 // Output slot #0 writes into a TList container (Cascade)
292 DefineOutput(1, TList::Class());
293 /*DefineOutput(2, TPaveText::Class());*/
294 AliLog::SetClassDebugLevel("AliAnalysisTaskCheckCascadePbPb",1); // MN this should (?) enable only AliFatal
295}
296
297
39b18694 298AliAnalysisTaskCheckCascadePbPb::~AliAnalysisTaskCheckCascadePbPb() {
f9a6cab5 299 //
300 // Destructor
301 //
302
303 // For all TH1, 2, 3 HnSparse and CFContainer are in the fListCascade TList.
304 // They will be deleted when fListCascade is deleted by the TSelector dtor
305 // Because of TList::SetOwner() ...
306
307 if (fListHistCascade && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) { delete fListHistCascade; fListHistCascade = 0x0; }
39b18694 308 if (fESDtrackCuts) { delete fESDtrackCuts; fESDtrackCuts = 0x0; }
f9a6cab5 309 //if (fPaveTextBookKeeping) { delete fPaveTextBookKeeping; fPaveTextBookKeeping = 0x0;} // fPaveTextBookKeeping is not strored in the TList
310}
311
312
313
314//________________________________________________________________________
39b18694 315void AliAnalysisTaskCheckCascadePbPb::UserCreateOutputObjects() {
f9a6cab5 316 // Create histograms
317 // Called once
318
319
320
321 fListHistCascade = new TList();
322 fListHistCascade->SetOwner(); // See http://root.cern.ch/root/html/TCollection.html#TCollection:SetOwner
39b18694 323
11bcd1e4 324 // New PID object
39b18694 325 AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
326 AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
327 fPIDResponse = inputHandler->GetPIDResponse();
328
329 // Only used to get the number of primary reconstructed tracks
330 if (fAnalysisType == "ESD"&& (! fESDtrackCuts )){
331 fESDtrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(kTRUE); // Std definition of primary (see kTRUE argument) tracks for 2010
332// fESDtrackCuts->SetEtaRange(-0.8,+0.8);
333// fESDtrackCuts->SetPtRange(0.15, 1e10);
334 Printf("CheckCascade - ESDtrackCuts set up to 2010 std ITS-TPC cuts...");
335 }
336
337 // Initialize cuts to re-run V0 and cascade vertexers
338 fV0Sels[0] = 33. ; // max allowed chi2
339 fV0Sels[1] = 0.1 ; // min allowed impact parameter for the 1st daughter
340 fV0Sels[2] = 0.1 ; // min allowed impact parameter for the 2nd daughter
341 fV0Sels[3] = 1. ; // max allowed DCA between the daughter tracks
342 fV0Sels[4] = .998; // min allowed cosine of V0's pointing angle
343 fV0Sels[5] = 0.9 ; // min radius of the fiducial volume
344 fV0Sels[6] = 100. ; // max radius of the fiducial volume
345
346 fCascSels[0] = 33. ; // max allowed chi2 (not used)
347 fCascSels[1] = 0.05 ; // min allowed V0 impact parameter
348 fCascSels[2] = 0.008 ; // "window" around the Lambda mass
349 fCascSels[3] = 0.05 ; // min allowed bachelor's impact parameter
350 fCascSels[4] = 0.3 ; // max allowed DCA between the V0 and the bachelor
351 fCascSels[5] = 0.9989; // min allowed cosine of the cascade pointing angle
352 fCascSels[6] = 0.9 ; // min radius of the fiducial volume
353 fCascSels[7] = 100. ;
354
f9a6cab5 355
f9a6cab5 356/*
357if( !fPaveTextBookKeeping){
358 // FIXME : prepare a field with the AliRoot+root distrib ...
359
360 fPaveTextBookKeeping = new TPaveText(0.1, 0.1, 0.9, 0.9,"NDC");
361 fPaveTextBookKeeping->SetName("fPaveTextBookKeeping");
362 fPaveTextBookKeeping->SetBorderSize(0);
363 fPaveTextBookKeeping->SetTextAlign(12);
364 fPaveTextBookKeeping->SetFillColor(kWhite);
365 fPaveTextBookKeeping->SetTextFont(42); // regular Arial or Helvetica,
366 fPaveTextBookKeeping->SetTextColor(kBlue+4);
367
368 fPaveTextBookKeeping->AddText( "Task CHECK CASCADE analysis" );
369 fPaveTextBookKeeping->AddText("- - - - - - - - - - - ");
370 fPaveTextBookKeeping->AddText( Form("AnalysisType : %s ", fAnalysisType.Data() ));
39b18694 371
f9a6cab5 372 else fPaveTextBookKeeping->AddText("Colliding system : A-A collisions ");
373
374 fPaveTextBookKeeping->AddText("- - - - - - - - - - - ");
375
376 if(fkRerunV0CascVertexers){
377 fPaveTextBookKeeping->AddText("A.1. With V0 vertexer : ");
378 fPaveTextBookKeeping->AddText( Form(" - V0 #chi^{2} _________________ < %.3f ", fV0Sels[0] ));
379 fPaveTextBookKeeping->AddText( Form(" - DCA(prim. Vtx/ 1^{st} daughter) ___ > %.3f cm ", fV0Sels[1] ));
380 fPaveTextBookKeeping->AddText( Form(" - DCA(prim. Vtx/ 2^{nd} daughter) __ > %.3f cm", fV0Sels[2] ));
381 fPaveTextBookKeeping->AddText( Form(" - DCA between V0 daughters ___ < %.3f cm", fV0Sels[3] ));
382 fPaveTextBookKeeping->AddText( Form(" - cos(V0 pointing angle) _______ > %.3f ", fV0Sels[4] ));
383 fPaveTextBookKeeping->AddText( Form(" - R_{transv}(V0 decay) ________ > %.3f cm", fV0Sels[5] ));
384 fPaveTextBookKeeping->AddText( Form(" - R_{transv}(V0 decay) ________ < %.3f cm", fV0Sels[6] ));
385
386 fPaveTextBookKeeping->AddText(" ");
387
388 fPaveTextBookKeeping->AddText("A.2. With Casc. vertexer : ");
389 fPaveTextBookKeeping->AddText( Form(" - Casc. #chi^{2} ______________ < %.3f ", fCascSels[0] ));
390 fPaveTextBookKeeping->AddText( Form(" - DCA(prim. Vtx/ V0) _________ > %.3f cm", fCascSels[1] ));
391 fPaveTextBookKeeping->AddText( Form(" - | M_{#Lambda}(reco) - M_{#Lambda}(pdg) | _______ < %.3f GeV/c^{2}", fCascSels[2] ));
392 fPaveTextBookKeeping->AddText( Form(" - DCA(prim. Vtx/ Bach) _______ > %.3f cm", fCascSels[3] ));
393 fPaveTextBookKeeping->AddText( Form(" - DCA between Bach/ #Lambda ______ < %.3f cm", fCascSels[4] ));
394 fPaveTextBookKeeping->AddText( Form(" - cos(Casc. pointing angle) ____ > %.3f ", fCascSels[5] ));
395 fPaveTextBookKeeping->AddText( Form(" - R_{transv}(Casc. decay) ______ > %.3f cm", fCascSels[6] ));
396 fPaveTextBookKeeping->AddText( Form(" - R_{transv}(Casc. decay) ______ < %.3f cm", fCascSels[7] ));
397 }
398 else{ fPaveTextBookKeeping->AddText("A. No rerunning of the V0/Casc. vertexers ... See std cuts in (AliRoot+Rec.C) used for this prod. cycle");}
399
400 fPaveTextBookKeeping->AddText("- - - - - - - - - - - ");
401
402 if(fkQualityCutZprimVtxPos) fPaveTextBookKeeping->AddText("B. Quality Cut(prim. Vtx z-Pos) = ON ");
403 else fPaveTextBookKeeping->AddText("B. Quality Cut(prim. Vtx z-Pos) = Off ");
404 if(fkQualityCutNoTPConlyPrimVtx) fPaveTextBookKeeping->AddText("C. Quality Cut(No TPC prim. vtx) = ON ");
405 else fPaveTextBookKeeping->AddText("C. Quality Cut(No TPC prim. vtx) = Off ");
406 if(fkQualityCutTPCrefit) fPaveTextBookKeeping->AddText("D. Quality Cut(TPCrefit) = ON ");
407 else fPaveTextBookKeeping->AddText("D. Quality Cut(TPCrefit) = Off ");
79313da9 408 if(fkQualityCutnTPCcls) fPaveTextBookKeeping->AddText("E. Quality Cut(min n TPC clusters) = ON ");
409 else fPaveTextBookKeeping->AddText("E. Quality Cut(min n TPC clusters) = Off ");
f9a6cab5 410 if(fkExtraSelections) fPaveTextBookKeeping->AddText("F. Extra Analysis Selections = ON ");
411 else fPaveTextBookKeeping->AddText("F. Extra Analysis Selections = Off ");
412
413 fPaveTextBookKeeping->AddText("- - - - - - - - - - - ");
414
f9a6cab5 415}
416*/
417
418 // - General histos
419 //--------------
11bcd1e4 420 // Events in centraity bins
421 Double_t centBinLimits[12] = {0.,5.,10.,20.,30.,40.,50.,60.,70.,80.,90.,100.};
422 fHistEvtsInCentralityBinsvsNtracks = new TH2F("fHistEvtsInCentralityBinsvsNtracks","",11,centBinLimits,100,0.,6000.);
423 fListHistCascade->Add(fHistEvtsInCentralityBinsvsNtracks);
f9a6cab5 424
425if(! fHistCascadeMultiplicityBeforeEvSel) {
39b18694 426 fHistCascadeMultiplicityBeforeEvSel = new TH1F("fHistCascadeMultiplicityBeforeEvSel",
f9a6cab5 427 "Cascades per event (before vertex and centrality selections);Nbr of Cascades/Evt;Events",
428 100, 0, 200000);
f9a6cab5 429 fListHistCascade->Add(fHistCascadeMultiplicityBeforeEvSel);
430}
431
432 // - Histos for events passing the trigger selection
433 //--------------
434
435if(! fHistCascadeMultiplicityForCentrEvt) {
39b18694 436 fHistCascadeMultiplicityForCentrEvt = new TH1F("fHistCascadeMultiplicityForCentrEvt",
f9a6cab5 437 "Cascades per event (for triggered evt);Nbr of Cascades/Evt;Events",
438 100, 0, 200000);
f9a6cab5 439 fListHistCascade->Add(fHistCascadeMultiplicityForCentrEvt);
440}
441
442
443if(! fHistTrackMultiplicityForCentrEvt) {
39b18694 444 fHistTrackMultiplicityForCentrEvt = new TH1F("fHistTrackMultiplicityForCentrEvt",
f9a6cab5 445 "Track Multiplicity (for triggered evt);Nbr of tracks/Evt;Events",
446 200, 0, 12000);
f9a6cab5 447 fListHistCascade->Add(fHistTrackMultiplicityForCentrEvt);
448}
449
450if(! fHistTPCrefitTrackMultiplicityForCentrEvt) {
39b18694 451 fHistTPCrefitTrackMultiplicityForCentrEvt = new TH1F("fHistTPCrefitTrackMultiplicityForCentrEvt",
f9a6cab5 452 "TPCrefit track Multiplicity (for triggered evt);Nbr of TPCrefit tracks/Evt;Events",
453 200, 0, 12000);
f9a6cab5 454 fListHistCascade->Add(fHistTPCrefitTrackMultiplicityForCentrEvt);
455}
456
f9a6cab5 457 // - Histos for events passing the event selection at the analysis level
458 //--------------
459
460if(! fHistCascadeMultiplicityForSelEvt) {
39b18694 461 fHistCascadeMultiplicityForSelEvt = new TH1F("fHistCascadeMultiplicityForSelEvt",
f9a6cab5 462 "Cascades per event;Nbr of Cascades/Evt;Events",
463 100, 0, 200000);
f9a6cab5 464 fListHistCascade->Add(fHistCascadeMultiplicityForSelEvt);
465}
466
467if(! fHistPosBestPrimaryVtxXForSelEvt ){
468 fHistPosBestPrimaryVtxXForSelEvt = new TH1F( "fHistPosBestPrimaryVtxXForSelEvt" , "Best Prim. Vertex Position in x; x (cm); Events" , 360, -0.9, 0.9 );
469 fListHistCascade->Add(fHistPosBestPrimaryVtxXForSelEvt);
470}
471
472if(! fHistPosBestPrimaryVtxYForSelEvt){
473 fHistPosBestPrimaryVtxYForSelEvt = new TH1F( "fHistPosBestPrimaryVtxYForSelEvt" , "Best Prim. Vertex Position in y; y (cm); Events" , 360, -0.9, 0.9 );
474 fListHistCascade->Add(fHistPosBestPrimaryVtxYForSelEvt);
475}
476
477if(! fHistPosBestPrimaryVtxZForSelEvt ){
478 fHistPosBestPrimaryVtxZForSelEvt = new TH1F( "fHistPosBestPrimaryVtxZForSelEvt" , "Best Prim. Vertex Position in z; z (cm); Events" , 300, -30.0, 30.0 );
479 fListHistCascade->Add(fHistPosBestPrimaryVtxZForSelEvt);
480}
481
482
483
484
485 // - Histos for events containing at least ONE CASCADE
486 //--------------
487
488if(! fHistTPCrefitTrackMultiplicityForCascadeEvt) {
39b18694 489 fHistTPCrefitTrackMultiplicityForCascadeEvt = new TH1F("fHistTPCrefitTrackMultiplicityForCascadeEvt",
f9a6cab5 490 "TPCrefit track Multiplicity (for evt with Casc.);Nbr of TPCrefit tracks/Evt with cascade(s);Events",
491 200, 0, 20000);
f9a6cab5 492 fListHistCascade->Add(fHistTPCrefitTrackMultiplicityForCascadeEvt);
493}
494
495if(! fHistPosV0TPCClusters ){
496 fHistPosV0TPCClusters = new TH1F("fHistPosV0TPCClusters", "TPC clusters for Pos. V0 daughter track, in Casc; Nbr of TPC clusters (V0 Pos.); Track counts", 165, 0.0 ,165.0);
497 fListHistCascade->Add(fHistPosV0TPCClusters);
498}
499
500if(! fHistNegV0TPCClusters ){
501 fHistNegV0TPCClusters = new TH1F("fHistNegV0TPCClusters", "TPC clusters for Neg. V0 daughter track, in Casc; Nbr of TPC clusters (V0 Neg.); Track counts", 165, 0.0 ,165.0);
502 fListHistCascade->Add(fHistNegV0TPCClusters);
503}
504
505if(! fHistBachTPCClusters ){
506 fHistBachTPCClusters = new TH1F("fHistBachTPCClusters", "TPC clusters for Bachelor track; Nbr of TPC clusters (Bach); Track counts", 165, 0.0 ,165.0);
507 fListHistCascade->Add(fHistBachTPCClusters);
508}
509
510
511
512if(! fHistVtxStatus ){
513 fHistVtxStatus = new TH1F( "fHistVtxStatus" , "Does a Trckg Prim.vtx exist ?; true=1 or false=0; Nb of Events" , 4, -1.0, 3.0 );
514 fListHistCascade->Add(fHistVtxStatus);
515}
516
517
518 // - Vertex Positions
519
520if(! fHistPosTrkgPrimaryVtxXForCascadeEvt ){
521 fHistPosTrkgPrimaryVtxXForCascadeEvt = new TH1F( "fHistPosTrkgPrimaryVtxXForCascadeEvt" , "Trkg Prim. Vertex Position in x; x (cm); Events" , 120, -0.6, 0.6 );
522 fListHistCascade->Add(fHistPosTrkgPrimaryVtxXForCascadeEvt);
523}
524
525
526if(! fHistPosTrkgPrimaryVtxYForCascadeEvt){
527 fHistPosTrkgPrimaryVtxYForCascadeEvt = new TH1F( "fHistPosTrkgPrimaryVtxYForCascadeEvt" , "Trkg Prim. Vertex Position in y; y (cm); Events" , 120, -0.6, 0.6 );
528 fListHistCascade->Add(fHistPosTrkgPrimaryVtxYForCascadeEvt);
529}
530
531if(! fHistPosTrkgPrimaryVtxZForCascadeEvt ){
532 fHistPosTrkgPrimaryVtxZForCascadeEvt = new TH1F( "fHistPosTrkgPrimaryVtxZForCascadeEvt" , "Trkg Prim. Vertex Position in z; z (cm); Events" , 200, -20.0, 20.0 );
533 fListHistCascade->Add(fHistPosTrkgPrimaryVtxZForCascadeEvt);
534}
535
536if(! fHistTrkgPrimaryVtxRadius ){
537 fHistTrkgPrimaryVtxRadius = new TH1F( "fHistTrkgPrimaryVtxRadius", "Trkg Prim. Vertex radius; r (cm); Events" , 150, 0., 15.0 );
538 fListHistCascade->Add(fHistTrkgPrimaryVtxRadius);
539}
540
541
542
543
544if(! fHistPosBestPrimaryVtxXForCascadeEvt ){
545 fHistPosBestPrimaryVtxXForCascadeEvt = new TH1F( "fHistPosBestPrimaryVtxXForCascadeEvt" , "Best Prim. Vertex Position in x; x (cm); Events" , 120, -0.6, 0.6 );
546 fListHistCascade->Add(fHistPosBestPrimaryVtxXForCascadeEvt);
547}
548
549if(! fHistPosBestPrimaryVtxYForCascadeEvt){
550 fHistPosBestPrimaryVtxYForCascadeEvt = new TH1F( "fHistPosBestPrimaryVtxYForCascadeEvt" , "Best Prim. Vertex Position in y; y (cm); Events" , 120, -0.6, 0.6 );
551 fListHistCascade->Add(fHistPosBestPrimaryVtxYForCascadeEvt);
552}
553
554if(! fHistPosBestPrimaryVtxZForCascadeEvt ){
555 fHistPosBestPrimaryVtxZForCascadeEvt = new TH1F( "fHistPosBestPrimaryVtxZForCascadeEvt" , "Best Prim. Vertex Position in z; z (cm); Events" , 200, -20.0, 20.0 );
556 fListHistCascade->Add(fHistPosBestPrimaryVtxZForCascadeEvt);
557}
558
559if(! fHistBestPrimaryVtxRadius ){
560 fHistBestPrimaryVtxRadius = new TH1F( "fHistBestPrimaryVtxRadius", "Best Prim. vertex radius; r (cm); Events" , 150, 0., 15.0 );
561 fListHistCascade->Add(fHistBestPrimaryVtxRadius);
562}
563
564if(! f2dHistTrkgPrimVtxVsBestPrimVtx) {
565 f2dHistTrkgPrimVtxVsBestPrimVtx = new TH2F( "f2dHistTrkgPrimVtxVsBestPrimVtx", "r_{Trck Prim. Vtx} Vs r_{Best Prim. Vtx}; r_{Track Vtx} (cm); r_{Best Vtx} (cm)", 150, 0., 15.0, 150, 0., 15.);
566 fListHistCascade->Add(f2dHistTrkgPrimVtxVsBestPrimVtx);
567}
568
569
570
571
572// - Typical histos for cascades
573
574
575if(! fHistEffMassXi) {
576 fHistEffMassXi = new TH1F("fHistEffMassXi", "Cascade candidates ; Invariant Mass (GeV/c^{2}) ; Counts", 400, 1.2, 2.0);
577 fListHistCascade->Add(fHistEffMassXi);
578}
579
580if(! fHistChi2Xi ){
581 fHistChi2Xi = new TH1F("fHistChi2Xi", "Cascade #chi^{2}; #chi^{2}; Number of Cascades", 160, 0, 40);
582 fListHistCascade->Add(fHistChi2Xi);
583}
584
585if(! fHistDcaXiDaughters ){
586 fHistDcaXiDaughters = new TH1F( "fHistDcaXiDaughters", "DCA between Xi Daughters; DCA (cm) ; Number of Cascades", 100, 0., 0.5);
587 fListHistCascade->Add(fHistDcaXiDaughters);
588}
589
590if(! fHistDcaBachToPrimVertex) {
591 fHistDcaBachToPrimVertex = new TH1F("fHistDcaBachToPrimVertex", "DCA of Bach. to Prim. Vertex;DCA (cm);Number of Cascades", 250, 0., 0.25);
592 fListHistCascade->Add(fHistDcaBachToPrimVertex);
593}
594
595if(! fHistXiCosineOfPointingAngle) {
39b18694 596 fHistXiCosineOfPointingAngle = new TH1F("fHistXiCosineOfPointingAngle", "Cosine of Xi Pointing Angle; Cos (Xi Point.Angl);Number of Xis", 101, 0.99, 1.0001);
f9a6cab5 597 fListHistCascade->Add(fHistXiCosineOfPointingAngle);
598}
599
600if(! fHistXiRadius ){
601 fHistXiRadius = new TH1F( "fHistXiRadius", "Casc. decay transv. radius; r (cm); Counts" , 1050, 0., 105.0 );
602 fListHistCascade->Add(fHistXiRadius);
603}
604
605
606// - Histos about ~ the "V0 part" of the cascade, coming by inheritance from AliESDv0
607
608
609
610if (! fHistMassLambdaAsCascDghter) {
611 fHistMassLambdaAsCascDghter = new TH1F("fHistMassLambdaAsCascDghter","#Lambda associated to Casc. candidates;Eff. Mass (GeV/c^{2});Counts", 300,1.00,1.3);
612 fListHistCascade->Add(fHistMassLambdaAsCascDghter);
613}
614
615if (! fHistV0Chi2Xi) {
616 fHistV0Chi2Xi = new TH1F("fHistV0Chi2Xi", "V0 #chi^{2}, in cascade; #chi^{2};Counts", 160, 0, 40);
617 fListHistCascade->Add(fHistV0Chi2Xi);
618}
619
620if (! fHistDcaV0DaughtersXi) {
39b18694 621 fHistDcaV0DaughtersXi = new TH1F("fHistDcaV0DaughtersXi", "DCA between V0 daughters, in cascade;DCA (cm);Number of V0s", 240, 0., 1.2);
f9a6cab5 622 fListHistCascade->Add(fHistDcaV0DaughtersXi);
623}
624
625if (! fHistDcaV0ToPrimVertexXi) {
626 fHistDcaV0ToPrimVertexXi = new TH1F("fHistDcaV0ToPrimVertexXi", "DCA of V0 to Prim. Vertex, in cascade;DCA (cm);Number of Cascades", 200, 0., 1.);
627 fListHistCascade->Add(fHistDcaV0ToPrimVertexXi);
628}
629
988a1924 630if (! fHistV0CosineOfPointingAngle) {
631 fHistV0CosineOfPointingAngle = new TH1F("fHistV0CosineOfPointingAngle", "Cosine of V0 Pointing Angle, in cascade;Cos(V0 Point. Angl); Counts", 200, 0.95, 1.0001);
632 fListHistCascade->Add(fHistV0CosineOfPointingAngle);
f9a6cab5 633}
634
635if (! fHistV0RadiusXi) {
636 fHistV0RadiusXi = new TH1F("fHistV0RadiusXi", "V0 decay radius, in cascade; radius (cm); Counts", 1050, 0., 105.0);
637 fListHistCascade->Add(fHistV0RadiusXi);
638}
639
640if (! fHistDcaPosToPrimVertexXi) {
641 fHistDcaPosToPrimVertexXi = new TH1F("fHistDcaPosToPrimVertexXi", "DCA of V0 pos daughter to Prim. Vertex;DCA (cm);Counts", 300, 0, 3);
642 fListHistCascade->Add(fHistDcaPosToPrimVertexXi);
643}
644
645if (! fHistDcaNegToPrimVertexXi) {
646 fHistDcaNegToPrimVertexXi = new TH1F("fHistDcaNegToPrimVertexXi", "DCA of V0 neg daughter to Prim. Vertex;DCA (cm);Counts", 300, 0, 3);
647 fListHistCascade->Add(fHistDcaNegToPrimVertexXi);
648}
649
650
651
652
653 // - Effective mass histos for cascades.
654// By cascade hyp
655if (! fHistMassXiMinus) {
656 fHistMassXiMinus = new TH1F("fHistMassXiMinus","#Xi^{-} candidates;M( #Lambda , #pi^{-} ) (GeV/c^{2});Counts", 400,1.2,2.0);
657 fListHistCascade->Add(fHistMassXiMinus);
658}
659
660if (! fHistMassXiPlus) {
661 fHistMassXiPlus = new TH1F("fHistMassXiPlus","#Xi^{+} candidates;M( #bar{#Lambda}^{0} , #pi^{+} ) (GeV/c^{2});Counts",400,1.2,2.0);
662 fListHistCascade->Add(fHistMassXiPlus);
663}
664
665if (! fHistMassOmegaMinus) {
666 fHistMassOmegaMinus = new TH1F("fHistMassOmegaMinus","#Omega^{-} candidates;M( #Lambda , K^{-} ) (GeV/c^{2});Counts", 500,1.5,2.5);
667 fListHistCascade->Add(fHistMassOmegaMinus);
668}
669
670if (! fHistMassOmegaPlus) {
671 fHistMassOmegaPlus = new TH1F("fHistMassOmegaPlus","#Omega^{+} candidates;M( #bar{#Lambda}^{0} , K^{+} ) (GeV/c^{2});Counts", 500,1.5,2.5);
672 fListHistCascade->Add(fHistMassOmegaPlus);
673}
674
675// By cascade hyp + bachelor PID
676if (! fHistMassWithCombPIDXiMinus) {
677 fHistMassWithCombPIDXiMinus = new TH1F("fHistMassWithCombPIDXiMinus","#Xi^{-} candidates, with Bach. comb. PID;M( #Lambda , #pi^{-} ) (GeV/c^{2});Counts", 400,1.2,2.0);
678 fListHistCascade->Add(fHistMassWithCombPIDXiMinus);
679}
680
681if (! fHistMassWithCombPIDXiPlus) {
682 fHistMassWithCombPIDXiPlus = new TH1F("fHistMassWithCombPIDXiPlus","#Xi^{+} candidates, with Bach. comb. PID;M( #bar{#Lambda}^{0} , #pi^{+} ) (GeV/c^{2});Counts",400,1.2,2.0);
683 fListHistCascade->Add(fHistMassWithCombPIDXiPlus);
684}
685
686if (! fHistMassWithCombPIDOmegaMinus) {
687 fHistMassWithCombPIDOmegaMinus = new TH1F("fHistMassWithCombPIDOmegaMinus","#Omega^{-} candidates, with Bach. comb. PID;M( #Lambda , K^{-} ) (GeV/c^{2});Counts", 500,1.5,2.5);
688 fListHistCascade->Add(fHistMassWithCombPIDOmegaMinus);
689}
690
691if (! fHistMassWithCombPIDOmegaPlus) {
692 fHistMassWithCombPIDOmegaPlus = new TH1F("fHistMassWithCombPIDOmegaPlus","#Omega^{+} candidates, with Bach. comb. PID;M( #bar{#Lambda}^{0} , K^{+} ) (GeV/c^{2});Counts", 500,1.5,2.5);
693 fListHistCascade->Add(fHistMassWithCombPIDOmegaPlus);
694}
695
696
697
698 // - Complements for QA
699
700if(! fHistXiTransvMom ){
701 fHistXiTransvMom = new TH1F( "fHistXiTransvMom" , "#Xi transverse momentum (cand. around the mass peak) ; p_{t}(#Xi) (GeV/c); Counts", 100, 0.0, 10.0);
702 fListHistCascade->Add(fHistXiTransvMom);
703}
704
705if(! fHistXiTotMom ){
706 fHistXiTotMom = new TH1F( "fHistXiTotMom" , "#Xi momentum norm (cand. around the mass peak); p_{tot}(#Xi) (GeV/c); Counts", 150, 0.0, 15.0);
707 fListHistCascade->Add(fHistXiTotMom);
708}
709
710
711if(! fHistBachTransvMomXi ){
712 fHistBachTransvMomXi = new TH1F( "fHistBachTransvMomXi" , "#Xi Bach. transverse momentum (cand. around the mass peak) ; p_{t}(Bach.) (GeV/c); Counts", 100, 0.0, 5.0);
713 fListHistCascade->Add(fHistBachTransvMomXi);
714}
715
716if(! fHistBachTotMomXi ){
717 fHistBachTotMomXi = new TH1F( "fHistBachTotMomXi" , "#Xi Bach. momentum norm (cand. around the mass peak); p_{tot}(Bach.) (GeV/c); Counts", 100, 0.0, 5.0);
718 fListHistCascade->Add(fHistBachTotMomXi);
719}
720
721
722if(! fHistChargeXi ){
723 fHistChargeXi = new TH1F( "fHistChargeXi" , "Charge of casc. candidates ; Sign ; Counts", 5, -2.0, 3.0);
724 fListHistCascade->Add(fHistChargeXi);
725}
726
727
728if (! fHistV0toXiCosineOfPointingAngle) {
39b18694 729 fHistV0toXiCosineOfPointingAngle = new TH1F("fHistV0toXiCosineOfPointingAngle", "Cos. of V0 Ptng Angl / Xi vtx ;Cos(V0 Point. Angl / Xi vtx); Counts", 200, 0.95, 1.0001);
f9a6cab5 730 fListHistCascade->Add(fHistV0toXiCosineOfPointingAngle);
731}
732
733
734if(! fHistRapXi ){
735 fHistRapXi = new TH1F( "fHistRapXi" , "Rapidity of #Xi candidates (around the mass peak); y ; Counts", 20, -1.0, 1.0);
736 fListHistCascade->Add(fHistRapXi);
737}
738
739if(! fHistRapOmega ){
740 fHistRapOmega = new TH1F( "fHistRapOmega" , "Rapidity of #Omega candidates (around the mass peak); y ; Counts", 20, -1.0, 1.0);
741 fListHistCascade->Add(fHistRapOmega);
742}
743
744if(! fHistEtaXi ){
745 fHistEtaXi = new TH1F( "fHistEtaXi" , "Pseudo-rap. of #Xi candidates (around the mass peak) ; #eta ; Counts", 20, -1.0, 1.0);
746 fListHistCascade->Add(fHistEtaXi);
747}
748
749if(! fHistThetaXi ){
750 fHistThetaXi = new TH1F( "fHistThetaXi" , "#theta of #Xi candidates (around the mass peak); #theta (deg) ; Counts", 180, 0., 180.0);
751 fListHistCascade->Add(fHistThetaXi);
752}
753
754if(! fHistPhiXi ){
755 fHistPhiXi = new TH1F( "fHistPhiXi" , "#phi of #Xi candidates (around the mass peak); #phi (deg) ; Counts", 360, 0., 360.);
756 fListHistCascade->Add(fHistPhiXi);
757}
758
759
760if(! f2dHistArmenteros) {
761 f2dHistArmenteros = new TH2F( "f2dHistArmenteros", "#alpha_{Arm}(casc. cand.) Vs Pt_{Arm}(casc. cand.); #alpha_{Arm} ; Pt_{Arm} (GeV/c)", 140, -1.2, 1.2, 300, 0., 0.3);
762 fListHistCascade->Add(f2dHistArmenteros);
763}
764
765//-------
766
767if(! f2dHistEffMassLambdaVsEffMassXiMinus) {
768 f2dHistEffMassLambdaVsEffMassXiMinus = new TH2F( "f2dHistEffMassLambdaVsEffMassXiMinus", "M_{#Lambda} Vs M_{#Xi^{-} candidates} ; Inv. M_{#Lambda^{0}} (GeV/c^{2}) ; M( #Lambda , #pi^{-} ) (GeV/c^{2})", 300, 1.1,1.13, 400, 1.2, 2.0);
769 fListHistCascade->Add(f2dHistEffMassLambdaVsEffMassXiMinus);
770}
771
772if(! f2dHistEffMassXiVsEffMassOmegaMinus) {
773 f2dHistEffMassXiVsEffMassOmegaMinus = new TH2F( "f2dHistEffMassXiVsEffMassOmegaMinus", "M_{#Xi^{-} candidates} Vs M_{#Omega^{-} candidates} ; M( #Lambda , #pi^{-} ) (GeV/c^{2}) ; M( #Lambda , K^{-} ) (GeV/c^{2})", 400, 1.2, 2.0, 500, 1.5, 2.5);
774 fListHistCascade->Add(f2dHistEffMassXiVsEffMassOmegaMinus);
775}
776
777if(! f2dHistEffMassLambdaVsEffMassXiPlus) {
778 f2dHistEffMassLambdaVsEffMassXiPlus = new TH2F( "f2dHistEffMassLambdaVsEffMassXiPlus", "M_{#Lambda} Vs M_{#Xi^{+} candidates} ; Inv. M_{#Lambda^{0}} (GeV/c^{2}) ; M( #Lambda , #pi^{+} ) (GeV/c^{2})", 300, 1.1,1.13, 400, 1.2, 2.0);
779 fListHistCascade->Add(f2dHistEffMassLambdaVsEffMassXiPlus);
780}
781
782if(! f2dHistEffMassXiVsEffMassOmegaPlus) {
783 f2dHistEffMassXiVsEffMassOmegaPlus = new TH2F( "f2dHistEffMassXiVsEffMassOmegaPlus", "M_{#Xi^{+} candidates} Vs M_{#Omega^{+} candidates} ; M( #Lambda , #pi^{+} ) (GeV/c^{2}) ; M( #Lambda , K^{+} ) (GeV/c^{2})", 400, 1.2, 2.0, 500, 1.5, 2.5);
784 fListHistCascade->Add(f2dHistEffMassXiVsEffMassOmegaPlus);
785}
786
787//-------
788
789if(! f2dHistXiRadiusVsEffMassXiMinus) {
790 f2dHistXiRadiusVsEffMassXiMinus = new TH2F( "f2dHistXiRadiusVsEffMassXiMinus", "Transv. R_{Xi Decay} Vs M_{#Xi^{-} candidates}; r_{cascade} (cm); M( #Lambda , #pi^{-} ) (GeV/c^{2}) ", 450, 0., 45.0, 400, 1.2, 2.0);
791 fListHistCascade->Add(f2dHistXiRadiusVsEffMassXiMinus);
792}
793
794if(! f2dHistXiRadiusVsEffMassXiPlus) {
795 f2dHistXiRadiusVsEffMassXiPlus = new TH2F( "f2dHistXiRadiusVsEffMassXiPlus", "Transv. R_{Xi Decay} Vs M_{#Xi^{+} candidates}; r_{cascade} (cm); M( #Lambda , #pi^{+} ) (GeV/c^{2}) ", 450, 0., 45.0, 400, 1.2, 2.0);
796 fListHistCascade->Add(f2dHistXiRadiusVsEffMassXiPlus);
797}
798
799if(! f2dHistXiRadiusVsEffMassOmegaMinus) {
800 f2dHistXiRadiusVsEffMassOmegaMinus = new TH2F( "f2dHistXiRadiusVsEffMassOmegaMinus", "Transv. R_{Xi Decay} Vs M_{#Omega^{-} candidates}; r_{cascade} (cm); M( #Lambda , K^{-} ) (GeV/c^{2}) ", 450, 0., 45.0, 500, 1.5, 2.5);
801 fListHistCascade->Add(f2dHistXiRadiusVsEffMassOmegaMinus);
802}
803
804if(! f2dHistXiRadiusVsEffMassOmegaPlus) {
805 f2dHistXiRadiusVsEffMassOmegaPlus = new TH2F( "f2dHistXiRadiusVsEffMassOmegaPlus", "Transv. R_{Xi Decay} Vs M_{#Omega^{+} candidates}; r_{cascade} (cm); M( #Lambda , K^{+} ) (GeV/c^{2}) ", 450, 0., 45.0, 500, 1.5, 2.5);
806 fListHistCascade->Add(f2dHistXiRadiusVsEffMassOmegaPlus);
807}
808
f9a6cab5 809if(! f2dHistTPCdEdxOfCascDghters){
810 f2dHistTPCdEdxOfCascDghters = new TH2F( "f2dHistTPCdEdxOfCascDghters", "TPC dE/dx of the cascade daughters; charge x || #vec{p}_{TPC inner wall}(Casc. daughter) || (GeV/c); TPC signal (ADC) ", 2000, -10.0, 10.0, 450, 0., 900.);
811 fListHistCascade->Add(f2dHistTPCdEdxOfCascDghters);
812}
813
814
f9a6cab5 815if(!fCFContCascadePIDXiMinus) {
816 const Int_t lNbSteps = 7 ;
817 const Int_t lNbVariables = 4 ;
818
819 //array for the number of bins in each dimension :
820 Int_t lNbBinsPerVar[4] = {0};
821 lNbBinsPerVar[0] = 100;
11bcd1e4 822 lNbBinsPerVar[1] = 800;
823 lNbBinsPerVar[2] = 22;
39b18694 824 lNbBinsPerVar[3] = 11;
11bcd1e4 825
f9a6cab5 826
827 fCFContCascadePIDXiMinus = new AliCFContainer("fCFContCascadePIDXiMinus","Pt_{cascade} Vs M_{#Xi^{-} candidates} Vs Y_{#Xi}", lNbSteps, lNbVariables, lNbBinsPerVar );
828
11bcd1e4 829 //setting the bin limits
f9a6cab5 830 fCFContCascadePIDXiMinus->SetBinLimits(0, 0.0 , 10.0 ); // Pt(Cascade)
831 fCFContCascadePIDXiMinus->SetBinLimits(1, 1.2 , 2.0 ); // Xi Effective mass
832 fCFContCascadePIDXiMinus->SetBinLimits(2, -1.1 , 1.1 ); // Rapidity
39b18694 833
834 Double_t *lBinLim3 = new Double_t[ lNbBinsPerVar[3]+1 ];
835 for(Int_t i=3; i< lNbBinsPerVar[3]+1;i++) lBinLim3[i] = (Double_t)(i-1)*10.;
836 lBinLim3[0] = 0.0;
837 lBinLim3[1] = 5.0;
838 lBinLim3[2] = 10.0;
839 fCFContCascadePIDXiMinus->SetBinLimits(3, lBinLim3 ); // Centrality
f9a6cab5 840
841 // Setting the step title : one per PID case
842 fCFContCascadePIDXiMinus->SetStepTitle(0, "No PID");
843 fCFContCascadePIDXiMinus->SetStepTitle(1, "TPC PID / 4-#sigma cut on Bachelor track");
844 fCFContCascadePIDXiMinus->SetStepTitle(2, "TPC PID / 4-#sigma cut on Bachelor+Baryon tracks");
845 fCFContCascadePIDXiMinus->SetStepTitle(3, "TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks");
846 fCFContCascadePIDXiMinus->SetStepTitle(4, "Comb. PID / Bachelor");
847 fCFContCascadePIDXiMinus->SetStepTitle(5, "Comb. PID / Bachelor+Baryon");
848 fCFContCascadePIDXiMinus->SetStepTitle(6, "Comb. PID / Bachelor+Baryon+Meson");
849
850 // Setting the variable title, per axis
851 fCFContCascadePIDXiMinus->SetVarTitle(0, "Pt_{cascade} (GeV/c)");
852 fCFContCascadePIDXiMinus->SetVarTitle(1, "M( #Lambda , #pi^{-} ) (GeV/c^{2})");
853 fCFContCascadePIDXiMinus->SetVarTitle(2, "Y_{#Xi}");
39b18694 854 fCFContCascadePIDXiMinus->SetVarTitle(3, "Centrality");
f9a6cab5 855
856 fListHistCascade->Add(fCFContCascadePIDXiMinus);
857
858}
859
860if (!fCFContCascadePIDXiPlus) {
861 const Int_t lNbSteps = 7 ;
862 const Int_t lNbVariables = 4 ;
863
864 //array for the number of bins in each dimension :
865 Int_t lNbBinsPerVar[4] = {0};
866 lNbBinsPerVar[0] = 100;
11bcd1e4 867 lNbBinsPerVar[1] = 800;
868 lNbBinsPerVar[2] = 22;
39b18694 869 lNbBinsPerVar[3] = 11;
f9a6cab5 870
871 fCFContCascadePIDXiPlus = new AliCFContainer("fCFContCascadePIDXiPlus","Pt_{cascade} Vs M_{#Xi^{+} candidates} Vs Y_{#Xi}", lNbSteps, lNbVariables, lNbBinsPerVar );
872
873
11bcd1e4 874 //setting the bin limits
f9a6cab5 875 fCFContCascadePIDXiPlus->SetBinLimits(0, 0.0 , 10.0 ); // Pt(Cascade)
876 fCFContCascadePIDXiPlus->SetBinLimits(1, 1.2 , 2.0 ); // Xi Effective mass
877 fCFContCascadePIDXiPlus->SetBinLimits(2, -1.1 , 1.1 ); // Rapidity
39b18694 878 Double_t *lBinLim3 = new Double_t[ lNbBinsPerVar[3]+1 ];
879 for(Int_t i=3; i< lNbBinsPerVar[3]+1;i++) lBinLim3[i] = (Double_t)(i-1)*10.;
880 lBinLim3[0] = 0.0;
881 lBinLim3[1] = 5.0;
882 lBinLim3[2] = 10.0;
883 fCFContCascadePIDXiPlus->SetBinLimits(3,lBinLim3); // Centrality
f9a6cab5 884
885 // Setting the step title : one per PID case
886 fCFContCascadePIDXiPlus->SetStepTitle(0, "No PID");
887 fCFContCascadePIDXiPlus->SetStepTitle(1, "TPC PID / 4-#sigma cut on Bachelor track");
888 fCFContCascadePIDXiPlus->SetStepTitle(2, "TPC PID / 4-#sigma cut on Bachelor+Baryon tracks");
889 fCFContCascadePIDXiPlus->SetStepTitle(3, "TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks");
890 fCFContCascadePIDXiPlus->SetStepTitle(4, "Comb. PID / Bachelor");
891 fCFContCascadePIDXiPlus->SetStepTitle(5, "Comb. PID / Bachelor+Baryon");
892 fCFContCascadePIDXiPlus->SetStepTitle(6, "Comb. PID / Bachelor+Baryon+Meson");
893
894 // Setting the variable title, per axis
895 fCFContCascadePIDXiPlus->SetVarTitle(0, "Pt_{cascade} (GeV/c)");
896 fCFContCascadePIDXiPlus->SetVarTitle(1, "M( #Lambda , #pi^{+} ) (GeV/c^{2})");
897 fCFContCascadePIDXiPlus->SetVarTitle(2, "Y_{#Xi}");
39b18694 898 fCFContCascadePIDXiPlus->SetVarTitle(3, "Centrality");
f9a6cab5 899
900 fListHistCascade->Add(fCFContCascadePIDXiPlus);
901
902}
903
904
905if(!fCFContCascadePIDOmegaMinus) {
906 const Int_t lNbSteps = 7 ;
907 const Int_t lNbVariables = 4 ;
908
909 //array for the number of bins in each dimension :
910 Int_t lNbBinsPerVar[4] = {0};
911 lNbBinsPerVar[0] = 100;
11bcd1e4 912 lNbBinsPerVar[1] = 1000;
913 lNbBinsPerVar[2] = 22;
39b18694 914 lNbBinsPerVar[3] = 11;
11bcd1e4 915
f9a6cab5 916
917 fCFContCascadePIDOmegaMinus = new AliCFContainer("fCFContCascadePIDOmegaMinus","Pt_{cascade} Vs M_{#Omega^{-} candidates} Vs Y_{#Omega}", lNbSteps, lNbVariables, lNbBinsPerVar );
918
919
11bcd1e4 920 //setting the bin limits
f9a6cab5 921 fCFContCascadePIDOmegaMinus->SetBinLimits(0, 0.0 , 10.0 ); // Pt(Cascade)
922 fCFContCascadePIDOmegaMinus->SetBinLimits(1, 1.5 , 2.5 ); // Omega Effective mass
923 fCFContCascadePIDOmegaMinus->SetBinLimits(2, -1.1 , 1.1 ); // Rapidity
39b18694 924 Double_t *lBinLim3 = new Double_t[ lNbBinsPerVar[3]+1 ];
925 for(Int_t i=3; i< lNbBinsPerVar[3]+1;i++) lBinLim3[i] = (Double_t)(i-1)*10.;
926 lBinLim3[0] = 0.0;
927 lBinLim3[1] = 5.0;
928 lBinLim3[2] = 10.0;
929 fCFContCascadePIDOmegaMinus->SetBinLimits(3,lBinLim3); // Centrality
f9a6cab5 930 // Setting the step title : one per PID case
931 fCFContCascadePIDOmegaMinus->SetStepTitle(0, "No PID");
932 fCFContCascadePIDOmegaMinus->SetStepTitle(1, "TPC PID / 4-#sigma cut on Bachelor track");
933 fCFContCascadePIDOmegaMinus->SetStepTitle(2, "TPC PID / 4-#sigma cut on Bachelor+Baryon tracks");
934 fCFContCascadePIDOmegaMinus->SetStepTitle(3, "TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks");
935 fCFContCascadePIDOmegaMinus->SetStepTitle(4, "Comb. PID / Bachelor");
936 fCFContCascadePIDOmegaMinus->SetStepTitle(5, "Comb. PID / Bachelor+Baryon");
937 fCFContCascadePIDOmegaMinus->SetStepTitle(6, "Comb. PID / Bachelor+Baryon+Meson");
938
939 // Setting the variable title, per axis
940 fCFContCascadePIDOmegaMinus->SetVarTitle(0, "Pt_{cascade} (GeV/c)");
941 fCFContCascadePIDOmegaMinus->SetVarTitle(1, "M( #Lambda , K^{-} ) (GeV/c^{2})");
942 fCFContCascadePIDOmegaMinus->SetVarTitle(2, "Y_{#Omega}");
39b18694 943 fCFContCascadePIDOmegaMinus->SetVarTitle(3, "Centrality");
f9a6cab5 944
945 fListHistCascade->Add(fCFContCascadePIDOmegaMinus);
946
947}
948
949if(!fCFContCascadePIDOmegaPlus) {
950 const Int_t lNbSteps = 7 ;
951 const Int_t lNbVariables = 4 ;
952
953 //array for the number of bins in each dimension :
954 Int_t lNbBinsPerVar[4] = {0};
955 lNbBinsPerVar[0] = 100;
11bcd1e4 956 lNbBinsPerVar[1] = 1000;
957 lNbBinsPerVar[2] = 22;
958 lNbBinsPerVar[3] = 100;
f9a6cab5 959
960
961 fCFContCascadePIDOmegaPlus = new AliCFContainer("fCFContCascadePIDOmegaPlus","Pt_{cascade} Vs M_{#Omega^{+} candidates} Vs Y_{#Omega}", lNbSteps, lNbVariables, lNbBinsPerVar );
962
963
11bcd1e4 964 //setting the bin limits
f9a6cab5 965 fCFContCascadePIDOmegaPlus->SetBinLimits(0, 0.0 , 10.0 ); // Pt(Cascade)
966 fCFContCascadePIDOmegaPlus->SetBinLimits(1, 1.5 , 2.5 ); // Omega Effective mass
967 fCFContCascadePIDOmegaPlus->SetBinLimits(2, -1.1 , 1.1 ); // Rapidity
39b18694 968 Double_t *lBinLim3 = new Double_t[ lNbBinsPerVar[3]+1 ];
969 for(Int_t i=3; i< lNbBinsPerVar[3]+1;i++) lBinLim3[i] = (Double_t)(i-1)*10.;
970 lBinLim3[0] = 0.0;
971 lBinLim3[1] = 5.0;
972 lBinLim3[2] = 10.0;
973 fCFContCascadePIDOmegaPlus->SetBinLimits(3,lBinLim3); // Centrality
f9a6cab5 974
975 // Setting the step title : one per PID case
976 fCFContCascadePIDOmegaPlus->SetStepTitle(0, "No PID");
977 fCFContCascadePIDOmegaPlus->SetStepTitle(1, "TPC PID / 4-#sigma cut on Bachelor track");
978 fCFContCascadePIDOmegaPlus->SetStepTitle(2, "TPC PID / 4-#sigma cut on Bachelor+Baryon tracks");
979 fCFContCascadePIDOmegaPlus->SetStepTitle(3, "TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks");
980 fCFContCascadePIDOmegaPlus->SetStepTitle(4, "Comb. PID / Bachelor");
981 fCFContCascadePIDOmegaPlus->SetStepTitle(5, "Comb. PID / Bachelor+Baryon");
982 fCFContCascadePIDOmegaPlus->SetStepTitle(6, "Comb. PID / Bachelor+Baryon+Meson");
983
984 // Setting the variable title, per axis
985 fCFContCascadePIDOmegaPlus->SetVarTitle(0, "Pt_{cascade} (GeV/c)");
986 fCFContCascadePIDOmegaPlus->SetVarTitle(1, "M( #Lambda , K^{+} ) (GeV/c^{2})");
987 fCFContCascadePIDOmegaPlus->SetVarTitle(2, "Y_{#Omega}");
39b18694 988 fCFContCascadePIDOmegaPlus->SetVarTitle(3, "SPD tracklets Multiplicity");
f9a6cab5 989
990 fListHistCascade->Add(fCFContCascadePIDOmegaPlus);
991
992}
993
994
995// Part 3 : Towards the optimisation of topological selections -------
39b18694 996if(! fCFContCascadeCuts) {
f9a6cab5 997
998 // Container meant to store all the relevant distributions corresponding to the cut variables.
11bcd1e4 999 // - NB overflow/underflow of variables on which we want to cut later should be 0!!!
f9a6cab5 1000 const Int_t lNbSteps = 4 ;
39b18694 1001 const Int_t lNbVariables = 22 ;
f9a6cab5 1002 //array for the number of bins in each dimension :
11bcd1e4 1003 Int_t lNbBinsPerVar[lNbVariables] = {0};
f9a6cab5 1004 lNbBinsPerVar[0] = 100;
11bcd1e4 1005 lNbBinsPerVar[1] = 126;
39b18694 1006 lNbBinsPerVar[2] = 24;
1007 lNbBinsPerVar[3] = 220;
f9a6cab5 1008 lNbBinsPerVar[4] = 30;
1009 lNbBinsPerVar[5] = 50;
1010
39b18694 1011 lNbBinsPerVar[6] = 101;
1012
1013 lNbBinsPerVar[7] = 102;
11bcd1e4 1014 lNbBinsPerVar[8] = 101;
1015 lNbBinsPerVar[9] = 26;
1016 lNbBinsPerVar[10] = 26;
f9a6cab5 1017
11bcd1e4 1018 lNbBinsPerVar[11] = 150; // 75 2-MeV/c2 bins
1019 lNbBinsPerVar[12] = 120; // 60 2-MeV/c2 bins
f9a6cab5 1020
1021 lNbBinsPerVar[13] = 100;
1022
1023 lNbBinsPerVar[14] = 44; // 0.05 in rapidity units
1024 lNbBinsPerVar[15] = 44; // 0.05 in rapidity units
1025
1026 lNbBinsPerVar[16] = 20;
1027
39b18694 1028 lNbBinsPerVar[17] = 11;
11bcd1e4 1029 lNbBinsPerVar[18] = 100;
39b18694 1030 lNbBinsPerVar[19] = 112; // Proper time of cascade
1031 lNbBinsPerVar[20] = 112; // Proper time of V0
1032 lNbBinsPerVar[21] = 112; // Distance V0-Xi in transverse plane
1033
11bcd1e4 1034 fCFContCascadeCuts = new AliCFContainer("fCFContCascadeCuts","Container for Cascade cuts", lNbSteps, lNbVariables, lNbBinsPerVar );
f9a6cab5 1035
1036
1037 //setting the bin limits
1038
1039 //0
1040 fCFContCascadeCuts->SetBinLimits(0, 0., 2.); // DcaXiDaughters : 0.0 to 2.0
1041 //1
11bcd1e4 1042 Double_t *lBinLim1 = new Double_t[ lNbBinsPerVar[1]+1 ];
39b18694 1043 lBinLim1[0] = 0.0;
1044 lBinLim1[1] = 0.03;
1045 for(Int_t i=2; i< lNbBinsPerVar[1];i++) lBinLim1[i] = (Double_t)0.03 + (5. - 0.03 )/(lNbBinsPerVar[1]-2) * (Double_t)(i-1) ;
11bcd1e4 1046 lBinLim1[ lNbBinsPerVar[1] ] = 100.0;
1047 fCFContCascadeCuts -> SetBinLimits(1, lBinLim1 );
1048 delete [] lBinLim1; // DcaBachToPrimVertexXi : 0.0 to 0.5
f9a6cab5 1049 //2
39b18694 1050 fCFContCascadeCuts->SetBinLimits(2, .9988, 1.); // XiCosineOfPointingAngle : 0.99 to 1.0
f9a6cab5 1051 //3
39b18694 1052 fCFContCascadeCuts -> SetBinLimits(3, 0., 110.); // XiRadius : 0.0 to 110.0
f9a6cab5 1053 //4
1054 fCFContCascadeCuts->SetBinLimits(4, 1.1, 1.13 ); // InvMassLambdaAsCascDghter
1055 //5
1056 fCFContCascadeCuts->SetBinLimits(5, 0., 2.); // DcaV0DaughtersXi : 0.0 to 2.0
1057 //6
988a1924 1058 fCFContCascadeCuts->SetBinLimits(6, .98, 1.0002); // V0CosineOfPointingAngleXi : 0.99 to 1.0
f9a6cab5 1059 //7
11bcd1e4 1060 Double_t *lBinLim7 = new Double_t[ lNbBinsPerVar[7]+1 ];
39b18694 1061 for(Int_t i=0; i< lNbBinsPerVar[7]-1;i++) lBinLim7[i] = (Double_t)0.0 + (100. - 0.0 )/(lNbBinsPerVar[7]-2) * (Double_t)i ;
11bcd1e4 1062 lBinLim7[ lNbBinsPerVar[7]-1] = 200.0;
1063 lBinLim7[ lNbBinsPerVar[7]] = 1000.0;
1064 fCFContCascadeCuts -> SetBinLimits(7, lBinLim7 );
39b18694 1065 delete [] lBinLim7; // V0RadiusXi : 0.0 to 100.0
f9a6cab5 1066 //8
11bcd1e4 1067 Double_t *lBinLim8 = new Double_t[ lNbBinsPerVar[8]+1 ];
39b18694 1068 for(Int_t i=0; i< lNbBinsPerVar[8];i++) lBinLim8[i] = (Double_t)0.0 + (0.4 - 0.0 )/(lNbBinsPerVar[8]-1) * (Double_t)i ;
1069 lBinLim8[ lNbBinsPerVar[8] ] = 100.0;
11bcd1e4 1070 fCFContCascadeCuts -> SetBinLimits(8, lBinLim8 );
1071 delete [] lBinLim8; // DcaV0ToPrimVertexXi : 0.0 to 0.4
f9a6cab5 1072 //9
11bcd1e4 1073 Double_t *lBinLim9 = new Double_t[ lNbBinsPerVar[9]+1 ];
1074 for(Int_t i=0; i< lNbBinsPerVar[9];i++) lBinLim9[i] = (Double_t)0.0 + (0.25 - 0.0 )/(lNbBinsPerVar[9]-1) * (Double_t)i ;
1075 lBinLim9[ lNbBinsPerVar[9] ] = 100.0;
1076 fCFContCascadeCuts -> SetBinLimits(9, lBinLim9 );
1077 delete [] lBinLim9; // DcaPosToPrimVertexXi : 0.0 to 0.25
f9a6cab5 1078 //10
11bcd1e4 1079 Double_t *lBinLim10 = new Double_t[ lNbBinsPerVar[10]+1 ];
1080 for(Int_t i=0; i< lNbBinsPerVar[10];i++) lBinLim10[i] = (Double_t)0.0 + (0.25 - 0.0 )/(lNbBinsPerVar[10]-1) * (Double_t)i ;
1081 lBinLim10[ lNbBinsPerVar[10] ] = 100.0;
1082 fCFContCascadeCuts -> SetBinLimits(10, lBinLim10 );
39b18694 1083 delete [] lBinLim10; // DcaNegToPrimVertexXi : 0.0 to 0.25
f9a6cab5 1084 //11
1085 fCFContCascadeCuts->SetBinLimits(11, 1.25, 1.40); // InvMassXi
1086 fCFContCascadeCuts->SetBinLimits(12, 1.62, 1.74); // InvMassOmega
1087 fCFContCascadeCuts->SetBinLimits(13, 0.0, 10.0); // XiTransvMom
1088 fCFContCascadeCuts->SetBinLimits(14, -1.1, 1.1); // Y(Xi)
1089 fCFContCascadeCuts->SetBinLimits(15, -1.1, 1.1); // Y(Omega)
1090 fCFContCascadeCuts->SetBinLimits(16, -10.0, 10.0); // BestPrimaryVtxPosZ
39b18694 1091 Double_t *lBinLim17 = new Double_t[ lNbBinsPerVar[17]+1 ];
1092 for(Int_t i=3; i< lNbBinsPerVar[17]+1;i++) lBinLim17[i] = (Double_t)(i-1)*10.;
1093 lBinLim17[0] = 0.0;
1094 lBinLim17[1] = 5.0;
1095 lBinLim17[2] = 10.0;
1096 fCFContCascadeCuts -> SetBinLimits(17, lBinLim17 ); // Centrality
1097 delete [] lBinLim17;
1098 fCFContCascadeCuts->SetBinLimits(18, 0.0, 6000.0); // ESD track multiplicity
1099
1100 Double_t *lBinLim19 = new Double_t[ lNbBinsPerVar[19]+1 ];
1101 for(Int_t i=0; i< lNbBinsPerVar[19];i++) lBinLim19[i] = (Double_t)-1. + (110. + 1.0 )/(lNbBinsPerVar[19]-1) * (Double_t)i ;
1102 lBinLim19[ lNbBinsPerVar[19] ] = 2000.0;
1103 fCFContCascadeCuts->SetBinLimits(19, lBinLim19); // Proper time cascade
1104
1105 fCFContCascadeCuts->SetBinLimits(20, lBinLim19); // Proper time V0
1106
1107 fCFContCascadeCuts->SetBinLimits(21, lBinLim19); // Distance V0-Xi in tansverse plane
1108 delete [] lBinLim19;
f9a6cab5 1109 // Setting the number of steps : one for each cascade species (Xi-, Xi+ and Omega-, Omega+)
1110 fCFContCascadeCuts->SetStepTitle(0, "#Xi^{-} candidates");
1111 fCFContCascadeCuts->SetStepTitle(1, "#bar{#Xi}^{+} candidates");
1112 fCFContCascadeCuts->SetStepTitle(2, "#Omega^{-} candidates");
1113 fCFContCascadeCuts->SetStepTitle(3, "#bar{#Omega}^{+} candidates");
1114
1115 // Setting the variable title, per axis
f9a6cab5 1116 fCFContCascadeCuts->SetVarTitle(0, "Dca(XiDaughters) (cm)");
1117 fCFContCascadeCuts->SetVarTitle(1, "Dca(Bach/PrimVertex) (cm)");
1118 fCFContCascadeCuts->SetVarTitle(2, "cos(Xi pointing angle)");
1119 fCFContCascadeCuts->SetVarTitle(3, "R_{2d}(Xi decay) (cm)");
1120 fCFContCascadeCuts->SetVarTitle(4, "M_{#Lambda}(As Casc Dghter) (GeV/c^{2})");
1121 fCFContCascadeCuts->SetVarTitle(5, "Dca(V0 Daughters) in Xi (cm)");
1122
1123 fCFContCascadeCuts->SetVarTitle(6, "cos(V0 pointing Angle) in Casc");
1124 fCFContCascadeCuts->SetVarTitle(7, "R_{2d}(V0 decay) (cm)");
1125 fCFContCascadeCuts->SetVarTitle(8, "Dca(V0/PrimVertex) (cm)");
1126 fCFContCascadeCuts->SetVarTitle(9, "Dca(Pos/PrimVertex) (cm)");
1127 fCFContCascadeCuts->SetVarTitle(10, "Dca(Neg/PrimVertex) (cm)");
1128
1129 fCFContCascadeCuts->SetVarTitle(11, "Inv. Mass(Xi) (GeV/c^{2})");
1130 fCFContCascadeCuts->SetVarTitle(12, "Inv. Mass(Omega) (GeV/c^{2})");
1131
1132 fCFContCascadeCuts->SetVarTitle(13, "pt(Casc.) (GeV/c)");
1133
1134 fCFContCascadeCuts->SetVarTitle(14, "Y(Xi)");
1135 fCFContCascadeCuts->SetVarTitle(15, "Y(Omega)");
1136
1137 fCFContCascadeCuts->SetVarTitle(16, "Z-position(BestPrimVtx) (cm)");
1138
39b18694 1139 fCFContCascadeCuts->SetVarTitle(17, "Centrality");
11bcd1e4 1140
1141 fCFContCascadeCuts->SetVarTitle(18, "ESD track multiplicity");
39b18694 1142
1143 fCFContCascadeCuts->SetVarTitle(19, "Proper time cascade");
1144 fCFContCascadeCuts->SetVarTitle(20, "Proper time V0");
1145 fCFContCascadeCuts->SetVarTitle(21, "Distance V0-Xi in transverse plane");
f9a6cab5 1146
1147 fListHistCascade->Add(fCFContCascadeCuts);
1148}
1149
1150 fV0Ampl = new TH1F("fV0Ampl","",500,0.,30000);
1151 fListHistCascade->Add(fV0Ampl);
1152
1153
1154 fHistDcaXiDaughtersvsInvMass = new TH2F( "fHistDcaXiDaughtersvsInvMass", "DCA between Xi Daughters; DCA (cm) ; Number of Cascades", 100, 0., 0.5,400,1.2,2.0);
1155 fListHistCascade->Add(fHistDcaXiDaughtersvsInvMass);
1156 fHistDcaBachToPrimVertexvsInvMass = new TH2F("fHistDcaBachToPrimVertexvsInvMass", "DCA of Bach. to Prim. Vertex;DCA (cm);Number of Cascades", 250, 0., 0.25,400,1.2,2.0);
1157 fListHistCascade->Add(fHistDcaBachToPrimVertexvsInvMass);
1158 fHistXiCosineOfPointingAnglevsInvMass= new TH2F("fHistXiCosineOfPointingAnglevsInvMass", "Cosine of Xi Pointing Angle; Cos (Xi Point.Angl);Number of Xis", 200, 0.99, 1.0,400,1.2,2.0);
1159 fListHistCascade->Add(fHistXiCosineOfPointingAnglevsInvMass);
1160 fHistMassLambdaAsCascDghtervsInvMass= new TH2F("fHistMassLambdaAsCascDghtervsInvMass","#Lambda associated to Casc. candidates;Eff. Mass (GeV/c^{2});Counts", 300,1.00,1.3,400,1.2,2.0);
1161 fListHistCascade->Add(fHistMassLambdaAsCascDghtervsInvMass);
1162 fHistDcaV0DaughtersXivsInvMass = new TH2F("fHistDcaV0DaughtersXivsInvMass", "DCA between V0 daughters, in cascade;DCA (cm);Number of V0s", 120, 0., 0.6,400,1.2,2.0);
1163 fListHistCascade->Add(fHistDcaV0DaughtersXivsInvMass);
1164 fHistDcaV0ToPrimVertexXivsInvMass = new TH2F("fHistDcaV0ToPrimVertexXivsInvMass", "DCA of V0 to Prim. Vertex, in cascade;DCA (cm);Number of Cascades", 200, 0., 1.,400,1.2,2.0);
1165 fListHistCascade->Add(fHistDcaV0ToPrimVertexXivsInvMass);
1166
f9a6cab5 1167PostData(1, fListHistCascade);
1168/* PostData(2, fPaveTextBookKeeping);*/
1169}// end UserCreateOutputObjects
1170
1171
f9a6cab5 1172//________________________________________________________________________
1173void AliAnalysisTaskCheckCascadePbPb::UserExec(Option_t *) {
1174 // Main loop
1175 // Called for each event
1176
1177 AliESDEvent *lESDevent = 0x0;
1178 AliAODEvent *lAODevent = 0x0;
39b18694 1179
1180 if(!fPIDResponse) {
1181 AliError("Cannot get pid response");
1182 return;
1183 }
1184
1185
f9a6cab5 1186 Int_t ncascades = -1;
1187 Int_t nTrackMultiplicity = -1;
1188 Int_t nTrackWithTPCrefitMultiplicity = 0;
ff9a705e 1189// Int_t lSPDTrackletsMultiplicity = -1;
1190
39b18694 1191 // Primary tracks from ESD/AOD
1192 Float_t lPrimaryTrackMultiplicity = -1.;
1193
f9a6cab5 1194
1195 Short_t lStatusTrackingPrimVtx = -2;
1196 Double_t lTrkgPrimaryVtxPos[3] = {-100.0, -100.0, -100.0};
1197 Double_t lBestPrimaryVtxPos[3] = {-100.0, -100.0, -100.0};
1198 Double_t lMagneticField = -10.;
1199
39b18694 1200 AliCentrality* centrality;
1201 AliESDVZERO* esdV0;
1202 AliAODVZERO* aodV0;
1203 Float_t multV0A = 0.;
1204 Float_t multV0C = 0.;
1205
f9a6cab5 1206 // Connect to the InputEvent
1207 // After these lines, we should have an ESD/AOD event + the number of cascades in it.
ff9a705e 1208
1209 // For AOD or ESD ...
1210 nTrackMultiplicity = (InputEvent())->GetNumberOfTracks();
1211
f9a6cab5 1212 if (fAnalysisType == "ESD") {
1213 lESDevent = dynamic_cast<AliESDEvent*>( InputEvent() );
1214 if (!lESDevent) {
1215 AliWarning("ERROR: lESDevent not available \n");
1216 return;
1217 }
1218
f9a6cab5 1219 //-------------------------------------------------
1220
39b18694 1221 // 0 - Trigger management
f9a6cab5 1222 // NOTE : Check the availability of the proper trigger --> MN Physics selection moved to runProof macro
1223
1224 //-------------------------------------------------
1225
1226 // 1 - Cascade vertexer (ESD)
39b18694 1227 if (fkRerunV0CascVertexers) { // Relaunch V0 and Cascade vertexers
1228
1229 lESDevent->ResetCascades();
1230 lESDevent->ResetV0s();
1231
1232 AliV0vertexer *lV0vtxer = new AliV0vertexer();
1233 AliCascadeVertexer *lCascVtxer = new AliCascadeVertexer();
1234
1235 //lV0vtxer->GetCuts(fV0Sels);
1236 //lCascVtxer->GetCuts(fCascSels);
1237
1238 lV0vtxer->SetCuts(fV0Sels); // NB don't use SetDefaultCuts!! because it acts on static variables
1239 lCascVtxer->SetCuts(fCascSels);
f9a6cab5 1240
39b18694 1241
1242 lV0vtxer->Tracks2V0vertices(lESDevent);
1243 lCascVtxer->V0sTracks2CascadeVertices(lESDevent);
1244
1245 delete lV0vtxer;
1246 delete lCascVtxer;
f9a6cab5 1247 }// end if(RelaunchV0CascVertexers)
1248
1249 //-------------------------------------------------
1250 ncascades = lESDevent->GetNumberOfCascades();
ff9a705e 1251 nTrackWithTPCrefitMultiplicity = DoESDTrackWithTPCrefitMultiplicity(lESDevent);
1252
1253// const AliMultiplicity *lAliMult = lESDevent->GetMultiplicity();
1254// lSPDTrackletsMultiplicity = lAliMult->GetNumberOfTracklets();
1255
39b18694 1256 centrality = lESDevent->GetCentrality();
1257 esdV0 = lESDevent->GetVZEROData();
1258 multV0A=esdV0->GetMTotV0A();
1259 multV0C=esdV0->GetMTotV0C();
f9a6cab5 1260
39b18694 1261 } else if (fAnalysisType == "AOD") {
1262 lAODevent = dynamic_cast<AliAODEvent*>( InputEvent() );
1263 if (!lAODevent) {
1264 AliWarning("ERROR: lAODevent not available \n");
1265 return;
1266 }
1267 ncascades = lAODevent->GetNumberOfCascades();
ff9a705e 1268 nTrackWithTPCrefitMultiplicity = 0;
1269 lPrimaryTrackMultiplicity = 0;
1270 for (Int_t itrack = 0; itrack<nTrackMultiplicity; itrack++) {
1271 AliAODTrack* track = lAODevent->GetTrack(itrack);
1272 if (track->TestFilterBit(AliAODTrack::kTrkGlobalNoDCA)) lPrimaryTrackMultiplicity++; // kTrkGlobal tight DCA cut --> mult is much lower than the one selectied with standard cuts in ESDs
1273 if (track->IsOn(AliAODTrack::kTPCrefit)) nTrackWithTPCrefitMultiplicity++;
1274 }
1275
1276// lSPDTrackletsMultiplicity = lAODevent->GetTracklets()->GetNumberOfTracklets();
1277
39b18694 1278 centrality = lAODevent->GetCentrality();
1279 aodV0 = lAODevent->GetVZEROData();
1280 multV0A=aodV0->GetMTotV0A();
1281 multV0C=aodV0->GetMTotV0C();
f9a6cab5 1282
39b18694 1283 } else {
1284
1285 Printf("Analysis type (ESD or AOD) not specified \n");
1286 return;
1287
1288 }
1289
1290 fHistCascadeMultiplicityBeforeEvSel->Fill (ncascades);
1291
11bcd1e4 1292 // Printf("Centrality percentile V0M for this event %f)\n", centrality->GetCentralityPercentile("V0M"));
11bcd1e4 1293 Float_t lcentrality = centrality->GetCentralityPercentile(fCentrEstimator.Data());
39b18694 1294 if (lcentrality<fCentrLowLim||lcentrality>=fCentrUpLim) {
11bcd1e4 1295 PostData(1, fListHistCascade);
1296 return;
f9a6cab5 1297 }
1298
1299 fV0Ampl->Fill(multV0A+multV0C);
1300
f9a6cab5 1301 //-------------------------------------------------
1302
1303 fHistTrackMultiplicityForCentrEvt ->Fill( nTrackMultiplicity );
1304 fHistTPCrefitTrackMultiplicityForCentrEvt ->Fill( nTrackWithTPCrefitMultiplicity );
1305 fHistCascadeMultiplicityForCentrEvt ->Fill( ncascades );
1306
1307 // ---------------------------------------------------------------
1308
1309 // I - Global characteristics of the events + general histos (filled for any selected events and/or for the analysed events)
1310
1311 // - I.Step 1 : Characteristics of the event : prim. Vtx + magnetic field (ESD)
1312 //-------------
1313
1314 if (fAnalysisType == "ESD") {
1315 const AliESDVertex *lPrimaryTrackingESDVtx = lESDevent->GetPrimaryVertexTracks();
1316 // get the vtx stored in ESD found with tracks
1317 lPrimaryTrackingESDVtx->GetXYZ( lTrkgPrimaryVtxPos );
1318
1319 const AliESDVertex *lPrimaryBestESDVtx = lESDevent->GetPrimaryVertex();
1320 // get the best primary vertex available for the event
1321 // As done in AliCascadeVertexer, we keep the one which is the best one available.
1322 // between : Tracking vertex > SPD vertex > TPC vertex > default SPD vertex
1323 // This one will be used for next calculations (DCA essentially)
1324 lPrimaryBestESDVtx->GetXYZ( lBestPrimaryVtxPos );
1325 lStatusTrackingPrimVtx = lPrimaryTrackingESDVtx->GetStatus();
1326
f9a6cab5 1327 // FIXME : remove TPC-only primary vertex : retain only events with tracking + SPD vertex
1328 if (fkQualityCutNoTPConlyPrimVtx) {
1329 const AliESDVertex *lPrimarySPDVtx = lESDevent->GetPrimaryVertexSPD();
1330 if (!lPrimarySPDVtx->GetStatus() && !lPrimaryTrackingESDVtx->GetStatus() ){
1331 AliWarning("Pb / No SPD prim. vertex nor prim. Tracking vertex ... return !");
1332 PostData(1, fListHistCascade);
1333 return;
1334 }
1335 }
1336
1337 // NOTE : For older evts
1338
1339 // As previously done in AliCascadeVertexer, we keep, between both retrieved vertices (SPD or Tracking)
1340 // the one which is the best one available.
1341 // This one will be used for next calculations (DCA essentially)
1342 // At that time, the TPC-only primary vertex was not considered
1343
1344
1345 lMagneticField = lESDevent->GetMagneticField( );
1346 // FIXME if(TMath::Abs(lMagneticField ) < 10e-6) continue;
39b18694 1347 lPrimaryTrackMultiplicity = fESDtrackCuts->CountAcceptedTracks(lESDevent);
ff9a705e 1348 } else if (fAnalysisType == "AOD") {
39b18694 1349
1350 const AliAODVertex *lPrimaryBestAODVtx = lAODevent->GetPrimaryVertex();
1351 if (!lPrimaryBestAODVtx){
1352 AliWarning("No prim. vertex in AOD... return!");
1353 PostData(1, fListHistCascade);
1354 return;
1355 }
1356
1357 // get the best primary vertex available for the event GetVertex(0)
f9a6cab5 1358 // This one will be used for next calculations (DCA essentially)
1359 lPrimaryBestAODVtx->GetXYZ( lBestPrimaryVtxPos );
1360
1361 lStatusTrackingPrimVtx = -1;
1362 lTrkgPrimaryVtxPos[0] = -100.0;
1363 lTrkgPrimaryVtxPos[1] = -100.0;
39b18694 1364 lTrkgPrimaryVtxPos[2] = -100.0;
1365 lMagneticField = lAODevent->GetMagneticField();
1366
39b18694 1367 }
1368
1369 // Quality cut on the z-position of the prim vertex.
1370 if (fkQualityCutZprimVtxPos) {
1371 if (TMath::Abs(lBestPrimaryVtxPos[2]) > fVtxRange ) {
1372 AliWarning("Pb / | Z position of Best Prim Vtx | > 10.0 cm ... return !");
1373 PostData(1, fListHistCascade);
1374 return;
1375 }
f9a6cab5 1376 }
1377
1378 // - I.Step 2 : Filling histos that characterize the selected event : x,y,z prim. Vtx distrib. (ESD)
1379 //-------------
1380
1381 fHistCascadeMultiplicityForSelEvt ->Fill( ncascades );
1382 fHistPosBestPrimaryVtxXForSelEvt ->Fill( lBestPrimaryVtxPos[0] );
1383 fHistPosBestPrimaryVtxYForSelEvt ->Fill( lBestPrimaryVtxPos[1] );
1384 fHistPosBestPrimaryVtxZForSelEvt ->Fill( lBestPrimaryVtxPos[2] );
1385
1386 // ---------------------------------------------------------------
11bcd1e4 1387
39b18694 1388 fHistEvtsInCentralityBinsvsNtracks->Fill(lcentrality,lPrimaryTrackMultiplicity);
11bcd1e4 1389
11bcd1e4 1390
11bcd1e4 1391
1392 // II - Calculation Part dedicated to Xi vertices
f9a6cab5 1393
1394 for (Int_t iXi = 0; iXi < ncascades; iXi++) {// This is the begining of the Cascade loop (ESD or AOD)
1395
1396 // -------------------------------------
1397 // II.Init - Initialisation of the local variables that will be needed for ESD/AOD
1398
1399
1400 // - 0th part of initialisation : around primary vertex ...
1401
1402 Double_t lTrkgPrimaryVtxRadius3D = -500.0;
1403 Double_t lBestPrimaryVtxRadius3D = -500.0;
1404
1405 // - 1st part of initialisation : variables needed to store AliESDCascade data members
1406 Double_t lEffMassXi = 0. ;
1407 Double_t lChi2Xi = -1. ;
1408 Double_t lDcaXiDaughters = -1. ;
1409 Double_t lXiCosineOfPointingAngle = -1. ;
1410 Double_t lPosXi[3] = { -1000.0, -1000.0, -1000.0 };
1411 Double_t lXiRadius = -1000. ;
1412
1413 // - 2nd part of initialisation : Nbr of clusters within TPC for the 3 daughter cascade tracks
39b18694 1414 UShort_t lPosTPCClusters = -1; // For ESD only ...
1415 UShort_t lNegTPCClusters = -1; // For ESD only ...
1416 UShort_t lBachTPCClusters = -1; // For ESD only ...
f9a6cab5 1417
1418 Double_t lInnerWallMomCascDghters[3] = {-100., -100., -100.};
1419 Double_t lTPCSignalCascDghters [3] = {-100., -100., -100.};
1420
1421
1422 // - 3rd part of initialisation : about V0 part in cascades
1423 Double_t lInvMassLambdaAsCascDghter = 0.;
1424 Double_t lV0Chi2Xi = -1. ;
1425 Double_t lDcaV0DaughtersXi = -1.;
1426
1427 Double_t lDcaBachToPrimVertexXi = -1., lDcaV0ToPrimVertexXi = -1.;
1428 Double_t lDcaPosToPrimVertexXi = -1.;
1429 Double_t lDcaNegToPrimVertexXi = -1.;
988a1924 1430 Double_t lV0CosineOfPointingAngle = -1. ;
1431 Double_t lV0toXiCosineOfPointingAngle = 0. ;
1432
f9a6cab5 1433 Double_t lPosV0Xi[3] = { -1000. , -1000., -1000. }; // Position of VO coming from cascade
1434 Double_t lV0RadiusXi = -1000.0;
1435 Double_t lV0quality = 0.;
1436
1437
1438 // - 4th part of initialisation : Effective masses
1439 Double_t lInvMassXiMinus = 0.;
1440 Double_t lInvMassXiPlus = 0.;
1441 Double_t lInvMassOmegaMinus = 0.;
1442 Double_t lInvMassOmegaPlus = 0.;
1443
1444 // - 5th part of initialisation : PID treatment
1445 Bool_t lIsPosInXiProton = kFALSE;
1446 Bool_t lIsPosInXiPion = kFALSE;
1447 Bool_t lIsPosInOmegaProton = kFALSE;
1448 Bool_t lIsPosInOmegaPion = kFALSE;
1449
1450 Bool_t lIsNegInXiProton = kFALSE;
1451 Bool_t lIsNegInXiPion = kFALSE;
1452 Bool_t lIsNegInOmegaProton = kFALSE;
1453 Bool_t lIsNegInOmegaPion = kFALSE;
1454
1455 Bool_t lIsBachelorKaon = kFALSE;
1456 Bool_t lIsBachelorPion = kFALSE;
1457
39b18694 1458 Bool_t lIsBachelorKaonForTPC = kFALSE;
1459 Bool_t lIsBachelorPionForTPC = kFALSE;
1460 Bool_t lIsNegPionForTPC = kFALSE;
1461 Bool_t lIsPosPionForTPC = kFALSE;
1462 Bool_t lIsNegProtonForTPC = kFALSE;
1463 Bool_t lIsPosProtonForTPC = kFALSE;
f9a6cab5 1464
1465 // - 6th part of initialisation : extra info for QA
1466 Double_t lXiMomX = 0., lXiMomY = 0., lXiMomZ = 0.;
1467 Double_t lXiTransvMom = 0. ;
1468 Double_t lXiTotMom = 0. ;
39b18694 1469
1470 Double_t lV0PMomX = 0., lV0PMomY = 0., lV0PMomZ = 0.;
1471 Double_t lV0NMomX = 0., lV0NMomY = 0., lV0NMomZ = 0.;
1472 Double_t lV0TotMom = 0. ;
1473
f9a6cab5 1474
1475 Double_t lBachMomX = 0., lBachMomY = 0., lBachMomZ = 0.;
1476 Double_t lBachTransvMom = 0.;
1477 Double_t lBachTotMom = 0.;
1478
1479 Short_t lChargeXi = -2;
f9a6cab5 1480
1481 Double_t lRapXi = -20.0, lRapOmega = -20.0, lEta = -20.0, lTheta = 360., lPhi = 720. ;
1482 Double_t lAlphaXi = -200., lPtArmXi = -200.0;
1483
1484 // - 7th part of initialisation : variables for the AliCFContainer dedicated to cascade cut optmisiation
f9a6cab5 1485
f9a6cab5 1486 if (fAnalysisType == "ESD") {
1487
1488 // -------------------------------------
1489 // II.ESD - Calculation Part dedicated to Xi vertices (ESD)
1490
1491 AliESDcascade *xi = lESDevent->GetCascade(iXi);
1492 if (!xi) continue;
1493
1494
1495 // - II.Step 1 : around primary vertex
1496 //-------------
1497 lTrkgPrimaryVtxRadius3D = TMath::Sqrt( lTrkgPrimaryVtxPos[0] * lTrkgPrimaryVtxPos[0] +
1498 lTrkgPrimaryVtxPos[1] * lTrkgPrimaryVtxPos[1] +
1499 lTrkgPrimaryVtxPos[2] * lTrkgPrimaryVtxPos[2] );
1500
1501 lBestPrimaryVtxRadius3D = TMath::Sqrt( lBestPrimaryVtxPos[0] * lBestPrimaryVtxPos[0] +
1502 lBestPrimaryVtxPos[1] * lBestPrimaryVtxPos[1] +
1503 lBestPrimaryVtxPos[2] * lBestPrimaryVtxPos[2] );
1504
1505
1506
1507 // - II.Step 2 : Assigning the necessary variables for specific AliESDcascade data members (ESD)
1508 //-------------
1509 lV0quality = 0.;
1510 xi->ChangeMassHypothesis(lV0quality , 3312); // default working hypothesis : cascade = Xi- decay
1511
1512 lEffMassXi = xi->GetEffMassXi();
1513 lChi2Xi = xi->GetChi2Xi();
1514 lDcaXiDaughters = xi->GetDcaXiDaughters();
1515 lXiCosineOfPointingAngle = xi->GetCascadeCosineOfPointingAngle( lBestPrimaryVtxPos[0],
1516 lBestPrimaryVtxPos[1],
1517 lBestPrimaryVtxPos[2] );
1518 // Take care : the best available vertex should be used (like in AliCascadeVertexer)
1519
1520 xi->GetXYZcascade( lPosXi[0], lPosXi[1], lPosXi[2] );
1521 lXiRadius = TMath::Sqrt( lPosXi[0]*lPosXi[0] + lPosXi[1]*lPosXi[1] );
1522
1523
1524
1525 // - II.Step 3 : around the tracks : Bach + V0 (ESD)
1526 // ~ Necessary variables for ESDcascade data members coming from the ESDv0 part (inheritance)
1527 //-------------
1528
1529 UInt_t lIdxPosXi = (UInt_t) TMath::Abs( xi->GetPindex() );
1530 UInt_t lIdxNegXi = (UInt_t) TMath::Abs( xi->GetNindex() );
1531 UInt_t lBachIdx = (UInt_t) TMath::Abs( xi->GetBindex() );
1532 // Care track label can be negative in MC production (linked with the track quality)
1533 // However = normally, not the case for track index ...
1534
1535 // FIXME : rejection of a double use of a daughter track (nothing but just a crosscheck of what is done in the cascade vertexer)
1536 if (lBachIdx == lIdxNegXi) {
1537 AliWarning("Pb / Idx(Bach. track) = Idx(Neg. track) ... continue!"); continue;
1538 }
1539 if (lBachIdx == lIdxPosXi) {
1540 AliWarning("Pb / Idx(Bach. track) = Idx(Pos. track) ... continue!"); continue;
1541 }
1542
1543 AliESDtrack *pTrackXi = lESDevent->GetTrack( lIdxPosXi );
1544 AliESDtrack *nTrackXi = lESDevent->GetTrack( lIdxNegXi );
1545 AliESDtrack *bachTrackXi = lESDevent->GetTrack( lBachIdx );
1546 if (!pTrackXi || !nTrackXi || !bachTrackXi ) {
1547 AliWarning("ERROR: Could not retrieve one of the 3 ESD daughter tracks of the cascade ...");
1548 continue;
1549 }
1550
f9a6cab5 1551 lPosTPCClusters = pTrackXi->GetTPCNcls();
1552 lNegTPCClusters = nTrackXi->GetTPCNcls();
1553 lBachTPCClusters = bachTrackXi->GetTPCNcls();
1554
1555 // FIXME : rejection of a poor quality tracks
1556 if (fkQualityCutTPCrefit) {
1557 // 1 - Poor quality related to TPCrefit
1558 ULong_t pStatus = pTrackXi->GetStatus();
1559 ULong_t nStatus = nTrackXi->GetStatus();
1560 ULong_t bachStatus = bachTrackXi->GetStatus();
1561 if ((pStatus&AliESDtrack::kTPCrefit) == 0) { AliWarning("Pb / V0 Pos. track has no TPCrefit ... continue!"); continue; }
1562 if ((nStatus&AliESDtrack::kTPCrefit) == 0) { AliWarning("Pb / V0 Neg. track has no TPCrefit ... continue!"); continue; }
1563 if ((bachStatus&AliESDtrack::kTPCrefit) == 0) { AliWarning("Pb / Bach. track has no TPCrefit ... continue!"); continue; }
1564 }
79313da9 1565 if (fkQualityCutnTPCcls) {
f9a6cab5 1566 // 2 - Poor quality related to TPC clusters
79313da9 1567 if (lPosTPCClusters < fMinnTPCcls) { AliWarning("Pb / V0 Pos. track has less than minn TPC clusters ... continue!"); continue; }
1568 if (lNegTPCClusters < fMinnTPCcls) { AliWarning("Pb / V0 Neg. track has less than minn TPC clusters ... continue!"); continue; }
1569 if (lBachTPCClusters < fMinnTPCcls) { AliWarning("Pb / Bach. track has less than minn TPC clusters ... continue!"); continue; }
f9a6cab5 1570 }
1571
1572 const AliExternalTrackParam *pExtTrack = pTrackXi ->GetInnerParam();
1573 const AliExternalTrackParam *nExtTrack = nTrackXi ->GetInnerParam();
1574 const AliExternalTrackParam *bachExtTrack = bachTrackXi ->GetInnerParam();
1575
1576 if (pExtTrack) {
1577 lInnerWallMomCascDghters[0] = pExtTrack ->GetP() * pExtTrack ->Charge();
1578 lTPCSignalCascDghters [0] = pTrackXi ->GetTPCsignal();
1579 }
1580 if (nExtTrack) {
1581 lInnerWallMomCascDghters[1] = nExtTrack ->GetP() * nExtTrack ->Charge();
1582 lTPCSignalCascDghters [1] = nTrackXi ->GetTPCsignal();
1583 }
1584 if (bachExtTrack) {
1585 lInnerWallMomCascDghters[2] = bachExtTrack ->GetP() * bachExtTrack ->Charge();
1586 lTPCSignalCascDghters [2] = bachTrackXi ->GetTPCsignal();
1587 }
1588
1589
1590 lInvMassLambdaAsCascDghter = xi->GetEffMass();
1591 // This value shouldn't change, whatever the working hyp. is : Xi-, Xi+, Omega-, Omega+
1592 lDcaV0DaughtersXi = xi->GetDcaV0Daughters();
1593 lV0Chi2Xi = xi->GetChi2V0();
1594
988a1924 1595 lV0CosineOfPointingAngle = xi->GetV0CosineOfPointingAngle(lBestPrimaryVtxPos[0],
39b18694 1596 lBestPrimaryVtxPos[1],
1597 lBestPrimaryVtxPos[2] );
39b18694 1598
f9a6cab5 1599 lDcaV0ToPrimVertexXi = xi->GetD( lBestPrimaryVtxPos[0],
1600 lBestPrimaryVtxPos[1],
1601 lBestPrimaryVtxPos[2] );
1602
1603 lDcaBachToPrimVertexXi = TMath::Abs( bachTrackXi->GetD( lBestPrimaryVtxPos[0],
1604 lBestPrimaryVtxPos[1],
1605 lMagneticField ) );
1606 // Note : AliExternalTrackParam::GetD returns an algebraic value ...
1607
1608 xi->GetXYZ( lPosV0Xi[0], lPosV0Xi[1], lPosV0Xi[2] );
1609 lV0RadiusXi = TMath::Sqrt( lPosV0Xi[0]*lPosV0Xi[0] + lPosV0Xi[1]*lPosV0Xi[1] );
1610
1611 lDcaPosToPrimVertexXi = TMath::Abs( pTrackXi ->GetD( lBestPrimaryVtxPos[0],
1612 lBestPrimaryVtxPos[1],
1613 lMagneticField ) );
1614
1615 lDcaNegToPrimVertexXi = TMath::Abs( nTrackXi ->GetD( lBestPrimaryVtxPos[0],
1616 lBestPrimaryVtxPos[1],
1617 lMagneticField ) );
1618
1619 // - II.Step 3' : extra-selection for cascade candidates
f9a6cab5 1620 if (fkExtraSelections) {
39b18694 1621 // if(lChi2Xi > 2000) continue; // in AliCascadeVertexer
1622 // if(lV0Chi2Xi > 2000) continue; // in AliV0vertexer
f9a6cab5 1623
11bcd1e4 1624 if (lDcaXiDaughters > 0.3) continue; // in AliCascadeVertexer
f9a6cab5 1625 if (lXiCosineOfPointingAngle < 0.999 ) continue; // in AliCascadeVertexer
1626 if (lDcaV0ToPrimVertexXi < 0.05) continue; // in AliCascadeVertexer
1627 if (lDcaBachToPrimVertexXi < 0.03) continue; // in AliCascadeVertexer
39b18694 1628 // if (TMath::Abs(lInvMassLambdaAsCascDghter-1.11568) > 0.006 ) continue; // in AliCascadeVertexer
f9a6cab5 1629
1630 if (lDcaV0DaughtersXi > 1.) continue; // in AliV0vertexer
988a1924 1631 if (lV0toXiCosineOfPointingAngle < 0.998) continue; // in AliV0vertexer
f9a6cab5 1632 if (lDcaPosToPrimVertexXi < 0.1) continue; // in AliV0vertexer
1633 if (lDcaNegToPrimVertexXi < 0.1) continue; // in AliV0vertexer
1634
1635
39b18694 1636 if(lXiRadius < .9) continue; // in AliCascadeVertexer
1637 // if(lXiRadius > 100) continue; // in AliCascadeVertexer
1638 if(lV0RadiusXi < 0.9) continue; // in AliV0vertexer
1639 // if(lV0RadiusXi > 100) continue; // in AliV0vertexer
f9a6cab5 1640
1641 }
1642
1643
1644
1645 // - II.Step 4 : around effective masses (ESD)
1646 // ~ change mass hypotheses to cover all the possibilities : Xi-/+, Omega -/+
1647 //-------------
1648
1649
1650 if ( bachTrackXi->Charge() < 0 ) {
1651 lV0quality = 0.;
1652 xi->ChangeMassHypothesis(lV0quality , 3312);
1653 // Calculate the effective mass of the Xi- candidate.
1654 // pdg code 3312 = Xi-
1655 lInvMassXiMinus = xi->GetEffMassXi();
1656
1657 lV0quality = 0.;
1658 xi->ChangeMassHypothesis(lV0quality , 3334);
1659 // Calculate the effective mass of the Xi- candidate.
1660 // pdg code 3334 = Omega-
1661 lInvMassOmegaMinus = xi->GetEffMassXi();
1662
1663 lV0quality = 0.;
1664 xi->ChangeMassHypothesis(lV0quality , 3312); // Back to default hyp.
1665 }// end if negative bachelor
1666
1667
1668 if ( bachTrackXi->Charge() > 0 ) {
1669 lV0quality = 0.;
1670 xi->ChangeMassHypothesis(lV0quality , -3312);
1671 // Calculate the effective mass of the Xi+ candidate.
1672 // pdg code -3312 = Xi+
1673 lInvMassXiPlus = xi->GetEffMassXi();
1674
1675 lV0quality = 0.;
1676 xi->ChangeMassHypothesis(lV0quality , -3334);
1677 // Calculate the effective mass of the Xi+ candidate.
1678 // pdg code -3334 = Omega+
1679 lInvMassOmegaPlus = xi->GetEffMassXi();
1680
1681 lV0quality = 0.;
1682 xi->ChangeMassHypothesis(lV0quality , -3312); // Back to "default" hyp.
1683 }// end if positive bachelor
39b18694 1684
f9a6cab5 1685 // - II.Step 5 : PID on the daughter tracks
1686 //-------------
39b18694 1687/*
1688 // A - Combined PID */ // removed, add when will be used
f9a6cab5 1689
1690 // B - TPC PID : 3-sigma bands on Bethe-Bloch curve
1691
1692 // Bachelor
11bcd1e4 1693 if (TMath::Abs(fPIDResponse->NumberOfSigmasTPC( bachTrackXi,AliPID::kKaon)) < 4) lIsBachelorKaonForTPC = kTRUE;
1694 if (TMath::Abs(fPIDResponse->NumberOfSigmasTPC( bachTrackXi,AliPID::kPion)) < 4) lIsBachelorPionForTPC = kTRUE;
f9a6cab5 1695
1696 // Negative V0 daughter
11bcd1e4 1697 if (TMath::Abs(fPIDResponse->NumberOfSigmasTPC( nTrackXi,AliPID::kPion )) < 4) lIsNegPionForTPC = kTRUE;
1698 if (TMath::Abs(fPIDResponse->NumberOfSigmasTPC( nTrackXi,AliPID::kProton )) < 4) lIsNegProtonForTPC = kTRUE;
f9a6cab5 1699
1700 // Positive V0 daughter
11bcd1e4 1701 if (TMath::Abs(fPIDResponse->NumberOfSigmasTPC( pTrackXi,AliPID::kPion )) < 4) lIsPosPionForTPC = kTRUE;
1702 if (TMath::Abs(fPIDResponse->NumberOfSigmasTPC( pTrackXi,AliPID::kProton )) < 4) lIsPosProtonForTPC = kTRUE;
f9a6cab5 1703
1704 /*
1705 const AliExternalTrackParam *pInnerWallTrackXi = pTrackXi ->GetInnerParam();
1706 const AliExternalTrackParam *nInnerWallTrackXi = nTrackXi ->GetInnerParam();
1707 const AliExternalTrackParam *bachInnerWallTrackXi = bachTrackXi ->GetInnerParam();
1708 if (pInnerWallTrackXi && nInnerWallTrackXi && bachInnerWallTrackXi ) {
1709
1710 Double_t pMomInnerWall = pInnerWallTrackXi ->GetP();
1711 Double_t nMomInnerWall = nInnerWallTrackXi ->GetP();
1712 Double_t bachMomInnerWall = bachInnerWallTrackXi->GetP();
1713
1714 // Bachelor
1715 if (TMath::Abs(fESDpid->NumberOfSigmasTPC( bachTrackXi,AliPID::kPion)) < 3) lIsBachelorPionForTPC = kTRUE;
1716 if (bachMomInnerWall < 0.350 && TMath::Abs(fESDpid->NumberOfSigmasTPC( bachTrackXi,AliPID::kKaon)) < 5) lIsBachelorKaonForTPC = kTRUE;
1717 if (bachMomInnerWall > 0.350 && TMath::Abs(fESDpid->NumberOfSigmasTPC( bachTrackXi,AliPID::kKaon)) < 3) lIsBachelorKaonForTPC = kTRUE;
1718
1719 // Negative V0 daughter
1720 if (TMath::Abs(fESDpid->NumberOfSigmasTPC( nTrackXi,AliPID::kPion )) < 3 ) lIsNegPionForTPC = kTRUE;
1721 if (nMomInnerWall < 0.6 && TMath::Abs(fESDpid->NumberOfSigmasTPC( nTrackXi,AliPID::kProton ) ) < 5 ) lIsNegProtonForTPC = kTRUE;
1722 if (nMomInnerWall > 0.6 && TMath::Abs(fESDpid->NumberOfSigmasTPC( nTrackXi,AliPID::kProton ) ) < 3 ) lIsNegProtonForTPC = kTRUE;
1723
1724 // Positive V0 daughter
1725 if (TMath::Abs(fESDpid->NumberOfSigmasTPC( pTrackXi,AliPID::kPion )) < 3 ) lIsPosPionForTPC = kTRUE;
1726 if (pMomInnerWall < 0.6 && TMath::Abs(fESDpid->NumberOfSigmasTPC( pTrackXi,AliPID::kProton )) < 5) lIsPosProtonForTPC = kTRUE;
1727 if (pMomInnerWall > 0.6 && TMath::Abs(fESDpid->NumberOfSigmasTPC( pTrackXi,AliPID::kProton )) < 3) lIsPosProtonForTPC = kTRUE;
1728 }
1729 */
1730
1731 // - II.Step 6 : extra info for QA (ESD)
1732 // miscellaneous pieces of info that may help regarding data quality assessment.
1733 //-------------
1734
1735 xi->GetPxPyPz( lXiMomX, lXiMomY, lXiMomZ );
1736 lXiTransvMom = TMath::Sqrt( lXiMomX*lXiMomX + lXiMomY*lXiMomY );
1737 lXiTotMom = TMath::Sqrt( lXiMomX*lXiMomX + lXiMomY*lXiMomY + lXiMomZ*lXiMomZ );
39b18694 1738
1739 xi->GetNPxPyPz(lV0NMomX,lV0NMomY,lV0NMomZ);
1740 xi->GetPPxPyPz(lV0PMomX,lV0PMomY,lV0PMomZ);
1741 lV0TotMom = TMath::Sqrt(TMath::Power(lV0NMomX+lV0PMomX,2)+TMath::Power(lV0NMomY+lV0PMomY,2)+TMath::Power(lV0NMomZ+lV0PMomZ,2));
f9a6cab5 1742
1743 xi->GetBPxPyPz( lBachMomX, lBachMomY, lBachMomZ );
1744 lBachTransvMom = TMath::Sqrt( lBachMomX*lBachMomX + lBachMomY*lBachMomY );
1745 lBachTotMom = TMath::Sqrt( lBachMomX*lBachMomX + lBachMomY*lBachMomY + lBachMomZ*lBachMomZ );
1746
1747 lChargeXi = xi->Charge();
1748
1749 lV0toXiCosineOfPointingAngle = xi->GetV0CosineOfPointingAngle( lPosXi[0], lPosXi[1], lPosXi[2] );
1750
1751 lRapXi = xi->RapXi();
1752 lRapOmega = xi->RapOmega();
1753 lEta = xi->Eta();
1754 lTheta = xi->Theta() *180.0/TMath::Pi();
1755 lPhi = xi->Phi() *180.0/TMath::Pi();
1756 lAlphaXi = xi->AlphaXi();
1757 lPtArmXi = xi->PtArmXi();
1758
1759
1760 //FIXME : Extra-cut = Anti-splitting cut for lambda daughters
1761 Bool_t kAntiSplittingLambda = kFALSE;
1762
1763 if (kAntiSplittingLambda) { // not used
1764 Double_t lNMomX = 0., lNMomY = 0., lNMomZ = 0.;
1765 Double_t lPMomX = 0., lPMomY = 0., lPMomZ = 0.;
1766
1767 xi->GetPPxPyPz(lPMomX, lPMomY, lPMomZ);
1768 xi->GetNPxPyPz(lNMomX, lNMomY, lNMomZ);
1769
1770 if ( xi->Charge() < 0) {// Xi- or Omega-
1771 if (TMath::Abs(lBachTransvMom - TMath::Sqrt( lNMomX*lNMomX + lNMomY*lNMomY ) ) < 0.075) continue;
1772 } else { //Xi+ or Omega+
1773 if(TMath::Abs(lBachTransvMom - TMath::Sqrt( lPMomX*lPMomX + lPMomY*lPMomY ) ) < 0.075) continue;
1774 }
1775 }
1776
1777 //FIXME : Just to know which file is currently open : locate the file containing Xi
1778 // cout << "Name of the file containing Xi candidate(s) :"
1779 // << CurrentFileName()
1780 // << " / entry: " << Entry()
1781 // << " / in file: " << lESDevent->GetEventNumberInFile() // <- Cvetan / From Mihaela: AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()->GetTree()->GetReadEntry();
1782 // << " : mass(Xi) = " << xi->GetEffMassXi()
1783 // << " / charge = " << lChargeXi
1784 // << " / pt(Casc) = " << lXiTransvMom
1785 // << " / Decay 2d R(Xi) = " << lXiRadius
1786 // << " / Track Index(Pos) = " << lIdxPosXi << "/ Nb(TPC clusters) = " << lPosTPCClusters
1787 // << " / Track Index(Neg) = " << lIdxNegXi << "/ Nb(TPC clusters) = " << lNegTPCClusters
1788 // << " / Track Index(Bach) = " << lBachIdx << "/ Nb(TPC clusters) = " << lBachTPCClusters
1789 // << endl;
1790
1791
ff9a705e 1792 } else if (fAnalysisType == "AOD") {
39b18694 1793
1794 // II.AOD - Calculation Part dedicated to Xi vertices
1795
f9a6cab5 1796 const AliAODcascade *xi = lAODevent->GetCascade(iXi);
1797 if (!xi) continue;
1798
f9a6cab5 1799 // - II.Step 1 : Characteristics of the event : prim. Vtx + magnetic field (AOD)
1800 //-------------
1801
1802
1803 lTrkgPrimaryVtxRadius3D = -500. ;
39b18694 1804 // We don't have the different prim. vertex at the AOD level -> nothing to do.
f9a6cab5 1805
1806 lBestPrimaryVtxRadius3D = TMath::Sqrt( lBestPrimaryVtxPos[0] * lBestPrimaryVtxPos[0] +
1807 lBestPrimaryVtxPos[1] * lBestPrimaryVtxPos[1] +
1808 lBestPrimaryVtxPos[2] * lBestPrimaryVtxPos[2] );
1809
1810
1811 // - II.Step 2 : Assigning the necessary variables for specific AliAODcascade data members (AOD)
1812 //-------------
1813
39b18694 1814 lEffMassXi = xi->MassXi(); // default working hypothesis : cascade = Xi- decay
f9a6cab5 1815 lChi2Xi = xi->Chi2Xi();
39b18694 1816 lDcaXiDaughters = xi->DcaXiDaughters();
f9a6cab5 1817 lXiCosineOfPointingAngle = xi->CosPointingAngleXi( lBestPrimaryVtxPos[0],
39b18694 1818 lBestPrimaryVtxPos[1],
1819 lBestPrimaryVtxPos[2] );
f9a6cab5 1820 // Take care :
1821 // the best available vertex should be used (like in AliCascadeVertexer)
1822
1823 lPosXi[0] = xi->DecayVertexXiX();
1824 lPosXi[1] = xi->DecayVertexXiY();
1825 lPosXi[2] = xi->DecayVertexXiZ();
1826 lXiRadius = TMath::Sqrt( lPosXi[0]*lPosXi[0] + lPosXi[1]*lPosXi[1] );
1827
39b18694 1828 AliAODTrack *pTrackXi = dynamic_cast<AliAODTrack*>( xi->GetDaughter(0) );
1829 AliAODTrack *nTrackXi = dynamic_cast<AliAODTrack*>( xi->GetDaughter(1) );
1830 AliAODTrack *bachTrackXi = dynamic_cast<AliAODTrack*>( xi->GetDecayVertexXi()->GetDaughter(0) );
1831 if (!pTrackXi || !nTrackXi || !bachTrackXi ) {
1832 AliWarning("ERROR: Could not retrieve one of the 3 AOD daughter tracks of the cascade ...");
1833 continue;
1834 }
1835
1836 UInt_t lIdxPosXi = (UInt_t) TMath::Abs( pTrackXi->GetID() );
1837 UInt_t lIdxNegXi = (UInt_t) TMath::Abs( nTrackXi->GetID() );
1838 UInt_t lBachIdx = (UInt_t) TMath::Abs( bachTrackXi->GetID() );
1839
1840 // Care track label can be negative in MC production (linked with the track quality)
1841 // However = normally, not the case for track index ...
1842
1843 // FIXME : rejection of a double use of a daughter track (nothing but just a crosscheck of what is done in the cascade vertexer)
1844 if (lBachIdx == lIdxNegXi) {
1845 AliWarning("Pb / Idx(Bach. track) = Idx(Neg. track) ... continue!"); continue;
1846 }
1847 if (lBachIdx == lIdxPosXi) {
1848 AliWarning("Pb / Idx(Bach. track) = Idx(Pos. track) ... continue!"); continue;
1849 }
1850
1851 lPosTPCClusters = pTrackXi->GetTPCNcls(); // FIXME: Is this ok? or something like in LambdaK0PbPb task AOD?
1852 lNegTPCClusters = nTrackXi->GetTPCNcls();
1853 lBachTPCClusters = bachTrackXi->GetTPCNcls();
1854
1855 // Rejection of a poor quality tracks
1856 if (fkQualityCutTPCrefit) {
1857 // 1 - Poor quality related to TPCrefit
1858 if (!(pTrackXi->IsOn(AliAODTrack::kTPCrefit))) { AliWarning("Pb / V0 Pos. track has no TPCrefit ... continue!"); continue; }
1859 if (!(nTrackXi->IsOn(AliAODTrack::kTPCrefit))) { AliWarning("Pb / V0 Neg. track has no TPCrefit ... continue!"); continue; }
1860 if (!(bachTrackXi->IsOn(AliAODTrack::kTPCrefit))) { AliWarning("Pb / Bach. track has no TPCrefit ... continue!"); continue; }
1861 }
79313da9 1862 if (fkQualityCutnTPCcls) {
39b18694 1863 // 2 - Poor quality related to TPC clusters
79313da9 1864 if (lPosTPCClusters < fMinnTPCcls) { //AliWarning("Pb / V0 Pos. track has less than minn TPC clusters ... continue!");
39b18694 1865 continue; }
79313da9 1866 if (lNegTPCClusters < fMinnTPCcls) { //AliWarning("Pb / V0 Neg. track has less than minn TPC clusters ... continue!");
39b18694 1867 continue; }
79313da9 1868 if (lBachTPCClusters < fMinnTPCcls) { //AliWarning("Pb / Bach. track has less than minn TPC clusters ... continue!");
39b18694 1869 continue; }
1870 }
1871
f9a6cab5 1872
1873 // - II.Step 3 : around the tracks : Bach + V0 (AOD)
1874 // ~ Necessary variables for AODcascade data members coming from the AODv0 part (inheritance)
1875 //-------------
1876
1877 lChargeXi = xi->ChargeXi();
1878
1879 if ( lChargeXi < 0)
1880 lInvMassLambdaAsCascDghter = xi->MassLambda();
1881 else
1882 lInvMassLambdaAsCascDghter = xi->MassAntiLambda();
1883
1884 lDcaV0DaughtersXi = xi->DcaV0Daughters();
1885 lV0Chi2Xi = xi->Chi2V0();
1886
f9a6cab5 1887 lDcaV0ToPrimVertexXi = xi->DcaV0ToPrimVertex();
1888
1889 lDcaBachToPrimVertexXi = xi->DcaBachToPrimVertex();
1890
1891
1892 lPosV0Xi[0] = xi->DecayVertexV0X();
1893 lPosV0Xi[1] = xi->DecayVertexV0Y();
1894 lPosV0Xi[2] = xi->DecayVertexV0Z();
1895 lV0RadiusXi = TMath::Sqrt( lPosV0Xi[0]*lPosV0Xi[0] + lPosV0Xi[1]*lPosV0Xi[1] );
1896
988a1924 1897 lV0CosineOfPointingAngle = xi->CosPointingAngle( lBestPrimaryVtxPos );
39b18694 1898
f9a6cab5 1899 lDcaPosToPrimVertexXi = xi->DcaPosToPrimVertex();
1900 lDcaNegToPrimVertexXi = xi->DcaNegToPrimVertex();
1901
1902 // - II.Step 4 : around effective masses (AOD)
1903 // ~ change mass hypotheses to cover all the possibilities : Xi-/+, Omega -/+
1904 //-------------
1905
1906 if ( lChargeXi < 0 ) lInvMassXiMinus = xi->MassXi();
1907 if ( lChargeXi > 0 ) lInvMassXiPlus = xi->MassXi();
1908 if ( lChargeXi < 0 ) lInvMassOmegaMinus = xi->MassOmega();
1909 if ( lChargeXi > 0 ) lInvMassOmegaPlus = xi->MassOmega();
1910
39b18694 1911
1912 // - II.Step 5 : PID on the daughters
f9a6cab5 1913 //-------------
1914
1915 // Combined PID
1916
f9a6cab5 1917
39b18694 1918 // TPC PID: 4-sigma bands on Bethe-Bloch curve
1919
1920 // Bachelor
1921 if (TMath::Abs(fPIDResponse->NumberOfSigmasTPC( bachTrackXi,AliPID::kKaon)) < 4) lIsBachelorKaonForTPC = kTRUE;
1922 if (TMath::Abs(fPIDResponse->NumberOfSigmasTPC( bachTrackXi,AliPID::kPion)) < 4) lIsBachelorPionForTPC = kTRUE;
1923
1924 // Negative V0 daughter
1925 if (TMath::Abs(fPIDResponse->NumberOfSigmasTPC( nTrackXi,AliPID::kPion )) < 4) lIsNegPionForTPC = kTRUE;
1926 if (TMath::Abs(fPIDResponse->NumberOfSigmasTPC( nTrackXi,AliPID::kProton )) < 4) lIsNegProtonForTPC = kTRUE;
1927
1928 // Positive V0 daughter
1929 if (TMath::Abs(fPIDResponse->NumberOfSigmasTPC( pTrackXi,AliPID::kPion )) < 4) lIsPosPionForTPC = kTRUE;
1930 if (TMath::Abs(fPIDResponse->NumberOfSigmasTPC( pTrackXi,AliPID::kProton )) < 4) lIsPosProtonForTPC = kTRUE;
1931
f9a6cab5 1932
1933 // - II.Step 6 : extra info for QA (AOD)
1934 // miscellaneous pieces onf info that may help regarding data quality assessment.
1935 //-------------
1936 lXiMomX = xi->MomXiX();
1937 lXiMomY = xi->MomXiY();
1938 lXiMomZ = xi->MomXiZ();
1939 lXiTransvMom = TMath::Sqrt( lXiMomX*lXiMomX + lXiMomY*lXiMomY );
1940 lXiTotMom = TMath::Sqrt( lXiMomX*lXiMomX + lXiMomY*lXiMomY + lXiMomZ*lXiMomZ );
39b18694 1941
1942 Double_t lV0MomX = xi->MomV0X();
1943 Double_t lV0MomY = xi->MomV0Y();
1944 Double_t lV0MomZ = xi->MomV0Z();
1945 lV0TotMom = TMath::Sqrt(TMath::Power(lV0MomX,2)+TMath::Power(lV0MomY,2)+TMath::Power(lV0MomZ,2));
1946
f9a6cab5 1947 lBachMomX = xi->MomBachX();
1948 lBachMomY = xi->MomBachY();
1949 lBachMomZ = xi->MomBachZ();
1950 lBachTransvMom = TMath::Sqrt( lBachMomX*lBachMomX + lBachMomY*lBachMomY );
1951 lBachTotMom = TMath::Sqrt( lBachMomX*lBachMomX + lBachMomY*lBachMomY + lBachMomZ*lBachMomZ );
1952
1953
1954 lV0toXiCosineOfPointingAngle = xi->CosPointingAngle( xi->GetDecayVertexXi() );
1955
1956 lRapXi = xi->RapXi();
1957 lRapOmega = xi->RapOmega();
39b18694 1958 lEta = xi->Eta(); // Will not work ! need a method Pz(), Py() Px()
1959 lTheta = xi->Theta() *180.0/TMath::Pi(); // in AODcascade.
1960 lPhi = xi->Phi() *180.0/TMath::Pi(); // Here, we will get eta, theta, phi for the V0 ...
f9a6cab5 1961 lAlphaXi = xi->AlphaXi();
1962 lPtArmXi = xi->PtArmXi();
1963
1964 // II.Step 7 - Complementary info for monitoring the cascade cut variables
39b18694 1965 // TPC clusters
f9a6cab5 1966
1967 }// end of AOD treatment
1968
1969
39b18694 1970 // Calculate proper time for cascade
1971
1972 Double_t cascadeMass = 0.;
1973
1974 if ( ( (lChargeXi<0) && lIsBachelorPionForTPC && lIsPosProtonForTPC && lIsNegPionForTPC ) ||
1975 ( (lChargeXi>0) && lIsBachelorPionForTPC && lIsNegProtonForTPC && lIsPosPionForTPC ) ) cascadeMass = 1.321;
1976
1977 if ( ( (lChargeXi<0) && lIsBachelorKaonForTPC && lIsPosProtonForTPC && lIsNegPionForTPC ) ||
1978 ( (lChargeXi>0) && lIsBachelorKaonForTPC && lIsNegProtonForTPC && lIsPosPionForTPC ) ) cascadeMass = 1.672;
1979
1980 Double_t lctau = TMath::Sqrt(TMath::Power((lPosXi[0]-lBestPrimaryVtxPos[0]),2)+TMath::Power((lPosXi[1]-lBestPrimaryVtxPos[1]),2)+TMath::Power(( lPosXi[2]-lBestPrimaryVtxPos[2]),2));
1981 if (lXiTotMom!=0) lctau = lctau*cascadeMass/lXiTotMom;
1982 else lctau = -1.;
1983
1984
1985 // Calculate proper time for Lambda (reconstructed)
1986 Float_t lambdaMass = 1.115683; // PDG mass
1987 Float_t distV0Xi = TMath::Sqrt(TMath::Power((lPosV0Xi[0]-lPosXi[0]),2)+TMath::Power((lPosV0Xi[1]-lPosXi[1]),2)+TMath::Power((lPosV0Xi[2]-lPosXi[2]),2));
1988 Float_t lctauV0 = -1.;
1989 if (lV0TotMom!=0) lctauV0 = distV0Xi*lambdaMass/lV0TotMom;
1990
1991 Float_t distTV0Xi = TMath::Sqrt(TMath::Power((lPosV0Xi[0]-lPosXi[0]),2)+TMath::Power((lPosV0Xi[1]-lPosXi[1]),2));
1992
1993
f9a6cab5 1994 // -------------------------------------
1995 // II.Fill - Filling the TH1,2,3Fs, HnSparses, CFContainers, FOR events with CASCADES !
39b18694 1996 // For AliEVE
1997/* if(lChargeXi < 0&& lIsBachelorPionForTPC && lIsPosProtonForTPC && lIsNegPionForTPC ) {
1998 if (lXiTransvMom>2.&&lXiTransvMom<4.&&(lInvMassXiMinus<1.322&&lInvMassXiMinus>1.320)&&(lXiRadius<8.&&lXiRadius>3.)) {
f9a6cab5 1999 // // FIXME : Just to know which file is currently open : locate the file containing Xi
39b18694 2000 cout << "Name of the file containing Xi candidate(s) :"
2001 << CurrentFileName()
2002 << " / entry: " << Entry()
2003 << " / in file: " << lESDevent->GetEventNumberInFile() // <- Cvetan / From Mihaela: AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()->GetTree()->GetReadEntry();
2004 << " AliESDcascade number " << iXi
2005 << " : mass(Xi-) = " << lInvMassXiMinus
2006 << " / charge = " << lChargeXi
2007 << " / pt(Casc) = " << lXiTransvMom
2008 << " / Decay 2d R(Xi) = " << lXiRadius
2009 << endl;
2010 }
2011 }
2012 if(lChargeXi < 0&& lIsBachelorKaonForTPC && lIsPosProtonForTPC && lIsNegPionForTPC ) {
2013 if (lXiTransvMom>2&&lXiTransvMom<4&&(lInvMassOmegaMinus<1.674&&lInvMassOmegaMinus>1.670)&&(lXiRadius<8.&&lXiRadius>3.)) {
2014 cout << "Name of the file containing Omega candidate(s) :"
2015 << CurrentFileName()
2016 << " / entry: " << Entry()
2017 << " / in file: " << lESDevent->GetEventNumberInFile() // <- Cvetan / From Mihaela: AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()->GetTree()->GetReadEntry();
2018 << " AliESDcascade number " << iXi
2019 << " : mass(Omega-) = " << lInvMassOmegaMinus
2020 << " / charge = " << lChargeXi
2021 << " / pt(Casc) = " << lXiTransvMom
2022 << " / Decay 2d R(Xi) = " << lXiRadius
2023 << endl;
2024
2025 }
2026 }
2027*/
2028
f9a6cab5 2029
2030 // - II.Fill.Step 1 : primary vertex
2031
2032 fHistTPCrefitTrackMultiplicityForCascadeEvt->Fill( nTrackWithTPCrefitMultiplicity );
2033
2034 fHistPosV0TPCClusters ->Fill( lPosTPCClusters );
2035 fHistNegV0TPCClusters ->Fill( lNegTPCClusters );
2036 fHistBachTPCClusters ->Fill( lBachTPCClusters );
2037
2038 f2dHistTPCdEdxOfCascDghters ->Fill( lInnerWallMomCascDghters[0] , lTPCSignalCascDghters[0] );
2039 f2dHistTPCdEdxOfCascDghters ->Fill( lInnerWallMomCascDghters[1] , lTPCSignalCascDghters[1] );
2040 f2dHistTPCdEdxOfCascDghters ->Fill( lInnerWallMomCascDghters[2] , lTPCSignalCascDghters[2] );
2041
2042 fHistVtxStatus ->Fill( lStatusTrackingPrimVtx ); // 1 if tracking vtx = ok
2043
2044 if ( lStatusTrackingPrimVtx ) {
2045 fHistPosTrkgPrimaryVtxXForCascadeEvt ->Fill( lTrkgPrimaryVtxPos[0] );
2046 fHistPosTrkgPrimaryVtxYForCascadeEvt ->Fill( lTrkgPrimaryVtxPos[1] );
2047 fHistPosTrkgPrimaryVtxZForCascadeEvt ->Fill( lTrkgPrimaryVtxPos[2] );
2048 fHistTrkgPrimaryVtxRadius ->Fill( lTrkgPrimaryVtxRadius3D );
2049 }
2050
2051 fHistPosBestPrimaryVtxXForCascadeEvt ->Fill( lBestPrimaryVtxPos[0] );
2052 fHistPosBestPrimaryVtxYForCascadeEvt ->Fill( lBestPrimaryVtxPos[1] );
2053 fHistPosBestPrimaryVtxZForCascadeEvt ->Fill( lBestPrimaryVtxPos[2] );
2054 fHistBestPrimaryVtxRadius ->Fill( lBestPrimaryVtxRadius3D );
2055
2056 f2dHistTrkgPrimVtxVsBestPrimVtx->Fill( lTrkgPrimaryVtxRadius3D, lBestPrimaryVtxRadius3D );
2057
2058 // **************************** With PID on ? ... for the signal region ? ************FIXME**************************************
2059 if ( ( (lChargeXi<0) && lIsBachelorPionForTPC && lIsPosProtonForTPC && lIsNegPionForTPC ) ||
2060 ( (lChargeXi>0) && lIsBachelorPionForTPC && lIsNegProtonForTPC && lIsPosPionForTPC ) )
2061 // NOTE :
2062 // with this condition, it could happen that a cascade candidate satisfies the wrong requirement,
2063 // e.g. one looks at a Xi- candidate for which lIsBachelorPionForTPC && lIsPosProtonForTPC && lIsNegPionForTPC = kFALSE
2064 // Expectation: it should be excluded.
2065 // but lIsBachelorPionForTPC && lIsNegProtonForTPC && lIsPosPionForTPC = kTRUE
2066 // then this bad Xi-candidate will contribute anyway (OR condition).
2067 // Hence : the extra condition on the sign of the Cascade
2068 {
2069 // if( TMath::Abs( lInvMassXiMinus-1.3217 ) < 0.010 || TMath::Abs( lInvMassXiPlus-1.3217 ) < 0.010)
2070
2071 // II.Fill.Step 2
2072 fHistEffMassXi ->Fill( lEffMassXi );
2073 fHistChi2Xi ->Fill( lChi2Xi ); // Flag CascadeVtxer: Cut Variable a
2074 fHistDcaXiDaughters ->Fill( lDcaXiDaughters ); // Flag CascadeVtxer: Cut Variable e
2075 fHistDcaBachToPrimVertex ->Fill( lDcaBachToPrimVertexXi ); // Flag CascadeVtxer: Cut Variable d
2076 fHistXiCosineOfPointingAngle ->Fill( lXiCosineOfPointingAngle ); // Flag CascadeVtxer: Cut Variable f
2077 fHistXiRadius ->Fill( lXiRadius ); // Flag CascadeVtxer: Cut Variable g+h
2078
2079
2080 // II.Fill.Step 3
2081 fHistMassLambdaAsCascDghter ->Fill( lInvMassLambdaAsCascDghter ); // Flag CascadeVtxer: Cut Variable c
2082 fHistV0Chi2Xi ->Fill( lV0Chi2Xi );
2083 fHistDcaV0DaughtersXi ->Fill( lDcaV0DaughtersXi );
988a1924 2084 fHistV0CosineOfPointingAngle ->Fill( lV0CosineOfPointingAngle );
f9a6cab5 2085 fHistV0RadiusXi ->Fill( lV0RadiusXi );
2086
2087 fHistDcaV0ToPrimVertexXi ->Fill( lDcaV0ToPrimVertexXi ); // Flag CascadeVtxer: Cut Variable b
2088 fHistDcaPosToPrimVertexXi ->Fill( lDcaPosToPrimVertexXi );
2089 fHistDcaNegToPrimVertexXi ->Fill( lDcaNegToPrimVertexXi );
2090
2091
2092 // II.Fill.Step 4 : extra QA info
2093
2094 fHistChargeXi ->Fill( lChargeXi );
2095 fHistV0toXiCosineOfPointingAngle->Fill( lV0toXiCosineOfPointingAngle );
2096
2097 if ( TMath::Abs( lInvMassXiMinus-1.3217 ) < 0.012 || TMath::Abs( lInvMassXiPlus-1.3217 ) < 0.012) {// One InvMass should be different from 0
2098 fHistXiTransvMom ->Fill( lXiTransvMom );
2099 fHistXiTotMom ->Fill( lXiTotMom );
2100
2101 fHistBachTransvMomXi ->Fill( lBachTransvMom );
2102 fHistBachTotMomXi ->Fill( lBachTotMom );
2103
2104 fHistRapXi ->Fill( lRapXi );
2105 fHistEtaXi ->Fill( lEta );
2106 fHistThetaXi ->Fill( lTheta );
2107 fHistPhiXi ->Fill( lPhi );
2108 }
2109
2110 if ( TMath::Abs( lInvMassOmegaMinus-1.672 ) < 0.012 || TMath::Abs( lInvMassOmegaPlus-1.672 ) < 0.012 ) {// One InvMass should be different from 0
2111 fHistRapOmega ->Fill( lRapOmega );
2112 }
2113
2114 f2dHistArmenteros ->Fill( lAlphaXi, lPtArmXi );
2115 }// end with PID ...
2116
2117 // II.Fill.Step 5 : inv mass plots 1D
2118 if ( lChargeXi < 0 ) {
2119 fHistMassXiMinus ->Fill( lInvMassXiMinus );
11bcd1e4 2120 fHistMassOmegaMinus ->Fill( lInvMassOmegaMinus );
f9a6cab5 2121 if(lIsBachelorPion) fHistMassWithCombPIDXiMinus ->Fill( lInvMassXiMinus );
2122 if(lIsBachelorKaon) fHistMassWithCombPIDOmegaMinus ->Fill( lInvMassOmegaMinus );
2123
2124 fHistDcaXiDaughtersvsInvMass->Fill(lDcaXiDaughters,lInvMassXiMinus);
2125 fHistDcaBachToPrimVertexvsInvMass->Fill(lDcaBachToPrimVertexXi,lInvMassXiMinus);
2126 fHistXiCosineOfPointingAnglevsInvMass->Fill(lXiCosineOfPointingAngle,lInvMassXiMinus);
2127 fHistMassLambdaAsCascDghtervsInvMass->Fill(lInvMassLambdaAsCascDghter,lInvMassXiMinus);
2128 fHistDcaV0DaughtersXivsInvMass->Fill(lDcaV0DaughtersXi,lInvMassXiMinus);
2129 fHistDcaV0ToPrimVertexXivsInvMass->Fill(lDcaV0ToPrimVertexXi,lInvMassXiMinus);
2130 }
2131
2132 if ( lChargeXi > 0 ) {
2133 fHistMassXiPlus ->Fill( lInvMassXiPlus );
11bcd1e4 2134 fHistMassOmegaPlus ->Fill( lInvMassOmegaPlus );
f9a6cab5 2135 if(lIsBachelorPion) fHistMassWithCombPIDXiPlus ->Fill( lInvMassXiPlus );
2136 if(lIsBachelorKaon) fHistMassWithCombPIDOmegaPlus ->Fill( lInvMassOmegaPlus );
2137 }
2138
2139
2140 // II.Fill.Step 6 : inv mass plots 2D, 3D
2141 if ( lChargeXi < 0 ) {
2142 f2dHistEffMassLambdaVsEffMassXiMinus->Fill( lInvMassLambdaAsCascDghter, lInvMassXiMinus );
2143 f2dHistEffMassXiVsEffMassOmegaMinus ->Fill( lInvMassXiMinus, lInvMassOmegaMinus );
2144 f2dHistXiRadiusVsEffMassXiMinus ->Fill( lXiRadius, lInvMassXiMinus );
2145 f2dHistXiRadiusVsEffMassOmegaMinus ->Fill( lXiRadius, lInvMassOmegaMinus );
2146// f3dHistXiPtVsEffMassVsYXiMinus ->Fill( lXiTransvMom, lInvMassXiMinus, lRapXi );
2147// f3dHistXiPtVsEffMassVsYOmegaMinus ->Fill( lXiTransvMom, lInvMassOmegaMinus, lRapOmega );
2148 } else {
2149 f2dHistEffMassLambdaVsEffMassXiPlus ->Fill( lInvMassLambdaAsCascDghter, lInvMassXiPlus );
2150 f2dHistEffMassXiVsEffMassOmegaPlus ->Fill( lInvMassXiPlus, lInvMassOmegaPlus );
2151 f2dHistXiRadiusVsEffMassXiPlus ->Fill( lXiRadius, lInvMassXiPlus);
2152 f2dHistXiRadiusVsEffMassOmegaPlus ->Fill( lXiRadius, lInvMassOmegaPlus );
2153// f3dHistXiPtVsEffMassVsYXiPlus ->Fill( lXiTransvMom, lInvMassXiPlus, lRapXi );
2154// f3dHistXiPtVsEffMassVsYOmegaPlus ->Fill( lXiTransvMom, lInvMassOmegaPlus, lRapOmega );
2155 }
2156
2157 // - Filling the AliCFContainers related to PID
2158
2159 Double_t lContainerPIDVars[4] = {0.0};
2160
2161 // Xi Minus
2162 if ( lChargeXi < 0 ) {
2163 lContainerPIDVars[0] = lXiTransvMom ;
2164 lContainerPIDVars[1] = lInvMassXiMinus ;
2165 lContainerPIDVars[2] = lRapXi ;
39b18694 2166 lContainerPIDVars[3] = lcentrality;
f9a6cab5 2167
2168 // No PID
2169 fCFContCascadePIDXiMinus->Fill(lContainerPIDVars, 0); // No PID
2170 // TPC PID
2171 if ( lIsBachelorPionForTPC )
2172 fCFContCascadePIDXiMinus->Fill(lContainerPIDVars, 1); // TPC PID / 4-#sigma cut on Bachelor track
2173
2174 if ( lIsBachelorPionForTPC &&
2175 lIsPosProtonForTPC )
2176 fCFContCascadePIDXiMinus->Fill(lContainerPIDVars, 2); // TPC PID / 4-#sigma cut on Bachelor+Baryon tracks
2177
2178 if ( lIsBachelorPionForTPC &&
2179 lIsPosProtonForTPC &&
2180 lIsNegPionForTPC )
2181 fCFContCascadePIDXiMinus->Fill(lContainerPIDVars, 3); // TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks
2182
2183 // Combined PID
2184 if ( lIsBachelorPion )
2185 fCFContCascadePIDXiMinus->Fill(lContainerPIDVars, 4); // Comb. PID / Bachelor
2186
2187 if ( lIsBachelorPion &&
2188 lIsPosInXiProton )
2189 fCFContCascadePIDXiMinus->Fill(lContainerPIDVars, 5); // Comb. PID / Bachelor+Baryon
2190
2191 if (lIsBachelorPion &&
2192 lIsPosInXiProton &&
2193 lIsNegInXiPion )
2194 fCFContCascadePIDXiMinus->Fill(lContainerPIDVars, 6); // Comb. PID / Bachelor+Baryon+Meson
2195 }
2196
2197 lContainerPIDVars[0] = 0.; lContainerPIDVars[1] = 0.; lContainerPIDVars[2] = 0.; lContainerPIDVars[3] = 0.;
2198
2199 // Xi Plus
2200 if ( lChargeXi > 0 ) {
2201 lContainerPIDVars[0] = lXiTransvMom ;
2202 lContainerPIDVars[1] = lInvMassXiPlus ;
2203 lContainerPIDVars[2] = lRapXi ;
39b18694 2204 lContainerPIDVars[3] = lcentrality;
f9a6cab5 2205
2206 // No PID
2207 fCFContCascadePIDXiPlus->Fill(lContainerPIDVars, 0); // No PID
2208 // TPC PID
2209 if ( lIsBachelorPionForTPC )
2210 fCFContCascadePIDXiPlus->Fill(lContainerPIDVars, 1); // TPC PID / 4-#sigma cut on Bachelor track
2211
2212 if ( lIsBachelorPionForTPC &&
2213 lIsNegProtonForTPC )
2214 fCFContCascadePIDXiPlus->Fill(lContainerPIDVars, 2); // TPC PID / 4-#sigma cut on Bachelor+Baryon tracks
2215
2216 if ( lIsBachelorPionForTPC &&
2217 lIsNegProtonForTPC &&
2218 lIsPosPionForTPC )
2219 fCFContCascadePIDXiPlus->Fill(lContainerPIDVars, 3); // TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks
2220
2221 // Combined PID
2222 if ( lIsBachelorPion )
2223 fCFContCascadePIDXiPlus->Fill(lContainerPIDVars, 4); // Comb. PID / Bachelor
2224
2225 if ( lIsBachelorPion &&
2226 lIsNegInXiProton )
2227 fCFContCascadePIDXiPlus->Fill(lContainerPIDVars, 5); // Comb. PID / Bachelor+Baryon
2228
2229 if (lIsBachelorPion &&
2230 lIsNegInXiProton &&
2231 lIsPosInXiPion )
2232 fCFContCascadePIDXiPlus->Fill(lContainerPIDVars, 6); // Comb. PID / Bachelor+Baryon+Meson
2233 }
2234
2235 lContainerPIDVars[0] = 0.; lContainerPIDVars[1] = 0.; lContainerPIDVars[2] = 0.; lContainerPIDVars[3] = 0.;
2236
2237 // Omega Minus
2238 if ( lChargeXi < 0 ) {
2239 lContainerPIDVars[0] = lXiTransvMom ;
2240 lContainerPIDVars[1] = lInvMassOmegaMinus ;
2241 lContainerPIDVars[2] = lRapOmega ;
39b18694 2242 lContainerPIDVars[3] = lcentrality;
11bcd1e4 2243
f9a6cab5 2244 // No PID
2245 fCFContCascadePIDOmegaMinus->Fill(lContainerPIDVars, 0); // No PID
2246 // TPC PID
2247 if ( lIsBachelorKaonForTPC )
2248 fCFContCascadePIDOmegaMinus->Fill(lContainerPIDVars, 1); // TPC PID / 4-#sigma cut on Bachelor track
2249
2250 if ( lIsBachelorKaonForTPC &&
2251 lIsPosProtonForTPC )
2252 fCFContCascadePIDOmegaMinus->Fill(lContainerPIDVars, 2); // TPC PID / 4-#sigma cut on Bachelor+Baryon tracks
2253
2254 if ( lIsBachelorKaonForTPC &&
2255 lIsPosProtonForTPC &&
2256 lIsNegPionForTPC )
2257 fCFContCascadePIDOmegaMinus->Fill(lContainerPIDVars, 3); // TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks
2258
2259 // Combined PID
2260 if ( lIsBachelorKaon )
2261 fCFContCascadePIDOmegaMinus->Fill(lContainerPIDVars, 4); // Comb. PID / Bachelor
2262
2263 if ( lIsBachelorKaon &&
2264 lIsPosInOmegaProton )
2265 fCFContCascadePIDOmegaMinus->Fill(lContainerPIDVars, 5); // Comb. PID / Bachelor+Baryon
2266
2267 if (lIsBachelorKaon &&
2268 lIsPosInOmegaProton &&
2269 lIsNegInOmegaPion )
2270 fCFContCascadePIDOmegaMinus->Fill(lContainerPIDVars, 6); // Comb. PID / Bachelor+Baryon+Meson
2271 }
2272
2273 lContainerPIDVars[0] = 0.; lContainerPIDVars[1] = 0.; lContainerPIDVars[2] = 0.; lContainerPIDVars[3] = 0.;
2274
2275 // Omega Plus
2276 if ( lChargeXi > 0 ) {
2277 lContainerPIDVars[0] = lXiTransvMom ;
2278 lContainerPIDVars[1] = lInvMassOmegaPlus ;
2279 lContainerPIDVars[2] = lRapOmega ;
39b18694 2280 lContainerPIDVars[3] = lcentrality;
f9a6cab5 2281
2282 // No PID
2283 fCFContCascadePIDOmegaPlus->Fill(lContainerPIDVars, 0); // No PID
2284 // TPC PID
2285 if ( lIsBachelorKaonForTPC )
2286 fCFContCascadePIDOmegaPlus->Fill(lContainerPIDVars, 1); // TPC PID / 4-#sigma cut on Bachelor track
2287
2288 if( lIsBachelorKaonForTPC &&
2289 lIsNegProtonForTPC )
2290 fCFContCascadePIDOmegaPlus->Fill(lContainerPIDVars, 2); // TPC PID / 4-#sigma cut on Bachelor+Baryon tracks
2291
2292 if ( lIsBachelorKaonForTPC &&
2293 lIsNegProtonForTPC &&
2294 lIsPosPionForTPC )
2295 fCFContCascadePIDOmegaPlus->Fill(lContainerPIDVars, 3); // TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks
2296
2297 // Combined PID
2298 if ( lIsBachelorKaon )
2299 fCFContCascadePIDOmegaPlus->Fill(lContainerPIDVars, 4); // Comb. PID / Bachelor
2300
2301 if ( lIsBachelorKaon &&
2302 lIsNegInOmegaProton )
2303 fCFContCascadePIDOmegaPlus->Fill(lContainerPIDVars, 5); // Comb. PID / Bachelor+Baryon
2304
2305 if (lIsBachelorKaon &&
2306 lIsNegInOmegaProton &&
2307 lIsPosInOmegaPion )
2308 fCFContCascadePIDOmegaPlus->Fill(lContainerPIDVars, 6); // Comb. PID / Bachelor+Baryon+Meson
2309 }
2310
2311
2312 // II.Fill.Step 7 : filling the AliCFContainer (optimisation of topological selections)
39b18694 2313 Double_t lContainerCutVars[22] = {0.0};
f9a6cab5 2314
2315 lContainerCutVars[0] = lDcaXiDaughters;
2316 lContainerCutVars[1] = lDcaBachToPrimVertexXi;
2317 lContainerCutVars[2] = lXiCosineOfPointingAngle;
2318 lContainerCutVars[3] = lXiRadius;
2319 lContainerCutVars[4] = lInvMassLambdaAsCascDghter;
2320 lContainerCutVars[5] = lDcaV0DaughtersXi;
988a1924 2321 lContainerCutVars[6] = lV0CosineOfPointingAngle;//lV0toXiCosineOfPointingAngle;
f9a6cab5 2322 lContainerCutVars[7] = lV0RadiusXi;
2323 lContainerCutVars[8] = lDcaV0ToPrimVertexXi;
2324 lContainerCutVars[9] = lDcaPosToPrimVertexXi;
2325 lContainerCutVars[10] = lDcaNegToPrimVertexXi;
2326
2327 lContainerCutVars[13] = lXiTransvMom;
2328
2329 lContainerCutVars[16] = lBestPrimaryVtxPos[2];
39b18694 2330 lContainerCutVars[17] = lcentrality;
2331 lContainerCutVars[18] = lPrimaryTrackMultiplicity;
2332// lContainerCutVars[19] = lBachTPCClusters;
2333
2334 lContainerCutVars[19] = lctau;
2335 lContainerCutVars[20] = lctauV0;
2336 lContainerCutVars[21] = distTV0Xi;
2337
f9a6cab5 2338 if ( lChargeXi < 0 ) {
2339 lContainerCutVars[11] = lInvMassXiMinus;
11bcd1e4 2340 lContainerCutVars[12] = lInvMassOmegaMinus;//1.63;
f9a6cab5 2341 lContainerCutVars[14] = lRapXi;
2342 lContainerCutVars[15] = -1.;
11bcd1e4 2343 if ( lIsBachelorPionForTPC && lIsPosProtonForTPC && lIsNegPionForTPC )
2344 fCFContCascadeCuts->Fill(lContainerCutVars,0); // for Xi-
f9a6cab5 2345
11bcd1e4 2346 lContainerCutVars[11] = lInvMassXiMinus;
f9a6cab5 2347 lContainerCutVars[12] = lInvMassOmegaMinus;
2348 lContainerCutVars[14] = -1.;
2349 lContainerCutVars[15] = lRapOmega;
11bcd1e4 2350 if ( lIsBachelorKaonForTPC && lIsPosProtonForTPC && lIsNegPionForTPC )
2351 fCFContCascadeCuts->Fill(lContainerCutVars,2); // for Omega-
f9a6cab5 2352 } else {
2353 lContainerCutVars[11] = lInvMassXiPlus;
11bcd1e4 2354 lContainerCutVars[12] = lInvMassOmegaPlus;//1.63;
f9a6cab5 2355 lContainerCutVars[14] = lRapXi;
2356 lContainerCutVars[15] = -1.;
11bcd1e4 2357 if ( lIsBachelorPionForTPC && lIsNegProtonForTPC && lIsPosPionForTPC )
2358 fCFContCascadeCuts->Fill(lContainerCutVars,1); // for Xi+
f9a6cab5 2359
11bcd1e4 2360 lContainerCutVars[11] = lInvMassXiPlus;//1.26;
f9a6cab5 2361 lContainerCutVars[12] = lInvMassOmegaPlus;
2362 lContainerCutVars[14] = -1.;
2363 lContainerCutVars[15] = lRapOmega;
11bcd1e4 2364 if ( lIsBachelorKaonForTPC && lIsNegProtonForTPC && lIsPosPionForTPC )
2365 fCFContCascadeCuts->Fill(lContainerCutVars,3); // for Omega+
f9a6cab5 2366 }
f9a6cab5 2367
f9a6cab5 2368 }// end of the Cascade loop (ESD or AOD)
2369
2370
2371 // Post output data.
2372 PostData(1, fListHistCascade);
2373}
2374
39b18694 2375//________________________________________________________________________
f9a6cab5 2376Int_t AliAnalysisTaskCheckCascadePbPb::DoESDTrackWithTPCrefitMultiplicity(const AliESDEvent *lESDevent) {
2377 // Checking the number of tracks with TPCrefit for each event
2378 // Needed for a rough assessment of the event multiplicity
2379
2380 Int_t nTrackWithTPCrefitMultiplicity = 0;
2381 for (Int_t iTrackIdx = 0; iTrackIdx < (InputEvent())->GetNumberOfTracks(); iTrackIdx++) {
2382 AliESDtrack *esdTrack = 0x0;
2383 esdTrack = lESDevent->GetTrack( iTrackIdx );
2384 if (!esdTrack) { AliWarning("Pb / Could not retrieve one track within the track loop for TPCrefit check ..."); continue; }
2385
2386 ULong_t lTrackStatus = esdTrack->GetStatus();
2387 if ((lTrackStatus&AliESDtrack::kTPCrefit) == 0) continue;
2388 else nTrackWithTPCrefitMultiplicity++;
2389 // FIXME :
2390 // The goal here is to get a better assessment of the event multiplicity.
2391 // (InputEvent())->GetNumberOfTracks() takes into account ITS std alone tracks + global tracks
2392 // This may introduce a bias. Hence the number of TPC refit tracks.
2393 // Note : the event multiplicity = analysis on its own... See Jacek's or Jan Fiete's analysis on dN/d(eta)
2394
2395 }// end loop over all event tracks
2396 return nTrackWithTPCrefitMultiplicity;
2397}
2398
f9a6cab5 2399//________________________________________________________________________
2400void AliAnalysisTaskCheckCascadePbPb::Terminate(Option_t *)
2401{
2402 // Draw result to the screen
2403 // Called once at the end of the query
2404
2405 TList *cRetrievedList = 0x0;
2406 cRetrievedList = (TList*)GetOutputData(1);
2407 if(!cRetrievedList){
2408 AliWarning("ERROR - AliAnalysisTaskCheckCascadePbPb: ouput data container list not available\n"); return;
2409 }
2410
2411 fHistTrackMultiplicityForCentrEvt = dynamic_cast<TH1F*> ( cRetrievedList->FindObject("fHistTrackMultiplicityForCentrEvt") );
2412 if (!fHistTrackMultiplicityForCentrEvt) {
2413 AliWarning("ERROR - AliAnalysisTaskCheckCascadePbPb: fHistTrackMultiplicityForCentrEvt not available\n"); return;
2414 }
2415
2416 fHistCascadeMultiplicityForCentrEvt = dynamic_cast<TH1F*> ( cRetrievedList->FindObject("fHistCascadeMultiplicityForCentrEvt") );
2417 if (!fHistCascadeMultiplicityForCentrEvt) {
2418 AliWarning("ERROR - AliAnalysisTaskCheckCascadePbPb: fHistCascadeMultiplicityForCentrEvt not available\n"); return;
2419 }
2420
2421 fHistMassXiMinus = dynamic_cast<TH1F*> ( cRetrievedList->FindObject("fHistMassXiMinus") );
2422 if (!fHistMassXiMinus) {
2423 AliWarning("ERROR - AliAnalysisTaskCheckCascadePbPb: fHistMassXiMinus not available\n"); return;
2424 }
2425 fHistMassXiPlus = dynamic_cast<TH1F*> ( cRetrievedList->FindObject("fHistMassXiPlus") );
2426 if (!fHistMassXiPlus) {
2427 AliWarning("ERROR - AliAnalysisTaskCheckCascadePbPb: fHistMassXiPlus not available\n"); return;
2428 }
2429 fHistMassOmegaMinus = dynamic_cast<TH1F*> ( cRetrievedList->FindObject("fHistMassOmegaMinus") );
2430 if (!fHistMassOmegaMinus) {
2431 AliWarning("ERROR - AliAnalysisTaskCheckCascadePbPb: fHistMassOmegaMinus not available\n"); return;
2432 }
2433 fHistMassOmegaPlus = dynamic_cast<TH1F*> ( cRetrievedList->FindObject("fHistMassOmegaPlus") );
2434 if (!fHistMassOmegaPlus) {
2435 AliWarning("ERROR - AliAnalysisTaskCheckCascadePbPb: fHistMassOmegaPlus not available\n"); return;
2436 }
2437
2438 TCanvas *canCheckCascade = new TCanvas("AliAnalysisTaskCheckCascadePbPb","CheckCascade overview",10,10,1010,660);
2439 canCheckCascade->Divide(2,2);
2440
2441 canCheckCascade->cd(1);
2442 canCheckCascade->cd(1)->SetLogy();
2443 fHistTrackMultiplicityForCentrEvt->SetMarkerStyle(kFullStar);
2444 fHistTrackMultiplicityForCentrEvt->GetXaxis()->SetLabelFont(42);
2445 fHistTrackMultiplicityForCentrEvt->GetYaxis()->SetLabelFont(42);
2446 fHistTrackMultiplicityForCentrEvt->SetTitleFont(42, "xy");
2447 fHistTrackMultiplicityForCentrEvt->GetXaxis()->SetTitleOffset(1.1);
2448 fHistTrackMultiplicityForCentrEvt->DrawCopy("H");
2449
2450 canCheckCascade->cd(2);
2451 canCheckCascade->cd(2)->SetLogy();
2452 fHistCascadeMultiplicityForCentrEvt->SetMarkerStyle(kOpenSquare);
2453 fHistCascadeMultiplicityForCentrEvt->GetXaxis()->SetLabelFont(42);
2454 fHistCascadeMultiplicityForCentrEvt->GetYaxis()->SetLabelFont(42);
2455 fHistCascadeMultiplicityForCentrEvt->SetTitleFont(42, "xy");
2456 fHistCascadeMultiplicityForCentrEvt->GetXaxis()->SetTitleOffset(1.1);
2457 fHistCascadeMultiplicityForCentrEvt->DrawCopy("E");
2458
2459 canCheckCascade->cd(3);
2460 fHistMassXiMinus ->SetMarkerStyle(kFullCircle);
2461 fHistMassXiMinus ->SetMarkerSize(0.5);
2462 fHistMassXiMinus ->GetXaxis()->SetLabelFont(42);
2463 fHistMassXiMinus ->GetYaxis()->SetLabelFont(42);
2464 fHistMassXiMinus ->SetTitleFont(42, "xy");
2465 fHistMassXiMinus ->GetXaxis()->SetTitleOffset(1.1);
2466 fHistMassXiMinus ->GetYaxis()->SetTitleOffset(1.3);
2467 // fHistMassXiMinus->Rebin(2);
2468 fHistMassXiMinus ->GetXaxis()->SetRangeUser(1.24, 1.42);
2469 fHistMassXiMinus ->DrawCopy("E");
2470
2471 fHistMassXiPlus ->SetMarkerStyle(kOpenCircle);
2472 fHistMassXiPlus ->SetMarkerColor(kRed+2);
2473 fHistMassXiPlus ->SetLineColor(kRed+2);
2474 fHistMassXiPlus ->SetMarkerSize(0.5);
2475 // fHistMassXiPlus ->Rebin(2);
2476 fHistMassXiPlus ->DrawCopy("ESAME");
2477
2478
39b18694 2479 TLegend *legendXi =new TLegend(0.67,0.34,0.97,0.54);
2480 legendXi->SetTextFont(42);
2481 legendXi->SetTextSize(0.05);
2482 legendXi->SetFillColor(kWhite);
2483 legendXi->AddEntry( fHistMassXiMinus,"#Xi^{-} candidates","lp");
2484 legendXi->AddEntry( fHistMassXiPlus,"#Xi^{+} candidates","lp");
2485 legendXi->Draw();
f9a6cab5 2486
2487
2488 canCheckCascade->cd(4);
2489 fHistMassOmegaPlus ->SetMarkerStyle(kOpenCircle);
2490 fHistMassOmegaPlus ->SetMarkerColor(kRed+2);
2491 fHistMassOmegaPlus ->SetLineColor(kRed+2);
2492 fHistMassOmegaPlus ->SetMarkerSize(0.5);
2493 fHistMassOmegaPlus ->GetXaxis()->SetLabelFont(42);
2494 fHistMassOmegaPlus ->GetYaxis()->SetLabelFont(42);
2495 fHistMassOmegaPlus ->SetTitleFont(42, "xy");
2496 fHistMassOmegaPlus ->GetXaxis()->SetTitleOffset(1.1);
2497 fHistMassOmegaPlus ->GetYaxis()->SetTitleOffset(1.25);
2498 // fHistMassOmegaPlus ->Rebin(2);
2499 fHistMassOmegaPlus ->GetXaxis()->SetRangeUser(1.6, 1.84);
2500 fHistMassOmegaPlus ->DrawCopy("E");
2501
2502 fHistMassOmegaMinus->SetMarkerStyle(kFullCircle);
2503 fHistMassOmegaMinus->SetMarkerSize(0.5);
2504 // fHistMassOmegaMinus->Rebin(2);
2505 fHistMassOmegaMinus->DrawCopy("ESAME");
2506
2507
39b18694 2508 TLegend *legendOmega = new TLegend(0.67,0.34,0.97,0.54);
2509 legendOmega->SetTextFont(42);
2510 legendOmega->SetTextSize(0.05);
2511 legendOmega->SetFillColor(kWhite);
2512 legendOmega->AddEntry( fHistMassOmegaMinus,"#Omega^{-} candidates","lp");
2513 legendOmega->AddEntry( fHistMassOmegaPlus,"#Omega^{+} candidates","lp");
2514 legendOmega->Draw();
f9a6cab5 2515
2516}