ATLAS Offline Software
Loading...
Searching...
No Matches
CompoundLayerMaterialCnv_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// CompoundLayerMaterialCnv_p1.cxx, (c) ATLAS Detector software
14
15
18 MsgStream &mlog )
19{
20
21 // create the transient BinUtility
22 transObj->updateBinning (new Trk::BinUtility);
23 m_gBinUtilityCnv.persToTrans(&persObj->binUtility, transObj->m_binUtility, mlog);
24
25 // the minimum values
26 transObj->m_thicknessBins.valueMin = persObj->valueMins[0];
27 transObj->m_x0Bins.valueMin = persObj->valueMins[1];
28 transObj->m_l0Bins.valueMin = persObj->valueMins[2];
29 transObj->m_aBins.valueMin = persObj->valueMins[3];
30 transObj->m_zBins.valueMin = persObj->valueMins[4];
31 transObj->m_rhoBins.valueMin = persObj->valueMins[5];
32
33 // the step values
34 transObj->m_thicknessBins.valueStep = persObj->valueSteps[0];
35 transObj->m_x0Bins.valueStep = persObj->valueSteps[1];
36 transObj->m_l0Bins.valueStep = persObj->valueSteps[2];
37 transObj->m_aBins.valueStep = persObj->valueSteps[3];
38 transObj->m_zBins.valueStep = persObj->valueSteps[4];
39 transObj->m_rhoBins.valueStep = persObj->valueSteps[5];
40
41 // the matrix values
42 transObj->m_thicknessBins.valueBinMatrix = persObj->valueMatrices[0];
43 transObj->m_x0Bins.valueBinMatrix = persObj->valueMatrices[1];
44 transObj->m_l0Bins.valueBinMatrix = persObj->valueMatrices[2];
45 transObj->m_aBins.valueBinMatrix = persObj->valueMatrices[3];
46 transObj->m_zBins.valueBinMatrix = persObj->valueMatrices[4];
47 transObj->m_rhoBins.valueBinMatrix = persObj->valueMatrices[5];
48
49 // composition matrix
50 size_t ocBins = persObj->composition.size();
51 if (ocBins){
52 size_t icBins = persObj->composition[0].size();
53 // reserve the right amount
54 transObj->m_composition.reserve(ocBins);
55 for (size_t ioc = 0; ioc < ocBins; ++ioc){
56 transObj->m_composition.emplace_back( );
57 transObj->m_composition[ioc].reserve(icBins);
58 for (size_t iic = 0; iic < icBins; ++iic){
59 const std::vector< std::pair<unsigned char, unsigned char> >& cEntry = persObj->composition[ioc][iic];
60 transObj->m_composition[ioc].emplace_back(cEntry );
61 }
62 }
63 }
64
65 transObj->resizeMaterialProperties();
66}
67
70 MsgStream &mlog )
71{
72
73 // create the persistent BinUtility
74 m_gBinUtilityCnv.transToPers(transObj->m_binUtility, &persObj->binUtility, mlog);
75
76 // the minimum values
77 persObj->valueMins.push_back(transObj->m_thicknessBins.valueMin);
78 persObj->valueMins.push_back(transObj->m_x0Bins.valueMin);
79 persObj->valueMins.push_back(transObj->m_l0Bins.valueMin);
80 persObj->valueMins.push_back(transObj->m_aBins.valueMin);
81 persObj->valueMins.push_back(transObj->m_zBins.valueMin);
82 persObj->valueMins.push_back(transObj->m_rhoBins.valueMin);
83
84 // the step values
85 persObj->valueSteps.push_back(transObj->m_thicknessBins.valueStep);
86 persObj->valueSteps.push_back(transObj->m_x0Bins.valueStep);
87 persObj->valueSteps.push_back(transObj->m_l0Bins.valueStep);
88 persObj->valueSteps.push_back(transObj->m_aBins.valueStep);
89 persObj->valueSteps.push_back(transObj->m_zBins.valueStep);
90 persObj->valueSteps.push_back(transObj->m_rhoBins.valueStep);
91
92 // the matrix values
93 persObj->valueMatrices.push_back(transObj->m_thicknessBins.valueBinMatrix);
94 persObj->valueMatrices.push_back(transObj->m_x0Bins.valueBinMatrix);
95 persObj->valueMatrices.push_back(transObj->m_l0Bins.valueBinMatrix);
96 persObj->valueMatrices.push_back(transObj->m_aBins.valueBinMatrix);
97 persObj->valueMatrices.push_back(transObj->m_zBins.valueBinMatrix);
98 persObj->valueMatrices.push_back(transObj->m_rhoBins.valueBinMatrix);
99
100 using CVector = std::vector<std::pair<unsigned char, unsigned char>>;
101 // composition matrix
102 size_t ocBins = transObj->m_composition.size();
103 if (ocBins){
104 size_t icBins = transObj->m_composition[0].size();
105 // reserve the right amoung
106 persObj->composition = std::vector< std::vector < CVector > >(ocBins, std::vector < CVector >(icBins, CVector()) );
107 for (size_t ioc = 0; ioc < ocBins; ++ioc)
108 for (size_t iic=0; iic < icBins; ++iic){
109 persObj->composition[ioc][iic] = CVector();
110 persObj->composition[ioc][iic].reserve(transObj->m_composition[ioc][iic].size());
111 for (const auto& ic : transObj->m_composition[ioc][iic]){
112 persObj->composition[ioc][iic].push_back(ic);
113 }
114
115 }
116 }
117}
void transToPers(const Trk::CompoundLayerMaterial *, Trk::CompoundLayerMaterial_p1 *, MsgStream &)
void persToTrans(const Trk::CompoundLayerMaterial_p1 *, Trk::CompoundLayerMaterial *, MsgStream &)
A generic symmetric BinUtility, for fully symmetric binning in terms of binning grid and binning type...
Definition BinUtility.h:39
std::vector< ValueMatrix > valueMatrices
std::vector< std::vector< std::vector< std::pair< unsigned char, unsigned char > > > > composition
It extends the LayerMaterialProperties base class, and has a intrinsic accuracy of about 0....
ValueStore m_rhoBins
rho parameter (averaged)
ValueStore m_thicknessBins
thickness parameter
ValueStore m_x0Bins
x0 parameter
ValueStore m_aBins
A parameters (averaged)
virtual void updateBinning(BinUtility *bu) override final
Update the BinUtility if necessary - passing ownership of the utility class.
ValueStore m_zBins
Z parameter (averaged)
std::vector< std::vector< MaterialComposition > > m_composition
composition matrix
BinUtility * m_binUtility
the helper for the bin finding
ValueStore m_l0Bins
l0 parameter