ROOT logo
// $Id$
// Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007

/**************************************************************************
 * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
 * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for          *
 * full copyright notice.                                                 *
 **************************************************************************/

//------------------------------------------------------------------------
//
// AliEveCascade class
//
//------------------------------------------------------------------------

//#include <TPolyLine3D.h>
//#include <TColor.h>

//#include <vector>

#include <TDatabasePDG.h>
#include <TEveTrackPropagator.h>
#include <TEveManager.h>

#include "AliEveCascade.h"




ClassImp(AliEveCascade)

//______________________________________________________________________________
AliEveCascade::AliEveCascade() :
  TEvePointSet(),

  fRecBirthV(),
  fRecDecayV(),
  fRecDecayP(),
  fRecDecayV0(),
  fBacTrack(0),
  fNegTrack(0),
  fPosTrack(0),
  fRnrStyle(0),
  fPointingCurve(0),
  fV0Path(0),
  fESDIndex(-1),
  fDaughterDCA(999),
  fChi2Cascade(-1),
  fLambdaP(0.,0.,0.),
  fBachP(0.,0.,0.)
{
  // Default constructor.

  // Override from TEveElement.
  fPickable = kTRUE;
  fMainColorPtr = &fMarkerColor;
}

//______________________________________________________________________________
AliEveCascade::AliEveCascade(TEveRecTrack* tBac, TEveRecTrack* tNeg, TEveRecTrack* tPos, TEveRecV0* v0, TEveRecCascade* cascade, TEveTrackPropagator* rs) :
  TEvePointSet(),

  fRecBirthV(cascade->fCascadeBirth),
  fRecDecayV(cascade->fCascadeVCa),
  fRecDecayP(cascade->fPBac + v0->fPNeg + v0->fPPos),
  fRecDecayV0(v0->fVCa),
  fBacTrack(new AliEveTrack(tBac, rs)),
  fNegTrack(new AliEveTrack(tNeg, rs)),
  fPosTrack(new AliEveTrack(tPos, rs)),
  

  fRnrStyle(rs),
  fPointingCurve(new TEveLine("Pointing Curve")),
  fV0Path(new TEveLine("V0 Path")),
  fESDIndex(-1),
  fDaughterDCA(999), // DCA between Xi daughters is properly set in esd_make_cascade via the setter
  fChi2Cascade(-1),
  fLambdaP(0.,0.,0.), // Momemtum of Lambda is properly set in esd_make_cascade via the setter
  fBachP(0.,0.,0.)    // Momemtum of Lambda is properly set in esd_make_cascade via the setter
{
  // Constructor with full Cascade specification.

  // Override from TEveElement.
  fPickable = kTRUE;
  fMainColorPtr = &fMarkerColor;

  fMarkerStyle = 2;
  fMarkerColor = kMagenta+2;
  fMarkerSize  = 1;

  fPointingCurve->SetTitle("Xi pointing curve");
  fPointingCurve->SetLineColor(fMarkerColor);
  fPointingCurve->SetLineStyle(9);
  fPointingCurve->SetLineWidth(2);  
  fPointingCurve->IncDenyDestroy();
  AddElement(fPointingCurve);

  fV0Path->SetTitle("V0 path");
  fV0Path->SetLineColor(fMarkerColor);
  fV0Path->SetLineStyle(3);
  fV0Path->SetLineWidth(2);
  fV0Path->IncDenyDestroy();
  AddElement(fV0Path);

  fBacTrack->SetLineColor(kMagenta);
  fBacTrack->SetStdTitle();
  fBacTrack->IncDenyDestroy();
  AddElement(fBacTrack);
  
  fNegTrack->SetLineColor(kCyan+2);  // in V0 = kCyan
  fNegTrack->SetStdTitle();
  fNegTrack->IncDenyDestroy();
  AddElement(fNegTrack);
  
  fPosTrack->SetLineColor(kRed+2);  // in Eve V0 = kRed
  fPosTrack->SetStdTitle();
  fPosTrack->IncDenyDestroy();
  AddElement(fPosTrack);  
}

//______________________________________________________________________________
AliEveCascade::~AliEveCascade()
{
  // Destructor. Dereferences bachelor track and pointing-line objects.

  fBacTrack->DecDenyDestroy();
  fNegTrack->DecDenyDestroy();
  fPosTrack->DecDenyDestroy();
  fPointingCurve->DecDenyDestroy();
  fV0Path->DecDenyDestroy();
}

//______________________________________________________________________________
void AliEveCascade::MakeCascade()
{
  // Set all dependant components for drawing.

  SetPoint(0, fRecDecayV.fX, fRecDecayV.fY, fRecDecayV.fZ);

  fBacTrack->MakeTrack();  
  fNegTrack->MakeTrack();
  fPosTrack->MakeTrack();

  fPointingCurve->SetPoint(0, fRecBirthV.fX, fRecBirthV.fY, fRecBirthV.fZ);
  fPointingCurve->SetPoint(1, fRecDecayV.fX, fRecDecayV.fY, fRecDecayV.fZ);

  fV0Path->SetPoint(0, fRecDecayV.fX, fRecDecayV.fY, fRecDecayV.fZ);
  fV0Path->SetPoint(1, fRecDecayV0.fX, fRecDecayV0.fY, fRecDecayV0.fZ);
}



//______________________________________________________________________________
Double_t AliEveCascade::GetInvMass(Int_t cascadePdgCodeHyp) const
{
  // Returns Invariant Mass assuming the masses of the daughter particles
	TEveVector lBachMomentum = fBacTrack->GetMomentum();
  // Does not work properly because momenta at the primary vertex for V0 daughters (same for AliEVEv0) + Bach
	
	Double_t lBachMass = 0.0;
	if(cascadePdgCodeHyp == kXiMinus || cascadePdgCodeHyp == -kXiMinus )
		lBachMass = TDatabasePDG::Instance()->GetParticle("pi-")->Mass();
	else if(cascadePdgCodeHyp == kOmegaMinus || cascadePdgCodeHyp == -kOmegaMinus )
		lBachMass = TDatabasePDG::Instance()->GetParticle("K-")->Mass();
	
	Double_t lLambdaMass = TDatabasePDG::Instance()->GetParticle("Lambda0")->Mass();
	
	printf("\n Cascade : check the mass of the bachelor (%.5f) - the Lambda (%.5f)\n",lBachMass, lLambdaMass);
	
	Double_t eBach   = TMath::Sqrt(lBachMass*lBachMass     + lBachMomentum.Mag2());
	//Double_t eBach   = TMath::Sqrt(lBachMass  *lBachMass   + fBachP.Mag2());
	Double_t eLambda = TMath::Sqrt(lLambdaMass*lLambdaMass + fLambdaP.Mag2());
	
	TVector3 lCascadeMom(fBachP + fLambdaP);
	/*
	printf("Ptot(Lambda) : %f GeV/c \n", fLambdaP.Mag());
	printf("Ptot(Bach)   : %f GeV/c \n", lBachMomentum.Mag());
	printf("Ptot(BachESD): %f GeV/c \n", fBachP.Mag());
	printf("Ptot(Casc)   : %f GeV/c \n", fRecDecayP.Mag());
	printf("Ptot(CascESD): %f GeV/c \n", lCascadeMom.Mag());
	*/
	//return TMath::Sqrt( (eBach+eLambda)*(eBach+eLambda) - fRecDecayP.Mag2() );	// numerically instable ...
	//return TMath::Sqrt( ((eBach+eLambda) - lCascadeMom.Mag()) * ((eBach+eLambda) + lCascadeMom.Mag()) );
	return TMath::Sqrt( ((eBach+eLambda) - fRecDecayP.Mag()) * ((eBach+eLambda) + fRecDecayP.Mag()) );
}



//------------------------------------------------------------------------
//
// AliEveCascadeList class
//
//------------------------------------------------------------------------

ClassImp(AliEveCascadeList)

//______________________________________________________________________________
AliEveCascadeList::AliEveCascadeList() :
  TEveElementList(),
  fTitle(),
  fRnrStyle(0),
  fRnrDaughters(kTRUE),
  fRnrCascadevtx(kTRUE),
  fRnrCascadepath(kTRUE),
  fBacColor(0),
  fMinRCut(0),
  fMaxRCut(250),
  fMinDaughterDCA(0),
  fMaxDaughterDCA(1),
  fMinPt(0),
  fMaxPt(20),
  fInvMassHyp(kXiMinus),
  fMinInvariantMass(1.0),
  fMaxInvariantMass(6.0)
{
  // Default constructor.

  fChildClass = AliEveCascade::Class(); // override member from base TEveElementList
}

//______________________________________________________________________________
AliEveCascadeList::AliEveCascadeList(TEveTrackPropagator* rs) :
  TEveElementList(),
  fTitle(),
  fRnrStyle(rs),
  fRnrDaughters(kTRUE),
  fRnrCascadevtx(kTRUE),
  fRnrCascadepath(kTRUE),
  fBacColor(0),
  fMinRCut(0),
  fMaxRCut(250),
  fMinDaughterDCA(0),
  fMaxDaughterDCA(1),
  fMinPt(0),
  fMaxPt(20),
  fInvMassHyp(kXiMinus),
  fMinInvariantMass(1.0),
  fMaxInvariantMass(6.0)
{
  // Constructor with given track-propagator..

  fChildClass = AliEveCascade::Class(); // override member from base TEveElementList

  Init();
}

//______________________________________________________________________________
AliEveCascadeList::AliEveCascadeList(const Text_t* name, TEveTrackPropagator* rs) :
  TEveElementList(),
  fTitle(),
  fRnrStyle(rs),
  fRnrDaughters(kTRUE),
  fRnrCascadevtx(kTRUE),
  fRnrCascadepath(kTRUE),
  fBacColor(0),
  fMinRCut(0),
  fMaxRCut(100),
  fMinDaughterDCA(0),
  fMaxDaughterDCA(1),
  fMinPt(0),
  fMaxPt(20),
  fInvMassHyp(kXiMinus),
  fMinInvariantMass(1.0),
  fMaxInvariantMass(6.0)
{
  // Standard constructor.

  fChildClass = AliEveCascade::Class(); // override member from base TEveElementList

  Init();
  SetName(name);
}

//______________________________________________________________________________
void AliEveCascadeList::Init()
{
  // Initialize members needed for drawing operations.

  if (fRnrStyle== 0) fRnrStyle = new TEveTrackPropagator;
}

/******************************************************************************/

//______________________________________________________________________________
void AliEveCascadeList::MakeCascades()
{
  // Call MakeCascade() for all elements.

  for(List_i i=fChildren.begin(); i!=fChildren.end(); ++i) {
    ((AliEveCascade*)(*i))->MakeCascade();
  }
  gEve->Redraw3D();
}

/******************************************************************************/

//______________________________________________________________________________
void AliEveCascadeList::FilterByRadius(Float_t minR, Float_t maxR)
{
  // Select visibility of elements based on their axial radius.

  fMinRCut = minR;
  fMaxRCut = maxR;

  for(List_i i = fChildren.begin(); i != fChildren.end(); ++i)
  {
    AliEveCascade* cascade = (AliEveCascade*) *i;
    Float_t  rad = cascade->GetRadius();
    Bool_t  show = rad >= fMinRCut && rad <= fMaxRCut;
    cascade->SetRnrState(show);
  }
  ElementChanged();
  gEve->Redraw3D();
}

/******************************************************************************/

//______________________________________________________________________________
void AliEveCascadeList::FilterByDaughterDCA(Float_t minDaughterDCA, Float_t maxDaughterDCA)
{
  // Select visibility of elements based on the DCA between daughters.

  fMinDaughterDCA = minDaughterDCA;
  fMaxDaughterDCA = maxDaughterDCA;

  for(List_i i = fChildren.begin(); i != fChildren.end(); ++i)
  {
    AliEveCascade* cascade = (AliEveCascade*) *i;
    Float_t  dca = cascade->GetDaughterDCA();
    Bool_t  show = dca >= fMinDaughterDCA && dca <= fMaxDaughterDCA;
    cascade->SetRnrState(show);
  }
  ElementChanged();
  gEve->Redraw3D();
}

/******************************************************************************/

//______________________________________________________________________________
void AliEveCascadeList::FilterByPt(Float_t minPt, Float_t maxPt)
{
  // Select visibility of elements based on the Cascade pt.

  fMinPt = minPt;
  fMaxPt = maxPt;

  for(List_i i = fChildren.begin(); i != fChildren.end(); ++i)
  {
    AliEveCascade* cascade = (AliEveCascade*) *i;
    Float_t  pt = cascade->GetPt();
    Bool_t  show = pt >= fMinPt && pt <= fMaxPt;
    cascade->SetRnrState(show);
  }
  ElementChanged();
  gEve->Redraw3D();
}

/******************************************************************************/

//______________________________________________________________________________
void AliEveCascadeList::FilterByInvariantMass(Float_t minInvariantMass, Float_t maxInvariantMass, Int_t cascadePdgCodeHyp)
{
  // Select visibility of elements based on the Cascade invariant mass.

	fMinInvariantMass = minInvariantMass;
	fMaxInvariantMass = maxInvariantMass;

	for(List_i i = fChildren.begin(); i != fChildren.end(); ++i)
	{
		AliEveCascade* cascade = (AliEveCascade*) *i;
		Float_t  invMass = (Float_t)cascade->GetInvMass(cascadePdgCodeHyp);
		Bool_t   show    = invMass >= fMinInvariantMass && invMass <= fMaxInvariantMass;
		cascade->SetRnrState(show);
	}
	ElementChanged();
	gEve->Redraw3D();
}

 AliEveCascade.cxx:1
 AliEveCascade.cxx:2
 AliEveCascade.cxx:3
 AliEveCascade.cxx:4
 AliEveCascade.cxx:5
 AliEveCascade.cxx:6
 AliEveCascade.cxx:7
 AliEveCascade.cxx:8
 AliEveCascade.cxx:9
 AliEveCascade.cxx:10
 AliEveCascade.cxx:11
 AliEveCascade.cxx:12
 AliEveCascade.cxx:13
 AliEveCascade.cxx:14
 AliEveCascade.cxx:15
 AliEveCascade.cxx:16
 AliEveCascade.cxx:17
 AliEveCascade.cxx:18
 AliEveCascade.cxx:19
 AliEveCascade.cxx:20
 AliEveCascade.cxx:21
 AliEveCascade.cxx:22
 AliEveCascade.cxx:23
 AliEveCascade.cxx:24
 AliEveCascade.cxx:25
 AliEveCascade.cxx:26
 AliEveCascade.cxx:27
 AliEveCascade.cxx:28
 AliEveCascade.cxx:29
 AliEveCascade.cxx:30
 AliEveCascade.cxx:31
 AliEveCascade.cxx:32
 AliEveCascade.cxx:33
 AliEveCascade.cxx:34
 AliEveCascade.cxx:35
 AliEveCascade.cxx:36
 AliEveCascade.cxx:37
 AliEveCascade.cxx:38
 AliEveCascade.cxx:39
 AliEveCascade.cxx:40
 AliEveCascade.cxx:41
 AliEveCascade.cxx:42
 AliEveCascade.cxx:43
 AliEveCascade.cxx:44
 AliEveCascade.cxx:45
 AliEveCascade.cxx:46
 AliEveCascade.cxx:47
 AliEveCascade.cxx:48
 AliEveCascade.cxx:49
 AliEveCascade.cxx:50
 AliEveCascade.cxx:51
 AliEveCascade.cxx:52
 AliEveCascade.cxx:53
 AliEveCascade.cxx:54
 AliEveCascade.cxx:55
 AliEveCascade.cxx:56
 AliEveCascade.cxx:57
 AliEveCascade.cxx:58
 AliEveCascade.cxx:59
 AliEveCascade.cxx:60
 AliEveCascade.cxx:61
 AliEveCascade.cxx:62
 AliEveCascade.cxx:63
 AliEveCascade.cxx:64
 AliEveCascade.cxx:65
 AliEveCascade.cxx:66
 AliEveCascade.cxx:67
 AliEveCascade.cxx:68
 AliEveCascade.cxx:69
 AliEveCascade.cxx:70
 AliEveCascade.cxx:71
 AliEveCascade.cxx:72
 AliEveCascade.cxx:73
 AliEveCascade.cxx:74
 AliEveCascade.cxx:75
 AliEveCascade.cxx:76
 AliEveCascade.cxx:77
 AliEveCascade.cxx:78
 AliEveCascade.cxx:79
 AliEveCascade.cxx:80
 AliEveCascade.cxx:81
 AliEveCascade.cxx:82
 AliEveCascade.cxx:83
 AliEveCascade.cxx:84
 AliEveCascade.cxx:85
 AliEveCascade.cxx:86
 AliEveCascade.cxx:87
 AliEveCascade.cxx:88
 AliEveCascade.cxx:89
 AliEveCascade.cxx:90
 AliEveCascade.cxx:91
 AliEveCascade.cxx:92
 AliEveCascade.cxx:93
 AliEveCascade.cxx:94
 AliEveCascade.cxx:95
 AliEveCascade.cxx:96
 AliEveCascade.cxx:97
 AliEveCascade.cxx:98
 AliEveCascade.cxx:99
 AliEveCascade.cxx:100
 AliEveCascade.cxx:101
 AliEveCascade.cxx:102
 AliEveCascade.cxx:103
 AliEveCascade.cxx:104
 AliEveCascade.cxx:105
 AliEveCascade.cxx:106
 AliEveCascade.cxx:107
 AliEveCascade.cxx:108
 AliEveCascade.cxx:109
 AliEveCascade.cxx:110
 AliEveCascade.cxx:111
 AliEveCascade.cxx:112
 AliEveCascade.cxx:113
 AliEveCascade.cxx:114
 AliEveCascade.cxx:115
 AliEveCascade.cxx:116
 AliEveCascade.cxx:117
 AliEveCascade.cxx:118
 AliEveCascade.cxx:119
 AliEveCascade.cxx:120
 AliEveCascade.cxx:121
 AliEveCascade.cxx:122
 AliEveCascade.cxx:123
 AliEveCascade.cxx:124
 AliEveCascade.cxx:125
 AliEveCascade.cxx:126
 AliEveCascade.cxx:127
 AliEveCascade.cxx:128
 AliEveCascade.cxx:129
 AliEveCascade.cxx:130
 AliEveCascade.cxx:131
 AliEveCascade.cxx:132
 AliEveCascade.cxx:133
 AliEveCascade.cxx:134
 AliEveCascade.cxx:135
 AliEveCascade.cxx:136
 AliEveCascade.cxx:137
 AliEveCascade.cxx:138
 AliEveCascade.cxx:139
 AliEveCascade.cxx:140
 AliEveCascade.cxx:141
 AliEveCascade.cxx:142
 AliEveCascade.cxx:143
 AliEveCascade.cxx:144
 AliEveCascade.cxx:145
 AliEveCascade.cxx:146
 AliEveCascade.cxx:147
 AliEveCascade.cxx:148
 AliEveCascade.cxx:149
 AliEveCascade.cxx:150
 AliEveCascade.cxx:151
 AliEveCascade.cxx:152
 AliEveCascade.cxx:153
 AliEveCascade.cxx:154
 AliEveCascade.cxx:155
 AliEveCascade.cxx:156
 AliEveCascade.cxx:157
 AliEveCascade.cxx:158
 AliEveCascade.cxx:159
 AliEveCascade.cxx:160
 AliEveCascade.cxx:161
 AliEveCascade.cxx:162
 AliEveCascade.cxx:163
 AliEveCascade.cxx:164
 AliEveCascade.cxx:165
 AliEveCascade.cxx:166
 AliEveCascade.cxx:167
 AliEveCascade.cxx:168
 AliEveCascade.cxx:169
 AliEveCascade.cxx:170
 AliEveCascade.cxx:171
 AliEveCascade.cxx:172
 AliEveCascade.cxx:173
 AliEveCascade.cxx:174
 AliEveCascade.cxx:175
 AliEveCascade.cxx:176
 AliEveCascade.cxx:177
 AliEveCascade.cxx:178
 AliEveCascade.cxx:179
 AliEveCascade.cxx:180
 AliEveCascade.cxx:181
 AliEveCascade.cxx:182
 AliEveCascade.cxx:183
 AliEveCascade.cxx:184
 AliEveCascade.cxx:185
 AliEveCascade.cxx:186
 AliEveCascade.cxx:187
 AliEveCascade.cxx:188
 AliEveCascade.cxx:189
 AliEveCascade.cxx:190
 AliEveCascade.cxx:191
 AliEveCascade.cxx:192
 AliEveCascade.cxx:193
 AliEveCascade.cxx:194
 AliEveCascade.cxx:195
 AliEveCascade.cxx:196
 AliEveCascade.cxx:197
 AliEveCascade.cxx:198
 AliEveCascade.cxx:199
 AliEveCascade.cxx:200
 AliEveCascade.cxx:201
 AliEveCascade.cxx:202
 AliEveCascade.cxx:203
 AliEveCascade.cxx:204
 AliEveCascade.cxx:205
 AliEveCascade.cxx:206
 AliEveCascade.cxx:207
 AliEveCascade.cxx:208
 AliEveCascade.cxx:209
 AliEveCascade.cxx:210
 AliEveCascade.cxx:211
 AliEveCascade.cxx:212
 AliEveCascade.cxx:213
 AliEveCascade.cxx:214
 AliEveCascade.cxx:215
 AliEveCascade.cxx:216
 AliEveCascade.cxx:217
 AliEveCascade.cxx:218
 AliEveCascade.cxx:219
 AliEveCascade.cxx:220
 AliEveCascade.cxx:221
 AliEveCascade.cxx:222
 AliEveCascade.cxx:223
 AliEveCascade.cxx:224
 AliEveCascade.cxx:225
 AliEveCascade.cxx:226
 AliEveCascade.cxx:227
 AliEveCascade.cxx:228
 AliEveCascade.cxx:229
 AliEveCascade.cxx:230
 AliEveCascade.cxx:231
 AliEveCascade.cxx:232
 AliEveCascade.cxx:233
 AliEveCascade.cxx:234
 AliEveCascade.cxx:235
 AliEveCascade.cxx:236
 AliEveCascade.cxx:237
 AliEveCascade.cxx:238
 AliEveCascade.cxx:239
 AliEveCascade.cxx:240
 AliEveCascade.cxx:241
 AliEveCascade.cxx:242
 AliEveCascade.cxx:243
 AliEveCascade.cxx:244
 AliEveCascade.cxx:245
 AliEveCascade.cxx:246
 AliEveCascade.cxx:247
 AliEveCascade.cxx:248
 AliEveCascade.cxx:249
 AliEveCascade.cxx:250
 AliEveCascade.cxx:251
 AliEveCascade.cxx:252
 AliEveCascade.cxx:253
 AliEveCascade.cxx:254
 AliEveCascade.cxx:255
 AliEveCascade.cxx:256
 AliEveCascade.cxx:257
 AliEveCascade.cxx:258
 AliEveCascade.cxx:259
 AliEveCascade.cxx:260
 AliEveCascade.cxx:261
 AliEveCascade.cxx:262
 AliEveCascade.cxx:263
 AliEveCascade.cxx:264
 AliEveCascade.cxx:265
 AliEveCascade.cxx:266
 AliEveCascade.cxx:267
 AliEveCascade.cxx:268
 AliEveCascade.cxx:269
 AliEveCascade.cxx:270
 AliEveCascade.cxx:271
 AliEveCascade.cxx:272
 AliEveCascade.cxx:273
 AliEveCascade.cxx:274
 AliEveCascade.cxx:275
 AliEveCascade.cxx:276
 AliEveCascade.cxx:277
 AliEveCascade.cxx:278
 AliEveCascade.cxx:279
 AliEveCascade.cxx:280
 AliEveCascade.cxx:281
 AliEveCascade.cxx:282
 AliEveCascade.cxx:283
 AliEveCascade.cxx:284
 AliEveCascade.cxx:285
 AliEveCascade.cxx:286
 AliEveCascade.cxx:287
 AliEveCascade.cxx:288
 AliEveCascade.cxx:289
 AliEveCascade.cxx:290
 AliEveCascade.cxx:291
 AliEveCascade.cxx:292
 AliEveCascade.cxx:293
 AliEveCascade.cxx:294
 AliEveCascade.cxx:295
 AliEveCascade.cxx:296
 AliEveCascade.cxx:297
 AliEveCascade.cxx:298
 AliEveCascade.cxx:299
 AliEveCascade.cxx:300
 AliEveCascade.cxx:301
 AliEveCascade.cxx:302
 AliEveCascade.cxx:303
 AliEveCascade.cxx:304
 AliEveCascade.cxx:305
 AliEveCascade.cxx:306
 AliEveCascade.cxx:307
 AliEveCascade.cxx:308
 AliEveCascade.cxx:309
 AliEveCascade.cxx:310
 AliEveCascade.cxx:311
 AliEveCascade.cxx:312
 AliEveCascade.cxx:313
 AliEveCascade.cxx:314
 AliEveCascade.cxx:315
 AliEveCascade.cxx:316
 AliEveCascade.cxx:317
 AliEveCascade.cxx:318
 AliEveCascade.cxx:319
 AliEveCascade.cxx:320
 AliEveCascade.cxx:321
 AliEveCascade.cxx:322
 AliEveCascade.cxx:323
 AliEveCascade.cxx:324
 AliEveCascade.cxx:325
 AliEveCascade.cxx:326
 AliEveCascade.cxx:327
 AliEveCascade.cxx:328
 AliEveCascade.cxx:329
 AliEveCascade.cxx:330
 AliEveCascade.cxx:331
 AliEveCascade.cxx:332
 AliEveCascade.cxx:333
 AliEveCascade.cxx:334
 AliEveCascade.cxx:335
 AliEveCascade.cxx:336
 AliEveCascade.cxx:337
 AliEveCascade.cxx:338
 AliEveCascade.cxx:339
 AliEveCascade.cxx:340
 AliEveCascade.cxx:341
 AliEveCascade.cxx:342
 AliEveCascade.cxx:343
 AliEveCascade.cxx:344
 AliEveCascade.cxx:345
 AliEveCascade.cxx:346
 AliEveCascade.cxx:347
 AliEveCascade.cxx:348
 AliEveCascade.cxx:349
 AliEveCascade.cxx:350
 AliEveCascade.cxx:351
 AliEveCascade.cxx:352
 AliEveCascade.cxx:353
 AliEveCascade.cxx:354
 AliEveCascade.cxx:355
 AliEveCascade.cxx:356
 AliEveCascade.cxx:357
 AliEveCascade.cxx:358
 AliEveCascade.cxx:359
 AliEveCascade.cxx:360
 AliEveCascade.cxx:361
 AliEveCascade.cxx:362
 AliEveCascade.cxx:363
 AliEveCascade.cxx:364
 AliEveCascade.cxx:365
 AliEveCascade.cxx:366
 AliEveCascade.cxx:367
 AliEveCascade.cxx:368
 AliEveCascade.cxx:369
 AliEveCascade.cxx:370
 AliEveCascade.cxx:371
 AliEveCascade.cxx:372
 AliEveCascade.cxx:373
 AliEveCascade.cxx:374
 AliEveCascade.cxx:375
 AliEveCascade.cxx:376
 AliEveCascade.cxx:377
 AliEveCascade.cxx:378