NCFS-Pack
A generic (astro)particle physics analysis framework
 
Loading...
Searching...
No Matches
NcBoost.cxx
Go to the documentation of this file.
1
31
33
79
80#include "NcBoost.h"
81#include "Riostream.h"
82
83ClassImp(NcBoost); // Class implementation to enable ROOT I/O
84
86NcBoost::NcBoost() : TObject()
87{
95
96 Double_t a[3]={0,0,0};
97 fBeta.SetVector(a,"sph");
98 fGamma=1;
99 fDgamma=0;
100 fDresult=0;
101}
102
111
112NcBoost::NcBoost(const NcBoost& b) : TObject(b)
113{
119
120 fBeta=b.fBeta;
121 fGamma=b.fGamma;
124}
125
127{
135
136 fBeta=b;
137 Double_t beta2=fBeta.Dot(fBeta);
138 Double_t dbeta2=fBeta.GetResultError();
139
140 if (beta2 > 1.)
141 {
142 cout << " *NcBoost::SetBeta* beta > 1." << endl;
143 }
144 fGamma=0;
145 fDgamma=0;
146 Double_t temp=1.-beta2;
147 if (temp > 0.)
148 {
149 fGamma=sqrt(1./temp);
150 fDgamma=fabs(dbeta2/(2.*pow(temp,1.5)));
151 }
152}
153
155{
163
164 Double_t E=p.GetScalar();
165 Double_t dE=p.GetResultError();
166 if (E <= 0.)
167 {
168 cout << " *NcBoost::Set4Momentum* Unphysical situation." << endl;
169 p.Data();
170 }
171 else
172 {
173 Nc3Vector b=p.Get3Vector();
174 Double_t vb[3],eb[3];
175 b.GetVector(vb,"car");
176 b.GetErrors(eb,"car");
177 b=b/E;
178 for (Int_t i=0; i<3; i++)
179 {
180 eb[i]=sqrt(pow(eb[i]/E,2)+pow(vb[i]*dE/(E*E),2));
181 }
182 b.SetErrors(eb,"car");
183 SetBeta(b);
184 }
185}
186
188{
194
195 return fBeta;
196}
197
199{
206
207 Double_t norm=fBeta.GetNorm();
208 fDresult=fBeta.GetResultError();
209 return norm;
210}
211
213{
220
222 return fGamma;
223}
224
226{
233
234 return fDresult;
235}
236
237void NcBoost::Data(TString f)
238{
244
245 Double_t beta=fBeta.GetNorm();
246 Double_t dbeta=fBeta.GetResultError();
247 cout << " *NcBoost::Data* beta : " << beta << " error : " << dbeta
248 << " gamma : " << fGamma << " error : " << fDgamma << endl;
249 cout << " Beta";
250 fBeta.Data(f);
251}
252
254{
263
264 Double_t beta=fBeta.GetNorm();
265 Double_t dbeta=fBeta.GetResultError();
266
267 Double_t beta2=pow(beta,2);
268
269 if (beta > 1.e-10)
270 {
271 Double_t E=v.GetScalar();
272 Double_t dE=v.GetResultError();
273
274 Nc3Vector p=v.Get3Vector();
275
276 Double_t pdotbeta=p.Dot(fBeta);
277 Double_t dpdotbeta=p.GetResultError();
278
279 // Determine the new vector components
280 Double_t Eprim=fGamma*(E-pdotbeta);
281
282 Double_t z=((fGamma-1.)*pdotbeta/beta2)-fGamma*E;
283 Nc3Vector add=fBeta*z;
284
285 // Determine errors on the new vector components
286 Double_t dEprim=sqrt(pow((E-pdotbeta)*fDgamma,2)+pow(fGamma*dE,2)
287 +pow(fGamma*dpdotbeta,2));
288 Double_t dz=sqrt( pow(((fGamma-1.)/beta2)*dpdotbeta,2) + pow(fGamma*dE,2)
289 +pow((
290 ((2./beta)-(4.*pow(beta,3)-6.*pow(beta,5))/(2.*pow((pow(beta,4)-pow(beta,6)),1.5)))*pdotbeta
291 +beta*E/pow(fGamma,3))*dbeta,2) );
292
293 Double_t vb[3],eb[3];
294 fBeta.GetVector(vb,"car");
295 fBeta.GetErrors(eb,"car");
296 for (Int_t i=0; i<3; i++)
297 {
298 eb[i]=sqrt(pow(z*eb[i],2)+pow(vb[i]*dz,2));
299 }
300 add.SetErrors(eb,"car");
301
302 // Calculate the new 3-vector
303 Nc3Vector pprim=p+add;
304
305 // Set the components and errors of the new 4-vector
306 Nc4Vector w;
307 w.Load(v);
308 if (v.GetScalarFlag())
309 {
310 w.SetVector(Eprim,pprim);
311 w.SetScalarError(dEprim);
312 }
313 else
314 {
315 w.Set3Vector(pprim);
316 }
317 return w;
318 }
319 else
320 {
321 return v;
322 }
323}
324
326{
335
336 Double_t beta=fBeta.GetNorm();
337 Double_t dbeta=fBeta.GetResultError();
338
339 Double_t beta2=pow(beta,2);
340
341 if (beta > 1.e-10)
342 {
343 Double_t Eprim=vprim.GetScalar();
344 Double_t dEprim=vprim.GetResultError();
345
346 Nc3Vector pprim=vprim.Get3Vector();
347
348 Double_t pprimdotbeta=pprim.Dot(fBeta);
349 Double_t dpprimdotbeta=pprim.GetResultError();
350
351 // Determine the new vector components
352 Double_t E=fGamma*(Eprim+pprimdotbeta);
353
354 Double_t z=((fGamma-1.)*pprimdotbeta/beta2)+fGamma*Eprim;
355 Nc3Vector add=fBeta*z;
356
357 // Determine errors on the prime-vector components
358 Double_t dE=sqrt(pow((Eprim+pprimdotbeta)*fDgamma,2)+pow(fGamma*dEprim,2)
359 +pow(fGamma*dpprimdotbeta,2));
360 Double_t dz=sqrt( pow(((fGamma-1.)/beta2)*dpprimdotbeta,2) + pow(fGamma*dEprim,2)
361 +pow((
362 ((2./beta)-(4.*pow(beta,3)-6.*pow(beta,5))/(2.*pow((pow(beta,4)-pow(beta,6)),1.5)))*pprimdotbeta
363 -beta*Eprim/pow(fGamma,3))*dbeta,2) );
364
365 Double_t vb[3],eb[3];
366 fBeta.GetVector(vb,"car");
367 fBeta.GetErrors(eb,"car");
368 for (Int_t i=0; i<3; i++)
369 {
370 eb[i]=sqrt(pow(z*eb[i],2)+pow(vb[i]*dz,2));
371 }
372 add.SetErrors(eb,"car");
373
374 // Calculate the new 3-vector
375 Nc3Vector p=pprim+add;
376
377 // Set the components and errors of the new 4-vector
378 Nc4Vector w;
379 w.Load(vprim);
380 if (vprim.GetScalarFlag())
381 {
382 w.SetVector(E,p);
383 w.SetScalarError(dE);
384 }
385 else
386 {
387 w.Set3Vector(p);
388 }
389 return w;
390 }
391 else
392 {
393 return vprim;
394 }
395}
396
ClassImp(NcBoost)
Handling of 3-vectors in various reference frames.
Definition Nc3Vector.h:15
void GetErrors(Double_t *e, TString f, TString u="rad") const
void SetErrors(Double_t *e, TString f, TString u="rad")
Double_t Dot(Nc3Vector &q)
Double_t GetResultError() const
void GetVector(Double_t *v, TString f, TString u="rad") const
Handling of Lorentz 4-vectors in various reference frames.
Definition Nc4Vector.h:14
virtual void Load(Nc4Vector &q)
void SetVector(Double_t v0, Nc3Vector &v)
Double_t GetResultError() const
Int_t GetScalarFlag() const
virtual void Data(TString f="car", TString u="rad")
void Set3Vector(Nc3Vector &v)
Double_t GetScalar()
Nc3Vector Get3Vector() const
void SetScalarError(Double_t dv0)
Perform various Lorentz transformations.
Definition NcBoost.h:17
void Data(TString f="car")
Definition NcBoost.cxx:237
Double_t GetGamma()
Definition NcBoost.cxx:212
Double_t GetBeta()
Definition NcBoost.cxx:198
Nc3Vector fBeta
Definition NcBoost.h:33
void SetBeta(Nc3Vector &b)
Definition NcBoost.cxx:126
Double32_t fGamma
Definition NcBoost.h:34
Nc4Vector Inverse(Nc4Vector &v)
Definition NcBoost.cxx:325
NcBoost()
Definition NcBoost.cxx:86
Double32_t fDresult
! Error on scalar result
Definition NcBoost.h:36
Double_t GetResultError() const
Definition NcBoost.cxx:225
Nc4Vector Boost(Nc4Vector &v)
Definition NcBoost.cxx:253
virtual ~NcBoost()
Definition NcBoost.cxx:103
void Set4Momentum(Nc4Vector &p)
Definition NcBoost.cxx:154
Double32_t fDgamma
Definition NcBoost.h:35
Nc3Vector GetBetaVector() const
Definition NcBoost.cxx:187