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);
222 double theta(
const Vec4& v1,
const Vec4& v2);
225 double costheta(
double e1,
double e2,
double m1,
double m2,
double s12);
228 double phi(
const Vec4& v1,
const Vec4& v2);
232 double phi(
const Vec4& v1,
const Vec4& v2,
const Vec4& n);
243 bool pShift(
Vec4& p1Move,
Vec4& p2Move,
double m1New,
double m2New);
260 for (
int j = 0; j < 4; ++j) { M[i][j] = (i==j) ? 1. : 0.; } } }
262 for (
int i = 0; i < 4; ++i) {
for (
int j = 0; j < 4; ++j) {
263 M[i][j] = Min.M[i][j]; } } }
265 for (
int i = 0; i < 4; ++i) {
for (
int j = 0; j < 4; ++j) {
266 M[i][j] = Min.M[i][j]; } } }
return *
this; }
269 void rot(
double = 0.,
double = 0.);
271 void bst(
double = 0.,
double = 0.,
double = 0.,
double = 0.);
277 void toSameVframe(
const Vec4&,
const Vec4&);
278 void fromSameVframe(
const Vec4&,
const Vec4&);
282 tmp.
invert();
return tmp; }
286 double value(
int i,
int j) {
return M[i][j];}
289 double deviation()
const;
304 static const double TINY;
342 Vec4 pzp = tmp*pz; tmp.
rot(0.0, -pzp.phi()); tmp.
rot(-pzp.theta());
343 tmp.
rot(0.0, -(tmp*pxz).phi());
return tmp; }
348 const Vec4 & pxz) {
return toCMframe(ptot, pz, pxz).inverse(); }
364 virtual double flat() {
return 1;}
374 int i97{}, j97{}, seed{0};
376 double u[97]{}, c{}, cd{}, cm{};
393 Rndm() : initRndm(false), stateSave(), useExternalRndm(false) { }
394 Rndm(
int seedIn) : initRndm(
false), stateSave(), useExternalRndm(
false) {
398 bool rndmEnginePtr( RndmEnginePtr rndmEngPtrIn);
401 void init(
int seedIn = 0) ;
410 double xexp() {
return -log(flat() * flat()) ;}
413 double gauss() {
return sqrt(-2. * log(flat())) * cos(M_PI * flat());}
416 pair<double, double>
gauss2() {
double r = sqrt(-2. * log(flat()));
417 double phi = 2. * M_PI * flat();
418 return { r * sin(phi), r * cos(phi) };}
421 double gamma(
double k0,
double r0);
424 pair<Vec4, Vec4> phaseSpace2(
double eCM,
double m1,
double m2);
427 int pick(
const vector<double>& prob) ;
430 template<
typename T>
void shuffle(vector<T>& vec);
436 double f = this->flat();
437 stateSave = oldState;
442 bool dumpState(
string fileName);
443 bool readState(
string fileName);
447 void setState(
const RndmState& state) {stateSave = state;}
450 static constexpr
int DEFAULTSEED = 19780503;
454 double flatDebug(
string loc,
string file,
int line);
455 double xexpDebug(
string loc,
string file,
int line);
456 double gaussDebug(
string loc,
string file,
int line);
457 pair<double, double> gauss2Debug(
string loc,
string file,
int line);
458 double gammaDebug(
string loc,
string file,
int line,
double k0,
double r0);
459 pair<Vec4, Vec4> phaseSpace2Debug(
string loc,
string file,
int line,
460 double eCM,
double m1,
double m2);
463 static bool debugNow, debugLocation, debugIndex;
464 static int debugPrecision, debugCall;
465 static set<string> debugStarts, debugEnds, debugContains, debugMatches;
475 bool useExternalRndm;
476 RndmEnginePtr rndmEngPtr{};
490 Hist() : titleSave(
""), nBin(), nFill(), nNonFinite(), xMin(),
491 xMax(), linX(), doStats(), dx(), under(), inside(), over(), sumxNw()
493 Hist(
string titleIn,
int nBinIn = 100,
double xMinIn = 0.,
494 double xMaxIn = 1.,
bool logXIn =
false,
bool doStatsIn =
false) :
495 nBin(), nFill(), nNonFinite(), xMin(), xMax(), linX(), doStats(), dx(),
496 under(), inside(), over(), sumxNw()
497 { book(titleIn, nBinIn, xMinIn, xMaxIn, logXIn, doStatsIn); }
499 : titleSave(h.titleSave), nBin(h.nBin), nFill(h.nFill),
500 nNonFinite(h.nNonFinite), xMin(h.xMin), xMax(h.xMax), linX(h.linX),
501 doStats(h.doStats), dx(h.dx), under(h.under), inside(h.inside),
502 over(h.over), res(h.res), res2(h.res2), sumxNw() {
503 for (
int i = 0; i < nMoments; ++i) sumxNw[i] = h.sumxNw[i];
506 : titleSave(titleIn), nBin(h.nBin), nFill(h.nFill),
507 nNonFinite(h.nNonFinite), xMin(h.xMin), xMax(h.xMax), linX(h.linX),
508 doStats(h.doStats), dx(h.dx), under(h.under), inside(h.inside),
509 over(h.over), res(h.res), res2(h.res2), sumxNw() {
510 for (
int i = 0; i < nMoments; ++i) sumxNw[i] = h.sumxNw[i];
512 Hist& operator=(
const Hist& h) {
if(
this != &h) {
513 nBin = h.nBin; nFill = h.nFill; nNonFinite = h.nNonFinite; xMin = h.xMin;
514 xMax = h.xMax; linX = h.linX; doStats = h.doStats; dx = h.dx;
515 under = h.under; inside = h.inside; over = h.over;
516 for (
int i = 0; i < nMoments; ++i) sumxNw[i] = h.sumxNw[i];
517 res = h.res; res2 = h.res2; }
return *
this; }
520 static Hist plotFunc(
function<
double(
double)> f,
string titleIn,
521 int nBinIn,
double xMinIn,
double xMaxIn,
bool logXIn =
false);
524 void book(
string titleIn =
" ",
int nBinIn = 100,
double xMinIn = 0.,
525 double xMaxIn = 1.,
bool logXIn =
false,
bool doStatsIn =
false) ;
528 void title(
string titleIn =
" ") {titleSave = titleIn; }
534 void fill(
double x,
double w = 1.) ;
541 void table(ostream& os = cout,
bool printOverUnder =
false,
542 bool xMidBin =
true,
bool printError =
false)
const ;
543 void table(
string fileName,
bool printOverUnder =
false,
544 bool xMidBin =
true,
bool printError =
false)
const {
545 ofstream streamName(fileName.c_str());
546 table(streamName, printOverUnder, xMidBin, printError);}
547 void rivetTable(ostream& os = cout,
bool printError =
true)
const ;
548 void rivetTable(
string fileName,
bool printError =
true)
const {
549 ofstream streamName(fileName.c_str()); rivetTable(streamName, printError);}
550 void pyplotTable(ostream& os = cout,
bool isHist =
true,
551 bool printError =
false)
const ;
552 void pyplotTable(
string fileName,
bool isHist =
true,
553 bool printError =
false)
const {ofstream streamName(fileName.c_str());
554 pyplotTable(streamName, isHist, printError);}
557 void fillTable(istream& is = cin);
558 void fillTable(
string fileName) { ifstream streamName(fileName.c_str());
559 fillTable(streamName);}
562 friend void table(
const Hist& h1,
const Hist& h2, ostream& os,
563 bool printOverUnder,
bool xMidBin) ;
564 friend void table(
const Hist& h1,
const Hist& h2,
string fileName,
565 bool printOverUnder,
bool xMidBin) ;
569 int getBinNumber()
const {
return nBin;}
570 int getNonFinite()
const {
return nNonFinite;}
571 bool getLinX()
const {
return linX;}
575 double getXMax()
const {
return xMax;}
576 double getYMin()
const {
if (nBin == 0)
return 0.;
577 double yMin = res[0];
578 for (
int ix = 1; ix < nBin; ++ix)
579 if (res[ix] < yMin ) yMin = res[ix];
581 double getYMax()
const {
if (nBin == 0)
return 0.;
582 double yMax = res[0];
583 for (
int ix = 1; ix < nBin; ++ix)
584 if (res[ix] > yMax ) yMax = res[ix];
586 double getYAbsMin()
const {
double yAbsMin = 1e20;
double yAbs;
587 for (
int ix = 0; ix < nBin; ++ix) { yAbs = abs(res[ix]);
588 if (yAbs > 1e-20 && yAbs < yAbsMin) yAbsMin = yAbs; }
596 double getXMean(
bool unbinned=
true)
const;
597 double getXMeanErr(
bool unbinned=
true)
const;
603 double getXMedian(
bool includeOverUnder=
false)
const;
604 double getXMedianErr(
bool unbinned=
true)
const;
621 double getXRMN(
int n=2,
bool unbinned=
true)
const;
622 double getXRMS(
bool unbinned=
true)
const {
return getXRMN(2, unbinned);}
624 double getXRMNErr(
int n=2,
bool unbinned=
true)
const;
625 double getXRMSErr(
bool unbinned=
true)
const {
626 return getXRMNErr(2, unbinned);}
629 double getBinContent(
int iBin)
const;
632 double getBinEdge(
int iBin)
const;
635 double getBinWidth(
int iBin=1)
const;
638 vector<double> getBinContents()
const;
641 vector<double> getBinEdges()
const;
645 return alsoNonFinite ? nNonFinite + nFill : nFill; }
649 return alsoOverUnder ? inside + over + under : inside; }
655 for (
int ix = 0; ix < nBin; ++ix) sumw2 += res2[ix];
656 if (sumw2 <= Hist::TINY)
return 0.;
657 else return pow2(sumxNw[0]) / sumw2;
661 bool sameSize(
const Hist& h)
const ;
664 void takeFunc(
function<
double(
double)> func);
667 void takeLog(
bool tenLog =
true);
673 void normalize(
double f = 1,
bool overflow =
true) ;
676 void normalizeIntegral(
double f = 1,
bool overflow =
true);
679 void normalizeSpectrum(
double wtSum);
686 Hist& operator+=(
double f) ;
687 Hist& operator-=(
double f) ;
688 Hist& operator*=(
double f) ;
689 Hist& operator/=(
double f) ;
691 Hist operator+(
const Hist& h2)
const;
695 Hist operator*(
const Hist& h2)
const;
696 Hist operator/(
double f)
const;
697 Hist operator/(
const Hist& h2)
const;
700 friend Hist operator+(
double f,
const Hist& h1);
702 friend Hist operator*(
double f,
const Hist& h1);
703 friend Hist operator/(
double f,
const Hist& h1);
708 static const int NBINMAX, NCOLMAX, NLINES;
709 static const double TOLERANCE, TINY, LARGE, SMALLFRAC,
DYAC[];
710 static const char NUMBER[];
714 int nBin, nFill, nNonFinite;
717 double dx, under, inside, over;
718 vector<double> res, res2;
721 static constexpr
int nMoments = 7;
722 double sumxNw[nMoments];
734 void table(
const Hist& h1,
const Hist& h2, ostream& os = cout,
735 bool printOverUnder =
false,
bool xMidBin =
true) ;
737 bool printOverUnder =
false,
bool xMidBin =
true) ;
743 Hist operator/(
double f,
const Hist& h1);
755 HistPlot(
string pythonName,
bool useLegacyIn =
false)
756 : nFrame(), nTable(), useLegacy(useLegacyIn) {
757 toPython.open( (pythonName +
".py").c_str() );
758 toPython <<
"from matplotlib import pyplot as plt" << endl
759 <<
"from matplotlib.backends.backend_pdf import PdfPages" << endl;
766 void frame(
string frameIn,
string titleIn =
"",
string xLabIn =
"",
767 string yLabIn =
"",
double xSizeIn = 8.,
double ySizeIn = 6.) {
768 framePrevious = frameName; frameName = frameIn; title = titleIn;
769 xLabel = xLabIn; yLabel = yLabIn; xSize = xSizeIn; ySize = ySizeIn;
770 histos.clear(); styles.clear(); legends.clear(); files.clear();
771 fileStyles.clear(); fileLegends.clear(); filexyerr.clear();}
774 void add(
const Hist& histIn,
string styleIn =
"h",
775 string legendIn =
"void") {
776 if (histIn.getBinNumber() == 0) {
777 cout <<
" Error: histogram is not booked" << endl;
780 histos.push_back(histIn);
781 styles.push_back(styleIn); legends.push_back(legendIn); }
784 void addFile(
string fileIn,
string styleIn =
"o",
785 string legendIn =
"void",
string xyerrIn=
"") { files.push_back(fileIn);
786 fileStyles.push_back(styleIn); fileLegends.push_back(legendIn);
787 filexyerr.push_back(xyerrIn);}
790 void plot(
bool logY =
false,
bool logX =
false,
bool userBorders =
false);
791 void plot(
double xMinUserIn,
double xMaxUserIn,
double yMinUserIn,
792 double yMaxUserIn,
bool logY =
false,
bool logX =
false) {
793 xMinUser = xMinUserIn; xMaxUser = xMaxUserIn; yMinUser = yMinUserIn;
794 yMaxUser = yMaxUserIn; plot( logY, logX,
true);}
798 string xLabIn =
"",
string yLabIn =
"",
string styleIn =
"h",
799 string legendIn =
"void",
bool logY =
false) {
800 frame( frameIn, titleIn, xLabIn, yLabIn);
801 add( histIn, styleIn, legendIn); plot( logY); }
806 void init(
string pythonName);
810 int nPDF, nFrame, nTable;
811 double xSize, ySize, xMinUser, xMaxUser, yMinUser, yMaxUser;
812 string frameName, framePrevious, title, xLabel, yLabel, fileName, tmpFig;
814 vector<string> styles, legends, files, fileStyles, fileLegends, filexyerr;
826 #define flat() flatDebug(__METHOD_NAME__, __FILE__, __LINE__) 827 #define xexp() xexpDebug(__METHOD_NAME__, __FILE__, __LINE__) 828 #define gauss() gaussDebug(__METHOD_NAME__, __FILE__, __LINE__) 829 #define gamma(...) gammaDebug(__METHOD_NAME__, __FILE__, __LINE__, __VA_ARGS__) 830 #define phaseSpace2(...) phaseSpace2Debug(__METHOD_NAME__, __FILE__, __LINE__,\ 840 for (
int i = vec.size() - 1; i > 0; --i)
841 swap(vec[i], vec[floor(flat() * (i + 1))]);
RndmState getState() const
Get or set the state of the random number generator.
Definition: Basics.h:446
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:286
pair< double, double > gauss2()
Generate two random numbers according to exp(-x^2/2-y^2/2).
Definition: Basics.h:416
friend double m2(const Vec4 &v1)
The squared invariant mass of one or more four-vectors.
Definition: Basics.cc:598
void rot(double=0., double=0.)
Member functions.
Definition: Basics.cc:853
Hist()
Constructors, including copy constructors.
Definition: Basics.h:490
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:1073
void rotbst(const RotBstMatrix &)
Combine existing rotation/boost matrix with another one.
Definition: Basics.cc:1058
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:766
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
void rotaxis(double phiIn, double nx, double ny, double nz)
Azimuthal rotation phi around an arbitrary axis (nz, ny, nz).
Definition: Basics.cc:387
friend double sintheta(const Vec4 &v1, const Vec4 &v2)
Sine of opening angle between two three-vectors, using cross product.
Definition: Basics.cc:682
RotBstMatrix()
Constructors.
Definition: Basics.h:259
RotBstMatrix toCMframe(const Vec4 &p)
Get a RotBstMatrix to rest frame of p.
Definition: Basics.h:319
void title(string titleIn=" ")
Set title of a histogram.
Definition: Basics.h:528
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:784
double peekFlat()
Definition: Basics.h:434
Vec4 operator*(Vec4 p) const
Multiplication.
Definition: Basics.h:298
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:360
RotBstMatrix fromCMframe(const Vec4 &p)
Get a RotBstMatrix from rest frame of p.
Definition: Basics.h:323
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:797
const double DYAC[]
Constants for printout: fixed steps on y scale; filling characters.
Definition: Basics.cc:1149
friend double costheta(const Vec4 &v1, const Vec4 &v2)
Cosine of the opening angle between two three-vectors.
Definition: Basics.cc:669
void bstback(const Vec4 &)
Boost so vector originally with same velocity as p is brought to rest.
Definition: Basics.cc:935
Rndm()
Constructors.
Definition: Basics.h:393
void rot(double thetaIn, double phiIn)
Rotation (simple).
Definition: Basics.cc:368
double getNEffective() const
Definition: Basics.h:653
friend ostream & operator<<(ostream &, const Vec4 &v)
Print a four-vector.
Definition: Basics.cc:577
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:588
friend Vec4 cross3(const Vec4 &v1, const Vec4 &v2)
The cross product of two three-vectors.
Definition: Basics.cc:626
string getTitle() const
Return title and size of histogram. Also if logarithmic x scale.
Definition: Basics.h:568
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:787
double getYMean() const
Return average <Y> value.
Definition: Basics.h:607
friend double dot3(const Vec4 &v1, const Vec4 &v2)
Scalar and cross product of 3-vector parts.
Definition: Basics.cc:618
~HistPlot()
Destructor should do final close.
Definition: Basics.h:763
int getEntries(bool alsoNonFinite=true) const
Return number of entries.
Definition: Basics.h:644
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:638
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:1612
void bst(double betaX, double betaY, double betaZ)
Boost (simple).
Definition: Basics.cc:434
void bst(double=0., double=0., double=0., double=0.)
Boost with velocity vector (betaX, betaY, betaZ).
Definition: Basics.cc:895
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:774
friend double cosphi(const Vec4 &v1, const Vec4 &v2)
Cosine of the azimuthal angle between two three-vectors.
Definition: Basics.cc:715
virtual double flat()
Definition: Basics.h:364
double gauss()
Generate random numbers according to exp(-x^2/2).
Definition: Basics.h:413
friend double RRapPhi(const Vec4 &v1, const Vec4 &v2)
R is distance in cylindrical (y/eta, phi) coordinates.
Definition: Basics.cc:764
friend pair< Vec4, Vec4 > getTwoPerpendicular(const Vec4 &v1, const Vec4 &v2)
Create two vectors that are perpendicular to both input vectors.
Definition: Basics.cc:815
HistPlot(string pythonName, bool useLegacyIn=false)
Constructor requires name of Python program (and adds .py).
Definition: Basics.h:755
void shuffle(vector< T > &vec)
Randomly shuffle a vector, standard Fisher-Yates algorithm.
Definition: Basics.h:839
Header for classes to set beam momentum and interaction vertex spread.
Definition: Analysis.h:20
void toCMframe(const Vec4 &, const Vec4 &)
Definition: Basics.cc:961
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:775
Hist operator+(double f, const Hist &h1)
Operator overloading with friends.
Definition: Basics.cc:2244
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:648
double xexp()
Generate random numbers according to x * exp(-x).
Definition: Basics.h:410
double getXMin() const
Return min and max in x and y directions.
Definition: Basics.h:574
void fromCMframe(const Vec4 &, const Vec4 &, bool flip=false)
Definition: Basics.cc:980