1 #include "TLorentzVector.h"
2 #include "TLorentzRotation.h"
3 #include <framework/gearbox/Const.h>
4 #include <generators/utilities/cm2LabBoost.h>
8 TLorentzRotation getBoost(
double Eher,
double Eler,
double cross_angle,
double angle)
15 double angleLerToB = M_PI - angle;
16 double pLerZ = Eler * cos(angleLerToB);
17 double pLerX = Eler * sin(angleLerToB);
21 double angleHerToB = cross_angle - angle;
23 double pHerZ = Eher * cos(angleHerToB);
24 double pHerX = Eher * sin(angleHerToB);
33 TLorentzVector vlY4s = vlHer + vlLer;
39 TVector3 cmsBoostVec = vlY4s.BoostVector();
40 TLorentzRotation lab2cmsBoost(-cmsBoostVec);
43 TLorentzVector vlEleCms = lab2cmsBoost * vlHer;
46 TVector3 zaxis(0., 0., 1.); TVector3 rotaxis = zaxis.Cross(vlEleCms.Vect()) * (1. / vlEleCms.Vect().Mag());
47 double rotangle = TMath::ASin(rotaxis.Mag());
48 TLorentzRotation lab2cmsBoostRotZ = lab2cmsBoost.Rotate(-rotangle, rotaxis);
52 TLorentzVector vlEleCmsR;
53 TLorentzVector vlPosCmsR;
56 TLorentzRotation cms2labBoostRotZ = lab2cmsBoostRotZ.Inverse();
64 return cms2labBoostRotZ;
67 double getBeamEnergySpreadCM(
double E1,
double dE1,
68 double E2,
double dE2,
69 double crossing_angle)
75 double ca = cos(crossing_angle);
77 double P1 = sqrt(E1 * E1 - m * m);
78 double P2 = sqrt(E2 * E2 - m * m);
79 Double_t Etotcm = sqrt(2.*m * m + 2.*(E1 * E2 + P1 * P2 * ca));
80 Double_t dEdE1 = (P1 * E2 + P2 * E1 * ca) / P1 / Etotcm;
81 Double_t dEdE2 = (P1 * E2 * ca + P2 * E1) / P2 / Etotcm;
82 Double_t dEtotcm = sqrt((dE1 * dEdE1) * (dE1 * dEdE1) + (dE2 * dEdE2) * (dE2 * dEdE2));
static const double electronMass
electron mass
Abstract base class for different kinds of events.