File indexing completed on 2025-01-21 01:39:49
0001 #include "GeneratorInterface/ExternalDecays/interface/ExternalDecayDriver.h"
0002
0003 #include "GeneratorInterface/Core/interface/FortranInstance.h"
0004 #include "GeneratorInterface/EvtGenInterface/interface/EvtGenFactory.h"
0005 #include "GeneratorInterface/EvtGenInterface/interface/EvtGenInterfaceBase.h"
0006 #include "GeneratorInterface/TauolaInterface/interface/TauolaFactory.h"
0007 #include "GeneratorInterface/TauolaInterface/interface/TauolaInterfaceBase.h"
0008 #include "GeneratorInterface/PhotosInterface/interface/PhotosFactory.h"
0009 #include "GeneratorInterface/PhotosInterface/interface/PhotosInterfaceBase.h"
0010 #include "HepMC/GenEvent.h"
0011 #include "HepMC3/GenEvent.h"
0012 #include "FWCore/Concurrency/interface/SharedResourceNames.h"
0013
0014 #include "SimDataFormats/GeneratorProducts/interface/LHERunInfoProduct.h"
0015 #include "GeneratorInterface/LHEInterface/interface/LHERunInfo.h"
0016
0017
0018 #include "SimDataFormats/GeneratorProducts/interface/LHEEventProduct.h"
0019 #include "GeneratorInterface/LHEInterface/interface/LHEEvent.h"
0020
0021 using namespace gen;
0022 using namespace edm;
0023
0024 ExternalDecayDriver::ExternalDecayDriver(const ParameterSet& pset, edm::ConsumesCollector iCollector)
0025 : fIsInitialized(false) {
0026 std::vector<std::string> extGenNames = pset.getParameter<std::vector<std::string> >("parameterSets");
0027
0028 for (unsigned int ip = 0; ip < extGenNames.size(); ++ip) {
0029 std::string curSet = extGenNames[ip];
0030 if (curSet == "EvtGen") {
0031 fEvtGenInterface = std::unique_ptr<EvtGenInterfaceBase>(
0032 EvtGenFactory::get()->create("EvtGen", pset.getUntrackedParameter<ParameterSet>(curSet)));
0033 exSharedResources.emplace_back(edm::SharedResourceNames::kEvtGen);
0034 exSharedResources.emplace_back(edm::SharedResourceNames::kPythia6);
0035 exSharedResources.emplace_back(gen::FortranInstance::kFortranInstance);
0036 } else if (curSet == "EvtGen1" || curSet == "EvtGen130") {
0037 fEvtGenInterface = std::unique_ptr<EvtGenInterfaceBase>(
0038 EvtGenFactory::get()->create("EvtGen130", pset.getUntrackedParameter<ParameterSet>(curSet)));
0039 exSharedResources.emplace_back(edm::SharedResourceNames::kEvtGen);
0040 exSharedResources.emplace_back(edm::SharedResourceNames::kPythia8);
0041 exSharedResources.emplace_back(edm::SharedResourceNames::kTauola);
0042 exSharedResources.emplace_back(edm::SharedResourceNames::kPhotos);
0043 exSharedResources.emplace_back(gen::FortranInstance::kFortranInstance);
0044 } else if (curSet == "Tauola" || curSet == "Tauolapp" || curSet == "Tauolapp114") {
0045 fTauolaInterface = std::unique_ptr<TauolaInterfaceBase>(
0046 TauolaFactory::get()->create("Tauolapp114", pset.getUntrackedParameter<ParameterSet>(curSet), iCollector));
0047 exSharedResources.emplace_back(edm::SharedResourceNames::kTauola);
0048 exSharedResources.emplace_back(edm::SharedResourceNames::kPhotos);
0049 } else if (curSet == "Photospp" || curSet == "Photospp356") {
0050 if (!fPhotosInterface) {
0051 fPhotosInterface = std::unique_ptr<PhotosInterfaceBase>(
0052 PhotosFactory::get()->create("Photospp356", pset.getUntrackedParameter<ParameterSet>(curSet)));
0053 exSharedResources.emplace_back(edm::SharedResourceNames::kPhotos);
0054 }
0055 }
0056 }
0057 }
0058
0059 ExternalDecayDriver::~ExternalDecayDriver() = default;
0060
0061 HepMC::GenEvent* ExternalDecayDriver::decay(HepMC::GenEvent* evt, lhef::LHEEvent* lheEvent) {
0062 if (fTauolaInterface)
0063 fTauolaInterface->SetLHE(lheEvent);
0064 return decay(evt);
0065 }
0066
0067 HepMC3::GenEvent* ExternalDecayDriver::decay(HepMC3::GenEvent* evt, lhef::LHEEvent* lheEvent) {
0068 if (fTauolaInterface)
0069 fTauolaInterface->SetLHE(lheEvent);
0070 return decay(evt);
0071 }
0072
0073 HepMC::GenEvent* ExternalDecayDriver::decay(HepMC::GenEvent* evt) {
0074 if (!fIsInitialized)
0075 return evt;
0076
0077 if (fEvtGenInterface) {
0078 evt = fEvtGenInterface->decay(evt);
0079 if (!evt)
0080 return nullptr;
0081 }
0082
0083 if (fTauolaInterface) {
0084 evt = fTauolaInterface->decay(evt);
0085 if (!evt)
0086 return nullptr;
0087 }
0088
0089 if (fPhotosInterface) {
0090 evt = fPhotosInterface->apply(evt);
0091 if (!evt)
0092 return nullptr;
0093 }
0094
0095 return evt;
0096 }
0097
0098 HepMC3::GenEvent* ExternalDecayDriver::decay(HepMC3::GenEvent* evt) {
0099 if (!fIsInitialized)
0100 return evt;
0101
0102 #if 0
0103 if (fEvtGenInterface) {
0104 evt = fEvtGenInterface->decay(evt);
0105 if (!evt)
0106 return nullptr;
0107 }
0108
0109 if (fTauolaInterface) {
0110 evt = fTauolaInterface->decay(evt);
0111 if (!evt)
0112 return nullptr;
0113 }
0114 #endif
0115
0116 if (fPhotosInterface) {
0117 evt = fPhotosInterface->apply(evt);
0118 if (!evt)
0119 return nullptr;
0120 }
0121
0122 return evt;
0123 }
0124
0125 void ExternalDecayDriver::init(const edm::EventSetup& es) {
0126 if (fIsInitialized)
0127 return;
0128
0129 if (fTauolaInterface) {
0130 fTauolaInterface->init(es);
0131 for (std::vector<int>::const_iterator i = fTauolaInterface->operatesOnParticles().begin();
0132 i != fTauolaInterface->operatesOnParticles().end();
0133 i++)
0134 fPDGs.push_back(*i);
0135 }
0136
0137 if (fEvtGenInterface) {
0138 fEvtGenInterface->init();
0139 for (std::vector<int>::const_iterator i = fEvtGenInterface->operatesOnParticles().begin();
0140 i != fEvtGenInterface->operatesOnParticles().end();
0141 i++)
0142 fPDGs.push_back(*i);
0143 for (unsigned int iss = 0; iss < fEvtGenInterface->specialSettings().size(); iss++) {
0144 fSpecialSettings.push_back(fEvtGenInterface->specialSettings()[iss]);
0145 }
0146 }
0147
0148 if (fPhotosInterface) {
0149 fPhotosInterface->init();
0150
0151 if (fPhotosInterface) {
0152 for (unsigned int iss = 0; iss < fPhotosInterface->specialSettings().size(); iss++) {
0153 fSpecialSettings.push_back(fPhotosInterface->specialSettings()[iss]);
0154 }
0155 }
0156 }
0157
0158 fIsInitialized = true;
0159
0160 return;
0161 }
0162
0163 void ExternalDecayDriver::statistics() const {
0164 if (fTauolaInterface)
0165 fTauolaInterface->statistics();
0166 if (fPhotosInterface)
0167 fPhotosInterface->statistics();
0168
0169 return;
0170 }
0171
0172 void ExternalDecayDriver::setRandomEngine(CLHEP::HepRandomEngine* v) {
0173 if (fTauolaInterface)
0174 fTauolaInterface->setRandomEngine(v);
0175 if (fEvtGenInterface)
0176 fEvtGenInterface->setRandomEngine(v);
0177 if (fPhotosInterface)
0178 fPhotosInterface->setRandomEngine(v);
0179 }