ATLAS Offline Software
Loading...
Searching...
No Matches
MaterialStepCnv_p1.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3*/
4
6// MaterialStepCnv_p1.cxx, (c) ATLAS Detector software
8
9#include <cmath>
10
11
12
16
18 Trk::MaterialStep *transObj,
19 MsgStream&)
20{
21 transObj->m_steplength = persObj->materialData[0];
22 transObj->m_hitX = persObj->materialData[1];
23 transObj->m_hitY = persObj->materialData[2];
24 transObj->m_hitZ = persObj->materialData[3];
25 transObj->m_hitR = std::sqrt(transObj->m_hitX*transObj->m_hitX+transObj->m_hitY*transObj->m_hitY);
26 transObj->m_material.X0 = persObj->materialData[4];
27 transObj->m_material.L0 = persObj->materialData[5];
28 transObj->m_material.A = persObj->materialData[6];
29 transObj->m_material.Z = persObj->materialData[7];
30 transObj->m_material.rho = persObj->materialData[8];
31
32 // recreate the composition vector if possible
33 if ( !persObj->elements.empty() && !persObj->fractions.empty() ) {
34 transObj->m_material.composition = new Trk::MaterialComposition(persObj->elements, persObj->fractions);
35 }
36
37}
38
40 Trk::MaterialStep_p1 *persObj,
41 MsgStream& )
42{
43 persObj->materialData[0] = transObj->m_steplength ;
44 persObj->materialData[1] = transObj->m_hitX ;
45 persObj->materialData[2] = transObj->m_hitY ;
46 persObj->materialData[3] = transObj->m_hitZ ;
47 persObj->materialData[4] = transObj->m_material.X0 ;
48 persObj->materialData[5] = transObj->m_material.L0 ;
49 persObj->materialData[6] = transObj->m_material.A ;
50 persObj->materialData[7] = transObj->m_material.Z ;
51 persObj->materialData[8] = transObj->m_material.rho;
52
53 // write the composition vector if present
54 // disentangle the ElementFraction for columnwise write support (compression optimised)
55 if ( transObj->m_material.composition ){
56 persObj->elements.reserve(transObj->m_material.composition->size());
57 persObj->fractions.reserve(transObj->m_material.composition->size());
58 for (auto& iel: (*transObj->m_material.composition)){
59 persObj->elements.push_back(iel.first);
60 persObj->fractions.push_back(iel.second);
61 }
62 }
63}
virtual void transToPers(const Trk::MaterialStep *transObj, Trk::MaterialStep_p1 *persObj, MsgStream &log)
virtual void persToTrans(const Trk::MaterialStep_p1 *persObj, Trk::MaterialStep *transObj, MsgStream &log)
the persistent object is simply a std::vector<float> where
std::vector< unsigned char > elements
std::vector< float > materialData
std::vector< unsigned char > fractions
is needed for the recording of MaterialProperties from Geant4 and read them in with the mapping algor...
MaterialComposition * composition
Definition Material.h:127