ATLAS Offline Software
Loading...
Searching...
No Matches
TrackParticleCnv_p2.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
3*/
4
9#include <cmath>
10
11void TrackParticleCnv_p2::persToTrans(const Rec::TrackParticle_p2 * persObj, Rec::TrackParticle * transObj, MsgStream &log)
12{
14 m_elementLinkTrackCollectionConverter.persToTrans(&persObj->m_originalTrack,&trackLink,log);
15
17 static_cast<Trk::TrackParticleOrigin> (persObj->bitsAndPieces[0]);
18
19 ElementLink<VxContainer> vxCandidate;
20 m_elementLinkVxContainerConverter.persToTrans(&persObj->m_elVxCandidate,&vxCandidate,log);
21
22 auto trkSummary = std::unique_ptr<Trk::TrackSummary>
24
25 std::vector<const Trk::TrackParameters*> parameters;
26 m_vecParametersBaseCnv.persToTrans( &persObj->m_trackParameters, &parameters, log );
27
28 auto fq = std::make_unique<Trk::FitQuality>
31
32 //----- Track Info
34 Trk::ParticleHypothesis hypothesis = static_cast<Trk::ParticleHypothesis> (persObj->bitsAndPieces[2]);
35 std::bitset<Trk::TrackInfo::NumberOfTrackProperties> properties(persObj->bitsAndPieces[3]);
36
37 std::bitset<Trk::TrackInfo::NumberOfTrackRecoInfo> patternRecognition(persObj->bitsAndPieces[4]);
38 // TODO - is there a better way to do the below, avoiding loop?
39 for (unsigned int i = 32;i<Trk::TrackInfo::NumberOfTrackRecoInfo;++i) {
40 unsigned int mask = (1<<(i-32));
41 patternRecognition[i] = (persObj->bitsAndPieces[5] & mask );
42 }
43 Trk::TrackInfo info(fitter,
44 hypothesis,
45 properties,
46 patternRecognition);
47
48 //----- Kinematics
49 const Amg::Vector3D& mom = parameters.back()->momentum();
51 P4PxPyPzE fmom (mom[Trk::px],
52 mom[Trk::py],
53 mom[Trk::pz],
54 std::sqrt ((long double)mom.mag2() + (long double)mpi*mpi));
55
56
57 *transObj = Rec::TrackParticle (trackLink,
58 origin,
59 vxCandidate,
60 std::move(trkSummary),
61 std::move(parameters),
62 std::move(fq),
63 info,
64 fmom);
65
66 //----- Barcode
68 m_AthenaBarCodeCnv.persToTrans(&persObj->m_abc, &abc, log);
69 transObj->setAthenaBarCode (abc.getAthenaBarCode());
70}
71
72
73void TrackParticleCnv_p2::transToPers(const Rec::TrackParticle * transObj, Rec::TrackParticle_p2 * persObj, MsgStream &log){
74
76 abc.setAthenaBarCode (transObj->getAthenaBarCode());
77 m_AthenaBarCodeCnv.transToPers(&abc, &persObj->m_abc, log);
78
79 m_elementLinkTrackCollectionConverter.transToPers(transObj->trackElementLink(),&persObj->m_originalTrack,log);
81 m_vecParametersBaseCnv.transToPers( &(transObj->trackParameters()), &persObj->m_trackParameters, log );
82 persObj->m_trackSummary = toPersistent( &m_trackSummaryCnv, transObj->trackSummary(), log );
83
84 if (transObj->fitQuality()){
85 persObj->m_fitQuality_m_chiSquared=transObj->fitQuality()->chiSquared();
86 persObj->m_fitQuality_m_numberDoF =transObj->fitQuality()->numberDoF();
87 }
88
89 const Trk::TrackInfo& info = transObj->info();
90
91 persObj->bitsAndPieces[0] = static_cast<unsigned int>(transObj->particleOriginType());
92 persObj->bitsAndPieces[1] = static_cast<unsigned int>(info.trackFitter());
93 persObj->bitsAndPieces[2] = static_cast<unsigned int>(info.particleHypothesis());
94 persObj->bitsAndPieces[3] = info.properties().to_ulong();
95 if (info.patternRecognition().size()<32) {
96 persObj->bitsAndPieces[4] = info.patternRecognition().to_ulong();
97 } else {
98 // more than 32 bits so have to do it the hard way.
99 unsigned int i = 0;
100 unsigned int size=info.patternRecognition().size();
101 persObj->bitsAndPieces[4]=0;
102 persObj->bitsAndPieces[5]=0;
103 for (;i<32;++i) persObj->bitsAndPieces[4] |= ((info.patternRecognition()[i]) << i);
104 for (i=32;i<size;++i) persObj->bitsAndPieces[5] |= ((info.patternRecognition()[i]) << (i-32));
105 }
106}
void setAthenaBarCode(AthenaBarCode_t id)
CNV::Trans_t * createTransFromPStore(CNV **cnv, const TPObjRef &ref, MsgStream &log) const
TPObjRef toPersistent(CNV **cnv, const typename CNV::TransBase_t *transObj, MsgStream &log) const
P4PxPyPzE is a class with 4-momentum behavior, for which Px, Py, Pz and M are data members.
Definition P4PxPyPzE.h:29
std::vector< TPObjRef > m_trackParameters
AthenaBarCode_p1 m_abc
unsigned int bitsAndPieces[6]
ElementLinkInt_p3 m_elVxCandidate
ElementLinkInt_p3 m_originalTrack
AthenaBarCode_t getAthenaBarCode() const
void setAthenaBarCode(AthenaBarCode_t)
ElementLinkCnv_p3< ElementLink< VxContainer > > m_elementLinkVxContainerConverter
AthenaBarCodeCnv_p1 m_AthenaBarCodeCnv
TrackSummaryCnv_p2 * m_trackSummaryCnv
virtual void persToTrans(const Rec ::TrackParticle_p2 *persObj, Rec ::TrackParticle *transObj, MsgStream &log)
ElementLinkCnv_p3< ElementLink< TrackCollection > > m_elementLinkTrackCollectionConverter
vecParametersBaseCnv_p1 m_vecParametersBaseCnv
virtual void transToPers(const Rec ::TrackParticle *transObj, Rec ::TrackParticle_p2 *persObj, MsgStream &log)
int numberDoF() const
returns the number of degrees of freedom of the overall track or vertex fit as integer
Definition FitQuality.h:60
double chiSquared() const
returns the of the overall track fit
Definition FitQuality.h:56
Contains information about the 'fitter' of this track.
TrackFitter
enums to identify who created this track and what propertis does it have.
const ElementLink< TrackCollection > * trackElementLink() const
Return the ElementLink to the Track.
const FitQuality * fitQuality() const
accessor function for FitQuality.
const TrackSummary * trackSummary() const
accessor function for TrackSummary.
const std::vector< const TrackParameters * > & trackParameters() const
Returns the track parameters.
const ElementLink< VxContainer > & reconstructedVertexLink() const
TrackParticleOrigin particleOriginType() const
Get the particle origin type.
const TrackInfo & info() const
returns the info of the track.
Eigen::Matrix< double, 3, 1 > Vector3D
constexpr double mass[PARTICLEHYPOTHESES]
the array of masses
VertexType TrackParticleOrigin
@ pz
global momentum (cartesian)
Definition ParamDefs.h:61
@ px
Definition ParamDefs.h:59
@ py
Definition ParamDefs.h:60
ParticleHypothesis
Enumeration for Particle hypothesis respecting the interaction with material.