File indexing completed on 2025-04-02 09:14:12
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include "TMath.h"
0010
0011
0012 using P3EVector=ROOT::Math::PxPyPzEVector;
0013 using P3MVector=ROOT::Math::PxPyPzMVector;
0014 using MomVector=ROOT::Math::DisplacementVector3D<ROOT::Math::Cartesian3D<Double_t>,ROOT::Math::DefaultCoordinateSystemTag>;
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033 template<typename P>
0034 Double_t calcE(const P& mom, const Float_t& M){
0035 return TMath::Sqrt(mom.Mag2() + TMath::Power(M,2));
0036 }
0037
0038 Double_t calcE(const Float_t& px, const Float_t& py, const Float_t& pz, const Float_t& M){
0039 return TMath::Sqrt(TMath::Power(px,2) + TMath::Power(py,2) + TMath::Power(pz,2) + TMath::Power(M,2));
0040 }
0041
0042
0043
0044
0045
0046
0047
0048
0049 template <typename V>
0050 Double_t calcT_BABE(const V& be, const V& ba){
0051 double t = (ba - be).M2();
0052
0053 return TMath::Abs(t);
0054 }
0055
0056
0057
0058
0059
0060
0061
0062
0063 template <typename V>
0064 Double_t calcT_eX(const V& e, const V& ep, const V& X){
0065 double t = (e - ep - X).M2();
0066 return TMath::Abs(t);
0067 }
0068
0069 template <typename V>
0070 Double_t calcT_eX(const V& q, const V& X){
0071 double t = (q - X).M2();
0072 return TMath::Abs(t);
0073 }
0074
0075
0076
0077
0078
0079
0080
0081 template <typename V>
0082 Double_t calcT_eXBA(const V& e, const V& ep, const V& pp, const V& X){
0083
0084 double E_ep = ep.E();
0085 double theta_ep = ep.Theta();
0086
0087
0088 P3EVector q(e.X()-ep.X(), e.Y()-ep.Y(), e.Z()-ep.Z(), e.E()-ep.E());
0089 double sigma_h = (pp+X).E() - (pp+X).Z();
0090 double sigterm = sigma_h/2;
0091 double eterm = (E_ep*(1+TMath::Cos(theta_ep)))/2;
0092
0093 P3EVector pcorr(q.X(), q.Y(), -sigterm-eterm, sigterm-eterm);
0094
0095 double t = (pcorr - X).M2();
0096 return TMath::Abs(t);
0097 }
0098
0099
0100
0101
0102
0103
0104
0105 template<typename V>
0106 Double_t calcT_eXBE(const V& e, const V& p, const V& ep, const V& pp, const V& X){
0107
0108 P3EVector p4miss((e+p-ep-X).X(),(e+p-ep-X).Y(),(e+p-ep-X).Z(),(e+p-ep-X).E());
0109
0110
0111 Float_t pmiss_mag = p4miss.Vect().R();
0112 Float_t pcorr_mag = TMath::Sqrt(TMath::Power(pmiss_mag,2) + TMath::Power(pp.M(),2));
0113 P3EVector pcorr(p4miss.Vect().X(), p4miss.Vect().Y(), p4miss.Vect().Z(), pcorr_mag);
0114
0115 double t = (pcorr-p).M2();
0116 return TMath::Abs(t);
0117 }
0118
0119 template<typename V>
0120 Double_t calcT_eXBE(const V& p, const V& q, const V& pp, const V& X){
0121
0122 P3EVector p4miss((p+q-X).X(),(p+q-X).Y(),(p+q-X).Z(),(p+q-X).E());
0123
0124
0125 Float_t pmiss_mag = p4miss.Vect().R();
0126 Float_t pcorr_mag = TMath::Sqrt(TMath::Power(pmiss_mag,2) + TMath::Power(pp.M(),2));
0127 P3EVector pcorr(p4miss.Vect().X(), p4miss.Vect().Y(), p4miss.Vect().Z(), pcorr_mag);
0128
0129 double t = (pcorr-p).M2();
0130 return TMath::Abs(t);
0131 }
0132
0133
0134
0135
0136
0137
0138
0139 template<typename V>
0140 Double_t calcT_eBABE(const V& e, const V& p, const V& ep, const V& pp){
0141
0142 P3EVector q(e.X()-ep.X(), e.Y()-ep.Y(), e.Z()-ep.Z(), e.E()-ep.E());
0143 P3EVector pcorr(-q.X(), -q.Y(), pp.Z(), pp.E());
0144
0145 double t = (pcorr - p).M2();
0146 return TMath::Abs(t);
0147 }
0148
0149 template <typename V>
0150 Double_t calcT_eBABE(const V& p, const V& q, const V& pp){
0151 P3EVector pcorr(-q.X(), -q.Y(), pp.Z(), pp.E());
0152
0153 double t = (pcorr - p).M2();
0154 return TMath::Abs(t);
0155 }
0156
0157
0158
0159
0160
0161
0162
0163 template<typename V>
0164 Double_t calcT_XBABE(const V& p, const V& pp, const V& X){
0165 P3EVector pcorr(-X.X(), -X.Y(), pp.Z(), pp.E());
0166
0167 double t = (pcorr - p).M2();
0168 return TMath::Abs(t);
0169 }
0170
0171
0172
0173
0174
0175
0176
0177 template<typename V>
0178 Double_t calcT_eXBABE(const V& e, const V& p, const V& ep, const V& pp, const V& X){
0179
0180 P3EVector p4miss((e+p-ep-X).X(),(e+p-ep-X).Y(),(e+p-ep-X).Z(),(e+p-ep-X).E());
0181
0182
0183 Float_t pmiss_mag = p4miss.Vect().R();
0184 ROOT::Math::Polar3DVector pcorr_vect(pmiss_mag, pp.Theta(), pp.Phi());
0185 Float_t pcorr_mag = TMath::Sqrt(TMath::Power(pmiss_mag,2) + TMath::Power(pp.M(),2));
0186
0187 P3EVector pcorr(pcorr_vect.X(), pcorr_vect.Y(), pcorr_vect.Z(), pcorr_mag);
0188
0189 double t = (pcorr-p).M2();
0190 return TMath::Abs(t);
0191 }
0192
0193 template<typename V>
0194 Double_t calcT_eXBABE(const V& p, const V& q, const V& pp, const V& X){
0195
0196 P3EVector p4miss((p+q-X).X(),(p+q-X).Y(),(p+q-X).Z(),(p+q-X).E());
0197
0198
0199 Float_t pmiss_mag = p4miss.Vect().R();
0200 ROOT::Math::Polar3DVector pcorr_vect(pmiss_mag, pp.Theta(), pp.Phi());
0201 Float_t pcorr_mag = TMath::Sqrt(TMath::Power(pmiss_mag,2) + TMath::Power(pp.M(),2));
0202
0203 P3EVector pcorr(pcorr_vect.X(), pcorr_vect.Y(), pcorr_vect.Z(), pcorr_mag);
0204
0205 double t = (pcorr-p).M2();
0206 return TMath::Abs(t);
0207 }
0208
0209
0210
0211
0212 template <typename V>
0213 Double_t calcPMiss_3Body(const V& a, const V& b, const V& c, const V& d, const V& f){
0214 return (a+b-c-d-f).P();
0215 }
0216
0217 template <typename V>
0218 Double_t calcPtMiss_3Body(const V& a, const V& b, const V& c, const V& d, const V& f){
0219 return (a+b-c-d-f).Pt();
0220 }
0221
0222 template <typename V>
0223 Double_t calcEMiss_3Body(const V& a, const V& b, const V& c, const V& d, const V& f){
0224 return (a+b-c-d-f).E();
0225 }
0226
0227 template <typename V>
0228 Double_t calcM2Miss_3Body(const V& a, const V& b, const V& c, const V& d, const V& f){
0229 Float_t fEMiss = (a+b-c-d-f).E();
0230 Float_t fPMiss = (a+b-c-d-f).P();
0231
0232 Float_t fM2Miss = TMath::Power(fEMiss,2) - TMath::Power(fPMiss,2);
0233 return fM2Miss;
0234 }
0235
0236
0237
0238 template <typename V>
0239 Double_t calcPMiss_2Body(const V& a, const V& b, const V& c, const V& d){
0240 return (a+b-c-d).P();
0241 }
0242
0243 template <typename V>
0244 Double_t calcPtMiss_2Body(const V& a, const V& b, const V& c, const V& d){
0245 return (a+b-c-d).Pt();
0246 }
0247
0248 template <typename V>
0249 Double_t calcEMiss_2Body(const V& a, const V& b, const V& c, const V& d){
0250 return (a+b-c-d).E();
0251 }
0252
0253 template <typename V>
0254 Double_t calcM2Miss_2Body(const V& a, const V& b, const V& c, const V& d){
0255 Float_t fEMiss = (a+b-c-d).E();
0256 Float_t fPMiss = (a+b-c-d).P();
0257
0258 Float_t fM2Miss = TMath::Power(fEMiss,2) - TMath::Power(fPMiss,2);
0259 return fM2Miss;
0260 }