11 #include "GeoModelKernel/throwExcept.h"
25 return StatusCode::SUCCESS;
30 if (writeHandle.isValid()) {
31 ATH_MSG_DEBUG(
"CondHandle " << writeHandle.fullKey() <<
" is already valid."
32 <<
". In theory this should not be called, but may happen"
33 <<
" if multiple concurrent events are being processed out of order.");
34 return StatusCode::SUCCESS;
37 std::unique_ptr<MdtAsBuiltContainer> writeCdo{std::make_unique<MdtAsBuiltContainer>()};
42 if (!inStream.good()) {
44 return StatusCode::FAILURE;
52 if (!readHandle.isValid()){
54 return StatusCode::FAILURE;
56 writeHandle.addDependency(readHandle);
60 const std::string
data{*(
static_cast<const std::string*
>((atr[
"data"]).addressOfData()))};
64 lines = j[
"corrections"];
71 ATH_CHECK(writeHandle.record(std::move(writeCdo)));
72 ATH_MSG_INFO(
"Saved successfully Mdt as built "<<
m_writeKey.fullKey()<<
" with validity range "<<writeHandle.getRange());
73 return StatusCode::SUCCESS;
80 for (
auto& corr :
lines.items()) {
83 const std::string stationType =
line[
"typ"];
90 return StatusCode::FAILURE;
95 xPar.setIdentifier(
id);
98 for (
const multilayer_t ml : {multilayer_t::ML1, multilayer_t::ML2}){
99 for (
const tubeSide_t
side : {tubeSide_t::POS, tubeSide_t::NEG}){
100 std::stringstream
prefix{};
101 prefix<<
"Ml"<<(
static_cast<unsigned>(ml) + 1);
102 prefix<<(
side == tubeSide_t::POS?
"Pos" :
"Neg")<<
"TubeSide";
103 auto getValue = [&
prefix,&
line,
this](
const std::string&
val) ->
float{
104 const std::string itrName =
prefix.str()+
val;
105 if (
line.find(itrName) ==
line.end()) {
111 xPar.setAlignmentParameters(ml,
side, getValue(
"y0"), getValue(
"z0"),
112 getValue(
"alpha"), getValue(
"ypitch"),
113 getValue(
"zpitch"),getValue(
"stagg"));
116 auto itr_pair = asBuilt.insert(xPar);
117 if (!itr_pair.second){
118 ATH_MSG_FATAL(
"Failed to insert "<<xPar<<
" because the place in memory is already occupied by "
119 <<(*itr_pair.first));
120 return StatusCode::FAILURE;
124 return StatusCode::SUCCESS;
131 constexpr std::string_view
delimiter{
"\n"};
133 unsigned int nLines{0};
134 for (
const std::string& blobline :
lines) {
136 constexpr std::string_view
delimiter{
":"};
141 return StatusCode::FAILURE;
145 if (
type[0] ==
'#') {
150 if (
type.compare(0, 4,
"Corr") == 0) {
153 jsonDump.push_back(newLine);
157 return StatusCode::SUCCESS;
163 std::istringstream in(asciiData);
166 if (!((in >> tok) && (tok ==
"Corr:"))) {
167 ATH_MSG_FATAL(__FILE__<<
":"<<__LINE__<<
" Failed to parse line "<<asciiData);
168 return StatusCode::FAILURE;
172 if (!(in >> typ >> jff >> jzz)) {
173 ATH_MSG_FATAL(__FILE__<<
":"<<__LINE__<<
" Failed to parse line "<<asciiData);
174 return StatusCode::FAILURE;
176 newChannel[
"typ"] = typ;
177 newChannel[
"jff"] = jff;
178 newChannel[
"jzz"] = jzz;
181 std::array<int, static_cast<unsigned>(multilayer_t::NMLTYPES)> stagg{};
182 if (!(in >> stagg[
static_cast<unsigned>(multilayer_t::ML1)]
183 >> stagg[
static_cast<unsigned>(multilayer_t::ML2)])) {
184 ATH_MSG_FATAL(__FILE__<<
":"<<__LINE__<<
" Failed to parse line "<<asciiData);
185 return StatusCode::FAILURE;
187 for (
const multilayer_t ml : {multilayer_t::ML1, multilayer_t::ML2}){
188 for (
const tubeSide_t
side : {tubeSide_t::POS, tubeSide_t::NEG}){
189 std::stringstream
prefix{};
190 prefix<<
"Ml"<<(
static_cast<unsigned>(ml) + 1);
191 prefix<<(
side == tubeSide_t::POS?
"Pos" :
"Neg")<<
"TubeSide";
192 auto dumpValue = [&
prefix, &newChannel](
const std::string&
field,
const float val) {
196 float y0{0.f},
z0{0.f}, alpha{0.f}, ypitch{0.f}, zpitch{0.f};
197 if (!(in >> y0 >>
z0 >> alpha >> ypitch >> zpitch)){
198 ATH_MSG_FATAL(__FILE__<<
":"<<__LINE__<<
" Failed to parse line "<<asciiData);
199 return StatusCode::FAILURE;
203 dumpValue(
"alpha", alpha);
204 dumpValue(
"ypitch", ypitch);
205 dumpValue(
"zpitch", zpitch);
206 dumpValue(
"stagg", stagg[
static_cast<unsigned int>(ml)]);
209 return StatusCode::SUCCESS;