60 {
63
64 ATH_MSG_DEBUG(
"Size of CondAttrListCollection " << readCdo.
fullKey() <<
" readCdo->size()= " << readCdo->size());
65
67 unsigned int chan_index = 0;
68 unsigned int iFracDeadStrip = 0;
69 for (itr = readCdo->begin(); itr != readCdo->end(); ++itr) {
70 const coral::AttributeList& atr = itr->second;
72 Identifier chamberId = Identifier(channum);
73
75
76 eff_panel = *(
static_cast<const std::string*
>((atr[
"PanelRes"]).addressOfData()));
77 striplist = *(static_cast<const std::string*>((atr["StripStatus"]).addressOfData()));
78
79 ATH_MSG_DEBUG(
"-----------------------------entry #" << chan_index);
82 ATH_MSG_DEBUG(
"striplist load is " << striplist <<
" " << striplist.size());
83
84
85 constexpr std::string_view
delimiter{
" "};
87
89
91
93 writeCdo.setProjectedTrack(chamberId, ProjectedTracks);
94
96 writeCdo.setEfficiency(chamberId, Efficiency);
97
98
100 writeCdo.setGapEfficiency(chamberId, GapEfficiency);
101
103 writeCdo.setMeanClusterSize(chamberId, MeanClusterSize);
104
105 if (DBversion > 2) {
107 writeCdo.setFracClusterSize1(chamberId, FracClusterSize1);
108
110 writeCdo.setFracClusterSize2(chamberId, FracClusterSize2);
111 } else {
112 if (info_panel.size() > 20) {
114 writeCdo.setFracClusterSize1(chamberId, FracClusterSize1);
115
117 writeCdo.setFracClusterSize2(chamberId, FracClusterSize2);
118 } else {
119 writeCdo.setFracClusterSize1(chamberId, 0.6);
120 writeCdo.setFracClusterSize2(chamberId, 0.2);
121 ATH_MSG_DEBUG(
"Panel with incomplete info in the DB, size = " << info_panel.size() <<
" instead of required >20");
123 ATH_MSG_DEBUG(
"Cluster Size 1 and 2 fractions are set to 0.6 and 0.2 for this chamber.");
124 }
125 }
126
127
128
129 int countdeadstrip = 0;
130 int countdeadstripinfidarea = 0;
131 int countpanelstrip = 0;
132
133
134
135 constexpr std::string_view delimiter_strip{"|"};
136
137
139 if (info_strip.size() > 1) {
140 for (
unsigned int i = 0;
i < info_strip.size(); ++
i) {
141 const std::string &ch_strip2 = info_strip[
i];
142
143 constexpr std::string_view delimiter_strip2{" "};
144
146
149 const auto &strip_status = info_strip2[0];
150
151
152 Identifier strip_id;
154 stripnum = channum +
i * 4;
155 strip_id = channum +
i * 4;
156
157 ATH_MSG_DEBUG(
"strip " << strip_id <<
" has time " << Time <<
" and " << SigmaTime);
158
159 writeCdo.setStripTime(strip_id, std::vector<double>{Time, SigmaTime});
160
161 ATH_MSG_VERBOSE(
"strip #" << i + 1 <<
" strip_id " << stripnum <<
" expanded "
163
164 ++countpanelstrip;
165
166 if (strip_status[0] == '0') {
167 ++countdeadstrip;
168 if (i > 1 && i < info_strip.size() - 2) {
169
170 ++countdeadstripinfidarea;
171 }
172 }
173 }
174 } else {
176
177 for (
unsigned int i = 0;
i < striplist.size();
i++) {
178 char part_strip = striplist[
i];
179
180 char ch_panel = part_strip;
181
182
184 Identifier strip_id{channum +
i * 4};
185
186 ATH_MSG_VERBOSE(
"strip #" << i + 1 <<
" info_strip " << part_strip <<
" strip_id " << stripnum <<
" expanded "
187 <<
m_idHelperSvc->toString(strip_id) <<
" panel = " << ch_panel);
188
189 ++countpanelstrip;
190
191 if (part_strip == '0') {
192 ++countdeadstrip;
193 if (i > 1 && i < striplist.size() - 2) {
194
195 ++countdeadstripinfidarea;
196 }
197 }
198 }
199 }
200
201 if (countpanelstrip != npanelstrip)
203 "WARNING (no side effects for this, just a reminder for a proper fix of the DB content) no matching strip number!!! "
204 << countpanelstrip << " != " << npanelstrip << " Identifier: " << channum);
205
206 float FracDeadStripMap = 0;
207 if (countpanelstrip - 4 > 0) FracDeadStripMap =
float(countdeadstripinfidarea) /
float(countpanelstrip - 4);
208
209
210 writeCdo.setFracDeadStrip(chamberId, FracDeadStripMap);
211 ++iFracDeadStrip;
212
213 std::stringstream
ss;
215 ss <<
"Size of RPC_PanelFracDeadStripMap " << iFracDeadStrip <<
"; in panel ";
216 ss << channum <<
" FracDeadStri(in fid.area) " << FracDeadStripMap <<
" (incl. borders) ";
217 if (countpanelstrip == 0)
218 ss <<
"DIVISION BY ZERO IMPOSSIBLE";
219 else
221 ss <<
" nDeadStrips,InFidArea/nStrips " << countdeadstrip <<
",";
222 ss << countdeadstripinfidarea <<
"/" << countpanelstrip;
224 }
225
226 ATH_MSG_DEBUG(
"Efficiency is " << Efficiency <<
" and fraction is " << FracDeadStripMap <<
" and thus "
227 << Efficiency - (0.99 - FracDeadStripMap));
228
229 if (
msgLvl(MSG::DEBUG) && Efficiency - (0.99 - FracDeadStripMap) > 0. &&
230 (Efficiency < 0.995 || FracDeadStripMap > 0.01) && (Efficiency > 0.005 || FracDeadStripMap < 0.99)) {
231 std::stringstream
msg;
232 msg <<
"WARNING: Inconsistent panel eff.=" << Efficiency <<
" and 0.99-dead_frac=" << 0.99 - FracDeadStripMap
233 << " nDeadStrips,InFidArea/nStrips " << countdeadstrip << "," << countdeadstripinfidarea << "/" << countpanelstrip
235 if (Efficiency - (0.99 - FracDeadStripMap) > 0.2)
236 msg <<
" difference >0.2";
237 else if (Efficiency - (0.99 - FracDeadStripMap) > 0.1)
238 msg <<
" difference >0.1";
239 else if (Efficiency - (0.99 - FracDeadStripMap) > 0.05)
240 msg <<
" difference >0.05";
241 else if (Efficiency - (0.99 - FracDeadStripMap) > 0.025)
242 msg <<
" difference >0.025";
243 else if (Efficiency - (0.99 - FracDeadStripMap) > 0.01)
244 msg <<
" difference >0.01";
245 else
246 msg <<
" difference >0 but <=0.01";
248 }
249
250 }
251 return StatusCode::SUCCESS;
252}
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_WARNING(x)
bool msgLvl(const MSG::Level lvl) const
ChanAttrListMap::const_iterator const_iterator
const DataObjID & fullKey() const
std::string eff_panel[4][6]
std::vector< std::string > tokenize(const std::string &the_str, std::string_view delimiters)
Splits the string into smaller substrings.
double atof(std::string_view str)
Converts a string into a double / float.
int atoi(std::string_view str)
Helper functions to unpack numbers decoded in string into integers and doubles The strings are requir...