ROOT logo
#ifndef ALIGENDEUTERON_H
#define ALIGENDEUTERON_H


/* Copyright(c) 2009-2010, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

// Afterburner to simulate coalescence of (anti)nucleons
// Author: Eulogio Serradilla <eulogio.serradilla@ciemat.es>
//         Arturo Menchaca <menchaca@fisica.unam.mx>

#include "AliGenerator.h"


class AliGenDeuteron: public AliGenerator
{

 public:

	AliGenDeuteron(Int_t sign=1, Double_t pmax=0.2, Double_t rmax=2.1, Int_t cluster=0 );
	virtual ~AliGenDeuteron();

	virtual void Init();
	virtual void Generate();
	
	Int_t GetSign() const { return fSign;}
	Double_t GetCoalescenceMomentum() const { return fPmax; }
	Double_t GetCoalescenceDistance() const { return fRmax; }
	Double_t GetSpinProbability() const { return fSpinProb; }
	Double_t GetCoalescenceProbability(const TParticle* nucleon1, const TParticle* nucleon2) const;
	Int_t GetClusterType() const { return fClusterType; }
	Int_t GetFreezeOutModel() const { return fModel; }
	Double_t GetFreezeOutTime() const { return fTimeLength; }
	
	void SetSign(Int_t sign) {  fSign = sign > 0 ? 1 : -1;}
	void SetCoalescenceMomentum(Double_t p) { fPmax = p; }
	void SetCoalescenceDistance(Double_t r) { fRmax = r; }
	void SetSpinProbability(Double_t s) { fSpinProb = s; }
	void SetClusterType(Int_t cluster) { fClusterType = cluster; }
	void SetFreezeOutModel(Int_t model, Double_t timeLength=2.5) { fModel = model; fTimeLength=timeLength;}
	
 public:

	enum { kFirstPartner=0, kLowestMomentum, kLowestDistance, kBoth };
	enum { kNone=0, kThermal, kExpansion };
	enum { kCluster=77 };
	
 private:
 
	AliGenDeuteron(const AliGenDeuteron &other);
	AliGenDeuteron& operator=(const AliGenDeuteron &other);
	
	void FixProductionVertex(class TParticle* i);
	void FirstPartner(const TList* protons, TList* neutrons);
	void WeightMatrix(const TList* protons, const TList* neutrons);
	void PushDeuteron(TParticle* parent1, TParticle* parent2);
	
	Double_t 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;
	Double_t 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;
	Double_t GetPcm(const TVector3& p1, Double_t m1, const TVector3& p2, Double_t m2) const;
	
 private:
	
	Int_t fSign;          // +1 for deuterons, -1 for antideuterons
	Double_t fPmax;       // Maximum p-n momentum difference (GeV/c)
	Double_t fRmax;       // Maximum p-n distance (fm)
	Double_t fSpinProb;   // cluster formation probability due to spin
	Int_t fClusterType;   // Probability criteria to find clusters
	Int_t fModel;         // Model to override generator source
	Double_t fTimeLength; // Thermal and chemical freeze-out time (fm/c)
	Double_t fB;          // Impact parameter (fm)
	Double_t fR;          // Projectile/Target nuclear radius (fm)
	Double_t fPsiR;       // Reaction plane angle
	AliStack* fCurStack;  //! current event stack
	
	ClassDef(AliGenDeuteron,2)
};

#endif // ALIGENDEUTERON_H
 AliGenDeuteron.h:1
 AliGenDeuteron.h:2
 AliGenDeuteron.h:3
 AliGenDeuteron.h:4
 AliGenDeuteron.h:5
 AliGenDeuteron.h:6
 AliGenDeuteron.h:7
 AliGenDeuteron.h:8
 AliGenDeuteron.h:9
 AliGenDeuteron.h:10
 AliGenDeuteron.h:11
 AliGenDeuteron.h:12
 AliGenDeuteron.h:13
 AliGenDeuteron.h:14
 AliGenDeuteron.h:15
 AliGenDeuteron.h:16
 AliGenDeuteron.h:17
 AliGenDeuteron.h:18
 AliGenDeuteron.h:19
 AliGenDeuteron.h:20
 AliGenDeuteron.h:21
 AliGenDeuteron.h:22
 AliGenDeuteron.h:23
 AliGenDeuteron.h:24
 AliGenDeuteron.h:25
 AliGenDeuteron.h:26
 AliGenDeuteron.h:27
 AliGenDeuteron.h:28
 AliGenDeuteron.h:29
 AliGenDeuteron.h:30
 AliGenDeuteron.h:31
 AliGenDeuteron.h:32
 AliGenDeuteron.h:33
 AliGenDeuteron.h:34
 AliGenDeuteron.h:35
 AliGenDeuteron.h:36
 AliGenDeuteron.h:37
 AliGenDeuteron.h:38
 AliGenDeuteron.h:39
 AliGenDeuteron.h:40
 AliGenDeuteron.h:41
 AliGenDeuteron.h:42
 AliGenDeuteron.h:43
 AliGenDeuteron.h:44
 AliGenDeuteron.h:45
 AliGenDeuteron.h:46
 AliGenDeuteron.h:47
 AliGenDeuteron.h:48
 AliGenDeuteron.h:49
 AliGenDeuteron.h:50
 AliGenDeuteron.h:51
 AliGenDeuteron.h:52
 AliGenDeuteron.h:53
 AliGenDeuteron.h:54
 AliGenDeuteron.h:55
 AliGenDeuteron.h:56
 AliGenDeuteron.h:57
 AliGenDeuteron.h:58
 AliGenDeuteron.h:59
 AliGenDeuteron.h:60
 AliGenDeuteron.h:61
 AliGenDeuteron.h:62
 AliGenDeuteron.h:63
 AliGenDeuteron.h:64
 AliGenDeuteron.h:65
 AliGenDeuteron.h:66
 AliGenDeuteron.h:67
 AliGenDeuteron.h:68
 AliGenDeuteron.h:69
 AliGenDeuteron.h:70
 AliGenDeuteron.h:71
 AliGenDeuteron.h:72
 AliGenDeuteron.h:73
 AliGenDeuteron.h:74
 AliGenDeuteron.h:75
 AliGenDeuteron.h:76
 AliGenDeuteron.h:77
 AliGenDeuteron.h:78
 AliGenDeuteron.h:79