1010
1111using namespace Pythia8 ;
1212
13+ #include <cmath>
1314namespace hf_generators
1415{
1516 enum GenType : int {
@@ -35,7 +36,13 @@ public:
3536 //}
3637
3738 /// Destructor
38- ~GeneratorPythia8EmbedHF () = default ;
39+ ~GeneratorPythia8EmbedHF () {
40+ // Clean up the internally created HF generator if any
41+ if (mGeneratorEvHF ) {
42+ delete mGeneratorEvHF ;
43+ mGeneratorEvHF = nullptr ;
44+ }
45+ }
3946
4047 /// Init
4148 bool Init () override
@@ -51,29 +58,30 @@ public:
5158 /// \param yHadronMin minimum hadron rapidity
5259 /// \param yHadronMax maximum hadron rapidity
5360 /// \param hadronPdgList list of PDG codes for hadrons to be used in trigger
54- void setupGeneratorEvHF (int genType , bool usePtHardBins , float yQuarkMin , float yQuarkMax , float yHadronMin , float yHadronMax , std ::vector < int > hadronPdgList = {}) {
61+ /// \param quarkPdgList list of PDG codes for quarks to be enriched in the trigger
62+ void setupGeneratorEvHF (int genType , bool usePtHardBins , float yQuarkMin , float yQuarkMax , float yHadronMin , float yHadronMax , std ::vector < int > quarkPdgList = {}, std ::vector < int > hadronPdgList = {}, std ::vector < std ::array < int ,2 >> partPdgToReplaceList = {}, std ::vector < float > freqReplaceList = {}) {
5563 mGeneratorEvHF = nullptr;
5664 switch (genType )
5765 {
5866 case hf_generators ::GapTriggeredCharm :
5967 LOG (info ) << "********** [GeneratorPythia8EmbedHF] configuring GeneratorPythia8GapTriggeredCharm **********" ;
6068 LOG (info ) << "********** Default number of HF signal events to be merged (updated by notifyEmbedding): " << mNumSigEvs ;
61- mGeneratorEvHF = dynamic_cast < GeneratorPythia8GapTriggeredHF * > (GeneratorPythia8GapTriggeredCharm (/*no gap trigger*/ 1 , yQuarkMin , yQuarkMax , yHadronMin , yHadronMax , hadronPdgList ));
69+ mGeneratorEvHF = dynamic_cast < GeneratorPythia8GapTriggeredHF * > (GeneratorPythia8GapTriggeredCharm (/*no gap trigger*/ 1 , yQuarkMin , yQuarkMax , yHadronMin , yHadronMax , hadronPdgList , partPdgToReplaceList , freqReplaceList ));
6270 break ;
6371 case hf_generators ::GapTriggeredBeauty :
6472 LOG (info ) << "********** [GeneratorPythia8EmbedHF] configuring GeneratorPythia8GapTriggeredBeauty **********" ;
6573 LOG (info ) << "********** Default number of HF signal events to be merged (updated by notifyEmbedding): " << mNumSigEvs ;
66- mGeneratorEvHF = dynamic_cast < GeneratorPythia8GapTriggeredHF * > (GeneratorPythia8GapTriggeredBeauty (/*no gap trigger*/ 1 , yQuarkMin , yQuarkMax , yHadronMin , yHadronMax , hadronPdgList ));
74+ mGeneratorEvHF = dynamic_cast < GeneratorPythia8GapTriggeredHF * > (GeneratorPythia8GapTriggeredBeauty (/*no gap trigger*/ 1 , yQuarkMin , yQuarkMax , yHadronMin , yHadronMax , hadronPdgList , partPdgToReplaceList , freqReplaceList ));
6775 break ;
6876 case hf_generators ::GapTriggeredCharmAndBeauty :
6977 LOG (info ) << "********** [GeneratorPythia8EmbedHF] configuring GeneratorPythia8GapTriggeredCharmAndBeauty **********" ;
7078 LOG (info ) << "********** Default number of HF signal events to be merged (updated by notifyEmbedding): " << mNumSigEvs ;
71- mGeneratorEvHF = dynamic_cast < GeneratorPythia8GapTriggeredHF * > (GeneratorPythia8GapTriggeredCharmAndBeauty (/*no gap trigger*/ 1 , yQuarkMin , yQuarkMax , yHadronMin , yHadronMax , hadronPdgList ));
79+ mGeneratorEvHF = dynamic_cast < GeneratorPythia8GapTriggeredHF * > (GeneratorPythia8GapTriggeredCharmAndBeauty (/*no gap trigger*/ 1 , yQuarkMin , yQuarkMax , yHadronMin , yHadronMax , hadronPdgList , partPdgToReplaceList , freqReplaceList ));
7280 break ;
7381 case hf_generators ::GapHF :
7482 LOG (info ) << "********** [GeneratorPythia8EmbedHF] configuring GeneratorPythia8GapHF **********" ;
7583 LOG (info ) << "********** Default number of HF signal events to be merged (updated by notifyEmbedding): " << mNumSigEvs ;
76- mGeneratorEvHF = dynamic_cast < GeneratorPythia8GapTriggeredHF * > (GeneratorPythia8GapHF (/*no gap trigger*/ 1 , yQuarkMin , yQuarkMax , yHadronMin , yHadronMax , hadronPdgList ));
84+ mGeneratorEvHF = dynamic_cast < GeneratorPythia8GapTriggeredHF * > (GeneratorPythia8GapTriggeredBeauty (/*no gap trigger*/ 1 , yQuarkMin , yQuarkMax , yHadronMin , yHadronMax , hadronPdgList , partPdgToReplaceList , freqReplaceList ));
7785 break ;
7886 default :
7987 LOG (fatal ) << "********** [GeneratorPythia8EmbedHF] bad configuration, fix it! **********" ;
@@ -111,7 +119,7 @@ public:
111119 LOG (info ) << "[notifyEmbedding] ----- Collision impact parameter: " << x ;
112120
113121 /// number of events to be embedded in a background event
114- mNumSigEvs = 5 + 0.886202881 * std ::pow (std ::max (0.0f , 17.5f - x ),1.7 );
122+ mNumSigEvs = static_cast < int > ( std :: lround ( 5.0 + 0.886202881 * std ::pow (std ::max (0.0f , 17.5f - x ), 1.7 )) );
115123 LOG (info ) << "[notifyEmbedding] ----- generating " << mNumSigEvs << " signal events " << std ::endl ;
116124 };
117125
@@ -380,34 +388,34 @@ private:
380388};
381389
382390// Charm enriched
383- FairGenerator * GeneratorPythia8EmbedHFCharm (bool usePtHardBins = false, float yQuarkMin = -1.5 , float yQuarkMax = 1.5 , float yHadronMin = -1.5 , float yHadronMax = 1.5 , std ::vector < int > hadronPdgList = {})
391+ FairGenerator * GeneratorPythia8EmbedHFCharm (bool usePtHardBins = false, float yQuarkMin = -1.5 , float yQuarkMax = 1.5 , float yHadronMin = -1.5 , float yHadronMax = 1.5 , std ::vector < int > quarkPdgList = {}, std :: vector < int > hadronPdgList = {}, std :: vector < std :: array < int , 2 >> partPdgToReplaceList = {}, std :: vector < float > freqReplaceList = {})
384392{
385393 auto myGen = new GeneratorPythia8EmbedHF ();
386394
387395 /// setup the internal generator for HF events
388- myGen -> setupGeneratorEvHF (hf_generators ::GapTriggeredCharm , usePtHardBins , yQuarkMin , yQuarkMax , yHadronMin , yHadronMax , hadronPdgList );
396+ myGen -> setupGeneratorEvHF (hf_generators ::GapTriggeredCharm , usePtHardBins , yQuarkMin , yQuarkMax , yHadronMin , yHadronMax , quarkPdgList , hadronPdgList , partPdgToReplaceList , freqReplaceList );
389397
390398 return myGen ;
391399}
392400
393401// Beauty enriched
394- FairGenerator * GeneratorPythia8EmbedHFBeauty (bool usePtHardBins = false, float yQuarkMin = -1.5 , float yQuarkMax = 1.5 , float yHadronMin = -1.5 , float yHadronMax = 1.5 , std ::vector < int > hadronPdgList = {})
402+ FairGenerator * GeneratorPythia8EmbedHFBeauty (bool usePtHardBins = false, float yQuarkMin = -1.5 , float yQuarkMax = 1.5 , float yHadronMin = -1.5 , float yHadronMax = 1.5 , std ::vector < int > quarkPdgList = {}, std :: vector < int > hadronPdgList = {}, std :: vector < std :: array < int , 2 >> partPdgToReplaceList = {}, std :: vector < float > freqReplaceList = {})
395403{
396404 auto myGen = new GeneratorPythia8EmbedHF ();
397405
398406 /// setup the internal generator for HF events
399- myGen -> setupGeneratorEvHF (hf_generators ::GapTriggeredBeauty , usePtHardBins , yQuarkMin , yQuarkMax , yHadronMin , yHadronMax , hadronPdgList );
407+ myGen -> setupGeneratorEvHF (hf_generators ::GapTriggeredBeauty , usePtHardBins , yQuarkMin , yQuarkMax , yHadronMin , yHadronMax , quarkPdgList , hadronPdgList , partPdgToReplaceList , freqReplaceList );
400408
401409 return myGen ;
402410}
403411
404412// Charm and beauty enriched (with same ratio)
405- FairGenerator * GeneratorPythia8EmbedHFCharmAndBeauty (bool usePtHardBins = false, float yQuarkMin = -1.5 , float yQuarkMax = 1.5 , float yHadronMin = -1.5 , float yHadronMax = 1.5 , std ::vector < int > hadronPdgList = {})
413+ FairGenerator * GeneratorPythia8EmbedHFCharmAndBeauty (bool usePtHardBins = false, float yQuarkMin = -1.5 , float yQuarkMax = 1.5 , float yHadronMin = -1.5 , float yHadronMax = 1.5 , std ::vector < int > quarkPdgList = {}, std :: vector < int > hadronPdgList = {}, std :: vector < std :: array < int , 2 >> partPdgToReplaceList = {}, std :: vector < float > freqReplaceList = {})
406414{
407415 auto myGen = new GeneratorPythia8EmbedHF ();
408416
409417 /// setup the internal generator for HF events
410- myGen -> setupGeneratorEvHF (hf_generators ::GapTriggeredCharmAndBeauty , usePtHardBins , yQuarkMin , yQuarkMax , yHadronMin , yHadronMax , hadronPdgList );
418+ myGen -> setupGeneratorEvHF (hf_generators ::GapTriggeredCharmAndBeauty , usePtHardBins , yQuarkMin , yQuarkMax , yHadronMin , yHadronMax , quarkPdgList , hadronPdgList , partPdgToReplaceList , freqReplaceList );
411419
412420 return myGen ;
413421}
0 commit comments