ATLAS Offline Software
Loading...
Searching...
No Matches
CscCondDbAlg.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
5#include <utility>
6
7#include "CscCondDbAlg.h"
8
10namespace Muon{
11// Initialize
13 ATH_MSG_DEBUG("initializing " << name());
14 ATH_CHECK(m_idHelperSvc.retrieve());
15 ATH_CHECK(m_writeKey.initialize());
16
17 if (m_pslopeFromDB) {
18 ATH_MSG_WARNING("You have activated the retrieval of the pslope per CSC channel from the COOL database. "
19 << "Please make sure that a correct PSLOPE database is in place which uses geometrical CSC hashes in hex format "
20 << "as keys and different values of the pslopes for the different CSC channels as values, otherwise please run "
21 << "with the ReadPSlopeFromDatabase property set to false");
22 } else {
23 float pslope = m_pslope; // Work around cppcheck false positive
24 if (!(pslope > 0 && pslope < 1)) {
25 ATH_MSG_FATAL("The Pslope cannot be set to a value <=0 or >=1");
26 return StatusCode::FAILURE;
27 } else if (m_pslope != m_DEFAULT_PSLOPE) {
28 ATH_MSG_WARNING("You have manually set the Pslope property (to " << m_pslope
29 << "). Please check whether this is really intended.");
30 }
31 }
32
42
43 return StatusCode::SUCCESS;
44}
45
46// execute
47StatusCode CscCondDbAlg::execute(const EventContext& ctx) const {
48 ATH_MSG_DEBUG("execute " << name());
49
50 // launching Write Cond Handle
52 if (writeHandle.isValid()) {
53 ATH_MSG_DEBUG("CondHandle " << writeHandle.fullKey() << " is already valid."
54 << " In theory this should not be called, but may happen"
55 << " if multiple concurrent events are being processed out of order.");
56 return StatusCode::SUCCESS;
57 }
58 std::unique_ptr<CscCondDbData> writeCdo{std::make_unique<CscCondDbData>()};
59
60 writeCdo->loadParameters(&m_idHelperSvc->cscIdHelper());
61 writeCdo->setParameters(m_onlineOfflinePhiFlip);
62
63 // data only
64 if (m_isData) {
65 // ATH_CHECK(loadDataHv(writeHandle, writeCdo.get(), ctx)); // keep for future development
66 }
67
68 // both data and MC
69 ATH_CHECK(loadDataF001(writeHandle, writeCdo.get(), ctx));
70 ATH_CHECK(loadDataNoise(writeHandle, writeCdo.get(), ctx));
71 ATH_CHECK(loadDataPed(writeHandle, writeCdo.get(), ctx));
72 if (m_pslopeFromDB) ATH_CHECK(loadDataPSlope(writeHandle, writeCdo.get(), ctx));
73 ATH_CHECK(loadDataRMS(writeHandle, writeCdo.get(), ctx));
74 ATH_CHECK(loadDataStatus(writeHandle, writeCdo.get(), ctx));
75
76 if (!m_isOnline) {
77 ATH_CHECK(loadDataT0Base(writeHandle, writeCdo.get(), ctx));
78 ATH_CHECK(loadDataT0Phase(writeHandle, writeCdo.get(), ctx));
79 }
80
81 if (writeHandle.record(std::move(writeCdo)).isFailure()) {
82 ATH_MSG_FATAL("Could not record CscCondDbData " << writeHandle.key() << " with EventRange " << writeHandle.getRange()
83 << " into Conditions Store");
84 return StatusCode::FAILURE;
85 }
86 ATH_MSG_DEBUG("Recorded new " << writeHandle.key() << " with range " << writeHandle.getRange() << " into Conditions Store");
87
88 return StatusCode::SUCCESS;
89}
90
91// loadDataHv
92StatusCode CscCondDbAlg::loadDataHv(writeHandle_t& writeHandle, CscCondDbData* writeCdo, const EventContext& ctx) const {
94 const CondAttrListCollection* readCdo{*readHandle};
95 if (readCdo == nullptr) {
96 ATH_MSG_ERROR("Null pointer to the read conditions object");
97 return StatusCode::FAILURE;
98 }
99 writeHandle.addDependency(readHandle);
100
101 ATH_MSG_DEBUG("Size of CondAttrListCollection " << readHandle.fullKey() << " readCdo->size()= " << readCdo->size());
102 ATH_MSG_DEBUG("Range of input is " << readHandle.getRange() << ", range of output is " << writeHandle.getRange());
103
105 std::map<Identifier, int> layerMap;
106 int hv_state, lv_state, hv_setpoint0, hv_setpoint1;
107 unsigned int chan_index = 0;
108 for (itr = readCdo->begin(); itr != readCdo->end(); ++itr) {
109 unsigned int chanNum = readCdo->chanNum(chan_index);
110 const std::string& csc_chan_name = readCdo->chanName(chanNum);
111
112 const coral::AttributeList& atr = itr->second;
113
114 if (atr.size()) {
115 hv_state = *(static_cast<const int*>((atr["HVState"]).addressOfData()));
116 lv_state = *(static_cast<const int*>((atr["LVState"]).addressOfData()));
117 hv_setpoint0 = *(static_cast<const int*>((atr["HVSetpoint0"]).addressOfData()));
118 hv_setpoint1 = *(static_cast<const int*>((atr["HVSetpoint1"]).addressOfData()));
119
120 std::string_view delimiter{"_"};
121 auto tokens = CxxUtils::tokenize(csc_chan_name, delimiter);
122
123 if ((hv_state != 1 or lv_state != 1 or hv_setpoint0 < 1000 or hv_setpoint1 < 1000) && !tokens.empty()) {
124 std::string_view layer = tokens[1];
125 std::string number_layer = tokens[1].substr(1, 2);
126 int wirelayer = CxxUtils::atoi(number_layer);
127
128 int eta = 0;
129 char eta_side = tokens[0][0];
130 if (eta_side == 'A') eta = +1;
131 if (eta_side == 'C') eta = -1;
132
133 std::string chamber_name;
134 char size_side = tokens[0][1];
135 if (size_side == 'L') chamber_name = "CSL";
136 else if (size_side == 'S') chamber_name = "CSS";
137
138 int phi = 0;
139 std::string sector_side = tokens[0].substr(2, 4);
140 if (sector_side == "01" || sector_side == "02") phi = 1;
141 else if (sector_side == "03" || sector_side == "04") phi = 2;
142 else if (sector_side == "05" || sector_side == "06") phi = 3;
143 else if (sector_side == "07" || sector_side == "08") phi = 4;
144 else if (sector_side == "09" || sector_side == "10") phi = 5;
145 else if (sector_side == "11" || sector_side == "12") phi = 6;
146 else if (sector_side == "13" || sector_side == "14") phi = 7;
147 else if (sector_side == "15" || sector_side == "16") phi = 8;
148
149 Identifier ChamberId = m_idHelperSvc->cscIdHelper().elementID(chamber_name, eta, phi);
150 Identifier WireLayerId = m_idHelperSvc->cscIdHelper().channelID(ChamberId, 1, wirelayer, 1, 1);
151 std::string WireLayerstring = std::string(chamber_name);
152 WireLayerstring += '_';
153 WireLayerstring += eta_side;
154 WireLayerstring += '_';
155 WireLayerstring += sector_side;
156 WireLayerstring += '_';
157 WireLayerstring += layer;
158
159 writeCdo->setDeadLayer(WireLayerstring, WireLayerId);
160 int& mapval = layerMap[ChamberId];
161 ++mapval;
162 if (mapval == 3) writeCdo->setDeadStation(chamber_name, ChamberId);
163 }
164 }
165 chan_index++;
166 }
167
168 return StatusCode::SUCCESS;
169}
170
171// loadDataF001
172StatusCode CscCondDbAlg::loadDataF001(writeHandle_t& writeHandle, CscCondDbData* writeCdo, const EventContext& ctx) const {
174 writeHandle.addDependency(readHandle);
175 return loadData(writeCdo, *readHandle, "f001");
176}
177
178// loadDataNoise
179StatusCode CscCondDbAlg::loadDataNoise(writeHandle_t& writeHandle, CscCondDbData* writeCdo, const EventContext& ctx) const {
181 writeHandle.addDependency(readHandle);
182 return loadData(writeCdo, *readHandle, "noise");
183}
184
185// loadDataPed
186StatusCode CscCondDbAlg::loadDataPed(writeHandle_t& writeHandle, CscCondDbData* writeCdo, const EventContext& ctx) const {
188 writeHandle.addDependency(readHandle);
189 return loadData(writeCdo, *readHandle, "ped");
190}
191
192// loadDataPSlope
193StatusCode CscCondDbAlg::loadDataPSlope(writeHandle_t& writeHandle, CscCondDbData* writeCdo, const EventContext& ctx) const {
195 writeHandle.addDependency(readHandle);
196 return loadData(writeCdo, *readHandle, "pslope");
197}
198
199// loadDataRMS
200StatusCode CscCondDbAlg::loadDataRMS(writeHandle_t& writeHandle, CscCondDbData* writeCdo, const EventContext& ctx) const {
202 writeHandle.addDependency(readHandle);
203 return loadData(writeCdo, *readHandle, "rms");
204}
205
206// loadDataStatus
207StatusCode CscCondDbAlg::loadDataStatus(writeHandle_t& writeHandle, CscCondDbData* writeCdo, const EventContext& ctx) const {
209 writeHandle.addDependency(readHandle);
210 return loadData(writeCdo, *readHandle, "status");
211}
212
213// loadDataT0Base
214StatusCode CscCondDbAlg::loadDataT0Base(writeHandle_t& writeHandle, CscCondDbData* writeCdo, const EventContext& ctx) const {
216 writeHandle.addDependency(readHandle);
217 return loadData(writeCdo, *readHandle, "t0base");
218}
219
220// loadDataT0Phase
221StatusCode CscCondDbAlg::loadDataT0Phase(writeHandle_t& writeHandle, CscCondDbData* writeCdo, const EventContext& ctx) const {
223 writeHandle.addDependency(readHandle);
224 return loadData(writeCdo, *readHandle, "t0phase", true);
225}
226
227// loadData
228StatusCode CscCondDbAlg::loadData(CscCondDbData* writeCdo, const CondAttrListCollection* readCdo, const std::string& parName,
229 bool parAsm) const {
231
232 for (itr = readCdo->begin(); itr != readCdo->end(); ++itr) {
233 const coral::AttributeList& atr = itr->second;
234 std::string data = atr["Data"].data<std::string>();
235 ATH_MSG_DEBUG("Data is: " << data);
236
237 std::istringstream ss(data);
238
239 if (!ss.good()) {
240 ATH_MSG_WARNING("Failed forming stringstream during caching");
241 continue;
242 }
243
244 std::string version;
245 ss >> version;
246
247 if (version == "02-00" && parAsm) {
248 if (!cacheASM(data, writeCdo, parName).isSuccess()) {
249 ATH_MSG_ERROR("Failed caching from COOL string version 02-00 in ASM format");
250 return StatusCode::FAILURE;
251 }
252 } else if (version == "02-00") {
253 if (!cache(data, writeCdo, parName).isSuccess()) {
254 ATH_MSG_ERROR("Failed caching from COOL string version 02-00");
255 return StatusCode::FAILURE;
256 }
257 } else {
258 // Old version was treated as an actual number rather than string. It was always
259 // set to 1 or sometimes 1.00000, so we convert to integer here and check
260 ATH_MSG_WARNING("Don't recognize CSC COOL string version " << version << ". Will treat as default version "
262 if (m_defaultDatabaseReadVersion == "02-00" && parAsm) {
263 if (!cacheASM(data, writeCdo, parName).isSuccess()) {
264 ATH_MSG_ERROR("Failed caching from COOL string version 02-00 in ASM format");
265 return StatusCode::FAILURE;
266 }
267 } else if (m_defaultDatabaseReadVersion == "02-00") {
268 if (!cache(data, writeCdo, parName).isSuccess()) {
269 ATH_MSG_ERROR("Failed caching from COOL string version 02-00");
270 return StatusCode::FAILURE;
271 }
272 } else {
273 ATH_MSG_FATAL("Did not recognize CSC COOL string version "
274 << version
275 << ". Currently, only version 02-00 is supported. The keys of the database have to be geometrical CSC hashes "
276 "in hex format.");
277 return StatusCode::FAILURE;
278 }
279 }
280 }
281
282 return StatusCode::SUCCESS;
283}
284
285StatusCode CscCondDbAlg::cache(const std::string& data, CscCondDbData* writeCdo, const std::string& parName) const {
286 std::istringstream ss(data);
287 std::string valueStr;
288 unsigned int chanAddress = 0;
289
290 bool started = false;
291 while (ss.good()) {
292 ss >> valueStr;
293
294 if (valueStr == "<END_DATA>") break;
295
296 if (valueStr == "<BEGIN_DATA>") {
297 started = true;
298 continue;
299 }
300 if (!started) continue;
301 ATH_MSG_VERBOSE("cache() - current element " << valueStr);
302 std::istringstream iss(valueStr);
303
304 // use new iss to translate the hex
305 if (chanAddress == 0) {
306 iss >> std::hex >> chanAddress;
307 continue;
308 }
309
310 // record parameter
311 if (recordParameter(chanAddress, valueStr, writeCdo, parName).isFailure()) return StatusCode::FAILURE;
312
313 // reset the address
314 chanAddress = 0;
315 }
316
317 return StatusCode::SUCCESS;
318}
319
320StatusCode CscCondDbAlg::cacheASM(const std::string& data, CscCondDbData* writeCdo, const std::string& parName) const {
321 std::istringstream ss(data);
322 std::string valueStr;
323 std::string chanAddress;
324 bool setAddress = false;
325
326 bool started = false;
327 while (ss.good()) {
328 ss >> valueStr;
329
330 if (valueStr == "<END_DATA>") break;
331
332 if (valueStr == "<BEGIN_DATA>") {
333 started = true;
334 continue;
335 }
336 if (!started) continue;
337 ATH_MSG_VERBOSE("cacheASM() - current element " << valueStr);
338 std::istringstream iss(valueStr);
339
340 // use new iss to translate the hex
341 if (!setAddress) {
342 iss >> chanAddress;
343 setAddress = true;
344 continue;
345 }
346
347 // chanAddress is the ASM tag, need to do something with it
348 // format: ASM[#:1-5]_[StationEtaString:AorC][stationPhi:1-8]_[stationName:50-51]
349 // xxx 3 x 5 6 x x9
350 int asmNum = atoi(chanAddress.substr(3, 1).c_str());
351
352 int stationEta = 0;
353 if (chanAddress[5] == 'A')
354 stationEta = 1;
355 else if (chanAddress[5] == 'C')
356 stationEta = -1;
357 else {
358 ATH_MSG_FATAL("Bad ASMID String in CSC COOL database \"" << chanAddress << "\" (wheel " << chanAddress[5] << " doesn't exist!");
359 return StatusCode::FAILURE;
360 }
361
362 int stationPhi = atoi(chanAddress.substr(6, 1).c_str());
363 int stationName = atoi(chanAddress.substr(8, 2).c_str());
364
365 if (stationPhi < 1 || stationPhi > 8 || stationName < 50 || stationName > 51) {
366 ATH_MSG_FATAL("Bad ASMID String in CSC COOL database: \"" << chanAddress << "\"");
367 ATH_MSG_FATAL("Read station phi: " << stationPhi << ", stationName " << stationName);
368 return StatusCode::FAILURE;
369 }
370
371 int chamberLayer = 2; // chamberLayer1 was never built.
372
373 int measuresPhi = 0;
374 int layerSince = 0;
375 int layerUntil = 0;
376 int stripSince = 0;
377 int stripUntil = 0;
378 if (!getAsmScope(asmNum, measuresPhi, layerSince, layerUntil, stripSince, stripUntil).isSuccess()) {
379 ATH_MSG_FATAL("Failure of getAsmScope in cacheASM.");
380 return StatusCode::FAILURE;
381 }
382
383 // Now for given asmID, loop over strip and layer
384 unsigned int index = 0;
385 Identifier chanId;
386 IdentifierHash hashIdentifier;
387 for (int iStrip = stripSince; iStrip < stripUntil; iStrip++) {
388 for (int iLayer = layerSince; iLayer < layerUntil; iLayer++) {
389 // The following call of channelID with check=true ensures that the identifier is checked to be physically valid.
390 // This is currently required to be checked when running with layouts which do not contain all CSCs anymore, since the
391 // CSCCool database contains still all CSCs. A clean fix would be to have a dedicated database for every layout.
392 bool isValid = true;
393 chanId = m_idHelperSvc->cscIdHelper().channelID(stationName, stationEta, stationPhi, chamberLayer, iLayer, measuresPhi,
394 iStrip, isValid);
395
396 static std::atomic<bool> conversionFailPrinted = false;
397 if (!isValid) {
398 if (!conversionFailPrinted.load()) {
400 "Failed to retrieve offline identifier from ASM cool "
401 "string "
402 << chanAddress
403 << ". This is likely due to the fact that the CSCCool "
404 "database contains "
405 << "more entries than the detector layout.");
406 conversionFailPrinted.store(true);
407 }
408 continue;
409 }
410 if (m_idHelperSvc->cscIdHelper().get_channel_hash(chanId, hashIdentifier)) {
411 ATH_MSG_WARNING("Failed to retrieve channel hash for Identifier " << chanId.get_compact());
412 }
413 index = (int)hashIdentifier;
414 if (index == UINT_MAX) continue;
415
416 ATH_MSG_VERBOSE("[cache version 2 (ASM)] Recording " << valueStr << " at index " << index << "\nstationName " << stationName
417 << "\nstationEta " << stationEta << "\nstationPhi " << stationPhi
418 << "\nchamberLayer " << chamberLayer << "\niLayer " << iLayer
419 << "\nmeasuresPhi " << measuresPhi << "\niStrip " << iStrip);
420
421 // record parameter
422 if (recordParameter(hashIdentifier, valueStr, writeCdo, parName).isFailure()) return StatusCode::FAILURE;
423 }
424 }
425
426 // reset the address
427 setAddress = false;
428 chanAddress = "";
429 }
430
431 return StatusCode::SUCCESS;
432}
433
434// getAsmScope
435StatusCode CscCondDbAlg::getAsmScope(int asmNum, int& measuresPhi, int& layerSince, int& layerUntil, int& stripSince,
436 int& stripUntil) const {
437 // copy-paste from CscCoolStrSvc
438
439 if (asmNum == 1) {
440 stripSince = 1; // inclusive
441 stripUntil = 97; // exclusive
442 layerSince = 1; // inclusive
443 layerUntil = 3; // exclusive
444 measuresPhi = 0;
445 } else if (asmNum == 2) {
446 stripSince = 1; // inclusive
447 stripUntil = 97; // exclusive
448 layerSince = 3; // inclusive
449 layerUntil = 5; // exclusive
450 measuresPhi = 0;
451 } else if (asmNum == 3) {
452 stripSince = 97;
453 stripUntil = 193;
454 layerSince = 1;
455 layerUntil = 3;
456 measuresPhi = 0;
457 } else if (asmNum == 4) {
458 stripSince = 97;
459 stripUntil = 193;
460 layerSince = 3;
461 layerUntil = 5;
462 measuresPhi = 0;
463 } else if (asmNum == 5) {
464 stripSince = 1;
465 stripUntil = 49;
466 layerSince = 1;
467 layerUntil = 5;
468 measuresPhi = 1;
469 } else {
470 ATH_MSG_FATAL("ASM number \"" << asmNum << "\" is invalid. It needs to end in a number from 1-5.");
471 return StatusCode::FAILURE;
472 }
473 return StatusCode::SUCCESS;
474}
475
476// recordParameter
477StatusCode CscCondDbAlg::recordParameter(unsigned int chanAddress, const std::string& data, CscCondDbData* writeCdo,
478 const std::string& parName) const {
479 // retrieve channel hash
480 Identifier chamberId;
481 Identifier channelId;
482 if (!writeCdo->onlineToOfflineIds(&m_idHelperSvc->cscIdHelper(), chanAddress, chamberId, channelId).isSuccess()) {
483 // if onlineToOfflineIds does not return SUCCESS, the underlying reason was alrady printed there, so no need to also print a WARNING
484 // here
485 return StatusCode::SUCCESS;
486 }
487
488 IdentifierHash chanHash;
489 if (m_idHelperSvc->cscIdHelper().get_channel_hash(channelId, chanHash)) {
490 ATH_MSG_WARNING("recordParameter(): Failed to retrieve channel Identifier hash for Identifier " << channelId.get_compact()
491 << ". Not recording parameter...");
492 return StatusCode::SUCCESS;
493 }
494
495 // record parameter
496 return recordParameter(chanHash, data, writeCdo, parName);
497}
498
499// recordParameter
500StatusCode CscCondDbAlg::recordParameter(IdentifierHash chanHash, const std::string& data, CscCondDbData* writeCdo,
501 const std::string& parName) const {
502 // record parameter
503 StatusCode sc = StatusCode::FAILURE;
504 if (parName == "f001")
505 sc = recordParameterF001(chanHash, data, writeCdo);
506 else if (parName == "noise")
507 sc = recordParameterNoise(chanHash, data, writeCdo);
508 else if (parName == "ped")
509 sc = recordParameterPed(chanHash, data, writeCdo);
510 else if (parName == "pslope")
511 sc = recordParameterPSlope(chanHash, data, writeCdo);
512 else if (parName == "rms")
513 sc = recordParameterRMS(chanHash, data, writeCdo);
514 else if (parName == "status")
515 sc = recordParameterStatus(chanHash, data, writeCdo);
516 else if (parName == "t0base")
517 sc = recordParameterT0Base(chanHash, data, writeCdo);
518 else if (parName == "t0phase")
519 sc = recordParameterT0Phase(chanHash, data, writeCdo);
520
521 if (!sc.isSuccess())
522 ATH_MSG_ERROR("Cannot extract parameter " << parName << " for channel hash " << chanHash << " from data string '" << data << "'");
523 return sc;
524}
525
526// recordParameterF001
527StatusCode CscCondDbAlg::recordParameterF001(IdentifierHash chanHash, std::string data, CscCondDbData* writeCdo) const {
528 float token;
529 if (getParameter(chanHash, std::move(data), token).isFailure()) return StatusCode::FAILURE;
530 writeCdo->setChannelF001(chanHash, token);
531 return StatusCode::SUCCESS;
532}
533
534// recordParameterNoise
535StatusCode CscCondDbAlg::recordParameterNoise(IdentifierHash chanHash, std::string data, CscCondDbData* writeCdo) const {
536 float token;
537 if (getParameter(chanHash, std::move(data), token).isFailure()) return StatusCode::FAILURE;
538 writeCdo->setChannelNoise(chanHash, token);
539 return StatusCode::SUCCESS;
540}
541
542// recordParameterPed
543StatusCode CscCondDbAlg::recordParameterPed(IdentifierHash chanHash, std::string data, CscCondDbData* writeCdo) const {
544 float token;
545 if (getParameter(chanHash, std::move(data), token).isFailure()) return StatusCode::FAILURE;
546 writeCdo->setChannelPed(chanHash, token);
547 return StatusCode::SUCCESS;
548}
549
550// recordParameterPSlope
551StatusCode CscCondDbAlg::recordParameterPSlope(IdentifierHash chanHash, std::string data, CscCondDbData* writeCdo) const {
552 if (m_pslopeFromDB) {
553 float token;
554 if (getParameter(chanHash, std::move(data), token).isFailure()) return StatusCode::FAILURE;
555 writeCdo->setChannelPSlope(chanHash, token);
556 } else {
557 // just set plsope to m_pslope for every channel
558 writeCdo->setChannelPSlope(chanHash, m_pslope);
559 }
560 return StatusCode::SUCCESS;
561}
562
563// recordParameterRMS
564StatusCode CscCondDbAlg::recordParameterRMS(IdentifierHash chanHash, std::string data, CscCondDbData* writeCdo) const {
565 float token;
566 if (getParameter(chanHash, std::move(data), token).isFailure()) return StatusCode::FAILURE;
567 writeCdo->setChannelRMS(chanHash, token);
568 return StatusCode::SUCCESS;
569}
570
571// recordParameterStatus
572StatusCode CscCondDbAlg::recordParameterStatus(IdentifierHash chanHash, std::string data, CscCondDbData* writeCdo) const {
573 int token{};
574 if (getParameter(chanHash, std::move(data), token).isFailure()) return StatusCode::FAILURE;
575 //setChannelStatus takes signed int token argument
576 writeCdo->setChannelStatus(chanHash, token);
577 return StatusCode::SUCCESS;
578}
579
580// recordParameterT0Base
581StatusCode CscCondDbAlg::recordParameterT0Base(IdentifierHash chanHash, std::string data, CscCondDbData* writeCdo) const {
582 float token;
583 if (getParameter(chanHash, std::move(data), token).isFailure()) return StatusCode::FAILURE;
584 writeCdo->setChannelT0Base(chanHash, token);
585 return StatusCode::SUCCESS;
586}
587
588// recordParameterT0Phase
589StatusCode CscCondDbAlg::recordParameterT0Phase(IdentifierHash chanHash, std::string data, CscCondDbData* writeCdo) const {
590 bool token;
591 if (getParameter(chanHash, std::move(data), token).isFailure()) return StatusCode::FAILURE;
592 writeCdo->setChannelT0Phase(chanHash, token);
593 return StatusCode::SUCCESS;
594}
595
596/*
597keep for future development:
598
599// loadDataDeadChambers
600StatusCode
601CscCondDbAlg::loadDataDeadChambers(writeHandle_t & writeHandle, CscCondDbData* writeCdo, const EventContext& ctx) const {
602
603 ATH_CHECK(m_readKey_folder_da_chambers.initialize());
604 SG::ReadCondHandle<CondAttrListCollection> readHandle{m_readKey_folder_da_chambers, ctx};
605 const CondAttrListCollection* readCdo{*readHandle};
606 if(readCdo==0){
607 ATH_MSG_ERROR("Null pointer to the read conditions object");
608 return StatusCode::FAILURE;
609 }
610
611 EventIDRange range;
612 if ( !readHandle.range(range) ) {
613 ATH_MSG_ERROR("Failed to retrieve validity range for " << readHandle.key());
614 return StatusCode::FAILURE;
615 }
616
617 //intersect validity range of this obj with the validity of already-loaded objs
618 rangeW = EventIDRange::intersect(range, rangeW);
619
620 ATH_MSG_DEBUG("Size of CondAttrListCollection " << readHandle.fullKey() << " readCdo->size()= " << readCdo->size());
621 ATH_MSG_DEBUG("Range of input is " << range << ", range of output is " << rangeW);
622
623 std::vector<std::string> goodChambers;
624 std::vector<std::string> deadChambers;
625
626 CondAttrListCollection::const_iterator itr;
627 for(itr = readCdo->begin(); itr != readCdo->end(); ++itr) {
628
629 const coral::AttributeList& atr = itr->second;
630 std::string chamber_enabled = *(static_cast<const std::string*>((atr["enabledChambers"]).addressOfData()));
631
632 std::string_view delimiter = " ";
633 std::vector<std::string> tokens = CxxUtils::tokenize(chamber_enabled, delimiter);
634
635 for (unsigned int i=0; i<tokens.size(); i++) goodChambers.push_back(tokens[i]);
636 }
637
638 std::string chamber_all[] = {"A01","A02","A03","A04","A05","A06","A07","A08","A09","A10","A11","A12","A13","A14","A15","A16",
639 "C01","C02","C03","C04","C05","C06","C07","C08","C09","C10","C11","C12","C13","C14","C15","C16"};
640 std::vector<std::string> chamber_v(chamber_all,chamber_all+32);
641 sort(chamber_v.begin(), chamber_v.end());
642
643 for(unsigned int i=0; i<chamber_v.size(); ++i){
644 if(!binary_search(goodChambers.begin(), goodChambers.end(), chamber_v[i]))
645 deadChambers.push_back(chamber_v[i]);
646 }
647
648 for(unsigned int i=0; i<deadChambers.size(); ++i){
649 int eta = 0;
650 std::string eta_side = deadChambers[i].substr(0,1);
651 if(eta_side == "A") eta = +1;
652 if(eta_side == "C") eta = -1;
653
654 int phi = 0;
655 std::string sector_side = deadChambers[i].substr(2,4);
656 if(sector_side == "01" || sector_side == "02") phi=1;
657 if(sector_side == "03" || sector_side == "04") phi=2;
658 if(sector_side == "05" || sector_side == "06") phi=3;
659 if(sector_side == "07" || sector_side == "08") phi=4;
660 if(sector_side == "09" || sector_side == "10") phi=5;
661 if(sector_side == "11" || sector_side == "12") phi=6;
662 if(sector_side == "13" || sector_side == "14") phi=7;
663 if(sector_side == "15" || sector_side == "16") phi=8;
664
665 std::string chamber_name = "";
666 if(sector_side == "01" || sector_side == "03" ||sector_side == "05" ||sector_side == "07" || sector_side == "09" || sector_side ==
667"11" || sector_side == "13" || sector_side == "15" ) chamber_name = "CSL"; if(sector_side == "02" || sector_side == "04" || sector_side ==
668"06"|| sector_side == "08" || sector_side == "10"|| sector_side == "12"|| sector_side == "14"|| sector_side == "16") chamber_name = "CSS";
669
670 Identifier ChamberId = m_idHelperSvc->cscIdHelper().elementID(chamber_name, eta, phi);
671 writeCdo->setDeadStation(deadChambers[i], ChamberId);
672 }
673
674 return StatusCode::SUCCESS;
675}
676*/
677}
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_FATAL(x)
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
bool isValid(const T &p)
Av: we implement here an ATLAS-sepcific convention: all particles which are 99xxxxx are fine.
Definition AtlasPID.h:878
char data[hepevt_bytes_allocation_ATLAS]
Definition HepEvt.cxx:11
static Double_t ss
static Double_t sc
This class is a collection of AttributeLists where each one is associated with a channel number.
ChanNum chanNum(unsigned int index) const
channel number for index: (index = 0 to size-1)
const_iterator end() const
const_iterator begin() const
Access to Chan/AttributeList pairs via iterators.
const std::string & chanName(ChanNum chanNum) const
find name for particular channel
size_type size() const
number of Chan/AttributeList pairs
ChanAttrListMap::const_iterator const_iterator
StatusCode onlineToOfflineIds(const CscIdHelper *, const unsigned int &, Identifier &, Identifier &) const
void setChannelStatus(IdentifierHash, int)
void setDeadLayer(std::string_view, Identifier)
void setChannelT0Phase(IdentifierHash, bool)
void setChannelRMS(IdentifierHash, float)
void setDeadStation(std::string_view, Identifier)
void setChannelNoise(IdentifierHash, float)
void setChannelPSlope(IdentifierHash, float)
void setChannelF001(IdentifierHash, float)
void setChannelT0Base(IdentifierHash, float)
void setChannelPed(IdentifierHash, float)
This is a "hash" representation of an Identifier.
value_type get_compact() const
Get the compact id.
StatusCode loadDataT0Base(writeHandle_t &, CscCondDbData *, const EventContext &) const
StatusCode loadData(CscCondDbData *, const CondAttrListCollection *, const std::string &, bool=false) const
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
StatusCode loadDataNoise(writeHandle_t &, CscCondDbData *, const EventContext &) const
virtual StatusCode execute(const EventContext &) const override
StatusCode loadDataHv(writeHandle_t &, CscCondDbData *, const EventContext &) const
SG::ReadCondHandleKey< CondAttrListCollection > m_readKey_folder_da_pslope
Gaudi::Property< float > m_pslope
StatusCode cacheASM(const std::string &, CscCondDbData *, const std::string &) const
StatusCode recordParameterRMS(IdentifierHash, std::string, CscCondDbData *) const
StatusCode loadDataPed(writeHandle_t &, CscCondDbData *, const EventContext &) const
StatusCode loadDataPSlope(writeHandle_t &, CscCondDbData *, const EventContext &) const
SG::ReadCondHandleKey< CondAttrListCollection > m_readKey_folder_da_noise
StatusCode recordParameterStatus(IdentifierHash, std::string, CscCondDbData *) const
StatusCode loadDataRMS(writeHandle_t &, CscCondDbData *, const EventContext &) const
StatusCode loadDataStatus(writeHandle_t &, CscCondDbData *, const EventContext &) const
StatusCode getParameter(IdentifierHash chanHash, std::string data, T &token) const
SG::ReadCondHandleKey< CondAttrListCollection > m_readKey_folder_da_hv
Gaudi::Property< bool > m_pslopeFromDB
The pslope is the gain of each CSC channel.
SG::ReadCondHandleKey< CondAttrListCollection > m_readKey_folder_da_t0base
virtual StatusCode initialize() override
SG::ReadCondHandleKey< CondAttrListCollection > m_readKey_folder_da_f001
SG::ReadCondHandleKey< CondAttrListCollection > m_readKey_folder_da_status
StatusCode recordParameterF001(IdentifierHash, std::string, CscCondDbData *) const
StatusCode recordParameter(unsigned int, const std::string &, CscCondDbData *, const std::string &) const
StatusCode recordParameterPSlope(IdentifierHash, std::string, CscCondDbData *) const
StatusCode getAsmScope(int, int &, int &, int &, int &, int &) const
Gaudi::Property< bool > m_isData
Gaudi::Property< bool > m_isOnline
Gaudi::Property< std::string > m_defaultDatabaseReadVersion
SG::ReadCondHandleKey< CondAttrListCollection > m_readKey_folder_da_ped
SG::WriteCondHandleKey< CscCondDbData > m_writeKey
StatusCode cache(const std::string &, CscCondDbData *, const std::string &) const
StatusCode recordParameterNoise(IdentifierHash, std::string, CscCondDbData *) const
StatusCode recordParameterT0Phase(IdentifierHash, std::string, CscCondDbData *) const
StatusCode loadDataF001(writeHandle_t &, CscCondDbData *, const EventContext &) const
const float m_DEFAULT_PSLOPE
The CSC gain was originally 5.304 ADC counts per fC, but later increased to 5.7 ADC counts per fC,...
Gaudi::Property< bool > m_onlineOfflinePhiFlip
SG::WriteCondHandle< CscCondDbData > writeHandle_t
StatusCode recordParameterPed(IdentifierHash, std::string, CscCondDbData *) const
SG::ReadCondHandleKey< CondAttrListCollection > m_readKey_folder_da_rms
StatusCode recordParameterT0Base(IdentifierHash, std::string, CscCondDbData *) const
StatusCode loadDataT0Phase(writeHandle_t &, CscCondDbData *, const EventContext &) const
SG::ReadCondHandleKey< CondAttrListCollection > m_readKey_folder_da_t0phase
const DataObjID & fullKey() const
const EventIDRange & getRange()
const std::string & key() const
void addDependency(const EventIDRange &range)
const EventIDRange & getRange() const
StatusCode record(const EventIDRange &range, T *t)
record handle, with explicit range DEPRECATED
const DataObjID & fullKey() const
std::vector< std::string > tokenize(const std::string &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...
NRpcCablingAlg reads raw condition data and writes derived condition data to the condition store.
Definition index.py:1