#include <TNtuple.h>
#include <TFile.h>
#include <TTree.h>
+#include <TF1.h>
#include "AliGlauberNucleon.h"
#include "AliGlauberNucleus.h"
fSxyCom(0.),
fX(0.13),
fNpp(8.),
- fDoPartProd(kFALSE)
+ fDoPartProd(kFALSE),
+ fBNN(0.),
+ fDoFluc(kFALSE),
+ fOmega(0),
+ fSig0(0),
+ fSigFluc(0),
+ fLambda(0)
{
//ctor
for (UInt_t i=0; i<(sizeof(fdNdEtaParam)/sizeof(fdNdEtaParam[0])); i++)
fSxyCom(in.fSxyCom),
fX(in.fX),
fNpp(in.fNpp),
- fDoPartProd(kFALSE)
+ fDoPartProd(in.fDoPartProd),
+ fBNN(in.fBNN),
+ fDoFluc(in.fDoFluc),
+ fOmega(in.fOmega),
+ fSig0(in.fSig0),
+ fSigFluc(in.fSigFluc),
+ fLambda(in.fLambda)
{
//copy ctor
memcpy(fdNdEtaParam,in.fdNdEtaParam,sizeof(fdNdEtaParam));
nucleonB->SetInNucleusB();
}
+ if (fDoFluc) {
+ if (!fSigFluc) {
+ fSigFluc = new TF1("fSigFluc","[0]*x/[3]/(x/[3]+[1])*exp(-((x/[1]/[3]-1)/[2])^2)",0,250);
+ fSigFluc->SetParameters(1,fSig0,fOmega,fLambda);
+ cout << "Setting fluc: " << fSig0 << " " << fOmega << " " << fLambda << endl;
+ }
+ fXSect = fSigFluc->GetRandom();
+ }
// "ball" diameter = distance at which two balls interact
Double_t d2 = (Double_t)fXSect/(TMath::Pi()*10); // in fm^2
+ Double_t bNN = 0;
+ Double_t Nco = 0;
// for each of the A nucleons in nucleus B
for (Int_t i = 0; i<fBN; i++)
{
Double_t dij = dx*dx+dy*dy;
if (dij < d2)
{
+ bNN += dij;
+ ++Nco;
nucleonB->Collide();
nucleonA->Collide();
}
}
}
-
+ if (Nco>0)
+ fBNN = bNN/Nco;
+ else
+ fBNN = 0.;
return CalcResults(bgen);
}
if (fnt == 0)
{
fnt = new TNtuple(name,title,
- "Npart:Ncoll:B:MeanX:MeanY:MeanX2:MeanY2:MeanXY:VarX:VarY:VarXY:MeanXSystem:MeanYSystem:MeanXA:MeanYA:MeanXB:MeanYB:VarE:Stoa:VarEColl:VarECom:VarEPart:VarEPartColl:VarEPartCom:dNdEta:dNdEtaGBW:dNdEtaTwoNBD:xsect:tAA:Epsl2:Epsl3:Epsl4:Epsl5:E2Coll:E3Coll:E4Coll:E5Coll:E2Com:E3Com:E4Com:E5Com:Psi2:Psi3:Psi4:Psi5");
+ "Npart:Ncoll:B:MeanX:MeanY:MeanX2:MeanY2:MeanXY:VarX:VarY:VarXY:MeanXSystem:MeanYSystem:MeanXA:MeanYA:MeanXB:MeanYB:VarE:Stoa:VarEColl:VarECom:VarEPart:VarEPartColl:VarEPartCom:dNdEta:dNdEtaGBW:dNdEtaTwoNBD:xsect:tAA:Epsl2:Epsl3:Epsl4:Epsl5:E2Coll:E3Coll:E4Coll:E5Coll:E2Com:E3Com:E4Com:E5Com:Psi2:Psi3:Psi4:Psi5:BNN:signn");
fnt->SetDirectory(0);
}
Int_t q = 0;
}
q++;
- //Float_t v[27];
- Float_t v[45];
+ Float_t v[47];
v[0] = GetNpart();
v[1] = GetNcoll();
v[2] = fBMC;
v[42] = GetPsi3();
v[43] = GetPsi4();
v[44] = GetPsi5();
+ v[45] = fBNN;
+ v[46] = fXSect;
//always at the end
fnt->Fill(v);
void SetDoPartProduction(Bool_t b) { fDoPartProd = b; }
void Setr(Double_t r) {fANucleus.SetR(r); fBNucleus.SetR(r);}
void Seta(Double_t a) {fANucleus.SetA(a); fBNucleus.SetA(a);}
+ void SetDoFluc(Double_t omega, Double_t sig0, Double_t lam, Bool_t on=kTRUE)
+ {fDoFluc=on;fOmega=omega;fSig0=sig0;fLambda=lam;}
static void PrintVersion() {cout << "AliGlauberMC " << Version() << endl;}
static const char *Version() {return "v1.2";}
static void RunAndSaveNtuple( Int_t n,
Double_t fX; //hard particle production fraction
Double_t fNpp; //Multiplicity normalization
Bool_t fDoPartProd; //=1 then particle production on
+ Double_t fBNN; //average NN impact parameter
+ Bool_t fDoFluc; //=kTRUE then fluc sigma (only useful for pPb)
+ Double_t fOmega; //fluctuation parameter
+ Double_t fSig0; //regularization parameter
+ Double_t fLambda; //lambda parameter
+ TF1 *fSigFluc; //!parameterization for fluctuating sigNN
Bool_t CalcResults(Double_t bgen);
- ClassDef(AliGlauberMC,3)
+ ClassDef(AliGlauberMC,4)
};
#endif