1 #ifndef _DKINEMATICDATA_
2 #define _DKINEMATICDATA_
6 #include <JANA/JObject.h>
13 #include "TMatrixFSym.h"
17 #ifndef SPEED_OF_LIGHT
18 #define SPEED_OF_LIGHT 29.9792458
36 void Share_FromInput_Kinematics(
const DKinematicData* locSourceData);
39 virtual void Reset(
void);
40 virtual void Release(
void);
48 double time(
void)
const{
return dKinematicInfo->dTime;}
49 shared_ptr<const TMatrixFSym>
errorMatrix(
void)
const{
return dErrorMatrix;}
52 double px(
void)
const{
return dKinematicInfo->dMomentum.Px();}
53 double py(
void)
const{
return dKinematicInfo->dMomentum.Py();}
54 double pz(
void)
const{
return dKinematicInfo->dMomentum.Pz();}
55 double x(
void)
const{
return dKinematicInfo->dPosition.X();}
56 double y(
void)
const{
return dKinematicInfo->dPosition.Y();}
57 double z(
void)
const{
return dKinematicInfo->dPosition.Z();}
60 double energy(
void)
const{
return sqrt(mass()*mass() + pmag2());}
63 double pmag(
void)
const{
return dKinematicInfo->dMomentum.Mag();}
64 double pmag2(
void)
const{
return dKinematicInfo->dMomentum.Mag2();}
69 void Set_Members(
Particle_t locPID,
const DVector3& locMomentum,
DVector3 locPosition =
DVector3(),
double locTime = 0.0,
const shared_ptr<const TMatrixFSym>& locErrorMatrix =
nullptr);
73 void setTime(
double locTime){dKinematicInfo->dTime = locTime;}
74 void setErrorMatrix(
const shared_ptr<const TMatrixFSym>& aMatrix){dErrorMatrix = aMatrix;}
75 void setErrorMatrix(
const shared_ptr<TMatrixFSym>& aMatrix){dErrorMatrix = std::const_pointer_cast<
const TMatrixFSym>(aMatrix);}
77 void toStrings(vector<pair<string,string> > &items)
const
79 AddString(items,
"PID",
"%i", (
int)PID());
81 AddString(items,
"q",
"%+1.0f", charge());
82 AddString(items,
"x(cm)",
"%3.1f",
x());
83 AddString(items,
"y(cm)",
"%3.1f",
y());
84 AddString(items,
"z(cm)",
"%3.1f", z());
85 AddString(items,
"E(GeV)",
"%2.4f", energy());
86 AddString(items,
"t(ns)",
"%2.3f", time());
87 AddString(items,
"p(GeV/c)",
"%2.3f", momentum().Mag());
88 AddString(items,
"theta(deg)",
"%2.3f", momentum().Theta()*180.0/M_PI);
89 AddString(items,
"phi(deg)",
"%2.3f", momentum().Phi()*180.0/M_PI);
116 shared_ptr<DKinematicInfo> dKinematicInfo =
nullptr;
119 shared_ptr<const TMatrixFSym> dErrorMatrix =
nullptr;
129 dKinematicInfo(dResourcePool_KinematicInfo->Get_SharedResource()), dErrorMatrix(locErrorMatrix)
131 dKinematicInfo->Set_Members(locPID, locMomentum, locPosition, locTime);
143 if(locShareKinematicsFlag)
168 dPID(locPID), dMomentum(locMomentum), dPosition(locPosition), dTime(locTime) {}
174 dKinematicInfo->Set_Members(locPID, locMomentum, locPosition, locTime);
181 dMomentum = locMomentum;
182 dPosition = locPosition;
190 ClearAssociatedObjects();
197 ClearAssociatedObjects();
void setMomentum(const DVector3 &aMomentum)
void setTime(double locTime)
shared_ptr< const TMatrixFSym > dErrorMatrix
virtual void Release(void)
double energy(void) const
virtual ~DKinematicData(void)
const DVector3 & position(void) const
void Set_Members(Particle_t locPID, const DVector3 &locMomentum, DVector3 locPosition=DVector3(), double locTime=0.0, const shared_ptr< const TMatrixFSym > &locErrorMatrix=nullptr)
DKinematicData & operator=(const DKinematicData &locSourceData)
static char * ParticleType(Particle_t p)
DLorentzVector x4(void) const
TLorentzVector DLorentzVector
static int ParticleCharge(Particle_t p)
void setErrorMatrix(const shared_ptr< const TMatrixFSym > &aMatrix)
void Share_FromInput_Kinematics(const DKinematicData *locSourceData)
double charge(void) const
void setPID(Particle_t locPID)
DLorentzVector lorentzMomentum(void) const
static double ParticleMass(Particle_t p)
const DVector3 & momentum(void) const
void toStrings(vector< pair< string, string > > &items) const
shared_ptr< const TMatrixFSym > errorMatrix(void) const
void setErrorMatrix(const shared_ptr< TMatrixFSym > &aMatrix)
static thread_local shared_ptr< DResourcePool< DKinematicInfo > > dResourcePool_KinematicInfo
shared_ptr< DKinematicInfo > dKinematicInfo
DKinematicInfo(void)=default
void setPosition(const DVector3 &aPosition)
void Set_Members(Particle_t locPID, const DVector3 &locMomentum, DVector3 locPosition=DVector3(), double locTime=0.0)
double pperp2(void) const
Particle_t PID(void) const