ATLAS Offline Software
Loading...
Searching...
No Matches
BinnedLayerMaterialCnv_p1.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
3*/
4
6// BinnedLayerMaterialCnv_p1.cxx, (c) ATLAS Detector software
8
14
17 MsgStream &mlog )
18{
19
20 // create the transient BinUtility
21 auto binUtility = std::make_unique<Trk::BinUtility>();
22 m_gBinUtilityCnv.persToTrans(&persObj->binUtility, binUtility.get(), mlog);
23 transObj->updateBinning (binUtility.release());
24
25 // assign the split factor
26 transObj->m_splitFactor = persObj->splitFactor;
27
28 // create the transient material properties
29 // pointer to converter (will be auto-retrieved)
30 ITPConverterFor<Trk::MaterialProperties> *materialCnv = nullptr;
31 size_t matrixOuterDim = transObj->m_binUtility->max(1)+1;
32 size_t matrixInnerDim = transObj->m_binUtility->max(0)+1;
33 transObj->m_fullMaterial = std::vector< std::vector<const Trk::MaterialProperties*> >(matrixOuterDim, std::vector< const Trk::MaterialProperties* >(matrixInnerDim, nullptr) );
34 for ( size_t iod = 0; iod < matrixOuterDim; ++iod )
35 for ( size_t iid = 0; iid < matrixInnerDim; ++iid) {
36 // create the material properties
37 const Trk::MaterialProperties* mprop = createTransFromPStore( &materialCnv, persObj->materialMatrix[iid+matrixInnerDim*iod], mlog );
38 // check if the entry carries material or not
39 const bool carriesMaterial{mprop and not std::isnan(mprop->thicknessInX0()) and mprop->thicknessInX0()>10e-5 and mprop->averageZ() > 1};
40 if (carriesMaterial)
41 (transObj->m_fullMaterial)[iod][iid] = mprop;
42 else {
43 (transObj->m_fullMaterial)[iod][iid] = nullptr;
44 delete mprop; // clear this instance and set to 0
45 mprop=nullptr;
46 }
47 }
48}
49
52 MsgStream &mlog )
53{
54
55 // create the persistent BinUtility
56 m_gBinUtilityCnv.transToPers(transObj->binUtility(), &persObj->binUtility, mlog);
57
58 // assign the split factor
59 persObj->splitFactor = transObj->m_splitFactor;
60
61 // create the persistent material properties
62 // pointer to converter (will be auto-retrieved)
63 ITPConverterFor<Trk::MaterialProperties> *materialCnv = nullptr;
64 // prepare the matrix
65 size_t matrixOuterDim =transObj->m_binUtility->max(1)+1;
66 size_t matrixInnerDim =transObj->m_binUtility->max(0)+1;
67 persObj->materialMatrix = std::vector<TPObjRef> ( matrixInnerDim*matrixOuterDim, TPObjRef() ) ;
68 for ( size_t iod = 0; iod < matrixOuterDim; ++iod )
69 for ( size_t iid = 0; iid < matrixInnerDim; ++iid)
70 (persObj->materialMatrix)[iod*matrixInnerDim+iid] = toPersistent( &materialCnv, transObj->m_fullMaterial[iod][iid], mlog );
71}
72
void transToPers(const Trk::BinnedLayerMaterial *, Trk::BinnedLayerMaterial_p1 *, MsgStream &)
void persToTrans(const Trk::BinnedLayerMaterial_p1 *, Trk::BinnedLayerMaterial *, MsgStream &)
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
This class is an object reference used in Athena persistent data model.
Definition TPObjRef.h:20
size_t max(size_t ba=0) const
First bin maximal value.
Definition BinUtility.h:212
std::vector< TPObjRef > materialMatrix
It extends the LayerMaterialProperties base class.
virtual const BinUtility * binUtility() const override
Return the BinUtility.
MaterialPropertiesMatrix m_fullMaterial
The five different MaterialProperties.
virtual void updateBinning(BinUtility *bu) override
Update the BinUtility if necessary - passing ownership of the utility class.
BinUtility * m_binUtility
the helper for the bin finding
double m_splitFactor
the split factor in favour of oppositePre
Material with information about thickness of material.
float thicknessInX0() const
Return the radiationlength fraction.
float averageZ() const
Returns the average Z of the material.