Skip to content

Commit d755001

Browse files
authored
Merge pull request #1845 from michaelmackenzie/SpectrumConfig
Add a summary SpectrumConfig object to generator outputs
2 parents 83b5e2f + ad0a270 commit d755001

51 files changed

Lines changed: 679 additions & 16 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

EventGenerator/inc/ParticleGeneratorTool.hh

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include "Offline/DataProducts/inc/PDGCode.hh"
1414
#include "Offline/MCDataProducts/inc/ProcessCode.hh"
1515
#include "Offline/MCDataProducts/inc/GenParticle.hh"
16+
#include "Offline/MCDataProducts/inc/SpectrumConfig.hh"
1617

1718
#include "Offline/GeneralUtilities/inc/RSNTIO.hh"
1819

@@ -35,6 +36,11 @@ namespace mu2e {
3536
// This interface should be removed when we retire ntuple-based muon resampling
3637
virtual void generate(std::unique_ptr<GenParticleCollection>& out, const IO::StoppedParticleF& stop) = 0;
3738

39+
virtual std::unique_ptr<SpectrumConfig> spectrumConfig() {
40+
auto config = std::make_unique<SpectrumConfig>();
41+
return config;
42+
}
43+
3844
virtual ~ParticleGeneratorTool() noexcept = default;
3945

4046
bool _isPrimary = true; // flag to indicate if this is for primary generation or not

EventGenerator/src/AntiProtonGun_module.cc

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
#include "art/Framework/Core/EDProducer.h"
2323
#include "art/Framework/Principal/Event.h"
24+
#include "art/Framework/Principal/SubRun.h"
2425
#include "art/Framework/Principal/Run.h"
2526
#include "art/Framework/Principal/Handle.h"
2627
#include "art/Framework/Services/Registry/ServiceHandle.h"
@@ -32,6 +33,7 @@
3233
#include "Offline/GlobalConstantsService/inc/ParticleDataList.hh"
3334
#include "Offline/DataProducts/inc/PDGCode.hh"
3435
#include "Offline/MCDataProducts/inc/GenParticle.hh"
36+
#include "Offline/MCDataProducts/inc/SpectrumConfig.hh"
3537
#include "Offline/Mu2eUtilities/inc/RandomUnitSphere.hh"
3638
#include "Offline/Mu2eUtilities/inc/CzarneckiSpectrum.hh"
3739
#include "Offline/Mu2eUtilities/inc/SimpleSpectrum.hh"
@@ -104,6 +106,7 @@ namespace mu2e {
104106
explicit AntiProtonGun(const fhicl::ParameterSet& pset);
105107
virtual void produce(art::Event& event);
106108
virtual void beginRun(art::Run& run);
109+
virtual void endSubRun(art::SubRun& sr) override;
107110
};
108111

109112
//================================================================
@@ -119,6 +122,7 @@ namespace mu2e {
119122
, firstEvent_(true)
120123
{
121124
produces<mu2e::GenParticleCollection>();
125+
produces<mu2e::SpectrumConfig, art::InSubRun>();
122126

123127
if(verbosityLevel_ > 0) {
124128
std::cout<<"AntiProtonGun: producing particle "
@@ -232,6 +236,12 @@ namespace mu2e {
232236
return total;
233237
} // dsigma
234238

239+
//================================================================
240+
void AntiProtonGun::endSubRun(art::SubRun& sr) {
241+
auto config = std::make_unique<SpectrumConfig>();
242+
sr.put(std::move(config), art::fullSubRun());
243+
}
244+
235245
//================================================================
236246
void AntiProtonGun::produce(art::Event& event) {
237247

EventGenerator/src/AntiprotonResampling_module.cc

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
#include "art/Framework/Core/EDProducer.h"
1414
#include "art/Framework/Principal/Event.h"
15+
#include "art/Framework/Principal/SubRun.h"
1516
#include "art/Framework/Principal/Run.h"
1617
#include "art/Framework/Principal/Handle.h"
1718
#include "art/Framework/Services/Registry/ServiceHandle.h"
@@ -26,6 +27,7 @@
2627
#include "Offline/MCDataProducts/inc/ProcessCode.hh"
2728
#include "Offline/MCDataProducts/inc/SimParticle.hh"
2829
#include "Offline/MCDataProducts/inc/StageParticle.hh"
30+
#include "Offline/MCDataProducts/inc/SpectrumConfig.hh"
2931
#include "Offline/Mu2eUtilities/inc/simParticleList.hh"
3032

3133
#include "TH1.h"
@@ -68,6 +70,7 @@ namespace mu2e {
6870
explicit AntiprotonResampling(const Parameters& conf);
6971

7072
virtual void produce(art::Event& event);
73+
virtual void endSubRun(art::SubRun& sr) override;
7174
};
7275

7376
//================================================================
@@ -81,6 +84,7 @@ namespace mu2e {
8184
, makeHistograms_(conf().makeHistograms())
8285
{
8386
produces<mu2e::StageParticleCollection>();
87+
produces<mu2e::SpectrumConfig, art::InSubRun>();
8488

8589
if(verbosity_ > 0) {
8690
std::cout<<"AntiprotonResampling: using process code " << processCode_ << std::endl;
@@ -147,6 +151,12 @@ namespace mu2e {
147151
}
148152
}
149153

154+
//================================================================
155+
void AntiprotonResampling::endSubRun(art::SubRun& sr) {
156+
auto config = std::make_unique<SpectrumConfig>();
157+
sr.put(std::move(config), art::fullSubRun());
158+
}
159+
150160
//================================================================
151161
} // namespace mu2e
152162

EventGenerator/src/CORSIKAEventGenerator_module.cc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
#include "Offline/GeometryService/inc/Mu2eEnvelope.hh"
3131
#include "Offline/MCDataProducts/inc/GenParticle.hh"
3232
#include "Offline/MCDataProducts/inc/CosmicLivetime.hh"
33+
#include "Offline/MCDataProducts/inc/SpectrumConfig.hh"
3334
#include "Offline/MCDataProducts/inc/GenParticle.hh"
3435
#include "Offline/MCDataProducts/inc/SimTimeOffset.hh"
3536
#include "Offline/CalorimeterGeom/inc/Calorimeter.hh"
@@ -117,6 +118,7 @@ namespace mu2e {
117118
{
118119
produces<GenParticleCollection>();
119120
produces<CosmicLivetime,art::InSubRun>();
121+
produces<SpectrumConfig,art::InSubRun>();
120122
if (_applyTimeOffset) {
121123
_timeOffsetTag = conf().simTimeOffset().value();
122124
}
@@ -132,6 +134,9 @@ namespace mu2e {
132134
std::unique_ptr<CosmicLivetime> livetime(new CosmicLivetime(_primaries, _area, _lowE, _highE, _fluxConstant));
133135
std::cout << *livetime << std::endl;
134136
subrun.put(std::move(livetime), art::fullSubRun());
137+
138+
auto config = std::make_unique<SpectrumConfig>();
139+
subrun.put(std::move(config), art::fullSubRun());
135140
}
136141

137142
void CorsikaEventGenerator::produce(art::Event &evt)

EventGenerator/src/CRYEventGenerator_module.cc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include "Offline/MCDataProducts/inc/GenParticle.hh"
66
#include "Offline/MCDataProducts/inc/G4BeamlineInfo.hh"
77
#include "Offline/MCDataProducts/inc/CosmicLivetime.hh"
8+
#include "Offline/MCDataProducts/inc/SpectrumConfig.hh"
89

910
// Particular generators that this code knows about.
1011
#include "Offline/SeedService/inc/SeedService.hh"
@@ -51,6 +52,7 @@ namespace mu2e {
5152
{
5253
produces<GenParticleCollection>();
5354
produces<CosmicLivetime,art::InSubRun>();
55+
produces<SpectrumConfig,art::InSubRun>();
5456
}
5557

5658
void CryEventGenerator::beginRun( art::Run &run){
@@ -83,6 +85,9 @@ namespace mu2e {
8385
cryGen->getLiveTime() ));
8486
std::cout << *livetime << std::endl;
8587
subrun.put(std::move(livetime), art::fullSubRun());
88+
89+
auto config = std::make_unique<SpectrumConfig>();
90+
subrun.put(std::move(config), art::fullSubRun());
8691
}
8792

8893
}

EventGenerator/src/CaloCalibGun_module.cc

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include "messagefacility/MessageLogger/MessageLogger.h"
1212
#include "art/Framework/Core/EDProducer.h"
1313
#include "art/Framework/Principal/Event.h"
14+
#include "art/Framework/Principal/SubRun.h"
1415
#include "art/Framework/Services/Registry/ServiceHandle.h"
1516

1617
// Mu2e includes
@@ -23,6 +24,7 @@
2324
#include "Offline/MCDataProducts/inc/GenId.hh"
2425
#include "Offline/MCDataProducts/inc/GenParticle.hh"
2526
#include "Offline/MCDataProducts/inc/PrimaryParticle.hh"
27+
#include "Offline/MCDataProducts/inc/SpectrumConfig.hh"
2628

2729
// Other external includes.
2830
#include "CLHEP/Random/RandFlat.h"
@@ -65,6 +67,7 @@ namespace mu2e {
6567

6668
virtual void produce(art::Event& event) override;
6769
virtual void beginRun(art::Run& run) override;
70+
virtual void endSubRun(art::SubRun& sr) override;
6871

6972
private:
7073

@@ -121,6 +124,7 @@ namespace mu2e {
121124
{
122125
produces<mu2e::GenParticleCollection>();
123126
produces<mu2e::PrimaryParticle>();
127+
produces<mu2e::SpectrumConfig, art::InSubRun>();
124128

125129
}
126130

@@ -233,6 +237,11 @@ namespace mu2e {
233237

234238
}
235239

240+
void CaloCalibGun::endSubRun(art::SubRun& sr) {
241+
auto config = std::make_unique<SpectrumConfig>();
242+
sr.put(std::move(config), art::fullSubRun());
243+
}
244+
236245
//================================================================
237246
} // namespace mu2e
238247

EventGenerator/src/CaloTBGun_module.cc

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
// Framework includes
1111
#include "art/Framework/Core/EDProducer.h"
1212
#include "art/Framework/Principal/Event.h"
13+
#include "art/Framework/Principal/SubRun.h"
1314
#include "art/Framework/Principal/Run.h"
1415
#include "art/Framework/Principal/Handle.h"
1516
#include "art/Framework/Services/Registry/ServiceHandle.h"
@@ -20,6 +21,7 @@
2021
#include "Offline/GlobalConstantsService/inc/GlobalConstantsHandle.hh"
2122
#include "Offline/DataProducts/inc/PDGCode.hh"
2223
#include "Offline/MCDataProducts/inc/GenParticle.hh"
24+
#include "Offline/MCDataProducts/inc/SpectrumConfig.hh"
2325
#include "Offline/GeometryService/inc/GeomHandle.hh"
2426
#include "Offline/GeometryService/inc/DetectorSystem.hh"
2527
#include "Offline/CalorimeterGeom/inc/DiskCalorimeter.hh"
@@ -34,6 +36,7 @@ namespace mu2e {
3436
public:
3537
explicit CaloTBGun (const fhicl::ParameterSet& pset);
3638
virtual void produce (art::Event& event);
39+
virtual void endSubRun(art::SubRun& sr) override;
3740

3841
private:
3942
int verbosityLevel_;
@@ -54,6 +57,7 @@ namespace mu2e {
5457

5558
{
5659
produces<mu2e::GenParticleCollection>();
60+
produces<mu2e::SpectrumConfig, art::InSubRun>();
5761
if (verbosityLevel_ > 0) std::cout<<"CaloTB gun: shoot! " << std::endl;
5862
}
5963

@@ -73,6 +77,12 @@ namespace mu2e {
7377
event.put(std::move(output));
7478
}
7579

80+
void CaloTBGun::endSubRun(art::SubRun& sr)
81+
{
82+
auto config = std::make_unique<SpectrumConfig>();
83+
sr.put(std::move(config), art::fullSubRun());
84+
}
85+
7686
}
7787

7888
DEFINE_ART_MODULE(mu2e::CaloTBGun)

EventGenerator/src/CeEndpoint_module.cc

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
#include "Offline/GlobalConstantsService/inc/PhysicsParams.hh"
3030
#include "Offline/Mu2eUtilities/inc/RandomUnitSphere.hh"
3131
#include "Offline/DataProducts/inc/PDGCode.hh"
32+
#include "Offline/MCDataProducts/inc/SpectrumConfig.hh"
3233
#include "Offline/MCDataProducts/inc/StageParticle.hh"
3334
#include "Offline/Mu2eUtilities/inc/simParticleList.hh"
3435

@@ -53,6 +54,7 @@ namespace mu2e {
5354
explicit CeEndpoint(const Parameters& conf);
5455

5556
virtual void produce(art::Event& event) override;
57+
virtual void endSubRun(art::SubRun& sr) override;
5658

5759
//----------------------------------------------------------------
5860
private:
@@ -93,6 +95,7 @@ namespace mu2e {
9395
, pdgId_(conf().pdgId())
9496
{
9597
produces<mu2e::StageParticleCollection>();
98+
produces<mu2e::SpectrumConfig, art::InSubRun>();
9699
pid = static_cast<PDGCode::type>(pdgId_);
97100
if(czMax_ < czMin_ || czMin_ < -1. || czMax_ > 1.) throw cet::exception("BADCONFIG") << "CeEndpoint generator cos(theta_z) range is not defined\n";
98101

@@ -150,6 +153,15 @@ namespace mu2e {
150153
event.put(std::move(output));
151154
}
152155

156+
//================================================================
157+
void CeEndpoint::endSubRun(art::SubRun& sr) {
158+
// Make a summary of how this generator was configured
159+
auto config = std::make_unique<SpectrumConfig>();
160+
config->add_var(SpectrumConfig::RestrictedVar("energy", 1. , endPointEnergy_, endPointEnergy_));
161+
config->add_var(SpectrumConfig::RestrictedVar("cosz" , (czMax_ - czMin_)/2., czMin_ , czMax_ ));
162+
sr.put(std::move(config), art::fullSubRun());
163+
}
164+
153165
//================================================================
154166
} // namespace mu2e
155167

EventGenerator/src/CryResampler_module.cc

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
#include "art/Framework/Core/EDProducer.h"
1515
#include "art/Framework/Principal/Event.h"
16+
#include "art/Framework/Principal/SubRun.h"
1617
#include "art/Framework/Principal/Run.h"
1718
#include "art/Framework/Principal/Handle.h"
1819
#include "art/Framework/Services/Registry/ServiceHandle.h"
@@ -21,6 +22,7 @@
2122
#include "Offline/GlobalConstantsService/inc/GlobalConstantsHandle.hh"
2223
#include "Offline/GlobalConstantsService/inc/ParticleDataList.hh"
2324
#include "Offline/MCDataProducts/inc/GenParticle.hh"
25+
#include "Offline/MCDataProducts/inc/SpectrumConfig.hh"
2426
#include "Offline/GeneralUtilities/inc/RSNTIO.hh"
2527

2628
#include "TTree.h"
@@ -60,6 +62,7 @@ namespace mu2e {
6062
public:
6163
explicit CryResampler(const fhicl::ParameterSet& pset);
6264
virtual void produce(art::Event& event);
65+
virtual void endSubRun(art::SubRun& sr) override;
6366
};
6467

6568
//================================================================
@@ -88,6 +91,7 @@ namespace mu2e {
8891
inputFile_ << std::endl;
8992

9093
produces<GenParticleCollection>();
94+
produces<SpectrumConfig, art::InSubRun>();
9195
}
9296

9397
//================================================================
@@ -119,6 +123,12 @@ namespace mu2e {
119123
event.put(std::move(output));
120124
}
121125

126+
//================================================================
127+
void CryResampler::endSubRun(art::SubRun& sr) {
128+
auto config = std::make_unique<SpectrumConfig>();
129+
sr.put(std::move(config), art::fullSubRun());
130+
}
131+
122132
//================================================================
123133
} // namespace mu2e
124134

EventGenerator/src/DIOGenerator_tool.cc

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ namespace mu2e {
3434
_mass(GlobalConstantsHandle<ParticleDataList>()->particle(_pdgId).mass()),
3535
_czmin(conf().czmin()),
3636
_czmax(conf().czmax()),
37-
_spectrum(BinnedSpectrum(conf().spectrum.get<fhicl::ParameterSet>()))
37+
_spectrum(BinnedSpectrum(conf().spectrum.get<fhicl::ParameterSet>())),
38+
_flatSpectrum(conf().spectrum.get<fhicl::ParameterSet>().get<std::string>("spectrumShape", "") == "flat")
3839
{
3940
if(_czmin > _czmax || _czmin < -1. || _czmax > 1.) throw cet::exception("BADCONFIG") << "DIOGenerator cos(theta_z) range is not defined\n";
4041

@@ -45,6 +46,8 @@ namespace mu2e {
4546
}
4647

4748
auto fullconfig = conf().spectrum.get<fhicl::ParameterSet>();
49+
_emin = fullconfig.get<double>("elow", _spectrum.getXMin());
50+
_emax = fullconfig.get<double>("ehi", _spectrum.getXMax());
4851
fullconfig.erase(std::string("elow"));
4952
fullconfig.erase(std::string("ehi"));
5053
fullconfig.put(std::string("elow"),double(0.0));
@@ -59,6 +62,7 @@ namespace mu2e {
5962
double pdfmin = _spectrum.getPDF(0);
6063
double binsize = _spectrum.getBinWidth();
6164
fullintegral += 0.5*pdfmin*pmin/binsize;
65+
_energy_fraction = (fullintegral > 0.) ? integral / fullintegral : 0.;
6266
std::cout << "Cos(theta_z) min " << _czmin << " max " << _czmax << std::endl;
6367
std::cout << "Restricted Spectrum min " << _spectrum.getAbscissa(0) << " max " << _spectrum.getAbscissa(_spectrum.getNbins()-1) << std::endl;
6468
std::cout << "Full Spectrum min " << fullspect.getAbscissa(0) << " max " << fullspect.getAbscissa(fullspect.getNbins()-1) << std::endl;
@@ -72,6 +76,7 @@ namespace mu2e {
7276

7377
std::vector<ParticleGeneratorTool::Kinematic> generate() override;
7478
void generate(std::unique_ptr<GenParticleCollection>& out, const IO::StoppedParticleF& stop) override;
79+
std::unique_ptr<SpectrumConfig> spectrumConfig() override;
7580

7681
void finishInitialization(art::RandomNumberGenerator::base_engine_t& eng, const std::string&, const bool isPrimary) override {
7782
_isPrimary = isPrimary;
@@ -87,6 +92,10 @@ namespace mu2e {
8792
const double _czmin;
8893
const double _czmax;
8994
BinnedSpectrum _spectrum;
95+
double _emin;
96+
double _emax;
97+
double _energy_fraction;
98+
bool _flatSpectrum;
9099

91100
std::unique_ptr<RandomUnitSphere> _randomUnitSphere;
92101
std::unique_ptr<CLHEP::RandGeneral> _randSpectrum;
@@ -124,5 +133,13 @@ namespace mu2e {
124133
}
125134
}
126135

136+
std::unique_ptr<SpectrumConfig> DIOGenerator::spectrumConfig() {
137+
auto config = std::make_unique<SpectrumConfig>();
138+
config->add_var(SpectrumConfig::RestrictedVar("energy", _energy_fraction , _emin , _emax,
139+
_flatSpectrum ? SpectrumConfig::Type::kFlat : SpectrumConfig::Type::kPhysical));
140+
config->add_var(SpectrumConfig::RestrictedVar("cosz" , (_czmax - _czmin)/2., _czmin, _czmax));
141+
return config;
142+
}
143+
127144
}
128145
DEFINE_ART_CLASS_TOOL(mu2e::DIOGenerator)

0 commit comments

Comments
 (0)