PYTHIA  8.317
KinematicVariations.h
1 // KinematicVariations.h is a part of the PYTHIA event generator.
2 // Copyright (C) 2026 Stephen Mrenna, Christian Bierlich, Philip Ilten,
3 // Torbjorn Sjostrand.
4 // PYTHIA is licenced under the GNU GPL v2 or later, see COPYING for details.
5 // Please respect the MCnet Guidelines, see GUIDELINES for details.
6 
7 #ifndef Pythia8_KinematicVariations_H
8 #define Pythia8_KinematicVariations_H
9 
10 // Include Pythia headers.
11 #include "Pythia8/Pythia.h"
12 
13 namespace Pythia8 {
14 
15 //==========================================================================
16 
17 // Calculate the weight for an event given a different set of flavor
18 // parameters used in the hadronization.
19 
21 
22 public:
23 
24  // Constructor, given an intialized Pythia object.
26  settings.parm("StringZ:aLund"),
27  settings.parm("StringZ:bLund"),
28  settings.parm("StringZ:rFactC"),
29  settings.parm("StringZ:rFactB"),
30  settings.parm("StringPT:sigma"),
31  settings.parm("VariationFrag:zHead")) {}
32 
33  // Constructor, given the default base parameters.
34  KinematicVariations(double aLund, double bLund, double rFactC,
35  double rFactB, double sigma, double zHead) :
36  pythia("", false) {
37  pythia.settings.flag("ProcessLevel:all", false);
38  pythia.settings.flag("Print:quiet", true);
39  pythia.settings.parm("StringZ:aLund", aLund);
40  pythia.settings.parm("StringZ:bLund", bLund);
41  pythia.settings.parm("StringZ:rFactC", rFactC);
42  pythia.settings.parm("StringZ:rFactB", rFactB);
43  pythia.settings.parm("StringPT:sigma", sigma);
44  pythia.settings.parm("VariationFrag:zHead", zHead);
45  pythia.init();
46  }
47 
48  // Write string breaks.
49  string write(const vector<int>& breaks) {
50  string out = "{";
51  for (const int& val : breaks) out += toString(val) + ",";
52  return out.substr(0, out.length() - 1) + "}";}
53  string write(const vector<double>& breaks) {
54  string out = "{";
55  for (const double& val : breaks) out += toString(val) + ",";
56  return out.substr(0, out.length() - 1) + "}";}
57 
58  // Calculate the full kinematic weight.
59  double weight(double aLund, double bLund, double rFactC, double rFactB,
60  double sigma, const vector<int>& zIntBreaks,
61  const vector<double>& zDblBreaks, const vector<double>& pTBreaks) {
62  return weight(aLund, bLund, rFactC, rFactB, zIntBreaks, zDblBreaks) *
63  weight(sigma, pTBreaks);
64  }
65 
66  // Calculate just the z weight.
67  double weight(double aLund, double bLund, double rFactC, double rFactB,
68  const vector<int>& zIntBreaks, const vector<double>& zDblBreaks) {
69  double wgt = 1.;
70  for (int iBrk = 0; iBrk < int(zIntBreaks.size()/2); ++iBrk) {
71  wgt *= pythia.info.weightContainerPtr
72  ->weightsFragmentation.zWeight(aLund, bLund, rFactC, rFactB,
73  zIntBreaks[2*iBrk + 0], zIntBreaks[2*iBrk + 1],
74  zDblBreaks[3*iBrk + 0], zDblBreaks[3*iBrk + 1],
75  zDblBreaks[3*iBrk + 2]);
76  }
77  return wgt;
78  }
79 
80  // Calculate just the pT weight.
81  double weight(double sigma, const vector<double>& pTBreaks) {
82  double wgt = 1.;
83  for (int iBrk = 0; iBrk < int(pTBreaks.size()/2); ++iBrk)
84  wgt *= pythia.info.weightContainerPtr
86  sigma, pTBreaks[2*iBrk + 0], pTBreaks[2*iBrk + 1]);
87  return wgt;
88  }
89 
90 private:
91 
92  // Pythia object.
93  Pythia pythia;
94 
95 };
96 
97 //==========================================================================
98 
99 } // end namespace Pythia8
100 
101 #endif // end Pythia8_KinematicVariations_H
bool flag(string keyIn)
Give back current value, with check that key exists.
Definition: Settings.cc:1615
WeightsFragmentation weightsFragmentation
Fragmentation weights.
Definition: Weights.h:495
Settings settings
Settings: databases of flags/modes/parms/words to control run.
Definition: Pythia.h:386
double weight(double aLund, double bLund, double rFactC, double rFactB, const vector< int > &zIntBreaks, const vector< double > &zDblBreaks)
Calculate just the z weight.
Definition: KinematicVariations.h:67
bool init()
Initialize.
Definition: Pythia.cc:422
double weight(double aLund, double bLund, double rFactC, double rFactB, double sigma, const vector< int > &zIntBreaks, const vector< double > &zDblBreaks, const vector< double > &pTBreaks)
Calculate the full kinematic weight.
Definition: KinematicVariations.h:59
string write(const vector< int > &breaks)
Write string breaks.
Definition: KinematicVariations.h:49
double weight(double sigma, const vector< double > &pTBreaks)
Calculate just the pT weight.
Definition: KinematicVariations.h:81
string toString(bool val)
Convert a boolean to a string.
Definition: PythiaStdlib.h:210
double pTWeight(double sigma, double pT2, double mult)
Definition: Weights.cc:1008
KinematicVariations(Settings &settings)
Constructor, given an intialized Pythia object.
Definition: KinematicVariations.h:25
KinematicVariations(double aLund, double bLund, double rFactC, double rFactB, double sigma, double zHead)
Constructor, given the default base parameters.
Definition: KinematicVariations.h:34
Header for classes to set beam momentum and interaction vertex spread.
Definition: Analysis.h:20
The Pythia class contains the top-level routines to generate an event.
Definition: Pythia.h:72
const Info & info
Public information and statistic on the generation.
Definition: Pythia.h:380
Definition: KinematicVariations.h:20
Definition: Settings.h:196
double zWeight(double aLund, double bLund, double rFactC, double rFactB, int idOld, int idNew, double mT2, double z, double fPrel)
Calculate kinematic weights.
Definition: Weights.cc:943