13 #ifndef Pythia8_Basics_H 14 #define Pythia8_Basics_H 16 #include "Pythia8/PythiaStdlib.h" 17 #include "Pythia8/SharedPointers.h" 37 Vec4(
double xIn = 0.,
double yIn = 0.,
double zIn = 0.,
double tIn = 0.)
38 : xx(xIn), yy(yIn), zz(zIn), tt(tIn) { }
39 Vec4(
const Vec4& v) : xx(v.xx), yy(v.yy), zz(v.zz), tt(v.tt) { }
40 Vec4& operator=(
const Vec4& v) {
if (
this != &v) { xx = v.xx; yy = v.yy;
41 zz = v.zz; tt = v.tt; }
return *
this; }
42 Vec4& operator=(
double value) { xx = value; yy = value; zz = value;
43 tt = value;
return *
this; }
46 void reset() {xx = 0.; yy = 0.; zz = 0.; tt = 0.;}
47 void p(
double xIn,
double yIn,
double zIn,
double tIn)
48 {xx = xIn; yy = yIn; zz = zIn; tt = tIn;}
49 void p(
Vec4 pIn) {xx = pIn.xx; yy = pIn.yy; zz = pIn.zz; tt = pIn.tt;}
50 void px(
double xIn) {xx = xIn;}
51 void py(
double yIn) {yy = yIn;}
52 void pz(
double zIn) {zz = zIn;}
53 void e(
double tIn) {tt = tIn;}
56 double px()
const {
return xx;}
57 double py()
const {
return yy;}
58 double pz()
const {
return zz;}
59 double e()
const {
return tt;}
60 double& operator[](
int i) {
68 double mCalc()
const {
double temp = tt*tt - xx*xx - yy*yy - zz*zz;
69 return (temp >= 0.) ? sqrt(temp) : -sqrt(-temp);}
70 double m2Calc()
const {
return tt*tt - xx*xx - yy*yy - zz*zz;}
71 double pT()
const {
return sqrt(xx*xx + yy*yy);}
72 double pT2()
const {
return xx*xx + yy*yy;}
73 double pAbs()
const {
return sqrt(xx*xx + yy*yy + zz*zz);}
74 double pAbs2()
const {
return xx*xx + yy*yy + zz*zz;}
75 double eT()
const {
double temp = xx*xx + yy*yy;
76 return tt * sqrt( temp / (temp + zz*zz) );}
77 double eT2()
const {
double temp = xx*xx + yy*yy;
78 return tt*tt * temp / (temp + zz*zz);}
79 double theta()
const {
return atan2(sqrt(xx*xx + yy*yy), zz);}
80 double phi()
const {
return atan2(yy,xx);}
81 double thetaXZ()
const {
return atan2(xx,zz);}
82 double pPos()
const {
return tt + zz;}
83 double pNeg()
const {
return tt - zz;}
85 double txyz = (tt > 0.) ? tt : sqrt(xx*xx + yy*yy + zz*zz);
86 if (zz >= txyz)
return 20.;
87 if (zz <= -txyz)
return -20.;
88 return 0.5 * log( (txyz + zz) / (txyz - zz) );}
89 double eta()
const {
double xyz = sqrt(xx*xx + yy*yy + zz*zz);
90 if (zz >= xyz)
return 20.;
91 if (zz <= -xyz)
return -20.;
92 return 0.5 * log( (xyz + zz) / (xyz - zz) );}
95 void rescale3(
double fac) {xx *= fac; yy *= fac; zz *= fac;}
96 void rescale4(
double fac) {xx *= fac; yy *= fac; zz *= fac; tt *= fac;}
97 void flip3() {xx = -xx; yy = -yy; zz = -zz;}
98 void flip4() {xx = -xx; yy = -yy; zz = -zz; tt = -tt;}
99 void rot(
double thetaIn,
double phiIn);
100 void rotaxis(
double phiIn,
double nx,
double ny,
double nz);
102 void bst(
double betaX,
double betaY,
double betaZ);
103 void bst(
double betaX,
double betaY,
double betaZ,
double gamma);
105 void bst(
const Vec4& pIn,
double mIn);
113 tmp.zz = -zz; tmp.tt = -tt;
return tmp;}
114 inline Vec4& operator+=(
const Vec4& v) {xx += v.xx; yy += v.yy; zz += v.zz;
115 tt += v.tt;
return *
this;}
116 inline Vec4& operator-=(
const Vec4& v) {xx -= v.xx; yy -= v.yy; zz -= v.zz;
117 tt -= v.tt;
return *
this;}
118 inline Vec4& operator*=(
double f) {xx *= f; yy *= f; zz *= f;
119 tt *= f;
return *
this;}
120 inline Vec4& operator/=(
double f) {xx /= f; yy /= f; zz /= f;
121 tt /= f;
return *
this;}
122 inline Vec4 operator+(
const Vec4& v)
const {
123 Vec4 tmp = *
this;
return tmp += v;}
125 Vec4 tmp = *
this;
return tmp -= v;}
126 inline Vec4 operator*(
double f)
const {
127 Vec4 tmp = *
this;
return tmp *= f;}
128 inline Vec4 operator/(
double f)
const {
129 Vec4 tmp = *
this;
return tmp /= f;}
130 inline double operator*(
const Vec4& v)
const {
131 return tt*v.tt - xx*v.xx - yy*v.yy - zz*v.zz;}
134 friend Vec4 operator*(
double f,
const Vec4& v1);
142 friend inline bool isinf(
const Vec4 &v) {
143 return isinf(v.tt) || isinf(v.xx) || isinf(v.yy) || isinf(v.zz);}
144 friend inline bool isfinite(
const Vec4 &v) {
145 return isfinite(v.tt) && isfinite(v.xx) && isfinite(v.yy)
149 friend double m(
const Vec4& v1);
150 friend double m(
const Vec4& v1,
const Vec4& v2);
151 friend double m2(
const Vec4& v1);
152 friend double m2(
const Vec4& v1,
const Vec4& v2);
165 friend double theta(
const Vec4& v1,
const Vec4& v2);
169 friend double phi(
const Vec4& v1,
const Vec4& v2);
173 friend double phi(
const Vec4& v1,
const Vec4& v2,
const Vec4& n);
181 friend bool pShift(
Vec4& p1Move,
Vec4& p2Move,
double m1New,
double m2New);
189 static const double TINY;
192 double xx, yy, zz, tt;
202 {
Vec4 v = v1;
return v *= f;}
205 double m(
const Vec4& v1);
206 double m(
const Vec4& v1,
const Vec4& v2);
207 double m2(
const Vec4& v1);
221 double theta(
const Vec4& v1,
const Vec4& v2);
223 double costheta(
double e1,
double e2,
double m1,
double m2,
double s12);
226 double phi(
const Vec4& v1,
const Vec4& v2);
230 double phi(
const Vec4& v1,
const Vec4& v2,
const Vec4& n);
241 bool pShift(
Vec4& p1Move,
Vec4& p2Move,
double m1New,
double m2New);
258 for (
int j = 0; j < 4; ++j) { M[i][j] = (i==j) ? 1. : 0.; } } }
260 for (
int i = 0; i < 4; ++i) {
for (
int j = 0; j < 4; ++j) {
261 M[i][j] = Min.M[i][j]; } } }
263 for (
int i = 0; i < 4; ++i) {
for (
int j = 0; j < 4; ++j) {
264 M[i][j] = Min.M[i][j]; } } }
return *
this; }
267 void rot(
double = 0.,
double = 0.);
269 void bst(
double = 0.,
double = 0.,
double = 0.);
275 void toSameVframe(
const Vec4&,
const Vec4&);
276 void fromSameVframe(
const Vec4&,
const Vec4&);
280 tmp.
invert();
return tmp; }
284 double value(
int i,
int j) {
return M[i][j];}
287 double deviation()
const;
302 static const double TINY;
340 Vec4 pzp = tmp*pz; tmp.
rot(0.0, -pzp.phi()); tmp.
rot(-pzp.theta());
341 tmp.
rot(0.0, -(tmp*pxz).phi());
return tmp; }
346 const Vec4 & pxz) {
return toCMframe(ptot, pz, pxz).inverse(); }
362 virtual double flat() {
return 1;}
372 int i97{}, j97{}, seed{0};
374 double u[97]{}, c{}, cd{}, cm{};
391 Rndm() : initRndm(false), stateSave(), useExternalRndm(false) { }
392 Rndm(
int seedIn) : initRndm(
false), stateSave(), useExternalRndm(
false) {
396 bool rndmEnginePtr( RndmEnginePtr rndmEngPtrIn);
399 void init(
int seedIn = 0) ;
408 double xexp() {
return -log(flat() * flat()) ;}
411 double gauss() {
return sqrt(-2. * log(flat())) * cos(M_PI * flat());}
414 pair<double, double>
gauss2() {
double r = sqrt(-2. * log(flat()));
415 double phi = 2. * M_PI * flat();
416 return { r * sin(phi), r * cos(phi) };}
419 double gamma(
double k0,
double r0);
422 pair<Vec4, Vec4> phaseSpace2(
double eCM,
double m1,
double m2);
425 int pick(
const vector<double>& prob) ;
428 template<
typename T>
void shuffle(vector<T>& vec);
431 bool dumpState(
string fileName);
432 bool readState(
string fileName);
436 void setState(
const RndmState& state) {stateSave = state;}
439 static constexpr
int DEFAULTSEED = 19780503;
443 double flatDebug(
string loc,
string file,
int line);
444 double xexpDebug(
string loc,
string file,
int line);
445 double gaussDebug(
string loc,
string file,
int line);
446 pair<double, double> gauss2Debug(
string loc,
string file,
int line);
447 double gammaDebug(
string loc,
string file,
int line,
double k0,
double r0);
448 pair<Vec4, Vec4> phaseSpace2Debug(
string loc,
string file,
int line,
449 double eCM,
double m1,
double m2);
452 static bool debugNow, debugLocation, debugIndex;
453 static int debugPrecision, debugCall;
454 static set<string> debugStarts, debugEnds, debugContains, debugMatches;
464 bool useExternalRndm;
465 RndmEnginePtr rndmEngPtr{};
479 Hist() : titleSave(
""), nBin(), nFill(), nNonFinite(), xMin(),
480 xMax(), linX(), doStats(), dx(), under(), inside(), over(), sumxNw()
482 Hist(
string titleIn,
int nBinIn = 100,
double xMinIn = 0.,
483 double xMaxIn = 1.,
bool logXIn =
false,
bool doStatsIn =
false) :
484 nBin(), nFill(), nNonFinite(), xMin(), xMax(), linX(), doStats(), dx(),
485 under(), inside(), over(), sumxNw()
486 { book(titleIn, nBinIn, xMinIn, xMaxIn, logXIn, doStatsIn); }
488 : titleSave(h.titleSave), nBin(h.nBin), nFill(h.nFill),
489 nNonFinite(h.nNonFinite), xMin(h.xMin), xMax(h.xMax), linX(h.linX),
490 doStats(h.doStats), dx(h.dx), under(h.under), inside(h.inside),
491 over(h.over), res(h.res), res2(h.res2), sumxNw() {
492 for (
int i = 0; i < nMoments; ++i) sumxNw[i] = h.sumxNw[i];
495 : titleSave(titleIn), nBin(h.nBin), nFill(h.nFill),
496 nNonFinite(h.nNonFinite), xMin(h.xMin), xMax(h.xMax), linX(h.linX),
497 doStats(h.doStats), dx(h.dx), under(h.under), inside(h.inside),
498 over(h.over), res(h.res), res2(h.res2), sumxNw() {
499 for (
int i = 0; i < nMoments; ++i) sumxNw[i] = h.sumxNw[i];
501 Hist& operator=(
const Hist& h) {
if(
this != &h) {
502 nBin = h.nBin; nFill = h.nFill; nNonFinite = h.nNonFinite; xMin = h.xMin;
503 xMax = h.xMax; linX = h.linX; doStats = h.doStats; dx = h.dx;
504 under = h.under; inside = h.inside; over = h.over;
505 for (
int i = 0; i < nMoments; ++i) sumxNw[i] = h.sumxNw[i];
506 res = h.res; res2 = h.res2; }
return *
this; }
509 static Hist plotFunc(
function<
double(
double)> f,
string titleIn,
510 int nBinIn,
double xMinIn,
double xMaxIn,
bool logXIn =
false);
513 void book(
string titleIn =
" ",
int nBinIn = 100,
double xMinIn = 0.,
514 double xMaxIn = 1.,
bool logXIn =
false,
bool doStatsIn =
false) ;
517 void title(
string titleIn =
" ") {titleSave = titleIn; }
523 void fill(
double x,
double w = 1.) ;
530 void table(ostream& os = cout,
bool printOverUnder =
false,
531 bool xMidBin =
true,
bool printError =
false)
const ;
532 void table(
string fileName,
bool printOverUnder =
false,
533 bool xMidBin =
true,
bool printError =
false)
const {
534 ofstream streamName(fileName.c_str());
535 table(streamName, printOverUnder, xMidBin, printError);}
536 void rivetTable(ostream& os = cout,
bool printError =
true)
const ;
537 void rivetTable(
string fileName,
bool printError =
true)
const {
538 ofstream streamName(fileName.c_str()); rivetTable(streamName, printError);}
539 void pyplotTable(ostream& os = cout,
bool isHist =
true,
540 bool printError =
false)
const ;
541 void pyplotTable(
string fileName,
bool isHist =
true,
542 bool printError =
false)
const {ofstream streamName(fileName.c_str());
543 pyplotTable(streamName, isHist, printError);}
546 void fillTable(istream& is = cin);
547 void fillTable(
string fileName) { ifstream streamName(fileName.c_str());
548 fillTable(streamName);}
551 friend void table(
const Hist& h1,
const Hist& h2, ostream& os,
552 bool printOverUnder,
bool xMidBin) ;
553 friend void table(
const Hist& h1,
const Hist& h2,
string fileName,
554 bool printOverUnder,
bool xMidBin) ;
558 int getBinNumber()
const {
return nBin;}
559 int getNonFinite()
const {
return nNonFinite;}
560 bool getLinX()
const {
return linX;}
564 double getXMax()
const {
return xMax;}
565 double getYMin()
const {
if (nBin == 0)
return 0.;
566 double yMin = res[0];
567 for (
int ix = 1; ix < nBin; ++ix)
568 if (res[ix] < yMin ) yMin = res[ix];
570 double getYMax()
const {
if (nBin == 0)
return 0.;
571 double yMax = res[0];
572 for (
int ix = 1; ix < nBin; ++ix)
573 if (res[ix] > yMax ) yMax = res[ix];
575 double getYAbsMin()
const {
double yAbsMin = 1e20;
double yAbs;
576 for (
int ix = 0; ix < nBin; ++ix) { yAbs = abs(res[ix]);
577 if (yAbs > 1e-20 && yAbs < yAbsMin) yAbsMin = yAbs; }
585 double getXMean(
bool unbinned=
true)
const;
586 double getXMeanErr(
bool unbinned=
true)
const;
592 double getXMedian(
bool includeOverUnder=
false)
const;
593 double getXMedianErr(
bool unbinned=
true)
const;
610 double getXRMN(
int n=2,
bool unbinned=
true)
const;
611 double getXRMS(
bool unbinned=
true)
const {
return getXRMN(2, unbinned);}
613 double getXRMNErr(
int n=2,
bool unbinned=
true)
const;
614 double getXRMSErr(
bool unbinned=
true)
const {
615 return getXRMNErr(2, unbinned);}
618 double getBinContent(
int iBin)
const;
621 double getBinEdge(
int iBin)
const;
624 double getBinWidth(
int iBin=1)
const;
627 vector<double> getBinContents()
const;
630 vector<double> getBinEdges()
const;
634 return alsoNonFinite ? nNonFinite + nFill : nFill; }
638 return alsoOverUnder ? inside + over + under : inside; }
644 for (
int ix = 0; ix < nBin; ++ix) sumw2 += res2[ix];
645 if (sumw2 <= Hist::TINY)
return 0.;
646 else return pow2(sumxNw[0]) / sumw2;
650 bool sameSize(
const Hist& h)
const ;
653 void takeFunc(
function<
double(
double)> func);
656 void takeLog(
bool tenLog =
true);
662 void normalize(
double f = 1,
bool overflow =
true) ;
665 void normalizeIntegral(
double f = 1,
bool overflow =
true);
668 void normalizeSpectrum(
double wtSum);
675 Hist& operator+=(
double f) ;
676 Hist& operator-=(
double f) ;
677 Hist& operator*=(
double f) ;
678 Hist& operator/=(
double f) ;
680 Hist operator+(
const Hist& h2)
const;
684 Hist operator*(
const Hist& h2)
const;
685 Hist operator/(
double f)
const;
686 Hist operator/(
const Hist& h2)
const;
689 friend Hist operator+(
double f,
const Hist& h1);
691 friend Hist operator*(
double f,
const Hist& h1);
692 friend Hist operator/(
double f,
const Hist& h1);
697 static const int NBINMAX, NCOLMAX, NLINES;
698 static const double TOLERANCE, TINY, LARGE, SMALLFRAC,
DYAC[];
699 static const char NUMBER[];
703 int nBin, nFill, nNonFinite;
706 double dx, under, inside, over;
707 vector<double> res, res2;
710 static constexpr
int nMoments = 7;
711 double sumxNw[nMoments];
723 void table(
const Hist& h1,
const Hist& h2, ostream& os = cout,
724 bool printOverUnder =
false,
bool xMidBin =
true) ;
726 bool printOverUnder =
false,
bool xMidBin =
true) ;
732 Hist operator/(
double f,
const Hist& h1);
744 HistPlot(
string pythonName,
bool useLegacyIn =
false)
745 : nFrame(), nTable(), useLegacy(useLegacyIn) {
746 toPython.open( (pythonName +
".py").c_str() );
747 toPython <<
"from matplotlib import pyplot as plt" << endl
748 <<
"from matplotlib.backends.backend_pdf import PdfPages" << endl;
755 void frame(
string frameIn,
string titleIn =
"",
string xLabIn =
"",
756 string yLabIn =
"",
double xSizeIn = 8.,
double ySizeIn = 6.) {
757 framePrevious = frameName; frameName = frameIn; title = titleIn;
758 xLabel = xLabIn; yLabel = yLabIn; xSize = xSizeIn; ySize = ySizeIn;
759 histos.clear(); styles.clear(); legends.clear(); files.clear();
760 fileStyles.clear(); fileLegends.clear(); filexyerr.clear();}
763 void add(
const Hist& histIn,
string styleIn =
"h",
764 string legendIn =
"void") {
765 if (histIn.getBinNumber() == 0) {
766 cout <<
" Error: histogram is not booked" << endl;
769 histos.push_back(histIn);
770 styles.push_back(styleIn); legends.push_back(legendIn); }
773 void addFile(
string fileIn,
string styleIn =
"o",
774 string legendIn =
"void",
string xyerrIn=
"") { files.push_back(fileIn);
775 fileStyles.push_back(styleIn); fileLegends.push_back(legendIn);
776 filexyerr.push_back(xyerrIn);}
779 void plot(
bool logY =
false,
bool logX =
false,
bool userBorders =
false);
780 void plot(
double xMinUserIn,
double xMaxUserIn,
double yMinUserIn,
781 double yMaxUserIn,
bool logY =
false,
bool logX =
false) {
782 xMinUser = xMinUserIn; xMaxUser = xMaxUserIn; yMinUser = yMinUserIn;
783 yMaxUser = yMaxUserIn; plot( logY, logX,
true);}
787 string xLabIn =
"",
string yLabIn =
"",
string styleIn =
"h",
788 string legendIn =
"void",
bool logY =
false) {
789 frame( frameIn, titleIn, xLabIn, yLabIn);
790 add( histIn, styleIn, legendIn); plot( logY); }
795 void init(
string pythonName);
799 int nPDF, nFrame, nTable;
800 double xSize, ySize, xMinUser, xMaxUser, yMinUser, yMaxUser;
801 string frameName, framePrevious, title, xLabel, yLabel, fileName, tmpFig;
803 vector<string> styles, legends, files, fileStyles, fileLegends, filexyerr;
815 #define flat() flatDebug(__METHOD_NAME__, __FILE__, __LINE__) 816 #define xexp() xexpDebug(__METHOD_NAME__, __FILE__, __LINE__) 817 #define gauss() gaussDebug(__METHOD_NAME__, __FILE__, __LINE__) 818 #define gamma(...) gammaDebug(__METHOD_NAME__, __FILE__, __LINE__, __VA_ARGS__) 819 #define phaseSpace2(...) phaseSpace2Debug(__METHOD_NAME__, __FILE__, __LINE__,\ 829 for (
int i = vec.size() - 1; i > 0; --i)
830 swap(vec[i], vec[floor(flat() * (i + 1))]);
RndmState getState() const
Get or set the state of the random number generator.
Definition: Basics.h:435
double px() const
Member functions for output.
Definition: Basics.h:56
constexpr double pow2(const double &x)
Powers of small integers - for balance speed/code clarity.
Definition: PythiaStdlib.h:182
double value(int i, int j)
Return value of matrix element.
Definition: Basics.h:284
pair< double, double > gauss2()
Generate two random numbers according to exp(-x^2/2-y^2/2).
Definition: Basics.h:414
friend double m2(const Vec4 &v1)
The squared invariant mass of one or more four-vectors.
Definition: Basics.cc:605
void rot(double=0., double=0.)
Member functions.
Definition: Basics.cc:842
Hist()
Constructors, including copy constructors.
Definition: Basics.h:479
void bstback(const Vec4 &pIn)
Boost given by a Vec4 p; boost in opposite direction.
Definition: Basics.cc:509
void invert()
Invert the rotation and boost.
Definition: Basics.cc:1061
void rotbst(const RotBstMatrix &)
Combine existing rotation/boost matrix with another one.
Definition: Basics.cc:1046
void rescale3(double fac)
Member functions that perform operations.
Definition: Basics.h:95
void frame(string frameIn, string titleIn="", string xLabIn="", string yLabIn="", double xSizeIn=8., double ySizeIn=6.)
New plot frame, with title, x and y labels, x and y sizes.
Definition: Basics.h:755
friend bool isnan(const Vec4 &v)
Check if NaN, INF, or finite.
Definition: Basics.h:140
Vec4 operator*(double f, const Vec4 &v1)
Namespace function declarations; friends of Vec4 class.
Definition: Basics.h:201
void rotaxis(double phiIn, double nx, double ny, double nz)
Azimuthal rotation phi around an arbitrary axis (nz, ny, nz).
Definition: Basics.cc:387
RotBstMatrix()
Constructors.
Definition: Basics.h:257
RotBstMatrix toCMframe(const Vec4 &p)
Get a RotBstMatrix to rest frame of p.
Definition: Basics.h:317
void title(string titleIn=" ")
Set title of a histogram.
Definition: Basics.h:517
void addFile(string fileIn, string styleIn="o", string legendIn="void", string xyerrIn="")
Add a file of (x, y) values not from a histogram, e.g. data points.
Definition: Basics.h:773
Vec4 operator*(Vec4 p) const
Multiplication.
Definition: Basics.h:296
void rotbst(const RotBstMatrix &M)
Arbitrary combination of rotations and boosts defined by 4 * 4 matrix.
Definition: Basics.cc:551
virtual ~RndmEngine()
Destructor.
Definition: Basics.h:358
RotBstMatrix fromCMframe(const Vec4 &p)
Get a RotBstMatrix from rest frame of p.
Definition: Basics.h:321
void bst(double=0., double=0., double=0.)
Boost with velocity vector (betaX, betaY, betaZ).
Definition: Basics.cc:884
void plotFrame(string frameIn, const Hist &histIn, string titleIn="", string xLabIn="", string yLabIn="", string styleIn="h", string legendIn="void", bool logY=false)
Omnibus single call when only one histogram in the frame.
Definition: Basics.h:786
const double DYAC[]
Constants for printout: fixed steps on y scale; filling characters.
Definition: Basics.cc:1137
friend double costheta(const Vec4 &v1, const Vec4 &v2)
Cosine of the opening angle between two three-vectors.
Definition: Basics.cc:674
void bstback(const Vec4 &)
Boost so vector originally with same velocity as p is brought to rest.
Definition: Basics.cc:923
Rndm()
Constructors.
Definition: Basics.h:391
void rot(double thetaIn, double phiIn)
Rotation (simple).
Definition: Basics.cc:368
double getNEffective() const
Definition: Basics.h:642
friend ostream & operator<<(ostream &, const Vec4 &v)
Print a four-vector.
Definition: Basics.cc:584
bool operator==(const DireTimesEnd &dip1, const DireTimesEnd &dip2)
The DireTimesEnd class.
Definition: DireTimes.cc:19
friend double m(const Vec4 &v1)
Invariant mass and its square.
Definition: Basics.cc:595
friend Vec4 cross3(const Vec4 &v1, const Vec4 &v2)
The cross product of two three-vectors.
Definition: Basics.cc:633
string getTitle() const
Return title and size of histogram. Also if logarithmic x scale.
Definition: Basics.h:557
A derived class for nuclear PDFs. Needs a pointer for (free) proton PDFs.
Definition: PartonDistributions.h:1060
Vec4(double xIn=0., double yIn=0., double zIn=0., double tIn=0.)
Constructors.
Definition: Basics.h:37
friend bool pShift(Vec4 &p1Move, Vec4 &p2Move, double m1New, double m2New)
Shift four-momenta within pair from old to new masses.
Definition: Basics.cc:776
double getYMean() const
Return average <Y> value.
Definition: Basics.h:596
friend double dot3(const Vec4 &v1, const Vec4 &v2)
Scalar and cross product of 3-vector parts.
Definition: Basics.cc:625
~HistPlot()
Destructor should do final close.
Definition: Basics.h:752
int getEntries(bool alsoNonFinite=true) const
Return number of entries.
Definition: Basics.h:633
friend Vec4 cross4(const Vec4 &a, const Vec4 &b, const Vec4 &c)
Cross-product of three 4-vectors ( p_i = epsilon_{iabc} p_a p_b p_c).
Definition: Basics.cc:645
void table(const Hist &h1, const Hist &h2, ostream &os=cout, bool printOverUnder=false, bool xMidBin=true)
Print a table out of two histograms with same x axis.
Definition: Basics.cc:1600
void bst(double betaX, double betaY, double betaZ)
Boost (simple).
Definition: Basics.cc:434
void add(const Hist &histIn, string styleIn="h", string legendIn="void")
Add a histogram to the current plot, with optional style and legend.
Definition: Basics.h:763
friend double cosphi(const Vec4 &v1, const Vec4 &v2)
Cosine of the azimuthal angle between two three-vectors.
Definition: Basics.cc:704
virtual double flat()
Definition: Basics.h:362
double gauss()
Generate random numbers according to exp(-x^2/2).
Definition: Basics.h:411
friend double RRapPhi(const Vec4 &v1, const Vec4 &v2)
R is distance in cylindrical (y/eta, phi) coordinates.
Definition: Basics.cc:753
friend pair< Vec4, Vec4 > getTwoPerpendicular(const Vec4 &v1, const Vec4 &v2)
Create two vectors that are perpendicular to both input vectors.
Definition: Basics.cc:804
HistPlot(string pythonName, bool useLegacyIn=false)
Constructor requires name of Python program (and adds .py).
Definition: Basics.h:744
void shuffle(vector< T > &vec)
Randomly shuffle a vector, standard Fisher-Yates algorithm.
Definition: Basics.h:828
Header for classes to set beam momentum and interaction vertex spread.
Definition: Analysis.h:20
void toCMframe(const Vec4 &, const Vec4 &)
Definition: Basics.cc:949
double eInFrame(const Vec4 &pIn) const
Definition: Basics.cc:566
friend double REtaPhi(const Vec4 &v1, const Vec4 &v2)
Distance in cylindrical (eta, phi) coordinates.
Definition: Basics.cc:764
Hist operator+(double f, const Hist &h1)
Operator overloading with friends.
Definition: Basics.cc:2232
void reset()
Member functions for input.
Definition: Basics.h:46
Vec4 operator-() const
Operator overloading with member functions.
Definition: Basics.h:112
double getWeightSum(bool alsoOverUnder=true) const
Return sum of weights.
Definition: Basics.h:637
double xexp()
Generate random numbers according to x * exp(-x).
Definition: Basics.h:408
double getXMin() const
Return min and max in x and y directions.
Definition: Basics.h:563
void fromCMframe(const Vec4 &, const Vec4 &, bool flip=false)
Definition: Basics.cc:968