diff --git a/EventGenerator/inc/ParticleGeneratorTool.hh b/EventGenerator/inc/ParticleGeneratorTool.hh index d983500fd7..e0995f47a4 100644 --- a/EventGenerator/inc/ParticleGeneratorTool.hh +++ b/EventGenerator/inc/ParticleGeneratorTool.hh @@ -13,6 +13,7 @@ #include "Offline/DataProducts/inc/PDGCode.hh" #include "Offline/MCDataProducts/inc/ProcessCode.hh" #include "Offline/MCDataProducts/inc/GenParticle.hh" +#include "Offline/MCDataProducts/inc/SpectrumConfig.hh" #include "Offline/GeneralUtilities/inc/RSNTIO.hh" @@ -35,6 +36,11 @@ namespace mu2e { // This interface should be removed when we retire ntuple-based muon resampling virtual void generate(std::unique_ptr& out, const IO::StoppedParticleF& stop) = 0; + virtual std::unique_ptr spectrumConfig() { + auto config = std::make_unique(); + return config; + } + virtual ~ParticleGeneratorTool() noexcept = default; bool _isPrimary = true; // flag to indicate if this is for primary generation or not diff --git a/EventGenerator/src/AntiProtonGun_module.cc b/EventGenerator/src/AntiProtonGun_module.cc index 9a4666906c..9bff9fe87e 100644 --- a/EventGenerator/src/AntiProtonGun_module.cc +++ b/EventGenerator/src/AntiProtonGun_module.cc @@ -21,6 +21,7 @@ #include "art/Framework/Core/EDProducer.h" #include "art/Framework/Principal/Event.h" +#include "art/Framework/Principal/SubRun.h" #include "art/Framework/Principal/Run.h" #include "art/Framework/Principal/Handle.h" #include "art/Framework/Services/Registry/ServiceHandle.h" @@ -32,6 +33,7 @@ #include "Offline/GlobalConstantsService/inc/ParticleDataList.hh" #include "Offline/DataProducts/inc/PDGCode.hh" #include "Offline/MCDataProducts/inc/GenParticle.hh" +#include "Offline/MCDataProducts/inc/SpectrumConfig.hh" #include "Offline/Mu2eUtilities/inc/RandomUnitSphere.hh" #include "Offline/Mu2eUtilities/inc/CzarneckiSpectrum.hh" #include "Offline/Mu2eUtilities/inc/SimpleSpectrum.hh" @@ -104,6 +106,7 @@ namespace mu2e { explicit AntiProtonGun(const fhicl::ParameterSet& pset); virtual void produce(art::Event& event); virtual void beginRun(art::Run& run); + virtual void endSubRun(art::SubRun& sr) override; }; //================================================================ @@ -119,6 +122,7 @@ namespace mu2e { , firstEvent_(true) { produces(); + produces(); if(verbosityLevel_ > 0) { std::cout<<"AntiProtonGun: producing particle " @@ -232,6 +236,12 @@ namespace mu2e { return total; } // dsigma + //================================================================ + void AntiProtonGun::endSubRun(art::SubRun& sr) { + auto config = std::make_unique(); + sr.put(std::move(config), art::fullSubRun()); + } + //================================================================ void AntiProtonGun::produce(art::Event& event) { diff --git a/EventGenerator/src/AntiprotonResampling_module.cc b/EventGenerator/src/AntiprotonResampling_module.cc index 086a595863..d40818e5ac 100644 --- a/EventGenerator/src/AntiprotonResampling_module.cc +++ b/EventGenerator/src/AntiprotonResampling_module.cc @@ -12,6 +12,7 @@ #include "art/Framework/Core/EDProducer.h" #include "art/Framework/Principal/Event.h" +#include "art/Framework/Principal/SubRun.h" #include "art/Framework/Principal/Run.h" #include "art/Framework/Principal/Handle.h" #include "art/Framework/Services/Registry/ServiceHandle.h" @@ -26,6 +27,7 @@ #include "Offline/MCDataProducts/inc/ProcessCode.hh" #include "Offline/MCDataProducts/inc/SimParticle.hh" #include "Offline/MCDataProducts/inc/StageParticle.hh" +#include "Offline/MCDataProducts/inc/SpectrumConfig.hh" #include "Offline/Mu2eUtilities/inc/simParticleList.hh" #include "TH1.h" @@ -68,6 +70,7 @@ namespace mu2e { explicit AntiprotonResampling(const Parameters& conf); virtual void produce(art::Event& event); + virtual void endSubRun(art::SubRun& sr) override; }; //================================================================ @@ -81,6 +84,7 @@ namespace mu2e { , makeHistograms_(conf().makeHistograms()) { produces(); + produces(); if(verbosity_ > 0) { std::cout<<"AntiprotonResampling: using process code " << processCode_ << std::endl; @@ -147,6 +151,12 @@ namespace mu2e { } } + //================================================================ + void AntiprotonResampling::endSubRun(art::SubRun& sr) { + auto config = std::make_unique(); + sr.put(std::move(config), art::fullSubRun()); + } + //================================================================ } // namespace mu2e diff --git a/EventGenerator/src/CORSIKAEventGenerator_module.cc b/EventGenerator/src/CORSIKAEventGenerator_module.cc index fefa38fbad..4f79e95dc3 100644 --- a/EventGenerator/src/CORSIKAEventGenerator_module.cc +++ b/EventGenerator/src/CORSIKAEventGenerator_module.cc @@ -30,6 +30,7 @@ #include "Offline/GeometryService/inc/Mu2eEnvelope.hh" #include "Offline/MCDataProducts/inc/GenParticle.hh" #include "Offline/MCDataProducts/inc/CosmicLivetime.hh" +#include "Offline/MCDataProducts/inc/SpectrumConfig.hh" #include "Offline/MCDataProducts/inc/GenParticle.hh" #include "Offline/MCDataProducts/inc/SimTimeOffset.hh" #include "Offline/CalorimeterGeom/inc/Calorimeter.hh" @@ -117,6 +118,7 @@ namespace mu2e { { produces(); produces(); + produces(); if (_applyTimeOffset) { _timeOffsetTag = conf().simTimeOffset().value(); } @@ -132,6 +134,9 @@ namespace mu2e { std::unique_ptr livetime(new CosmicLivetime(_primaries, _area, _lowE, _highE, _fluxConstant)); std::cout << *livetime << std::endl; subrun.put(std::move(livetime), art::fullSubRun()); + + auto config = std::make_unique(); + subrun.put(std::move(config), art::fullSubRun()); } void CorsikaEventGenerator::produce(art::Event &evt) diff --git a/EventGenerator/src/CRYEventGenerator_module.cc b/EventGenerator/src/CRYEventGenerator_module.cc index 055ff08838..d6026f6b1a 100644 --- a/EventGenerator/src/CRYEventGenerator_module.cc +++ b/EventGenerator/src/CRYEventGenerator_module.cc @@ -5,6 +5,7 @@ #include "Offline/MCDataProducts/inc/GenParticle.hh" #include "Offline/MCDataProducts/inc/G4BeamlineInfo.hh" #include "Offline/MCDataProducts/inc/CosmicLivetime.hh" +#include "Offline/MCDataProducts/inc/SpectrumConfig.hh" // Particular generators that this code knows about. #include "Offline/SeedService/inc/SeedService.hh" @@ -51,6 +52,7 @@ namespace mu2e { { produces(); produces(); + produces(); } void CryEventGenerator::beginRun( art::Run &run){ @@ -83,6 +85,9 @@ namespace mu2e { cryGen->getLiveTime() )); std::cout << *livetime << std::endl; subrun.put(std::move(livetime), art::fullSubRun()); + + auto config = std::make_unique(); + subrun.put(std::move(config), art::fullSubRun()); } } diff --git a/EventGenerator/src/CaloCalibGun_module.cc b/EventGenerator/src/CaloCalibGun_module.cc index 5d4bcbaee9..9d37b8ca7f 100644 --- a/EventGenerator/src/CaloCalibGun_module.cc +++ b/EventGenerator/src/CaloCalibGun_module.cc @@ -11,6 +11,7 @@ #include "messagefacility/MessageLogger/MessageLogger.h" #include "art/Framework/Core/EDProducer.h" #include "art/Framework/Principal/Event.h" +#include "art/Framework/Principal/SubRun.h" #include "art/Framework/Services/Registry/ServiceHandle.h" // Mu2e includes @@ -23,6 +24,7 @@ #include "Offline/MCDataProducts/inc/GenId.hh" #include "Offline/MCDataProducts/inc/GenParticle.hh" #include "Offline/MCDataProducts/inc/PrimaryParticle.hh" +#include "Offline/MCDataProducts/inc/SpectrumConfig.hh" // Other external includes. #include "CLHEP/Random/RandFlat.h" @@ -65,6 +67,7 @@ namespace mu2e { virtual void produce(art::Event& event) override; virtual void beginRun(art::Run& run) override; + virtual void endSubRun(art::SubRun& sr) override; private: @@ -121,6 +124,7 @@ namespace mu2e { { produces(); produces(); + produces(); } @@ -233,6 +237,11 @@ namespace mu2e { } + void CaloCalibGun::endSubRun(art::SubRun& sr) { + auto config = std::make_unique(); + sr.put(std::move(config), art::fullSubRun()); + } + //================================================================ } // namespace mu2e diff --git a/EventGenerator/src/CaloTBGun_module.cc b/EventGenerator/src/CaloTBGun_module.cc index c06c5a1af4..e1020f0c00 100644 --- a/EventGenerator/src/CaloTBGun_module.cc +++ b/EventGenerator/src/CaloTBGun_module.cc @@ -10,6 +10,7 @@ // Framework includes #include "art/Framework/Core/EDProducer.h" #include "art/Framework/Principal/Event.h" +#include "art/Framework/Principal/SubRun.h" #include "art/Framework/Principal/Run.h" #include "art/Framework/Principal/Handle.h" #include "art/Framework/Services/Registry/ServiceHandle.h" @@ -20,6 +21,7 @@ #include "Offline/GlobalConstantsService/inc/GlobalConstantsHandle.hh" #include "Offline/DataProducts/inc/PDGCode.hh" #include "Offline/MCDataProducts/inc/GenParticle.hh" +#include "Offline/MCDataProducts/inc/SpectrumConfig.hh" #include "Offline/GeometryService/inc/GeomHandle.hh" #include "Offline/GeometryService/inc/DetectorSystem.hh" #include "Offline/CalorimeterGeom/inc/DiskCalorimeter.hh" @@ -34,6 +36,7 @@ namespace mu2e { public: explicit CaloTBGun (const fhicl::ParameterSet& pset); virtual void produce (art::Event& event); + virtual void endSubRun(art::SubRun& sr) override; private: int verbosityLevel_; @@ -54,6 +57,7 @@ namespace mu2e { { produces(); + produces(); if (verbosityLevel_ > 0) std::cout<<"CaloTB gun: shoot! " << std::endl; } @@ -73,6 +77,12 @@ namespace mu2e { event.put(std::move(output)); } + void CaloTBGun::endSubRun(art::SubRun& sr) + { + auto config = std::make_unique(); + sr.put(std::move(config), art::fullSubRun()); + } + } DEFINE_ART_MODULE(mu2e::CaloTBGun) diff --git a/EventGenerator/src/CeEndpoint_module.cc b/EventGenerator/src/CeEndpoint_module.cc index 736416b25d..bbf3439296 100644 --- a/EventGenerator/src/CeEndpoint_module.cc +++ b/EventGenerator/src/CeEndpoint_module.cc @@ -29,6 +29,7 @@ #include "Offline/GlobalConstantsService/inc/PhysicsParams.hh" #include "Offline/Mu2eUtilities/inc/RandomUnitSphere.hh" #include "Offline/DataProducts/inc/PDGCode.hh" +#include "Offline/MCDataProducts/inc/SpectrumConfig.hh" #include "Offline/MCDataProducts/inc/StageParticle.hh" #include "Offline/Mu2eUtilities/inc/simParticleList.hh" @@ -53,6 +54,7 @@ namespace mu2e { explicit CeEndpoint(const Parameters& conf); virtual void produce(art::Event& event) override; + virtual void endSubRun(art::SubRun& sr) override; //---------------------------------------------------------------- private: @@ -93,6 +95,7 @@ namespace mu2e { , pdgId_(conf().pdgId()) { produces(); + produces(); pid = static_cast(pdgId_); if(czMax_ < czMin_ || czMin_ < -1. || czMax_ > 1.) throw cet::exception("BADCONFIG") << "CeEndpoint generator cos(theta_z) range is not defined\n"; @@ -150,6 +153,15 @@ namespace mu2e { event.put(std::move(output)); } + //================================================================ + void CeEndpoint::endSubRun(art::SubRun& sr) { + // Make a summary of how this generator was configured + auto config = std::make_unique(); + config->add_var(SpectrumConfig::RestrictedVar("energy", 1. , endPointEnergy_, endPointEnergy_)); + config->add_var(SpectrumConfig::RestrictedVar("cosz" , (czMax_ - czMin_)/2., czMin_ , czMax_ )); + sr.put(std::move(config), art::fullSubRun()); + } + //================================================================ } // namespace mu2e diff --git a/EventGenerator/src/CryResampler_module.cc b/EventGenerator/src/CryResampler_module.cc index a98c4afd33..b75fd9e4b1 100644 --- a/EventGenerator/src/CryResampler_module.cc +++ b/EventGenerator/src/CryResampler_module.cc @@ -13,6 +13,7 @@ #include "art/Framework/Core/EDProducer.h" #include "art/Framework/Principal/Event.h" +#include "art/Framework/Principal/SubRun.h" #include "art/Framework/Principal/Run.h" #include "art/Framework/Principal/Handle.h" #include "art/Framework/Services/Registry/ServiceHandle.h" @@ -21,6 +22,7 @@ #include "Offline/GlobalConstantsService/inc/GlobalConstantsHandle.hh" #include "Offline/GlobalConstantsService/inc/ParticleDataList.hh" #include "Offline/MCDataProducts/inc/GenParticle.hh" +#include "Offline/MCDataProducts/inc/SpectrumConfig.hh" #include "Offline/GeneralUtilities/inc/RSNTIO.hh" #include "TTree.h" @@ -60,6 +62,7 @@ namespace mu2e { public: explicit CryResampler(const fhicl::ParameterSet& pset); virtual void produce(art::Event& event); + virtual void endSubRun(art::SubRun& sr) override; }; //================================================================ @@ -88,6 +91,7 @@ namespace mu2e { inputFile_ << std::endl; produces(); + produces(); } //================================================================ @@ -119,6 +123,12 @@ namespace mu2e { event.put(std::move(output)); } + //================================================================ + void CryResampler::endSubRun(art::SubRun& sr) { + auto config = std::make_unique(); + sr.put(std::move(config), art::fullSubRun()); + } + //================================================================ } // namespace mu2e diff --git a/EventGenerator/src/DIOGenerator_tool.cc b/EventGenerator/src/DIOGenerator_tool.cc index b63d4bf771..756d3a0555 100644 --- a/EventGenerator/src/DIOGenerator_tool.cc +++ b/EventGenerator/src/DIOGenerator_tool.cc @@ -34,7 +34,8 @@ namespace mu2e { _mass(GlobalConstantsHandle()->particle(_pdgId).mass()), _czmin(conf().czmin()), _czmax(conf().czmax()), - _spectrum(BinnedSpectrum(conf().spectrum.get())) + _spectrum(BinnedSpectrum(conf().spectrum.get())), + _flatSpectrum(conf().spectrum.get().get("spectrumShape", "") == "flat") { if(_czmin > _czmax || _czmin < -1. || _czmax > 1.) throw cet::exception("BADCONFIG") << "DIOGenerator cos(theta_z) range is not defined\n"; @@ -45,6 +46,8 @@ namespace mu2e { } auto fullconfig = conf().spectrum.get(); + _emin = fullconfig.get("elow", _spectrum.getXMin()); + _emax = fullconfig.get("ehi", _spectrum.getXMax()); fullconfig.erase(std::string("elow")); fullconfig.erase(std::string("ehi")); fullconfig.put(std::string("elow"),double(0.0)); @@ -59,6 +62,7 @@ namespace mu2e { double pdfmin = _spectrum.getPDF(0); double binsize = _spectrum.getBinWidth(); fullintegral += 0.5*pdfmin*pmin/binsize; + _energy_fraction = (fullintegral > 0.) ? integral / fullintegral : 0.; std::cout << "Cos(theta_z) min " << _czmin << " max " << _czmax << std::endl; std::cout << "Restricted Spectrum min " << _spectrum.getAbscissa(0) << " max " << _spectrum.getAbscissa(_spectrum.getNbins()-1) << std::endl; std::cout << "Full Spectrum min " << fullspect.getAbscissa(0) << " max " << fullspect.getAbscissa(fullspect.getNbins()-1) << std::endl; @@ -72,6 +76,7 @@ namespace mu2e { std::vector generate() override; void generate(std::unique_ptr& out, const IO::StoppedParticleF& stop) override; + std::unique_ptr spectrumConfig() override; void finishInitialization(art::RandomNumberGenerator::base_engine_t& eng, const std::string&, const bool isPrimary) override { _isPrimary = isPrimary; @@ -87,6 +92,10 @@ namespace mu2e { const double _czmin; const double _czmax; BinnedSpectrum _spectrum; + double _emin; + double _emax; + double _energy_fraction; + bool _flatSpectrum; std::unique_ptr _randomUnitSphere; std::unique_ptr _randSpectrum; @@ -124,5 +133,13 @@ namespace mu2e { } } + std::unique_ptr DIOGenerator::spectrumConfig() { + auto config = std::make_unique(); + config->add_var(SpectrumConfig::RestrictedVar("energy", _energy_fraction , _emin , _emax, + _flatSpectrum ? SpectrumConfig::Type::kFlat : SpectrumConfig::Type::kPhysical)); + config->add_var(SpectrumConfig::RestrictedVar("cosz" , (_czmax - _czmin)/2., _czmin, _czmax)); + return config; + } + } DEFINE_ART_CLASS_TOOL(mu2e::DIOGenerator) diff --git a/EventGenerator/src/EplusFromStoppedPion_module.cc b/EventGenerator/src/EplusFromStoppedPion_module.cc index 6e292b3c7e..96e602d249 100644 --- a/EventGenerator/src/EplusFromStoppedPion_module.cc +++ b/EventGenerator/src/EplusFromStoppedPion_module.cc @@ -15,11 +15,13 @@ #include "Offline/GeneralUtilities/inc/TwoBodyKinematics.hh" #include "Offline/Mu2eUtilities/inc/RandomUnitSphere.hh" #include "Offline/MCDataProducts/inc/GenParticle.hh" +#include "Offline/MCDataProducts/inc/SpectrumConfig.hh" #include "Offline/SeedService/inc/SeedService.hh" // art includes. #include "art/Framework/Core/EDProducer.h" #include "art/Framework/Principal/Event.h" +#include "art/Framework/Principal/SubRun.h" #include "art/Framework/Principal/Handle.h" #include "art_root_io/TFileService.h" #include "art/Framework/Services/Registry/ServiceHandle.h" @@ -45,6 +47,7 @@ namespace mu2e { void beginRun(art::Run& run); void produce( art::Event& event); + void endSubRun(art::SubRun& sr) override; private: @@ -109,6 +112,7 @@ namespace mu2e { // What does this module produce? produces(); + produces(); } @@ -212,6 +216,11 @@ namespace mu2e { } // end of ::analyze. + void EplusFromStoppedPion::endSubRun(art::SubRun& sr) { + auto config = std::make_unique(); + sr.put(std::move(config), art::fullSubRun()); + } + } using mu2e::EplusFromStoppedPion; diff --git a/EventGenerator/src/EventGenerator_module.cc b/EventGenerator/src/EventGenerator_module.cc index 6439943a7d..83db7a6f9c 100644 --- a/EventGenerator/src/EventGenerator_module.cc +++ b/EventGenerator/src/EventGenerator_module.cc @@ -32,6 +32,7 @@ #include "Offline/MCDataProducts/inc/GenId.hh" #include "Offline/MCDataProducts/inc/GenParticle.hh" #include "Offline/MCDataProducts/inc/G4BeamlineInfo.hh" +#include "Offline/MCDataProducts/inc/SpectrumConfig.hh" // Particular generators that this code knows about. #include "Offline/EventGenerator/inc/CosmicDYB.hh" @@ -43,6 +44,7 @@ // Includes from art and its toolchain. #include "art/Framework/Core/EDProducer.h" #include "art/Framework/Principal/Event.h" +#include "art/Framework/Principal/SubRun.h" #include "art/Framework/Services/Registry/ServiceHandle.h" #include "art/Framework/Principal/Handle.h" #include "fhiclcpp/ParameterSet.h" @@ -70,6 +72,7 @@ namespace mu2e { virtual void produce (art::Event& e); virtual void beginRun(art::Run& r); + virtual void endSubRun(art::SubRun& sr) override; private: @@ -118,6 +121,7 @@ namespace mu2e { _engine{createEngine(art::ServiceHandle{}->getSeed())} { produces(); + produces(); if ( _produceG4blInfo ){ produces(); } @@ -210,6 +214,11 @@ namespace mu2e { } + void EventGenerator::endSubRun(art::SubRun& sr){ + auto config = std::make_unique(); + sr.put(std::move(config), art::fullSubRun()); + } + // Look for inconsistencies in the config file. void EventGenerator::checkConfig( const SimpleConfig& config){ diff --git a/EventGenerator/src/ExtMonFNALBoxGenerator_module.cc b/EventGenerator/src/ExtMonFNALBoxGenerator_module.cc index 4860a31aaa..e95adcc132 100644 --- a/EventGenerator/src/ExtMonFNALBoxGenerator_module.cc +++ b/EventGenerator/src/ExtMonFNALBoxGenerator_module.cc @@ -24,6 +24,7 @@ #include "art/Framework/Core/EDProducer.h" #include "art/Framework/Principal/Event.h" +#include "art/Framework/Principal/SubRun.h" #include "art/Framework/Principal/Run.h" #include "art/Framework/Principal/Handle.h" #include "art/Framework/Services/Registry/ServiceHandle.h" @@ -38,6 +39,7 @@ #include "Offline/DataProducts/inc/PDGCode.hh" #include "Offline/DataProducts/inc/VirtualDetectorId.hh" #include "Offline/MCDataProducts/inc/GenParticle.hh" +#include "Offline/MCDataProducts/inc/SpectrumConfig.hh" #include "Offline/MCDataProducts/inc/MARSInfo.hh" #include "Offline/MCDataProducts/inc/GenParticleMARSAssns.hh" @@ -157,6 +159,7 @@ namespace mu2e { explicit ExtMonFNALBoxGenerator(const fhicl::ParameterSet& pset); virtual void produce(art::Event& event); virtual void beginRun(art::Run& run); + virtual void endSubRun(art::SubRun& sr) override; }; //================================================================ @@ -190,6 +193,7 @@ namespace mu2e { produces(); produces(); produces(); + produces(); if(inputFiles_.empty()) { throw cet::exception("BADCONFIG")<<"Error: no inputFiles"; @@ -651,6 +655,11 @@ namespace mu2e { muonTime); } + void ExtMonFNALBoxGenerator::endSubRun(art::SubRun& sr) { + auto config = std::make_unique(); + sr.put(std::move(config), art::fullSubRun()); + } + //================================================================ } diff --git a/EventGenerator/src/ExtMonFNALGun_module.cc b/EventGenerator/src/ExtMonFNALGun_module.cc index 09b880f633..48ab2d6afd 100644 --- a/EventGenerator/src/ExtMonFNALGun_module.cc +++ b/EventGenerator/src/ExtMonFNALGun_module.cc @@ -11,12 +11,14 @@ #include "art/Framework/Core/EDProducer.h" #include "art/Framework/Principal/Event.h" +#include "art/Framework/Principal/SubRun.h" #include "art/Framework/Principal/Handle.h" #include "art/Framework/Services/Registry/ServiceHandle.h" #include "fhiclcpp/types/Sequence.h" #include "Offline/SeedService/inc/SeedService.hh" #include "Offline/MCDataProducts/inc/GenParticle.hh" +#include "Offline/MCDataProducts/inc/SpectrumConfig.hh" #include "Offline/EventGenerator/inc/ExtMonFNALGunImpl.hh" @@ -31,6 +33,7 @@ namespace mu2e { void produce(art::Event& event) override; void beginRun(art::Run& run) override; + void endSubRun(art::SubRun& sr) override; public: struct Config { @@ -52,6 +55,7 @@ namespace mu2e { , engine_{createEngine(art::ServiceHandle{}->getSeed())} { produces(); + produces(); if(conf_.empty()) { throw cet::exception("BADCONFIG")<<"Error: no ExtMon guns defined.\n"; } @@ -72,6 +76,11 @@ namespace mu2e { event.put(std::move(output)); } + void ExtMonFNALGun::endSubRun(art::SubRun& sr) { + auto config = std::make_unique(); + sr.put(std::move(config), art::fullSubRun()); + } + } // namespace mu2e DEFINE_ART_MODULE(mu2e::ExtMonFNALGun) diff --git a/EventGenerator/src/ExtMonFNALRoomGenerator_module.cc b/EventGenerator/src/ExtMonFNALRoomGenerator_module.cc index cc4f3c35b3..1662a74d13 100644 --- a/EventGenerator/src/ExtMonFNALRoomGenerator_module.cc +++ b/EventGenerator/src/ExtMonFNALRoomGenerator_module.cc @@ -24,6 +24,7 @@ #include "art/Framework/Core/EDProducer.h" #include "art/Framework/Principal/Event.h" +#include "art/Framework/Principal/SubRun.h" #include "art/Framework/Principal/Run.h" #include "art/Framework/Principal/Handle.h" #include "art/Framework/Services/Registry/ServiceHandle.h" @@ -41,6 +42,7 @@ #include "Offline/GlobalConstantsService/inc/MassCache.hh" #include "Offline/DataProducts/inc/PDGCode.hh" #include "Offline/MCDataProducts/inc/GenParticle.hh" +#include "Offline/MCDataProducts/inc/SpectrumConfig.hh" #include "Offline/MCDataProducts/inc/MARSInfo.hh" #include "Offline/MCDataProducts/inc/GenParticleMARSAssns.hh" @@ -114,6 +116,7 @@ namespace mu2e { explicit ExtMonFNALRoomGenerator(const fhicl::ParameterSet& pset); virtual void produce(art::Event& event); virtual void beginRun(art::Run& run); + virtual void endSubRun(art::SubRun& sr) override; }; //================================================================ @@ -140,6 +143,7 @@ namespace mu2e { produces(); produces(); produces(); + produces(); if(inputFiles_.empty()) { throw cet::exception("BADCONFIG")<<"Error: no inputFiles\n"; @@ -367,6 +371,11 @@ namespace mu2e { return GenParticle(PDGCode::type(pp.pdgId), GenId::MARS, posMu2e, momMu2e, pp.time); } + void ExtMonFNALRoomGenerator::endSubRun(art::SubRun& sr) { + auto config = std::make_unique(); + sr.put(std::move(config), art::fullSubRun()); + } + //================================================================ } } // namespace mu2e diff --git a/EventGenerator/src/FlatGeneratorFromStoppedMuon_module.cc b/EventGenerator/src/FlatGeneratorFromStoppedMuon_module.cc index 7ba477b5d0..fa5dbd7d99 100644 --- a/EventGenerator/src/FlatGeneratorFromStoppedMuon_module.cc +++ b/EventGenerator/src/FlatGeneratorFromStoppedMuon_module.cc @@ -21,6 +21,7 @@ #include "art/Framework/Core/EDProducer.h" #include "art/Framework/Principal/Event.h" +#include "art/Framework/Principal/SubRun.h" #include "art/Framework/Services/Registry/ServiceHandle.h" #include "art_root_io/TFileService.h" #include "Offline/SeedService/inc/SeedService.hh" @@ -30,6 +31,7 @@ #include "Offline/Mu2eUtilities/inc/RandomUnitSphere.hh" #include "Offline/DataProducts/inc/PDGCode.hh" #include "Offline/MCDataProducts/inc/StageParticle.hh" +#include "Offline/MCDataProducts/inc/SpectrumConfig.hh" #include "Offline/Mu2eUtilities/inc/simParticleList.hh" #include @@ -55,6 +57,7 @@ namespace mu2e { explicit FlatGeneratorFromStoppedMuon(const Parameters& conf); virtual void produce(art::Event& event) override; + virtual void endSubRun(art::SubRun& sr) override; //---------------------------------------------------------------- private: @@ -75,6 +78,8 @@ namespace mu2e { ProcessCode process; int pdgId_; PDGCode::type pid; + double czMin_; + double czMax_; }; //================================================================ @@ -91,9 +96,12 @@ namespace mu2e { , randExp_{eng_} , randomUnitSphere_{eng_, conf().czMin(), conf().czMax()} , pdgId_(conf().pdgId()) + , czMin_(conf().czMin()) + , czMax_(conf().czMax()) { produces(); + produces(); pid = static_cast(pdgId_); if (pid == PDGCode::e_minus) { process = ProcessCode::mu2eFlateMinus; } @@ -138,6 +146,14 @@ namespace mu2e { event.put(std::move(output)); } + //================================================================ + void FlatGeneratorFromStoppedMuon::endSubRun(art::SubRun& sr) { + auto config = std::make_unique(); + config->add_var(SpectrumConfig::RestrictedVar("momentum", 1., startMom_, endMom_, SpectrumConfig::Type::kFlat)); + config->add_var(SpectrumConfig::RestrictedVar("cosz", (czMax_ - czMin_)/2., czMin_, czMax_)); + sr.put(std::move(config), art::fullSubRun()); + } + //================================================================ } // namespace mu2e diff --git a/EventGenerator/src/FromSimParticleCompact_module.cc b/EventGenerator/src/FromSimParticleCompact_module.cc index 888d3981d4..f32f67c74d 100644 --- a/EventGenerator/src/FromSimParticleCompact_module.cc +++ b/EventGenerator/src/FromSimParticleCompact_module.cc @@ -20,6 +20,7 @@ #include "art/Framework/Core/EDProducer.h" #include "art/Framework/Principal/Event.h" +#include "art/Framework/Principal/SubRun.h" #include "art/Framework/Principal/Run.h" #include "art/Framework/Principal/Handle.h" #include "art/Framework/Services/Registry/ServiceHandle.h" @@ -31,6 +32,7 @@ #include "Offline/GlobalConstantsService/inc/ParticleDataList.hh" #include "Offline/DataProducts/inc/PDGCode.hh" #include "Offline/MCDataProducts/inc/GenParticle.hh" +#include "Offline/MCDataProducts/inc/SpectrumConfig.hh" #include "Offline/Mu2eUtilities/inc/RandomUnitSphere.hh" #include "Offline/Mu2eUtilities/inc/CzarneckiSpectrum.hh" #include "Offline/Mu2eUtilities/inc/SimpleSpectrum.hh" @@ -99,6 +101,7 @@ namespace mu2e { explicit FromSimParticleCompact(const fhicl::ParameterSet& pset); virtual void produce(art::Event& event); virtual void beginRun(art::Run& run); + virtual void endSubRun(art::SubRun& sr) override; }; //================================================================ @@ -115,6 +118,7 @@ namespace mu2e { , firstEvent_(true) { produces(); + produces(); if(inputFiles_.empty()) { throw cet::exception("BADCONFIG")<<"Error: no inputFiles"; } @@ -239,6 +243,12 @@ namespace mu2e { event.put(std::move(output)); } + //================================================================ + void FromSimParticleCompact::endSubRun(art::SubRun& sr) { + auto config = std::make_unique(); + sr.put(std::move(config), art::fullSubRun()); + } + //================================================================ } // namespace mu2e diff --git a/EventGenerator/src/FromStepPointMCsRotateTarget_module.cc b/EventGenerator/src/FromStepPointMCsRotateTarget_module.cc index 9ec8ffc6e0..c26bbf377d 100644 --- a/EventGenerator/src/FromStepPointMCsRotateTarget_module.cc +++ b/EventGenerator/src/FromStepPointMCsRotateTarget_module.cc @@ -13,6 +13,7 @@ #include "art/Framework/Core/EDProducer.h" #include "art/Framework/Principal/Event.h" +#include "art/Framework/Principal/SubRun.h" #include "art/Framework/Principal/Handle.h" #include "art/Framework/Services/Registry/ServiceHandle.h" #include "art/Framework/Services/Optional/RandomNumberGenerator.h" @@ -26,6 +27,7 @@ #include "Offline/GlobalConstantsService/inc/GlobalConstantsHandle.hh" #include "Offline/GlobalConstantsService/inc/ParticleDataList.hh" #include "Offline/MCDataProducts/inc/GenParticle.hh" +#include "Offline/MCDataProducts/inc/SpectrumConfig.hh" #include "Offline/MCDataProducts/inc/StepPointMC.hh" #include "Offline/MCDataProducts/inc/GenParticleSPMHistory.hh" #include "Offline/SeedService/inc/SeedService.hh" @@ -66,6 +68,7 @@ namespace mu2e { public: explicit FromStepPointMCsRotateTarget(fhicl::ParameterSet const& pset); void produce(art::Event& event) override; + void endSubRun(art::SubRun& sr) override; private: typedef std::vector InputTags; @@ -100,6 +103,7 @@ namespace mu2e { { produces(); produces(); + produces(); typedef std::vector Strings; Strings tagstr(pset.get("inputTags", Strings())); @@ -220,6 +224,11 @@ namespace mu2e { event.put(std::move(output)); event.put(std::move(history)); } + + void FromStepPointMCsRotateTarget::endSubRun(art::SubRun& sr) { + auto config = std::make_unique(); + sr.put(std::move(config), art::fullSubRun()); + } } // namespace mu2e DEFINE_ART_MODULE(mu2e::FromStepPointMCsRotateTarget) diff --git a/EventGenerator/src/FromStepPointMCs_module.cc b/EventGenerator/src/FromStepPointMCs_module.cc index 76dcac241e..5f7ec06cfa 100644 --- a/EventGenerator/src/FromStepPointMCs_module.cc +++ b/EventGenerator/src/FromStepPointMCs_module.cc @@ -11,6 +11,7 @@ #include "art/Framework/Core/EDProducer.h" #include "art/Framework/Principal/Event.h" +#include "art/Framework/Principal/SubRun.h" #include "art/Framework/Principal/Handle.h" #include "art/Framework/Services/Registry/ServiceHandle.h" #include "canvas/Persistency/Common/Assns.h" @@ -18,6 +19,7 @@ #include "Offline/GlobalConstantsService/inc/GlobalConstantsHandle.hh" #include "Offline/GlobalConstantsService/inc/ParticleDataList.hh" #include "Offline/MCDataProducts/inc/GenParticle.hh" +#include "Offline/MCDataProducts/inc/SpectrumConfig.hh" #include "Offline/MCDataProducts/inc/StepPointMC.hh" #include "Offline/MCDataProducts/inc/GenParticleSPMHistory.hh" @@ -52,6 +54,7 @@ namespace mu2e { public: explicit FromStepPointMCs(fhicl::ParameterSet const& pset); void produce(art::Event& event) override; + void endSubRun(art::SubRun& sr) override; private: typedef std::vector InputTags; @@ -68,6 +71,7 @@ namespace mu2e { { produces(); produces(); + produces(); typedef std::vector Strings; Strings tagstr(pset.get("inputTags", Strings())); @@ -144,6 +148,11 @@ namespace mu2e { event.put(std::move(output)); event.put(std::move(history)); } + + void FromStepPointMCs::endSubRun(art::SubRun& sr) { + auto config = std::make_unique(); + sr.put(std::move(config), art::fullSubRun()); + } } // namespace mu2e DEFINE_ART_MODULE(mu2e::FromStepPointMCs) diff --git a/EventGenerator/src/G4BeamlineGenerator_module.cc b/EventGenerator/src/G4BeamlineGenerator_module.cc index 390e9518cc..f41c2289e4 100644 --- a/EventGenerator/src/G4BeamlineGenerator_module.cc +++ b/EventGenerator/src/G4BeamlineGenerator_module.cc @@ -14,11 +14,13 @@ #include "Offline/MCDataProducts/inc/G4BeamlineInfo.hh" #include "Offline/MCDataProducts/inc/GenId.hh" #include "Offline/MCDataProducts/inc/GenParticle.hh" +#include "Offline/MCDataProducts/inc/SpectrumConfig.hh" #include "Offline/SeedService/inc/SeedService.hh" // Includes from art and its toolchain. #include "art/Framework/Core/EDProducer.h" #include "art/Framework/Principal/Event.h" +#include "art/Framework/Principal/SubRun.h" #include "art/Framework/Services/Registry/ServiceHandle.h" #include "art/Framework/Principal/Handle.h" #include "fhiclcpp/ParameterSet.h" @@ -49,6 +51,7 @@ namespace mu2e { virtual void produce (art::Event& e); virtual void beginRun(art::Run& r); + virtual void endSubRun(art::SubRun& sr) override; private: @@ -88,6 +91,7 @@ namespace mu2e { { produces(); produces(); + produces(); } @@ -141,6 +145,11 @@ namespace mu2e { } + void G4BeamlineGenerator::endSubRun(art::SubRun& sr){ + auto config = std::make_unique(); + sr.put(std::move(config), art::fullSubRun()); + } + } diff --git a/EventGenerator/src/GammaConvFlat_module.cc b/EventGenerator/src/GammaConvFlat_module.cc index 2a797d340f..3c9a96e2d0 100644 --- a/EventGenerator/src/GammaConvFlat_module.cc +++ b/EventGenerator/src/GammaConvFlat_module.cc @@ -16,6 +16,7 @@ #include #include #include +#include #include "CLHEP/Vector/LorentzVector.h" #include "CLHEP/Random/RandFlat.h" @@ -25,11 +26,13 @@ #include "art/Framework/Core/EDProducer.h" #include "art/Framework/Principal/Event.h" +#include "art/Framework/Principal/SubRun.h" #include "art/Framework/Services/Registry/ServiceHandle.h" #include "Offline/SeedService/inc/SeedService.hh" #include "Offline/GlobalConstantsService/inc/GlobalConstantsHandle.hh" #include "Offline/GlobalConstantsService/inc/ParticleDataList.hh" #include "Offline/DataProducts/inc/PDGCode.hh" +#include "Offline/MCDataProducts/inc/SpectrumConfig.hh" #include "Offline/MCDataProducts/inc/StageParticle.hh" #include "Offline/Mu2eUtilities/inc/simParticleList.hh" @@ -49,6 +52,7 @@ namespace mu2e { explicit GammaConvFlat(const Parameters& conf); virtual void produce(art::Event& event) override; + virtual void endSubRun(art::SubRun& sr) override; //---------------------------------------------------------------- private: @@ -74,6 +78,7 @@ namespace mu2e { , randFlat_{eng_} { produces(); + produces(); process = ProcessCode::mu2eGammaConversion; } @@ -148,6 +153,15 @@ namespace mu2e { event.put(std::move(output)); } + void GammaConvFlat::endSubRun(art::SubRun& sr) { + auto config = std::make_unique(); + config->add_var(SpectrumConfig::RestrictedVar("energy", 1., + std::numeric_limits::lowest(), + std::numeric_limits::max(), + SpectrumConfig::Type::kFlat)); + sr.put(std::move(config), art::fullSubRun()); + } + //================================================================ } // namespace mu2e diff --git a/EventGenerator/src/GammaConversion_module.cc b/EventGenerator/src/GammaConversion_module.cc index 2ca745e2e4..704e0876d1 100644 --- a/EventGenerator/src/GammaConversion_module.cc +++ b/EventGenerator/src/GammaConversion_module.cc @@ -18,12 +18,14 @@ #include "art/Framework/Core/EDProducer.h" #include "art/Framework/Principal/Event.h" +#include "art/Framework/Principal/SubRun.h" #include "art/Framework/Services/Registry/ServiceHandle.h" #include "art_root_io/TFileService.h" #include "Offline/SeedService/inc/SeedService.hh" #include "Offline/DataProducts/inc/PDGCode.hh" #include "Offline/MCDataProducts/inc/ProcessCode.hh" +#include "Offline/MCDataProducts/inc/SpectrumConfig.hh" #include "Offline/MCDataProducts/inc/StageParticle.hh" #include "Offline/Mu2eUtilities/inc/simParticleList.hh" #include "Offline/Mu2eUtilities/inc/GammaPairConversionSpectrum.hh" @@ -52,6 +54,7 @@ namespace mu2e { explicit GammaConversion(const Parameters& conf); virtual void produce(art::Event& event) override; + virtual void endSubRun(art::SubRun& sr) override; //---------------------------------------------------------------- private: @@ -92,6 +95,7 @@ namespace mu2e { , makeHistograms_(conf().makeHistograms()) { produces(); + produces(); // make histograms of the conversion kinematics if requested if(makeHistograms_) { @@ -201,6 +205,11 @@ namespace mu2e { event.put(std::move(output)); } + void GammaConversion::endSubRun(art::SubRun& sr) { + auto config = std::make_unique(); + sr.put(std::move(config), art::fullSubRun()); + } + //================================================================ } // namespace mu2e diff --git a/EventGenerator/src/InFlightParticleSampler_module.cc b/EventGenerator/src/InFlightParticleSampler_module.cc index f475b39989..2dd00ca2db 100644 --- a/EventGenerator/src/InFlightParticleSampler_module.cc +++ b/EventGenerator/src/InFlightParticleSampler_module.cc @@ -19,6 +19,7 @@ #include "art/Framework/Core/EDProducer.h" #include "art/Framework/Principal/Event.h" +#include "art/Framework/Principal/SubRun.h" #include "art/Framework/Principal/Run.h" #include "art/Framework/Principal/Handle.h" #include "art/Framework/Services/Registry/ServiceHandle.h" @@ -29,6 +30,7 @@ #include "Offline/GlobalConstantsService/inc/GlobalConstantsHandle.hh" #include "Offline/GlobalConstantsService/inc/ParticleDataList.hh" #include "Offline/MCDataProducts/inc/GenParticle.hh" +#include "Offline/MCDataProducts/inc/SpectrumConfig.hh" #include "Offline/Mu2eUtilities/inc/RootTreeSampler.hh" #include "Offline/GeneralUtilities/inc/RSNTIO.hh" @@ -64,6 +66,7 @@ namespace mu2e { explicit InFlightParticleSampler(const Parameters& conf); virtual void produce(art::Event& event); + virtual void endSubRun(art::SubRun& sr) override; }; //================================================================ InFlightParticleSampler::InFlightParticleSampler(const Parameters& conf) @@ -76,6 +79,7 @@ namespace mu2e { , verbosityLevel_(conf().verbosityLevel()) { produces(); + produces(); if(verbosityLevel_ > 0) { std::cout<<"InFlightParticleSampler: using = " @@ -110,6 +114,12 @@ namespace mu2e { event.put(std::move(output)); } + //================================================================ + void InFlightParticleSampler::endSubRun(art::SubRun& sr) { + auto config = std::make_unique(); + sr.put(std::move(config), art::fullSubRun()); + } + //================================================================ } // namespace mu2e diff --git a/EventGenerator/src/LeadingLog_module.cc b/EventGenerator/src/LeadingLog_module.cc index 422a152d7b..6a21590c0f 100644 --- a/EventGenerator/src/LeadingLog_module.cc +++ b/EventGenerator/src/LeadingLog_module.cc @@ -21,6 +21,7 @@ #include "art/Framework/Core/EDProducer.h" #include "art/Framework/Principal/Event.h" +#include "art/Framework/Principal/SubRun.h" #include "art/Framework/Services/Registry/ServiceHandle.h" #include "art/Utilities/make_tool.h" @@ -29,6 +30,7 @@ #include "Offline/GlobalConstantsService/inc/ParticleDataList.hh" #include "Offline/GlobalConstantsService/inc/PhysicsParams.hh" #include "Offline/DataProducts/inc/PDGCode.hh" +#include "Offline/MCDataProducts/inc/SpectrumConfig.hh" #include "Offline/MCDataProducts/inc/StageParticle.hh" #include "Offline/Mu2eUtilities/inc/simParticleList.hh" #include "Offline/EventGenerator/inc/ParticleGeneratorTool.hh" @@ -60,6 +62,7 @@ namespace mu2e { explicit LeadingLog(const Parameters& conf); virtual void produce(art::Event& event) override; + virtual void endSubRun(art::SubRun& sr) override; void addParticles(StageParticleCollection* output, art::Ptr mustop, double time); //---------------------------------------------------------------- @@ -97,6 +100,7 @@ namespace mu2e { , spectrum_(BinnedSpectrum(conf().spectrum.get())) { produces(); + produces(); pid_ = static_cast(pdgId_); if (pid_ == PDGCode::e_minus) { @@ -153,6 +157,11 @@ namespace mu2e { } + void LeadingLog::endSubRun(art::SubRun& sr) { + auto config = std::make_unique(); + sr.put(std::move(config), art::fullSubRun()); + } + //================================================================ } // namespace mu2e diff --git a/EventGenerator/src/Mu2eXGenerator_tool.cc b/EventGenerator/src/Mu2eXGenerator_tool.cc index 2e840a178b..fc92ff2259 100644 --- a/EventGenerator/src/Mu2eXGenerator_tool.cc +++ b/EventGenerator/src/Mu2eXGenerator_tool.cc @@ -30,7 +30,11 @@ namespace mu2e { explicit Mu2eXGenerator(Parameters const& conf) : _pdgId(PDGCode::e_minus), _mass(GlobalConstantsHandle()->particle(_pdgId).mass()), - _spectrum(BinnedSpectrum(conf().spectrum.get())) + _spectrum(BinnedSpectrum(conf().spectrum.get())), + _emin(0.), + _emax(0.), + _energy_fraction(1.), + _flatSpectrum(conf().spectrum.get().get("spectrumShape", "") == "flat") { // compute normalization double integral(0.0); @@ -38,6 +42,9 @@ namespace mu2e { integral += _spectrum.getPDF(ibin); } + _emin = _spectrum.getXMin(); + _emax = _spectrum.getXMax(); + auto fullconfig = conf().spectrum.get(); fullconfig.erase(std::string("elow")); fullconfig.erase(std::string("ehi")); @@ -53,16 +60,18 @@ namespace mu2e { double pdfmin = _spectrum.getPDF(0); double binsize = _spectrum.getBinWidth(); fullintegral += 0.5*pdfmin*pmin/binsize; + _energy_fraction = (fullintegral > 0.) ? integral/fullintegral : 0.; std::cout << "Restricted Spectrum min " << _spectrum.getAbscissa(0) << " max " << _spectrum.getAbscissa(_spectrum.getNbins()-1) << std::endl; std::cout << "Full Spectrum min " << fullspect.getAbscissa(0) << " max " << fullspect.getAbscissa(fullspect.getNbins()-1) << std::endl; std::cout << "Restricted Spectrum integral " << integral << std::endl; std::cout << "Full Spectrum integral " << fullintegral << std::endl; - std::cout << "Sampled spectrum fraction " << integral/fullintegral << std::endl; + std::cout << "Sampled spectrum fraction " << _energy_fraction << std::endl; } std::vector generate() override; void generate(std::unique_ptr& out, const IO::StoppedParticleF& stop) override; + std::unique_ptr spectrumConfig() override; void finishInitialization(art::RandomNumberGenerator::base_engine_t& eng, const std::string&, const bool isPrimary) override { _isPrimary = isPrimary; @@ -75,6 +84,10 @@ namespace mu2e { double _mass; BinnedSpectrum _spectrum; + double _emin; + double _emax; + double _energy_fraction; + bool _flatSpectrum; std::unique_ptr _randomUnitSphere; std::unique_ptr _randSpectrum; @@ -108,5 +121,12 @@ namespace mu2e { } } + std::unique_ptr Mu2eXGenerator::spectrumConfig() { + auto config = std::make_unique(); + config->add_var(SpectrumConfig::RestrictedVar("energy", _energy_fraction, _emin, _emax, + _flatSpectrum ? SpectrumConfig::Type::kFlat : SpectrumConfig::Type::kPhysical)); + return config; + } + } DEFINE_ART_CLASS_TOOL(mu2e::Mu2eXGenerator) diff --git a/EventGenerator/src/MuCap1809keVGammaGenerator_tool.cc b/EventGenerator/src/MuCap1809keVGammaGenerator_tool.cc index 9f1b38bd30..775d0b0b41 100644 --- a/EventGenerator/src/MuCap1809keVGammaGenerator_tool.cc +++ b/EventGenerator/src/MuCap1809keVGammaGenerator_tool.cc @@ -36,6 +36,7 @@ namespace mu2e { std::vector generate() override; void generate(std::unique_ptr& out, const IO::StoppedParticleF& stop) override; + std::unique_ptr spectrumConfig() override; void finishInitialization(art::RandomNumberGenerator::base_engine_t& eng, const std::string& material, const bool isPrimary) override { _isPrimary = isPrimary; @@ -84,5 +85,12 @@ namespace mu2e { } } + std::unique_ptr MuCap1809keVGammaGenerator::spectrumConfig() { + auto config = std::make_unique(); + config->add_var(SpectrumConfig::RestrictedVar("energy", 1., _energy, _energy)); + config->add_var(SpectrumConfig::RestrictedVar("cosz", (_czMax - _czMin)/2., _czMin, _czMax)); + return config; + } + } DEFINE_ART_CLASS_TOOL(mu2e::MuCap1809keVGammaGenerator) diff --git a/EventGenerator/src/MuCapDeuteronGenerator_tool.cc b/EventGenerator/src/MuCapDeuteronGenerator_tool.cc index d2ec2dfc07..fc0f1614a0 100644 --- a/EventGenerator/src/MuCapDeuteronGenerator_tool.cc +++ b/EventGenerator/src/MuCapDeuteronGenerator_tool.cc @@ -38,13 +38,17 @@ namespace mu2e { _spectrum(BinnedSpectrum(conf().spectrum.get())), _spectrumVariable(parseSpectrumVar(conf().spectrumVariable())), _czMin(conf().czMin()), - _czMax(conf().czMax()) + _czMax(conf().czMax()), + _spectrumXMin(_spectrum.getXMin()), + _spectrumXMax(_spectrum.getXMax()), + _flatSpectrum(conf().spectrum.get().get("spectrumShape", "") == "flat") { if(_czMin < -1. || _czMax > 1. || _czMin > _czMax) throw cet::exception("BADCONFIG") << "Cos(theta_z) range unphysical: " << _czMin << " - " << _czMax; } std::vector generate() override; void generate(std::unique_ptr& out, const IO::StoppedParticleF& stop) override; + std::unique_ptr spectrumConfig() override; void finishInitialization(art::RandomNumberGenerator::base_engine_t& eng, const std::string& material, const bool isPrimary) override { _isPrimary = isPrimary; @@ -64,6 +68,9 @@ namespace mu2e { SpectrumVar _spectrumVariable; double _czMin; double _czMax; + double _spectrumXMin; + double _spectrumXMax; + bool _flatSpectrum; std::unique_ptr _randomPoissonQ; std::unique_ptr _randomUnitSphere; @@ -80,7 +87,7 @@ namespace mu2e { switch(_spectrumVariable) { case TOTAL_ENERGY : break; - case KINETIC_ENERY : energy += _mass; break; + case KINETIC_ENERGY : energy += _mass; break; case MOMENTUM : energy = sqrt(energy*energy+_mass*_mass); break; } @@ -105,5 +112,22 @@ namespace mu2e { stop.t); } } + + std::unique_ptr MuCapDeuteronGenerator::spectrumConfig() { + auto config = std::make_unique(); + + std::string spectrumVarName("energy"); + switch(_spectrumVariable) { + case KINETIC_ENERGY: spectrumVarName = "kineticEnergy"; break; + case MOMENTUM: spectrumVarName = "momentum"; break; + default: spectrumVarName = "energy"; break; + } + + // FIXME: calculate the spectrum fraction simulated + config->add_var(SpectrumConfig::RestrictedVar(spectrumVarName, 1., _spectrumXMin, _spectrumXMax, + _flatSpectrum ? SpectrumConfig::Type::kFlat : SpectrumConfig::Type::kPhysical)); + config->add_var(SpectrumConfig::RestrictedVar("cosz", (_czMax - _czMin)/2., _czMin, _czMax)); + return config; + } } DEFINE_ART_CLASS_TOOL(mu2e::MuCapDeuteronGenerator) diff --git a/EventGenerator/src/MuCapNeutronGenerator_tool.cc b/EventGenerator/src/MuCapNeutronGenerator_tool.cc index d5dcdd3b19..042d93c977 100644 --- a/EventGenerator/src/MuCapNeutronGenerator_tool.cc +++ b/EventGenerator/src/MuCapNeutronGenerator_tool.cc @@ -37,13 +37,17 @@ namespace mu2e { _spectrum(BinnedSpectrum(conf().spectrum.get())), _spectrumVariable(parseSpectrumVar(conf().spectrumVariable())), _czMin(conf().czMin()), - _czMax(conf().czMax()) + _czMax(conf().czMax()), + _spectrumXMin(_spectrum.getXMin()), + _spectrumXMax(_spectrum.getXMax()), + _flatSpectrum(conf().spectrum.get().get("spectrumShape", "") == "flat") { if(_czMin < -1. || _czMax > 1. || _czMin > _czMax) throw cet::exception("BADCONFIG") << "Cos(theta_z) range unphysical: " << _czMin << " - " << _czMax; } std::vector generate() override; void generate(std::unique_ptr& out, const IO::StoppedParticleF& stop) override; + std::unique_ptr spectrumConfig() override; void finishInitialization(art::RandomNumberGenerator::base_engine_t& eng, const std::string& material, const bool isPrimary) override { _isPrimary = isPrimary; @@ -63,6 +67,9 @@ namespace mu2e { SpectrumVar _spectrumVariable; double _czMin; double _czMax; + double _spectrumXMin; + double _spectrumXMax; + bool _flatSpectrum; std::unique_ptr _randomPoissonQ; std::unique_ptr _randomUnitSphere; @@ -78,7 +85,7 @@ namespace mu2e { switch(_spectrumVariable) { case TOTAL_ENERGY : break; - case KINETIC_ENERY : energy += _mass; break; + case KINETIC_ENERGY : energy += _mass; break; case MOMENTUM : energy = sqrt(energy*energy+_mass*_mass); break; } @@ -103,5 +110,21 @@ namespace mu2e { stop.t); } } + + std::unique_ptr MuCapNeutronGenerator::spectrumConfig() { + auto config = std::make_unique(); + + std::string spectrumVarName("energy"); + switch(_spectrumVariable) { + case KINETIC_ENERGY: spectrumVarName = "kineticEnergy"; break; + case MOMENTUM: spectrumVarName = "momentum"; break; + default: spectrumVarName = "energy"; break; + } + + config->add_var(SpectrumConfig::RestrictedVar(spectrumVarName, 1., _spectrumXMin, _spectrumXMax, + _flatSpectrum ? SpectrumConfig::Type::kFlat : SpectrumConfig::Type::kPhysical)); + config->add_var(SpectrumConfig::RestrictedVar("cosz", (_czMax - _czMin)/2., _czMin, _czMax)); + return config; + } } DEFINE_ART_CLASS_TOOL(mu2e::MuCapNeutronGenerator) diff --git a/EventGenerator/src/MuCapPhotonGenerator_tool.cc b/EventGenerator/src/MuCapPhotonGenerator_tool.cc index e9e925bcd2..ebcfc53d20 100644 --- a/EventGenerator/src/MuCapPhotonGenerator_tool.cc +++ b/EventGenerator/src/MuCapPhotonGenerator_tool.cc @@ -31,13 +31,17 @@ namespace mu2e { explicit MuCapPhotonGenerator(Parameters const& conf) : _spectrum(BinnedSpectrum(conf().spectrum.get())), _czMin(conf().czMin()), - _czMax(conf().czMax()) + _czMax(conf().czMax()), + _spectrumXMin(_spectrum.getXMin()), + _spectrumXMax(_spectrum.getXMax()), + _flatSpectrum(conf().spectrum.get().get("spectrumShape", "") == "flat") { if(_czMin < -1. || _czMax > 1. || _czMin > _czMax) throw cet::exception("BADCONFIG") << "Cos(theta_z) range unphysical: " << _czMin << " - " << _czMax; } std::vector generate() override; void generate(std::unique_ptr& out, const IO::StoppedParticleF& stop) override; + std::unique_ptr spectrumConfig() override; void finishInitialization(art::RandomNumberGenerator::base_engine_t& eng, const std::string& material, const bool isPrimary) override { _isPrimary = isPrimary; @@ -54,6 +58,9 @@ namespace mu2e { BinnedSpectrum _spectrum; double _czMin; double _czMax; + double _spectrumXMin; + double _spectrumXMax; + bool _flatSpectrum; std::unique_ptr _randomPoissonQ; std::unique_ptr _randomUnitSphere; @@ -88,5 +95,14 @@ namespace mu2e { stop.t); } } + + std::unique_ptr MuCapPhotonGenerator::spectrumConfig() { + auto config = std::make_unique(); + // FIXME: calculate the spectrum fraction simulated + config->add_var(SpectrumConfig::RestrictedVar("energy", 1., _spectrumXMin, _spectrumXMax, + _flatSpectrum ? SpectrumConfig::Type::kFlat : SpectrumConfig::Type::kPhysical)); + config->add_var(SpectrumConfig::RestrictedVar("cosz", (_czMax - _czMin)/2., _czMin, _czMax)); + return config; + } } DEFINE_ART_CLASS_TOOL(mu2e::MuCapPhotonGenerator) diff --git a/EventGenerator/src/MuCapProtonGenerator_tool.cc b/EventGenerator/src/MuCapProtonGenerator_tool.cc index f0f1ccd6c3..8d89eb0673 100644 --- a/EventGenerator/src/MuCapProtonGenerator_tool.cc +++ b/EventGenerator/src/MuCapProtonGenerator_tool.cc @@ -37,13 +37,17 @@ namespace mu2e { _spectrum(BinnedSpectrum(conf().spectrum.get())), _spectrumVariable(parseSpectrumVar(conf().spectrumVariable())), _czMin(conf().czMin()), - _czMax(conf().czMax()) + _czMax(conf().czMax()), + _spectrumXMin(_spectrum.getXMin()), + _spectrumXMax(_spectrum.getXMax()), + _flatSpectrum(conf().spectrum.get().get("spectrumShape", "") == "flat") { if(_czMin < -1. || _czMax > 1. || _czMin > _czMax) throw cet::exception("BADCONFIG") << "Cos(theta_z) range unphysical: " << _czMin << " - " << _czMax; } std::vector generate() override; void generate(std::unique_ptr& out, const IO::StoppedParticleF& stop) override; + std::unique_ptr spectrumConfig() override; void finishInitialization(art::RandomNumberGenerator::base_engine_t& eng, const std::string& material, const bool isPrimary) override { _isPrimary = isPrimary; @@ -63,6 +67,9 @@ namespace mu2e { SpectrumVar _spectrumVariable; double _czMin; double _czMax; + double _spectrumXMin; + double _spectrumXMax; + bool _flatSpectrum; std::unique_ptr _randomPoissonQ; std::unique_ptr _randomUnitSphere; @@ -78,7 +85,7 @@ namespace mu2e { switch(_spectrumVariable) { case TOTAL_ENERGY : break; - case KINETIC_ENERY : energy += _mass; break; + case KINETIC_ENERGY : energy += _mass; break; case MOMENTUM : energy = sqrt(energy*energy+_mass*_mass); break; } @@ -104,5 +111,22 @@ namespace mu2e { } } + std::unique_ptr MuCapProtonGenerator::spectrumConfig() { + auto config = std::make_unique(); + + std::string spectrumVarName("energy"); + switch(_spectrumVariable) { + case KINETIC_ENERGY: spectrumVarName = "kineticEnergy"; break; + case MOMENTUM: spectrumVarName = "momentum"; break; + default: spectrumVarName = "energy"; break; + } + + // FIXME: calculate the spectrum fraction simulated + config->add_var(SpectrumConfig::RestrictedVar(spectrumVarName, 1., _spectrumXMin, _spectrumXMax, + _flatSpectrum ? SpectrumConfig::Type::kFlat : SpectrumConfig::Type::kPhysical)); + config->add_var(SpectrumConfig::RestrictedVar("cosz", (_czMax - _czMin)/2., _czMin, _czMax)); + return config; + } + } DEFINE_ART_CLASS_TOOL(mu2e::MuCapProtonGenerator) diff --git a/EventGenerator/src/MuStopProductsGun_module.cc b/EventGenerator/src/MuStopProductsGun_module.cc index fd8b3c7c4a..e0e543c7a1 100644 --- a/EventGenerator/src/MuStopProductsGun_module.cc +++ b/EventGenerator/src/MuStopProductsGun_module.cc @@ -17,6 +17,7 @@ #include "art/Framework/Core/EDProducer.h" #include "art/Framework/Principal/Event.h" +#include "art/Framework/Principal/SubRun.h" #include "art/Framework/Principal/Run.h" #include "art/Framework/Principal/Handle.h" #include "art/Framework/Services/Registry/ServiceHandle.h" @@ -32,6 +33,7 @@ #include "Offline/GlobalConstantsService/inc/PhysicsParams.hh" #include "Offline/DataProducts/inc/PDGCode.hh" #include "Offline/MCDataProducts/inc/GenParticle.hh" +#include "Offline/MCDataProducts/inc/SpectrumConfig.hh" #include "Offline/Mu2eUtilities/inc/RootTreeSampler.hh" #include "Offline/GeneralUtilities/inc/RSNTIO.hh" #include "Offline/EventGenerator/inc/ParticleGeneratorTool.hh" @@ -79,6 +81,7 @@ namespace mu2e { explicit MuStopProductsGun(const Parameters& conf); virtual void produce(art::Event& event); + virtual void endSubRun(art::SubRun& sr) override; }; //================================================================ @@ -94,6 +97,7 @@ namespace mu2e { , _captureFraction(1 - _decayFraction) { produces(); + produces(); if (verbosityLevel_ > 0) { std::cout<<"MuStopProductsGun: using = " @@ -137,6 +141,12 @@ namespace mu2e { event.put(std::move(output)); } + + //================================================================ + void MuStopProductsGun::endSubRun(art::SubRun& sr) { + auto config = std::make_unique(); + sr.put(std::move(config), art::fullSubRun()); + } //================================================================ } // namespace mu2e diff --git a/EventGenerator/src/MuplusMichelGenerator_tool.cc b/EventGenerator/src/MuplusMichelGenerator_tool.cc index 9a1883ff7c..6b509be985 100644 --- a/EventGenerator/src/MuplusMichelGenerator_tool.cc +++ b/EventGenerator/src/MuplusMichelGenerator_tool.cc @@ -30,11 +30,15 @@ namespace mu2e { explicit MuplusMichelGenerator(Parameters const& conf) : _pdgId(PDGCode::e_plus), _mass(GlobalConstantsHandle()->particle(_pdgId).mass()), - _spectrum(BinnedSpectrum(conf().spectrum.get())) + _spectrum(BinnedSpectrum(conf().spectrum.get())), + _spectrumXMin(_spectrum.getXMin()), + _spectrumXMax(_spectrum.getXMax()), + _flatSpectrum(conf().spectrum.get().get("spectrumShape", "") == "flat") {} std::vector generate() override; void generate(std::unique_ptr& out, const IO::StoppedParticleF& stop) override; + std::unique_ptr spectrumConfig() override; void finishInitialization(art::RandomNumberGenerator::base_engine_t& eng, const std::string&, const bool isPrimary) override { _isPrimary = isPrimary; @@ -47,6 +51,9 @@ namespace mu2e { double _mass; BinnedSpectrum _spectrum; + double _spectrumXMin; + double _spectrumXMax; + bool _flatSpectrum; std::unique_ptr _randomUnitSphere; std::unique_ptr _randSpectrum; @@ -79,5 +86,13 @@ namespace mu2e { } } + std::unique_ptr MuplusMichelGenerator::spectrumConfig() { + auto config = std::make_unique(); + // FIXME: calculate the spectrum fraction simulated + config->add_var(SpectrumConfig::RestrictedVar("energy", 1., _spectrumXMin, _spectrumXMax, + _flatSpectrum ? SpectrumConfig::Type::kFlat : SpectrumConfig::Type::kPhysical)); + return config; + } + } DEFINE_ART_CLASS_TOOL(mu2e::MuplusMichelGenerator) diff --git a/EventGenerator/src/PhotonGun_module.cc b/EventGenerator/src/PhotonGun_module.cc index 6b9e4359e2..7420ee4062 100644 --- a/EventGenerator/src/PhotonGun_module.cc +++ b/EventGenerator/src/PhotonGun_module.cc @@ -8,6 +8,7 @@ // art includes #include "art/Framework/Core/EDProducer.h" #include "art/Framework/Principal/Event.h" +#include "art/Framework/Principal/SubRun.h" // exception handling #include "cetlib_except/exception.h" @@ -21,6 +22,7 @@ // Offline includes #include "Offline/MCDataProducts/inc/GenParticle.hh" +#include "Offline/MCDataProducts/inc/SpectrumConfig.hh" #include "Offline/DataProducts/inc/PDGCode.hh" // CLHEP includes @@ -43,6 +45,7 @@ namespace mu2e { using Parameters = art::EDProducer::Table; explicit PhotonGun(const Parameters& conf); virtual void produce(art::Event& event); + virtual void endSubRun(art::SubRun& sr) override; private: double x = 0.0, y = 0.0, z = 0.0; double px = 0.0, py = 0.0, pz = 0.0; @@ -56,6 +59,7 @@ namespace mu2e { z(conf().z()), E(conf().E()) { produces(); + produces(); px = conf().px() ? *conf().px() : 0; px = conf().py() ? *conf().py() : 0; if ((px*px + py*py) > (E*E)) @@ -71,6 +75,11 @@ namespace mu2e { output->push_back(GenParticle(PDGCode::gamma, GenId::particleGun, pos, mom, 0.)); event.put(std::move(output)); }; + + void PhotonGun::endSubRun(art::SubRun& sr) { + auto config = std::make_unique(); + sr.put(std::move(config), art::fullSubRun()); + } }; // end namespace mu2e DEFINE_ART_MODULE(mu2e::PhotonGun) diff --git a/EventGenerator/src/Pileup_module.cc b/EventGenerator/src/Pileup_module.cc index dddb333cb1..af91b3a2f4 100644 --- a/EventGenerator/src/Pileup_module.cc +++ b/EventGenerator/src/Pileup_module.cc @@ -25,6 +25,7 @@ #include "art/Framework/Core/EDProducer.h" #include "art/Framework/Principal/Event.h" +#include "art/Framework/Principal/SubRun.h" #include "art/Framework/Services/Registry/ServiceHandle.h" #include "art/Utilities/make_tool.h" @@ -32,6 +33,7 @@ #include "Offline/GlobalConstantsService/inc/GlobalConstantsHandle.hh" #include "Offline/GlobalConstantsService/inc/PhysicsParams.hh" #include "Offline/DataProducts/inc/PDGCode.hh" +#include "Offline/MCDataProducts/inc/SpectrumConfig.hh" #include "Offline/MCDataProducts/inc/StageParticle.hh" #include "Offline/Mu2eUtilities/inc/simParticleList.hh" #include "Offline/EventGenerator/inc/ParticleGeneratorTool.hh" @@ -62,6 +64,7 @@ namespace mu2e { explicit Pileup(const Parameters& conf); virtual void produce(art::Event& event) override; + virtual void endSubRun(art::SubRun& sr) override; //---------------------------------------------------------------- private: @@ -95,6 +98,7 @@ namespace mu2e { , randExp_{eng_} { produces(); + produces(); if(verbosity_ > 0) { mf::LogInfo log("Pileup"); log<<"stoppingTargetMaterial = "<(); + sr.put(std::move(config), art::fullSubRun()); + } + //================================================================ void Pileup::addParticles(StageParticleCollection* output, art::Ptr mustop, diff --git a/EventGenerator/src/PrimaryProtonGun_module.cc b/EventGenerator/src/PrimaryProtonGun_module.cc index b063ac9a84..62e0728339 100644 --- a/EventGenerator/src/PrimaryProtonGun_module.cc +++ b/EventGenerator/src/PrimaryProtonGun_module.cc @@ -16,6 +16,7 @@ // Mu2e includes. #include "Offline/MCDataProducts/inc/GenId.hh" #include "Offline/MCDataProducts/inc/GenParticle.hh" +#include "Offline/MCDataProducts/inc/SpectrumConfig.hh" // Particular generators that this code knows about. #include "Offline/EventGenerator/inc/PrimaryProtonGunImpl.hh" @@ -24,6 +25,7 @@ // Includes from art and its toolchain. #include "art/Framework/Core/EDProducer.h" #include "art/Framework/Principal/Event.h" +#include "art/Framework/Principal/SubRun.h" #include "art/Framework/Services/Registry/ServiceHandle.h" #include "messagefacility/MessageLogger/MessageLogger.h" @@ -47,6 +49,7 @@ namespace mu2e { virtual void produce(art::Event& e ) override; virtual void beginRun(art::Run& r ) override; + virtual void endSubRun(art::SubRun& sr) override; private: @@ -66,6 +69,7 @@ namespace mu2e { _engine{createEngine(art::ServiceHandle{}->getSeed())} { produces(); + produces(); } void PrimaryProtonGun::beginRun(art::Run& run ){ @@ -93,6 +97,11 @@ namespace mu2e { }//produce() + void PrimaryProtonGun::endSubRun(art::SubRun& sr ) { + auto config = std::make_unique(); + sr.put(std::move(config), art::fullSubRun()); + } + } DEFINE_ART_MODULE(mu2e::PrimaryProtonGun) diff --git a/EventGenerator/src/RMCGenerator_tool.cc b/EventGenerator/src/RMCGenerator_tool.cc index d4174bcf08..914fe5eb7a 100644 --- a/EventGenerator/src/RMCGenerator_tool.cc +++ b/EventGenerator/src/RMCGenerator_tool.cc @@ -52,6 +52,9 @@ namespace mu2e { _czmin(conf().czmin()), _czmax(conf().czmax()), _spectrum(BinnedSpectrum(conf().spectrum.get())), + _spectrumXMin(_spectrum.getXMin()), + _spectrumXMax(_spectrum.getXMax()), + _flatSpectrum(conf().spectrum.get().get("spectrumShape", "") == "flat"), _internalRate((_external) ? 0. : 1.), _makeHistograms(conf().makeHistograms()) { @@ -97,6 +100,7 @@ namespace mu2e { std::vector generate() override; void generate(std::unique_ptr& out, const IO::StoppedParticleF& stop) override; + std::unique_ptr spectrumConfig() override; void finishInitialization(art::RandomNumberGenerator::base_engine_t& eng, const std::string& material, const bool isPrimary) override { _isPrimary = isPrimary; @@ -121,6 +125,9 @@ namespace mu2e { const double _czmin; //range of cos(theta_z) generated const double _czmax; BinnedSpectrum _spectrum; //RMC photon spectrum + const double _spectrumXMin; + const double _spectrumXMax; + const bool _flatSpectrum; std::unique_ptr _muonCaptureSpectrum; // internal conversion spectrum double _internalRate; @@ -201,5 +208,14 @@ namespace mu2e { } } + std::unique_ptr RMCGenerator::spectrumConfig() { + auto config = std::make_unique(); + // FIXME: calculate the spectrum fraction simulated + config->add_var(SpectrumConfig::RestrictedVar("energy", 1., _spectrumXMin, _spectrumXMax, + _flatSpectrum ? SpectrumConfig::Type::kFlat : SpectrumConfig::Type::kPhysical)); + config->add_var(SpectrumConfig::RestrictedVar("cosz", (_czmax - _czmin)/2., _czmin, _czmax)); + return config; + } + } DEFINE_ART_CLASS_TOOL(mu2e::RMCGenerator) diff --git a/EventGenerator/src/RMCGun_module.cc b/EventGenerator/src/RMCGun_module.cc index 417f25be8f..e985d0ff4d 100644 --- a/EventGenerator/src/RMCGun_module.cc +++ b/EventGenerator/src/RMCGun_module.cc @@ -20,6 +20,7 @@ // Framework includes #include "art/Framework/Core/EDProducer.h" #include "art/Framework/Principal/Event.h" +#include "art/Framework/Principal/SubRun.h" #include "art/Framework/Principal/Run.h" #include "art/Framework/Principal/Handle.h" #include "art/Framework/Services/Registry/ServiceHandle.h" @@ -33,6 +34,7 @@ #include "Offline/DataProducts/inc/PDGCode.hh" #include "Offline/MCDataProducts/inc/GenParticle.hh" #include "Offline/MCDataProducts/inc/EventWeight.hh" +#include "Offline/MCDataProducts/inc/SpectrumConfig.hh" #include "Offline/Mu2eUtilities/inc/RandomUnitSphere.hh" #include "Offline/Mu2eUtilities/inc/MuonCaptureSpectrum.hh" #include "Offline/Mu2eUtilities/inc/SimpleSpectrum.hh" @@ -91,6 +93,7 @@ namespace mu2e { public: explicit RMCGun(const fhicl::ParameterSet& pset); virtual void produce(art::Event& event); + virtual void endSubRun(art::SubRun& sr) override; }; //================================================================ @@ -114,6 +117,7 @@ namespace mu2e { , doHistograms_( pset.get("doHistograms",true ) ) { produces(); + produces(); if(verbosityLevel_ > 0) { std::cout<<"RMCGun: using = " @@ -226,6 +230,17 @@ namespace mu2e { return spectrum_.sample(randSpectrum_.fire()); } + //================================================================ + void RMCGun::endSubRun(art::SubRun& sr) { + auto config = std::make_unique(); + // FIXME: calculate the spectrum fraction simulated + config->add_var(SpectrumConfig::RestrictedVar("energy", 1., spectrum_.getXMin(), spectrum_.getXMax(), + (psphys_.get("spectrumShape", "") == "flat") ? SpectrumConfig::Type::kFlat : SpectrumConfig::Type::kPhysical)); + config->add_var(SpectrumConfig::RestrictedVar("cosz", (czmax_ - czmin_)/2., czmin_, czmax_)); + config->add_var(SpectrumConfig::RestrictedVar("phi", (phimax_ - phimin_)/CLHEP::twopi, phimin_, phimax_)); + sr.put(std::move(config), art::fullSubRun()); + } + //================================================================ } // namespace mu2e diff --git a/EventGenerator/src/RPCGun_module.cc b/EventGenerator/src/RPCGun_module.cc index a6a869a788..3f56f15224 100644 --- a/EventGenerator/src/RPCGun_module.cc +++ b/EventGenerator/src/RPCGun_module.cc @@ -22,6 +22,7 @@ #include "art/Framework/Core/EDProducer.h" #include "art/Framework/Principal/Event.h" +#include "art/Framework/Principal/SubRun.h" #include "art/Framework/Services/Registry/ServiceHandle.h" #include "Offline/SeedService/inc/SeedService.hh" @@ -30,6 +31,7 @@ #include "Offline/MCDataProducts/inc/StageParticle.hh" #include "Offline/MCDataProducts/inc/StepPointMC.hh" #include "Offline/MCDataProducts/inc/EventWeight.hh" +#include "Offline/MCDataProducts/inc/SpectrumConfig.hh" #include "Offline/Mu2eUtilities/inc/simParticleList.hh" #include "Offline/Mu2eUtilities/inc/BinnedSpectrum.hh" #include "Offline/Mu2eUtilities/inc/RandomUnitSphere.hh" @@ -69,6 +71,7 @@ namespace mu2e { explicit RPCGun(const Parameters& conf); virtual void produce(art::Event& event) override; + virtual void endSubRun(art::SubRun& sr) override; void addParticles(StageParticleCollection* output,art::Ptr pistop); double MakeEventWeight(art::Ptr p); //---------------------------------------------------------------- @@ -81,6 +84,7 @@ namespace mu2e { CLHEP::RandFlat randomFlat_; std::string RPCType_; BinnedSpectrum spectrum_; + bool flatSpectrum_; const double czmin_; const double czmax_; bool pionDecayOff_; @@ -123,6 +127,7 @@ namespace mu2e { , randomFlat_{eng_} , RPCType_{conf().RPCType()} , spectrum_{BinnedSpectrum(conf().spectrum.get())} + , flatSpectrum_{conf().spectrum.get().get("spectrumShape", "") == "flat"} , czmin_(conf().czmin()) , czmax_(conf().czmax()) , pionDecayOff_{conf().pionDecayOff()} @@ -133,6 +138,7 @@ namespace mu2e { { produces(); produces(); + produces(); if(RPCType_ == "mu2eExternalRPC") process_ = ProcessCode::mu2eExternalRPC; else if(RPCType_ == "mu2eInternalRPC") process_ = ProcessCode::mu2eInternalRPC; else { @@ -288,6 +294,15 @@ namespace mu2e { } + //================================================================ + void RPCGun::endSubRun(art::SubRun& sr) { + auto config = std::make_unique(); + config->add_var(SpectrumConfig::RestrictedVar("energy", 1., spectrum_.getXMin(), spectrum_.getXMax(), + flatSpectrum_ ? SpectrumConfig::Type::kFlat : SpectrumConfig::Type::kPhysical)); + config->add_var(SpectrumConfig::RestrictedVar("cosz", (czmax_ - czmin_)/2., czmin_, czmax_)); + sr.put(std::move(config), art::fullSubRun()); + } + //================================================================ } // namespace mu2e diff --git a/EventGenerator/src/RanTest_module.cc b/EventGenerator/src/RanTest_module.cc index 78319eba37..abc0750f71 100644 --- a/EventGenerator/src/RanTest_module.cc +++ b/EventGenerator/src/RanTest_module.cc @@ -6,11 +6,13 @@ // Mu2e includes. #include "Offline/MCDataProducts/inc/GenParticle.hh" +#include "Offline/MCDataProducts/inc/SpectrumConfig.hh" #include "Offline/SeedService/inc/SeedService.hh" // Includes from art and its tool chain #include "art/Framework/Core/EDProducer.h" #include "art/Framework/Principal/Event.h" +#include "art/Framework/Principal/SubRun.h" #include "art/Framework/Services/Registry/ServiceHandle.h" #include "fhiclcpp/ParameterSet.h" @@ -29,6 +31,7 @@ namespace mu2e { virtual ~RanTest(); virtual void produce(art::Event& e); + virtual void endSubRun(art::SubRun& sr) override; private: @@ -37,6 +40,7 @@ namespace mu2e { RanTest::RanTest(fhicl::ParameterSet const& pSet) : EDProducer{pSet} { produces(); + produces(); // Provide a common engine for the generators to use via the service createEngine( art::ServiceHandle()->getSeed() ); @@ -52,6 +56,11 @@ namespace mu2e { evt.put(std::move(genParticles)); } + + void RanTest::endSubRun(art::SubRun& sr) { + auto config = std::make_unique(); + sr.put(std::move(config), art::fullSubRun()); + } } diff --git a/EventGenerator/src/SimpleAntiprotonGun_module.cc b/EventGenerator/src/SimpleAntiprotonGun_module.cc index 09664e8a5c..664caf0741 100644 --- a/EventGenerator/src/SimpleAntiprotonGun_module.cc +++ b/EventGenerator/src/SimpleAntiprotonGun_module.cc @@ -14,6 +14,7 @@ #include "art/Framework/Core/EDProducer.h" #include "art/Framework/Principal/Event.h" +#include "art/Framework/Principal/SubRun.h" #include "art/Framework/Principal/Run.h" #include "art/Framework/Principal/Handle.h" #include "art/Framework/Services/Registry/ServiceHandle.h" @@ -27,6 +28,7 @@ #include "Offline/DataProducts/inc/PDGCode.hh" #include "Offline/MCDataProducts/inc/GenId.hh" #include "Offline/MCDataProducts/inc/GenParticle.hh" +#include "Offline/MCDataProducts/inc/SpectrumConfig.hh" #include "Offline/GeometryService/inc/GeomHandle.hh" #include "Offline/StoppingTargetGeom/inc/StoppingTarget.hh" #include "Offline/StoppingTargetGeom/inc/TargetFoil.hh" @@ -93,6 +95,7 @@ namespace mu2e { virtual void beginRun(art::Run& run); virtual void produce(art::Event& event); + virtual void endSubRun(art::SubRun& sr) override; Stop_t generateStop(); }; @@ -111,6 +114,7 @@ namespace mu2e { , makeHistograms_(conf().makeHistograms()) { produces(); + produces(); if(verbosity_ > 0) { std::cout<<"SimpleAntiprotonGun: using gen ID " << genId_ << std::endl; @@ -212,6 +216,12 @@ namespace mu2e { } } + //================================================================ + void SimpleAntiprotonGun::endSubRun(art::SubRun& sr) { + auto config = std::make_unique(); + sr.put(std::move(config), art::fullSubRun()); + } + //================================================================ } // namespace mu2e diff --git a/EventGenerator/src/SingleProcessGenerator_module.cc b/EventGenerator/src/SingleProcessGenerator_module.cc index 1192d245fb..20d20390a0 100644 --- a/EventGenerator/src/SingleProcessGenerator_module.cc +++ b/EventGenerator/src/SingleProcessGenerator_module.cc @@ -22,6 +22,7 @@ #include "art/Framework/Core/EDProducer.h" #include "art/Framework/Principal/Event.h" +#include "art/Framework/Principal/SubRun.h" #include "art/Framework/Services/Registry/ServiceHandle.h" #include "art/Utilities/make_tool.h" @@ -29,6 +30,7 @@ #include "Offline/GlobalConstantsService/inc/GlobalConstantsHandle.hh" #include "Offline/GlobalConstantsService/inc/PhysicsParams.hh" #include "Offline/DataProducts/inc/PDGCode.hh" +#include "Offline/MCDataProducts/inc/SpectrumConfig.hh" #include "Offline/MCDataProducts/inc/StageParticle.hh" #include "Offline/Mu2eUtilities/inc/simParticleList.hh" #include "Offline/EventGenerator/inc/ParticleGeneratorTool.hh" @@ -58,6 +60,7 @@ namespace mu2e { explicit SingleProcessGenerator(const Parameters& conf); virtual void produce(art::Event& event) override; + virtual void endSubRun(art::SubRun& sr) override; //---------------------------------------------------------------- private: @@ -90,6 +93,7 @@ namespace mu2e { , randFlat_{eng_} { produces(); + produces(); if(verbosity_ > 0) { mf::LogInfo log("SingleProcessGenerator"); log<<"stoppingTargetMaterial = "<spectrumConfig(), art::fullSubRun()); + } + //================================================================ void SingleProcessGenerator::addParticles(StageParticleCollection* output, art::Ptr mustop, diff --git a/EventGenerator/src/StoppedMuonRMCGun_module.cc b/EventGenerator/src/StoppedMuonRMCGun_module.cc index 2f507a38f1..db39f90f16 100644 --- a/EventGenerator/src/StoppedMuonRMCGun_module.cc +++ b/EventGenerator/src/StoppedMuonRMCGun_module.cc @@ -20,6 +20,7 @@ // Framework includes #include "art/Framework/Core/EDProducer.h" #include "art/Framework/Principal/Event.h" +#include "art/Framework/Principal/SubRun.h" #include "art/Framework/Principal/Run.h" #include "art/Framework/Principal/Handle.h" #include "art/Framework/Services/Registry/ServiceHandle.h" @@ -34,6 +35,7 @@ #include "Offline/DataProducts/inc/PDGCode.hh" #include "Offline/MCDataProducts/inc/GenParticle.hh" #include "Offline/MCDataProducts/inc/EventWeight.hh" +#include "Offline/MCDataProducts/inc/SpectrumConfig.hh" #include "Offline/Mu2eUtilities/inc/RandomUnitSphere.hh" #include "Offline/Mu2eUtilities/inc/MuonCaptureSpectrum.hh" #include "Offline/Mu2eUtilities/inc/SimpleSpectrum.hh" @@ -108,6 +110,7 @@ namespace mu2e { explicit StoppedMuonRMCGun(const fhicl::ParameterSet& pset); ~StoppedMuonRMCGun(); virtual void produce(art::Event& event); + virtual void endSubRun(art::SubRun& sr) override; }; //================================================================ @@ -129,6 +132,7 @@ namespace mu2e { { produces(); produces(); + produces(); fractionSpectrum_ = 0.; omcNormalization_ = 0.; @@ -357,6 +361,15 @@ namespace mu2e { return result; } + //================================================================ + void StoppedMuonRMCGun::endSubRun(art::SubRun& sr) { + auto config = std::make_unique(); + config->add_var(SpectrumConfig::RestrictedVar("energy", 1., spectrum_.getXMin(), spectrum_.getXMax(), + (psphys_.get("spectrumShape", "") == "flat") ? SpectrumConfig::Type::kFlat : SpectrumConfig::Type::kPhysical)); + config->add_var(SpectrumConfig::RestrictedVar("cosz", (czmax_ - czmin_)/2., czmin_, czmax_)); + sr.put(std::move(config), art::fullSubRun()); + } + //================================================================ } // namespace mu2e diff --git a/EventGenerator/src/StoppedMuonXRayGammaRayGun_module.cc b/EventGenerator/src/StoppedMuonXRayGammaRayGun_module.cc index 859739c9fa..302dcc9273 100644 --- a/EventGenerator/src/StoppedMuonXRayGammaRayGun_module.cc +++ b/EventGenerator/src/StoppedMuonXRayGammaRayGun_module.cc @@ -25,6 +25,7 @@ #include "art/Framework/Core/EDProducer.h" #include "art/Framework/Principal/Event.h" +#include "art/Framework/Principal/SubRun.h" #include "art/Framework/Principal/Run.h" #include "art/Framework/Principal/Handle.h" #include "art/Framework/Services/Registry/ServiceHandle.h" @@ -33,6 +34,7 @@ #include "Offline/SeedService/inc/SeedService.hh" #include "Offline/DataProducts/inc/PDGCode.hh" #include "Offline/MCDataProducts/inc/GenParticle.hh" +#include "Offline/MCDataProducts/inc/SpectrumConfig.hh" #include "Offline/Mu2eUtilities/inc/RandomUnitSphere.hh" #include "CLHEP/Random/RandFlat.h" #include "Offline/Mu2eUtilities/inc/Table.hh" @@ -94,6 +96,7 @@ namespace mu2e { public: explicit StoppedMuonXRayGammaRayGun(const fhicl::ParameterSet& pset); virtual void produce(art::Event& event); + virtual void endSubRun(art::SubRun& sr) override; }; //================================================================ @@ -125,6 +128,7 @@ namespace mu2e { _hxyPos(0){ //,_hrzPos(0) produces(); + produces(); if ( _doHistograms ) bookHistograms(); } @@ -250,6 +254,11 @@ namespace mu2e { } + void StoppedMuonXRayGammaRayGun::endSubRun(art::SubRun& sr) { + auto config = std::make_unique(); + sr.put(std::move(config), art::fullSubRun()); + } + } // end namespace mu2e DEFINE_ART_MODULE(mu2e::StoppedMuonXRayGammaRayGun) diff --git a/EventGenerator/src/StoppedMuplusDecayGun_module.cc b/EventGenerator/src/StoppedMuplusDecayGun_module.cc index b1d5f362e5..3ed4ba524b 100644 --- a/EventGenerator/src/StoppedMuplusDecayGun_module.cc +++ b/EventGenerator/src/StoppedMuplusDecayGun_module.cc @@ -17,6 +17,7 @@ #include "art/Framework/Core/EDProducer.h" #include "art/Framework/Principal/Event.h" +#include "art/Framework/Principal/SubRun.h" #include "art/Framework/Services/Registry/ServiceHandle.h" #include "Offline/SeedService/inc/SeedService.hh" @@ -26,6 +27,7 @@ #include "Offline/GlobalConstantsService/inc/PhysicsParams.hh" #include "Offline/DataProducts/inc/PDGCode.hh" #include "Offline/MCDataProducts/inc/GenParticle.hh" +#include "Offline/MCDataProducts/inc/SpectrumConfig.hh" #include "Offline/Mu2eUtilities/inc/RandomUnitSphere.hh" #include "Offline/Mu2eUtilities/inc/RootTreeSampler.hh" #include "Offline/GeneralUtilities/inc/RSNTIO.hh" @@ -58,6 +60,7 @@ namespace mu2e { public: explicit StoppedMuplusDecayGun(const fhicl::ParameterSet& pset); virtual void produce(art::Event& event); + virtual void endSubRun(art::SubRun& sr) override; }; //================================================================ @@ -74,6 +77,7 @@ namespace mu2e { , flat_ (eng_) { produces(); + produces(); } //================================================================ @@ -100,6 +104,14 @@ namespace mu2e { event.put(std::move(output)); } + //================================================================ + void StoppedMuplusDecayGun::endSubRun(art::SubRun& sr) { + auto config = std::make_unique(); + config->add_var(SpectrumConfig::RestrictedVar("energy", 1., emin_, muMass()/2.)); + config->add_var(SpectrumConfig::RestrictedVar("cosz", (czmax_ - czmin_)/2., czmin_, czmax_)); + sr.put(std::move(config), art::fullSubRun()); + } + //================================================================ } // namespace mu2e diff --git a/EventGenerator/src/StoppedParticleG4Gun_module.cc b/EventGenerator/src/StoppedParticleG4Gun_module.cc index 3f96e95358..0c9cb819bb 100644 --- a/EventGenerator/src/StoppedParticleG4Gun_module.cc +++ b/EventGenerator/src/StoppedParticleG4Gun_module.cc @@ -25,6 +25,7 @@ #include "art/Framework/Core/EDProducer.h" #include "art/Framework/Principal/Event.h" +#include "art/Framework/Principal/SubRun.h" #include "art/Framework/Principal/Run.h" #include "art/Framework/Principal/Handle.h" #include "art/Framework/Services/Registry/ServiceHandle.h" @@ -35,6 +36,7 @@ #include "Offline/GlobalConstantsService/inc/PhysicsParams.hh" #include "Offline/DataProducts/inc/PDGCode.hh" #include "Offline/MCDataProducts/inc/GenParticle.hh" +#include "Offline/MCDataProducts/inc/SpectrumConfig.hh" #include "Offline/Mu2eUtilities/inc/RootTreeSampler.hh" #include "Offline/GeneralUtilities/inc/RSNTIO.hh" @@ -73,6 +75,7 @@ namespace mu2e { explicit StoppedParticleG4Gun(const Parameters& conf); virtual void produce(art::Event& event); + virtual void endSubRun(art::SubRun& sr) override; }; //================================================================ @@ -85,6 +88,7 @@ namespace mu2e { conf().muonStops()) { produces(); + produces(); if(verbosityLevel_ > 0) { std::cout<<"StoppedParticleG4Gun: using = " @@ -117,6 +121,12 @@ namespace mu2e { event.put(std::move(output)); } + //================================================================ + void StoppedParticleG4Gun::endSubRun(art::SubRun& sr) { + auto config = std::make_unique(); + sr.put(std::move(config), art::fullSubRun()); + } + //================================================================ } // namespace mu2e diff --git a/EventGenerator/src/StoppedParticleReactionGun_module.cc b/EventGenerator/src/StoppedParticleReactionGun_module.cc index b5ae6f5b3e..be5f296519 100644 --- a/EventGenerator/src/StoppedParticleReactionGun_module.cc +++ b/EventGenerator/src/StoppedParticleReactionGun_module.cc @@ -18,6 +18,7 @@ #include "art/Framework/Core/EDProducer.h" #include "art/Framework/Principal/Event.h" +#include "art/Framework/Principal/SubRun.h" #include "art/Framework/Principal/Run.h" #include "art/Framework/Principal/Handle.h" #include "art/Framework/Services/Registry/ServiceHandle.h" @@ -29,6 +30,7 @@ #include "Offline/GlobalConstantsService/inc/PhysicsParams.hh" #include "Offline/DataProducts/inc/PDGCode.hh" #include "Offline/MCDataProducts/inc/GenParticle.hh" +#include "Offline/MCDataProducts/inc/SpectrumConfig.hh" #include "Offline/Mu2eUtilities/inc/RandomUnitSphere.hh" #include "Offline/Mu2eUtilities/inc/CzarneckiSpectrum.hh" #include "Offline/Mu2eUtilities/inc/ConversionSpectrum.hh" @@ -51,7 +53,7 @@ namespace mu2e { PDGCode::type pdgId_; double mass_; - enum SpectrumVar { TOTAL_ENERGY, KINETIC_ENERY, MOMENTUM }; + enum SpectrumVar { TOTAL_ENERGY, KINETIC_ENERGY, MOMENTUM }; SpectrumVar spectrumVariable_; BinnedSpectrum spectrum_; @@ -84,6 +86,7 @@ namespace mu2e { explicit StoppedParticleReactionGun(const fhicl::ParameterSet& pset); virtual void produce(art::Event& event); + virtual void endSubRun(art::SubRun& sr) override; }; //================================================================ @@ -105,6 +108,7 @@ namespace mu2e { , reseeder_(eng_,seed_,verbosityLevel_) { produces(); + produces(); if(genId_ == GenId::enum_type::unknown) { throw cet::exception("BADCONFIG")<<"StoppedParticleReactionGun: unknown genId " @@ -149,7 +153,7 @@ namespace mu2e { //================================================================ StoppedParticleReactionGun::SpectrumVar StoppedParticleReactionGun::parseSpectrumVar(const std::string& name) { if (name == "totalEnergy" ) return TOTAL_ENERGY; - if (name == "kineticEnergy") return KINETIC_ENERY; + if (name == "kineticEnergy") return KINETIC_ENERGY; if (name == "momentum" ) return MOMENTUM; throw cet::exception("BADCONFIG")<<"StoppedParticleReactionGun: unknown spectrum variable "<(); + std::string varName("energy"); + switch(spectrumVariable_) { + case KINETIC_ENERGY: varName = "kineticEnergy"; break; + case MOMENTUM: varName = "momentum"; break; + default: varName = "energy"; break; + } + config->add_var(SpectrumConfig::RestrictedVar(varName, 1., spectrum_.getXMin(), spectrum_.getXMax(), + (psphys_.get("spectrumShape", "") == "flat") ? SpectrumConfig::Type::kFlat : SpectrumConfig::Type::kPhysical)); + sr.put(std::move(config), art::fullSubRun()); + } + //================================================================ } // namespace mu2e diff --git a/EventGenerator/src/deltaFunctionGun_module.cc b/EventGenerator/src/deltaFunctionGun_module.cc index d08f7500b8..fea0bad3e6 100644 --- a/EventGenerator/src/deltaFunctionGun_module.cc +++ b/EventGenerator/src/deltaFunctionGun_module.cc @@ -23,11 +23,13 @@ #include "art/Framework/Core/SharedProducer.h" #include "art/Framework/Principal/Event.h" +#include "art/Framework/Principal/SubRun.h" #include "Offline/GlobalConstantsService/inc/GlobalConstantsHandle.hh" #include "Offline/GlobalConstantsService/inc/ParticleDataList.hh" #include "Offline/DataProducts/inc/PDGCode.hh" #include "Offline/MCDataProducts/inc/GenParticle.hh" +#include "Offline/MCDataProducts/inc/SpectrumConfig.hh" namespace mu2e { @@ -75,6 +77,7 @@ namespace mu2e { explicit deltaFunctionGun(const Parameters& conf, const art::ProcessingFrame&); void produce(art::Event& event, const art::ProcessingFrame&) override; + void endSubRun(art::SubRun& sr, const art::ProcessingFrame&) override; private: const GenParticle particle_; @@ -88,6 +91,7 @@ namespace mu2e { { async(); produces(); + produces(); } //================================================================ @@ -97,6 +101,12 @@ namespace mu2e { event.put(move(output)); } + //================================================================ + void deltaFunctionGun::endSubRun(art::SubRun& sr, const art::ProcessingFrame&) { + auto config = std::make_unique(); + sr.put(std::move(config), art::fullSubRun()); + } + //================================================================ GenParticle deltaFunctionGun::define_particle(const Parameters& conf) { diff --git a/MCDataProducts/inc/SpectrumConfig.hh b/MCDataProducts/inc/SpectrumConfig.hh new file mode 100644 index 0000000000..1ebb27dd40 --- /dev/null +++ b/MCDataProducts/inc/SpectrumConfig.hh @@ -0,0 +1,108 @@ +// Relevant event generator configuration information +// Michael MacKenzie, 2026 + +#ifndef MCDataProducts_inc_SpectrumConfig_hh +#define MCDataProducts_inc_SpectrumConfig_hh + +#include +#include +#include + +namespace mu2e { + + class SpectrumConfig { + public: + // Indicate the broad class of primary simulations this falls under + // Physical indicates it followed a physical distribution (including flat if it's physical, e.g. cos(theta_z) for CEs) + // Flat is for flat and non-physical distributions, like flat electron energy from the target + enum Type {kPhysical = 0, kFlat, kOther}; + + // A variable that can be restricted in a simulation + struct RestrictedVar { + RestrictedVar(const std::string name = "default", + const double fraction = 1., + const double xmin = std::numeric_limits::lowest(), + const double xmax = std::numeric_limits::max(), + const Type type = kPhysical) : name_(name), + fraction_(fraction), + xmin_(xmin), + xmax_(xmax), + type_(type) {} + + // Check if a value is within the restricted range + bool accepted(double value) const { + return value >= xmin_ && value <= xmax_; // allow the bounds + } + + std::string name_ ; // variable identifier, e.g. "energy" + double fraction_ ; // normalization correction factor + double xmin_ ; // variable range restriction (inclusive) + double xmax_ ; + Type type_ ; // variable sampling configuration + }; + + SpectrumConfig() {} + + // Add a variable + void add_var(const RestrictedVar var) { + vars_[var.name_] = var; + } + + // Get the variables + const std::map& get_variables() const { + return vars_; + } + + // Check if provided variables pass the selection + bool accepted(const std::map& vars) const { + for(const auto& [name, value] : vars) { + // check if this name is defined + if(!vars_.contains(name)) { + printf("[SpectrumConfig::%s] No variable %s is defined!\n", + __func__, name.c_str()); + return false; + } + // Check if it's accepted + if(!vars_.at(name).accepted(value)) return false; + } + + // Passes all selections + return true; + } + + // Check if all variables are configured as physical + bool is_physical() const { + for(const auto& [_, var] : vars_) { + if(var.type_ != Type::kPhysical) return false; + } + return true; + } + + // Get the total fraction, assuming each component is independent + double total_fraction(const bool verbose = false) const { + double fraction = 1.; + for(const auto& [_,var] : vars_) { + fraction *= var.fraction_; + if(verbose) printf(" Component %12s has fraction %.4e\n", var.name_.c_str(), var.fraction_); + } + if(verbose) printf(" Total fraction: %.4e\n", fraction); + return fraction; + } + + // Get the fraction for one component + double var_fraction(const std::string name) const { + // check if this name is defined + if(!vars_.contains(name)) { + printf("[SpectrumConfig::%s] No variable %s is defined!\n", + __func__, name.c_str()); + return 0.; + } + return vars_.at(name).fraction_; + } + + private: + std::map vars_; // map of (potentially) restricted variables + }; +} + +#endif/*MCDataProducts_inc_SpectrumConfig_hh*/ diff --git a/MCDataProducts/src/classes.h b/MCDataProducts/src/classes.h index 69f695aa2b..d97d8ddd29 100644 --- a/MCDataProducts/src/classes.h +++ b/MCDataProducts/src/classes.h @@ -21,6 +21,7 @@ #include "Offline/MCDataProducts/inc/GenSimParticleLink.hh" #include "Offline/MCDataProducts/inc/GenEventCount.hh" #include "Offline/MCDataProducts/inc/StageParticle.hh" +#include "Offline/MCDataProducts/inc/SpectrumConfig.hh" // simulation #include "Offline/MCDataProducts/inc/StatusG4.hh" diff --git a/MCDataProducts/src/classes_def.xml b/MCDataProducts/src/classes_def.xml index 2f73ec107a..1bae40fc57 100644 --- a/MCDataProducts/src/classes_def.xml +++ b/MCDataProducts/src/classes_def.xml @@ -34,6 +34,13 @@ + + + + + + + diff --git a/Mu2eUtilities/inc/SpectrumVar.hh b/Mu2eUtilities/inc/SpectrumVar.hh index 2f55adfb1d..e1f033d931 100644 --- a/Mu2eUtilities/inc/SpectrumVar.hh +++ b/Mu2eUtilities/inc/SpectrumVar.hh @@ -5,11 +5,11 @@ namespace mu2e { - enum SpectrumVar { TOTAL_ENERGY, KINETIC_ENERY, MOMENTUM }; + enum SpectrumVar { TOTAL_ENERGY, KINETIC_ENERGY, MOMENTUM }; inline SpectrumVar parseSpectrumVar(const std::string& name) { if (name == "totalEnergy" ) return TOTAL_ENERGY; - if (name == "kineticEnergy") return KINETIC_ENERY; + if (name == "kineticEnergy") return KINETIC_ENERGY; if (name == "momentum" ) return MOMENTUM; throw cet::exception("BADCONFIG")<<"parseSpectrumVar(): unknown spectrum variable "<