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$ */

// Read beam halo background particles from a boundary source
// Boundary source is in the LHCb format http://www.hep.manchester.ac.uk/u/robert/LHC_backgrounds/Note-MIBStudies.pdf
// and has been provided by Robert Appleby
// Author: andreas.morsch@cern.ch


#include <stdlib.h>

#include <TDatabasePDG.h>
#include <TCanvas.h>
#include <TGraph.h>
#include <TPDGCode.h>
#include <TSystem.h>

#include "AliGenHalo.h"
#include "AliGenEventHeader.h"
#include "AliRun.h"
#include "AliLog.h"

ClassImp(AliGenHalo)

AliGenHalo::AliGenHalo()
    :AliGenerator(-1), 
     fFile(0),
     fFileName(0),
     fSide(1),
     fRunPeriod(kY3D90),
     fTimePerEvent(1.e-4),
     fNskip(0),
     fZ1(0),
     fZ2(0),
     fG1(0),
     fG2(0),
     fGPASize(0),
     fLossID(0),   
     fLossA(0),   
     fPdg(0),     
     fLossT0(0),
     fLossZ(0), 
     fLossW(0), 
     fXS(0),    
     fYS(0),    
     fZS(0),    
     fDX(0),    
     fDY(0),    
     fEkin(0),  
     fTS(0),    
     fWS(0)     
{
// Constructor
    
    fName  = "Halo";
    fTitle = "Halo from LHC Beam";
//
//  Read all particles
    fNpart = -1;
    SetAnalog(0);
}

AliGenHalo::AliGenHalo(Int_t npart)
    :AliGenerator(npart),
     fFile(0),
     fFileName(0),
     fSide(1),
     fRunPeriod(kY3D90),
     fTimePerEvent(1.e-4),
     fNskip(0),
     fZ1(0),
     fZ2(0),
     fG1(0),
     fG2(0),
     fGPASize(0),
     fLossID(0),   
     fLossA(0),   
     fPdg(0),     
     fLossT0(0),
     fLossZ(0), 
     fLossW(0), 
     fXS(0),    
     fYS(0),    
     fZS(0),    
     fDX(0),    
     fDY(0),    
     fEkin(0),  
     fTS(0),    
     fWS(0)     
{
// Constructor
    fName = "Halo";
    fTitle= "Halo from LHC Beam";
//
    fNpart   = npart;
//
    SetAnalog(0);
}

//____________________________________________________________
AliGenHalo::~AliGenHalo()
{
// Destructor
}

//____________________________________________________________
void AliGenHalo::Init() 
{
// Initialisation
    fFile = fopen(fFileName,"r");
    Int_t ir = 0;
    
    
    if (fFile) {
	printf("\n File %s opened for reading, %p ! \n ",  fFileName.Data(), (void*)fFile);
    } else {
	printf("\n Opening of file %s failed,  %p ! \n ",  fFileName.Data(), (void*)fFile);
	return;
    }

    if (fNskip > 0) {
      // Skip the first fNskip events
      SkipEvents();
    }
//
//
//
//    Read file with gas pressure values
    char *name = 0;
    if (fRunPeriod < 5) {
	name = gSystem->ExpandPathName("$(ALICE_ROOT)/LHC/gasPressure.dat" );
	fGPASize = 21;
	fG1 = new Float_t[fGPASize];
	fG2 = new Float_t[fGPASize];
	fZ1 = new Float_t[fGPASize];
	fZ2 = new Float_t[fGPASize];
    } else if (fRunPeriod == 5) {
	name = gSystem->ExpandPathName("$(ALICE_ROOT)/LHC/pressure_2003_startup.dat");
	fGPASize = 18853;
	fG1 = new Float_t[fGPASize];
	fZ1 = new Float_t[fGPASize];
    } else if (fRunPeriod ==6) {
	name = gSystem->ExpandPathName("$(ALICE_ROOT)/LHC/pressure_2003_conditioned.dat");
	fGPASize = 12719;
	fG1 = new Float_t[fGPASize];
	fZ1 = new Float_t[fGPASize];
    } else {
	Fatal("Init()", "No gas pressure file for given run period !");
    }

    
    FILE* file = 0;
    if (name) file = fopen(name, "r");
    if (!file) {
	AliError("No gas pressure file");
	return;
    }
    
    Float_t z;
    Int_t i;
    Float_t p[5];    

    const Float_t kCrossSection = 0.094e-28;      // m^2
    const Float_t kFlux         = 1.e11 / 25.e-9; // protons/s
    Float_t pFlux[5] = {0.2, 0.2, 0.3, 0.3, 1.0};

    if (fRunPeriod < 5) {
//
//  Ring 1   
// 

	for (i = 0; i < fGPASize; i++)
	{
	    ir = fscanf(file, "%f %f %f %f %f %f", &z, &p[0], &p[1], &p[2] , &p[3], &p[4]);
	    if (ir == 0) break;
	    
	    fG1[i] = p[fRunPeriod];
	    
	    if (i > 0) {
		fZ1[i] = fZ1[i-1] + z;
	    } else {
		fZ1[i] = 20.;
	    }
	}
//
// Ring 2
//
	for (i = 0; i < fGPASize; i++)
	{
	    ir = fscanf(file, "%f %f %f %f %f %f", &z, &p[0], &p[1], &p[2] , &p[3], &p[4]);
	    if (ir == 0) break;

	    fG2[i] = p[fRunPeriod];
	    if (i > 0) {
		fZ2[i] = fZ2[i-1] + z;
	    } else {
		fZ2[i] = 20.;
	    }
	}
//
// Interaction rates
//
	for (i = 0; i < fGPASize; i++)  
	{
	    fG1[i] = fG1[i] * kCrossSection * pFlux[fRunPeriod] * kFlux; // 1/m/s 
	    fG2[i] = fG2[i] * kCrossSection * pFlux[fRunPeriod] * kFlux; // 1/m/s
	}

    } else {
	for (i = 0; i < fGPASize; i++) 
	{
	    ir = fscanf(file, "%f %e %e %e %e %e", &z, &p[0], &p[1], &p[2], &p[3], &p[4]);
	    if (ir == 0) break;
	    z /= 1000.;
	    fG1[i] = p[4] * kCrossSection * kFlux;             // 1/m/s
	    // 1/3 of nominal intensity at startup
	    if (fRunPeriod ==  kLHCPR674Startup) fG1[i] /= 3.;
	    fZ1[i] = z;
	}
    }
    


    
//
//  Transform into interaction rates
//


    

    Float_t sum1 = 0.;
    Float_t sum2 = 0.;
    
    for (Int_t iz = 0; iz < 300; iz++) {
	Float_t zpos = 20. + iz * 1.;
	zpos *= 100;
	Float_t wgt1 = GasPressureWeight( zpos);
	Float_t wgt2 = GasPressureWeight(-zpos);
	sum1 += wgt1;
	sum2 += wgt2;
    }
    sum1/=250.;
    sum2/=250.;
    printf("\n %f %f \n \n", sum1, sum2);
    delete file;
}

//____________________________________________________________
void AliGenHalo::Generate()
{
// Generate by reading particles from input file
 
  Float_t polar[3]= {0., 0., 0.};
  Float_t origin[3];
  Float_t p[3], p0;
  Float_t tz, txy;
  Float_t mass;
  //
  Int_t nt;
  static Bool_t first = kTRUE;
  static Int_t  oldID = -1;
//

  if (first && (fNskip == 0)) ReadNextParticle();
  first = kFALSE;
  oldID = fLossID;
  Int_t np = 0;
  
  while(1) {
      // Push particle to stack
      mass = TDatabasePDG::Instance()->GetParticle(fPdg)->Mass();
      p0  = TMath::Sqrt(fEkin * fEkin + 2. * mass * fEkin);
      txy = TMath::Sqrt(fDX * fDX + fDY * fDY);
      if (txy > 1.) {
	  tz = 0.;
      } else {
	  tz = - TMath::Sqrt(1. - txy);
      }
 
      p[0] =  p0 * fDX;
      p[1] =  p0 * fDY;
      p[2] =  p0 * tz;

      origin[0] = fXS;
      origin[1] = fYS;
      origin[2] = 1950.;

      PushTrack(fTrackIt , -1, fPdg , p, origin, polar, fTS - 1950./2.9979e10, kPNoProcess, nt, fWS);
      np++;
      Int_t nc = ReadNextParticle();
      
      if (fLossID != oldID || nc == 0) {
	  oldID = fLossID;
	  break;
      }
  }

  SetHighWaterMark(nt);
  AliGenEventHeader* header = new AliGenEventHeader("HALO");
  header->SetNProduced(np);
  // Passes header either to the container or to gAlice
  if (fContainer) {
      header->SetName(fName);
      fContainer->AddHeader(header);
  } else {
      gAlice->SetGenEventHeader(header);	
  }
}


Float_t AliGenHalo::GasPressureWeight(Float_t zPrimary)
{
//
// Return z-dependent gasspressure weight = interaction rate [1/m/s].
//
    Float_t weight = 0.;
    zPrimary /= 100.;        // m
    if (fRunPeriod < 5) {
	Float_t zAbs = TMath::Abs(zPrimary);
	if (zPrimary > 0.) 
	{
	    if (zAbs > fZ1[20]) {
		weight = 2.e4;
	    } else {
		for (Int_t i = 1; i < 21; i++) {
		    if (zAbs < fZ1[i]) {
			weight = fG1[i];
			break;
		    }
		}
	    }
	} else {
	    if (zAbs > fZ2[20]) {
		weight = 2.e4;
	    } else {
		for (Int_t i = 1; i < 21; i++) {
		    if (zAbs < fZ2[i]) {
		    weight = fG2[i];
		    break;
		    }
		}
	    }
	}
    } else {
	Int_t index = TMath::BinarySearch(fGPASize, fZ1, zPrimary);
	weight = fG1[index];
    }
    return weight;
}

void AliGenHalo::Draw(Option_t *)
{
// Draws the gas pressure distribution
    Float_t z[400];
    Float_t p[400];
    
    for (Int_t i = 0; i < 400; i++)
    {
	z[i] = -20000. + Float_t(i) * 100;
	p[i] = GasPressureWeight(z[i]);
    }
    
    TGraph*  gr = new TGraph(400, z, p);   
    TCanvas* c1 = new TCanvas("c1","Canvas 1",400,10,600,700);
    c1->cd();
    gr->Draw("AL");
}

Int_t AliGenHalo::ReadNextParticle()
{
    // Read the next particle from the file
    Int_t ncols = fscanf(fFile,"%d %f %f %d %f %d %f %f %f %f %f %f %f %f",
		   &fLossID, &fLossT0, &fLossZ, &fLossA, &fLossW, &fPdg, &fXS, &fYS, &fZS, &fDX, &fDY, &fEkin, &fTS, &fWS);
    fLossZ /= 10.;
    fXS    /= 10.;
    fYS    /= 10.; 
    fZS    /= 10.;   
    fTS    *= 1.e-9;
    return (ncols);
}

void AliGenHalo::SkipEvents()
{
  //
  // Skip the first fNskip events
  Int_t skip = fNskip;
  Int_t oldID = -1;

  while (skip >= 0)
    {
      ReadNextParticle();
      if (oldID != fLossID) {
	oldID = fLossID;
	skip--;
      }
    } 
}
void AliGenHalo::CountEvents()
{
    // Count total number of events
    Int_t nev = 0;
    Int_t oldID = -1;
    Int_t nc = 1;
    while (nc != -1)
    {
	nc = ReadNextParticle();
	if (oldID != fLossID) {
	    oldID = fLossID;
	    nev++;
	    printf("Number of events %10d %10d \n", nev, oldID);
	}
    }


    rewind(fFile);
}


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