ATTPCROOT  0.3.0-alpha
A ROOT-based framework for analyzing data from active target detectors
AtKinematics.h
Go to the documentation of this file.
1 /*********************************************************************
2  * AtTools Class for kinematics calculations *
3  * Author: Y. Ayyad yassid.ayyad@usc.es *
4  * Log: 03/28/2022 *
5  * *
6  *********************************************************************/
7 
8 #ifndef ATKINEMATICS_H
9 #define ATKINEMATICS_H
10 #include <Math/Vector4D.h>
11 #include <Math/Vector4Dfwd.h> // for PxPyPzEVector
12 #include <Rtypes.h> // for Double_t, THashConsistencyHolder, Int_t, ClassDef
13 #include <TMatrixDfwd.h> // for TMatrixD
14 #include <TMatrixT.h> // for TMatrixT
15 #include <TObject.h> // for TObject
16 
17 #include <cmath> // for sqrt
18 #include <memory> // for unique_ptr
19 #include <tuple> // for tuple
20 #include <vector> // for vector
21 class TBuffer;
22 class TClass;
23 class TMemberInspector;
24 
25 namespace AtTools {
26 
27 class AtKinematics : public TObject {
28 
29 private:
30  Int_t fVerbosity;
31 
32  Int_t fNumParticles{3}; //
33  Int_t fNumIterations{100};
34  Double_t fWeigth{0.05};
35  Double_t fTargetMass{2.01410177812};
36 
37  std::vector<std::unique_ptr<TMatrixD>> fAlphaP;
38  void ResetMatrices();
39  void PrintMatrices();
40  TMatrixD CalculateCovariance();
41  TMatrixD CalculateD(TMatrixD *alpha);
42  TMatrixD Calculated(TMatrixD *alpha);
43 
44  ClassDef(AtKinematics, 1);
45 
46 public:
47  AtKinematics();
48  ~AtKinematics() = default;
49 
50  void SetVerbosity(Int_t verbosity) { fVerbosity = verbosity; }
51 
52  std::tuple<Double_t, Double_t>
53  GetMomFromBrho(Double_t A, Double_t Z,
54  Double_t brho);
55  Double_t
56  TwoBodyEx(Double_t m1, Double_t m2, Double_t m3, Double_t m4, Double_t K_proj, Double_t thetalab, Double_t K_eject);
57  Double_t omega(Double_t x, Double_t y, Double_t z);
58 
59  std::vector<double> KinematicalFit(std::vector<double> &parameters);
60  inline void SetKFIterations(Int_t iter) { fNumIterations = iter; }
61  inline void SetKFWeighting(Double_t weight) { fWeigth = weight; }
62  inline void SetKFTargetMass(Double_t mass) { fTargetMass = mass; }
63 };
64 
65 namespace Kinematics {
66 
67 double GetGamma(double KE, double m1, double m2);
68 double GetGamma(double beta);
69 double GetVelocity(double gamma);
70 double GetBeta(double gamma);
71 double GetBeta(double p, int A);
72 double GetBeta(double p, double mass);
73 double GetRelMom(double gamma, double mass);
74 double AtoE(double Amu);
75 double EtoA(double mass);
76 
77 template <class Vector>
79 {
80  return {mom.X(), mom.Y(), mom.Z(), std::sqrt(mom.Mag2() + m * m)};
81 }
82 
83 } // namespace Kinematics
84 } // namespace AtTools
85 
86 #endif
AtTools::Kinematics::EtoA
double EtoA(double mass)
Definition: AtKinematics.cxx:304
AtTools::Kinematics::AtoE
double AtoE(double Amu)
Definition: AtKinematics.cxx:300
AtTools::AtKinematics
Definition: AtKinematics.h:27
AtTools::AtKinematics::AtKinematics
AtKinematics()
Definition: AtKinematics.cxx:16
AtTools::Kinematics::GetGamma
double GetGamma(double KE, double m1, double m2)
Definition: AtKinematics.cxx:249
AtTools::AtKinematics::SetKFTargetMass
void SetKFTargetMass(Double_t mass)
Definition: AtKinematics.h:62
AtTools::AtKinematics::SetKFWeighting
void SetKFWeighting(Double_t weight)
Definition: AtKinematics.h:61
AtTools::Kinematics::GetRelMom
double GetRelMom(double gamma, double mass)
Definition: AtKinematics.cxx:292
AtTools::AtKinematics::KinematicalFit
std::vector< double > KinematicalFit(std::vector< double > &parameters)
Definition: AtKinematics.cxx:80
AtTools::AtKinematics::omega
Double_t omega(Double_t x, Double_t y, Double_t z)
Definition: AtKinematics.cxx:75
AtTools::AtKinematics::SetKFIterations
void SetKFIterations(Int_t iter)
Definition: AtKinematics.h:60
AtTools::Kinematics::Get4Vector
ROOT::Math::PxPyPzEVector Get4Vector(Vector mom, double m)
Definition: AtKinematics.h:78
PxPyPzEVector
ROOT::Math::PxPyPzEVector PxPyPzEVector
Definition: AtMCFission.cxx:48
y
const double * y
Definition: lmcurve.cxx:20
AtTools
Definition: AtSimpleSimulation.h:19
AtTools::AtKinematics::SetVerbosity
void SetVerbosity(Int_t verbosity)
Definition: AtKinematics.h:50
AtTools::AtKinematics::GetMomFromBrho
std::tuple< Double_t, Double_t > GetMomFromBrho(Double_t A, Double_t Z, Double_t brho)
Returns momentum (in GeV) from Brho assuming M (amu) and Z;.
Definition: AtKinematics.cxx:31
AtTools::Kinematics::GetBeta
double GetBeta(double gamma)
Definition: AtKinematics.cxx:267
AtTools::Kinematics::GetVelocity
double GetVelocity(double gamma)
Definition: AtKinematics.cxx:259
AtTools::AtKinematics::TwoBodyEx
Double_t TwoBodyEx(Double_t m1, Double_t m2, Double_t m3, Double_t m4, Double_t K_proj, Double_t thetalab, Double_t K_eject)
Definition: AtKinematics.cxx:42
AtTools::AtKinematics::~AtKinematics
~AtKinematics()=default