ATLAS Offline Software
Loading...
Searching...
No Matches
TrackStateOnSurfaceCnv_p3.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3*/
4
5//-----------------------------------------------------------------------------
6//
7// file: TrackStateOnSurfaceCnv_p3.cxx
8//
9//-----------------------------------------------------------------------------
10
15
18
20persToTrans( const Trk::TrackStateOnSurface_p3 *persObj, Trk::TrackStateOnSurface *transObj, MsgStream &log )
21{
22 ITPConverterFor<Trk::MeasurementBase> *measureCnv = nullptr;
23 Trk::MeasurementBase* meas = createTransFromPStore( &measureCnv, persObj->m_measurementOnTrack, log );
24
26 if (!m_parametersCnv) m_parametersCnv = dynamic_cast<TrackParametersCnv_p2*>(dummy); // FIXME - only in init?
27 Trk::TrackParameters* trackParameters = dynamic_cast<Trk::TrackParameters*>(createTransFromPStore( &m_parametersCnv, persObj->m_trackParameters, log ));
28
29 std::unique_ptr<const Trk::FitQuality> fitQ(createTransFromPStore( &m_fitQCnv, persObj->m_fitQualityOnSurface, log));
30 auto fitQos = fitQ ? Trk::FitQualityOnSurface(*fitQ) : Trk::FitQualityOnSurface{};
31
33 Trk::MaterialEffectsBase* materialEffects = createTransFromPStore( &matBaseCnv, persObj->m_materialEffects, log );
34
35 std::bitset<Trk::TrackStateOnSurface::NumberOfTrackStateOnSurfaceTypes> types;
36 std::bitset<Trk::TrackStateOnSurface::NumberOfPersistencyHints> hints;
38 // There were some tracks saved that violate the isSane test in
39 // TrackStateOnSurface. If we were to pass meas or materialEffects
40 // to this ctor then we would trip that assertion. However,
41 // we want to preserve the previous behavior of the TP converters,
42 // which did allow reading such tracks. So defer setting these pointers
43 // until after the checks,
44 *transObj = Trk::TrackStateOnSurface(
45 fitQos,
46 nullptr,
47 std::unique_ptr<Trk::TrackParameters>(trackParameters),
48 nullptr,
49 types);
50 transObj->m_measurementOnTrack.reset(meas);
51 transObj->m_materialEffectsOnTrack.reset(materialEffects);
52 //Hints are atomic. Set once here if TSOS was slimmed
53 //aka not 0. If 0 we want to allow setting them later on
54 uint8_t hintsUInt = hints.to_ulong();
55 if(hintsUInt!=0){
56 transObj->setHints(hintsUInt);
57 }
58}
59
60
62transToPers( const Trk::TrackStateOnSurface *transObj, Trk::TrackStateOnSurface_p3 *persObj, MsgStream &log )
63{
64 //--- Parameters
66 if (!m_parametersCnv) {
67 m_parametersCnv = dynamic_cast<TrackParametersCnv_p2*>(dummy);
68 }
69
70 std::bitset<Trk::TrackStateOnSurface::NumberOfPersistencyHints> persHints = transObj->hints();
71 bool persistify_all = !(persHints.test(Trk::TrackStateOnSurface::PartialPersistification));
72
74 ( (persistify_all || persHints.test(Trk::TrackStateOnSurface::PersistifyTrackParameters) )
75 ? transObj->trackParameters()
76 : nullptr),
77 log );
78
79 auto fitQos =
80 persistify_all
81 ? std::make_unique<Trk::FitQuality>(transObj->fitQualityOnSurface())
82 : nullptr;
83
84 persObj->m_fitQualityOnSurface = toPersistent(&m_fitQCnv, fitQos.get(), log);
85
86 ITPConverterFor<Trk::MeasurementBase> *measureCnv = nullptr;
87 persObj->m_measurementOnTrack = toPersistent( &measureCnv,
88 ((persistify_all || persHints.test(Trk::TrackStateOnSurface::PersistifyMeasurement) )
89 ? transObj->measurementOnTrack()
90 : nullptr),
91 log );
92
94 persObj->m_materialEffects = toPersistent( &matBaseCnv,
95 ((persistify_all || persHints.test(Trk::TrackStateOnSurface::PersistifySlimCaloDeposit))
96 ? transObj->materialEffectsOnTrack()
97 : nullptr), log );
98 if (persistify_all) {
99 // If we persistiy all we copy the input as is
100 persObj->m_typeFlags =
101 Trk::TrackStateOnSurface::joinBitsets(transObj->types(), persHints);
102 } else {
103 std::bitset<Trk::TrackStateOnSurface::NumberOfTrackStateOnSurfaceTypes>
104 typePattern;
105 if ((persistify_all ||
108 typePattern.set(Trk::TrackStateOnSurface::Perigee);
109 }
110 if (persistify_all ||
114 }
116 typePattern.set(Trk::TrackStateOnSurface::Outlier);
117 }
118 }
119 //also copy over the persHints here
120 persObj->m_typeFlags =
121 Trk::TrackStateOnSurface::joinBitsets(typePattern, persHints);
122 }
123}
124
125void
127 const Trk::TrackStateOnSurface_p3* persObj,
129 MsgStream& log)
130{
131 ITPConverter* dummy =
135 }
136 m_trackStateOnSurfaceCnv->persToTrans(persObj, transObj, log);
137}
138void
140 const Trk::MultiComponentStateOnSurface* transObj,
142 MsgStream& log)
143{
144 ITPConverter* dummy =
148 }
149 m_trackStateOnSurfaceCnv->transToPers(transObj, persObj, log);
150}
151
static const std::vector< std::string > types
Common base class for all TP converters, specialized for a given transient type.
Definition TPConverter.h:37
CNV::Trans_t * createTransFromPStore(CNV **cnv, const TPObjRef &ref, MsgStream &log) const
virtual TopLevelTPCnvBase * topConverter()
TPObjRef toPersistent(CNV **cnv, const typename CNV::TransBase_t *transObj, MsgStream &log) const
Base interface class for all TP converters - typeless.
virtual void persToTrans(const Trk::TrackStateOnSurface_p3 *persObj, Trk::MultiComponentStateOnSurface *transObj, MsgStream &log)
TrackStateOnSurfaceCnv_p3 * m_trackStateOnSurfaceCnv
virtual void transToPers(const Trk::MultiComponentStateOnSurface *transObj, Trk::TrackStateOnSurface_p3 *persObj, MsgStream &log)
ITPConverter * converterForType(const std::type_info &info) const
Find and return a TP converter for a given C++ type info.
New convertor which handles all track parameters in one go - i.e.
virtual void transToPers(const Trk::TrackStateOnSurface *transObj, Trk::TrackStateOnSurface_p3 *persObj, MsgStream &log)
TrackParametersCnv_p2 * m_parametersCnv
virtual void persToTrans(const Trk::TrackStateOnSurface_p3 *persObj, Trk::TrackStateOnSurface *transObj, MsgStream &log)
base class to integrate material effects on Trk::Track in a flexible way.
This class is the pure abstract base class for all fittable tracking measurements.
represents the track state (measurement, material, fit parameters and quality) at a surface.
const std::bitset< NumberOfTrackStateOnSurfaceTypes > types() const
returns a bitset with the types of this bitset.
const MeasurementBase * measurementOnTrack() const
returns MeasurementBase const overload
std::unique_ptr< MeasurementBase > m_measurementOnTrack
std::unique_ptr< MaterialEffectsBase > m_materialEffectsOnTrack
const TrackParameters * trackParameters() const
return ptr to trackparameters const overload
const std::bitset< NumberOfPersistencyHints > hints() const
Use this method to get the persistification hints.
void setHints(const uint8_t hints) const
Use this method to set persistification hints.
static unsigned int long joinBitsets(const std::bitset< NumberOfTrackStateOnSurfaceTypes > &types, const std::bitset< NumberOfPersistencyHints > &hints)
const FitQualityOnSurface & fitQualityOnSurface() const
return FitQuality On Surface const overload
bool type(const TrackStateOnSurfaceType type) const
Use this method to find out if the TSoS is of a certain type: i.e.
@ PersistifySlimCaloDeposit
Mark track parameters for persisitification.
@ PersistifyMeasurement
Mark the measuremenet for persistification.
@ PersistifyTrackParameters
Mark track parameters for persisitification.
static void splitToBitsets(const unsigned int long input, std::bitset< NumberOfTrackStateOnSurfaceTypes > &types, std::bitset< NumberOfPersistencyHints > &hints)
@ Measurement
This is a measurement, and will at least contain a Trk::MeasurementBase.
@ Perigee
This represents a perigee, and so will contain a Perigee object only.
@ Outlier
This TSoS contains an outlier, that is, it contains a MeasurementBase/RIO_OnTrack which was not used ...
const MaterialEffectsBase * materialEffectsOnTrack() const
return material effects const overload
ParametersBase< TrackParametersDim, Charged > TrackParameters