Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
168 changes: 168 additions & 0 deletions MC/config/PWGDQ/external/generator/GeneratorPromptCharmonia.C
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,149 @@ class O2_GeneratorParamPsiMidY : public GeneratorTGenerator
GeneratorParam* paramPsi = nullptr;
};

class O2_GeneratorParamJpsiMidY_5TeV : public GeneratorTGenerator
{

public:
O2_GeneratorParamJpsiMidY_5TeV() : GeneratorTGenerator("paramJpsi")
{
paramJpsi = new GeneratorParam(1, -1, PtJPsipp5TeV, YJPsipp5TeV, V2JPsipp5TeV, IpJPsipp5TeV);
paramJpsi->SetMomentumRange(0., 1.e6);
paramJpsi->SetPtRange(0., 1000.);
paramJpsi->SetYRange(-1.0, 1.0);
paramJpsi->SetPhiRange(0., 360.);
paramJpsi->SetDecayer(new TPythia6Decayer()); // Pythia
paramJpsi->SetForceDecay(kNoDecay); // particle left undecayed
setTGenerator(paramJpsi);
};

~O2_GeneratorParamJpsiMidY_5TeV()
{
delete paramJpsi;
};

Bool_t Init() override
{
GeneratorTGenerator::Init();
paramJpsi->Init();
return true;
}

void SetNSignalPerEvent(Int_t nsig) { paramJpsi->SetNumberParticles(nsig); }

//-------------------------------------------------------------------------//
static Double_t PtJPsipp5TeV(const Double_t* px, const Double_t* /*dummy*/)
{
// JPSi pt at 5.02 TeV: https: // www.hepdata.net/record/ins1735351
//
const Double_t kC = 1774.9;
const Double_t kpt0 = 3.38452;
const Double_t kn = 2.77889;
Double_t pt = px[0];

return kC * pt / TMath::Power((1. + (pt / kpt0) * (pt / kpt0)), kn);
}

//-------------------------------------------------------------------------//
static Double_t YJPsipp5TeV(const Double_t* py, const Double_t* /*dummy*/)
{
// Taken the same as: jpsi y in pp at 13 TeV, tuned on data, prompt jpsi ALICE+LHCb, 13 TeV
Double_t y = *py;
Float_t p0, p1, p2;
p0 = 7.79382e+00;
p1 = 2.87827e-06;
p2 = 4.41847e+00;
return p0 * TMath::Exp(-(1. / 2.) * TMath::Power(((y - p1) / p2), 2));
}

//-------------------------------------------------------------------------//
static Double_t V2JPsipp5TeV(const Double_t* /*dummy*/, const Double_t* /*dummy*/)
{
// jpsi v2
return 0.;
}

//-------------------------------------------------------------------------//
static Int_t IpJPsipp5TeV(TRandom*)
{
return 443;
}

private:
GeneratorParam* paramJpsi = nullptr;
};

class O2_GeneratorParamPsiMidY_5TeV : public GeneratorTGenerator
{

public:
O2_GeneratorParamPsiMidY_5TeV() : GeneratorTGenerator("ParamPsi")
{
paramPsi = new GeneratorParam(1, -1, PtPsipp5TeV, YPsipp5TeV, V2Psipp5TeV, IpPsipp5TeV);
paramPsi->SetMomentumRange(0., 1.e6); // Momentum range added from me
paramPsi->SetPtRange(0., 1000.); // transverse of momentum range
paramPsi->SetYRange(-1.0, 1.0); // rapidity range
paramPsi->SetPhiRange(0., 360.); // phi range
paramPsi->SetDecayer(new TPythia6Decayer()); // Pythia decayer
paramPsi->SetForceDecay(kNoDecay); // particle left undecayed
setTGenerator(paramPsi); // Setting parameters to ParamPsi for Psi(2S)
};

~O2_GeneratorParamPsiMidY_5TeV()
{
delete paramPsi;
};

Bool_t Init() override
{
GeneratorTGenerator::Init();
paramPsi->Init();
return true;
}
void SetNSignalPerEvent(Int_t nsig) { paramPsi->SetNumberParticles(nsig); }

//-------------------------------------------------------------------------//
static Double_t PtPsipp5TeV(const Double_t* px, const Double_t* /*dummy*/)
{
// Same as JPsi at 5.02 TeV since ratio is almost flat in pT: https: // www.hepdata.net/record/ins1735351
//
const Double_t kC = 1774.9;
const Double_t kpt0 = 3.38452;
const Double_t kn = 2.77889;
Double_t pt = px[0];

return kC * pt / TMath::Power((1. + (pt / kpt0) * (pt / kpt0)), kn);
}

//-------------------------------------------------------------------------//
static Double_t YPsipp5TeV(const Double_t* py, const Double_t* /*dummy*/)
{
// Taken same as jpsi y in pp at 13 TeV, tuned on data, prompt jpsi ALICE+LHCb, 13 TeV
Double_t y = *py;
Float_t p0, p1, p2;
p0 = 7.79382e+00;
p1 = 2.87827e-06;
p2 = 4.41847e+00;
return p0 * TMath::Exp(-(1. / 2.) * TMath::Power(((y - p1) / p2), 2));
}

//-------------------------------------------------------------------------//
static Double_t V2Psipp5TeV(const Double_t* /*dummy*/, const Double_t* /*dummy*/)
{
// jpsi v2
return 0.;
}

//-------------------------------------------------------------------------//
static Int_t IpPsipp5TeV(TRandom*)
{
return 100443;
}

private:
GeneratorParam* paramPsi = nullptr;
};

class O2_GeneratorParamJpsiFwdY : public GeneratorTGenerator
{

Expand Down Expand Up @@ -982,6 +1125,31 @@ FairGenerator* GeneratorCocktailPromptCharmoniaToMuonEvtGen_pp5TeV()
return genCocktailEvtGen;
}

FairGenerator* GeneratorCocktailPromptCharmoniaToElectronEvtGen_pp5TeV()
{

auto genCocktailEvtGen = new o2::eventgen::GeneratorEvtGen<GeneratorCocktail>();

auto genJpsi = new o2::eventgen::O2_GeneratorParamJpsiMidY_5TeV;
genJpsi->SetNSignalPerEvent(1); // 1 J/psi generated per event by GeneratorParam
auto genPsi = new o2::eventgen::O2_GeneratorParamPsiMidY_5TeV;
genPsi->SetNSignalPerEvent(1); // 1 Psi(2S) generated per event by GeneratorParam
genCocktailEvtGen->AddGenerator(genJpsi, 1); // add J/psi generator
genCocktailEvtGen->AddGenerator(genPsi, 1); // add Psi(2S) generator

TString pdgs = "443;100443";
std::string spdg;
TObjArray* obj = pdgs.Tokenize(";");
genCocktailEvtGen->SetSizePdg(obj->GetEntriesFast());
for (int i = 0; i < obj->GetEntriesFast(); i++) {
spdg = obj->At(i)->GetName();
genCocktailEvtGen->AddPdg(std::stoi(spdg), i);
printf("PDG %d \n", std::stoi(spdg));
}
genCocktailEvtGen->SetForceDecay(kEvtDiElectron);

return genCocktailEvtGen;
}

FairGenerator*
GeneratorParamPromptPsiToJpsiPiPiEvtGen_pp13TeV(TString pdgs = "100443")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,9 @@ public:
case 11: // generate cocktail of prompt X_1(3872) and psi2S to Jpsi pi pi at midrapidity
mGeneratorParam = (Generator*)GeneratorCocktailPromptCharmoniaToMuonEvtGen_pp5TeV();
break;
case 12: // generate prompt charmonia cocktail at mid rapidity at 5TeV
mGeneratorParam = (Generator*)GeneratorCocktailPromptCharmoniaToElectronEvtGen_pp5TeV();
break;
}
mGeneratorParam->Init();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
### The external generator derives from GeneratorPythia8.
[GeneratorExternal]
fileName=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGDQ/external/generator/generator_pythia8_withInjectedPromptSignals_gaptriggered_dq.C
funcName=GeneratorPythia8InjectedPromptCharmoniaGapTriggered(5,12)

[GeneratorPythia8]
config=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGDQ/pythia8/generator/pythia8_inel_triggerGap_OO5TeV.cfg