gambit is hosted by Hepforge, IPPP Durham
GAMBIT  v1.5.0-2191-ga4742ac
a Global And Modular Bsm Inference Tool
getxsec.cpp
Go to the documentation of this file.
1 // GAMBIT: Global and Modular BSM Inference Tool
2 // *********************************************
20 
23 
24 // #define COLLIDERBIT_DEBUG
25 #define DEBUG_PREFIX "DEBUG: OMP thread " << omp_get_thread_num() << ": " << __FILE__ << ":" << __LINE__ << ": "
26 
27 namespace Gambit
28 {
29 
30  namespace ColliderBit
31  {
32 
33  // ======= Utility functions =======
34 
35 
39  std::pair<double,double> convert_xsecs_to_fb(double input_xsec, double input_xsec_uncert, str input_unit, bool input_fractional_uncert)
40  {
41  double xsec_fb;
42  double xsec_uncert_fb;
43 
44  if (input_unit == "fb" && !input_fractional_uncert)
45  {
46  xsec_fb = input_xsec;
47  xsec_uncert_fb = input_xsec_uncert;
48  }
49  else if (input_unit == "fb" && input_fractional_uncert)
50  {
51  xsec_fb = input_xsec;
52  xsec_uncert_fb = input_xsec_uncert * xsec_fb;
53  }
54  else if (input_unit == "pb" && !input_fractional_uncert)
55  {
56  xsec_fb = input_xsec * 1000.;
57  xsec_uncert_fb = input_xsec_uncert * 1000.;
58  }
59  else if (input_unit == "pb" && input_fractional_uncert)
60  {
61  xsec_fb = input_xsec * 1000.;
62  xsec_uncert_fb = input_xsec_uncert * xsec_fb;
63  }
64  else
65  {
66  ColliderBit_error().raise(LOCAL_INFO, "Unknown combination of options for function convert_xsecs_to_fb.");
67  }
68 
69  return std::make_pair(xsec_fb, xsec_uncert_fb);
70  }
71 
72 
73 
74  // ======= Module functions =======
75 
76 
77  #ifdef HAVE_PYBIND11
78  void getPIDPairCrossSectionsMap_xsecBE(map_PID_pair_PID_pair_xsec& result)
81  {
82  using namespace Pipes::getPIDPairCrossSectionsMap_xsecBE;
83 
84  if(*Loop::iteration == COLLIDER_INIT)
85  {
86  result.clear();
87  }
88 
89  if(*Loop::iteration == XSEC_CALCULATION)
90  {
91  // Create dicts to pass parameters and flags to the backend
92  PyDict xsecBE_pars;
93  // PyDict xsecBE_flags;
94 
95  // // First set the flags
96  // xsecBE_flags["alphas_err"] = true;
97  // xsecBE_flags["scale_err"] = true;
98  // xsecBE_flags["pdf_err"] = true;
99  // xsecBE_flags["regression_err"] = true;
100  // BEreq::xsecBE_set_flags(xsecBE_flags);
101 
102  // Then set the neceassary parameters and spectrum info:
103  // - Energy
104  // @todo This can't be hard-coded... Need to match it to collider energy!
105  xsecBE_pars["energy"] = 13000;
106  BEreq::xsecBE_set_parameters(xsecBE_pars);
107 
108  // - Import the SLHA1 spectrum
109  const SLHAstruct& slha_spec = *Dep::SLHA1Spectrum;
110  str slha_string = slha_spec.str();
111  BEreq::xsecBE_import_slha_string(slha_string);
112 
113  // Now get the cross-sections for all the requested PID pairs. Save the results
114  // in the result map (type map<PID_pair,PID_pair_xsec_container>)
115  for (const PID_pair& pid_pair : *Dep::ActivePIDPairs)
116  {
117 
118  // Create PID_pair_xsec_container instance
119  // and set the PIDs
121  pp_xs.set_pid_pair(pid_pair);
122 
123  // Get the PIDs as an iipair (= std::pair<int,int>)
124  iipair proc = pid_pair.PIDs();
125 
126  // Get dictionary with cross-section results from backend
127  PyDict xs_fb_dict = BEreq::xsecBE_get_xsection(proc);
128 
129  // The xsec_container classes don't have asymmetric errors yet,
130  // so let's take the max error for now
131  double xs_fb = xs_fb_dict["central"].cast<double>();
132  double xs_symm_err_fb = std::max(xs_fb_dict["tot_err_down"].cast<double>(), xs_fb_dict["tot_err_up"].cast<double>());
133  // double xs_fb = xs_fb_dict["central"];
134  // double xs_symm_err_fb = std::max(xs_fb_dict["tot_err_down"], xs_fb_dict["tot_err_up"]);
135 
136  // Update the PID_pair_xsec_container instance
137  pp_xs.set_xsec(xs_fb, xs_symm_err_fb);
138  pp_xs.set_info_string("xsecBE_NLO");
139 
140  // Add it to the result map
141  result[pid_pair] = pp_xs;
142  }
143 
144  } // end iteration
145 
146  }
147  #endif
148 
149  #ifdef HAVE_PYBIND11
150  void getPIDPairCrossSectionsMap_salami(map_PID_pair_PID_pair_xsec& result)
153  {
154  using namespace Pipes::getPIDPairCrossSectionsMap_salami;
155 
156  // Read options from yaml file
157  const static double fixed_xs_rel_err = runOptions->getValueOrDef<double>(-1.0, "fixed_relative_cross_section_uncertainty");
158 
159  // Collider energy
160  // @todo Need to get this from the collider options
161  double energy = 13000.;
162 
163  if(*Loop::iteration == COLLIDER_INIT)
164  {
165  result.clear();
166  }
167 
168  if(*Loop::iteration == XSEC_CALCULATION)
169  {
170 
171  // Get a copy of the SLHA1 spectrum that we can modify
172  SLHAstruct slha(*Dep::SLHA1Spectrum);
173 
174  // Contstruct EXTPAR block from the GAMBIT model parameters
175  // @todo Put this in a separate utils function 'contruct_extpar_block'.
176  SLHAea_add_block(slha, "EXTPAR");
177  slha["EXTPAR"][""] << 0 << *Param.at("Qin") << "# scale Q where the parameters below are defined";
178  slha["EXTPAR"][""] << 1 << *Param.at("M1") << "# M_1";
179  slha["EXTPAR"][""] << 2 << *Param.at("M2") << "# M_2";
180  slha["EXTPAR"][""] << 3 << *Param.at("M3") << "# M_3";
181  slha["EXTPAR"][""] << 11 << *Param.at("Au_33") << "# A_t";
182  slha["EXTPAR"][""] << 12 << *Param.at("Ad_33") << "# A_b";
183  slha["EXTPAR"][""] << 13 << *Param.at("Ae_33") << "# A_l";
184  if(Param.find("mu") != Param.end() && Param.find("mA") != Param.end())
185  {
186  slha["EXTPAR"][""] << 23 << *Param.at("mu") << "# mu";
187  slha["EXTPAR"][""] << 24 << pow(*Param.at("mA"),2) << "# m_A^2";
188  }
189  else if(Param.find("mHd2") != Param.end() && Param.find("mHd2") != Param.end())
190  {
191  slha["EXTPAR"][""] << 21 << *Param.at("mHd2") << "# m_Hd^2";
192  slha["EXTPAR"][""] << 22 << *Param.at("mHu2") << "# m_Hu^2";
193  }
194  else
195  {
196  ColliderBit_error().raise(LOCAL_INFO, "Got an unknown combination of Higgs sector parameters when trying to fill an SLHA EXTPAR block.");
197  }
198  slha["EXTPAR"][""] << 31 << sqrt(*Param.at("ml2_11")) << "# M_(L,11)";
199  slha["EXTPAR"][""] << 32 << sqrt(*Param.at("ml2_22")) << "# M_(L,22)";
200  slha["EXTPAR"][""] << 33 << sqrt(*Param.at("ml2_33")) << "# M_(L,33)";
201  slha["EXTPAR"][""] << 34 << sqrt(*Param.at("me2_11")) << "# M_(E,11)";
202  slha["EXTPAR"][""] << 35 << sqrt(*Param.at("me2_22")) << "# M_(E,22)";
203  slha["EXTPAR"][""] << 36 << sqrt(*Param.at("me2_33")) << "# M_(E,33)";
204  slha["EXTPAR"][""] << 41 << sqrt(*Param.at("mq2_11")) << "# M_(Q,11)";
205  slha["EXTPAR"][""] << 42 << sqrt(*Param.at("mq2_22")) << "# M_(Q,22)";
206  slha["EXTPAR"][""] << 43 << sqrt(*Param.at("mq2_33")) << "# M_(Q,33)";
207  slha["EXTPAR"][""] << 44 << sqrt(*Param.at("mu2_11")) << "# M_(U,11)";
208  slha["EXTPAR"][""] << 45 << sqrt(*Param.at("mu2_22")) << "# M_(U,22)";
209  slha["EXTPAR"][""] << 46 << sqrt(*Param.at("mu2_33")) << "# M_(U,33)";
210  slha["EXTPAR"][""] << 47 << sqrt(*Param.at("md2_11")) << "# M_(D,11)";
211  slha["EXTPAR"][""] << 48 << sqrt(*Param.at("md2_22")) << "# M_(D,22)";
212  slha["EXTPAR"][""] << 49 << sqrt(*Param.at("md2_33")) << "# M_(D,33)";
213 
214  // Create a SLHA string
215  str slha_string = slha.str();
216 
217  //
218  // Init Prospino
219  //
220 
221  // We only want the LO cross-section from Prospino
222  const static int inlo = 0;
223  const static int isq_ng_in = 1; // specify degenerate [0] or free [1] squark masses
224  const static int icoll_in = 1; // collider : tevatron[0], lhc[1]
225  const static double energy_in = energy; // collider energy in GeV
226  const static int i_error_in = 0; // with central scale [0] or scale variation [1]
227  const static bool set_missing_cross_sections_to_zero = runOptions->getValueOrDef<bool>(false, "set_missing_cross_sections_to_zero");
228 
229  // Pass SLHA1 input to prospino
230  BEreq::prospino_read_slha1_input(slha);
231 
232  // Loop over each PID_pair in ActivePIDPairs
233  // and calculate LO cross-sections
234  std::map<PID_pair, PID_pair_xsec_container> pp_LOxs_map;
235  for (const PID_pair& pid_pair : *Dep::ActivePIDPairs)
236  {
237  // Create PID_pair_xsec_container instance and set the PIDs
238  PID_pair_xsec_container pp_LOxs;
239  pp_LOxs.set_pid_pair(pid_pair);
240 
241  // Call Prospino and get the result in a map<string,double>.
242  map_str_dbl prospino_output = BEreq::prospino_run_alloptions(pid_pair, inlo, isq_ng_in, icoll_in, energy_in, i_error_in, set_missing_cross_sections_to_zero);
243 
244  // Get the trust_level
245  int prospino_trust_level = static_cast<int>(prospino_output.at("trust_level"));
246 
247  // Update the PID_pair_xsec_container instance with the Prospino result
248  double LOxs_fb = prospino_output.at("LO_ms[pb]") * 1000.;
249  double LOxs_rel_err = prospino_output.at("LO_rel_error");
250  pp_LOxs.set_info_string("prospino_LO");
251 
252  double LOxs_err_fb = LOxs_fb * LOxs_rel_err;
253  pp_LOxs.set_xsec(LOxs_fb, LOxs_err_fb);
254 
255  pp_LOxs.set_trust_level(prospino_trust_level);
256 
257  // Put the LO cross-section in the map
258  pp_LOxs_map[pid_pair] = pp_LOxs;
259  }
260 
261 
262  // Pass a dictionary with parameters/settings (if any) to the backend
263  PyDict salami_pars;
264  // (fill salami_pars here...)
265  BEreq::salami_set_parameters(salami_pars);
266 
267  // Import the SLHA1 spectrum
268  BEreq::salami_import_slha_string(slha_string);
269 
270  // Now get the cross-sections for all the requested PID pairs. Save the results
271  // in the result map (type map<PID_pair,PID_pair_xsec_container>)
272  for (const PID_pair& pid_pair : *Dep::ActivePIDPairs)
273  {
274  // Create PID_pair_xsec_container instance
275  // and set the PIDs
277  pp_xs.set_pid_pair(pid_pair);
278 
279  // Get the PIDs as an iipair (= std::pair<int,int>)
280  iipair proc = pid_pair.PIDs();
281 
282  // Get LO cross-section value from map
283  double LOxs_fb = pp_LOxs_map.at(pid_pair).xsec();
284 
285  // Get the trust_level to the level of the pp_LOxs
286  int LOxs_trust_level = pp_LOxs_map.at(pid_pair).trust_level();
287 
288  // Get dictionary with cross-section results from backend
289  PyDict xs_fb_dict = BEreq::salami_get_xsection(proc, energy, LOxs_fb);
290 
291  // The xsec_container classes don't have asymmetric errors yet,
292  // so let's take the max error for now
293  double xs_fb = xs_fb_dict["central"].cast<double>();
294  double xs_err_fb = std::max(xs_fb_dict["tot_err_down"].cast<double>(), xs_fb_dict["tot_err_up"].cast<double>());
295 
296  // Get the trust_level reported by the salami backend
297  int xs_trust_level = xs_fb_dict["trust_level"].cast<int>();
298 
299  // Should we rather use the fixed uncertainty from the YAML file?
300  if(fixed_xs_rel_err >= 0.0)
301  {
302  xs_err_fb = xs_fb * fixed_xs_rel_err;
303  }
304 
305  // Update the PID_pair_xsec_container instance
306  pp_xs.set_xsec(xs_fb, xs_err_fb);
307  pp_xs.set_info_string("salami_NLO");
308 
309  // Set the trust_level
310  pp_xs.set_trust_level(std::min(LOxs_trust_level, xs_trust_level));
311 
312  // Add it to the result map
313  result[pid_pair] = pp_xs;
314  }
315 
316  } // end iteration
317 
318  }
319  #endif
320 
321 
325  {
327 
328  // Read options from yaml file
329  const static double fixed_xs_rel_err = runOptions->getValueOrDef<double>(-1.0, "fixed_relative_cross_section_uncertainty");
330  const static int inlo = runOptions->getValueOrDef<int>(1, "inlo");
331 
332  if(*Loop::iteration == COLLIDER_INIT)
333  {
334  result.clear();
335  }
336 
337  if(*Loop::iteration == XSEC_CALCULATION)
338  {
339 
340  // Get a copy of the SLHA1 spectrum that we can modify
341  SLHAstruct slha(*Dep::SLHA1Spectrum);
342 
343  // Contstruct EXTPAR block from the GAMBIT model parameters
344  SLHAea_add_block(slha, "EXTPAR");
345  slha["EXTPAR"][""] << 0 << *Param.at("Qin") << "# scale Q where the parameters below are defined";
346  slha["EXTPAR"][""] << 1 << *Param.at("M1") << "# M_1";
347  slha["EXTPAR"][""] << 2 << *Param.at("M2") << "# M_2";
348  slha["EXTPAR"][""] << 3 << *Param.at("M3") << "# M_3";
349  slha["EXTPAR"][""] << 11 << *Param.at("Au_33") << "# A_t";
350  slha["EXTPAR"][""] << 12 << *Param.at("Ad_33") << "# A_b";
351  slha["EXTPAR"][""] << 13 << *Param.at("Ae_33") << "# A_l";
352  if(Param.find("mu") != Param.end() && Param.find("mA") != Param.end())
353  {
354  slha["EXTPAR"][""] << 23 << *Param.at("mu") << "# mu";
355  slha["EXTPAR"][""] << 24 << pow(*Param.at("mA"),2) << "# m_A^2";
356  }
357  else if(Param.find("mHd2") != Param.end() && Param.find("mHd2") != Param.end())
358  {
359  slha["EXTPAR"][""] << 21 << *Param.at("mHd2") << "# m_Hd^2";
360  slha["EXTPAR"][""] << 22 << *Param.at("mHu2") << "# m_Hu^2";
361  }
362  else
363  {
364  ColliderBit_error().raise(LOCAL_INFO, "Got an unknown combination of Higgs sector parameters when trying to fill an SLHA EXTPAR block.");
365  }
366  slha["EXTPAR"][""] << 31 << sqrt(*Param.at("ml2_11")) << "# M_(L,11)";
367  slha["EXTPAR"][""] << 32 << sqrt(*Param.at("ml2_22")) << "# M_(L,22)";
368  slha["EXTPAR"][""] << 33 << sqrt(*Param.at("ml2_33")) << "# M_(L,33)";
369  slha["EXTPAR"][""] << 34 << sqrt(*Param.at("me2_11")) << "# M_(E,11)";
370  slha["EXTPAR"][""] << 35 << sqrt(*Param.at("me2_22")) << "# M_(E,22)";
371  slha["EXTPAR"][""] << 36 << sqrt(*Param.at("me2_33")) << "# M_(E,33)";
372  slha["EXTPAR"][""] << 41 << sqrt(*Param.at("mq2_11")) << "# M_(Q,11)";
373  slha["EXTPAR"][""] << 42 << sqrt(*Param.at("mq2_22")) << "# M_(Q,22)";
374  slha["EXTPAR"][""] << 43 << sqrt(*Param.at("mq2_33")) << "# M_(Q,33)";
375  slha["EXTPAR"][""] << 44 << sqrt(*Param.at("mu2_11")) << "# M_(U,11)";
376  slha["EXTPAR"][""] << 45 << sqrt(*Param.at("mu2_22")) << "# M_(U,22)";
377  slha["EXTPAR"][""] << 46 << sqrt(*Param.at("mu2_33")) << "# M_(U,33)";
378  slha["EXTPAR"][""] << 47 << sqrt(*Param.at("md2_11")) << "# M_(D,11)";
379  slha["EXTPAR"][""] << 48 << sqrt(*Param.at("md2_22")) << "# M_(D,22)";
380  slha["EXTPAR"][""] << 49 << sqrt(*Param.at("md2_33")) << "# M_(D,33)";
381 
382  // Pass SLHA1 input to prospino
383  BEreq::prospino_read_slha1_input(slha);
384 
385  // Loop over each PID_pair in ActivePIDPairs
386  for (const PID_pair& pid_pair : *Dep::ActivePIDPairs)
387  {
388  // Create PID_pair_xsec_container instance and set the PIDs
390  pp_xs.set_pid_pair(pid_pair);
391 
392  // Call Prospino and get the result in a map<string,double>
393  map_str_dbl prospino_output = BEreq::prospino_run(pid_pair, *runOptions);
394 
395  // Get the trust_level
396  int prospino_trust_level = static_cast<int>(prospino_output.at("trust_level"));
397 
398  // Update the PID_pair_xsec_container instance with the Prospino result
399  double xs_fb;
400  double xs_rel_err;
401  if(inlo == 0)
402  {
403  xs_fb = prospino_output.at("LO_ms[pb]") * 1000.;
404  xs_rel_err = prospino_output.at("LO_rel_error");
405  pp_xs.set_info_string("prospino_LO");
406  }
407  else
408  {
409  xs_fb = prospino_output.at("NLO_ms[pb]") * 1000.;
410  xs_rel_err = prospino_output.at("NLO_rel_error");
411  pp_xs.set_info_string("prospino_NLO");
412  }
413  // Should we rather use the fixed uncertainty from the YAML file?
414  if(fixed_xs_rel_err >= 0.0) { xs_rel_err = fixed_xs_rel_err; }
415  double xs_err_fb = xs_fb * xs_rel_err;
416 
417  pp_xs.set_xsec(xs_fb, xs_err_fb);
418 
419  pp_xs.set_trust_level(prospino_trust_level);
420 
421  // Add the PID_pair_xsec_container instance to the result map
422  result[pid_pair] = pp_xs;
423  }
424  }
425  } // end getPIDPairCrossSectionsMap_prospino
426 
427 
428 
431  {
433 
434  result.reset();
435  result.set_pid_pair(pid_pair);
436  result.set_xsec(xsec_val, xsec_val * 0.01);
437 
438  return result;
439  }
440 
442  {
444 
445  static bool first = true;
446  static map_PID_pair_PID_pair_xsec all_my_pid_pair_xsecs;
447  if (first)
448  {
449  all_my_pid_pair_xsecs[PID_pair(1000021,1000021)] = silly_pid_xsec_constructor( PID_pair(1000021,1000021), 5.39328e+01);
450  all_my_pid_pair_xsecs[PID_pair(1000001,1000021)] = silly_pid_xsec_constructor( PID_pair(1000001,1000021), 2.37137e+01);
451  all_my_pid_pair_xsecs[PID_pair(-1000001,1000021)] = silly_pid_xsec_constructor( PID_pair(-1000001,1000021), 2.37137e+01);
452  all_my_pid_pair_xsecs[PID_pair(1000002,1000021)] = silly_pid_xsec_constructor( PID_pair(1000002,1000021), 6.28372e+01);
453  all_my_pid_pair_xsecs[PID_pair(-1000002,1000021)] = silly_pid_xsec_constructor( PID_pair(-1000002,1000021), 6.28372e+01);
454  all_my_pid_pair_xsecs[PID_pair(1000003,1000021)] = silly_pid_xsec_constructor( PID_pair(1000003,1000021), 0.00000e+00);
455  all_my_pid_pair_xsecs[PID_pair(-1000003,1000021)] = silly_pid_xsec_constructor( PID_pair(-1000003,1000021), 0.00000e+00);
456  all_my_pid_pair_xsecs[PID_pair(1000004,1000021)] = silly_pid_xsec_constructor( PID_pair(1000004,1000021), 0.00000e+00);
457  all_my_pid_pair_xsecs[PID_pair(-1000004,1000021)] = silly_pid_xsec_constructor( PID_pair(-1000004,1000021), 0.00000e+00);
458  all_my_pid_pair_xsecs[PID_pair(1000005,1000021)] = silly_pid_xsec_constructor( PID_pair(1000005,1000021), 7.47639e-01);
459  all_my_pid_pair_xsecs[PID_pair(-1000005,1000021)] = silly_pid_xsec_constructor( PID_pair(-1000005,1000021), 7.47639e-01);
460  all_my_pid_pair_xsecs[PID_pair(1000021,2000001)] = silly_pid_xsec_constructor( PID_pair(1000021,2000001), 2.72593e+01);
461  all_my_pid_pair_xsecs[PID_pair(-2000001,1000021)] = silly_pid_xsec_constructor( PID_pair(-2000001,1000021), 2.72593e+01);
462  all_my_pid_pair_xsecs[PID_pair(1000021,2000002)] = silly_pid_xsec_constructor( PID_pair(1000021,2000002), 7.01002e+01);
463  all_my_pid_pair_xsecs[PID_pair(-2000002,1000021)] = silly_pid_xsec_constructor( PID_pair(-2000002,1000021), 7.01002e+01);
464  all_my_pid_pair_xsecs[PID_pair(1000021,2000003)] = silly_pid_xsec_constructor( PID_pair(1000021,2000003), 0.00000e+00);
465  all_my_pid_pair_xsecs[PID_pair(-2000003,1000021)] = silly_pid_xsec_constructor( PID_pair(-2000003,1000021), 0.00000e+00);
466  all_my_pid_pair_xsecs[PID_pair(1000021,2000004)] = silly_pid_xsec_constructor( PID_pair(1000021,2000004), 0.00000e+00);
467  all_my_pid_pair_xsecs[PID_pair(-2000004,1000021)] = silly_pid_xsec_constructor( PID_pair(-2000004,1000021), 0.00000e+00);
468  all_my_pid_pair_xsecs[PID_pair(1000021,2000005)] = silly_pid_xsec_constructor( PID_pair(1000021,2000005), 6.99128e-01);
469  all_my_pid_pair_xsecs[PID_pair(-2000005,1000021)] = silly_pid_xsec_constructor( PID_pair(-2000005,1000021), 6.99128e-01);
470  all_my_pid_pair_xsecs[PID_pair(-1000001,1000001)] = silly_pid_xsec_constructor( PID_pair(-1000001,1000001), 3.87896e+00);
471  all_my_pid_pair_xsecs[PID_pair(-1000002,1000002)] = silly_pid_xsec_constructor( PID_pair(-1000002,1000002), 4.56614e+00);
472  all_my_pid_pair_xsecs[PID_pair(-1000003,1000003)] = silly_pid_xsec_constructor( PID_pair(-1000003,1000003), 0.00000e+00);
473  all_my_pid_pair_xsecs[PID_pair(-1000004,1000004)] = silly_pid_xsec_constructor( PID_pair(-1000004,1000004), 0.00000e+00);
474  all_my_pid_pair_xsecs[PID_pair(-1000005,1000005)] = silly_pid_xsec_constructor( PID_pair(-1000005,1000005), 5.37644e+00);
475  all_my_pid_pair_xsecs[PID_pair(-1000006,1000006)] = silly_pid_xsec_constructor( PID_pair(-1000006,1000006), 2.06296e+01);
476  all_my_pid_pair_xsecs[PID_pair(-2000001,2000001)] = silly_pid_xsec_constructor( PID_pair(-2000001,2000001), 5.43262e+00);
477  all_my_pid_pair_xsecs[PID_pair(-2000002,2000002)] = silly_pid_xsec_constructor( PID_pair(-2000002,2000002), 6.00883e+00);
478  all_my_pid_pair_xsecs[PID_pair(-2000003,2000003)] = silly_pid_xsec_constructor( PID_pair(-2000003,2000003), 0.00000e+00);
479  all_my_pid_pair_xsecs[PID_pair(-2000004,2000004)] = silly_pid_xsec_constructor( PID_pair(-2000004,2000004), 0.00000e+00);
480  all_my_pid_pair_xsecs[PID_pair(-2000005,2000005)] = silly_pid_xsec_constructor( PID_pair(-2000005,2000005), 4.11417e+00);
481  all_my_pid_pair_xsecs[PID_pair(-2000006,2000006)] = silly_pid_xsec_constructor( PID_pair(-2000006,2000006), 4.07898e+00);
482  all_my_pid_pair_xsecs[PID_pair(-1000003,1000001)] = silly_pid_xsec_constructor( PID_pair(-1000003,1000001), 0.00000e+00);
483  all_my_pid_pair_xsecs[PID_pair(-1000001,1000003)] = silly_pid_xsec_constructor( PID_pair(-1000001,1000003), 0.00000e+00);
484  all_my_pid_pair_xsecs[PID_pair(-1000005,1000001)] = silly_pid_xsec_constructor( PID_pair(-1000005,1000001), 1.03708e-01);
485  all_my_pid_pair_xsecs[PID_pair(-1000001,1000005)] = silly_pid_xsec_constructor( PID_pair(-1000001,1000005), 1.03708e-01);
486  all_my_pid_pair_xsecs[PID_pair(-2000001,1000001)] = silly_pid_xsec_constructor( PID_pair(-2000001,1000001), 3.13966e+00);
487  all_my_pid_pair_xsecs[PID_pair(-1000001,2000001)] = silly_pid_xsec_constructor( PID_pair(-1000001,2000001), 3.13966e+00);
488  all_my_pid_pair_xsecs[PID_pair(-2000003,1000001)] = silly_pid_xsec_constructor( PID_pair(-2000003,1000001), 0.00000e+00);
489  all_my_pid_pair_xsecs[PID_pair(-1000001,2000003)] = silly_pid_xsec_constructor( PID_pair(-1000001,2000003), 0.00000e+00);
490  all_my_pid_pair_xsecs[PID_pair(-2000005,1000001)] = silly_pid_xsec_constructor( PID_pair(-2000005,1000001), 3.91678e-01);
491  all_my_pid_pair_xsecs[PID_pair(-1000001,2000005)] = silly_pid_xsec_constructor( PID_pair(-1000001,2000005), 3.91678e-01);
492  all_my_pid_pair_xsecs[PID_pair(-1000004,1000002)] = silly_pid_xsec_constructor( PID_pair(-1000004,1000002), 0.00000e+00);
493  all_my_pid_pair_xsecs[PID_pair(-1000002,1000004)] = silly_pid_xsec_constructor( PID_pair(-1000002,1000004), 0.00000e+00);
494  all_my_pid_pair_xsecs[PID_pair(-2000002,1000002)] = silly_pid_xsec_constructor( PID_pair(-2000002,1000002), 5.79460e+00);
495  all_my_pid_pair_xsecs[PID_pair(-1000002,2000002)] = silly_pid_xsec_constructor( PID_pair(-1000002,2000002), 5.79460e+00);
496  all_my_pid_pair_xsecs[PID_pair(-2000004,1000002)] = silly_pid_xsec_constructor( PID_pair(-2000004,1000002), 0.00000e+00);
497  all_my_pid_pair_xsecs[PID_pair(-1000002,2000004)] = silly_pid_xsec_constructor( PID_pair(-1000002,2000004), 0.00000e+00);
498  all_my_pid_pair_xsecs[PID_pair(-1000001,1000002)] = silly_pid_xsec_constructor( PID_pair(-1000001,1000002), 6.75142e-01);
499  all_my_pid_pair_xsecs[PID_pair(-1000002,1000001)] = silly_pid_xsec_constructor( PID_pair(-1000002,1000001), 6.75142e-01);
500  all_my_pid_pair_xsecs[PID_pair(-1000003,1000002)] = silly_pid_xsec_constructor( PID_pair(-1000003,1000002), 0.00000e+00);
501  all_my_pid_pair_xsecs[PID_pair(-1000002,1000003)] = silly_pid_xsec_constructor( PID_pair(-1000002,1000003), 0.00000e+00);
502  all_my_pid_pair_xsecs[PID_pair(-1000005,1000002)] = silly_pid_xsec_constructor( PID_pair(-1000005,1000002), 2.79093e-01);
503  all_my_pid_pair_xsecs[PID_pair(-1000002,1000005)] = silly_pid_xsec_constructor( PID_pair(-1000002,1000005), 2.79093e-01);
504  all_my_pid_pair_xsecs[PID_pair(-2000001,1000002)] = silly_pid_xsec_constructor( PID_pair(-2000001,1000002), 4.63839e+00);
505  all_my_pid_pair_xsecs[PID_pair(-1000002,2000001)] = silly_pid_xsec_constructor( PID_pair(-1000002,2000001), 4.63839e+00);
506  all_my_pid_pair_xsecs[PID_pair(-2000003,1000002)] = silly_pid_xsec_constructor( PID_pair(-2000003,1000002), 0.00000e+00);
507  all_my_pid_pair_xsecs[PID_pair(-1000002,2000003)] = silly_pid_xsec_constructor( PID_pair(-1000002,2000003), 0.00000e+00);
508  all_my_pid_pair_xsecs[PID_pair(-2000005,1000002)] = silly_pid_xsec_constructor( PID_pair(-2000005,1000002), 9.02379e-01);
509  all_my_pid_pair_xsecs[PID_pair(-1000002,2000005)] = silly_pid_xsec_constructor( PID_pair(-1000002,2000005), 9.02379e-01);
510  all_my_pid_pair_xsecs[PID_pair(-1000005,1000003)] = silly_pid_xsec_constructor( PID_pair(-1000005,1000003), 0.00000e+00);
511  all_my_pid_pair_xsecs[PID_pair(-1000003,1000005)] = silly_pid_xsec_constructor( PID_pair(-1000003,1000005), 0.00000e+00);
512  all_my_pid_pair_xsecs[PID_pair(-2000001,1000003)] = silly_pid_xsec_constructor( PID_pair(-2000001,1000003), 0.00000e+00);
513  all_my_pid_pair_xsecs[PID_pair(-1000003,2000001)] = silly_pid_xsec_constructor( PID_pair(-1000003,2000001), 0.00000e+00);
514  all_my_pid_pair_xsecs[PID_pair(-2000003,1000003)] = silly_pid_xsec_constructor( PID_pair(-2000003,1000003), 0.00000e+00);
515  all_my_pid_pair_xsecs[PID_pair(-1000003,2000003)] = silly_pid_xsec_constructor( PID_pair(-1000003,2000003), 0.00000e+00);
516  all_my_pid_pair_xsecs[PID_pair(-2000005,1000003)] = silly_pid_xsec_constructor( PID_pair(-2000005,1000003), 0.00000e+00);
517  all_my_pid_pair_xsecs[PID_pair(-1000003,2000005)] = silly_pid_xsec_constructor( PID_pair(-1000003,2000005), 0.00000e+00);
518  all_my_pid_pair_xsecs[PID_pair(-2000002,1000004)] = silly_pid_xsec_constructor( PID_pair(-2000002,1000004), 0.00000e+00);
519  all_my_pid_pair_xsecs[PID_pair(-1000004,2000002)] = silly_pid_xsec_constructor( PID_pair(-1000004,2000002), 0.00000e+00);
520  all_my_pid_pair_xsecs[PID_pair(-2000004,1000004)] = silly_pid_xsec_constructor( PID_pair(-2000004,1000004), 0.00000e+00);
521  all_my_pid_pair_xsecs[PID_pair(-1000004,2000004)] = silly_pid_xsec_constructor( PID_pair(-1000004,2000004), 0.00000e+00);
522  all_my_pid_pair_xsecs[PID_pair(-1000001,1000004)] = silly_pid_xsec_constructor( PID_pair(-1000001,1000004), 0.00000e+00);
523  all_my_pid_pair_xsecs[PID_pair(-1000004,1000001)] = silly_pid_xsec_constructor( PID_pair(-1000004,1000001), 0.00000e+00);
524  all_my_pid_pair_xsecs[PID_pair(-1000003,1000004)] = silly_pid_xsec_constructor( PID_pair(-1000003,1000004), 0.00000e+00);
525  all_my_pid_pair_xsecs[PID_pair(-1000004,1000003)] = silly_pid_xsec_constructor( PID_pair(-1000004,1000003), 0.00000e+00);
526  all_my_pid_pair_xsecs[PID_pair(-1000005,1000004)] = silly_pid_xsec_constructor( PID_pair(-1000005,1000004), 0.00000e+00);
527  all_my_pid_pair_xsecs[PID_pair(-1000004,1000005)] = silly_pid_xsec_constructor( PID_pair(-1000004,1000005), 0.00000e+00);
528  all_my_pid_pair_xsecs[PID_pair(-2000001,1000004)] = silly_pid_xsec_constructor( PID_pair(-2000001,1000004), 0.00000e+00);
529  all_my_pid_pair_xsecs[PID_pair(-1000004,2000001)] = silly_pid_xsec_constructor( PID_pair(-1000004,2000001), 0.00000e+00);
530  all_my_pid_pair_xsecs[PID_pair(-2000003,1000004)] = silly_pid_xsec_constructor( PID_pair(-2000003,1000004), 0.00000e+00);
531  all_my_pid_pair_xsecs[PID_pair(-1000004,2000003)] = silly_pid_xsec_constructor( PID_pair(-1000004,2000003), 0.00000e+00);
532  all_my_pid_pair_xsecs[PID_pair(-2000005,1000004)] = silly_pid_xsec_constructor( PID_pair(-2000005,1000004), 0.00000e+00);
533  all_my_pid_pair_xsecs[PID_pair(-1000004,2000005)] = silly_pid_xsec_constructor( PID_pair(-1000004,2000005), 0.00000e+00);
534  all_my_pid_pair_xsecs[PID_pair(-2000001,1000005)] = silly_pid_xsec_constructor( PID_pair(-2000001,1000005), 5.00782e-01);
535  all_my_pid_pair_xsecs[PID_pair(-1000005,2000001)] = silly_pid_xsec_constructor( PID_pair(-1000005,2000001), 5.00782e-01);
536  all_my_pid_pair_xsecs[PID_pair(-2000003,1000005)] = silly_pid_xsec_constructor( PID_pair(-2000003,1000005), 0.00000e+00);
537  all_my_pid_pair_xsecs[PID_pair(-1000005,2000003)] = silly_pid_xsec_constructor( PID_pair(-1000005,2000003), 0.00000e+00);
538  all_my_pid_pair_xsecs[PID_pair(-2000005,1000005)] = silly_pid_xsec_constructor( PID_pair(-2000005,1000005), 8.12020e-03);
539  all_my_pid_pair_xsecs[PID_pair(-1000005,2000005)] = silly_pid_xsec_constructor( PID_pair(-1000005,2000005), 8.12020e-03);
540  all_my_pid_pair_xsecs[PID_pair(-2000006,1000006)] = silly_pid_xsec_constructor( PID_pair(-2000006,1000006), 2.87405e-02);
541  all_my_pid_pair_xsecs[PID_pair(-1000006,2000006)] = silly_pid_xsec_constructor( PID_pair(-1000006,2000006), 2.87405e-02);
542  all_my_pid_pair_xsecs[PID_pair(-1000001,1000006)] = silly_pid_xsec_constructor( PID_pair(-1000001,1000006), 0.00000e+00);
543  all_my_pid_pair_xsecs[PID_pair(-1000006,1000001)] = silly_pid_xsec_constructor( PID_pair(-1000006,1000001), 0.00000e+00);
544  all_my_pid_pair_xsecs[PID_pair(-1000003,1000006)] = silly_pid_xsec_constructor( PID_pair(-1000003,1000006), 0.00000e+00);
545  all_my_pid_pair_xsecs[PID_pair(-1000006,1000003)] = silly_pid_xsec_constructor( PID_pair(-1000006,1000003), 0.00000e+00);
546  all_my_pid_pair_xsecs[PID_pair(-1000005,1000006)] = silly_pid_xsec_constructor( PID_pair(-1000005,1000006), 0.00000e+00);
547  all_my_pid_pair_xsecs[PID_pair(-1000006,1000005)] = silly_pid_xsec_constructor( PID_pair(-1000006,1000005), 0.00000e+00);
548  all_my_pid_pair_xsecs[PID_pair(-2000005,1000006)] = silly_pid_xsec_constructor( PID_pair(-2000005,1000006), 0.00000e+00);
549  all_my_pid_pair_xsecs[PID_pair(-1000006,2000005)] = silly_pid_xsec_constructor( PID_pair(-1000006,2000005), 0.00000e+00);
550  all_my_pid_pair_xsecs[PID_pair(-2000003,2000001)] = silly_pid_xsec_constructor( PID_pair(-2000003,2000001), 0.00000e+00);
551  all_my_pid_pair_xsecs[PID_pair(-2000001,2000003)] = silly_pid_xsec_constructor( PID_pair(-2000001,2000003), 0.00000e+00);
552  all_my_pid_pair_xsecs[PID_pair(-2000005,2000001)] = silly_pid_xsec_constructor( PID_pair(-2000005,2000001), 1.17545e-01);
553  all_my_pid_pair_xsecs[PID_pair(-2000001,2000005)] = silly_pid_xsec_constructor( PID_pair(-2000001,2000005), 1.17545e-01);
554  all_my_pid_pair_xsecs[PID_pair(-2000004,2000002)] = silly_pid_xsec_constructor( PID_pair(-2000004,2000002), 0.00000e+00);
555  all_my_pid_pair_xsecs[PID_pair(-2000002,2000004)] = silly_pid_xsec_constructor( PID_pair(-2000002,2000004), 0.00000e+00);
556  all_my_pid_pair_xsecs[PID_pair(-1000001,2000002)] = silly_pid_xsec_constructor( PID_pair(-1000001,2000002), 4.41063e+00);
557  all_my_pid_pair_xsecs[PID_pair(-2000002,1000001)] = silly_pid_xsec_constructor( PID_pair(-2000002,1000001), 4.41063e+00);
558  all_my_pid_pair_xsecs[PID_pair(-1000003,2000002)] = silly_pid_xsec_constructor( PID_pair(-1000003,2000002), 0.00000e+00);
559  all_my_pid_pair_xsecs[PID_pair(-2000002,1000003)] = silly_pid_xsec_constructor( PID_pair(-2000002,1000003), 0.00000e+00);
560  all_my_pid_pair_xsecs[PID_pair(-1000005,2000002)] = silly_pid_xsec_constructor( PID_pair(-1000005,2000002), 1.19048e+00);
561  all_my_pid_pair_xsecs[PID_pair(-2000002,1000005)] = silly_pid_xsec_constructor( PID_pair(-2000002,1000005), 1.19048e+00);
562  all_my_pid_pair_xsecs[PID_pair(-2000001,2000002)] = silly_pid_xsec_constructor( PID_pair(-2000001,2000002), 1.38722e+00);
563  all_my_pid_pair_xsecs[PID_pair(-2000002,2000001)] = silly_pid_xsec_constructor( PID_pair(-2000002,2000001), 1.38722e+00);
564  all_my_pid_pair_xsecs[PID_pair(-2000003,2000002)] = silly_pid_xsec_constructor( PID_pair(-2000003,2000002), 0.00000e+00);
565  all_my_pid_pair_xsecs[PID_pair(-2000002,2000003)] = silly_pid_xsec_constructor( PID_pair(-2000002,2000003), 0.00000e+00);
566  all_my_pid_pair_xsecs[PID_pair(-2000005,2000002)] = silly_pid_xsec_constructor( PID_pair(-2000005,2000002), 2.59644e-01);
567  all_my_pid_pair_xsecs[PID_pair(-2000002,2000005)] = silly_pid_xsec_constructor( PID_pair(-2000002,2000005), 2.59644e-01);
568  all_my_pid_pair_xsecs[PID_pair(-2000005,2000003)] = silly_pid_xsec_constructor( PID_pair(-2000005,2000003), 0.00000e+00);
569  all_my_pid_pair_xsecs[PID_pair(-2000003,2000005)] = silly_pid_xsec_constructor( PID_pair(-2000003,2000005), 0.00000e+00);
570  all_my_pid_pair_xsecs[PID_pair(-1000001,2000004)] = silly_pid_xsec_constructor( PID_pair(-1000001,2000004), 0.00000e+00);
571  all_my_pid_pair_xsecs[PID_pair(-2000004,1000001)] = silly_pid_xsec_constructor( PID_pair(-2000004,1000001), 0.00000e+00);
572  all_my_pid_pair_xsecs[PID_pair(-1000003,2000004)] = silly_pid_xsec_constructor( PID_pair(-1000003,2000004), 0.00000e+00);
573  all_my_pid_pair_xsecs[PID_pair(-2000004,1000003)] = silly_pid_xsec_constructor( PID_pair(-2000004,1000003), 0.00000e+00);
574  all_my_pid_pair_xsecs[PID_pair(-1000005,2000004)] = silly_pid_xsec_constructor( PID_pair(-1000005,2000004), 0.00000e+00);
575  all_my_pid_pair_xsecs[PID_pair(-2000004,1000005)] = silly_pid_xsec_constructor( PID_pair(-2000004,1000005), 0.00000e+00);
576  all_my_pid_pair_xsecs[PID_pair(-2000001,2000004)] = silly_pid_xsec_constructor( PID_pair(-2000001,2000004), 0.00000e+00);
577  all_my_pid_pair_xsecs[PID_pair(-2000004,2000001)] = silly_pid_xsec_constructor( PID_pair(-2000004,2000001), 0.00000e+00);
578  all_my_pid_pair_xsecs[PID_pair(-2000003,2000004)] = silly_pid_xsec_constructor( PID_pair(-2000003,2000004), 0.00000e+00);
579  all_my_pid_pair_xsecs[PID_pair(-2000004,2000003)] = silly_pid_xsec_constructor( PID_pair(-2000004,2000003), 0.00000e+00);
580  all_my_pid_pair_xsecs[PID_pair(-2000005,2000004)] = silly_pid_xsec_constructor( PID_pair(-2000005,2000004), 0.00000e+00);
581  all_my_pid_pair_xsecs[PID_pair(-2000004,2000005)] = silly_pid_xsec_constructor( PID_pair(-2000004,2000005), 0.00000e+00);
582  all_my_pid_pair_xsecs[PID_pair(-1000001,2000006)] = silly_pid_xsec_constructor( PID_pair(-1000001,2000006), 0.00000e+00);
583  all_my_pid_pair_xsecs[PID_pair(-2000006,1000001)] = silly_pid_xsec_constructor( PID_pair(-2000006,1000001), 0.00000e+00);
584  all_my_pid_pair_xsecs[PID_pair(-1000003,2000006)] = silly_pid_xsec_constructor( PID_pair(-1000003,2000006), 0.00000e+00);
585  all_my_pid_pair_xsecs[PID_pair(-2000006,1000003)] = silly_pid_xsec_constructor( PID_pair(-2000006,1000003), 0.00000e+00);
586  all_my_pid_pair_xsecs[PID_pair(-1000005,2000006)] = silly_pid_xsec_constructor( PID_pair(-1000005,2000006), 5.76595e-02);
587  all_my_pid_pair_xsecs[PID_pair(-2000006,1000005)] = silly_pid_xsec_constructor( PID_pair(-2000006,1000005), 5.76595e-02);
588  all_my_pid_pair_xsecs[PID_pair(-2000005,2000006)] = silly_pid_xsec_constructor( PID_pair(-2000005,2000006), 0.00000e+00);
589  all_my_pid_pair_xsecs[PID_pair(-2000006,2000005)] = silly_pid_xsec_constructor( PID_pair(-2000006,2000005), 0.00000e+00);
590  all_my_pid_pair_xsecs[PID_pair(1000001,1000001)] = silly_pid_xsec_constructor( PID_pair(1000001,1000001), 4.03788e+00);
591  all_my_pid_pair_xsecs[PID_pair(-1000001,-1000001)] = silly_pid_xsec_constructor( PID_pair(-1000001,-1000001), 4.03788e+00);
592  all_my_pid_pair_xsecs[PID_pair(1000001,1000003)] = silly_pid_xsec_constructor( PID_pair(1000001,1000003), 0.00000e+00);
593  all_my_pid_pair_xsecs[PID_pair(-1000003,-1000001)] = silly_pid_xsec_constructor( PID_pair(-1000003,-1000001), 0.00000e+00);
594  all_my_pid_pair_xsecs[PID_pair(1000001,1000005)] = silly_pid_xsec_constructor( PID_pair(1000001,1000005), 4.90364e-01);
595  all_my_pid_pair_xsecs[PID_pair(-1000005,-1000001)] = silly_pid_xsec_constructor( PID_pair(-1000005,-1000001), 4.90364e-01);
596  all_my_pid_pair_xsecs[PID_pair(1000001,2000001)] = silly_pid_xsec_constructor( PID_pair(1000001,2000001), 2.79640e+00);
597  all_my_pid_pair_xsecs[PID_pair(-2000001,-1000001)] = silly_pid_xsec_constructor( PID_pair(-2000001,-1000001), 2.79640e+00);
598  all_my_pid_pair_xsecs[PID_pair(1000001,2000003)] = silly_pid_xsec_constructor( PID_pair(1000001,2000003), 0.00000e+00);
599  all_my_pid_pair_xsecs[PID_pair(-2000003,-1000001)] = silly_pid_xsec_constructor( PID_pair(-2000003,-1000001), 0.00000e+00);
600  all_my_pid_pair_xsecs[PID_pair(1000001,2000005)] = silly_pid_xsec_constructor( PID_pair(1000001,2000005), 1.02498e-01);
601  all_my_pid_pair_xsecs[PID_pair(-2000005,-1000001)] = silly_pid_xsec_constructor( PID_pair(-2000005,-1000001), 1.02498e-01);
602  all_my_pid_pair_xsecs[PID_pair(1000002,1000002)] = silly_pid_xsec_constructor( PID_pair(1000002,1000002), 2.01717e+01);
603  all_my_pid_pair_xsecs[PID_pair(-1000002,-1000002)] = silly_pid_xsec_constructor( PID_pair(-1000002,-1000002), 2.01717e+01);
604  all_my_pid_pair_xsecs[PID_pair(1000002,1000004)] = silly_pid_xsec_constructor( PID_pair(1000002,1000004), 0.00000e+00);
605  all_my_pid_pair_xsecs[PID_pair(-1000004,-1000002)] = silly_pid_xsec_constructor( PID_pair(-1000004,-1000002), 0.00000e+00);
606  all_my_pid_pair_xsecs[PID_pair(1000002,2000002)] = silly_pid_xsec_constructor( PID_pair(1000002,2000002), 1.51834e+01);
607  all_my_pid_pair_xsecs[PID_pair(-2000002,-1000002)] = silly_pid_xsec_constructor( PID_pair(-2000002,-1000002), 1.51834e+01);
608  all_my_pid_pair_xsecs[PID_pair(1000002,2000004)] = silly_pid_xsec_constructor( PID_pair(1000002,2000004), 0.00000e+00);
609  all_my_pid_pair_xsecs[PID_pair(-2000004,-1000002)] = silly_pid_xsec_constructor( PID_pair(-2000004,-1000002), 0.00000e+00);
610  all_my_pid_pair_xsecs[PID_pair(1000001,1000002)] = silly_pid_xsec_constructor( PID_pair(1000001,1000002), 3.02769e+01);
611  all_my_pid_pair_xsecs[PID_pair(-1000002,-1000001)] = silly_pid_xsec_constructor( PID_pair(-1000002,-1000001), 3.02769e+01);
612  all_my_pid_pair_xsecs[PID_pair(1000002,1000003)] = silly_pid_xsec_constructor( PID_pair(1000002,1000003), 0.00000e+00);
613  all_my_pid_pair_xsecs[PID_pair(-1000003,-1000002)] = silly_pid_xsec_constructor( PID_pair(-1000003,-1000002), 0.00000e+00);
614  all_my_pid_pair_xsecs[PID_pair(1000002,1000005)] = silly_pid_xsec_constructor( PID_pair(1000002,1000005), 4.49579e-01);
615  all_my_pid_pair_xsecs[PID_pair(-1000005,-1000002)] = silly_pid_xsec_constructor( PID_pair(-1000005,-1000002), 4.49579e-01);
616  all_my_pid_pair_xsecs[PID_pair(1000002,2000001)] = silly_pid_xsec_constructor( PID_pair(1000002,2000001), 6.67099e+00);
617  all_my_pid_pair_xsecs[PID_pair(-2000001,-1000002)] = silly_pid_xsec_constructor( PID_pair(-2000001,-1000002), 6.67099e+00);
618  all_my_pid_pair_xsecs[PID_pair(1000002,2000003)] = silly_pid_xsec_constructor( PID_pair(1000002,2000003), 0.00000e+00);
619  all_my_pid_pair_xsecs[PID_pair(-2000003,-1000002)] = silly_pid_xsec_constructor( PID_pair(-2000003,-1000002), 0.00000e+00);
620  all_my_pid_pair_xsecs[PID_pair(1000002,2000005)] = silly_pid_xsec_constructor( PID_pair(1000002,2000005), 9.00972e-01);
621  all_my_pid_pair_xsecs[PID_pair(-2000005,-1000002)] = silly_pid_xsec_constructor( PID_pair(-2000005,-1000002), 9.00972e-01);
622  all_my_pid_pair_xsecs[PID_pair(1000003,1000003)] = silly_pid_xsec_constructor( PID_pair(1000003,1000003), 0.00000e+00);
623  all_my_pid_pair_xsecs[PID_pair(-1000003,-1000003)] = silly_pid_xsec_constructor( PID_pair(-1000003,-1000003), 0.00000e+00);
624  all_my_pid_pair_xsecs[PID_pair(1000003,1000005)] = silly_pid_xsec_constructor( PID_pair(1000003,1000005), 0.00000e+00);
625  all_my_pid_pair_xsecs[PID_pair(-1000005,-1000003)] = silly_pid_xsec_constructor( PID_pair(-1000005,-1000003), 0.00000e+00);
626  all_my_pid_pair_xsecs[PID_pair(1000003,2000001)] = silly_pid_xsec_constructor( PID_pair(1000003,2000001), 0.00000e+00);
627  all_my_pid_pair_xsecs[PID_pair(-2000001,-1000003)] = silly_pid_xsec_constructor( PID_pair(-2000001,-1000003), 0.00000e+00);
628  all_my_pid_pair_xsecs[PID_pair(1000003,2000003)] = silly_pid_xsec_constructor( PID_pair(1000003,2000003), 0.00000e+00);
629  all_my_pid_pair_xsecs[PID_pair(-2000003,-1000003)] = silly_pid_xsec_constructor( PID_pair(-2000003,-1000003), 0.00000e+00);
630  all_my_pid_pair_xsecs[PID_pair(1000003,2000005)] = silly_pid_xsec_constructor( PID_pair(1000003,2000005), 0.00000e+00);
631  all_my_pid_pair_xsecs[PID_pair(-2000005,-1000003)] = silly_pid_xsec_constructor( PID_pair(-2000005,-1000003), 0.00000e+00);
632  all_my_pid_pair_xsecs[PID_pair(1000004,1000004)] = silly_pid_xsec_constructor( PID_pair(1000004,1000004), 0.00000e+00);
633  all_my_pid_pair_xsecs[PID_pair(-1000004,-1000004)] = silly_pid_xsec_constructor( PID_pair(-1000004,-1000004), 0.00000e+00);
634  all_my_pid_pair_xsecs[PID_pair(1000004,2000002)] = silly_pid_xsec_constructor( PID_pair(1000004,2000002), 0.00000e+00);
635  all_my_pid_pair_xsecs[PID_pair(-2000002,-1000004)] = silly_pid_xsec_constructor( PID_pair(-2000002,-1000004), 0.00000e+00);
636  all_my_pid_pair_xsecs[PID_pair(1000004,2000004)] = silly_pid_xsec_constructor( PID_pair(1000004,2000004), 0.00000e+00);
637  all_my_pid_pair_xsecs[PID_pair(-2000004,-1000004)] = silly_pid_xsec_constructor( PID_pair(-2000004,-1000004), 0.00000e+00);
638  all_my_pid_pair_xsecs[PID_pair(1000001,1000004)] = silly_pid_xsec_constructor( PID_pair(1000001,1000004), 0.00000e+00);
639  all_my_pid_pair_xsecs[PID_pair(-1000004,-1000001)] = silly_pid_xsec_constructor( PID_pair(-1000004,-1000001), 0.00000e+00);
640  all_my_pid_pair_xsecs[PID_pair(1000003,1000004)] = silly_pid_xsec_constructor( PID_pair(1000003,1000004), 0.00000e+00);
641  all_my_pid_pair_xsecs[PID_pair(-1000004,-1000003)] = silly_pid_xsec_constructor( PID_pair(-1000004,-1000003), 0.00000e+00);
642  all_my_pid_pair_xsecs[PID_pair(1000004,1000005)] = silly_pid_xsec_constructor( PID_pair(1000004,1000005), 0.00000e+00);
643  all_my_pid_pair_xsecs[PID_pair(-1000005,-1000004)] = silly_pid_xsec_constructor( PID_pair(-1000005,-1000004), 0.00000e+00);
644  all_my_pid_pair_xsecs[PID_pair(1000004,2000001)] = silly_pid_xsec_constructor( PID_pair(1000004,2000001), 0.00000e+00);
645  all_my_pid_pair_xsecs[PID_pair(-2000001,-1000004)] = silly_pid_xsec_constructor( PID_pair(-2000001,-1000004), 0.00000e+00);
646  all_my_pid_pair_xsecs[PID_pair(1000004,2000003)] = silly_pid_xsec_constructor( PID_pair(1000004,2000003), 0.00000e+00);
647  all_my_pid_pair_xsecs[PID_pair(-2000003,-1000004)] = silly_pid_xsec_constructor( PID_pair(-2000003,-1000004), 0.00000e+00);
648  all_my_pid_pair_xsecs[PID_pair(1000004,2000005)] = silly_pid_xsec_constructor( PID_pair(1000004,2000005), 0.00000e+00);
649  all_my_pid_pair_xsecs[PID_pair(-2000005,-1000004)] = silly_pid_xsec_constructor( PID_pair(-2000005,-1000004), 0.00000e+00);
650  all_my_pid_pair_xsecs[PID_pair(1000005,1000005)] = silly_pid_xsec_constructor( PID_pair(1000005,1000005), 0.00000e+00);
651  all_my_pid_pair_xsecs[PID_pair(-1000005,-1000005)] = silly_pid_xsec_constructor( PID_pair(-1000005,-1000005), 0.00000e+00);
652  all_my_pid_pair_xsecs[PID_pair(1000005,2000001)] = silly_pid_xsec_constructor( PID_pair(1000005,2000001), 1.43230e-01);
653  all_my_pid_pair_xsecs[PID_pair(-2000001,-1000005)] = silly_pid_xsec_constructor( PID_pair(-2000001,-1000005), 1.43230e-01);
654  all_my_pid_pair_xsecs[PID_pair(1000005,2000003)] = silly_pid_xsec_constructor( PID_pair(1000005,2000003), 0.00000e+00);
655  all_my_pid_pair_xsecs[PID_pair(-2000003,-1000005)] = silly_pid_xsec_constructor( PID_pair(-2000003,-1000005), 0.00000e+00);
656  all_my_pid_pair_xsecs[PID_pair(1000005,2000005)] = silly_pid_xsec_constructor( PID_pair(1000005,2000005), 0.00000e+00);
657  all_my_pid_pair_xsecs[PID_pair(-2000005,-1000005)] = silly_pid_xsec_constructor( PID_pair(-2000005,-1000005), 0.00000e+00);
658  all_my_pid_pair_xsecs[PID_pair(1000001,1000006)] = silly_pid_xsec_constructor( PID_pair(1000001,1000006), 1.31527e-01);
659  all_my_pid_pair_xsecs[PID_pair(-1000006,-1000001)] = silly_pid_xsec_constructor( PID_pair(-1000006,-1000001), 1.31527e-01);
660  all_my_pid_pair_xsecs[PID_pair(1000003,1000006)] = silly_pid_xsec_constructor( PID_pair(1000003,1000006), 0.00000e+00);
661  all_my_pid_pair_xsecs[PID_pair(-1000006,-1000003)] = silly_pid_xsec_constructor( PID_pair(-1000006,-1000003), 0.00000e+00);
662  all_my_pid_pair_xsecs[PID_pair(1000005,1000006)] = silly_pid_xsec_constructor( PID_pair(1000005,1000006), 0.00000e+00);
663  all_my_pid_pair_xsecs[PID_pair(-1000006,-1000005)] = silly_pid_xsec_constructor( PID_pair(-1000006,-1000005), 0.00000e+00);
664  all_my_pid_pair_xsecs[PID_pair(1000006,2000005)] = silly_pid_xsec_constructor( PID_pair(1000006,2000005), 0.00000e+00);
665  all_my_pid_pair_xsecs[PID_pair(-2000005,-1000006)] = silly_pid_xsec_constructor( PID_pair(-2000005,-1000006), 0.00000e+00);
666  all_my_pid_pair_xsecs[PID_pair(2000001,2000001)] = silly_pid_xsec_constructor( PID_pair(2000001,2000001), 4.35961e+00);
667  all_my_pid_pair_xsecs[PID_pair(-2000001,-2000001)] = silly_pid_xsec_constructor( PID_pair(-2000001,-2000001), 4.35961e+00);
668  all_my_pid_pair_xsecs[PID_pair(2000001,2000003)] = silly_pid_xsec_constructor( PID_pair(2000001,2000003), 0.00000e+00);
669  all_my_pid_pair_xsecs[PID_pair(-2000003,-2000001)] = silly_pid_xsec_constructor( PID_pair(-2000003,-2000001), 0.00000e+00);
670  all_my_pid_pair_xsecs[PID_pair(2000001,2000005)] = silly_pid_xsec_constructor( PID_pair(2000001,2000005), 4.58386e-01);
671  all_my_pid_pair_xsecs[PID_pair(-2000005,-2000001)] = silly_pid_xsec_constructor( PID_pair(-2000005,-2000001), 4.58386e-01);
672  all_my_pid_pair_xsecs[PID_pair(2000002,2000002)] = silly_pid_xsec_constructor( PID_pair(2000002,2000002), 2.05502e+01);
673  all_my_pid_pair_xsecs[PID_pair(-2000002,-2000002)] = silly_pid_xsec_constructor( PID_pair(-2000002,-2000002), 2.05502e+01);
674  all_my_pid_pair_xsecs[PID_pair(2000002,2000004)] = silly_pid_xsec_constructor( PID_pair(2000002,2000004), 0.00000e+00);
675  all_my_pid_pair_xsecs[PID_pair(-2000004,-2000002)] = silly_pid_xsec_constructor( PID_pair(-2000004,-2000002), 0.00000e+00);
676  all_my_pid_pair_xsecs[PID_pair(1000001,2000002)] = silly_pid_xsec_constructor( PID_pair(1000001,2000002), 6.37069e+00);
677  all_my_pid_pair_xsecs[PID_pair(-2000002,-1000001)] = silly_pid_xsec_constructor( PID_pair(-2000002,-1000001), 6.37069e+00);
678  all_my_pid_pair_xsecs[PID_pair(1000003,2000002)] = silly_pid_xsec_constructor( PID_pair(1000003,2000002), 0.00000e+00);
679  all_my_pid_pair_xsecs[PID_pair(-2000002,-1000003)] = silly_pid_xsec_constructor( PID_pair(-2000002,-1000003), 0.00000e+00);
680  all_my_pid_pair_xsecs[PID_pair(1000005,2000002)] = silly_pid_xsec_constructor( PID_pair(1000005,2000002), 1.04695e+00);
681  all_my_pid_pair_xsecs[PID_pair(-2000002,-1000005)] = silly_pid_xsec_constructor( PID_pair(-2000002,-1000005), 1.04695e+00);
682  all_my_pid_pair_xsecs[PID_pair(2000001,2000002)] = silly_pid_xsec_constructor( PID_pair(2000001,2000002), 2.47250e+01);
683  all_my_pid_pair_xsecs[PID_pair(-2000002,-2000001)] = silly_pid_xsec_constructor( PID_pair(-2000002,-2000001), 2.47250e+01);
684  all_my_pid_pair_xsecs[PID_pair(2000002,2000003)] = silly_pid_xsec_constructor( PID_pair(2000002,2000003), 0.00000e+00);
685  all_my_pid_pair_xsecs[PID_pair(-2000003,-2000002)] = silly_pid_xsec_constructor( PID_pair(-2000003,-2000002), 0.00000e+00);
686  all_my_pid_pair_xsecs[PID_pair(2000002,2000005)] = silly_pid_xsec_constructor( PID_pair(2000002,2000005), 4.29016e-01);
687  all_my_pid_pair_xsecs[PID_pair(-2000005,-2000002)] = silly_pid_xsec_constructor( PID_pair(-2000005,-2000002), 4.29016e-01);
688  all_my_pid_pair_xsecs[PID_pair(2000003,2000003)] = silly_pid_xsec_constructor( PID_pair(2000003,2000003), 0.00000e+00);
689  all_my_pid_pair_xsecs[PID_pair(-2000003,-2000003)] = silly_pid_xsec_constructor( PID_pair(-2000003,-2000003), 0.00000e+00);
690  all_my_pid_pair_xsecs[PID_pair(2000003,2000005)] = silly_pid_xsec_constructor( PID_pair(2000003,2000005), 0.00000e+00);
691  all_my_pid_pair_xsecs[PID_pair(-2000005,-2000003)] = silly_pid_xsec_constructor( PID_pair(-2000005,-2000003), 0.00000e+00);
692  all_my_pid_pair_xsecs[PID_pair(2000004,2000004)] = silly_pid_xsec_constructor( PID_pair(2000004,2000004), 0.00000e+00);
693  all_my_pid_pair_xsecs[PID_pair(-2000004,-2000004)] = silly_pid_xsec_constructor( PID_pair(-2000004,-2000004), 0.00000e+00);
694  all_my_pid_pair_xsecs[PID_pair(1000001,2000004)] = silly_pid_xsec_constructor( PID_pair(1000001,2000004), 0.00000e+00);
695  all_my_pid_pair_xsecs[PID_pair(-2000004,-1000001)] = silly_pid_xsec_constructor( PID_pair(-2000004,-1000001), 0.00000e+00);
696  all_my_pid_pair_xsecs[PID_pair(1000003,2000004)] = silly_pid_xsec_constructor( PID_pair(1000003,2000004), 0.00000e+00);
697  all_my_pid_pair_xsecs[PID_pair(-2000004,-1000003)] = silly_pid_xsec_constructor( PID_pair(-2000004,-1000003), 0.00000e+00);
698  all_my_pid_pair_xsecs[PID_pair(1000005,2000004)] = silly_pid_xsec_constructor( PID_pair(1000005,2000004), 0.00000e+00);
699  all_my_pid_pair_xsecs[PID_pair(-2000004,-1000005)] = silly_pid_xsec_constructor( PID_pair(-2000004,-1000005), 0.00000e+00);
700  all_my_pid_pair_xsecs[PID_pair(2000001,2000004)] = silly_pid_xsec_constructor( PID_pair(2000001,2000004), 0.00000e+00);
701  all_my_pid_pair_xsecs[PID_pair(-2000004,-2000001)] = silly_pid_xsec_constructor( PID_pair(-2000004,-2000001), 0.00000e+00);
702  all_my_pid_pair_xsecs[PID_pair(2000003,2000004)] = silly_pid_xsec_constructor( PID_pair(2000003,2000004), 0.00000e+00);
703  all_my_pid_pair_xsecs[PID_pair(-2000004,-2000003)] = silly_pid_xsec_constructor( PID_pair(-2000004,-2000003), 0.00000e+00);
704  all_my_pid_pair_xsecs[PID_pair(2000004,2000005)] = silly_pid_xsec_constructor( PID_pair(2000004,2000005), 0.00000e+00);
705  all_my_pid_pair_xsecs[PID_pair(-2000005,-2000004)] = silly_pid_xsec_constructor( PID_pair(-2000005,-2000004), 0.00000e+00);
706  all_my_pid_pair_xsecs[PID_pair(2000005,2000005)] = silly_pid_xsec_constructor( PID_pair(2000005,2000005), 0.00000e+00);
707  all_my_pid_pair_xsecs[PID_pair(-2000005,-2000005)] = silly_pid_xsec_constructor( PID_pair(-2000005,-2000005), 0.00000e+00);
708  all_my_pid_pair_xsecs[PID_pair(1000001,2000006)] = silly_pid_xsec_constructor( PID_pair(1000001,2000006), 3.02755e-03);
709  all_my_pid_pair_xsecs[PID_pair(-2000006,-1000001)] = silly_pid_xsec_constructor( PID_pair(-2000006,-1000001), 3.02755e-03);
710  all_my_pid_pair_xsecs[PID_pair(1000003,2000006)] = silly_pid_xsec_constructor( PID_pair(1000003,2000006), 0.00000e+00);
711  all_my_pid_pair_xsecs[PID_pair(-2000006,-1000003)] = silly_pid_xsec_constructor( PID_pair(-2000006,-1000003), 0.00000e+00);
712  all_my_pid_pair_xsecs[PID_pair(1000005,2000006)] = silly_pid_xsec_constructor( PID_pair(1000005,2000006), 0.00000e+00);
713  all_my_pid_pair_xsecs[PID_pair(-2000006,-1000005)] = silly_pid_xsec_constructor( PID_pair(-2000006,-1000005), 0.00000e+00);
714  all_my_pid_pair_xsecs[PID_pair(2000005,2000006)] = silly_pid_xsec_constructor( PID_pair(2000005,2000006), 0.00000e+00);
715  all_my_pid_pair_xsecs[PID_pair(-2000006,-2000005)] = silly_pid_xsec_constructor( PID_pair(-2000006,-2000005), 0.00000e+00);
716  all_my_pid_pair_xsecs[PID_pair(1000001,1000022)] = silly_pid_xsec_constructor( PID_pair(1000001,1000022), 0.00000e+00);
717  all_my_pid_pair_xsecs[PID_pair(-1000001,1000022)] = silly_pid_xsec_constructor( PID_pair(-1000001,1000022), 0.00000e+00);
718  all_my_pid_pair_xsecs[PID_pair(1000002,1000022)] = silly_pid_xsec_constructor( PID_pair(1000002,1000022), 0.00000e+00);
719  all_my_pid_pair_xsecs[PID_pair(-1000002,1000022)] = silly_pid_xsec_constructor( PID_pair(-1000002,1000022), 0.00000e+00);
720  all_my_pid_pair_xsecs[PID_pair(1000003,1000022)] = silly_pid_xsec_constructor( PID_pair(1000003,1000022), 0.00000e+00);
721  all_my_pid_pair_xsecs[PID_pair(-1000003,1000022)] = silly_pid_xsec_constructor( PID_pair(-1000003,1000022), 0.00000e+00);
722  all_my_pid_pair_xsecs[PID_pair(1000004,1000022)] = silly_pid_xsec_constructor( PID_pair(1000004,1000022), 0.00000e+00);
723  all_my_pid_pair_xsecs[PID_pair(-1000004,1000022)] = silly_pid_xsec_constructor( PID_pair(-1000004,1000022), 0.00000e+00);
724  all_my_pid_pair_xsecs[PID_pair(1000005,1000022)] = silly_pid_xsec_constructor( PID_pair(1000005,1000022), 0.00000e+00);
725  all_my_pid_pair_xsecs[PID_pair(-1000005,1000022)] = silly_pid_xsec_constructor( PID_pair(-1000005,1000022), 0.00000e+00);
726  all_my_pid_pair_xsecs[PID_pair(1000022,2000001)] = silly_pid_xsec_constructor( PID_pair(1000022,2000001), 0.00000e+00);
727  all_my_pid_pair_xsecs[PID_pair(-2000001,1000022)] = silly_pid_xsec_constructor( PID_pair(-2000001,1000022), 0.00000e+00);
728  all_my_pid_pair_xsecs[PID_pair(1000022,2000002)] = silly_pid_xsec_constructor( PID_pair(1000022,2000002), 0.00000e+00);
729  all_my_pid_pair_xsecs[PID_pair(-2000002,1000022)] = silly_pid_xsec_constructor( PID_pair(-2000002,1000022), 0.00000e+00);
730  all_my_pid_pair_xsecs[PID_pair(1000022,2000003)] = silly_pid_xsec_constructor( PID_pair(1000022,2000003), 0.00000e+00);
731  all_my_pid_pair_xsecs[PID_pair(-2000003,1000022)] = silly_pid_xsec_constructor( PID_pair(-2000003,1000022), 0.00000e+00);
732  all_my_pid_pair_xsecs[PID_pair(1000022,2000004)] = silly_pid_xsec_constructor( PID_pair(1000022,2000004), 0.00000e+00);
733  all_my_pid_pair_xsecs[PID_pair(-2000004,1000022)] = silly_pid_xsec_constructor( PID_pair(-2000004,1000022), 0.00000e+00);
734  all_my_pid_pair_xsecs[PID_pair(1000022,2000005)] = silly_pid_xsec_constructor( PID_pair(1000022,2000005), 0.00000e+00);
735  all_my_pid_pair_xsecs[PID_pair(-2000005,1000022)] = silly_pid_xsec_constructor( PID_pair(-2000005,1000022), 0.00000e+00);
736  all_my_pid_pair_xsecs[PID_pair(1000001,1000023)] = silly_pid_xsec_constructor( PID_pair(1000001,1000023), 0.00000e+00);
737  all_my_pid_pair_xsecs[PID_pair(-1000001,1000023)] = silly_pid_xsec_constructor( PID_pair(-1000001,1000023), 0.00000e+00);
738  all_my_pid_pair_xsecs[PID_pair(1000002,1000023)] = silly_pid_xsec_constructor( PID_pair(1000002,1000023), 0.00000e+00);
739  all_my_pid_pair_xsecs[PID_pair(-1000002,1000023)] = silly_pid_xsec_constructor( PID_pair(-1000002,1000023), 0.00000e+00);
740  all_my_pid_pair_xsecs[PID_pair(1000003,1000023)] = silly_pid_xsec_constructor( PID_pair(1000003,1000023), 0.00000e+00);
741  all_my_pid_pair_xsecs[PID_pair(-1000003,1000023)] = silly_pid_xsec_constructor( PID_pair(-1000003,1000023), 0.00000e+00);
742  all_my_pid_pair_xsecs[PID_pair(1000004,1000023)] = silly_pid_xsec_constructor( PID_pair(1000004,1000023), 0.00000e+00);
743  all_my_pid_pair_xsecs[PID_pair(-1000004,1000023)] = silly_pid_xsec_constructor( PID_pair(-1000004,1000023), 0.00000e+00);
744  all_my_pid_pair_xsecs[PID_pair(1000005,1000023)] = silly_pid_xsec_constructor( PID_pair(1000005,1000023), 0.00000e+00);
745  all_my_pid_pair_xsecs[PID_pair(-1000005,1000023)] = silly_pid_xsec_constructor( PID_pair(-1000005,1000023), 0.00000e+00);
746  all_my_pid_pair_xsecs[PID_pair(1000023,2000001)] = silly_pid_xsec_constructor( PID_pair(1000023,2000001), 0.00000e+00);
747  all_my_pid_pair_xsecs[PID_pair(-2000001,1000023)] = silly_pid_xsec_constructor( PID_pair(-2000001,1000023), 0.00000e+00);
748  all_my_pid_pair_xsecs[PID_pair(1000023,2000002)] = silly_pid_xsec_constructor( PID_pair(1000023,2000002), 0.00000e+00);
749  all_my_pid_pair_xsecs[PID_pair(-2000002,1000023)] = silly_pid_xsec_constructor( PID_pair(-2000002,1000023), 0.00000e+00);
750  all_my_pid_pair_xsecs[PID_pair(1000023,2000003)] = silly_pid_xsec_constructor( PID_pair(1000023,2000003), 0.00000e+00);
751  all_my_pid_pair_xsecs[PID_pair(-2000003,1000023)] = silly_pid_xsec_constructor( PID_pair(-2000003,1000023), 0.00000e+00);
752  all_my_pid_pair_xsecs[PID_pair(1000023,2000004)] = silly_pid_xsec_constructor( PID_pair(1000023,2000004), 0.00000e+00);
753  all_my_pid_pair_xsecs[PID_pair(-2000004,1000023)] = silly_pid_xsec_constructor( PID_pair(-2000004,1000023), 0.00000e+00);
754  all_my_pid_pair_xsecs[PID_pair(1000023,2000005)] = silly_pid_xsec_constructor( PID_pair(1000023,2000005), 0.00000e+00);
755  all_my_pid_pair_xsecs[PID_pair(-2000005,1000023)] = silly_pid_xsec_constructor( PID_pair(-2000005,1000023), 0.00000e+00);
756  all_my_pid_pair_xsecs[PID_pair(1000001,1000025)] = silly_pid_xsec_constructor( PID_pair(1000001,1000025), 0.00000e+00);
757  all_my_pid_pair_xsecs[PID_pair(-1000001,1000025)] = silly_pid_xsec_constructor( PID_pair(-1000001,1000025), 0.00000e+00);
758  all_my_pid_pair_xsecs[PID_pair(1000002,1000025)] = silly_pid_xsec_constructor( PID_pair(1000002,1000025), 0.00000e+00);
759  all_my_pid_pair_xsecs[PID_pair(-1000002,1000025)] = silly_pid_xsec_constructor( PID_pair(-1000002,1000025), 0.00000e+00);
760  all_my_pid_pair_xsecs[PID_pair(1000003,1000025)] = silly_pid_xsec_constructor( PID_pair(1000003,1000025), 0.00000e+00);
761  all_my_pid_pair_xsecs[PID_pair(-1000003,1000025)] = silly_pid_xsec_constructor( PID_pair(-1000003,1000025), 0.00000e+00);
762  all_my_pid_pair_xsecs[PID_pair(1000004,1000025)] = silly_pid_xsec_constructor( PID_pair(1000004,1000025), 0.00000e+00);
763  all_my_pid_pair_xsecs[PID_pair(-1000004,1000025)] = silly_pid_xsec_constructor( PID_pair(-1000004,1000025), 0.00000e+00);
764  all_my_pid_pair_xsecs[PID_pair(1000005,1000025)] = silly_pid_xsec_constructor( PID_pair(1000005,1000025), 0.00000e+00);
765  all_my_pid_pair_xsecs[PID_pair(-1000005,1000025)] = silly_pid_xsec_constructor( PID_pair(-1000005,1000025), 0.00000e+00);
766  all_my_pid_pair_xsecs[PID_pair(1000025,2000001)] = silly_pid_xsec_constructor( PID_pair(1000025,2000001), 0.00000e+00);
767  all_my_pid_pair_xsecs[PID_pair(-2000001,1000025)] = silly_pid_xsec_constructor( PID_pair(-2000001,1000025), 0.00000e+00);
768  all_my_pid_pair_xsecs[PID_pair(1000025,2000002)] = silly_pid_xsec_constructor( PID_pair(1000025,2000002), 0.00000e+00);
769  all_my_pid_pair_xsecs[PID_pair(-2000002,1000025)] = silly_pid_xsec_constructor( PID_pair(-2000002,1000025), 0.00000e+00);
770  all_my_pid_pair_xsecs[PID_pair(1000025,2000003)] = silly_pid_xsec_constructor( PID_pair(1000025,2000003), 0.00000e+00);
771  all_my_pid_pair_xsecs[PID_pair(-2000003,1000025)] = silly_pid_xsec_constructor( PID_pair(-2000003,1000025), 0.00000e+00);
772  all_my_pid_pair_xsecs[PID_pair(1000025,2000004)] = silly_pid_xsec_constructor( PID_pair(1000025,2000004), 0.00000e+00);
773  all_my_pid_pair_xsecs[PID_pair(-2000004,1000025)] = silly_pid_xsec_constructor( PID_pair(-2000004,1000025), 0.00000e+00);
774  all_my_pid_pair_xsecs[PID_pair(1000025,2000005)] = silly_pid_xsec_constructor( PID_pair(1000025,2000005), 0.00000e+00);
775  all_my_pid_pair_xsecs[PID_pair(-2000005,1000025)] = silly_pid_xsec_constructor( PID_pair(-2000005,1000025), 0.00000e+00);
776  all_my_pid_pair_xsecs[PID_pair(1000001,1000035)] = silly_pid_xsec_constructor( PID_pair(1000001,1000035), 0.00000e+00);
777  all_my_pid_pair_xsecs[PID_pair(-1000001,1000035)] = silly_pid_xsec_constructor( PID_pair(-1000001,1000035), 0.00000e+00);
778  all_my_pid_pair_xsecs[PID_pair(1000002,1000035)] = silly_pid_xsec_constructor( PID_pair(1000002,1000035), 0.00000e+00);
779  all_my_pid_pair_xsecs[PID_pair(-1000002,1000035)] = silly_pid_xsec_constructor( PID_pair(-1000002,1000035), 0.00000e+00);
780  all_my_pid_pair_xsecs[PID_pair(1000003,1000035)] = silly_pid_xsec_constructor( PID_pair(1000003,1000035), 0.00000e+00);
781  all_my_pid_pair_xsecs[PID_pair(-1000003,1000035)] = silly_pid_xsec_constructor( PID_pair(-1000003,1000035), 0.00000e+00);
782  all_my_pid_pair_xsecs[PID_pair(1000004,1000035)] = silly_pid_xsec_constructor( PID_pair(1000004,1000035), 0.00000e+00);
783  all_my_pid_pair_xsecs[PID_pair(-1000004,1000035)] = silly_pid_xsec_constructor( PID_pair(-1000004,1000035), 0.00000e+00);
784  all_my_pid_pair_xsecs[PID_pair(1000005,1000035)] = silly_pid_xsec_constructor( PID_pair(1000005,1000035), 0.00000e+00);
785  all_my_pid_pair_xsecs[PID_pair(-1000005,1000035)] = silly_pid_xsec_constructor( PID_pair(-1000005,1000035), 0.00000e+00);
786  all_my_pid_pair_xsecs[PID_pair(1000035,2000001)] = silly_pid_xsec_constructor( PID_pair(1000035,2000001), 0.00000e+00);
787  all_my_pid_pair_xsecs[PID_pair(-2000001,1000035)] = silly_pid_xsec_constructor( PID_pair(-2000001,1000035), 0.00000e+00);
788  all_my_pid_pair_xsecs[PID_pair(1000035,2000002)] = silly_pid_xsec_constructor( PID_pair(1000035,2000002), 0.00000e+00);
789  all_my_pid_pair_xsecs[PID_pair(-2000002,1000035)] = silly_pid_xsec_constructor( PID_pair(-2000002,1000035), 0.00000e+00);
790  all_my_pid_pair_xsecs[PID_pair(1000035,2000003)] = silly_pid_xsec_constructor( PID_pair(1000035,2000003), 0.00000e+00);
791  all_my_pid_pair_xsecs[PID_pair(-2000003,1000035)] = silly_pid_xsec_constructor( PID_pair(-2000003,1000035), 0.00000e+00);
792  all_my_pid_pair_xsecs[PID_pair(1000035,2000004)] = silly_pid_xsec_constructor( PID_pair(1000035,2000004), 0.00000e+00);
793  all_my_pid_pair_xsecs[PID_pair(-2000004,1000035)] = silly_pid_xsec_constructor( PID_pair(-2000004,1000035), 0.00000e+00);
794  all_my_pid_pair_xsecs[PID_pair(1000035,2000005)] = silly_pid_xsec_constructor( PID_pair(1000035,2000005), 0.00000e+00);
795  all_my_pid_pair_xsecs[PID_pair(-2000005,1000035)] = silly_pid_xsec_constructor( PID_pair(-2000005,1000035), 0.00000e+00);
796  all_my_pid_pair_xsecs[PID_pair(1000001,1000024)] = silly_pid_xsec_constructor( PID_pair(1000001,1000024), 0.00000e+00);
797  all_my_pid_pair_xsecs[PID_pair(-1000024,-1000001)] = silly_pid_xsec_constructor( PID_pair(-1000024,-1000001), 0.00000e+00);
798  all_my_pid_pair_xsecs[PID_pair(-1000024,1000002)] = silly_pid_xsec_constructor( PID_pair(-1000024,1000002), 0.00000e+00);
799  all_my_pid_pair_xsecs[PID_pair(-1000002,1000024)] = silly_pid_xsec_constructor( PID_pair(-1000002,1000024), 0.00000e+00);
800  all_my_pid_pair_xsecs[PID_pair(1000003,1000024)] = silly_pid_xsec_constructor( PID_pair(1000003,1000024), 0.00000e+00);
801  all_my_pid_pair_xsecs[PID_pair(-1000024,-1000003)] = silly_pid_xsec_constructor( PID_pair(-1000024,-1000003), 0.00000e+00);
802  all_my_pid_pair_xsecs[PID_pair(-1000024,1000004)] = silly_pid_xsec_constructor( PID_pair(-1000024,1000004), 0.00000e+00);
803  all_my_pid_pair_xsecs[PID_pair(-1000004,1000024)] = silly_pid_xsec_constructor( PID_pair(-1000004,1000024), 0.00000e+00);
804  all_my_pid_pair_xsecs[PID_pair(1000005,1000024)] = silly_pid_xsec_constructor( PID_pair(1000005,1000024), 0.00000e+00);
805  all_my_pid_pair_xsecs[PID_pair(-1000024,-1000005)] = silly_pid_xsec_constructor( PID_pair(-1000024,-1000005), 0.00000e+00);
806  all_my_pid_pair_xsecs[PID_pair(-1000024,1000006)] = silly_pid_xsec_constructor( PID_pair(-1000024,1000006), 0.00000e+00);
807  all_my_pid_pair_xsecs[PID_pair(-1000006,1000024)] = silly_pid_xsec_constructor( PID_pair(-1000006,1000024), 0.00000e+00);
808  all_my_pid_pair_xsecs[PID_pair(1000024,2000005)] = silly_pid_xsec_constructor( PID_pair(1000024,2000005), 0.00000e+00);
809  all_my_pid_pair_xsecs[PID_pair(-2000005,-1000024)] = silly_pid_xsec_constructor( PID_pair(-2000005,-1000024), 0.00000e+00);
810  all_my_pid_pair_xsecs[PID_pair(-1000024,2000006)] = silly_pid_xsec_constructor( PID_pair(-1000024,2000006), 0.00000e+00);
811  all_my_pid_pair_xsecs[PID_pair(-2000006,1000024)] = silly_pid_xsec_constructor( PID_pair(-2000006,1000024), 0.00000e+00);
812  all_my_pid_pair_xsecs[PID_pair(1000001,1000037)] = silly_pid_xsec_constructor( PID_pair(1000001,1000037), 0.00000e+00);
813  all_my_pid_pair_xsecs[PID_pair(-1000037,-1000001)] = silly_pid_xsec_constructor( PID_pair(-1000037,-1000001), 0.00000e+00);
814  all_my_pid_pair_xsecs[PID_pair(-1000037,1000002)] = silly_pid_xsec_constructor( PID_pair(-1000037,1000002), 0.00000e+00);
815  all_my_pid_pair_xsecs[PID_pair(-1000002,1000037)] = silly_pid_xsec_constructor( PID_pair(-1000002,1000037), 0.00000e+00);
816  all_my_pid_pair_xsecs[PID_pair(1000003,1000037)] = silly_pid_xsec_constructor( PID_pair(1000003,1000037), 0.00000e+00);
817  all_my_pid_pair_xsecs[PID_pair(-1000037,-1000003)] = silly_pid_xsec_constructor( PID_pair(-1000037,-1000003), 0.00000e+00);
818  all_my_pid_pair_xsecs[PID_pair(-1000037,1000004)] = silly_pid_xsec_constructor( PID_pair(-1000037,1000004), 0.00000e+00);
819  all_my_pid_pair_xsecs[PID_pair(-1000004,1000037)] = silly_pid_xsec_constructor( PID_pair(-1000004,1000037), 0.00000e+00);
820  all_my_pid_pair_xsecs[PID_pair(1000005,1000037)] = silly_pid_xsec_constructor( PID_pair(1000005,1000037), 0.00000e+00);
821  all_my_pid_pair_xsecs[PID_pair(-1000037,-1000005)] = silly_pid_xsec_constructor( PID_pair(-1000037,-1000005), 0.00000e+00);
822  all_my_pid_pair_xsecs[PID_pair(-1000037,1000006)] = silly_pid_xsec_constructor( PID_pair(-1000037,1000006), 0.00000e+00);
823  all_my_pid_pair_xsecs[PID_pair(-1000006,1000037)] = silly_pid_xsec_constructor( PID_pair(-1000006,1000037), 0.00000e+00);
824  all_my_pid_pair_xsecs[PID_pair(1000037,2000005)] = silly_pid_xsec_constructor( PID_pair(1000037,2000005), 0.00000e+00);
825  all_my_pid_pair_xsecs[PID_pair(-2000005,-1000037)] = silly_pid_xsec_constructor( PID_pair(-2000005,-1000037), 0.00000e+00);
826  all_my_pid_pair_xsecs[PID_pair(-1000037,2000006)] = silly_pid_xsec_constructor( PID_pair(-1000037,2000006), 0.00000e+00);
827  all_my_pid_pair_xsecs[PID_pair(-2000006,1000037)] = silly_pid_xsec_constructor( PID_pair(-2000006,1000037), 0.00000e+00);
828  all_my_pid_pair_xsecs[PID_pair(1000022,1000022)] = silly_pid_xsec_constructor( PID_pair(1000022,1000022), 0.00000e+00);
829  all_my_pid_pair_xsecs[PID_pair(1000022,1000023)] = silly_pid_xsec_constructor( PID_pair(1000022,1000023), 0.00000e+00);
830  all_my_pid_pair_xsecs[PID_pair(1000023,1000023)] = silly_pid_xsec_constructor( PID_pair(1000023,1000023), 0.00000e+00);
831  all_my_pid_pair_xsecs[PID_pair(1000022,1000025)] = silly_pid_xsec_constructor( PID_pair(1000022,1000025), 0.00000e+00);
832  all_my_pid_pair_xsecs[PID_pair(1000023,1000025)] = silly_pid_xsec_constructor( PID_pair(1000023,1000025), 0.00000e+00);
833  all_my_pid_pair_xsecs[PID_pair(1000025,1000025)] = silly_pid_xsec_constructor( PID_pair(1000025,1000025), 0.00000e+00);
834  all_my_pid_pair_xsecs[PID_pair(1000022,1000035)] = silly_pid_xsec_constructor( PID_pair(1000022,1000035), 0.00000e+00);
835  all_my_pid_pair_xsecs[PID_pair(1000023,1000035)] = silly_pid_xsec_constructor( PID_pair(1000023,1000035), 0.00000e+00);
836  all_my_pid_pair_xsecs[PID_pair(1000025,1000035)] = silly_pid_xsec_constructor( PID_pair(1000025,1000035), 0.00000e+00);
837  all_my_pid_pair_xsecs[PID_pair(1000035,1000035)] = silly_pid_xsec_constructor( PID_pair(1000035,1000035), 0.00000e+00);
838  all_my_pid_pair_xsecs[PID_pair(1000022,1000024)] = silly_pid_xsec_constructor( PID_pair(1000022,1000024), 0.00000e+00);
839  all_my_pid_pair_xsecs[PID_pair(-1000024,1000022)] = silly_pid_xsec_constructor( PID_pair(-1000024,1000022), 0.00000e+00);
840  all_my_pid_pair_xsecs[PID_pair(1000022,1000037)] = silly_pid_xsec_constructor( PID_pair(1000022,1000037), 0.00000e+00);
841  all_my_pid_pair_xsecs[PID_pair(-1000037,1000022)] = silly_pid_xsec_constructor( PID_pair(-1000037,1000022), 0.00000e+00);
842  all_my_pid_pair_xsecs[PID_pair(1000023,1000024)] = silly_pid_xsec_constructor( PID_pair(1000023,1000024), 0.00000e+00);
843  all_my_pid_pair_xsecs[PID_pair(-1000024,1000023)] = silly_pid_xsec_constructor( PID_pair(-1000024,1000023), 0.00000e+00);
844  all_my_pid_pair_xsecs[PID_pair(1000023,1000037)] = silly_pid_xsec_constructor( PID_pair(1000023,1000037), 0.00000e+00);
845  all_my_pid_pair_xsecs[PID_pair(-1000037,1000023)] = silly_pid_xsec_constructor( PID_pair(-1000037,1000023), 0.00000e+00);
846  all_my_pid_pair_xsecs[PID_pair(1000024,1000025)] = silly_pid_xsec_constructor( PID_pair(1000024,1000025), 0.00000e+00);
847  all_my_pid_pair_xsecs[PID_pair(-1000024,1000025)] = silly_pid_xsec_constructor( PID_pair(-1000024,1000025), 0.00000e+00);
848  all_my_pid_pair_xsecs[PID_pair(1000025,1000037)] = silly_pid_xsec_constructor( PID_pair(1000025,1000037), 0.00000e+00);
849  all_my_pid_pair_xsecs[PID_pair(-1000037,1000025)] = silly_pid_xsec_constructor( PID_pair(-1000037,1000025), 0.00000e+00);
850  all_my_pid_pair_xsecs[PID_pair(1000024,1000035)] = silly_pid_xsec_constructor( PID_pair(1000024,1000035), 0.00000e+00);
851  all_my_pid_pair_xsecs[PID_pair(-1000024,1000035)] = silly_pid_xsec_constructor( PID_pair(-1000024,1000035), 0.00000e+00);
852  all_my_pid_pair_xsecs[PID_pair(1000035,1000037)] = silly_pid_xsec_constructor( PID_pair(1000035,1000037), 0.00000e+00);
853  all_my_pid_pair_xsecs[PID_pair(-1000037,1000035)] = silly_pid_xsec_constructor( PID_pair(-1000037,1000035), 0.00000e+00);
854  all_my_pid_pair_xsecs[PID_pair(-1000024,1000024)] = silly_pid_xsec_constructor( PID_pair(-1000024,1000024), 0.00000e+00);
855  all_my_pid_pair_xsecs[PID_pair(-1000037,1000024)] = silly_pid_xsec_constructor( PID_pair(-1000037,1000024), 0.00000e+00);
856  all_my_pid_pair_xsecs[PID_pair(-1000024,1000037)] = silly_pid_xsec_constructor( PID_pair(-1000024,1000037), 0.00000e+00);
857  all_my_pid_pair_xsecs[PID_pair(-1000037,1000037)] = silly_pid_xsec_constructor( PID_pair(-1000037,1000037), 0.00000e+00);
858  all_my_pid_pair_xsecs[PID_pair(1000021,1000022)] = silly_pid_xsec_constructor( PID_pair(1000021,1000022), 0.00000e+00);
859  all_my_pid_pair_xsecs[PID_pair(1000021,1000023)] = silly_pid_xsec_constructor( PID_pair(1000021,1000023), 0.00000e+00);
860  all_my_pid_pair_xsecs[PID_pair(1000021,1000025)] = silly_pid_xsec_constructor( PID_pair(1000021,1000025), 0.00000e+00);
861  all_my_pid_pair_xsecs[PID_pair(1000021,1000035)] = silly_pid_xsec_constructor( PID_pair(1000021,1000035), 0.00000e+00);
862  all_my_pid_pair_xsecs[PID_pair(1000021,1000024)] = silly_pid_xsec_constructor( PID_pair(1000021,1000024), 0.00000e+00);
863  all_my_pid_pair_xsecs[PID_pair(-1000024,1000021)] = silly_pid_xsec_constructor( PID_pair(-1000024,1000021), 0.00000e+00);
864  all_my_pid_pair_xsecs[PID_pair(1000021,1000037)] = silly_pid_xsec_constructor( PID_pair(1000021,1000037), 0.00000e+00);
865  all_my_pid_pair_xsecs[PID_pair(-1000037,1000021)] = silly_pid_xsec_constructor( PID_pair(-1000037,1000021), 0.00000e+00);
866  all_my_pid_pair_xsecs[PID_pair(-1000011,1000011)] = silly_pid_xsec_constructor( PID_pair(-1000011,1000011), 0.00000e+00);
867  all_my_pid_pair_xsecs[PID_pair(-1000012,1000012)] = silly_pid_xsec_constructor( PID_pair(-1000012,1000012), 0.00000e+00);
868  all_my_pid_pair_xsecs[PID_pair(-1000011,1000012)] = silly_pid_xsec_constructor( PID_pair(-1000011,1000012), 0.00000e+00);
869  all_my_pid_pair_xsecs[PID_pair(-1000012,1000011)] = silly_pid_xsec_constructor( PID_pair(-1000012,1000011), 0.00000e+00);
870  all_my_pid_pair_xsecs[PID_pair(-1000013,1000013)] = silly_pid_xsec_constructor( PID_pair(-1000013,1000013), 0.00000e+00);
871  all_my_pid_pair_xsecs[PID_pair(-1000014,1000014)] = silly_pid_xsec_constructor( PID_pair(-1000014,1000014), 0.00000e+00);
872  all_my_pid_pair_xsecs[PID_pair(-1000013,1000014)] = silly_pid_xsec_constructor( PID_pair(-1000013,1000014), 0.00000e+00);
873  all_my_pid_pair_xsecs[PID_pair(-1000014,1000013)] = silly_pid_xsec_constructor( PID_pair(-1000014,1000013), 0.00000e+00);
874  all_my_pid_pair_xsecs[PID_pair(-1000015,1000015)] = silly_pid_xsec_constructor( PID_pair(-1000015,1000015), 0.00000e+00);
875  all_my_pid_pair_xsecs[PID_pair(-2000015,1000015)] = silly_pid_xsec_constructor( PID_pair(-2000015,1000015), 0.00000e+00);
876  all_my_pid_pair_xsecs[PID_pair(-1000015,2000015)] = silly_pid_xsec_constructor( PID_pair(-1000015,2000015), 0.00000e+00);
877  all_my_pid_pair_xsecs[PID_pair(-1000016,1000016)] = silly_pid_xsec_constructor( PID_pair(-1000016,1000016), 0.00000e+00);
878  all_my_pid_pair_xsecs[PID_pair(-1000015,1000016)] = silly_pid_xsec_constructor( PID_pair(-1000015,1000016), 0.00000e+00);
879  all_my_pid_pair_xsecs[PID_pair(-1000016,1000015)] = silly_pid_xsec_constructor( PID_pair(-1000016,1000015), 0.00000e+00);
880  all_my_pid_pair_xsecs[PID_pair(-2000015,1000016)] = silly_pid_xsec_constructor( PID_pair(-2000015,1000016), 0.00000e+00);
881  all_my_pid_pair_xsecs[PID_pair(-1000016,2000015)] = silly_pid_xsec_constructor( PID_pair(-1000016,2000015), 0.00000e+00);
882  all_my_pid_pair_xsecs[PID_pair(-2000011,2000011)] = silly_pid_xsec_constructor( PID_pair(-2000011,2000011), 0.00000e+00);
883  all_my_pid_pair_xsecs[PID_pair(-2000013,2000013)] = silly_pid_xsec_constructor( PID_pair(-2000013,2000013), 0.00000e+00);
884  all_my_pid_pair_xsecs[PID_pair(-2000015,2000015)] = silly_pid_xsec_constructor( PID_pair(-2000015,2000015), 0.00000e+00);
885  }
886 
887  if(*Loop::iteration == COLLIDER_INIT)
888  {
889  result.clear();
890  }
891 
892  if(*Loop::iteration == XSEC_CALCULATION)
893  {
894  for (const PID_pair& pid_pair : *Dep::ActivePIDPairs)
895  {
896  #ifdef COLLIDERBIT_DEBUG
897  cout << DEBUG_PREFIX << "getPIDPairCrossSectionsMap_testing: " << "Looking up xsec for [" << pid_pair.pid1() << "," << pid_pair.pid2() << "]." << endl;
898  #endif
899  result[pid_pair] = all_my_pid_pair_xsecs.at(pid_pair);
900  }
901  } // end iteration
902 
903  }
904 
905 
906 
909  {
910  using namespace Pipes::getProcessCrossSectionsMap;
911 
912  // Use a static variable to communicate the result calculated on thread 0 during
913  // iteration XSEC_CALCULATION to all threads during iteration START_SUBPROCESS
914  static map_int_process_xsec shared_result;
915 
916  const static bool set_missing_cross_sections_to_zero = runOptions->getValueOrDef<bool>(false, "set_missing_cross_sections_to_zero");
917 
918  // Only thread 0
919  if(*Loop::iteration == COLLIDER_INIT)
920  {
921  shared_result.clear();
922  }
923 
924  // All threads
925  if(*Loop::iteration == COLLIDER_INIT_OMP)
926  {
927  result.clear();
928  }
929 
930  // Only thread 0
931  if(*Loop::iteration == XSEC_CALCULATION)
932  {
933  // Loop over all active processes and construct the cross-section map (shared_result)
934  for (size_t i = 0; i != Dep::ActiveProcessCodes->size(); ++i)
935  {
936  // Get process code
937  int proc_code = Dep::ActiveProcessCodes->at(i);
938 
939  // Construct a process_xsec_container instance to be stored in the shared_result map
940  process_xsec_container proc_xs;
941  proc_xs.set_process_code(proc_code);
942 
943  // Get iterator bounds (as a pair) over the multimap entries that match the key proc_code
944  auto mm_proc2pid_range = Dep::ActiveProcessCodeToPIDPairsMap->equal_range(proc_code);
945 
946  // Loop over these elements in the multimap
947  for (auto mm_it = mm_proc2pid_range.first; mm_it != mm_proc2pid_range.second; ++mm_it)
948  {
949  const PID_pair& pids = mm_it->second;
950 
951  // Obtain the cross-section from the PID pair via the PIDPairCrossSectionsMap (map_PID_pair_PID_pair_xsec) dependency
952  PID_pair_xsec_container pids_xs;
953  map_PID_pair_PID_pair_xsec::const_iterator iter = Dep::PIDPairCrossSectionsMap->find(pids);
954  if (iter != Dep::PIDPairCrossSectionsMap->end())
955  {
956  pids_xs = iter->second;
957  }
958  else
959  {
960  if(set_missing_cross_sections_to_zero)
961  {
962  pids_xs.set_xsec(0.0, 0.0);
963  }
964  else
965  {
966  std::stringstream errmsg_ss;
967  errmsg_ss << "No cross-section provided for PID pair [" << pids.pid1() << "," << pids.pid2() <<"]. ";
968  ColliderBit_error().raise(LOCAL_INFO, errmsg_ss.str());
969  }
970  }
971 
972  // Make sure the trust_level of the process_xsec_container proc_xs is set to
973  // the lowest trust_level of the contributing PID_pair_xsec_containers
974  if (pids_xs.trust_level() < proc_xs.trust_level()) { proc_xs.set_trust_level(pids_xs.trust_level()); }
975 
976  // Accumulate result in the process_xsec_container proc_xs
977  proc_xs.sum_xsecs(pids_xs.xsec(), pids_xs.xsec_err());
978  proc_xs.register_related_pid_pair(pids);
979 
980 
981  // Check if the current PID pair is related to any other process_codes,
982  // using the multimap returned by all_PID_pairs_to_process_codes().
983  // If yes, check that these processes are among the active processes
984  // and register them in the proc_xs instance as processes sharing the cross-section
985 
986  // Get iterator bounds (as a pair) over the multimap entries that match the key pids
987  auto mm_pid2proc_range = all_PID_pairs_to_process_codes().equal_range(pids);
988 
989  // Loop over these elements in the multimap
990  for (auto mm_it = mm_pid2proc_range.first; mm_it != mm_pid2proc_range.second; ++mm_it)
991  {
992  // Get other process code
993  int other_proc_code = mm_it->second;
994 
995  // Don't run around in circles...
996  if(other_proc_code == proc_code) continue;
997 
998  // Check that other_proc_code is itself in one of the active processes, i.e. listed in Dep::ActiveProcessCodes
999  if(std::find(Dep::ActiveProcessCodes->begin(), Dep::ActiveProcessCodes->end(), other_proc_code) != Dep::ActiveProcessCodes->end())
1000  {
1001  // Add other_proc_code to the list of processes that share cross-section with proc_code
1002  // (The process_xsec_container class makes sure we only register each process once.)
1003  proc_xs.register_process_sharing_xsec(other_proc_code);
1004  }
1005  else
1006  {
1007  std::stringstream errmsg_ss;
1008  errmsg_ss << "For correct cross-section scaling of collider process " << proc_code;
1009  errmsg_ss << ", process " << other_proc_code << " must also be activated. Please check your collider settings.";
1010  ColliderBit_error().raise(LOCAL_INFO, errmsg_ss.str());
1011  }
1012  }
1013  }
1014 
1015  // Construct info string of the form "ProcessCode:<proc_code>"
1016  std::stringstream info_ss;
1017  info_ss << "ProcessCode:" << proc_code;
1018  proc_xs.set_info_string(info_ss.str());
1019 
1020  // Store proc_xs in the shared_result map
1021  shared_result[proc_code] = proc_xs;
1022  }
1023 
1024  // Let thread 0 return the correct result already after iteration XSEC_CALCULATION
1025  result = shared_result;
1026  }
1027 
1028 
1029  // All threads
1030  if (*Loop::iteration == START_SUBPROCESS)
1031  {
1032  // All threads read the result from shared_result
1033  result = shared_result;
1034  }
1035 
1036  }
1037 
1038 
1041  {
1042  using namespace Pipes::getEvGenCrossSection;
1043 
1044  // Don't bother if there are no analyses that will use this.
1045  if (Dep::RunMC->analyses.empty()) return;
1046 
1047  // Reset the xsec objects on all threads
1048  if (*Loop::iteration == COLLIDER_INIT_OMP)
1049  {
1050  result.reset();
1051  }
1052 
1053  // If we are in the main event loop, count the event towards cross-section normalisation on this thread
1054  if (*Loop::iteration >= 0)
1055  {
1056  result.log_event();
1057  }
1058 
1059  // Extract the xsecs from the MC on each thread
1060  if (*Loop::iteration == END_SUBPROCESS && Dep::RunMC->event_generation_began)
1061  {
1062  if (not Dep::RunMC->exceeded_maxFailedEvents)
1063  {
1064  const double xs_fb = (*Dep::HardScatteringSim)->xsec_fb();
1065  const double xserr_fb = (*Dep::HardScatteringSim)->xsecErr_fb();
1066  result.set_xsec(xs_fb, xserr_fb);
1067  #ifdef COLLIDERBIT_DEBUG
1068  cout << DEBUG_PREFIX << "xs_fb = " << xs_fb << " +/- " << xserr_fb << endl;
1069  #endif
1070 
1071 
1072  //
1073  // Debug code to print process cross-sections:
1074  //
1075 
1076  // #ifdef COLLIDERBIT_DEBUG
1077 
1078  // std::vector<PID_pair> all_pid_pairs;
1079  // std::map<int,int> pcode_counter;
1080 
1081  // for (const std::pair<int,PID_pair>& elem : all_process_codes_to_PID_pairs)
1082  // {
1083  // int pcode = elem.first;
1084  // const PID_pair& pids = elem.second;
1085 
1086  // double LO_proc_xsec = (*Dep::HardScatteringSim)->xsec_fb(pcode);
1087 
1088  // cout << std::fixed << std::setprecision(7);
1089  // cout << DEBUG_PREFIX << "All xsecs: " << pcode << ", ["
1090  // << pids.pid1() << "," << pids.pid2() << "], "
1091  // << std::scientific << std::setprecision(5)
1092  // << LO_proc_xsec << endl;
1093 
1094  // // Get list of all unique PID_pairs
1095  // if (std::find(all_pid_pairs.begin(), all_pid_pairs.end(), pids) == all_pid_pairs.end())
1096  // {
1097  // all_pid_pairs.push_back( PID_pair(pids) );
1098  // }
1099 
1100  // // Count pcode
1101  // pcode_counter[pcode]++;
1102  // }
1103 
1104  // // Loop over PID_pairs
1105  // for (const PID_pair& pids : all_pid_pairs)
1106  // {
1107  // double pids_xsec_val = 0.0;
1108 
1109  // // double sgn_pid1 = double(pids.pid1()) / double(abs(pids.pid1()));
1110  // // double sgn_pid2 = double(pids.pid2()) / double(abs(pids.pid2()));
1111 
1112  // PID_pair cc_pid_pair = pids.cc_pid_pair();
1113 
1114  // auto mm_pid2proc_range = all_PID_pairs_to_process_codes().equal_range(pids);
1115 
1116  // // Loop over these elements in the multimap
1117  // for (auto mm_it = mm_pid2proc_range.first; mm_it != mm_pid2proc_range.second; ++mm_it)
1118  // {
1119  // int pcode = mm_it->second;
1120 
1121  // double factor = 1.0 / pcode_counter.at(pcode);
1122 
1123  // // if ((!pids.is_antiparticle_pair()) && (sgn_pid1 * sgn_pid2 < 0))
1124  // // {
1125  // // // factor = factor * 2.0;
1126  // // if (std::find(all_pid_pairs.begin(), all_pid_pairs.end(), cc_pid_pair) != all_pid_pairs.end() )
1127  // // {
1128  // // factor = factor * 2.0;
1129 
1130  // // if (pcode == 1491)
1131  // // {
1132  // // cout << "DEBUG: pcode==1491: factor adjusted by 2: " << factor << endl;
1133  // // }
1134 
1135  // // }
1136  // // }
1137 
1138  // pids_xsec_val += (*Dep::HardScatteringSim)->xsec_fb(pcode) * factor;
1139  // }
1140 
1141  // cout << std::fixed << std::setprecision(7);
1142  // cout << DEBUG_PREFIX << "PIDs xsecs: " << "["
1143  // << pids.pid1() << "," << pids.pid2() << "]: "
1144  // << std::scientific << std::setprecision(5)
1145  // << pids_xsec_val << endl;
1146  // }
1147 
1148  // #endif
1149 
1150  }
1151  }
1152 
1153  // Gather the xsecs from all threads into one
1154  if (*Loop::iteration == COLLIDER_FINALIZE)
1155  {
1156  result.gather_xsecs();
1157  }
1158 
1159  }
1160 
1163  {
1164  using namespace Pipes::getEvGenCrossSection_as_base;
1165  result = *Dep::TotalEvGenCrossSection;
1166  }
1167 
1168 
1171  {
1172  using namespace Pipes::getNLLFastCrossSection;
1173 
1174  // Use a static variable to communicate the result calculated on thread 0 during
1175  // iteration XSEC_CALCULATION to all threads during iteration START_SUBPROCESS
1176  static xsec_container shared_result;
1177 
1178  // Don't bother if there are no analyses that will use this.
1179  if (Dep::RunMC->analyses.empty()) return;
1180 
1181  // Only thread 0
1182  if(*Loop::iteration == COLLIDER_INIT) shared_result.reset();
1183 
1184  // All threads
1185  if (*Loop::iteration == COLLIDER_INIT_OMP) result.reset();
1186 
1187  // Set the xsec and its error.
1188  // Only thread 0
1189  if (*Loop::iteration == XSEC_CALCULATION)
1190  {
1191  double xs_fb = 0.1; // replace with xsec from NLL-Fast
1192  double xserr_fb = 0.1 * xs_fb; // or whatever
1193  shared_result.set_xsec(xs_fb, xserr_fb);
1194 
1195  // Let thread 0 return the correct result already after iteration XSEC_CALCULATION
1196  result = shared_result;
1197  }
1198 
1199  // All threads
1200  if (*Loop::iteration == START_SUBPROCESS)
1201  {
1202  // All threads copy the result from shared_result
1203  result = shared_result;
1204  }
1205 
1206  }
1207 
1208 
1210  bool checkOptions_getYAMLCrossSection(const Options& runOptions, const str calling_function, std::pair<str,str>& xsec_pnames, str& input_unit, bool& input_fractional_uncert, str& errmsg)
1211  {
1212 
1213  errmsg = "";
1214 
1215  str valid_option_pairs_msg;
1216  valid_option_pairs_msg = "This function requires one of the following pairs of YAML options:\n";
1217  valid_option_pairs_msg += " cross_section_fb, cross_section_uncert_fb\n";
1218  valid_option_pairs_msg += " cross_section_fb, cross_section_fractional_uncert\n";
1219  valid_option_pairs_msg += " cross_section_pb, cross_section_uncert_pb\n";
1220  valid_option_pairs_msg += " cross_section_pb, cross_section_fractional_uncert\n";
1221 
1222  // Check that enough options are provided
1223  if (runOptions.getNames().size() < 2)
1224  {
1225  errmsg = "Not enough YAML options provided for function " + calling_function + ".\n";
1226  errmsg += valid_option_pairs_msg;
1227  return false;
1228  }
1229 
1230  // Check that a valid combination of options is provided,
1231  // and set variable references accordingly
1232  if ((runOptions.hasKey("cross_section_fb")) && (runOptions.hasKey("cross_section_uncert_fb")))
1233  {
1234  xsec_pnames.first = "cross_section_fb";
1235  xsec_pnames.second = "cross_section_uncert_fb";
1236  input_unit = "fb";
1237  input_fractional_uncert = false;
1238  }
1239  else if ((runOptions.hasKey("cross_section_fb")) && (runOptions.hasKey("cross_section_fractional_uncert")))
1240  {
1241  xsec_pnames.first = "cross_section_fb";
1242  xsec_pnames.second = "cross_section_fractional_uncert";
1243  input_unit = "fb";
1244  input_fractional_uncert = true;
1245  }
1246  else if ((runOptions.hasKey("cross_section_pb")) && (runOptions.hasKey("cross_section_uncert_pb")))
1247  {
1248  xsec_pnames.first = "cross_section_pb";
1249  xsec_pnames.second = "cross_section_uncert_pb";
1250  input_unit = "pb";
1251  input_fractional_uncert = false;
1252  }
1253  else if ((runOptions.hasKey("cross_section_pb")) && (runOptions.hasKey("cross_section_fractional_uncert")))
1254  {
1255  xsec_pnames.first = "cross_section_pb";
1256  xsec_pnames.second = "cross_section_fractional_uncert";
1257  input_unit = "pb";
1258  input_fractional_uncert = true;
1259  }
1260  else
1261  {
1262  errmsg = "Unknown combination of options provided for function " + calling_function + ".\n";
1263  errmsg += valid_option_pairs_msg;
1264  return false;
1265  }
1266 
1267  return true;
1268  }
1269 
1270 
1273  {
1274  using namespace Pipes::getYAMLCrossSection;
1275 
1276  // Use a static variable to communicate the result calculated on thread 0 during
1277  // iteration XSEC_CALCULATION to all threads during iteration START_SUBPROCESS
1278  static xsec_container shared_result;
1279 
1280  // Don't bother if there are no analyses that will use this.
1281  if (Dep::RunMC->analyses.empty()) return;
1282 
1283  static std::pair<str,str> xsec_pnames;
1284  static str input_unit;
1285  static bool input_fractional_uncert = false;
1286 
1287  static bool first = true;
1288  if (*Loop::iteration == BASE_INIT)
1289  {
1290 
1291  // Check that the required YAML options are provided
1292  if (first)
1293  {
1294  str errmsg;
1295  bool valid_options = checkOptions_getYAMLCrossSection(*runOptions, "getYAMLCrossSection", xsec_pnames, input_unit, input_fractional_uncert, errmsg);
1296  if (!valid_options)
1297  {
1298  ColliderBit_error().raise(LOCAL_INFO, errmsg);
1299  }
1300  first = false;
1301  }
1302  }
1303 
1304  // Retrieve the total cross-section and cross-section error
1305  const static double input_xsec = runOptions->getValue<double>(xsec_pnames.first);
1306  const static double input_xsec_uncert = runOptions->getValue<double>(xsec_pnames.second);
1307 
1308  // Only thread 0
1309  if(*Loop::iteration == COLLIDER_INIT) shared_result.reset();
1310 
1311  // All threads
1312  if (*Loop::iteration == COLLIDER_INIT_OMP) result.reset();
1313 
1314  // Set the xsec and its error
1315  // Only thread 0
1316  if (*Loop::iteration == XSEC_CALCULATION)
1317  {
1318  std::pair<double,double> temp = convert_xsecs_to_fb(input_xsec, input_xsec_uncert, input_unit, input_fractional_uncert);
1319  double xsec_fb = temp.first;
1320  double xsec_uncert_fb = temp.second;
1321  shared_result.set_xsec(xsec_fb, xsec_uncert_fb);
1322 
1323  // Let thread 0 return the correct result already after iteration XSEC_CALCULATION
1324  result = shared_result;
1325  }
1326 
1327  // All threads
1328  if (*Loop::iteration == START_SUBPROCESS)
1329  {
1330  // All threads copy the result from shared_result
1331  result = shared_result;
1332  }
1333 
1334  }
1335 
1336 
1339  {
1340  using namespace Pipes::getYAMLCrossSection_SLHA;
1341 
1342  // Use a static variable to communicate the result calculated on thread 0 during
1343  // iteration XSEC_CALCULATION to all threads during iteration START_SUBPROCESS
1344  static xsec_container shared_result;
1345 
1346  // Don't bother if there are no analyses that will use this.
1347  if (Dep::RunMC->analyses.empty()) return;
1348 
1349  static std::pair<str,str> xsec_pnames;
1350  static str input_unit;
1351  static bool input_fractional_uncert = false;
1352 
1353  static bool first = true;
1354  if (*Loop::iteration == BASE_INIT)
1355  {
1356  // Check that the required YAML options are provided
1357  if (first)
1358  {
1359  str errmsg;
1360  bool valid_options = checkOptions_getYAMLCrossSection(*runOptions, "getYAMLCrossSection_SLHA", xsec_pnames, input_unit, input_fractional_uncert, errmsg);
1361  if (!valid_options)
1362  {
1363  ColliderBit_error().raise(LOCAL_INFO, errmsg);
1364  }
1365  first = false;
1366  }
1367  }
1368 
1369  // Get the filename, look for it in the xsec and uncertainty lists
1370  const static YAML::Node colNode_xsec = runOptions->getValue<YAML::Node>(xsec_pnames.first);
1371  const static Options colOptions_xsec(colNode_xsec);
1372  const static YAML::Node colNode_uncert = runOptions->getValue<YAML::Node>(xsec_pnames.second);
1373  const static Options colOptions_uncert(colNode_uncert);
1374  static str filename;
1375 
1376  if (*Loop::iteration == BASE_INIT)
1377  {
1378  // Update the SLHA filename
1379  filename = Dep::SLHAFileNameAndContent->first;
1380 
1381  // Look for the filename in the xsec lists
1382  if (!colOptions_xsec.hasKey(filename)) piped_invalid_point.request(str("No cross-section found for SLHA file ").append(filename));
1383  if (!colOptions_uncert.hasKey(filename)) piped_invalid_point.request(str("No fractional cross-section uncertainty found for SLHA file ").append(filename));
1384  }
1385 
1386  // Only thread 0
1387  if(*Loop::iteration == COLLIDER_INIT) shared_result.reset();
1388 
1389  // All threads
1390  if (*Loop::iteration == COLLIDER_INIT_OMP) result.reset();
1391 
1392  // Set the xsec and its error
1393  if (*Loop::iteration == XSEC_CALCULATION)
1394  {
1395  double input_xsec = colOptions_xsec.getValue<double>(filename);
1396  double input_xsec_uncert = colOptions_uncert.getValue<double>(filename);
1397 
1398  std::pair<double,double> temp = convert_xsecs_to_fb(input_xsec, input_xsec_uncert, input_unit, input_fractional_uncert);
1399  double xsec_fb = temp.first;
1400  double xsec_uncert_fb = temp.second;
1401  shared_result.set_xsec(xsec_fb, xsec_uncert_fb);
1402 
1403  // Let thread 0 return the correct result already after iteration XSEC_CALCULATION
1404  result = shared_result;
1405  }
1406 
1407  // All threads
1408  if (*Loop::iteration == START_SUBPROCESS)
1409  {
1410  // All threads copy the result from shared_result
1411  result = shared_result;
1412  }
1413 
1414  } // end getYAMLxsec_SLHA
1415 
1416 
1417 
1421  {
1422  using namespace Pipes::getYAMLCrossSection_param;
1423 
1424  // Use a static variable to communicate the result calculated on thread 0 during
1425  // iteration XSEC_CALCULATION to all threads during iteration START_SUBPROCESS
1426  static xsec_container shared_result;
1427 
1428  // Don't bother if there are no analyses that will use this.
1429  if (Dep::RunMC->analyses.empty()) return;
1430 
1431  static std::vector<str> pnames;
1432  static std::pair<str,str> xsec_pnames;
1433 
1434  static str input_unit;
1435  static bool input_fractional_uncert = false;
1436 
1437  static bool first = true;
1438  if (*Loop::iteration == BASE_INIT)
1439  {
1440 
1441  if (first)
1442  {
1443 
1444  // Get all parameter names
1445  for (const auto& parname_parptr_pair : Param)
1446  {
1447  pnames.push_back(parname_parptr_pair.first);
1448  }
1449 
1450  // Determine the correct combination of parameters
1451  if ((std::find(pnames.begin(), pnames.end(), "cross_section_fb") != pnames.end())
1452  && (std::find(pnames.begin(), pnames.end(), "cross_section_uncert_fb") != pnames.end()))
1453  {
1454  xsec_pnames.first = "cross_section_fb";
1455  xsec_pnames.second = "cross_section_uncert_fb";
1456  input_unit = "fb";
1457  input_fractional_uncert = false;
1458  }
1459  else if ((std::find(pnames.begin(), pnames.end(), "cross_section_fb") != pnames.end())
1460  && (std::find(pnames.begin(), pnames.end(), "cross_section_fractional_uncert") != pnames.end()))
1461  {
1462  xsec_pnames.first = "cross_section_fb";
1463  xsec_pnames.second = "cross_section_fractional_uncert";
1464  input_unit = "fb";
1465  input_fractional_uncert = true;
1466  }
1467  else if ((std::find(pnames.begin(), pnames.end(), "cross_section_pb") != pnames.end())
1468  && (std::find(pnames.begin(), pnames.end(), "cross_section_uncert_pb") != pnames.end()))
1469  {
1470  xsec_pnames.first = "cross_section_pb";
1471  xsec_pnames.second = "cross_section_uncert_pb";
1472  input_unit = "pb";
1473  input_fractional_uncert = false;
1474  }
1475  else if ((std::find(pnames.begin(), pnames.end(), "cross_section_pb") != pnames.end())
1476  && (std::find(pnames.begin(), pnames.end(), "cross_section_fractional_uncert") != pnames.end()))
1477  {
1478  xsec_pnames.first = "cross_section_pb";
1479  xsec_pnames.second = "cross_section_fractional_uncert";
1480  input_unit = "pb";
1481  input_fractional_uncert = true;
1482  }
1483  else
1484  {
1485  std::stringstream errmsg_ss;
1486  errmsg_ss << "Unknown combination of parameters for function getYAMLCrossSection_param." << endl;
1487  errmsg_ss << "Needs one of the following sets of parameter names:" << endl;
1488  errmsg_ss << " cross_section_fb, cross_section_uncert_fb" << endl;
1489  errmsg_ss << " cross_section_fb, cross_section_fractional_uncert" << endl;
1490  errmsg_ss << " cross_section_pb, cross_section_uncert_pb" << endl;
1491  errmsg_ss << " cross_section_pb, cross_section_fractional_uncert" << endl;
1492  ColliderBit_error().raise(LOCAL_INFO, errmsg_ss.str());
1493  }
1494 
1495  first = false;
1496  }
1497  }
1498 
1499  // Only thread 0
1500  if(*Loop::iteration == COLLIDER_INIT) shared_result.reset();
1501 
1502  // All threads
1503  if (*Loop::iteration == COLLIDER_INIT_OMP) result.reset();
1504 
1505  // Set the xsec and its error
1506  // Only thread 0
1507  if (*Loop::iteration == XSEC_CALCULATION)
1508  {
1509  double input_xsec = *Param.at(xsec_pnames.first);
1510  double input_xsec_uncert = *Param.at(xsec_pnames.second);
1511 
1512  std::pair<double,double> temp = convert_xsecs_to_fb(input_xsec, input_xsec_uncert, input_unit, input_fractional_uncert);
1513  double xsec_fb = temp.first;
1514  double xsec_uncert_fb = temp.second;
1515  shared_result.set_xsec(xsec_fb, xsec_uncert_fb);
1516 
1517  // Let thread 0 return the correct result already after iteration XSEC_CALCULATION
1518  result = shared_result;
1519  }
1520 
1521  // All threads
1522  if (*Loop::iteration == START_SUBPROCESS)
1523  {
1524  // All threads copy the result from shared_result
1525  result = shared_result;
1526  }
1527 
1528  }
1529 
1532  {
1533  using namespace Pipes::getTotalCrossSectionAsMap;
1534 
1535  // @todo Do we need this to ensure that the result map is always of the same length (for the printer)?
1536  // // Append the xsec info for the current collider to the result map
1537  // if (*Loop::iteration == COLLIDER_INIT)
1538  // {
1539  // xsec empty_xs;
1540  // for(auto s_d_pair : empty_xs.get_content_as_map())
1541  // {
1542  // std::string new_key(Dep::RunMC->current_collider());
1543  // new_key.append("__").append(s_d_pair.first);
1544  // result[new_key] = s_d_pair.second;
1545  // }
1546  // }
1547 
1548  // Append the xsec info for the current collider to the result map
1549  if (*Loop::iteration == COLLIDER_FINALIZE)
1550  {
1551  for(auto s_d_pair : Dep::TotalCrossSection->get_content_as_map())
1552  {
1553  std::string new_key(Dep::RunMC->current_collider());
1554  new_key.append("__").append(s_d_pair.first);
1555  result[new_key] = s_d_pair.second;
1556  }
1557  }
1558  } // end getXsecInfoMap
1559 
1560 
1563  {
1564  using namespace Pipes::getPIDPairCrossSectionsInfo;
1565 
1566  if (*Loop::iteration == BASE_INIT)
1567  {
1568  result.clear();
1569  }
1570 
1571  // Add cross-sections for each collider
1572  if (*Loop::iteration == XSEC_CALCULATION)
1573  {
1574  for(const auto& PID_pair_xsec_pair : *Dep::PIDPairCrossSectionsMap)
1575  {
1576  const PID_pair& pp = PID_pair_xsec_pair.first;
1577  const PID_pair_xsec_container& xs = PID_pair_xsec_pair.second;
1578  result[Dep::RunMC->current_collider() + "_PID_pair_" + pp.str() + "_" + xs.info_string() + "_cross_section_fb"] = xs.xsec();
1579  result[Dep::RunMC->current_collider() + "_PID_pair_" + pp.str() + "_" + xs.info_string() + "_cross_section_err_fb"] = xs.xsec_err();
1580  result[Dep::RunMC->current_collider() + "_PID_pair_" + pp.str() + "_" + xs.info_string() + "_trust_level"] = xs.trust_level();
1581  }
1582  }
1583 
1584  }
1585 
1590  {
1591  using namespace Pipes::doCrossSectionConsistencyCheck;
1592 
1593  if (Dep::EventWeighterFunction.name() == "setEventWeight_fromCrossSection"
1594  && Dep::TotalCrossSection.name() != "getEvGenCrossSection_as_base")
1595  {
1596  std::stringstream errmsg_ss;
1597  errmsg_ss << "Inconsistent choice for how to scale the generated events. "
1598  << "If each event is weighted by a process-specific cross-section that is not from "
1599  << "the event generator (function 'setEventWeight_fromCrossSection' for capability "
1600  << "'EventWeighterFunction'), you need to scale by the total cross-section "
1601  << "calculated by the event generator. (Choose the function "
1602  << "'getEvGenCrossSection_as_base' for capability 'TotalCrossSection'.)";
1603  ColliderBit_error().raise(LOCAL_INFO, errmsg_ss.str());
1604  }
1605 
1606  result = true;
1607  }
1608 
1609 
1610  }
1611 }
std::map< PID_pair, PID_pair_xsec_container > map_PID_pair_PID_pair_xsec
A big multimap connecting Pythia process codes to the PID numbers for the two final state particles...
A base class for holding cross-section info within ColliderBit.
Definition: xsec.hpp:37
std::string info_string() const
Get the info string.
Definition: xsec.cpp:142
void doCrossSectionConsistencyCheck(bool &result)
A consistency check that ensures that if each event is weighted by a process-level cross-section from...
Definition: getxsec.cpp:1589
double xsec_err() const
Return the cross-section error (in fb).
Definition: xsec.cpp:60
void getNLLFastCrossSection(xsec_container &result)
Get a cross-section from NLL-FAST.
Definition: getxsec.cpp:1170
int trust_level() const
Get the trust level.
Definition: xsec.cpp:148
A class for holding the production cross-section for final state identified by the pair of PID codes...
Definition: xsec.hpp:195
void set_xsec(double, double)
Set the cross-section and its error (in fb).
Definition: xsec.cpp:66
Simple class for holding a sorted pair of particle ID (PID) codes.
Definition: PID_pair.hpp:31
void getTotalCrossSectionAsMap(map_str_dbl &result)
Get cross-section info as map_str_dbl (for simple printing)
Definition: getxsec.cpp:1531
void getPIDPairCrossSectionsInfo(map_str_dbl &result)
Output PID pair cross-sections as a str-dbl map, for easy printing.
Definition: getxsec.cpp:1562
void getEvGenCrossSection(MC_xsec_container &result)
Compute a cross-section from Monte Carlo.
Definition: getxsec.cpp:1040
const std::vector< str > getNames(const args &... keys) const
Retrieve values from key-value pairs in options node.
void SLHAea_add_block(SLHAstruct &, const str &name, const double scale=-1)
Add a new block to an SLHAea object, with or without a scale.
#define LOCAL_INFO
Definition: local_info.hpp:34
void set_process_code(int)
Set the process code.
Definition: xsec.cpp:344
int pid1() const
Definition: PID_pair.hpp:84
A class for holding a total cross-section calculated via MC across multiple threads.
Definition: xsec.hpp:96
void getYAMLCrossSection_param(xsec_container &result)
A function that assigns a total cross-sections directly from the scan parameters (for model ColliderB...
Definition: getxsec.cpp:1420
Piped_invalid_point piped_invalid_point
Global instance of piped invalid point class.
Definition: exceptions.cpp:544
Declarations common to all ColliderBit event loop functions.
bool hasKey(const args &... keys) const
Getters for key/value pairs (which is all the options node should contain)
void register_process_sharing_xsec(int)
Add a process code to the list of processes sharing this cross-section.
Definition: xsec.cpp:354
void log_event()
Tell the xsec object that there has been a new event.
Definition: xsec.cpp:183
void getYAMLCrossSection_SLHA(xsec_container &result)
A function that reads a list of (SLHA file, total cross-section) pairs from the input YAML file...
Definition: getxsec.cpp:1338
void register_related_pid_pair(PID_pair)
Add a PID pair to the list of processes related to this cross-section.
Definition: xsec.cpp:367
SLHAea::Coll SLHAstruct
Less confusing name for SLHAea container class.
void getEvGenCrossSection_as_base(xsec_container &result)
Return MC_xsec_container as the base xsec_container.
Definition: getxsec.cpp:1162
void set_pid_pair(const PID_pair &)
Set the PID pair.
Definition: xsec.cpp:437
const multimap_PID_pair_int & all_PID_pairs_to_process_codes()
std::pair< double, double > convert_xsecs_to_fb(double input_xsec, double input_xsec_uncert, str input_unit, bool input_fractional_uncert)
Helper function that takes a cross-section value in fb or pb, along with an absolute or relative unce...
Definition: getxsec.cpp:39
bool checkOptions_getYAMLCrossSection(const Options &runOptions, const str calling_function, std::pair< str, str > &xsec_pnames, str &input_unit, bool &input_fractional_uncert, str &errmsg)
A helper function to check the YAML options for getYAMLCrossSection and getYAMLCrossSection_SLHA.
Definition: getxsec.cpp:1210
A class for holding the cross-section of a single Pythia process (identified by the Pythia process co...
Definition: xsec.hpp:148
int pid2() const
Definition: PID_pair.hpp:89
PID_pair_xsec_container silly_pid_xsec_constructor(PID_pair pid_pair, double xsec_val)
Test functions for provding PIDPairCrossSectionsMap (cross-sections in fb)
Definition: getxsec.cpp:430
void getYAMLCrossSection(xsec_container &result)
A function that reads the total cross-section from the input file, but builds up the number of events...
Definition: getxsec.cpp:1272
#define DEBUG_PREFIX
Definition: getxsec.cpp:25
std::map< int, process_xsec_container > map_int_process_xsec
std::string str
Shorthand for a standard string.
Definition: Analysis.hpp:35
void reset()
Reset this instance for reuse.
Definition: xsec.cpp:47
void reset()
Reset this instance for reuse.
Definition: xsec.cpp:390
void getProcessCrossSectionsMap(map_int_process_xsec &result)
Get a map between Pythia process codes and cross-sections.
Definition: getxsec.cpp:908
void sum_xsecs(double, double)
Sum cross-sections and add errors in quadrature.
Definition: xsec.cpp:322
void getPIDPairCrossSectionsMap_testing(map_PID_pair_PID_pair_xsec &result)
Definition: getxsec.cpp:441
double pow(const double &a)
Outputs a^i.
void gather_xsecs()
Collect xsec predictions from other threads and do a weighted combination.
Definition: xsec.cpp:234
void request(std::string message)
Request an exception.
Definition: exceptions.cpp:471
void reset()
Reset this instance for reuse.
Definition: xsec.cpp:166
void set_info_string(std::string)
Set the info string.
Definition: xsec.cpp:139
std::map< std::string, double > map_str_dbl
Shorthand for a string-to-double map.
void getPIDPairCrossSectionsMap_prospino(map_PID_pair_PID_pair_xsec &result)
Get a cross-section from Prospino WORK IN PROGRESS.
Definition: getxsec.cpp:324
void set_trust_level(int)
Set the trust level.
Definition: xsec.cpp:145
std::string str() const
Get the PID pair as a string: "<pid1>_<pid2>".
Definition: PID_pair.hpp:135
std::pair< int, int > iipair
Shorthand for a pair of integers.
Definition: util_types.hpp:68
TODO: see if we can use this one:
Definition: Analysis.hpp:33
A small wrapper object for &#39;options&#39; nodes.