Back to home page

Project CMSSW displayed by LXR

 
 

    


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 // LHE Run
0014 #include "SimDataFormats/GeneratorProducts/interface/LHERunInfoProduct.h"
0015 #include "GeneratorInterface/LHEInterface/interface/LHERunInfo.h"
0016 
0017 // LHE Event
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     //   for tauola++
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   // similar for EvtGen if needed
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 }