Updates
authormorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 9 Oct 2013 15:59:28 +0000 (15:59 +0000)
committermorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 9 Oct 2013 15:59:28 +0000 (15:59 +0000)
Ch. Oppedisano

EVGEN/AliGenSlowNucleons.cxx
EVGEN/AliGenSlowNucleons.h
EVGEN/AliSlowNucleonModel.h
EVGEN/AliSlowNucleonModelExp.cxx
EVGEN/AliSlowNucleonModelExp.h

index 5603312..aa319d3 100644 (file)
@@ -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);
index b6bdd9a..ef32bf7 100644 (file)
@@ -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
 
index d78d753..b43ec63 100644 (file)
@@ -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
index cf67684..f59132c 100644 (file)
@@ -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
index 27f74c3..69aef96 100644 (file)
@@ -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 <Nslow p>
     Float_t  fSlownparam[3];   // parameters to calculate <Nslow n> 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