ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/* $Id$ */

//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
//                            
//  Utility class to evaluate the material budget from
//  a given radius to the surface of an arbitrary cylinder
//  along radial directions from the centre:
// 
//   - radiation length
//   - Interaction length
//   - g/cm2
// 
//  Geantinos are shot in the bins in the fNtheta bins in theta
//  and fNphi bins in phi with specified rectangular limits.
//  The statistics are accumulated per
//    fRadMin < r < fRadMax    and  <0 < z < fZMax
//
//  To activate this option, you can do:
//      Root > gAlice.RunLego();
//  or  Root > .x menu.C  then select menu item "RunLego"
//  Note that when calling gAlice->RunLego, an optional list
//  of arguments may be specified.
//
//Begin_Html
/*
<img src="picts/alilego.gif">
*/
//End_Html
//
//////////////////////////////////////////////////////////////

#include "TClonesArray.h"
#include "TH2.h"
#include "TMath.h"
#include "TString.h"
#include "TVirtualMC.h"

#include "AliLog.h"
#include "AliDebugVolume.h"
#include "AliLego.h"
#include "AliLegoGenerator.h"
#include "AliMC.h"
#include "AliRun.h"

ClassImp(AliLego)

//_______________________________________________________________________
AliLego::AliLego():
  fGener(0),
  fTotRadl(0),
  fTotAbso(0),
  fTotGcm2(0),
  fHistRadl(0),
  fHistAbso(0),
  fHistGcm2(0),
  fHistReta(0),
  fRZR(0),
  fRZA(0),
  fRZG(0),
  fVolumesFwd(0),
  fVolumesBwd(0),
  fStepBack(0),
  fStepsBackward(0),
  fStepsForward(0),
  fErrorCondition(0),
  fDebug(0),
  fStopped(0)
{
  //
  // Default constructor
  //
}

//_______________________________________________________________________
AliLego::AliLego(const AliLego &lego):
  TNamed(lego),
  fGener(0),
  fTotRadl(0),
  fTotAbso(0),
  fTotGcm2(0),
  fHistRadl(0),
  fHistAbso(0),
  fHistGcm2(0),
  fHistReta(0),
  fRZR(0),
  fRZA(0),
  fRZG(0),
  fVolumesFwd(0),
  fVolumesBwd(0),
  fStepBack(0),
  fStepsBackward(0),
  fStepsForward(0),
  fErrorCondition(0),
  fDebug(0),
  fStopped(0)
{
  //
  // Copy constructor
  //
  lego.Copy(*this);
}


//_______________________________________________________________________
AliLego::AliLego(const char *title, Int_t ntheta, Float_t thetamin, 
                 Float_t thetamax, Int_t nphi, Float_t phimin, Float_t phimax,
                 Float_t rmin, Float_t rmax, Float_t zmax):
  TNamed("Lego Generator",title),
  fGener(0),
  fTotRadl(0),
  fTotAbso(0),
  fTotGcm2(0),
  fHistRadl(0),
  fHistAbso(0),
  fHistGcm2(0),
  fHistReta(0),
  fRZR(0),
  fRZA(0),
  fRZG(0),
  fVolumesFwd(0),
  fVolumesBwd(0),
  fStepBack(0),
  fStepsBackward(0),
  fStepsForward(0),
  fErrorCondition(0),
  fDebug(0),
  fStopped(0)
{
  //
  // specify the angular limits and the size of the rectangular box
  //
   fGener = new AliLegoGenerator(ntheta, thetamin, thetamax,
		       nphi, phimin, phimax, rmin, rmax, zmax);
   fHistRadl = new TH2F("hradl","Radiation length map",    
			ntheta,thetamin,thetamax,nphi,phimin,phimax);
   fHistAbso = new TH2F("habso","Interaction length map",  
			ntheta,thetamin,thetamax,nphi,phimin,phimax);
   fHistGcm2 = new TH2F("hgcm2","g/cm2 length map",        
			ntheta,thetamin,thetamax,nphi,phimin,phimax);
   fRZR      = new TH2F("rzR","Radiation length @ (r,z)",
			zmax,-zmax,zmax,(rmax-rmin),rmin,rmax);
   fRZR->SetXTitle("#it{z} [cm]");
   fRZR->SetYTitle("#it{r} [cm]");
   fRZA     = static_cast<TH2F*>(fRZR->Clone("rzA"));
   fRZA->SetTitle("Interaction length @ (r,z)");
   fRZG     = static_cast<TH2F*>(fRZR->Clone("rzG"));
   fRZG->SetTitle("g/cm^{2} @ (r,z)");
   
//
   fVolumesFwd     = new TClonesArray("AliDebugVolume",1000);
   fVolumesBwd     = new TClonesArray("AliDebugVolume",1000);
   fDebug          = AliDebugLevel();
}

//_______________________________________________________________________
AliLego::AliLego(const char *title, AliLegoGenerator* generator):
  TNamed("Lego Generator",title),
  fGener(0),
  fTotRadl(0),
  fTotAbso(0),
  fTotGcm2(0),
  fHistRadl(0),
  fHistAbso(0),
  fHistGcm2(0),
  fHistReta(0),
  fRZR(0),
  fRZA(0),
  fRZG(0),
  fVolumesFwd(0),
  fVolumesBwd(0),
  fStepBack(0),
  fStepsBackward(0),
  fStepsForward(0),
  fErrorCondition(0),
  fDebug(0),
  fStopped(0)
{
  //
  // specify the angular limits and the size of the rectangular box
  //
  fGener = generator;
  Float_t c1min, c1max, c2min, c2max;
  Int_t n1 = fGener->NCoor1();
  Int_t n2 = fGener->NCoor2();
  
  fGener->Coor1Range(c1min, c1max);
  fGener->Coor2Range(c2min, c2max);   
  
  fHistRadl = new TH2F("hradl","Radiation length map",    
                       n2, c2min, c2max, n1, c1min, c1max);
  fHistAbso = new TH2F("habso","Interaction length map",  
                       n2, c2min, c2max, n1, c1min, c1max);
  fHistGcm2 = new TH2F("hgcm2","g/cm2 length map",        
                       n2, c2min, c2max, n1, c1min, c1max);
  Double_t rmax = generator->RadMax();
  Double_t rmin = 0;
  Double_t zmax = generator->ZMax();
  fRZR      = new TH2F("rzR","Radiation length @ (r,z)",
		       2*zmax,-zmax,zmax,(rmax-rmin),rmin,rmax);
  fRZR->SetXTitle("#it{z} [cm]");
  fRZR->SetYTitle("#it{r} [cm]");
  fRZA     = static_cast<TH2F*>(fRZR->Clone("rzA"));
  fRZA->SetTitle("Interaction length @ (r,z)");
  fRZG     = static_cast<TH2F*>(fRZR->Clone("rzG"));
  fRZG->SetTitle("g/cm^{2} @ (r,z)");
  //
  //

  fVolumesFwd     = new TClonesArray("AliDebugVolume",1000);
  fVolumesBwd     = new TClonesArray("AliDebugVolume",1000);
  fDebug          = AliDebugLevel();
}

//_______________________________________________________________________
AliLego::~AliLego()
{
  //
  // Destructor
  //
  delete fHistRadl;
  delete fHistAbso;
  delete fHistGcm2;
  delete fGener;
  delete fVolumesFwd;
  delete fVolumesBwd;
}

//_______________________________________________________________________
void AliLego::BeginEvent()
{
  //
  // --- Set to 0 radiation length, absorption length and g/cm2 ---
  //
  fTotRadl = 0;
  fTotAbso = 0;
  fTotGcm2 = 0;
  fStopped = 0;
  
  if (fDebug) {
    if (fErrorCondition) ToAliDebug(1, DumpVolumes());
    fVolumesFwd->Delete();
    fVolumesBwd->Delete();
    fStepsForward    = 0;
    fStepsBackward   = 0;		  
    fErrorCondition  = 0;
    if (gAlice->GetMCApp()->GetCurrentTrackNumber() == 0) fStepBack = 0;
  }
}

//_______________________________________________________________________
void AliLego::FinishEvent()
{
  //
  // Finish the event and update the histos
  //
  Double_t c1, c2;
  c1 = fGener->CurCoor1();
  c2 = fGener->CurCoor2();
  fHistRadl->Fill(c2,c1,fTotRadl);
  fHistAbso->Fill(c2,c1,fTotAbso);
  fHistGcm2->Fill(c2,c1,fTotGcm2);
}

//_______________________________________________________________________
void AliLego::FinishRun()
{
  //
  // Store histograms in current Root file
  //
  fHistRadl->Write();
  fHistAbso->Write();
  fHistGcm2->Write();
  fRZR->Write();
  fRZA->Write();
  fRZG->Write();

  // Delete histograms from memory
  fHistRadl->Delete(); fHistRadl=0;
  fHistAbso->Delete(); fHistAbso=0;
  fHistGcm2->Delete(); fHistGcm2=0;
  //
  if (fErrorCondition) ToAliError(DumpVolumes());
}

//_______________________________________________________________________
void AliLego::Copy(TObject&) const
{
  //
  // Copy *this onto lego -- not implemented
  //
  AliFatal("Not implemented!");
}

//_______________________________________________________________________
void AliLego::StepManager() 
{
  //
  // called from AliRun::Stepmanager from gustep.
  // Accumulate the 3 parameters step by step
  //
    static Float_t t;
    Float_t a,z,dens,radl,absl;
    Int_t i, id, copy;
    const char* vol;
    static Float_t vect[3], dir[3];
    
    TString tmp1, tmp2;
    copy = 1;
    id  = TVirtualMC::GetMC()->CurrentVolID(copy);
    vol = TVirtualMC::GetMC()->VolName(id);
    Float_t step  = TVirtualMC::GetMC()->TrackStep();
    
    TLorentzVector pos, mom; 
    TVirtualMC::GetMC()->TrackPosition(pos);  
    TVirtualMC::GetMC()->TrackMomentum(mom);
    
    Int_t status = 0;
    if (TVirtualMC::GetMC()->IsTrackEntering()) status = 1;
    if (TVirtualMC::GetMC()->IsTrackExiting())  status = 2; 
  
    if (! fStepBack) {
    //      printf("\n volume %s %d", vol, status);      
    //
    // Normal Forward stepping
    //
	if (fDebug) {
//	    printf("\n steps fwd %d %s %d %f", fStepsForward, vol, fErrorCondition, step);	  
      
      //
      // store volume if different from previous
      //
	  
	    TClonesArray &lvols = *fVolumesFwd;
	    if (fStepsForward > 0) {
		AliDebugVolume* tmp = dynamic_cast<AliDebugVolume*>((*fVolumesFwd)[fStepsForward-1]);
		if (tmp && tmp->IsVEqual(vol, copy) && TVirtualMC::GetMC()->IsTrackEntering()) {
		    fStepsForward -= 2;
		    fVolumesFwd->RemoveAt(fStepsForward);
		    fVolumesFwd->RemoveAt(fStepsForward+1);		  
		}
	    }
	    
	    new(lvols[fStepsForward++]) 
		AliDebugVolume(vol,copy,step,pos[0], pos[1], pos[2], status);
	    
	} // Debug
	//
	// Get current material properties
	
	TVirtualMC::GetMC()->CurrentMaterial(a,z,dens,radl,absl);
	Double_t r = TMath::Sqrt(pos[0]*pos[0] +pos[1]*pos[1]);
	fRZR->Fill(pos[2], r, step/radl);
	fRZA->Fill(pos[2], r ,step/absl);
	fRZG->Fill(pos[2], r, step*dens);
	
	
	if (z < 1) return;

	// --- See if we have to stop now
	if (TMath::Abs(pos[2]) > TMath::Abs(fGener->ZMax())  || 
	    r > fGener->RadMax()) {
	    if (!TVirtualMC::GetMC()->IsNewTrack()) {
		// Not the first step, add past contribution
		if (!fStopped) {
		    if (absl) fTotAbso += t/absl;
		    if (radl) fTotRadl += t/radl;
		    fTotGcm2 += t*dens;
		}
		
//		printf("We will stop now %5d %13.3f !\n", fStopped, t);
//		printf("%13.3f %13.3f %13.3f %13.3f %13.3f %13.3f %13.3f %s %13.3f\n",
//		       pos[2], TMath::Sqrt(pos[0] * pos[0] + pos[1] * pos[1]), step, a, z, radl, absl, TVirtualMC::GetMC()->CurrentVolName(), fTotRadl);
		if (fDebug) {
		    //
		    //  generate "mirror" particle flying back
		    //
		    fStepsBackward = fStepsForward;
		    
		    Float_t pmom[3], orig[3];
		    Float_t polar[3] = {0.,0.,0.};
		    Int_t ntr;
		    pmom[0] = -dir[0];
		    pmom[1] = -dir[1];	   
		    pmom[2] = -dir[2];
		    orig[0] =  vect[0];
		    orig[1] =  vect[1];	   
		    orig[2] =  vect[2];
		    
		    gAlice->GetMCApp()->PushTrack(1, gAlice->GetMCApp()->GetCurrentTrackNumber(), 
						  0, pmom, orig, polar, 0., kPNoProcess, ntr);
		} // debug
		
	    } // not a new track !
	    
	    if (fDebug) fStepBack = 1;
	    fStopped = kTRUE;
	    TVirtualMC::GetMC()->StopTrack();
	    return;
	} // outside scoring region ?
	
	// --- See how long we have to go
	for(i=0;i<3;++i) {
	    vect[i]=pos[i];
	    dir[i]=mom[i];
	}
	
	t  = fGener->PropagateCylinder(vect,dir,fGener->RadMax(),fGener->ZMax());
	
	if(step) {
	    
	    if (absl) fTotAbso += step/absl;
	    if (radl) fTotRadl += step/radl;
	    fTotGcm2 += step*dens;
//	     printf("%13.3f %13.3f %13.3f %13.3f %13.3f %13.3f %13.3f %s %13.3f\n",
//	     pos[2],  TMath::Sqrt(pos[0] * pos[0] + pos[1] * pos[1]), step, a, z, radl, absl, TVirtualMC::GetMC()->CurrentVolName(), fTotRadl);
	}

    } else {
	if (fDebug) {
	    //
	    // Geometry debugging
	    // Fly back and compare volume sequence
	    //
	    TClonesArray &lvols = *fVolumesBwd;
	    if (fStepsBackward < fStepsForward) {
		AliDebugVolume* tmp = dynamic_cast<AliDebugVolume*>((*fVolumesBwd)[fStepsBackward]);
		if (tmp && tmp->IsVEqual(vol, copy) && TVirtualMC::GetMC()->IsTrackEntering()) {
		    fStepsBackward += 2;
		    fVolumesBwd->RemoveAt(fStepsBackward-1);
		    fVolumesBwd->RemoveAt(fStepsBackward-2);		  
		}
	    } 
	    
	    fStepsBackward--;
	    //	  printf("\n steps %d %s %d", fStepsBackward, vol, fErrorCondition);	  
	    if (fStepsBackward < 0) {
		TVirtualMC::GetMC()->StopTrack();
		fStepBack = 0;
		return;
	    }
	    
	    new(lvols[fStepsBackward]) AliDebugVolume(vol,copy,step,pos[0], pos[1], pos[2], status);
	    
	    AliDebugVolume* tmp = dynamic_cast<AliDebugVolume*>((*fVolumesFwd)[fStepsBackward]);
	    if (tmp && !(tmp->IsVEqual(vol, copy)) && (!fErrorCondition)) 
	    {
		AliWarning(Form("Problem at (x,y,z): %d %f %f %f, volumes: %s %s step: %f\n", 
				fStepsBackward, pos[0], pos[1], pos[2], tmp->GetName(), vol, step));
		fErrorCondition = 1;
	    } 
	} // Debug
    } // bwd/fwd
}

//_______________________________________________________________________
void AliLego::DumpVolumes()
{
  //
  // Dump volume sequence in case of error
  //
  printf("\n Dumping Volume Sequence:");
  printf("\n ==============================================");
  
  for (Int_t i = fStepsForward-1; i>=0; i--)
    {
      AliDebugVolume* tmp1 = dynamic_cast<AliDebugVolume*>((*fVolumesFwd)[i]);
      AliDebugVolume* tmp2 = dynamic_cast<AliDebugVolume*>((*fVolumesBwd)[i]);
      if (tmp1)
        printf("\n Volume Fwd: %3d: %5s (%3d) step: %12.5e (x,y,z) (%12.5e %12.5e %12.5e) status: %9s \n"
               , i, 
               tmp1->GetName(), tmp1->CopyNumber(), tmp1->Step(), 
               tmp1->X(), tmp1->Y(), tmp1->Z(), tmp1->Status());
      if (tmp2 && i>= fStepsBackward)
        printf("\n Volume Bwd: %3d: %5s (%3d) step: %12.5e (x,y,z) (%12.5e %12.5e %12.5e) status: %9s \n"
               , i, 
               tmp2->GetName(), tmp2->CopyNumber(), tmp2->Step(), 
               tmp2->X(), tmp2->Y(), tmp2->Z(), tmp2->Status());
      
      printf("\n ............................................................................\n");
    }
  printf("\n ==============================================\n");
}
 AliLego.cxx:1
 AliLego.cxx:2
 AliLego.cxx:3
 AliLego.cxx:4
 AliLego.cxx:5
 AliLego.cxx:6
 AliLego.cxx:7
 AliLego.cxx:8
 AliLego.cxx:9
 AliLego.cxx:10
 AliLego.cxx:11
 AliLego.cxx:12
 AliLego.cxx:13
 AliLego.cxx:14
 AliLego.cxx:15
 AliLego.cxx:16
 AliLego.cxx:17
 AliLego.cxx:18
 AliLego.cxx:19
 AliLego.cxx:20
 AliLego.cxx:21
 AliLego.cxx:22
 AliLego.cxx:23
 AliLego.cxx:24
 AliLego.cxx:25
 AliLego.cxx:26
 AliLego.cxx:27
 AliLego.cxx:28
 AliLego.cxx:29
 AliLego.cxx:30
 AliLego.cxx:31
 AliLego.cxx:32
 AliLego.cxx:33
 AliLego.cxx:34
 AliLego.cxx:35
 AliLego.cxx:36
 AliLego.cxx:37
 AliLego.cxx:38
 AliLego.cxx:39
 AliLego.cxx:40
 AliLego.cxx:41
 AliLego.cxx:42
 AliLego.cxx:43
 AliLego.cxx:44
 AliLego.cxx:45
 AliLego.cxx:46
 AliLego.cxx:47
 AliLego.cxx:48
 AliLego.cxx:49
 AliLego.cxx:50
 AliLego.cxx:51
 AliLego.cxx:52
 AliLego.cxx:53
 AliLego.cxx:54
 AliLego.cxx:55
 AliLego.cxx:56
 AliLego.cxx:57
 AliLego.cxx:58
 AliLego.cxx:59
 AliLego.cxx:60
 AliLego.cxx:61
 AliLego.cxx:62
 AliLego.cxx:63
 AliLego.cxx:64
 AliLego.cxx:65
 AliLego.cxx:66
 AliLego.cxx:67
 AliLego.cxx:68
 AliLego.cxx:69
 AliLego.cxx:70
 AliLego.cxx:71
 AliLego.cxx:72
 AliLego.cxx:73
 AliLego.cxx:74
 AliLego.cxx:75
 AliLego.cxx:76
 AliLego.cxx:77
 AliLego.cxx:78
 AliLego.cxx:79
 AliLego.cxx:80
 AliLego.cxx:81
 AliLego.cxx:82
 AliLego.cxx:83
 AliLego.cxx:84
 AliLego.cxx:85
 AliLego.cxx:86
 AliLego.cxx:87
 AliLego.cxx:88
 AliLego.cxx:89
 AliLego.cxx:90
 AliLego.cxx:91
 AliLego.cxx:92
 AliLego.cxx:93
 AliLego.cxx:94
 AliLego.cxx:95
 AliLego.cxx:96
 AliLego.cxx:97
 AliLego.cxx:98
 AliLego.cxx:99
 AliLego.cxx:100
 AliLego.cxx:101
 AliLego.cxx:102
 AliLego.cxx:103
 AliLego.cxx:104
 AliLego.cxx:105
 AliLego.cxx:106
 AliLego.cxx:107
 AliLego.cxx:108
 AliLego.cxx:109
 AliLego.cxx:110
 AliLego.cxx:111
 AliLego.cxx:112
 AliLego.cxx:113
 AliLego.cxx:114
 AliLego.cxx:115
 AliLego.cxx:116
 AliLego.cxx:117
 AliLego.cxx:118
 AliLego.cxx:119
 AliLego.cxx:120
 AliLego.cxx:121
 AliLego.cxx:122
 AliLego.cxx:123
 AliLego.cxx:124
 AliLego.cxx:125
 AliLego.cxx:126
 AliLego.cxx:127
 AliLego.cxx:128
 AliLego.cxx:129
 AliLego.cxx:130
 AliLego.cxx:131
 AliLego.cxx:132
 AliLego.cxx:133
 AliLego.cxx:134
 AliLego.cxx:135
 AliLego.cxx:136
 AliLego.cxx:137
 AliLego.cxx:138
 AliLego.cxx:139
 AliLego.cxx:140
 AliLego.cxx:141
 AliLego.cxx:142
 AliLego.cxx:143
 AliLego.cxx:144
 AliLego.cxx:145
 AliLego.cxx:146
 AliLego.cxx:147
 AliLego.cxx:148
 AliLego.cxx:149
 AliLego.cxx:150
 AliLego.cxx:151
 AliLego.cxx:152
 AliLego.cxx:153
 AliLego.cxx:154
 AliLego.cxx:155
 AliLego.cxx:156
 AliLego.cxx:157
 AliLego.cxx:158
 AliLego.cxx:159
 AliLego.cxx:160
 AliLego.cxx:161
 AliLego.cxx:162
 AliLego.cxx:163
 AliLego.cxx:164
 AliLego.cxx:165
 AliLego.cxx:166
 AliLego.cxx:167
 AliLego.cxx:168
 AliLego.cxx:169
 AliLego.cxx:170
 AliLego.cxx:171
 AliLego.cxx:172
 AliLego.cxx:173
 AliLego.cxx:174
 AliLego.cxx:175
 AliLego.cxx:176
 AliLego.cxx:177
 AliLego.cxx:178
 AliLego.cxx:179
 AliLego.cxx:180
 AliLego.cxx:181
 AliLego.cxx:182
 AliLego.cxx:183
 AliLego.cxx:184
 AliLego.cxx:185
 AliLego.cxx:186
 AliLego.cxx:187
 AliLego.cxx:188
 AliLego.cxx:189
 AliLego.cxx:190
 AliLego.cxx:191
 AliLego.cxx:192
 AliLego.cxx:193
 AliLego.cxx:194
 AliLego.cxx:195
 AliLego.cxx:196
 AliLego.cxx:197
 AliLego.cxx:198
 AliLego.cxx:199
 AliLego.cxx:200
 AliLego.cxx:201
 AliLego.cxx:202
 AliLego.cxx:203
 AliLego.cxx:204
 AliLego.cxx:205
 AliLego.cxx:206
 AliLego.cxx:207
 AliLego.cxx:208
 AliLego.cxx:209
 AliLego.cxx:210
 AliLego.cxx:211
 AliLego.cxx:212
 AliLego.cxx:213
 AliLego.cxx:214
 AliLego.cxx:215
 AliLego.cxx:216
 AliLego.cxx:217
 AliLego.cxx:218
 AliLego.cxx:219
 AliLego.cxx:220
 AliLego.cxx:221
 AliLego.cxx:222
 AliLego.cxx:223
 AliLego.cxx:224
 AliLego.cxx:225
 AliLego.cxx:226
 AliLego.cxx:227
 AliLego.cxx:228
 AliLego.cxx:229
 AliLego.cxx:230
 AliLego.cxx:231
 AliLego.cxx:232
 AliLego.cxx:233
 AliLego.cxx:234
 AliLego.cxx:235
 AliLego.cxx:236
 AliLego.cxx:237
 AliLego.cxx:238
 AliLego.cxx:239
 AliLego.cxx:240
 AliLego.cxx:241
 AliLego.cxx:242
 AliLego.cxx:243
 AliLego.cxx:244
 AliLego.cxx:245
 AliLego.cxx:246
 AliLego.cxx:247
 AliLego.cxx:248
 AliLego.cxx:249
 AliLego.cxx:250
 AliLego.cxx:251
 AliLego.cxx:252
 AliLego.cxx:253
 AliLego.cxx:254
 AliLego.cxx:255
 AliLego.cxx:256
 AliLego.cxx:257
 AliLego.cxx:258
 AliLego.cxx:259
 AliLego.cxx:260
 AliLego.cxx:261
 AliLego.cxx:262
 AliLego.cxx:263
 AliLego.cxx:264
 AliLego.cxx:265
 AliLego.cxx:266
 AliLego.cxx:267
 AliLego.cxx:268
 AliLego.cxx:269
 AliLego.cxx:270
 AliLego.cxx:271
 AliLego.cxx:272
 AliLego.cxx:273
 AliLego.cxx:274
 AliLego.cxx:275
 AliLego.cxx:276
 AliLego.cxx:277
 AliLego.cxx:278
 AliLego.cxx:279
 AliLego.cxx:280
 AliLego.cxx:281
 AliLego.cxx:282
 AliLego.cxx:283
 AliLego.cxx:284
 AliLego.cxx:285
 AliLego.cxx:286
 AliLego.cxx:287
 AliLego.cxx:288
 AliLego.cxx:289
 AliLego.cxx:290
 AliLego.cxx:291
 AliLego.cxx:292
 AliLego.cxx:293
 AliLego.cxx:294
 AliLego.cxx:295
 AliLego.cxx:296
 AliLego.cxx:297
 AliLego.cxx:298
 AliLego.cxx:299
 AliLego.cxx:300
 AliLego.cxx:301
 AliLego.cxx:302
 AliLego.cxx:303
 AliLego.cxx:304
 AliLego.cxx:305
 AliLego.cxx:306
 AliLego.cxx:307
 AliLego.cxx:308
 AliLego.cxx:309
 AliLego.cxx:310
 AliLego.cxx:311
 AliLego.cxx:312
 AliLego.cxx:313
 AliLego.cxx:314
 AliLego.cxx:315
 AliLego.cxx:316
 AliLego.cxx:317
 AliLego.cxx:318
 AliLego.cxx:319
 AliLego.cxx:320
 AliLego.cxx:321
 AliLego.cxx:322
 AliLego.cxx:323
 AliLego.cxx:324
 AliLego.cxx:325
 AliLego.cxx:326
 AliLego.cxx:327
 AliLego.cxx:328
 AliLego.cxx:329
 AliLego.cxx:330
 AliLego.cxx:331
 AliLego.cxx:332
 AliLego.cxx:333
 AliLego.cxx:334
 AliLego.cxx:335
 AliLego.cxx:336
 AliLego.cxx:337
 AliLego.cxx:338
 AliLego.cxx:339
 AliLego.cxx:340
 AliLego.cxx:341
 AliLego.cxx:342
 AliLego.cxx:343
 AliLego.cxx:344
 AliLego.cxx:345
 AliLego.cxx:346
 AliLego.cxx:347
 AliLego.cxx:348
 AliLego.cxx:349
 AliLego.cxx:350
 AliLego.cxx:351
 AliLego.cxx:352
 AliLego.cxx:353
 AliLego.cxx:354
 AliLego.cxx:355
 AliLego.cxx:356
 AliLego.cxx:357
 AliLego.cxx:358
 AliLego.cxx:359
 AliLego.cxx:360
 AliLego.cxx:361
 AliLego.cxx:362
 AliLego.cxx:363
 AliLego.cxx:364
 AliLego.cxx:365
 AliLego.cxx:366
 AliLego.cxx:367
 AliLego.cxx:368
 AliLego.cxx:369
 AliLego.cxx:370
 AliLego.cxx:371
 AliLego.cxx:372
 AliLego.cxx:373
 AliLego.cxx:374
 AliLego.cxx:375
 AliLego.cxx:376
 AliLego.cxx:377
 AliLego.cxx:378
 AliLego.cxx:379
 AliLego.cxx:380
 AliLego.cxx:381
 AliLego.cxx:382
 AliLego.cxx:383
 AliLego.cxx:384
 AliLego.cxx:385
 AliLego.cxx:386
 AliLego.cxx:387
 AliLego.cxx:388
 AliLego.cxx:389
 AliLego.cxx:390
 AliLego.cxx:391
 AliLego.cxx:392
 AliLego.cxx:393
 AliLego.cxx:394
 AliLego.cxx:395
 AliLego.cxx:396
 AliLego.cxx:397
 AliLego.cxx:398
 AliLego.cxx:399
 AliLego.cxx:400
 AliLego.cxx:401
 AliLego.cxx:402
 AliLego.cxx:403
 AliLego.cxx:404
 AliLego.cxx:405
 AliLego.cxx:406
 AliLego.cxx:407
 AliLego.cxx:408
 AliLego.cxx:409
 AliLego.cxx:410
 AliLego.cxx:411
 AliLego.cxx:412
 AliLego.cxx:413
 AliLego.cxx:414
 AliLego.cxx:415
 AliLego.cxx:416
 AliLego.cxx:417
 AliLego.cxx:418
 AliLego.cxx:419
 AliLego.cxx:420
 AliLego.cxx:421
 AliLego.cxx:422
 AliLego.cxx:423
 AliLego.cxx:424
 AliLego.cxx:425
 AliLego.cxx:426
 AliLego.cxx:427
 AliLego.cxx:428
 AliLego.cxx:429
 AliLego.cxx:430
 AliLego.cxx:431
 AliLego.cxx:432
 AliLego.cxx:433
 AliLego.cxx:434
 AliLego.cxx:435
 AliLego.cxx:436
 AliLego.cxx:437
 AliLego.cxx:438
 AliLego.cxx:439
 AliLego.cxx:440
 AliLego.cxx:441
 AliLego.cxx:442
 AliLego.cxx:443
 AliLego.cxx:444
 AliLego.cxx:445
 AliLego.cxx:446
 AliLego.cxx:447
 AliLego.cxx:448
 AliLego.cxx:449
 AliLego.cxx:450
 AliLego.cxx:451
 AliLego.cxx:452
 AliLego.cxx:453
 AliLego.cxx:454
 AliLego.cxx:455
 AliLego.cxx:456
 AliLego.cxx:457
 AliLego.cxx:458
 AliLego.cxx:459
 AliLego.cxx:460
 AliLego.cxx:461
 AliLego.cxx:462
 AliLego.cxx:463
 AliLego.cxx:464
 AliLego.cxx:465
 AliLego.cxx:466
 AliLego.cxx:467
 AliLego.cxx:468
 AliLego.cxx:469
 AliLego.cxx:470
 AliLego.cxx:471
 AliLego.cxx:472
 AliLego.cxx:473
 AliLego.cxx:474
 AliLego.cxx:475
 AliLego.cxx:476
 AliLego.cxx:477
 AliLego.cxx:478
 AliLego.cxx:479
 AliLego.cxx:480
 AliLego.cxx:481
 AliLego.cxx:482
 AliLego.cxx:483
 AliLego.cxx:484
 AliLego.cxx:485
 AliLego.cxx:486
 AliLego.cxx:487
 AliLego.cxx:488
 AliLego.cxx:489
 AliLego.cxx:490
 AliLego.cxx:491
 AliLego.cxx:492
 AliLego.cxx:493
 AliLego.cxx:494
 AliLego.cxx:495
 AliLego.cxx:496
 AliLego.cxx:497
 AliLego.cxx:498