ROOT logo
/**************************************************************************
 * Copyright(c) 2009-2010, 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.                  *
 **************************************************************************/

//////////////////////////////////////////////////////////////////////////
// Afterburner to generate (anti)deuterons simulating coalescence of
// (anti)nucleons as in A. J. Baltz et al., Phys. lett B 325(1994)7.
// If the nucleon generator does not provide a spatial description of 
// the source the afterburner can provide one.
//
// There two options for the source: a thermal picture where all nucleons
// are placed randomly and homogeneously in an spherical volume, or
// an expansion one where they are projected onto its surface.
//
// An (anti)deuteron will form if there is a pair of (anti)proton-(anti)neutron
// with momentum difference less than ~ 300MeV and relative distance less than
// ~ 2.1fm. Only 3/4 of these clusters are accepted due to the deuteron spin.
//
// When there are more than one pair fulfilling the coalescence conditions,
// the selected pair can be the one with the first partner, with
// the lowest relative momentum, the lowest relative distance or both.
//////////////////////////////////////////////////////////////////////////

// Author: Eulogio Serradilla <eulogio.serradilla@ciemat.es>,
//         Arturo Menchaca <menchaca@fisica.unam.mx>
//

#include "Riostream.h"
#include "TParticle.h"
#include "AliStack.h"
#include "AliRun.h"
#include "TMath.h"
#include "TMCProcess.h"
#include "TList.h"
#include "TVector3.h"
#include "AliMC.h"
#include "TArrayF.h"
#include "AliCollisionGeometry.h"
#include "AliGenCocktailEventHeader.h"
#include "AliGenCocktailEntry.h"
#include "AliGenCocktailAfterBurner.h"
#include "AliGenDeuteron.h"
#include "AliLog.h"

ClassImp(AliGenDeuteron)

AliGenDeuteron::AliGenDeuteron(Int_t sign, Double_t pmax, Double_t rmax, Int_t cluster)
 :fSign(1)
 ,fPmax(pmax)
 ,fRmax(rmax)
 ,fSpinProb(1)
 ,fClusterType(cluster)
 ,fModel(0)
 ,fTimeLength(2.5)
 ,fB(0)
 ,fR(0)
 ,fPsiR(0)
 ,fCurStack(0)
{
//
// constructor
//
	fSign = sign > 0 ? 1:-1;
	
}

AliGenDeuteron::~AliGenDeuteron()
{
//
// Default destructor
//
}

void AliGenDeuteron::Init()
{
//
// Standard AliGenerator initializer
//
}

void AliGenDeuteron::Generate()
{
//
// Look for coalescence of (anti)nucleons in the nucleon source
// provided by the generator cocktail
//
	AliInfo(Form("sign: %d, Pmax: %g GeV/c, Rmax: %g fm, cluster: %d",fSign, fPmax, fRmax, fClusterType));
	if(fModel!=kNone) AliInfo(Form("model: %d, time: %g fm/c", fModel, fTimeLength));
	
	AliGenCocktailAfterBurner* gener = (AliGenCocktailAfterBurner*)gAlice->GetMCApp()->Generator();
	
	// find nuclear radius, only for first generator and projectile=target
	Bool_t collisionGeometry=0;
	if(fModel != kNone && gener->FirstGenerator()->Generator()->ProvidesCollisionGeometry())
	{
		TString name;
		Int_t ap, zp, at, zt;
		gener->FirstGenerator()->Generator()->GetProjectile(name,ap,zp);
		gener->FirstGenerator()->Generator()->GetTarget(name,at,zt);
		if(ap != at) AliWarning("projectile and target have different size");
		fR = 1.29*TMath::Power(at, 1./3.);
		collisionGeometry = 1;
	}
	
	for(Int_t ns = 0; ns < gener->GetNumberOfEvents(); ++ns)
	{
		gener->SetActiveEventNumber(ns);
		
		if(fModel != kNone && collisionGeometry)
		{
			fPsiR = (gener->GetCollisionGeometry(ns))->ReactionPlaneAngle();
			fB = (gener->GetCollisionGeometry(ns))->ImpactParameter();
			
			if(fB >= 2.*fR) continue; // no collision
		}
		
		fCurStack = gener->GetStack(ns);
		if(!fCurStack)
		{
			AliWarning("no event stack");
			return;
		}
		
		TList* protons = new TList();
		protons->SetOwner(kFALSE);
		TList* neutrons = new TList();
		neutrons->SetOwner(kFALSE);
		
		// particles produced by the generator
		for (Int_t i=0; i < fCurStack->GetNprimary(); ++i)
		{
			TParticle* iParticle = fCurStack->Particle(i);
			
			if(iParticle->GetStatusCode() != 1) continue;
			
			Int_t pdgCode = iParticle->GetPdgCode();
			if(pdgCode == fSign*2212)// (anti)proton
			{
				FixProductionVertex(iParticle);
				protons->Add(iParticle);
			}
			else if(pdgCode == fSign*2112) // (anti)neutron
			{
				FixProductionVertex(iParticle);
				neutrons->Add(iParticle);
			}
		}
		
		// look for clusters
		if(fClusterType==kFirstPartner)
		{
			FirstPartner(protons, neutrons);
		}
		else
		{
			WeightMatrix(protons, neutrons);
		}
		
		protons->Clear("nodelete");
		neutrons->Clear("nodelete");
		
		delete protons;
		delete neutrons;
	}
	
	AliInfo("DONE");
}

Double_t AliGenDeuteron::GetCoalescenceProbability(const TParticle* nucleon1, const TParticle* nucleon2) const
{
//
// Coalescence conditions as in
// A. J. Baltz et al., Phys. lett B 325(1994)7
//
// returns < 0 if coalescence is not possible
// otherwise returns a coalescence probability
//
	const Double_t kProtonMass  = 0.938272013;
	const Double_t kNeutronMass = 0.939565378;
	
	TVector3 v1(nucleon1->Vx(), nucleon1->Vy(), nucleon1->Vz());
	TVector3 p1(nucleon1->Px(), nucleon1->Py(), nucleon1->Pz());
	
	TVector3 v2(nucleon2->Vx(), nucleon2->Vy(), nucleon2->Vz());
	TVector3 p2(nucleon2->Px(), nucleon2->Py(), nucleon2->Pz());
	
	Double_t deltaP = 2.*this->GetPcm(p1, kProtonMass, p2, kNeutronMass); // relative momentum in CM frame
	if( deltaP >= fPmax) return -1.;
	
	Double_t deltaR = (v2-v1).Mag();       // relative distance (cm)
	if(deltaR >= fRmax*1.e-13) return -1.;
	
	if(Rndm() > fSpinProb)    return -1.;  // spin
	
	if(fClusterType == kLowestMomentum) return 1. - deltaP/fPmax;
	if(fClusterType == kLowestDistance) return 1. - 1.e+13*deltaR/fRmax;
	
	return 1. - 1.e+13*(deltaP*deltaR)/(fRmax*fPmax);
}

void AliGenDeuteron::FirstPartner(const TList* protons, TList* neutrons)
{
//
// Clusters are made with the first nucleon pair that fulfill
// the coalescence conditions, starting with the protons
//
	TIter p_next(protons);
	while(TParticle* n0 = (TParticle*) p_next())
	{
		TParticle* partner = 0;
		TIter n_next(neutrons);
		while(TParticle* n1 = (TParticle*) n_next() )
		{
			if(GetCoalescenceProbability(n0, n1) < 0 ) continue; // with next neutron
			partner = n1;
			break;
		}
		
		if(partner == 0) continue; // with next proton
		
		PushDeuteron(n0, partner);
		
		// Remove from the list for the next iteration
		neutrons->Remove(partner);
	}
}

void AliGenDeuteron::WeightMatrix(const TList* protons, const TList* neutrons)
{
//
// Build all possible nucleon pairs with their own probability
// and select only those with the highest coalescence probability
//
	Int_t nMaxPairs = protons->GetSize()*neutrons->GetSize();
	
	TParticle** cProton = new TParticle*[nMaxPairs];
	TParticle** cNeutron = new TParticle*[nMaxPairs];
	Double_t*  cWeight = new Double_t[nMaxPairs];
	
	// build all pairs with probability > 0
	Int_t cIdx = -1;
	TIter p_next(protons);
	while(TParticle* n1 = (TParticle*) p_next())
	{
		TIter n_next(neutrons);
		while(TParticle* n2 = (TParticle*) n_next() )
		{
			Double_t weight = this->GetCoalescenceProbability(n1,n2);
			if(weight < 0) continue;
			++cIdx;
			cProton[cIdx]  = n1;
			cNeutron[cIdx] = n2;
			cWeight[cIdx]  = weight;
		}
		n_next.Reset();
	}
	p_next.Reset();
	
	Int_t nPairs = cIdx + 1;
	
	// find the interacting pairs:
	// remove repeated pairs and select only
	// the pair with the highest coalescence probability
	
	Int_t nMaxIntPair = TMath::Min(protons->GetSize(), neutrons->GetSize());
	
	TParticle** iProton = new TParticle*[nMaxIntPair];
	TParticle** iNeutron = new TParticle*[nMaxIntPair];
	Double_t* iWeight = new Double_t[nMaxIntPair];
	
	Int_t iIdx = -1;
	while(kTRUE)
	{
		Int_t j = -1;
		Double_t wMax = 0;
		for(Int_t i=0; i < nPairs; ++i)
		{
			if(cWeight[i] > wMax)
			{
				wMax=cWeight[i];
				j = i;
			}
		}
		
		if(j == -1 ) break; // end
		
		// Save the interacting pair
		++iIdx;
		iProton[iIdx]  = cProton[j];
		iNeutron[iIdx] = cNeutron[j];
		iWeight[iIdx]  = cWeight[j];
		
		// invalidate all combinations with these pairs for the next iteration
		for(Int_t i=0; i < nPairs; ++i)
		{
			if(cProton[i] == iProton[iIdx]) cWeight[i] = -1.;
			if(cNeutron[i] == iNeutron[iIdx]) cWeight[i] = -1.;
		}
	}
	
	Int_t nIntPairs = iIdx + 1;
	
	delete[] cProton;
	delete[] cNeutron;
	delete[] cWeight;
	
	// Add the (anti)deuterons to the current event stack
	for(Int_t i=0; i<nIntPairs; ++i)
	{
		TParticle* n1 = iProton[i];
		TParticle* n2 = iNeutron[i];
		PushDeuteron(n1,n2);
	}
	
	delete[] iProton;
	delete[] iNeutron;
	delete[] iWeight;
}

void AliGenDeuteron::PushDeuteron(TParticle* parent1, TParticle* parent2)
{
//
// Create an (anti)deuteron from parent1 and parent2,
// add to the current stack and set kDoneBit for the parents
//
	const Double_t kDeuteronMass = 1.87561282;
	const Int_t kDeuteronPdg = 1000010020;
	
	// momentum
	TVector3 p1(parent1->Px(), parent1->Py(), parent1->Pz());
	TVector3 p2(parent2->Px(), parent2->Py(), parent2->Pz());
	TVector3 pN = p1+p2;
	
	// production vertex same as the parent1's
	TVector3 vN(parent1->Vx(), parent1->Vy(), parent1->Vz());
	
	// E^2 = p^2 + m^2
	Double_t energy = TMath::Sqrt(pN.Mag2() + kDeuteronMass*kDeuteronMass);
	
	Int_t ntrk = 0;
	Double_t weight = 1;
	Int_t is = 1; // final state particle
	
	// Add a new (anti)deuteron to current event stack
	fCurStack->PushTrack(1, -1, fSign*kDeuteronPdg,
	                 pN.X(), pN.Y(), pN.Z(), energy,
	                 vN.X(), vN.Y(), vN.Z(), parent1->T(),
	                 0., 0., 0., kPNCapture, ntrk, weight, is);
	
	// change the status code of the parents
	parent1->SetStatusCode(kCluster);
	parent2->SetStatusCode(kCluster);
	
	// Set kDoneBit for the parents
	parent1->SetBit(kDoneBit);
	parent2->SetBit(kDoneBit);
}

void AliGenDeuteron::FixProductionVertex(TParticle* i)
{
//
// Replace current generator nucleon spatial distribution
// with a custom distribution according to the selected model
//
	if(fModel == kNone || fModel > kExpansion) return;
	
	// semi-axis from collision geometry (fm)
	Double_t a = fTimeLength + TMath::Sqrt(fR*fR - fB*fB/4.);
	Double_t b = fTimeLength + fR - fB/2.;
	Double_t c = fTimeLength;
	
	Double_t xx = 0;
	Double_t yy = 0;
	Double_t zz = 0;
	
	if(fModel == kThermal)
	{
		// uniformly ditributed in the volume on an ellipsoid
		// random (r,theta,phi) unit sphere
		Double_t r = TMath::Power(Rndm(),1./3.);
		Double_t theta = TMath::ACos(2.*Rndm()-1.);
		Double_t phi = 2.*TMath::Pi()*Rndm();
		
		// transform coordenates
		xx = a*r*TMath::Sin(theta)*TMath::Cos(phi);
		yy = b*r*TMath::Sin(theta)*TMath::Sin(phi);
		zz = c*r*TMath::Cos(theta);
	}
	else if(fModel == kExpansion)
	{
		// project into the surface of an ellipsoid
		xx = a*TMath::Sin(i->Theta())*TMath::Cos(i->Phi());
		yy = b*TMath::Sin(i->Theta())*TMath::Sin(i->Phi());
		zz = c*TMath::Cos(i->Theta());
	}
	
	// rotate by the reaction plane angle
	Double_t x = xx*TMath::Cos(fPsiR)+yy*TMath::Sin(fPsiR);
	Double_t y = -xx*TMath::Sin(fPsiR)+yy*TMath::Cos(fPsiR);
	Double_t z = zz;
	
	// translate by the production vertex (cm)
	i->SetProductionVertex(i->Vx() + 1.e-13*x, i->Vy() + 1.e-13*y, i->Vz() + 1.e-13*z, i->T());
}

Double_t AliGenDeuteron::GetS(Double_t p1x, Double_t p1y, Double_t p1z, Double_t m1, Double_t p2x, Double_t p2y, Double_t p2z, Double_t m2) const
{
//
// square of the center of mass energy
//
	Double_t E1 = TMath::Sqrt( p1x*p1x + p1y*p1y + p1z*p1z + m1*m1);
	Double_t E2 = TMath::Sqrt( p2x*p2x + p2y*p2y + p2z*p2z + m2*m2);
	
	return (E1+E2)*(E1+E2) - ((p1x+p2x)*(p1x+p2x) + (p1y+p2y)*(p1y+p2y) + (p1z+p2z)*(p1z+p2z));
}

Double_t AliGenDeuteron::GetPcm(Double_t p1x, Double_t p1y, Double_t p1z, Double_t m1, Double_t p2x, Double_t p2y, Double_t p2z, Double_t m2) const
{
//
// momentum in the CM frame
//
	Double_t s = this->GetS(p1x, p1y, p1z, m1, p2x, p2y, p2z, m2);
	
	return TMath::Sqrt( (s-(m1-m2)*(m1-m2))*(s-(m1+m2)*(m1+m2)) )/(2.*TMath::Sqrt(s));
}

Double_t AliGenDeuteron::GetPcm(const TVector3& p1, Double_t m1, const TVector3& p2, Double_t m2) const
{
//
// momentum in the CM frame
//
	return this->GetPcm(p1.Px(),p1.Py(),p1.Pz(),m1,p2.Px(),p2.Py(),p2.Pz(),m2);
}

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