9 #include "HepMC/GenEvent.h" 10 #include "HepMC/IO_HEPEVT.h" 11 #include "HepMC/HEPEVT_Wrapper.h" 17 #include "Photos/Photos.h" 18 #include "Photos/PhotosHepMCEvent.h" 23 : fOnlyPDG(-1), fAvoidTauLeptonicDecays(
false), fIsInitialized(
false), fPSet(
nullptr) {
25 bool UseHadronizerQEDBrem =
false;
27 std::vector<std::string> par =
fPSet->
getParameter<std::vector<std::string> >(
"parameterSets");
28 for (
unsigned int ip = 0; ip < par.size(); ++ip) {
31 if (curSet ==
"UseHadronizerQEDBrem")
32 UseHadronizerQEDBrem =
true;
34 if (!UseHadronizerQEDBrem)
52 std::vector<std::string> par =
fPSet->
getParameter<std::vector<std::string> >(
"parameterSets");
53 for (
unsigned int ip = 0; ip < par.size(); ++ip) {
57 if (curSet ==
"maxWtInterference")
59 if (curSet ==
"setInfraredCutOff")
61 if (curSet ==
"setAlphaQED")
63 if (curSet ==
"setInterference")
65 if (curSet ==
"setDoubleBrem")
67 if (curSet ==
"setQuatroBrem")
69 if (curSet ==
"setExponentiation")
71 if (curSet ==
"setCorrectionWtForW")
73 if (curSet ==
"setMeCorrectionWtForScalar")
75 if (curSet ==
"setMeCorrectionWtForW")
77 if (curSet ==
"setMeCorrectionWtForZ")
79 if (curSet ==
"initializeKinematicCorrections")
80 Photospp::Photos::initializeKinematicCorrections(
fPSet->
getParameter<
int>(curSet));
81 if (curSet ==
"forceMassFrom4Vector")
83 if (curSet ==
"forceMassFromEventRecord")
85 if (curSet ==
"ignoreParticlesOfStatus")
87 if (curSet ==
"deIgnoreParticlesOfStatus")
89 if (curSet ==
"setMomentumConservationThreshold")
91 if (curSet ==
"suppressAll")
94 if (curSet ==
"setPairEmission")
96 if (curSet ==
"setPhotonEmission")
98 if (curSet ==
"setStopAtCriticalError")
102 if (curSet ==
"suppressBremForBranch") {
104 std::vector<std::string>
v = cfg.
getParameter<std::vector<std::string> >(
"parameterSets");
105 for (
unsigned int i = 0;
i < v.size();
i++) {
107 std::vector<int> vpar = cfg.
getParameter<std::vector<int> >(vs);
108 if (vpar.size() == 1)
109 Photospp::Photos::suppressBremForBranch(0, vpar[0]);
110 if (vpar.size() == 2)
111 Photospp::Photos::suppressBremForBranch(0 , vpar[1]);
112 if (vpar.size() == 3)
113 Photospp::Photos::suppressBremForBranch(vpar[0], vpar[1], vpar[2]);
114 if (vpar.size() == 4)
115 Photospp::Photos::suppressBremForBranch(vpar[0], vpar[1], vpar[2], vpar[3]);
116 if (vpar.size() == 5)
117 Photospp::Photos::suppressBremForBranch(vpar[0], vpar[1], vpar[2], vpar[3], vpar[4]);
118 if (vpar.size() == 6)
119 Photospp::Photos::suppressBremForBranch(vpar[0], vpar[1], vpar[2], vpar[3], vpar[4], vpar[5]);
120 if (vpar.size() == 7)
121 Photospp::Photos::suppressBremForBranch(vpar[0], vpar[1], vpar[2], vpar[3], vpar[4], vpar[5], vpar[6]);
122 if (vpar.size() == 8)
123 Photospp::Photos::suppressBremForBranch(
124 vpar[0], vpar[1], vpar[2], vpar[3], vpar[4], vpar[5], vpar[6], vpar[7]);
125 if (vpar.size() == 9)
126 Photospp::Photos::suppressBremForBranch(
127 vpar[0], vpar[1], vpar[2], vpar[3], vpar[4], vpar[5], vpar[6], vpar[7], vpar[8]);
128 if (vpar.size() == 10)
129 Photospp::Photos::suppressBremForBranch(
130 vpar[0], vpar[1], vpar[2], vpar[3], vpar[4], vpar[5], vpar[6], vpar[7], vpar[8], vpar[9]);
133 if (curSet ==
"suppressBremForDecay") {
135 std::vector<std::string>
v = cfg.
getParameter<std::vector<std::string> >(
"parameterSets");
136 for (
unsigned int i = 0;
i < v.size();
i++) {
138 std::vector<int> vpar = cfg.
getParameter<std::vector<int> >(vs);
139 if (vpar.size() == 1)
140 Photospp::Photos::suppressBremForDecay(0, vpar[0]);
141 if (vpar.size() == 2)
142 Photospp::Photos::suppressBremForDecay(0 , vpar[1]);
143 if (vpar.size() == 3)
144 Photospp::Photos::suppressBremForDecay(vpar[0], vpar[1], vpar[2]);
145 if (vpar.size() == 4)
146 Photospp::Photos::suppressBremForDecay(vpar[0], vpar[1], vpar[2], vpar[3]);
147 if (vpar.size() == 5)
148 Photospp::Photos::suppressBremForDecay(vpar[0], vpar[1], vpar[2], vpar[3], vpar[4]);
149 if (vpar.size() == 6)
150 Photospp::Photos::suppressBremForDecay(vpar[0], vpar[1], vpar[2], vpar[3], vpar[4], vpar[5]);
151 if (vpar.size() == 7)
152 Photospp::Photos::suppressBremForDecay(vpar[0], vpar[1], vpar[2], vpar[3], vpar[4], vpar[5], vpar[6]);
153 if (vpar.size() == 8)
154 Photospp::Photos::suppressBremForDecay(
155 vpar[0], vpar[1], vpar[2], vpar[3], vpar[4], vpar[5], vpar[6], vpar[7]);
156 if (vpar.size() == 9)
157 Photospp::Photos::suppressBremForDecay(
158 vpar[0], vpar[1], vpar[2], vpar[3], vpar[4], vpar[5], vpar[6], vpar[7], vpar[8]);
159 if (vpar.size() == 10)
160 Photospp::Photos::suppressBremForDecay(
161 vpar[0], vpar[1], vpar[2], vpar[3], vpar[4], vpar[5], vpar[6], vpar[7], vpar[8], vpar[9]);
165 if (curSet ==
"forceBremForBranch") {
167 std::vector<std::string>
v = cfg.
getParameter<std::vector<std::string> >(
"parameterSets");
168 for (
unsigned int i = 0;
i < v.size();
i++) {
170 std::vector<int> vpar = cfg.
getParameter<std::vector<int> >(vs);
171 if (vpar.size() == 1)
172 Photospp::Photos::forceBremForBranch(0, vpar[0]);
173 if (vpar.size() == 2)
174 Photospp::Photos::forceBremForBranch(0 , vpar[1]);
175 if (vpar.size() == 3)
176 Photospp::Photos::forceBremForBranch(vpar[0], vpar[1], vpar[2]);
177 if (vpar.size() == 4)
178 Photospp::Photos::forceBremForBranch(vpar[0], vpar[1], vpar[2], vpar[3]);
179 if (vpar.size() == 5)
180 Photospp::Photos::forceBremForBranch(vpar[0], vpar[1], vpar[2], vpar[3], vpar[4]);
181 if (vpar.size() == 6)
182 Photospp::Photos::forceBremForBranch(vpar[0], vpar[1], vpar[2], vpar[3], vpar[4], vpar[5]);
183 if (vpar.size() == 7)
184 Photospp::Photos::forceBremForBranch(vpar[0], vpar[1], vpar[2], vpar[3], vpar[4], vpar[5], vpar[6]);
185 if (vpar.size() == 8)
186 Photospp::Photos::forceBremForBranch(vpar[0], vpar[1], vpar[2], vpar[3], vpar[4], vpar[5], vpar[6], vpar[7]);
187 if (vpar.size() == 9)
188 Photospp::Photos::forceBremForBranch(
189 vpar[0], vpar[1], vpar[2], vpar[3], vpar[4], vpar[5], vpar[6], vpar[7], vpar[8]);
190 if (vpar.size() == 10)
191 Photospp::Photos::forceBremForBranch(
192 vpar[0], vpar[1], vpar[2], vpar[3], vpar[4], vpar[5], vpar[6], vpar[7], vpar[8], vpar[9]);
195 if (curSet ==
"forceBremForDecay") {
197 std::vector<std::string>
v = cfg.
getParameter<std::vector<std::string> >(
"parameterSets");
198 for (
unsigned int i = 0;
i < v.size();
i++) {
200 std::vector<int> vpar = cfg.
getParameter<std::vector<int> >(vs);
201 if (vpar.size() == 1)
203 if (vpar.size() == 2)
205 if (vpar.size() == 3)
207 if (vpar.size() == 4)
209 if (vpar.size() == 5)
211 if (vpar.size() == 6)
213 if (vpar.size() == 7)
215 if (vpar.size() == 8)
217 if (vpar.size() == 9)
219 vpar[0], vpar[1], vpar[2], vpar[3], vpar[4], vpar[5], vpar[6], vpar[7], vpar[8]);
220 if (vpar.size() == 10)
222 vpar[0], vpar[1], vpar[2], vpar[3], vpar[4], vpar[5], vpar[6], vpar[7], vpar[8], vpar[9]);
226 if (curSet ==
"forceMass") {
228 std::vector<std::string>
v = cfg.
getParameter<std::vector<std::string> >(
"parameterSets");
229 for (
unsigned int i = 0;
i < v.size();
i++) {
231 std::vector<double> vpar = cfg.
getParameter<std::vector<double> >(vs);
232 if (vpar.size() == 2)
233 Photospp::Photos::forceMass((
int)vpar[0], vpar[1]);
240 Photospp::Photos::forceBremForBranch(0,
fOnlyPDG);
241 Photospp::Photos::forceBremForBranch(0, -1 *
fOnlyPDG);
244 Photospp::Photos::suppressBremForDecay(3, 15, 16, 11, -12);
245 Photospp::Photos::suppressBremForDecay(3, -15, -16, -11, 12);
246 Photospp::Photos::suppressBremForDecay(3, 15, 16, 13, -14);
247 Photospp::Photos::suppressBremForDecay(3, -15, -16, -13, -14);
249 Photospp::Photos::iniInfo();
258 int NPartBefore = evt->particles_size();
259 Photospp::PhotosHepMCEvent PhotosEvt(evt);
262 for (HepMC::GenEvent::vertex_const_iterator
vtx = evt->vertices_begin();
vtx != evt->vertices_end();
vtx++) {
263 std::vector<int> BCodes;
266 for (HepMC::GenVertex::particle_iterator pitr = (*vtx)->particles_begin(
HepMC::children);
269 if ((*pitr)->barcode() > 10000) {
270 BCodes.push_back((*pitr)->barcode());
274 if (!BCodes.empty()) {
275 for (
size_t ibc = 0; ibc < BCodes.size(); ibc++) {
277 int nbc = p1->barcode() - 10000 + NPartBefore;
278 p1->suggest_barcode(nbc);
288 <<
"PhotosppInterface::flat: Attempt to generate random number when engine pointer is null\n" 289 <<
"This might mean that the code was modified to generate a random number outside the\n" 290 <<
"event and beginLuminosityBlock methods, which is not allowed.\n";
T getParameter(std::string const &) const
static AlgebraicMatrix initialize()
static CLHEP::HepRandomEngine * fRandomEngine
void setRandomEngine(CLHEP::HepRandomEngine *decayRandomEngine) override
CLHEP::HepRandomEngine * decayRandomEngine
void statistics() override
PhotosppInterface(const edm::ParameterSet &pset)
void configureOnlyFor(int) override
edm::ParameterSet * fPSet
setMomentumConservationThreshold
bool fAvoidTauLeptonicDecays
#define DEFINE_EDM_PLUGIN(factory, type, name)
HepMC::GenEvent * apply(HepMC::GenEvent *) override
std::vector< std::string > fSpecialSettings