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);
170 friend double phi(
const Vec4& v1,
const Vec4& v2);
174 friend double phi(
const Vec4& v1,
const Vec4& v2,
const Vec4& n);
182 friend bool pShift(
Vec4& p1Move,
Vec4& p2Move,
double m1New,
double m2New);
190 static const double TINY;
193 double xx, yy, zz, tt;
203 {
Vec4 v = v1;
return v *= f;}
206 double m(
const Vec4& v1);
207 double m(
const Vec4& v1,
const Vec4& v2);
208 double m2(
const Vec4& v1);
227 double theta(
const Vec4& v1,
const Vec4& v2);
230 double costheta(
double e1,
double e2,
double m1,
double m2,
double s12);
233 double phi(
const Vec4& v1,
const Vec4& v2);
237 double phi(
const Vec4& v1,
const Vec4& v2,
const Vec4& n);
248 bool pShift(
Vec4& p1Move,
Vec4& p2Move,
double m1New,
double m2New);
265 for (
int j = 0; j < 4; ++j) { M[i][j] = (i==j) ? 1. : 0.; } } }
267 for (
int i = 0; i < 4; ++i) {
for (
int j = 0; j < 4; ++j) {
268 M[i][j] = Min.M[i][j]; } } }
270 for (
int i = 0; i < 4; ++i) {
for (
int j = 0; j < 4; ++j) {
271 M[i][j] = Min.M[i][j]; } } }
return *
this; }
274 void rot(
double = 0.,
double = 0.);
276 void bst(
double = 0.,
double = 0.,
double = 0.,
double = 0.);
282 void toSameVframe(
const Vec4&,
const Vec4&);
283 void fromSameVframe(
const Vec4&,
const Vec4&);
287 tmp.
invert();
return tmp; }
291 double value(
int i,
int j) {
return M[i][j];}
294 double deviation()
const;
309 static const double TINY;
347 Vec4 pzp = tmp*pz; tmp.
rot(0.0, -pzp.phi()); tmp.
rot(-pzp.theta());
348 tmp.
rot(0.0, -(tmp*pxz).phi());
return tmp; }
353 const Vec4 & pxz) {
return toCMframe(ptot, pz, pxz).inverse(); }
369 virtual double flat() {
return 1;}
379 int i97{}, j97{}, seed{0};
381 double u[97]{}, c{}, cd{}, cm{};
384 bool operator==(
const RndmState& other)
const;
398 Rndm() : initRndm(false), stateSave(), useExternalRndm(false) { }
399 Rndm(
int seedIn) : initRndm(
false), stateSave(), useExternalRndm(
false) {
403 bool rndmEnginePtr( RndmEnginePtr rndmEngPtrIn);
406 void init(
int seedIn = 0) ;
415 double xexp() {
return -log(flat() * flat()) ;}
418 double gauss() {
return sqrt(-2. * log(flat())) * cos(M_PI * flat());}
421 pair<double, double>
gauss2() {
double r = sqrt(-2. * log(flat()));
422 double phi = 2. * M_PI * flat();
423 return { r * sin(phi), r * cos(phi) };}
426 double gamma(
double k0,
double r0);
429 pair<Vec4, Vec4> phaseSpace2(
double eCM,
double m1,
double m2);
432 int pick(
const vector<double>& prob) ;
435 template<
typename T>
void shuffle(vector<T>& vec);
441 double f = this->flat();
442 stateSave = oldState;
447 bool dumpState(
string fileName);
448 bool readState(
string fileName);
452 void setState(
const RndmState& state) {stateSave = state;}
455 static constexpr
int DEFAULTSEED = 19780503;
459 double flatDebug(
string loc,
string file,
int line);
460 double xexpDebug(
string loc,
string file,
int line);
461 double gaussDebug(
string loc,
string file,
int line);
462 pair<double, double> gauss2Debug(
string loc,
string file,
int line);
463 double gammaDebug(
string loc,
string file,
int line,
double k0,
double r0);
464 pair<Vec4, Vec4> phaseSpace2Debug(
string loc,
string file,
int line,
465 double eCM,
double m1,
double m2);
468 static bool debugNow, debugLocation, debugIndex;
469 static int debugPrecision, debugCall;
470 static set<string> debugStarts, debugEnds, debugContains, debugMatches;
480 bool useExternalRndm;
481 RndmEnginePtr rndmEngPtr{};
495 Hist() : titleSave(
""), nBin(), nFill(), nNonFinite(), xMin(),
496 xMax(), linX(), doStats(), dx(), under(), inside(), over(), sumxNw()
498 Hist(
string titleIn,
int nBinIn = 100,
double xMinIn = 0.,
499 double xMaxIn = 1.,
bool logXIn =
false,
bool doStatsIn =
false) :
500 nBin(), nFill(), nNonFinite(), xMin(), xMax(), linX(), doStats(), dx(),
501 under(), inside(), over(), sumxNw()
502 { book(titleIn, nBinIn, xMinIn, xMaxIn, logXIn, doStatsIn); }
504 : titleSave(h.titleSave), nBin(h.nBin), nFill(h.nFill),
505 nNonFinite(h.nNonFinite), xMin(h.xMin), xMax(h.xMax), linX(h.linX),
506 doStats(h.doStats), dx(h.dx), under(h.under), inside(h.inside),
507 over(h.over), res(h.res), res2(h.res2), sumxNw() {
508 for (
int i = 0; i < nMoments; ++i) sumxNw[i] = h.sumxNw[i];
511 : titleSave(titleIn), nBin(h.nBin), nFill(h.nFill),
512 nNonFinite(h.nNonFinite), xMin(h.xMin), xMax(h.xMax), linX(h.linX),
513 doStats(h.doStats), dx(h.dx), under(h.under), inside(h.inside),
514 over(h.over), res(h.res), res2(h.res2), sumxNw() {
515 for (
int i = 0; i < nMoments; ++i) sumxNw[i] = h.sumxNw[i];
517 Hist& operator=(
const Hist& h) {
if(
this != &h) {
518 nBin = h.nBin; nFill = h.nFill; nNonFinite = h.nNonFinite; xMin = h.xMin;
519 xMax = h.xMax; linX = h.linX; doStats = h.doStats; dx = h.dx;
520 under = h.under; inside = h.inside; over = h.over;
521 for (
int i = 0; i < nMoments; ++i) sumxNw[i] = h.sumxNw[i];
522 res = h.res; res2 = h.res2; }
return *
this; }
525 static Hist plotFunc(
function<
double(
double)> f,
string titleIn,
526 int nBinIn,
double xMinIn,
double xMaxIn,
bool logXIn =
false);
529 void book(
string titleIn =
" ",
int nBinIn = 100,
double xMinIn = 0.,
530 double xMaxIn = 1.,
bool logXIn =
false,
bool doStatsIn =
false) ;
533 void title(
string titleIn =
" ") {titleSave = titleIn; }
540 void fill(
double x,
double w = 1.,
double sig = -1.) ;
547 void table(ostream& os = cout,
bool printOverUnder =
false,
548 bool xMidBin =
true,
bool printError =
false)
const ;
549 void table(
string fileName,
bool printOverUnder =
false,
550 bool xMidBin =
true,
bool printError =
false)
const {
551 ofstream fileStream(fileName.c_str());
552 table(fileStream, printOverUnder, xMidBin, printError);}
553 void yodaTable(ostream& os = cout,
string path =
"hist",
554 double scaledBy = 1.0, vector<int> maskedBins = {})
const;
555 void yodaTable(
string fileName,
string path,
double scaledBy = 1.0,
556 vector<int> maskedBins = {})
const {
557 ofstream fileStream(fileName.c_str());
558 yodaTable(fileStream, path, scaledBy, maskedBins);}
559 void rivetTable(ostream& os = cout,
bool printError =
true)
const;
560 void rivetTable(
string fileName,
bool printError =
true)
const {
561 ofstream fileStream(fileName.c_str());
562 rivetTable(fileStream, printError);}
563 void pyplotTable(ostream& os = cout,
bool isHist =
true,
564 bool printError =
false)
const;
565 void pyplotTable(
string fileName,
bool isHist =
true,
566 bool printError =
false)
const {
567 ofstream fileStream(fileName.c_str());
568 pyplotTable(fileStream, isHist, printError);}
571 void fillTable(istream& is = cin);
572 void fillTable(
string fileName) { ifstream streamName(fileName.c_str());
573 fillTable(streamName);}
576 friend void table(
const Hist& h1,
const Hist& h2, ostream& os,
577 bool printOverUnder,
bool xMidBin) ;
578 friend void table(
const Hist& h1,
const Hist& h2,
string fileName,
579 bool printOverUnder,
bool xMidBin) ;
583 int getBinNumber()
const {
return nBin;}
584 int getNonFinite()
const {
return nNonFinite;}
585 bool getLinX()
const {
return linX;}
589 double getXMax()
const {
return xMax;}
590 double getYMin()
const {
if (nBin == 0)
return 0.;
591 double yMin = res[0];
592 for (
int ix = 1; ix < nBin; ++ix)
593 if (res[ix] < yMin ) yMin = res[ix];
595 double getYMax()
const {
if (nBin == 0)
return 0.;
596 double yMax = res[0];
597 for (
int ix = 1; ix < nBin; ++ix)
598 if (res[ix] > yMax ) yMax = res[ix];
600 double getYAbsMin()
const {
double yAbsMin = 1e20;
double yAbs;
601 for (
int ix = 0; ix < nBin; ++ix) { yAbs = abs(res[ix]);
602 if (yAbs > 1e-20 && yAbs < yAbsMin) yAbsMin = yAbs; }
610 double getXMean(
bool unbinned=
true)
const;
611 double getXMeanErr(
bool unbinned=
true)
const;
617 double getXPercentile(
double n,
bool includeOverUnder =
false)
const;
618 double getXMedian(
bool includeOverUnder=
false)
const {
619 return getXPercentile(50.0, includeOverUnder);}
620 double getXMedianErr(
bool unbinned=
true)
const;
637 double getXRMN(
int n=2,
bool unbinned=
true)
const;
638 double getXRMS(
bool unbinned=
true)
const {
return getXRMN(2, unbinned);}
640 double getXRMNErr(
int n=2,
bool unbinned=
true)
const;
641 double getXRMSErr(
bool unbinned=
true)
const {
642 return getXRMNErr(2, unbinned);}
645 double getBinContent(
int iBin)
const;
648 double getBinError(
int iBin)
const;
651 double getBinError2(
int iBin)
const;
654 double getBinEdge(
int iBin)
const;
657 double getBinWidth(
int iBin=1)
const;
660 double getBinCenter(
int iBin)
const;
663 vector<double> getBinContents()
const;
666 vector<double> getBinErrors()
const;
669 vector<double> getBinError2s()
const;
672 vector<double> getBinEdges()
const;
675 vector<double> getBinWidths()
const;
678 vector<double> getBinCenters()
const;
682 return alsoNonFinite ? nNonFinite + nFill : nFill; }
686 return alsoOverUnder ? inside + over + under : inside; }
692 for (
int ix = 0; ix < nBin; ++ix) sumw2 += res2[ix];
693 if (sumw2 <= Hist::TINY)
return 0.;
694 else return pow2(sumxNw[0]) / sumw2;
698 bool sameSize(
const Hist& h)
const ;
701 void takeFunc(
function<
double(
double)> func);
704 void takeLog(
bool tenLog =
true);
710 void normalize(
double f = 1,
bool overflow =
true) ;
713 void normalizeIntegral(
double f = 1,
bool overflow =
true);
716 void normalizeSpectrum(
double wtSum);
719 void makeCumulative(
bool updateStatistics =
false,
720 bool withUnderflow =
false);
727 Hist& operator+=(
double f) ;
728 Hist& operator-=(
double f) ;
729 Hist& operator*=(
double f) ;
730 Hist& operator/=(
double f) ;
732 Hist operator+(
const Hist& h2)
const;
736 Hist operator*(
const Hist& h2)
const;
737 Hist operator/(
double f)
const;
738 Hist operator/(
const Hist& h2)
const;
741 friend Hist operator+(
double f,
const Hist& h1);
743 friend Hist operator*(
double f,
const Hist& h1);
744 friend Hist operator/(
double f,
const Hist& h1);
749 static const int NBINMAX, NCOLMAX, NLINES;
750 static const double TOLERANCE, TINY, LARGE, SMALLFRAC,
DYAC[];
751 static const char NUMBER[];
755 int nBin, nFill, nNonFinite;
758 double dx, under, inside, over;
759 vector<double> res, res2;
762 static constexpr
int nMoments = 7;
763 double sumxNw[nMoments];
775 void table(
const Hist& h1,
const Hist& h2, ostream& os = cout,
776 bool printOverUnder =
false,
bool xMidBin =
true) ;
778 bool printOverUnder =
false,
bool xMidBin =
true) ;
784 Hist operator/(
double f,
const Hist& h1);
796 HistPlot(
string pythonName,
bool useLegacyIn =
false)
797 : nFrame(), nTable(), useLegacy(useLegacyIn) {
798 toPython.open((pythonName +
".py").c_str());
799 toPython <<
"from matplotlib import pyplot as plt" << endl
800 <<
"from matplotlib.backends.backend_pdf import PdfPages" << endl;
807 void frame(
string frameIn,
string titleIn =
"",
string xLabIn =
"",
808 string yLabIn =
"",
double xSizeIn = 8.,
double ySizeIn = 6.) {
809 framePrevious = frameName; frameName = frameIn; title = titleIn;
810 xLabel = xLabIn; yLabel = yLabIn; xSize = xSizeIn; ySize = ySizeIn;
811 histos.clear(); styles.clear(); legends.clear(); files.clear();
812 fileStyles.clear(); fileLegends.clear(); filexyerr.clear();}
815 void add(
const Hist& histIn,
string styleIn =
"h",
816 string legendIn =
"void") {
817 if (histIn.getBinNumber() == 0) {
818 cout <<
" Error: histogram is not booked" << endl;
821 histos.push_back(histIn);
822 styles.push_back(styleIn); legends.push_back(legendIn); }
825 void addFile(
string fileIn,
string styleIn =
"o",
826 string legendIn =
"void",
string xyerrIn=
"") { files.push_back(fileIn);
827 fileStyles.push_back(styleIn); fileLegends.push_back(legendIn);
828 filexyerr.push_back(xyerrIn);}
831 void plot(
bool logY =
false,
bool logX =
false,
bool userBorders =
false);
832 void plot(
double xMinUserIn,
double xMaxUserIn,
double yMinUserIn,
833 double yMaxUserIn,
bool logY =
false,
bool logX =
false) {
834 xMinUser = xMinUserIn; xMaxUser = xMaxUserIn; yMinUser = yMinUserIn;
835 yMaxUser = yMaxUserIn; plot( logY, logX,
true);}
839 string xLabIn =
"",
string yLabIn =
"",
string styleIn =
"h",
840 string legendIn =
"void",
bool logY =
false) {
841 frame( frameIn, titleIn, xLabIn, yLabIn);
842 add( histIn, styleIn, legendIn); plot( logY); }
847 void init(
string pythonName);
851 int nPDF, nFrame, nTable;
852 double xSize, ySize, xMinUser, xMaxUser, yMinUser, yMaxUser;
853 string frameName, framePrevious, title, xLabel, yLabel, fileName, tmpFig;
855 vector<string> styles, legends, files, fileStyles, fileLegends, filexyerr;
867 #define flat() flatDebug(__METHOD_NAME__, __FILE__, __LINE__) 868 #define xexp() xexpDebug(__METHOD_NAME__, __FILE__, __LINE__) 869 #define gauss() gaussDebug(__METHOD_NAME__, __FILE__, __LINE__) 870 #define gamma(...) gammaDebug(__METHOD_NAME__, __FILE__, __LINE__, __VA_ARGS__) 871 #define phaseSpace2(...) phaseSpace2Debug(__METHOD_NAME__, __FILE__, __LINE__,\ 881 for (
int i = vec.size() - 1; i > 0; --i)
882 swap(vec[i], vec[floor(flat() * (i + 1))]);
RndmState getState() const
Get or set the state of the random number generator.
Definition: Basics.h:451
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:175
double value(int i, int j)
Return value of matrix element.
Definition: Basics.h:291
pair< double, double > gauss2()
Generate two random numbers according to exp(-x^2/2-y^2/2).
Definition: Basics.h:421
friend double m2(const Vec4 &v1)
The squared invariant mass of one or more four-vectors.
Definition: Basics.cc:597
void rot(double=0., double=0.)
Member functions.
Definition: Basics.cc:857
Hist()
Constructors, including copy constructors.
Definition: Basics.h:495
void bstback(const Vec4 &pIn)
Boost given by a Vec4 p; boost in opposite direction.
Definition: Basics.cc:508
void invert()
Invert the rotation and boost.
Definition: Basics.cc:1077
void rotbst(const RotBstMatrix &)
Combine existing rotation/boost matrix with another one.
Definition: Basics.cc:1062
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:807
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:202
double eps4(const Vec4 &a, const Vec4 &b, const Vec4 &c, const Vec4 &d)
Definition: Basics.cc:652
void rotaxis(double phiIn, double nx, double ny, double nz)
Azimuthal rotation phi around an arbitrary axis (nz, ny, nz).
Definition: Basics.cc:386
friend double sintheta(const Vec4 &v1, const Vec4 &v2)
Sine of opening angle between two three-vectors, using cross product.
Definition: Basics.cc:686
RotBstMatrix()
Constructors.
Definition: Basics.h:264
RotBstMatrix toCMframe(const Vec4 &p)
Get a RotBstMatrix to rest frame of p.
Definition: Basics.h:324
void title(string titleIn=" ")
Set title of a histogram.
Definition: Basics.h:533
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:825
double peekFlat()
Definition: Basics.h:439
Vec4 operator*(Vec4 p) const
Multiplication.
Definition: Basics.h:303
void rotbst(const RotBstMatrix &M)
Arbitrary combination of rotations and boosts defined by 4 * 4 matrix.
Definition: Basics.cc:550
virtual ~RndmEngine()
Destructor.
Definition: Basics.h:365
RotBstMatrix fromCMframe(const Vec4 &p)
Get a RotBstMatrix from rest frame of p.
Definition: Basics.h:328
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:838
const double DYAC[]
Constants for printout: fixed steps on y scale; filling characters.
Definition: Basics.cc:1153
friend double costheta(const Vec4 &v1, const Vec4 &v2)
Cosine of the opening angle between two three-vectors.
Definition: Basics.cc:673
void bstback(const Vec4 &)
Boost so vector originally with same velocity as p is brought to rest.
Definition: Basics.cc:939
Rndm()
Constructors.
Definition: Basics.h:398
void rot(double thetaIn, double phiIn)
Rotation (simple).
Definition: Basics.cc:367
double getNEffective() const
Definition: Basics.h:690
friend ostream & operator<<(ostream &, const Vec4 &v)
Print a four-vector.
Definition: Basics.cc:576
friend double m(const Vec4 &v1)
Invariant mass and its square.
Definition: Basics.cc:587
friend Vec4 cross3(const Vec4 &v1, const Vec4 &v2)
The cross product of two three-vectors.
Definition: Basics.cc:625
string getTitle() const
Return title and size of histogram. Also if logarithmic x scale.
Definition: Basics.h:582
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:791
double getYMean() const
Return average <Y> value.
Definition: Basics.h:623
friend double dot3(const Vec4 &v1, const Vec4 &v2)
Scalar and cross product of 3-vector parts.
Definition: Basics.cc:617
~HistPlot()
Destructor should do final close.
Definition: Basics.h:804
int getEntries(bool alsoNonFinite=true) const
Return total number of entries.
Definition: Basics.h:681
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:637
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:1673
void bst(double betaX, double betaY, double betaZ)
Boost (simple).
Definition: Basics.cc:433
void bst(double=0., double=0., double=0., double=0.)
Boost with velocity vector (betaX, betaY, betaZ).
Definition: Basics.cc:899
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:815
friend double cosphi(const Vec4 &v1, const Vec4 &v2)
Cosine of the azimuthal angle between two three-vectors.
Definition: Basics.cc:719
virtual double flat()
Definition: Basics.h:369
double gauss()
Generate random numbers according to exp(-x^2/2).
Definition: Basics.h:418
friend double RRapPhi(const Vec4 &v1, const Vec4 &v2)
R is distance in cylindrical (y/eta, phi) coordinates.
Definition: Basics.cc:768
friend pair< Vec4, Vec4 > getTwoPerpendicular(const Vec4 &v1, const Vec4 &v2)
Create two vectors that are perpendicular to both input vectors.
Definition: Basics.cc:819
HistPlot(string pythonName, bool useLegacyIn=false)
Constructor requires name of Python program (and adds .py).
Definition: Basics.h:796
void shuffle(vector< T > &vec)
Randomly shuffle a vector, standard Fisher-Yates algorithm.
Definition: Basics.h:880
Header for classes to set beam momentum and interaction vertex spread.
Definition: Analysis.h:20
void toCMframe(const Vec4 &, const Vec4 &)
Definition: Basics.cc:965
double eInFrame(const Vec4 &pIn) const
Definition: Basics.cc:565
friend double REtaPhi(const Vec4 &v1, const Vec4 &v2)
Distance in cylindrical (eta, phi) coordinates.
Definition: Basics.cc:779
Hist operator+(double f, const Hist &h1)
Operator overloading with friends.
Definition: Basics.cc:2393
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 total sum of weights.
Definition: Basics.h:685
double xexp()
Generate random numbers according to x * exp(-x).
Definition: Basics.h:415
double getXMin() const
Return min and max in x and y directions.
Definition: Basics.h:588
void fromCMframe(const Vec4 &, const Vec4 &, bool flip=false)
Definition: Basics.cc:984