From c3e58d2c7a97a22c38afc5b79c9f6b90f6eda4d8 Mon Sep 17 00:00:00 2001 From: morsch Date: Wed, 9 Oct 2013 15:59:28 +0000 Subject: [PATCH] Updates Ch. Oppedisano --- EVGEN/AliGenSlowNucleons.cxx | 11 +++- EVGEN/AliGenSlowNucleons.h | 6 ++- EVGEN/AliSlowNucleonModel.h | 3 ++ EVGEN/AliSlowNucleonModelExp.cxx | 86 ++++++++++++++++++++++++++++++-- EVGEN/AliSlowNucleonModelExp.h | 7 ++- 5 files changed, 104 insertions(+), 9 deletions(-) diff --git a/EVGEN/AliGenSlowNucleons.cxx b/EVGEN/AliGenSlowNucleons.cxx index 56033125638..aa319d3f4cf 100644 --- a/EVGEN/AliGenSlowNucleons.cxx +++ b/EVGEN/AliGenSlowNucleons.cxx @@ -68,6 +68,7 @@ AliGenSlowNucleons::AliGenSlowNucleons() fBeamCrossingAngle(0.), fBeamDivergence(0.), fBeamDivEvent(0.), + fSmearMode(2), fSlowNucleonModel(0) { // Default constructor @@ -99,6 +100,7 @@ AliGenSlowNucleons::AliGenSlowNucleons(Int_t npart) fBeamCrossingAngle(0.), fBeamDivergence(0.), fBeamDivEvent(0.), + fSmearMode(2), fSlowNucleonModel(new AliSlowNucleonModel()) { @@ -178,8 +180,13 @@ void AliGenSlowNucleons::Generate() // Int_t nnw = fCollisionGeometry->NNw(); // Int_t nwnw = fCollisionGeometry->NwNw(); - //fSlowNucleonModel->GetNumberOfSlowNucleons(fCollisionGeometry, fNgp, fNgn, fNbp, fNbn); - fSlowNucleonModel->GetNumberOfSlowNucleons2(fCollisionGeometry, fNgp, fNgn, fNbp, fNbn); + // (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); diff --git a/EVGEN/AliGenSlowNucleons.h b/EVGEN/AliGenSlowNucleons.h index b6bdd9ae52d..ef32bf7770d 100644 --- a/EVGEN/AliGenSlowNucleons.h +++ b/EVGEN/AliGenSlowNucleons.h @@ -55,6 +55,8 @@ public: 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); @@ -91,6 +93,8 @@ public: 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}; @@ -99,7 +103,7 @@ public: AliGenSlowNucleons(const AliGenSlowNucleons &sn); AliGenSlowNucleons & operator=(const AliGenSlowNucleons & rhs); - ClassDef(AliGenSlowNucleons,3) // Slow Nucleon Generator + ClassDef(AliGenSlowNucleons,4) // Slow Nucleon Generator }; #endif diff --git a/EVGEN/AliSlowNucleonModel.h b/EVGEN/AliSlowNucleonModel.h index d78d7531ec9..b43ec633e8c 100644 --- a/EVGEN/AliSlowNucleonModel.h +++ b/EVGEN/AliSlowNucleonModel.h @@ -19,6 +19,9 @@ public: virtual void GetNumberOfSlowNucleons2(AliCollisionGeometry* /*geo*/, Int_t& /*ngp*/, Int_t& /*ngn*/, Int_t& /*nbp*/, Int_t& /*nbn*/) const {;} + virtual void GetNumberOfSlowNucleons2s(AliCollisionGeometry* /*geo*/, + Int_t& /*ngp*/, Int_t& /*ngn*/, + Int_t& /*nbp*/, Int_t& /*nbn*/) const {;} protected: ClassDef(AliSlowNucleonModel,1) // Gray Particle Model diff --git a/EVGEN/AliSlowNucleonModelExp.cxx b/EVGEN/AliSlowNucleonModelExp.cxx index cf676845189..f59132ca771 100644 --- a/EVGEN/AliSlowNucleonModelExp.cxx +++ b/EVGEN/AliSlowNucleonModelExp.cxx @@ -39,7 +39,8 @@ AliSlowNucleonModelExp::AliSlowNucleonModelExp(): fApplySaturation(kTRUE), fnGraySaturation(15), fnBlackSaturation(28), - fLCPparam(0.585) + fLCPparam(0.585), + fSigmaSmear(0.25) { // // Default constructor @@ -48,10 +49,11 @@ AliSlowNucleonModelExp::AliSlowNucleonModelExp(): fSlownparam[0] = 60.; fSlownparam[1] = 469.2; fSlownparam[2] = 8.762; - printf("\n\n ******** Initializing slow nucleon model with parameters:\n"); + /*printf("\n\n ******** Initializing slow nucleon model with parameters:\n"); printf(" \t alpha_{gray} %1.2f alpha_{black} %1.2f\n",fAlphaGray, fAlphaBlack); printf(" \t SATURATION %d w. %d (gray) %d (black) \n\n",fApplySaturation,fnGraySaturation,fnBlackSaturation); - printf(" \t LCP parameter %f Slown parameters = {%f, %f, %f}\n\n",fLCPparam,fSlownparam[0],fSlownparam[1],fSlownparam[2]); + printf(" \t LCP parameter %f Slown parameters = {%f, %f, + %f}\n\n",fLCPparam,fSlownparam[0],fSlownparam[1],fSlownparam[2]); */ } @@ -111,7 +113,9 @@ void AliSlowNucleonModelExp::GetNumberOfSlowNucleons2(AliCollisionGeometry* geo, Float_t nu = (Float_t) (geo->NN() + geo->NwN() + geo->NNw()); // - nu = nu+1.*gRandom->Rndm(); + //nu = nu+1.*gRandom->Rndm(); + nu = gRandom->Gaus(nu, 0.5); + if(nu<0.) nu=0.; // Float_t poverpd = 0.843; Float_t zAu2zPb = 82./79.; @@ -156,7 +160,7 @@ void AliSlowNucleonModelExp::GetNumberOfSlowNucleons2(AliCollisionGeometry* geo, // Sikler "pasturato" (qui non entra mai!!!!) nGrayNeutrons = 0.47 * fAlphaGray * nu; nBlackNeutrons = 0.88 * fAlphaBlack * nu; - printf("nslowp=0 -> ncoll = %1.0f -> ngrayn = %1.0f nblackn = %1.0f \n", nu, nGrayNeutrons, nBlackNeutrons); + //printf("nslowp=0 -> ncoll = %1.0f -> ngrayn = %1.0f nblackn = %1.0f \n", nu, nGrayNeutrons, nBlackNeutrons); } // gray neutrons @@ -172,6 +176,78 @@ void AliSlowNucleonModelExp::GetNumberOfSlowNucleons2(AliCollisionGeometry* geo, } +void AliSlowNucleonModelExp::GetNumberOfSlowNucleons2s(AliCollisionGeometry* geo, + Int_t& ngp, Int_t& ngn, Int_t & nbp, Int_t & nbn) const +{ +// +// Return the number of black and gray nucleons +// +// Number of collisions + + // based on E910 model ================================================================ + + Float_t nu = (Float_t) (geo->NN() + geo->NwN() + geo->NNw()); + // + Float_t poverpd = 0.843; + Float_t zAu2zPb = 82./79.; + Float_t grayp = (-0.27 + 0.63 * nu - 0.0008 *nu *nu)*poverpd*zAu2zPb; + Float_t nGrayp = gRandom->Gaus(grayp, fSigmaSmear); + if(nGrayp<0.) nGrayp=0.; + +// gray protons + Double_t p=0.; + p = nGrayp/fP; + ngp = gRandom->Binomial((Int_t) fP, p); + //ngp = gRandom->Gaus(nGrayp, TMath::Sqrt(fP*p*(1-p))); + if(nGrayp<0.) ngp=0; + + //Float_t blackovergray = 3./7.;// from spallation + Float_t blackovergray = 0.65; // from COSY + //Float_t blackp = blackovergray*grayp; + //Float_t nBlackp = gRandom->Gaus(nblackp, fSigmaSmear); + Float_t nBlackp = blackovergray*nGrayp; + if(nBlackp<0.) nBlackp=0.; + +// black protons + p = nBlackp/fP; + nbp = gRandom->Binomial((Int_t) fP, p); + //nbp = gRandom->Gaus(nBlackp, TMath::Sqrt(fP*p*(1-p))); + if(nBlackp<0.) nbp=0; + + Float_t nGrayNeutrons = 0.; + Float_t nBlackNeutrons = 0.; + Float_t cp = (nGrayp+nBlackp)/fLCPparam; + + if(cp>0.){ + Float_t nSlow = fSlownparam[0]+fSlownparam[1]/(-fSlownparam[2]-cp); + + nGrayNeutrons = nSlow * 0.1; + nBlackNeutrons = nSlow - nGrayNeutrons; + } + else{ + // Sikler "pasturato" (qui non entra mai!!!!) + nGrayNeutrons = 0.47 * fAlphaGray * nu; + nBlackNeutrons = 0.88 * fAlphaBlack * nu; + //printf("nslowp=0 -> ncoll = %1.0f -> ngrayn = %1.0f nblackn = %1.0f \n", nu, nGrayNeutrons, nBlackNeutrons); + } + // + if(nGrayNeutrons<0.) nGrayNeutrons=0.; + if(nBlackNeutrons<0.) nBlackNeutrons=0.; + +// gray neutrons + p = nGrayNeutrons/fN; +// ngn = gRandom->Binomial((Int_t) fN, p); + ngn = gRandom->Gaus(nGrayNeutrons, TMath::Sqrt(fN*p*(1-p))); + if(nGrayNeutrons<0.) ngn=0; + +// black neutrons + p = nBlackNeutrons/fN; +// nbn = gRandom->Binomial((Int_t) fN, p); + nbn = gRandom->Gaus(nBlackNeutrons, TMath::Sqrt(fN*p*(1-p))); + if(nBlackNeutrons<0.) nbn=0; + +} + void AliSlowNucleonModelExp::SetParameters(Float_t alpha1, Float_t alpha2) { // Set the model parameters diff --git a/EVGEN/AliSlowNucleonModelExp.h b/EVGEN/AliSlowNucleonModelExp.h index 27f74c3c39d..69aef96ef1d 100644 --- a/EVGEN/AliSlowNucleonModelExp.h +++ b/EVGEN/AliSlowNucleonModelExp.h @@ -24,6 +24,8 @@ class AliSlowNucleonModelExp : public AliSlowNucleonModel Int_t& ngp, Int_t& ngn, Int_t& nbp, Int_t& nbn) const; virtual void GetNumberOfSlowNucleons2(AliCollisionGeometry* geo, Int_t& ngp, Int_t& ngn, Int_t& nbp, Int_t& nbn) const; + virtual void GetNumberOfSlowNucleons2s(AliCollisionGeometry* geo, + Int_t& ngp, Int_t& ngn, Int_t& nbp, Int_t& nbn) const; // 1st model virtual void SetParameters(Float_t alpha1, Float_t alpha2); virtual void SetSaturation(Bool_t saturation) {fApplySaturation = saturation;} @@ -46,9 +48,12 @@ class AliSlowNucleonModelExp : public AliSlowNucleonModel // Adding parameters for 2nd model that can be tuned during config Float_t fLCPparam; // parameter to calculate LCP from Float_t fSlownparam[3]; // parameters to calculate from LCP + // + // Adding parameter to smear the number of slow nucleons + Float_t fSigmaSmear; - ClassDef(AliSlowNucleonModelExp,3) // Gray Particle Model (Experiment inspired) + ClassDef(AliSlowNucleonModelExp, 4) // Gray Particle Model (Experiment inspired) }; #endif -- 2.39.3