ROOT logo
#ifndef ALIGENSLOWNUCLEONS_H
#define ALIGENSLOWNUCLEONS_H
/* Copyright(c) 198-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

/* $Id$ */
//
//  Generator for slow nucleons in pA interactions. 
//  Source is modelled by a relativistic Maxwell distributions.
//  Original code by  Ferenc Sikler  <sikler@rmki.kfki.hu>
//  This class: andreas.morsch@cern.ch
//
#include "AliGenerator.h"
class AliSlowNucleonModel;
class TH2F;
class TH1F;
class TF1;

class AliGenSlowNucleons : public AliGenerator
{
public:
    AliGenSlowNucleons();
    AliGenSlowNucleons(Int_t npart);
    virtual ~AliGenSlowNucleons();
    virtual void Init();
    virtual void FinishRun();
    virtual void Generate();
    virtual void SetPmax(Float_t pmax = 10.) {fPmax = pmax;}
    virtual void SetNominalCmsEnergy(Float_t energy = 14000.) {fCMS = energy;}
    virtual void SetTarget(Int_t a = 208, Int_t z = 82) {fATarget = a; fZTarget = z;}
    virtual void SetTarget(TString s, Int_t a, Int_t z) {AliGenerator::SetTarget(s, a, z);}
    virtual void SetProtonDirection(Float_t dir = 1.);
    virtual void SetCharge(Int_t c = 1) {fCharge = c;}
    virtual void SetTemperature(Double_t t1 = 0.04, Double_t t2 = 0.004)
	{fTemperatureG = t1; fTemperatureB = t2;}
    virtual void SetBetaSource(Double_t b1 = 0.05, Double_t b2 = 0.)
	{fBetaSourceG = b1; fBetaSourceB = b2;}
    //
    virtual void SetSlowNucleonModel(AliSlowNucleonModel* model) 
	{fSlowNucleonModel = model;}
    virtual Bool_t NeedsCollisionGeometry() const {return kTRUE;}
    virtual void   SetCollisionGeometry(AliCollisionGeometry* geom)
	{fCollisionGeometry = geom;}
    virtual void   SetDebug(Int_t flag = 0) {fDebug = flag;}
    virtual void   SetNumbersOfSlowNucleons(Int_t ngp, Int_t ngn, Int_t nbp, Int_t nbn)
	{fNgp = ngp; fNgn = ngn; fNbp = nbp; fNbn = nbn;}
    //
    // Added by Chiara to take into account angular distribution 4 gray tracks
    virtual void   SetThetaDist(Int_t flag=0) {fThetaDistribution = flag;}
    //
    virtual void   SetBeamCrossingAngle(Float_t crossAngle) {fBeamCrossingAngle = crossAngle;}
    virtual void   SetBeamDivergence(Float_t divergence) {fBeamDivergence = divergence;}
    //
    virtual Int_t  GetNGrayProtons()   {return fNgp;}
    virtual Int_t  GetNGrayNeutrons()  {return fNgn;}
    virtual Int_t  GetNBlackProtons()  {return fNbp;}
    virtual Int_t  GetNBlackNeutrons() {return fNbn;}    
    //
    virtual void   SetModelSmear(Int_t imode) {fSmearMode=imode;}
    
 protected:
    void     GenerateSlow(Int_t charge, Double_t T, Double_t beta, Float_t* q, Float_t &theta);
    Double_t Maxwell(Double_t m, Double_t p, Double_t t);
    void     Lorentz(Double_t m, Double_t beta, Float_t* q);
    void     BeamCrossDivergence(Int_t iwhat, Float_t *pLab);;
    void     AddAngle(Double_t theta1, Double_t phi1, Double_t theta2,
  	        	Double_t phi2, Double_t *angle);
    void     SetProcessID(Int_t nt, UInt_t process);
 protected:
    Float_t  fCMS;             // Center of mass energy
    Double_t fMomentum;        // Target nucleus momentum
    Double_t fBeta;            // Target nucleus beta
    Float_t  fPmax;            // Maximum slow nucleon momentum
    Int_t    fCharge;          // Slow nucleon charge
    Float_t  fProtonDirection; // Direction of the proton
    Float_t  fTemperatureG;    // Source Temperature for gray nucleons
    Float_t  fBetaSourceG;     // Source beta for gray nucleons
    Float_t  fTemperatureB;    // Source Temperature for black nucleons
    Float_t  fBetaSourceB;     // Source beta for black nucleons
    Int_t    fNgp;             // Number of gray  protons
    Int_t    fNgn;             // Number of gray  neutrons
    Int_t    fNbp;             // Number of black protons
    Int_t    fNbn;             // Number of black neutrons
    Int_t    fDebug;           // Debug flag
    TH2F*    fDebugHist1;      // Histogram for debugging
    TH2F*    fDebugHist2;      // Histogram for debugging
    // Added by Chiara to take into account angular distribution 4 gray tracks
    Int_t    fThetaDistribution;// 0 -> flat dist., 1 -> fwd. peaked distribution
    TH1F*    fCosThetaGrayHist; // Histogram for debugging
    TF1*     fCosTheta;         // Function for non-uniform cos(theta) distribution
    //
    Float_t  fBeamCrossingAngle; // beam crossing angle (in radians)
    Float_t  fBeamDivergence;    // beam divergence	(in radians)
    Float_t  fBeamDivEvent;      // beam divergence	(in radians)
    //
    Int_t    fSmearMode;         // 0=Skler (no smear), =1 smearing Ncoll, =2 smearing Nslow
    //
    AliSlowNucleonModel* fSlowNucleonModel; // The slow nucleon model

    enum {kGrayProcess = 200, kBlackProcess = 300};

 private:
    AliGenSlowNucleons(const AliGenSlowNucleons &sn);
    AliGenSlowNucleons & operator=(const AliGenSlowNucleons & rhs);

    ClassDef(AliGenSlowNucleons,4) // Slow Nucleon Generator
};
#endif







 AliGenSlowNucleons.h:1
 AliGenSlowNucleons.h:2
 AliGenSlowNucleons.h:3
 AliGenSlowNucleons.h:4
 AliGenSlowNucleons.h:5
 AliGenSlowNucleons.h:6
 AliGenSlowNucleons.h:7
 AliGenSlowNucleons.h:8
 AliGenSlowNucleons.h:9
 AliGenSlowNucleons.h:10
 AliGenSlowNucleons.h:11
 AliGenSlowNucleons.h:12
 AliGenSlowNucleons.h:13
 AliGenSlowNucleons.h:14
 AliGenSlowNucleons.h:15
 AliGenSlowNucleons.h:16
 AliGenSlowNucleons.h:17
 AliGenSlowNucleons.h:18
 AliGenSlowNucleons.h:19
 AliGenSlowNucleons.h:20
 AliGenSlowNucleons.h:21
 AliGenSlowNucleons.h:22
 AliGenSlowNucleons.h:23
 AliGenSlowNucleons.h:24
 AliGenSlowNucleons.h:25
 AliGenSlowNucleons.h:26
 AliGenSlowNucleons.h:27
 AliGenSlowNucleons.h:28
 AliGenSlowNucleons.h:29
 AliGenSlowNucleons.h:30
 AliGenSlowNucleons.h:31
 AliGenSlowNucleons.h:32
 AliGenSlowNucleons.h:33
 AliGenSlowNucleons.h:34
 AliGenSlowNucleons.h:35
 AliGenSlowNucleons.h:36
 AliGenSlowNucleons.h:37
 AliGenSlowNucleons.h:38
 AliGenSlowNucleons.h:39
 AliGenSlowNucleons.h:40
 AliGenSlowNucleons.h:41
 AliGenSlowNucleons.h:42
 AliGenSlowNucleons.h:43
 AliGenSlowNucleons.h:44
 AliGenSlowNucleons.h:45
 AliGenSlowNucleons.h:46
 AliGenSlowNucleons.h:47
 AliGenSlowNucleons.h:48
 AliGenSlowNucleons.h:49
 AliGenSlowNucleons.h:50
 AliGenSlowNucleons.h:51
 AliGenSlowNucleons.h:52
 AliGenSlowNucleons.h:53
 AliGenSlowNucleons.h:54
 AliGenSlowNucleons.h:55
 AliGenSlowNucleons.h:56
 AliGenSlowNucleons.h:57
 AliGenSlowNucleons.h:58
 AliGenSlowNucleons.h:59
 AliGenSlowNucleons.h:60
 AliGenSlowNucleons.h:61
 AliGenSlowNucleons.h:62
 AliGenSlowNucleons.h:63
 AliGenSlowNucleons.h:64
 AliGenSlowNucleons.h:65
 AliGenSlowNucleons.h:66
 AliGenSlowNucleons.h:67
 AliGenSlowNucleons.h:68
 AliGenSlowNucleons.h:69
 AliGenSlowNucleons.h:70
 AliGenSlowNucleons.h:71
 AliGenSlowNucleons.h:72
 AliGenSlowNucleons.h:73
 AliGenSlowNucleons.h:74
 AliGenSlowNucleons.h:75
 AliGenSlowNucleons.h:76
 AliGenSlowNucleons.h:77
 AliGenSlowNucleons.h:78
 AliGenSlowNucleons.h:79
 AliGenSlowNucleons.h:80
 AliGenSlowNucleons.h:81
 AliGenSlowNucleons.h:82
 AliGenSlowNucleons.h:83
 AliGenSlowNucleons.h:84
 AliGenSlowNucleons.h:85
 AliGenSlowNucleons.h:86
 AliGenSlowNucleons.h:87
 AliGenSlowNucleons.h:88
 AliGenSlowNucleons.h:89
 AliGenSlowNucleons.h:90
 AliGenSlowNucleons.h:91
 AliGenSlowNucleons.h:92
 AliGenSlowNucleons.h:93
 AliGenSlowNucleons.h:94
 AliGenSlowNucleons.h:95
 AliGenSlowNucleons.h:96
 AliGenSlowNucleons.h:97
 AliGenSlowNucleons.h:98
 AliGenSlowNucleons.h:99
 AliGenSlowNucleons.h:100
 AliGenSlowNucleons.h:101
 AliGenSlowNucleons.h:102
 AliGenSlowNucleons.h:103
 AliGenSlowNucleons.h:104
 AliGenSlowNucleons.h:105
 AliGenSlowNucleons.h:106
 AliGenSlowNucleons.h:107
 AliGenSlowNucleons.h:108
 AliGenSlowNucleons.h:109
 AliGenSlowNucleons.h:110
 AliGenSlowNucleons.h:111
 AliGenSlowNucleons.h:112
 AliGenSlowNucleons.h:113
 AliGenSlowNucleons.h:114
 AliGenSlowNucleons.h:115