LDMX Software
GenieReweightProducer.h
1//
2// Created by Wesley Ketchum on 4/29/24.
3//
4
5#ifndef SIMCORE_GENIEREWEIGHTPRODUCER_H
6#define SIMCORE_GENIEREWEIGHTPRODUCER_H
7
8#include <map>
9#include <memory>
10#include <string>
11
13#include "RwFramework/GSyst.h"
14#include "SimCore/Event/EventWeights.h"
15
16namespace genie {
17class Interaction;
18class HepMC3Converter;
19} // namespace genie
20
21namespace genie::rew {
22class GReWeight;
23}
24
25namespace simcore {
26
28 public:
29 // constructor
30 GenieReweightProducer(const std::string& name, framework::Process& process);
31
32 // default destructor
33 virtual ~GenieReweightProducer() = default;
34
35 // configuration
37
38 // on new run
39 virtual void onNewRun(const ldmx::RunHeader& runHeader);
40
41 // produce on the event
42 virtual void produce(framework::Event& event);
43
44 private:
45 // input hepmc3 collection name
46 std::string hepmc3_coll_name_;
47
48 // input hepmc3 pass name
49 std::string hepmc3_pass_name_;
50
51 // output EventWeights collection name
52 std::string event_weights_coll_name_;
53
54 // seed to use
55 int seed_;
56
57 // number of weights to be calculated per event
58 size_t n_weights_;
59
60 // GENIE message threshold file
61 std::string message_threshold_file_;
62
63 // GENIE tune
64 std::string tune_;
65
66 // variations to run
67 std::map<ldmx::EventWeights::VariationType, std::vector<double> >
68 variation_map_;
69
70 // hepmc3 convertor
71 std::unique_ptr<genie::HepMC3Converter> hep_mc3_converter_;
72
73 std::unique_ptr<genie::rew::GReWeight> genie_rw_;
74
75 void reinitializeGenieReweight();
76 void reconfigureGenieReweight(size_t);
77
78 inline static genie::rew::EGSyst variationTypeToGenieDial(
79 const ldmx::EventWeights::VariationType& vtype) {
80 switch (vtype) {
81 case ldmx::EventWeights::VariationType::kGENIE_INukeTwkDial_MFP_pi:
82 return genie::rew::EGSyst::kINukeTwkDial_MFP_pi;
83 case ldmx::EventWeights::VariationType::kGENIE_INukeTwkDial_MFP_N:
84 return genie::rew::EGSyst::kINukeTwkDial_MFP_N;
85 case ldmx::EventWeights::VariationType::kGENIE_INukeTwkDial_FrCEx_pi:
86 return genie::rew::EGSyst::kINukeTwkDial_FrCEx_pi;
87 case ldmx::EventWeights::VariationType::kGENIE_INukeTwkDial_FrInel_pi:
88 return genie::rew::EGSyst::kINukeTwkDial_FrInel_pi;
89 case ldmx::EventWeights::VariationType::kGENIE_INukeTwkDial_FrAbs_pi:
90 return genie::rew::EGSyst::kINukeTwkDial_FrAbs_pi;
91 case ldmx::EventWeights::VariationType::kGENIE_INukeTwkDial_FrPiProd_pi:
92 return genie::rew::EGSyst::kINukeTwkDial_FrPiProd_pi;
93 case ldmx::EventWeights::VariationType::kGENIE_INukeTwkDial_FrCEx_N:
94 return genie::rew::EGSyst::kINukeTwkDial_FrCEx_N;
95 case ldmx::EventWeights::VariationType::kGENIE_INukeTwkDial_FrInel_N:
96 return genie::rew::EGSyst::kINukeTwkDial_FrInel_N;
97 case ldmx::EventWeights::VariationType::kGENIE_INukeTwkDial_FrAbs_N:
98 return genie::rew::EGSyst::kINukeTwkDial_FrAbs_N;
99 case ldmx::EventWeights::VariationType::kGENIE_INukeTwkDial_FrPiProd_N:
100 return genie::rew::EGSyst::kINukeTwkDial_FrPiProd_N;
101 case ldmx::EventWeights::VariationType ::kGENIE_HadrNuclTwkDial_FormZone:
102 return genie::rew::EGSyst::kHadrNuclTwkDial_FormZone;
103 default:
104 return genie::rew::EGSyst::kNullSystematic;
105 }
106 return genie::rew::EGSyst::kNullSystematic;
107 }
108};
109} // namespace simcore
110
111#endif // SIMCORE_GENIEREWEIGHTPRODUCER_H
Base classes for all user event processing components to extend.
Implements an event buffer system for storing event data.
Definition Event.h:42
Class which represents the process under execution.
Definition Process.h:36
Base class for a module which produces a data product.
virtual void process(Event &event) final
Processing an event for a Producer is calling produce.
Class encapsulating parameters for configuring a processor.
Definition Parameters.h:29
Run-specific configuration and data stored in its own output TTree alongside the event TTree in the o...
Definition RunHeader.h:57
virtual void onNewRun(const ldmx::RunHeader &runHeader)
Callback for the EventProcessor to take any necessary action when the run being processed changes.
virtual void produce(framework::Event &event)
Process the event and put new data products into it.
virtual void configure(framework::config::Parameters &)
Callback for the EventProcessor to configure itself from the given set of parameters.
Dynamically loadable photonuclear models either from SimCore or external libraries implementing this ...