37 #include "CoralBase/Blob.h" 
   42 #define HV_NON_NOMINAL_TOLERANCE 10 // tolerance : 1V for HV 
   43 #define DEAD_HV_THRESHOLD 10 // HV <10 V="dead" 
   44 #define MAX_LAR_CELLS 182468 
   61     ATH_MSG_INFO(
"Will use currents to correct voltage-drop at HV-resistors");
 
   64     ATH_MSG_INFO(
"Will NOT correct voltage-drop at HV-resistors");
 
   86   return StatusCode::SUCCESS;
 
   93   const EventContext& ctx = Gaudi::Hive::currentContext();
 
  103   return StatusCode::SUCCESS;
 
  110   if (writeHandle.isValid()) {
 
  112     return StatusCode::SUCCESS;
 
  117   writeHandle.addDependency (fullRange);
 
  121   ATH_MSG_DEBUG(
"Range of cabling" << larCablingHdl.
getRange() << 
", intersection: " << writeHandle.getRange());
 
  122   writeHandle.addDependency(larCablingHdl);
 
  126   writeHandle.addDependency(caloMgrHandle);
 
  131     onlHVCorr = *onlHVCorrHdl;
 
  132     writeHandle.addDependency(onlHVCorrHdl);
 
  133     ATH_MSG_DEBUG(
"Range of online HV correction  " << onlHVCorrHdl.
getRange() << 
", intersection: " << writeHandle.getRange());
 
  138   writeHandle.addDependency(mappingHdl);
 
  147   bool doPathology=
true; 
 
  150   if(!pathologyContainer) {
 
  156     writeHandle.addDependency(pHdl);
 
  157     ATH_MSG_DEBUG(
"Range of HV-Pathology " << pHdl.
getRange() << 
", intersection: " << writeHandle.getRange());
 
  158     const std::vector<LArHVPathologiesDb::LArHVElectPathologyDb> &pathCont = pathologyContainer->
getPathology();
 
  159     const size_t nPathologies=pathCont.size();
 
  161       ATH_MSG_INFO( 
"Number of HV pathologies found " << nPathologies);
 
  164     for(
unsigned i=0; 
i<nPathologies; ++
i) {
 
  169         unsigned int index = (
unsigned int)(idHash);
 
  170         if (
index<hasPathologyEM.size()) {
 
  171           if(!hasPathologyEM[
index].empty()) {
 
  176             std::vector<unsigned short> svec;
 
  179             hasPathologyEM[
index]=svec;
 
  185         unsigned int index = (
unsigned int)(idHash);
 
  186         if (
index<hasPathologyHEC.size()) {
 
  187           if(!hasPathologyHEC[
index].empty()) {
 
  192             std::vector<unsigned short> svec;
 
  195             hasPathologyHEC[
index]=svec;
 
  201         unsigned int index = (
unsigned int)(idHash);
 
  202         if (
index<hasPathologyFCAL.size()) {
 
  203           if(!hasPathologyFCAL[
index].empty()) {
 
  204             if(hasPathologyFCAL[
index].
size()<
static_cast<size_t>(abs(electPath.
electInd+1)))
 
  208             std::vector<unsigned short> svec;
 
  211             hasPathologyFCAL[
index]=svec;
 
  219   const float* rValues{
nullptr};
 
  223     writeHandle.addDependency(readAttrHandle);
 
  228       return StatusCode::FAILURE;
 
  230     rValues = 
static_cast<const float*
>(rBlob.startingAddress());
 
  234                   writeHandle.addDependency (
h);
 
  235                   return writeHandle.getRange();
 
  241                               pathologyContainer, hasPathologyEM, hasPathologyHEC, hasPathologyFCAL, rValues));
 
  243   std::vector<float> vScale;
 
  251       const float hvonline = onlHVCorr->HVScaleCorr(hwid);
 
  252       if (hvonline>0. && hvonline<100.) vScale[
i]=vScale[
i]/hvonline;
 
  255     if (vScale[
i]<0.01) {
 
  260     if (vScale[
i] < 0.9) {
 
  261       if (vScale[
i] < 0.4) {
 
  263                                                << 
" = " << vScale[
i]);
 
  266                                              << 
" = " << vScale[
i]);
 
  273   if (writeHandle.record(std::move(hvCorr)).isFailure()) {
 
  274     ATH_MSG_ERROR(
"Could not record LArHVCorr object with " << writeHandle.key()
 
  275                   << 
" with EventRange " << writeHandle.getRange() << 
" into Conditions Store");
 
  276     return StatusCode::FAILURE;
 
  278   ATH_MSG_INFO(
"recorded new " << writeHandle.key() << 
" with range " << writeHandle.getRange() << 
" into Conditions Store");
 
  280   return StatusCode::SUCCESS;
 
  288   if (writeAffectedHandle.isValid()) {
 
  289     ATH_MSG_DEBUG(
"Found valid write LArAffectedRegions handle");
 
  290     return StatusCode::SUCCESS;
 
  295   ATH_MSG_DEBUG(
"Range of cabling" << larCablingHdl.
getRange() << 
", intersection: " << writeAffectedHandle.getRange());
 
  296   writeAffectedHandle.addDependency(larCablingHdl);
 
  300   writeAffectedHandle.addDependency(readBFHandle);
 
  301   ATH_MSG_DEBUG(
"Range of BadFeb " << readBFHandle.getRange() << 
", intersection: " << writeAffectedHandle.getRange());
 
  303   auto vAffected = std::make_unique<CaloAffectedRegionInfoVec>();
 
  306                     writeAffectedHandle.addDependency (
h);
 
  307                     return writeAffectedHandle.getRange();
 
  313     writeAffectedHandle.addDependency(mappingHdl);
 
  323   ATH_CHECK(writeAffectedHandle.record(std::move(vAffected)));
 
  324   ATH_MSG_INFO(
"recorded new " << writeAffectedHandle.key() << 
" with range "  
  325                <<  writeAffectedHandle.getRange()<< 
" into Conditions Store");
 
  327   return StatusCode::SUCCESS;
 
  336   std::vector<const CondAttrListCollection*> attrvec;
 
  343       attrvec.push_back(cattr);
 
  344       const EventIDRange& 
range = addDep (dcsHdl);
 
  353   if (voltagePerLine.empty()) {
 
  357   return StatusCode::SUCCESS;
 
  369                        , 
const float* rValues)
 const 
  372   std::vector<unsigned int> listElec;
 
  374   const float uAkOhm = 1.e-3; 
 
  383       bool hasPathology=
false; 
 
  384       if (
index<hasPathologyEM.size()) {
 
  385     if (!hasPathologyEM[
index].empty()) {
 
  391       if (!embElement) std::abort();
 
  393       unsigned int nelec = 
cell->getNumElectrodes();
 
  394       unsigned int ngap = 2*nelec;
 
  396       for (
unsigned int i=0;
i<nelec;
i++) {
 
  400     for (
unsigned int igap=0;igap<2;igap++) {
 
  404       auto hvIt=voltage.find(
hvline);
 
  405       if(hvIt != voltage.end()) { 
 
  408           curr=hvIt->second.curr;
 
  417           if(curr > 0.) curr *= uAkOhm * rValues[ridx]; 
else curr = 0.;
 
  418           ATH_MSG_VERBOSE(
"channel. "<<std::hex<<
id.get_identifier32()<<std::dec <<
" hvline: "<<
hvline<<
" curr. " << curr << 
" R: "<<rValues[ridx]);
 
  423           for (
unsigned int ii=0;ii<listElec.size();ii++) {
 
  424         if (listElec[ii]==(2*
i+igap) && listElec[ii]<hasPathologyEM[
index].
size() && hasPathologyEM[
index][listElec[ii]]) {
 
  449       if (!embElement) std::abort();
 
  454       for (
unsigned int igap=0;igap<2;igap++) {
 
  458     auto hvIt=voltage.find(
hvline);
 
  459     if(hvIt != voltage.end()) {  
 
  462         curr=hvIt->second.curr;
 
  471         if(curr > 0.) curr *= uAkOhm * rValues[ridx]; 
else curr = 0;
 
  472         ATH_MSG_VERBOSE(
"channel. "<<std::hex<<
id.get_identifier32()<<std::dec <<
" hvline: "<<
hvline<<
" curr. " << curr << 
" R: "<<rValues[ridx]);
 
  482       bool hasPathology=
false;
 
  483       if (
index<hasPathologyEM.size()) {
 
  484     if (!hasPathologyEM[
index].empty()) {
 
  491       if (!emecElement) std::abort();
 
  493       unsigned int nelec = 
cell->getNumElectrodes();
 
  494       unsigned int ngap = 2*nelec;
 
  496       for (
unsigned int i=0;
i<nelec;
i++) {
 
  498     for (
unsigned int igap=0;igap<2;igap++) {
 
  502     auto hvIt=voltage.find(
hvline);
 
  503     if(hvIt != voltage.end()) { 
 
  506         curr=hvIt->second.curr;
 
  515         if(curr > 0.) curr *= uAkOhm * rValues[ridx]; 
else curr = 0.;
 
  516         ATH_MSG_VERBOSE(
"channel. "<<std::hex<<
id.get_identifier32()<<std::dec <<
" hvline: "<<
hvline<<
" curr. " << curr << 
" R: "<<rValues[ridx]);
 
  520         for (
unsigned int ii=0;ii<listElec.size();ii++) {
 
  521           if (listElec[ii]==(2*
i+igap) && listElec[ii]<hasPathologyEM[
index].
size() && hasPathologyEM[
index][listElec[ii]]) {
 
  528           hv=((hasPathologyEM[
index][listElec[ii]]&0xFFF0)>>4);
 
  545       if (!emecElement) std::abort();
 
  550       for (
unsigned int igap=0;igap<2;igap++) {
 
  554     auto hvIt=voltage.find(
hvline);
 
  555     if(hvIt != voltage.end()) { 
 
  558         curr=hvIt->second.curr;
 
  567         if(curr >0.) curr *= uAkOhm * rValues[ridx]; 
else curr=0.;
 
  568         ATH_MSG_VERBOSE(
"channel. "<<std::hex<<
id.get_identifier32()<<std::dec <<
" hvline: "<<
hvline<<
" curr. " << curr << 
" R: "<<rValues[ridx]);
 
  578       ATH_MSG_ERROR(
"This could not be, what happened with EM identifiers ?");
 
  579       return StatusCode::FAILURE;
 
  588     bool hasPathology=
false;
 
  589     if (
index<hasPathologyHEC.size()) {
 
  590      if (!hasPathologyHEC[
index].empty()) {
 
  596     if (!hecElement) std::abort();
 
  598     unsigned int nsubgaps = 
cell->getNumSubgaps();
 
  599     float wt = 1./nsubgaps;
 
  601     for (
unsigned int i=0;
i<nsubgaps;
i++) {
 
  606       auto hvIt=voltage.find(
hvline);
 
  607       if(hvIt != voltage.end()) { 
 
  610       curr=hvIt->second.curr;
 
  620       if(curr > 0.) curr *= uAkOhm * rValues[ridx]; 
else curr = 0.;
 
  621       ATH_MSG_VERBOSE(
"channel. "<<std::hex<<
id.get_identifier32()<<std::dec <<
" hvline: "<<
hvline<<
" cur. " << curr << 
" R: "<<rValues[ridx]);
 
  625       for (
unsigned int ii=0;ii<listElec.size();ii++) {
 
  626         if (listElec[ii]==
i && listElec[ii]<hasPathologyHEC[
index].
size() && hasPathologyHEC[
index][listElec[ii]]) {
 
  651     bool hasPathology=
false;
 
  652     if (
index<hasPathologyFCAL.size()) {
 
  653       if (!hasPathologyFCAL[
index].empty()) {
 
  660     if (!fcalElement) std::abort();
 
  662     unsigned int nlines = 
tile->getNumHVLines();
 
  663     unsigned int nlines_found=0;
 
  664     for (
unsigned int i=0;
i<nlines;
i++) {
 
  666       if (
line) nlines_found++;
 
  668     if (nlines_found>0) {
 
  669       float wt = 1./nlines_found;
 
  671       for (
unsigned int i=0;
i<nlines;
i++) {
 
  674     unsigned int hvline = 
line->hvLineNo(hvCabling);
 
  677     auto hvIt=voltage.find(
hvline);
 
  678     if(hvIt != voltage.end()) { 
 
  681       if(rValues && useCurrent) { 
 
  682         curr=hvIt->second.curr;
 
  692         if(curr > 0.) curr *= uAkOhm * rValues[ridx]; 
else curr = 0.;
 
  693         ATH_MSG_VERBOSE(
"channel. "<<std::hex<<
id.get_identifier32()<<std::dec <<
" hvline: "<<
hvline<<
" curr." << curr << 
" R: "<<rValues[ridx]);
 
  697         for (
unsigned int ii=0;ii<listElec.size();ii++) {
 
  698           if (listElec[ii]==
i && listElec[ii]<hasPathologyFCAL[
index].
size() && hasPathologyFCAL[
index][listElec[ii]]) {
 
  705           hv=((hasPathologyFCAL[
index][listElec[ii]]&0xFFF0)>>4);
 
  721   return StatusCode::SUCCESS; 
 
  726   for (
unsigned int i=0;
i<
v.size();
i++) {
 
  727     if (std::fabs(hv-
v[
i].hv) <0.1) {
 
  734     v.emplace_back(hv,wt);
 
  741     std::vector<unsigned int> myList;
 
  745       if (electPath.
cellID == (
unsigned int)(
id.get_identifier32().get_compact())) {
 
  746           myList.push_back(electPath.
electInd);
 
  761   for(
const auto *attrlist : fldvec) { 
 
  765     for(;citr!=citr_e;++citr) {
 
  766       const unsigned chan=citr->first;
 
  768       const coral::Attribute& attr=((citr)->
second)[
"R_VMEAS"];
 
  770       if (!attr.isNull()) voltage=attr.data<
float>(); 
 
  771       const coral::Attribute& attrc=((citr)->
second)[
"R_IMEAS"];
 
  773       if (!attrc.isNull()) 
current=attrc.data<
float>(); 
 
  781   return StatusCode::SUCCESS;
 
  808         float phi_min=+30.,phi_max=-30.;
 
  810         bool are_previous_HV_affected=
false;
 
  811             bool are_previous_HV_dead=
false;
 
  812         for (
unsigned int ielec=0;ielec<32;ielec++) { 
 
  815           double hv[2]={0.,0.};
 
  816           for (
unsigned int iGap=0;iGap<2;iGap++) { 
 
  818         auto hvIt=voltage.find(
hvline);
 
  819         if(hvIt == voltage.end()) { 
 
  823         hv[iGap]=hvIt->second.hv;
 
  826               ATH_MSG_VERBOSE(
" electrode HV " << ielec << 
" " << electrode.
getPhi() << 
" "<< hv[0] << 
" " << hv[1] );
 
  831               bool isAffected=
false;
 
  836               if (are_previous_HV_dead && !isDead) {
 
  837                  are_previous_HV_dead=
false;
 
  838                  ATH_MSG_VERBOSE(
" -- end dead region " << eta_min << 
" " << eta_max << 
" " <<phi_min << 
" " << phi_max);
 
  840                  vAffected->push_back(current_CaloAffectedRegionInfo);
 
  844               if (are_previous_HV_affected && !isAffected) {
 
  845                  are_previous_HV_affected=
false;
 
  846                  ATH_MSG_VERBOSE(
" -- end affected region " << eta_min << 
" " << eta_max << 
" " <<phi_min << 
" " << phi_max);
 
  848                  vAffected->push_back(current_CaloAffectedRegionInfo);
 
  852                  if (!are_previous_HV_dead) {
 
  855                   ATH_MSG_VERBOSE(
" -- start dead region " << eta_min << 
" " << eta_max << 
" " << phi_min << 
" " <<phi_max);
 
  856                   are_previous_HV_dead = 
true;
 
  865                  if (!are_previous_HV_affected) {
 
  868                   ATH_MSG_VERBOSE(
" -- start affected region " << eta_min << 
" " << eta_max << 
" " << phi_min << 
" " <<phi_max);
 
  869                   are_previous_HV_affected = 
true;
 
  873                   ATH_MSG_VERBOSE(
" extend affected region " << phi_min << 
" " << phi_max);
 
  879         if (are_previous_HV_affected) { 
 
  880               ATH_MSG_VERBOSE(
"  -- finish affected region after electrode loop " << eta_min << 
" " << eta_max << 
" " << phi_min << 
" " <<phi_max);
 
  882           vAffected->push_back(current_CaloAffectedRegionInfo);       
 
  884             if (are_previous_HV_dead) {
 
  885               ATH_MSG_VERBOSE(
"  -- finish dead region after electrode loop " << eta_min << 
" " << eta_max << 
" " << phi_min << 
" " <<phi_max);
 
  887               vAffected->push_back(current_CaloAffectedRegionInfo);
 
  903             for (
int iGap=0;iGap<2;iGap++) {
 
  905           auto hvIt=voltage.find(
hvline);
 
  906           if(hvIt == voltage.end()) { 
 
  910           hv[iGap]=hvIt->second.hv;
 
  916             ATH_MSG_VERBOSE(
"  HV " <<  hv[0] << 
" " << hv[1] << 
" " << 
"  etamin,etamax,phimin,phimax " << eta_min << 
" " << eta_max << 
" " << phi_min << 
" " << phi_max);
 
  921             bool isAffected=
false;
 
  927               vAffected->push_back(current_CaloAffectedRegionInfo);             
 
  931               vAffected->push_back(current_CaloAffectedRegionInfo);
 
  938      return StatusCode::FAILURE;
 
  940   return StatusCode::SUCCESS;
 
  967             ATH_MSG_VERBOSE(
"iSide,iPhi,iSector,iEta " << iSide << 
" " << 
iPhi << 
" " << iSector << 
" "  
  968                           << 
iEta << 
" eta_min , eta_max " << eta_min << 
" " << eta_max );
 
  971         float phi_min=+30.,phi_max=-30.;
 
  973         bool are_previous_HV_affected=
false;
 
  974             bool are_previous_HV_dead=
false;
 
  979           for (
unsigned int iGap=0;iGap<2;iGap++) { 
 
  981         auto hvIt=voltage.find(
hvline);
 
  982         if(hvIt == voltage.end()) { 
 
  986         hv[iGap]=hvIt->second.hv;
 
  993               bool isAffected=
false;
 
  996                             << 
" " << hv[1] << 
" " << 
" isDead/isAffected " << isDead << 
" " << isAffected );
 
  999               if (are_previous_HV_dead && !isDead) {
 
 1000                  are_previous_HV_dead=
false;
 
 1001                  ATH_MSG_VERBOSE(
" -- end dead region " << eta_min << 
" " << eta_max << 
" " <<phi_min << 
" " << phi_max);
 
 1003                  vAffected->push_back(current_CaloAffectedRegionInfo);
 
 1007               if (are_previous_HV_affected && !isAffected) {
 
 1008                  are_previous_HV_affected=
false;
 
 1009                  ATH_MSG_VERBOSE(
" -- end affected region " << eta_min << 
" " << eta_max << 
" " <<phi_min << 
" " << phi_max);
 
 1011                  vAffected->push_back(current_CaloAffectedRegionInfo);
 
 1015                  if (!are_previous_HV_dead) {
 
 1018                   are_previous_HV_dead = 
true;
 
 1019                   ATH_MSG_VERBOSE(
" -- start dead region " << eta_min << 
" " << eta_max << 
" " << phi_min << 
" " <<phi_max);
 
 1023                   ATH_MSG_VERBOSE(
"  extend affected region " << phi_min << 
" " << phi_max);
 
 1028                  if (!are_previous_HV_affected) {
 
 1031                   are_previous_HV_affected = 
true;
 
 1032                   ATH_MSG_VERBOSE(
" -- start affected region " << eta_min << 
" " << eta_max << 
" " << phi_min << 
" " <<phi_max);
 
 1036                   ATH_MSG_VERBOSE(
" extend affected region " << phi_min << 
" " << phi_max);
 
 1042         if (are_previous_HV_affected) { 
 
 1046               ATH_MSG_VERBOSE(
"   - finih affected region after electrode loop " << eta_min << 
" " << eta_max 
 
 1047                             << 
" " << phi_max << 
" " <<phi_max);
 
 1049           vAffected->push_back(current_CaloAffectedRegionInfo);       
 
 1051             if (are_previous_HV_dead) {
 
 1052               ATH_MSG_VERBOSE(
" -- finish dead region after electrode loop " << eta_min << 
" " << eta_max << 
" " << phi_max << 
" " <<phi_max);
 
 1054               vAffected->push_back(current_CaloAffectedRegionInfo);
 
 1068             for (
int iGap=0;iGap<2;iGap++) {
 
 1070           auto hvIt=voltage.find(
hvline);
 
 1071         if(hvIt == voltage.end()) { 
 
 1075         hv[iGap]=hvIt->second.hv;
 
 1081             ATH_MSG_VERBOSE(
"iSide,iPhi" << iSide << 
" " << 
iPhi << 
"  HV " <<  hv[0] << 
" " << hv[1] << 
" " 
 1082                           << 
"  etamin,etamax,phimin,phimax " << eta_min << 
" " << eta_max << 
" "  
 1083                           << phi_min << 
" " << phi_max);
 
 1088             bool isAffected=
false;
 
 1094               vAffected->push_back(current_CaloAffectedRegionInfo);             
 
 1098               vAffected->push_back(current_CaloAffectedRegionInfo);
 
 1104      return StatusCode::FAILURE;
 
 1106   return StatusCode::SUCCESS;
 
 1131             ATH_MSG_VERBOSE(
"iSide,iPhi,iSector,iEta " << iSide << 
" " << 
iPhi << 
" " << iSector << 
" "  
 1132                           << 
iEta << 
" eta_min , eta_max " << eta_min << 
" " << eta_max);
 
 1134         float phi_min=+30.,phi_max=-30.;
 
 1136         bool are_previous_HV_affected=0;
 
 1137         bool are_previous_HV_dead=0;
 
 1142           for (
unsigned int iGap=0;iGap<2;iGap++) { 
 
 1144         auto hvIt=voltage.find(
hvline);
 
 1145         if(hvIt == voltage.end()) { 
 
 1149         hv[iGap]=hvIt->second.hv;
 
 1156               bool isAffected=
false;
 
 1159                             << hv[0] << 
" " << hv[1] << 
" " << 
" isDead, isAffected "  
 1160                             << isDead << 
" " << isAffected);
 
 1163               if (are_previous_HV_dead && !isDead) {
 
 1164                  are_previous_HV_dead=
false;
 
 1165                  ATH_MSG_VERBOSE(
" -- end dead region " << eta_min << 
" " << eta_max << 
" " <<phi_min << 
" " << phi_max);
 
 1167                  vAffected->push_back(current_CaloAffectedRegionInfo);
 
 1171               if (are_previous_HV_affected && !isAffected) {
 
 1172                  are_previous_HV_affected=
false;
 
 1173                  ATH_MSG_VERBOSE(
" -- end affected region " << eta_min << 
" " << eta_max << 
" " <<phi_min << 
" " << phi_max);
 
 1175                  vAffected->push_back(current_CaloAffectedRegionInfo);
 
 1179                  if (!are_previous_HV_dead) {
 
 1182                   ATH_MSG_VERBOSE(
" -- start dead region " << phi_min << 
" " << phi_max);
 
 1183                   are_previous_HV_dead = 
true;
 
 1192                  if (!are_previous_HV_affected) {
 
 1195                   are_previous_HV_affected = 
true;
 
 1196                   ATH_MSG_VERBOSE(
" -- start affected region " << phi_min << 
" " << phi_max);
 
 1200                    ATH_MSG_VERBOSE(
"  extend affected region " << phi_min << 
" " << phi_max);
 
 1206         if (are_previous_HV_affected) { 
 
 1210               ATH_MSG_VERBOSE(
"   - finish affected region after electrode loop " << eta_min << 
" "  
 1211                             << eta_max << 
" " << phi_max << 
" " <<phi_max);
 
 1213           vAffected->push_back(current_CaloAffectedRegionInfo);       
 
 1215             if (are_previous_HV_dead) {
 
 1216               ATH_MSG_VERBOSE(
"    - end dead region after electrode loop " << eta_min << 
" " << eta_max << 
" " << phi_max << 
" " <<phi_max);
 
 1218               vAffected->push_back(current_CaloAffectedRegionInfo);
 
 1226      return StatusCode::FAILURE;
 
 1228   return StatusCode::SUCCESS;
 
 1237   float etamax_layer[4]={3.3,3.1,3.1,3.3};
 
 1238   float etamin_layer[4]={1.5,1.5,1.6,1.7};
 
 1250           float eta_min,eta_max;
 
 1252            eta_min = etamin_layer[iSampling];
 
 1253            eta_max = etamax_layer[iSampling];
 
 1255            eta_min = -1.*etamax_layer[iSampling];
 
 1256            eta_max = -1.*etamin_layer[iSampling];
 
 1263       for (
unsigned int iGap=0;iGap<hvMod.
getNumSubgaps();iGap++) {
 
 1266         auto hvIt=voltage.find(
hvline);
 
 1267         if(hvIt == voltage.end()) { 
 
 1271         if(iGap<4) hv[iGap]=hvIt->second.hv;
 
 1278           bool isAffected=
false;
 
 1281           ATH_MSG_VERBOSE(
" HV values " << hv[0] << 
" " << hv[1] << 
" " << hv[2] << 
" " << hv[3] << 
" "  
 1282                         << 
" isDead/isAffected " << isDead << 
" " << isAffected);
 
 1289             ATH_MSG_VERBOSE(
" new dead region " << eta_min << 
" " << eta_max << 
" " << phiMin << 
" " << phiMax << 
" layer " << 8+iSampling);
 
 1291         vAffected->push_back(current_CaloAffectedRegionInfo);
 
 1294             ATH_MSG_VERBOSE(
" new affected region " << eta_min << 
" " << eta_max << 
" " << phiMin << 
" " << phiMax << 
" layer " << 8+iSampling);
 
 1296             vAffected->push_back(current_CaloAffectedRegionInfo);
 
 1304      return StatusCode::FAILURE;
 
 1306   return StatusCode::SUCCESS;
 
 1320       float eta_min=3.1,eta_max=4.9;
 
 1326         float HVnominal = 
HV_nominal(
"FCAL",(
float)(iSampling));
 
 1330           ATH_MSG_VERBOSE(
" FCAL HVModule side,sampling,sector " << iSide << 
" " << iSampling << 
" "  
 1331                         << iSector << 
"   HV nominal " << HVnominal);
 
 1336           float phi_min = ((
float)(iSector))*dphi;
 
 1340           ATH_MSG_VERBOSE(
" eta_min,eta_max,phi_min,phi_max " << eta_min << 
" " << eta_max << 
" " << phi_min 
 
 1341                         << 
" " << phi_max << 
"   number of lines " << hvMod.
getNumHVLines());
 
 1343       for (
unsigned int iLine=0;iLine<hvMod.
getNumHVLines();iLine++) {
 
 1345         unsigned int ihvline = 
hvline.hvLineNo(hvCabling);
 
 1346         auto hvIt=voltage.find(ihvline);
 
 1347         if(hvIt == voltage.end()) { 
 
 1348           ATH_MSG_WARNING(
"Do not have hvline: "<<ihvline<<
" in LArHVData ! Assuming missing DCS data");
 
 1351         if (iLine<4) hv[iLine]=hvIt->second.hv;
 
 1357           bool isAffected=
false;
 
 1360           ATH_MSG_VERBOSE(
" HV values " << hv[0] << 
" " << hv[1] << 
" " << hv[2] << 
" " << hv[3] <<  
" "  
 1361                         << 
" isDead/isAffected " << isDead << 
" " << isAffected);
 
 1367         vAffected->push_back(current_CaloAffectedRegionInfo);         
 
 1372             vAffected->push_back(current_CaloAffectedRegionInfo);
 
 1379      return StatusCode::FAILURE;
 
 1381   return StatusCode::SUCCESS;
 
 1393     bool IsMissingFeb=(bfCont->
status(febId).deadAll() || bfCont->
status(febId).deadReadout());
 
 1397       bool is_additive1=0; 
 
 1399       int layer_min=+30,layer_max=-30;
 
 1400       float eta_min=+30,eta_max=-30;
 
 1401       float phi_min=+30,phi_max=-30;
 
 1403       int layer_min_additive1=+30,layer_max_additive1=-30;
 
 1404       float eta_min_additive1=+30,eta_max_additive1=-30;
 
 1405       float phi_min_additive1=+30,phi_max_additive1=-30;
 
 1409       for (
int icha=0;icha<chans_per_feb;icha++) {   
 
 1417       float current_eta=caloddElement->
eta();
 
 1418       float current_eta_low=caloddElement->
eta()-0.5*caloddElement->
deta();
 
 1419       float current_eta_high=caloddElement->
eta()+0.5*caloddElement->
deta();
 
 1420       float current_phi_low=caloddElement->
phi()-0.5*caloddElement->
dphi();
 
 1421       float current_phi_high=caloddElement->
phi()+0.5*caloddElement->
dphi();
 
 1423       if (caloddElement->
is_lar_em_barrel() && caloddElement->
getLayer()==3 && fabs(current_eta)>0.79 && fabs(current_eta)<1.33) { 
 
 1426         if (current_layer<layer_min_additive1)
 
 1427           layer_min_additive1=current_layer;
 
 1428         if (current_layer>layer_max_additive1)
 
 1429           layer_max_additive1=current_layer;
 
 1431         if (current_eta_low<eta_min_additive1)
 
 1432           eta_min_additive1=current_eta_low;
 
 1433         if (current_eta_high>eta_max_additive1)
 
 1434           eta_max_additive1=current_eta_high;
 
 1437             extendPhiRegion(current_phi_high,phi_min_additive1,phi_max_additive1);
 
 1443         if (current_layer<layer_min)
 
 1444           layer_min=current_layer;
 
 1445         if (current_layer>layer_max)
 
 1446           layer_max=current_layer;
 
 1448         if (current_eta_low<eta_min)
 
 1449           eta_min=current_eta_low;
 
 1450         if (current_eta_high>eta_max)
 
 1451           eta_max=current_eta_high;
 
 1462     vAffected->push_back(current_CaloAffectedRegionInfo);
 
 1467     vAffected->push_back(current_additive1_CaloAffectedRegionInfo);
 
 1471   return StatusCode::SUCCESS;
 
 1476   if (strcmp(identification,
"EMBPS")==0) 
 
 1478   else if (strcmp(identification,
"EMECPS")==0)
 
 1480   else if (strcmp(identification,
"EMB")==0)
 
 1482   else if (strcmp(identification,
"EMEC")==0) {
 
 1483     if ( fabs(myparameter)<1.5 )
 
 1485     else if (fabs(myparameter)<1.6)
 
 1487     else if (fabs(myparameter)<1.8 )
 
 1489     else if ( fabs(myparameter) < 2.0 )
 
 1491     else if ( fabs(myparameter) < 2.1 )
 
 1493     else if ( fabs(myparameter) < 2.3 )
 
 1495     else if ( fabs(myparameter) < 2.5 )
 
 1497     else if ( fabs(myparameter) < 2.8 )
 
 1501   else if (strcmp(identification,
"HEC")==0) {
 
 1504   else if (strcmp(identification,
"FCAL")==0) {
 
 1505     if (myparameter<0.5)
 
 1507     else if (myparameter<1.5)
 
 1509     else if (myparameter<2.5)
 
 1523   if (phi_min>10. || phi_max<-10.) {
 
 1529   bool isInRegion=
false;
 
 1530   if (phi_min<phi_max) {
 
 1531      if (
phi>phi_min && 
phi<phi_max) isInRegion=
true;
 
 1534      if (
phi>phi_min || 
phi<phi_max) isInRegion=
true;
 
 1536   if (isInRegion) 
return;
 
 1540   if (fabs(dphi1)<fabs(dphi2) )