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