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