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

//
//  Generator for slow nucleons in pA interactions. 
//  Source is modelled by a relativistic Maxwell distributions.
//  This class cooparates with AliCollisionGeometry if used inside AliGenCocktail.
//  In this case the number of slow nucleons is determined from the number of wounded nuclei
//  using a realisation of AliSlowNucleonModel.
//  Original code by  Ferenc Sikler  <sikler@rmki.kfki.hu>
// 

#include <TDatabasePDG.h>
#include <TPDGCode.h>
#include <TH2F.h>
#include <TH1F.h>
#include <TF1.h>
#include <TCanvas.h>
#include <TParticle.h>

#include "AliConst.h"
#include "AliCollisionGeometry.h"
#include "AliStack.h"
#include "AliRun.h"
#include "AliMC.h"
#include "AliGenSlowNucleons.h"
#include "AliSlowNucleonModel.h"

ClassImp(AliGenSlowNucleons)

    
AliGenSlowNucleons::AliGenSlowNucleons()
    :AliGenerator(-1),
     fCMS(0.),
     fMomentum(0.),
     fBeta(0.),
     fPmax (0.),
     fCharge(0),
     fProtonDirection(1.),
     fTemperatureG(0.), 
     fBetaSourceG(0.),
     fTemperatureB(0.),
     fBetaSourceB(0.),
     fNgp(0),
     fNgn(0),
     fNbp(0),
     fNbn(0),
     fDebug(0),
     fDebugHist1(0),
     fDebugHist2(0),
     fThetaDistribution(),
     fCosThetaGrayHist(),
     fCosTheta(),
     fBeamCrossingAngle(0.),
     fBeamDivergence(0.),
     fBeamDivEvent(0.),
     fSmearMode(2),
     fSlowNucleonModel(0)
{
// Default constructor
    fCollisionGeometry = 0;
}

AliGenSlowNucleons::AliGenSlowNucleons(Int_t npart)
    :AliGenerator(npart),
     fCMS(14000.),
     fMomentum(0.),
     fBeta(0.),
     fPmax (10.),
     fCharge(1),
     fProtonDirection(1.),
     fTemperatureG(0.05), 
     fBetaSourceG(0.05),
     fTemperatureB(0.005),
     fBetaSourceB(0.),
     fNgp(0),
     fNgn(0),
     fNbp(0),
     fNbn(0),
     fDebug(0),
     fDebugHist1(0),
     fDebugHist2(0),
     fThetaDistribution(),
     fCosThetaGrayHist(),
     fCosTheta(),
     fBeamCrossingAngle(0.),
     fBeamDivergence(0.),
     fBeamDivEvent(0.),
     fSmearMode(2),
     fSlowNucleonModel(new AliSlowNucleonModel())

{
// Constructor
    fName  = "SlowNucleons";
    fTitle = "Generator for gray particles in pA collisions";
    fCollisionGeometry = 0;
}

//____________________________________________________________
AliGenSlowNucleons::~AliGenSlowNucleons()
{
// Destructor
    delete  fSlowNucleonModel;
}

void AliGenSlowNucleons::SetProtonDirection(Float_t dir) {
// Set direction of the proton to change between pA (1) and Ap (-1)
  fProtonDirection = dir / TMath::Abs(dir);
}

void AliGenSlowNucleons::Init()
{
  //
  // Initialization
  //
    Double_t kMass  = TDatabasePDG::Instance()->GetParticle(kProton)->Mass();
    fMomentum = fCMS/2. * Float_t(fZTarget) / Float_t(fATarget);
    fBeta     = fMomentum / TMath::Sqrt(kMass * kMass + fMomentum * fMomentum);
    //printf("  fMomentum %f    fBeta %1.10f\n",fMomentum, fBeta);
    if (fDebug) {
	fDebugHist1 = new TH2F("DebugHist1", "nu vs N_slow", 100, 0., 100., 20, 0., 20.);
	fDebugHist2 = new TH2F("DebugHist2", "b  vs N_slow", 100, 0., 100., 15, 0., 15.);
    	fCosThetaGrayHist = new TH1F("fCosThetaGrayHist", "Gray particles angle", 100, -1., 1.);
    }
    //
    // non-uniform cos(theta) distribution
    //
    if(fThetaDistribution != 0) {
	fCosTheta = new TF1("fCosTheta",
			    "(2./3.14159265358979312)/(exp(2./3.14159265358979312)-exp(-2./3.14159265358979312))*exp(2.*x/3.14159265358979312)",
			    -1., 1.);
    }
   
    printf("\n  AliGenSlowNucleons: applying crossing angle %f mrad to slow nucleons\n",fBeamCrossingAngle*1000.);
}

void AliGenSlowNucleons::FinishRun()
{
// End of run action
// Show histogram for debugging if requested.
    if (fDebug) {
	TCanvas *c = new TCanvas("c","Canvas 1",400,10,600,700);
	c->Divide(2,1);
	c->cd(1);
	fDebugHist1->Draw("colz");
	c->cd(2);
	fDebugHist2->Draw();
	c->cd(3);
	fCosThetaGrayHist->Draw();
    }
}


void AliGenSlowNucleons::Generate()
{
  //
  // Generate one event
  //
  //
  // Communication with Gray Particle Model 
  // 
    if (fCollisionGeometry) {
	Float_t b   = fCollisionGeometry->ImpactParameter();
	//	Int_t  nn   = fCollisionGeometry->NN();
	//      Int_t  nwn  = fCollisionGeometry->NwN();
	//      Int_t  nnw  = fCollisionGeometry->NNw();
	//      Int_t  nwnw = fCollisionGeometry->NwNw();
	
	// (1) Sikler' model 
	if(fSmearMode==0) fSlowNucleonModel->GetNumberOfSlowNucleons(fCollisionGeometry, fNgp, fNgn, fNbp, fNbn);
	// (2) Model inspired on exp. data at lower energy (Gallio-Oppedisano)
	// --- smearing the Ncoll fron generator used as input 
	else if(fSmearMode==1) fSlowNucleonModel->GetNumberOfSlowNucleons2(fCollisionGeometry, fNgp, fNgn, fNbp, fNbn);
	// --- smearing directly Nslow 
	else if(fSmearMode==2) fSlowNucleonModel->GetNumberOfSlowNucleons2s(fCollisionGeometry, fNgp, fNgn, fNbp, fNbn);
	if (fDebug) {
	    //printf("Collision Geometry %f %d %d %d %d\n", b, nn, nwn, nnw, nwnw);
	    printf("Slow nucleons: %d grayp  %d grayn  %d blackp  %d blackn \n", fNgp, fNgn, fNbp, fNbn);
	    fDebugHist1->Fill(Float_t(fNgp + fNgn + fNbp + fNbn), fCollisionGeometry->NNw(), 1.);
	    fDebugHist2->Fill(Float_t(fNgp + fNgn + fNbp + fNbn), b, 1.);

	}
    }     

   //
    Float_t p[3] = {0., 0., 0.}, theta=0;
    Float_t origin[3] = {0., 0., 0.};
    Float_t time = 0.;
    Float_t polar [3] = {0., 0., 0.};    
    Int_t nt, i, j;
    Int_t kf;
     
    // Extracting 1 value per event for the divergence angle
    Double_t rvec = gRandom->Gaus(0.0, 1.0);
    fBeamDivEvent = fBeamDivergence * TMath::Abs(rvec);
    printf("\n  AliGenSlowNucleons: applying beam divergence %f mrad to slow nucleons\n",fBeamDivEvent*1000.);

    if(fVertexSmear == kPerEvent) {
	Vertex();
	for (j=0; j < 3; j++) origin[j] = fVertex[j];
	time = fTime;
    } // if kPerEvent
//
//  Gray protons
//
    fCharge = 1;
    kf = kProton;    
    for(i = 0; i < fNgp; i++) {
	GenerateSlow(fCharge, fTemperatureG, fBetaSourceG, p, theta);
	if (fDebug) fCosThetaGrayHist->Fill(TMath::Cos(theta));
	PushTrack(fTrackIt, -1, kf, p, origin, polar,
		 time, kPNoProcess, nt, 1.,-2);
	KeepTrack(nt);
	SetProcessID(nt,kGrayProcess);
    }
//
//  Gray neutrons
//
    fCharge = 0;
    kf = kNeutron;    
    for(i = 0; i < fNgn; i++) {
	GenerateSlow(fCharge, fTemperatureG, fBetaSourceG, p, theta);
	if (fDebug) fCosThetaGrayHist->Fill(TMath::Cos(theta));
	PushTrack(fTrackIt, -1, kf, p, origin, polar,
		 time, kPNoProcess, nt, 1.,-2);
	KeepTrack(nt);
	SetProcessID(nt,kGrayProcess);
    }
//
//  Black protons
//
    fCharge = 1;
    kf = kProton;    
    for(i = 0; i < fNbp; i++) {
	GenerateSlow(fCharge, fTemperatureB, fBetaSourceB, p, theta);
	PushTrack(fTrackIt, -1, kf, p, origin, polar,
		 time, kPNoProcess, nt, 1.,-1);
	KeepTrack(nt);
	SetProcessID(nt,kBlackProcess);
    }
//
//  Black neutrons
//
    fCharge = 0;
    kf = kNeutron;    
    for(i = 0; i < fNbn; i++) {
	GenerateSlow(fCharge, fTemperatureB, fBetaSourceB, p, theta);
	PushTrack(fTrackIt, -1, kf, p, origin, polar,
		 time, kPNoProcess, nt, 1.,-1);
	KeepTrack(nt);
	SetProcessID(nt,kBlackProcess);
    }
}




void AliGenSlowNucleons::GenerateSlow(Int_t charge, Double_t T, 
	Double_t beta, Float_t* q, Float_t &theta)

{
/* 
   Emit a slow nucleon with "temperature" T [GeV], 
   from a source moving with velocity beta         
   Three-momentum [GeV/c] is given back in q[3]    
*/

 //printf("Generating slow nuc. with: charge %d. temp. %1.4f, beta %f \n",charge,T,beta);
 
 Double_t m, pmax, p, f, phi;
 TDatabasePDG * pdg = TDatabasePDG::Instance();
 const Double_t kMassProton  = pdg->GetParticle(kProton) ->Mass();
 const Double_t kMassNeutron = pdg->GetParticle(kNeutron)->Mass();
 
 /* Select nucleon type */
 if(charge == 0) m = kMassNeutron;
 else m = kMassProton;

 /* Momentum at maximum of Maxwell-distribution */

 pmax = TMath::Sqrt(2*T*(T+TMath::Sqrt(T*T+m*m)));

 /* Try until proper momentum                                  */
 /* for lack of primitive function of the Maxwell-distribution */
 /* a brute force trial-accept loop, normalized at pmax        */

 do
 {
     p = Rndm() * fPmax;
     f = Maxwell(m, p, T) / Maxwell(m , pmax, T);
 }
 while(f < Rndm());

 /* Spherical symmetric emission for black particles (beta=0)*/
 if(beta==0 || fThetaDistribution==0) theta = TMath::ACos(2. * Rndm() - 1.);
 /* cos theta distributed according to experimental results for gray particles (beta=0.05)*/
 else if(fThetaDistribution!=0){
   Double_t costheta = fCosTheta->GetRandom();
   theta = TMath::ACos(costheta);
 }
 //
 phi   = 2. * TMath::Pi() * Rndm();


 /* Determine momentum components in system of the moving source */
 q[0] = p * TMath::Sin(theta) * TMath::Cos(phi);
 q[1] = p * TMath::Sin(theta) * TMath::Sin(phi);
 q[2] = p * TMath::Cos(theta);
 //if(fDebug==1) printf("\n Momentum in RS of the moving source: p = (%f, %f, %f)\n",q[0],q[1],q[2]);


 /* Transform to system of the target nucleus                             */
 /* beta is passed as negative, because the gray nucleons are slowed down */
 Lorentz(m, -beta, q);
 //if(fDebug==1) printf(" Momentum in RS of the target nucleus: p = (%f, %f, %f)\n",q[0],q[1],q[2]);

 /* Transform to laboratory system */
 Lorentz(m, fBeta, q);
 q[2] *= fProtonDirection; 
 if(fDebug==1)printf("\n Momentum after LHC boost: p = (%f, %f, %f)\n",q[0],q[1],q[2]);
 
 if(fBeamCrossingAngle>0.) BeamCrossDivergence(1, q); // applying crossing angle
 if(fBeamDivergence>0.) BeamCrossDivergence(2, q);    // applying divergence
 
}

Double_t AliGenSlowNucleons::Maxwell(Double_t m, Double_t p, Double_t T)
{
/* Relativistic Maxwell-distribution */
    Double_t ekin;
    ekin = TMath::Sqrt(p*p+m*m)-m;
    return (p*p * exp(-ekin/T));
}


//_____________________________________________________________________________
void AliGenSlowNucleons::Lorentz(Double_t m, Double_t beta, Float_t* q)
{
/* Lorentz transform in the direction of q[2] */
 
    Double_t gamma  = 1./TMath::Sqrt((1.-beta)*(1.+beta)); 
    Double_t energy = TMath::Sqrt(m*m + q[0]*q[0] + q[1]*q[1] + q[2]*q[2]);
    q[2] = gamma * (q[2] + beta*energy);
    //printf(" \t beta %1.10f gamma %f energy %f -> p_z = %f\n",beta, gamma, energy,q[2]);
}

//_____________________________________________________________________________
void AliGenSlowNucleons::BeamCrossDivergence(Int_t iwhat, Float_t *pLab)
{
  // Applying beam divergence and crossing angle
  //
  Double_t pmod = TMath::Sqrt(pLab[0]*pLab[0]+pLab[1]*pLab[1]+pLab[2]*pLab[2]);

  Double_t tetdiv = 0.;
  Double_t fidiv = 0.;
  if(iwhat==1){
    tetdiv = fBeamCrossingAngle;
    fidiv = k2PI/4.;
  }
  else if(iwhat==2){
    tetdiv = fBeamDivEvent;
    fidiv = (gRandom->Rndm())*k2PI;
  }

  Double_t tetpart = TMath::ATan2(TMath::Sqrt(pLab[0]*pLab[0]+pLab[1]*pLab[1]), pLab[2]);
  Double_t fipart=0.;
  if(TMath::Abs(pLab[1])>0. || TMath::Abs(pLab[0])>0.) fipart = TMath::ATan2(pLab[1], pLab[0]);
  if(fipart<0.) {fipart = fipart+k2PI;}
  tetdiv = tetdiv*kRaddeg;
  fidiv = fidiv*kRaddeg;
  tetpart = tetpart*kRaddeg;
  fipart = fipart*kRaddeg;
  
  Double_t angleSum[2]={0., 0.};
  AddAngle(tetpart,fipart,tetdiv,fidiv,angleSum);
  
  Double_t tetsum = angleSum[0];
  Double_t fisum  = angleSum[1];
  //printf("tetpart %f fipart %f tetdiv %f fidiv %f angleSum %f %f\n",tetpart,fipart,tetdiv,fidiv,angleSum[0],angleSum[1]);
  tetsum = tetsum*kDegrad;
  fisum = fisum*kDegrad;
  
  pLab[0] = pmod*TMath::Sin(tetsum)*TMath::Cos(fisum);
  pLab[1] = pmod*TMath::Sin(tetsum)*TMath::Sin(fisum);
  pLab[2] = pmod*TMath::Cos(tetsum);
  if(fDebug==1){
    if(iwhat==1) printf(" Beam crossing angle %f mrad ", fBeamCrossingAngle*1000.);
    else if(iwhat==2) printf(" Beam divergence %f mrad ", fBeamDivEvent*1000.);
    printf("  p = (%f, %f, %f)\n",pLab[0],pLab[1],pLab[2]);
  }
}
  
//_____________________________________________________________________________
void  AliGenSlowNucleons::AddAngle(Double_t theta1, Double_t phi1, 
	Double_t theta2, Double_t phi2, Double_t *angleSum)
{ 
  // Calculating the sum of 2 angles  
  Double_t temp = -1.;
  Double_t conv = 180./TMath::ACos(temp);
  
  Double_t ct1 = TMath::Cos(theta1/conv);
  Double_t st1 = TMath::Sin(theta1/conv);
  Double_t cp1 = TMath::Cos(phi1/conv);
  Double_t sp1 = TMath::Sin(phi1/conv);
  Double_t ct2 = TMath::Cos(theta2/conv);
  Double_t st2 = TMath::Sin(theta2/conv);
  Double_t cp2 = TMath::Cos(phi2/conv);
  Double_t sp2 = TMath::Sin(phi2/conv);
  Double_t cx = ct1*cp1*st2*cp2+st1*cp1*ct2-sp1*st2*sp2;
  Double_t cy = ct1*sp1*st2*cp2+st1*sp1*ct2+cp1*st2*sp2;
  Double_t cz = ct1*ct2-st1*st2*cp2;
  
  Double_t rtetsum = TMath::ACos(cz);
  Double_t tetsum = conv*rtetsum;
  if(TMath::Abs(tetsum)<1e-4 || tetsum==180.) return;

  temp = cx/TMath::Sin(rtetsum);
  if(temp>1.) temp=1.;
  if(temp<-1.) temp=-1.;
  Double_t fisum = conv*TMath::ACos(temp);
  if(cy<0) {fisum = 360.-fisum;}
  
  angleSum[0] = tetsum;
  angleSum[1] = fisum;
}  

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