24 return StatusCode::SUCCESS;
29 if (writeHandle.isValid()) {
30 ATH_MSG_DEBUG(
"CondHandle " << writeHandle.fullKey() <<
" is already valid."
31 <<
". In theory this should not be called, but may happen"
32 <<
" if multiple concurrent events are being processed out of order.");
33 return StatusCode::SUCCESS;
36 std::unique_ptr<MdtAsBuiltContainer> writeCdo{std::make_unique<MdtAsBuiltContainer>()};
41 if (!inStream.good()) {
43 return StatusCode::FAILURE;
51 if (!readHandle.isValid()){
53 return StatusCode::FAILURE;
55 writeHandle.addDependency(readHandle);
59 const std::string
data{*(
static_cast<const std::string*
>((atr[
"data"]).addressOfData()))};
63 lines = j[
"corrections"];
70 ATH_CHECK(writeHandle.record(std::move(writeCdo)));
71 ATH_MSG_INFO(
"Saved successfully Mdt as built "<<
m_writeKey.fullKey()<<
" with validity range "<<writeHandle.getRange());
72 return StatusCode::SUCCESS;
79 for (
auto& corr :
lines.items()) {
82 const std::string stationType =
line[
"typ"];
89 return StatusCode::FAILURE;
94 xPar.setIdentifier(
id);
97 for (
const multilayer_t ml : {multilayer_t::ML1, multilayer_t::ML2}){
98 for (
const tubeSide_t
side : {tubeSide_t::POS, tubeSide_t::NEG}){
99 std::stringstream
prefix{};
100 prefix<<
"Ml"<<(
static_cast<unsigned>(ml) + 1);
101 prefix<<(
side == tubeSide_t::POS?
"Pos" :
"Neg")<<
"TubeSide";
102 auto getValue = [&
prefix,&
line,
this](
const std::string&
val) ->
float{
103 const std::string itrName =
prefix.str()+
val;
104 if (
line.find(itrName) ==
line.end()) {
106 throw std::runtime_error(
"Bad JSON key");
110 xPar.setAlignmentParameters(ml,
side, getValue(
"y0"), getValue(
"z0"),
111 getValue(
"alpha"), getValue(
"ypitch"),
112 getValue(
"zpitch"),getValue(
"stagg"));
115 auto itr_pair = asBuilt.insert(xPar);
116 if (!itr_pair.second){
117 ATH_MSG_FATAL(
"Failed to insert "<<xPar<<
" because the place in memory is already occupied by "
118 <<(*itr_pair.first));
119 return StatusCode::FAILURE;
123 return StatusCode::SUCCESS;
130 constexpr std::string_view
delimiter{
"\n"};
132 unsigned int nLines{0};
133 for (
const std::string& blobline :
lines) {
135 constexpr std::string_view
delimiter{
":"};
140 return StatusCode::FAILURE;
144 if (
type[0] ==
'#') {
149 if (
type.compare(0, 4,
"Corr") == 0) {
152 jsonDump.push_back(newLine);
156 return StatusCode::SUCCESS;
162 std::istringstream in(asciiData);
165 if (!((in >> tok) && (tok ==
"Corr:"))) {
166 ATH_MSG_FATAL(__FILE__<<
":"<<__LINE__<<
" Failed to parse line "<<asciiData);
167 return StatusCode::FAILURE;
171 if (!(in >> typ >> jff >> jzz)) {
172 ATH_MSG_FATAL(__FILE__<<
":"<<__LINE__<<
" Failed to parse line "<<asciiData);
173 return StatusCode::FAILURE;
175 newChannel[
"typ"] = typ;
176 newChannel[
"jff"] = jff;
177 newChannel[
"jzz"] = jzz;
180 std::array<int, static_cast<unsigned>(multilayer_t::NMLTYPES)> stagg{};
181 if (!(in >> stagg[
static_cast<unsigned>(multilayer_t::ML1)]
182 >> stagg[
static_cast<unsigned>(multilayer_t::ML2)])) {
183 ATH_MSG_FATAL(__FILE__<<
":"<<__LINE__<<
" Failed to parse line "<<asciiData);
184 return StatusCode::FAILURE;
186 for (
const multilayer_t ml : {multilayer_t::ML1, multilayer_t::ML2}){
187 for (
const tubeSide_t
side : {tubeSide_t::POS, tubeSide_t::NEG}){
188 std::stringstream
prefix{};
189 prefix<<
"Ml"<<(
static_cast<unsigned>(ml) + 1);
190 prefix<<(
side == tubeSide_t::POS?
"Pos" :
"Neg")<<
"TubeSide";
191 auto dumpValue = [&
prefix, &newChannel](
const std::string&
field,
const float val) {
195 float y0{0.f},
z0{0.f}, alpha{0.f}, ypitch{0.f}, zpitch{0.f};
196 if (!(in >> y0 >>
z0 >> alpha >> ypitch >> zpitch)){
197 ATH_MSG_FATAL(__FILE__<<
":"<<__LINE__<<
" Failed to parse line "<<asciiData);
198 return StatusCode::FAILURE;
202 dumpValue(
"alpha", alpha);
203 dumpValue(
"ypitch", ypitch);
204 dumpValue(
"zpitch", zpitch);
205 dumpValue(
"stagg", stagg[
static_cast<unsigned int>(ml)]);
208 return StatusCode::SUCCESS;