diff --git a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/CMakeLists.txt b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/CMakeLists.txt index 92013e6daa384bb493069b37a5a9873127d259a9..9665ffd0f1bc86df969b27aa812839be16298fed 100644 --- a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/CMakeLists.txt +++ b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/CMakeLists.txt @@ -15,6 +15,8 @@ atlas_depends_on_subdirs( InnerDetector/InDetConditions/InDetByteStreamErrors InnerDetector/InDetConditions/InDetConditionsSummaryService InnerDetector/InDetConditions/PixelConditionsData + InnerDetector/InDetConditions/PixelConditionsTools + InnerDetector/InDetConditions/SiPropertiesSvc PRIVATE Control/SGTools Control/StoreGate @@ -24,7 +26,6 @@ atlas_depends_on_subdirs( DetectorDescription/GeoModel/GeoModelUtilities DetectorDescription/Identifier DetectorDescription/DetDescrCond/DetDescrConditions - InnerDetector/InDetConditions/PixelConditionsTools InnerDetector/InDetDetDescr/InDetIdentifier InnerDetector/InDetDetDescr/InDetReadoutGeometry InnerDetector/InDetDetDescr/PixelCabling @@ -52,7 +53,7 @@ atlas_add_component( PixelConditionsAlgorithms ${CLHEP_LIBRARIES} AthenaBaseComps AthenaKernel AthenaPoolUtilities GaudiKernel PixelConditionsData SGTools StoreGateLib CoralDB GeoModelUtilities Identifier InDetIdentifier InDetReadoutGeometry - PixelCablingLib PixelConditionsAlgorithmsLib PathResolver ) + PixelCablingLib PixelConditionsAlgorithmsLib SiPropertiesSvcLib PathResolver ) # Install files from the package: #atlas_install_joboptions( share/*.py ) diff --git a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelConfigCondAlg.cxx b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelConfigCondAlg.cxx index d3972db0c13a24403186af316652fb72825f315d..68bb88de45ac9ccfb2150f33fbcc463a08e7cfb0 100644 --- a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelConfigCondAlg.cxx +++ b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelConfigCondAlg.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration */ #include "PixelConfigCondAlg.h" @@ -156,8 +156,8 @@ StatusCode PixelConfigCondAlg::execute(const EventContext& ctx) const { int moduleStatus = std::atoi(moduleStringStatus[0].c_str()); int chipStatus = std::atoi(moduleStringStatus[1].c_str()); - writeCdo -> setModuleStatus(moduleHash, moduleStatus); - writeCdo -> setChipStatus(moduleHash, chipStatus); + if (moduleStatus>0) { writeCdo->setModuleStatus(moduleHash, moduleStatus); } + if (chipStatus>0) { writeCdo->setChipStatus(moduleHash, chipStatus); } } } // RUN-1, RUN-2 format @@ -179,15 +179,11 @@ StatusCode PixelConfigCondAlg::execute(const EventContext& ctx) const { int moduleStatus = std::atoi(moduleStringStatus[0].c_str()); int chipStatus = std::atoi(moduleStringStatus[1].c_str()); - writeCdo -> setModuleStatus(moduleHash, moduleStatus); - writeCdo -> setChipStatus(moduleHash, chipStatus); + if (moduleStatus>0) { writeCdo->setModuleStatus(moduleHash, moduleStatus); } + if (chipStatus>0) { writeCdo->setChipStatus(moduleHash, chipStatus); } } else { ATH_MSG_WARNING("Can not retrieve " << channelNumber); - for (int i=0; i<2048; i++) { - writeCdo -> setModuleStatus(i, 0); - writeCdo -> setChipStatus(i, 0); - } } } } diff --git a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelDCSCondHVAlg.cxx b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelDCSCondHVAlg.cxx index 53972fc9f67452b02c172899921e04c9c38d21dd..80722855be2baaff6db2e44e946694d0bbb3e401 100644 --- a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelDCSCondHVAlg.cxx +++ b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelDCSCondHVAlg.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration */ #include "PixelDCSCondHVAlg.h" @@ -9,13 +9,20 @@ PixelDCSCondHVAlg::PixelDCSCondHVAlg(const std::string& name, ISvcLocator* pSvcLocator): ::AthReentrantAlgorithm(name, pSvcLocator), + m_pixelID(nullptr), + m_useConditions(true), + m_defaultBiasVoltage(150.0), m_condSvc("CondSvc", name) { + declareProperty("UseConditions", m_useConditions); + declareProperty("BiasVoltage", m_defaultBiasVoltage, "Default bias voltage in Volt." ); } StatusCode PixelDCSCondHVAlg::initialize() { ATH_MSG_DEBUG("PixelDCSCondHVAlg::initialize()"); + ATH_CHECK(detStore()->retrieve(m_pixelID,"PixelID")); + ATH_CHECK(m_condSvc.retrieve()); ATH_CHECK(m_readKey.initialize()); @@ -30,7 +37,7 @@ StatusCode PixelDCSCondHVAlg::initialize() { StatusCode PixelDCSCondHVAlg::execute(const EventContext& ctx) const { ATH_MSG_DEBUG("PixelDCSCondHVAlg::execute()"); - SG::WriteCondHandle<PixelDCSConditionsData> writeHandle(m_writeKey, ctx); + SG::WriteCondHandle<PixelModuleData> writeHandle(m_writeKey, ctx); if (writeHandle.isValid()) { ATH_MSG_DEBUG("CondHandle " << writeHandle.fullKey() << " is already valid.. In theory this should not be called, but may happen if multiple concurrent events are being processed out of order."); return StatusCode::SUCCESS; @@ -52,25 +59,37 @@ StatusCode PixelDCSCondHVAlg::execute(const EventContext& ctx) const { ATH_MSG_INFO("Range of input is " << rangeW); // Construct the output Cond Object and fill it in - std::unique_ptr<PixelDCSConditionsData> writeCdo(std::make_unique<PixelDCSConditionsData>()); + std::unique_ptr<PixelModuleData> writeCdo(std::make_unique<PixelModuleData>()); // Read HV info std::string param("HV"); - for (CondAttrListCollection::const_iterator attrList=readCdo->begin(); attrList!=readCdo->end(); ++attrList) { - const CondAttrListCollection::ChanNum &channelNumber = attrList->first; - const CondAttrListCollection::AttributeList &payload = attrList->second; - if (payload.exists(param) and not payload[param].isNull()) { - float val = payload[param].data<float>(); - writeCdo -> setValue(channelNumber, val); - } - else { - ATH_MSG_WARNING(param << " does not exist for ChanNum " << channelNumber); - writeCdo -> setValue(channelNumber, 9999.0); + if (m_useConditions) { + for (CondAttrListCollection::const_iterator attrList=readCdo->begin(); attrList!=readCdo->end(); ++attrList) { + const CondAttrListCollection::ChanNum &channelNumber = attrList->first; + const CondAttrListCollection::AttributeList &payload = attrList->second; + if (payload.exists(param) and not payload[param].isNull()) { + float val = payload[param].data<float>(); + if (val>1000.0 || val<-1000.0) { + writeCdo -> setBiasVoltage((int)channelNumber, m_defaultBiasVoltage); + } + else { + writeCdo -> setBiasVoltage((int)channelNumber, val); + } + } + else { + ATH_MSG_WARNING(param << " does not exist for ChanNum " << channelNumber); + writeCdo -> setBiasVoltage((int)channelNumber, m_defaultBiasVoltage); + } + } + } + else { + for (int i=0; i<(int)m_pixelID->wafer_hash_max(); i++) { + writeCdo -> setBiasVoltage(i, m_defaultBiasVoltage); } } if (writeHandle.record(rangeW, std::move(writeCdo)).isFailure()) { - ATH_MSG_FATAL("Could not record PixelDCSConditionsData " << writeHandle.key() << " with EventRange " << rangeW << " into Conditions Store"); + ATH_MSG_FATAL("Could not record PixelModuleData " << writeHandle.key() << " with EventRange " << rangeW << " into Conditions Store"); return StatusCode::FAILURE; } ATH_MSG_INFO("recorded new CDO " << writeHandle.key() << " with range " << rangeW << " into Conditions Store"); diff --git a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelDCSCondHVAlg.h b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelDCSCondHVAlg.h index fa71953fa1115643e30bafff85952efc9fd8b319..e800ba86984107e8bf72f7d9d5f2dde51bb93e23 100644 --- a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelDCSCondHVAlg.h +++ b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelDCSCondHVAlg.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration */ #ifndef PIXELDCSCONDHVALG @@ -11,7 +11,9 @@ #include "AthenaPoolUtilities/CondAttrListCollection.h" #include "StoreGate/WriteCondHandleKey.h" -#include "PixelConditionsData/PixelDCSConditionsData.h" +#include "PixelConditionsData/PixelModuleData.h" + +#include "InDetIdentifier/PixelID.h" #include "GaudiKernel/ICondSvc.h" #include "GaudiKernel/Property.h" @@ -26,8 +28,13 @@ class PixelDCSCondHVAlg : public AthReentrantAlgorithm { virtual StatusCode finalize() override; private: + const PixelID* m_pixelID; + + bool m_useConditions; + float m_defaultBiasVoltage; + SG::ReadCondHandleKey<CondAttrListCollection> m_readKey{this, "ReadKey", "/PIXEL/DCS/HV", "Key of input (raw) HV conditions folder"}; - SG::WriteCondHandleKey<PixelDCSConditionsData> m_writeKey{this, "WriteKey", "PixelDCSHVCondData", "Key of output (derived) HV conditions data"}; + SG::WriteCondHandleKey<PixelModuleData> m_writeKey{this, "WriteKey", "PixelDCSHVCondData", "Key of output (derived) HV conditions data"}; ServiceHandle<ICondSvc> m_condSvc; }; diff --git a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelDCSCondStateAlg.cxx b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelDCSCondStateAlg.cxx index 431ae213043f5fd267336946243346fcc76dc87e..960be695123cf34114dc1c8bf6c74bf9e9e3478f 100644 --- a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelDCSCondStateAlg.cxx +++ b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelDCSCondStateAlg.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration */ #include "PixelDCSCondStateAlg.h" @@ -40,95 +40,109 @@ StatusCode PixelDCSCondStateAlg::execute(const EventContext& ctx) const { //=========== // FSM_STATE //=========== - SG::WriteCondHandle<PixelDCSConditionsData> writeHandleState(m_writeKeyState, ctx); + SG::WriteCondHandle<PixelModuleData> writeHandleState(m_writeKeyState, ctx); + if (writeHandleState.isValid()) { ATH_MSG_DEBUG("CondHandle " << writeHandleState.fullKey() << " is already valid.. In theory this should not be called, but may happen if multiple concurrent events are being processed out of order."); - }else{ - SG::ReadCondHandle<CondAttrListCollection> readHandleState(m_readKeyState, ctx); - const CondAttrListCollection* readCdoState(*readHandleState); - if (readCdoState==nullptr) { - ATH_MSG_FATAL("Null pointer to the read conditions object (state)"); - return StatusCode::FAILURE; - } - // Get the validitiy range (state) - EventIDRange rangeState; - if (not readHandleState.range(rangeState)) { - ATH_MSG_FATAL("Failed to retrieve validity range for " << readHandleState.key()); - return StatusCode::FAILURE; - } - ATH_MSG_INFO("Size of CondAttrListCollection " << readHandleState.fullKey() << " readCdo->size()= " << readCdoState->size()); - ATH_MSG_INFO("Range of state input is " << rangeState); - - // Construct the output Cond Object and fill it in - std::unique_ptr<PixelDCSConditionsData> writeCdoState(std::make_unique<PixelDCSConditionsData>()); - - // Read state info - std::string paramState = "FSM_state"; - for (CondAttrListCollection::const_iterator attrListState=readCdoState->begin(); attrListState!=readCdoState->end(); ++attrListState) { - const CondAttrListCollection::ChanNum &channelNumber = attrListState->first; - const CondAttrListCollection::AttributeList &payload = attrListState->second; - if (payload.exists(paramState.c_str()) and not payload[paramState.c_str()].isNull()) { - const std::string &val = payload[paramState.c_str()].data<std::string>(); - writeCdoState -> setValue(channelNumber, val); - } - else { - ATH_MSG_WARNING(paramState << " does not exist for ChanNum " << channelNumber); - writeCdoState -> setValue(channelNumber, "NO_DATA"); - } - } - - if (writeHandleState.record(rangeState, std::move(writeCdoState)).isFailure()) { - ATH_MSG_FATAL("Could not record PixelDCSConditionsData " << writeHandleState.key() << " with EventRange " << rangeState << " into Conditions Store"); - return StatusCode::FAILURE; - } - ATH_MSG_INFO("recorded new CDO " << writeHandleState.key() << " with range " << rangeState << " into Conditions Store"); } + else { + SG::ReadCondHandle<CondAttrListCollection> readHandleState(m_readKeyState, ctx); + const CondAttrListCollection* readCdoState(*readHandleState); + if (readCdoState==nullptr) { + ATH_MSG_FATAL("Null pointer to the read conditions object (state)"); + return StatusCode::FAILURE; + } + // Get the validitiy range (state) + EventIDRange rangeState; + if (not readHandleState.range(rangeState)) { + ATH_MSG_FATAL("Failed to retrieve validity range for " << readHandleState.key()); + return StatusCode::FAILURE; + } + ATH_MSG_INFO("Size of CondAttrListCollection " << readHandleState.fullKey() << " readCdo->size()= " << readCdoState->size()); + ATH_MSG_INFO("Range of state input is " << rangeState); + + // Construct the output Cond Object and fill it in + std::unique_ptr<PixelModuleData> writeCdoState(std::make_unique<PixelModuleData>()); + + // Read state info + std::string paramState = "FSM_state"; + for (CondAttrListCollection::const_iterator attrListState=readCdoState->begin(); attrListState!=readCdoState->end(); ++attrListState) { + const CondAttrListCollection::ChanNum &channelNumber = attrListState->first; + const CondAttrListCollection::AttributeList &payload = attrListState->second; + if (payload.exists(paramState.c_str()) and not payload[paramState.c_str()].isNull()) { + std::string val = payload[paramState.c_str()].data<std::string>(); + if (val=="READY") { writeCdoState->setModuleStatus(channelNumber,PixelModuleData::DCSModuleState::READY); } + else if (val=="ON") { writeCdoState->setModuleStatus(channelNumber,PixelModuleData::DCSModuleState::ON); } + else if (val=="UNKNOWN") { writeCdoState->setModuleStatus(channelNumber,PixelModuleData::DCSModuleState::UNKNOWN); } + else if (val=="TRANSITION") { writeCdoState->setModuleStatus(channelNumber,PixelModuleData::DCSModuleState::TRANSITION); } + else if (val=="UNDEFINED") { writeCdoState->setModuleStatus(channelNumber,PixelModuleData::DCSModuleState::UNDEFINED); } + } + else { + ATH_MSG_WARNING(paramState << " does not exist for ChanNum " << channelNumber); + writeCdoState->setModuleStatus(channelNumber,PixelModuleData::DCSModuleState::NOSTATE); + } + } + + if (writeHandleState.record(rangeState, std::move(writeCdoState)).isFailure()) { + ATH_MSG_FATAL("Could not record PixelModuleData " << writeHandleState.key() << " with EventRange " << rangeState << " into Conditions Store"); + return StatusCode::FAILURE; + } + ATH_MSG_INFO("recorded new CDO " << writeHandleState.key() << " with range " << rangeState << " into Conditions Store"); + } + //============ // FSM_STATUS //============ - SG::WriteCondHandle<PixelDCSConditionsData> writeHandleStatus(m_writeKeyStatus, ctx); + SG::WriteCondHandle<PixelModuleData> writeHandleStatus(m_writeKeyStatus, ctx); + if (writeHandleStatus.isValid()) { ATH_MSG_DEBUG("CondHandle " << writeHandleStatus.fullKey() << " is already valid.. In theory this should not be called, but may happen if multiple concurrent events are being processed out of order."); - }else{ - SG::ReadCondHandle<CondAttrListCollection> readHandleStatus(m_readKeyStatus, ctx); - const CondAttrListCollection* readCdoStatus(*readHandleStatus); - if (readCdoStatus==nullptr) { - ATH_MSG_FATAL("Null pointer to the read conditions object (state)"); - return StatusCode::FAILURE; - } - // Get the validitiy range (state) - EventIDRange rangeStatus; - if (not readHandleStatus.range(rangeStatus)) { - ATH_MSG_FATAL("Failed to retrieve validity range for " << readHandleStatus.key()); - return StatusCode::FAILURE; - } - ATH_MSG_INFO("Size of CondAttrListCollection " << readHandleStatus.fullKey() << " readCdo->size()= " << readCdoStatus->size()); - ATH_MSG_INFO("Range of state input is " << rangeStatus); - - // Construct the output Cond Object and fill it in - std::unique_ptr<PixelDCSConditionsData> writeCdoStatus(std::make_unique<PixelDCSConditionsData>()); - - // Read state info - std::string paramStatus = "FSM_status"; - for (CondAttrListCollection::const_iterator attrListStatus=readCdoStatus->begin(); attrListStatus!=readCdoStatus->end(); ++attrListStatus) { - const CondAttrListCollection::ChanNum &channelNumber = attrListStatus->first; - const CondAttrListCollection::AttributeList &payload = attrListStatus->second; - if (payload.exists(paramStatus.c_str()) and not payload[paramStatus.c_str()].isNull()) { - const std::string &val = payload[paramStatus.c_str()].data<std::string>(); - writeCdoStatus -> setValue(channelNumber, val); - } - else { - ATH_MSG_WARNING(paramStatus << " does not exist for ChanNum " << channelNumber); - writeCdoStatus -> setValue(channelNumber, "NO_DATA"); - } - } - - if (writeHandleStatus.record(rangeStatus, std::move(writeCdoStatus)).isFailure()) { - ATH_MSG_FATAL("Could not record PixelDCSConditionsData " << writeHandleStatus.key() << " with EventRange " << rangeStatus << " into Conditions Store"); - return StatusCode::FAILURE; - } - ATH_MSG_INFO("recorded new CDO " << writeHandleStatus.key() << " with range " << rangeStatus << " into Conditions Store"); } + else { + SG::ReadCondHandle<CondAttrListCollection> readHandleStatus(m_readKeyStatus, ctx); + const CondAttrListCollection* readCdoStatus(*readHandleStatus); + if (readCdoStatus==nullptr) { + ATH_MSG_FATAL("Null pointer to the read conditions object (state)"); + return StatusCode::FAILURE; + } + + // Get the validitiy range (state) + EventIDRange rangeStatus; + if (not readHandleStatus.range(rangeStatus)) { + ATH_MSG_FATAL("Failed to retrieve validity range for " << readHandleStatus.key()); + return StatusCode::FAILURE; + } + ATH_MSG_INFO("Size of CondAttrListCollection " << readHandleStatus.fullKey() << " readCdo->size()= " << readCdoStatus->size()); + ATH_MSG_INFO("Range of state input is " << rangeStatus); + + // Construct the output Cond Object and fill it in + std::unique_ptr<PixelModuleData> writeCdoStatus(std::make_unique<PixelModuleData>()); + + // Read state info + std::string paramStatus = "FSM_status"; + for (CondAttrListCollection::const_iterator attrListStatus=readCdoStatus->begin(); attrListStatus!=readCdoStatus->end(); ++attrListStatus) { + const CondAttrListCollection::ChanNum &channelNumber = attrListStatus->first; + const CondAttrListCollection::AttributeList &payload = attrListStatus->second; + if (payload.exists(paramStatus.c_str()) and not payload[paramStatus.c_str()].isNull()) { + std::string val = payload[paramStatus.c_str()].data<std::string>(); + if (val=="OK") { writeCdoStatus->setModuleStatus(channelNumber,PixelModuleData::DCSModuleStatus::OK); } + else if (val=="WARNING") { writeCdoStatus->setModuleStatus(channelNumber,PixelModuleData::DCSModuleStatus::WARNING); } + else if (val=="ERROR") { writeCdoStatus->setModuleStatus(channelNumber,PixelModuleData::DCSModuleStatus::ERROR); } + else if (val=="FATAL") { writeCdoStatus->setModuleStatus(channelNumber,PixelModuleData::DCSModuleStatus::FATAL); } + } + else { + ATH_MSG_WARNING(paramStatus << " does not exist for ChanNum " << channelNumber); + writeCdoStatus->setModuleStatus(channelNumber,PixelModuleData::DCSModuleStatus::NOSTATUS); + } + } + + if (writeHandleStatus.record(rangeStatus, std::move(writeCdoStatus)).isFailure()) { + ATH_MSG_FATAL("Could not record PixelModuleData " << writeHandleStatus.key() << " with EventRange " << rangeStatus << " into Conditions Store"); + return StatusCode::FAILURE; + } + ATH_MSG_INFO("recorded new CDO " << writeHandleStatus.key() << " with range " << rangeStatus << " into Conditions Store"); + } + return StatusCode::SUCCESS; } diff --git a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelDCSCondStateAlg.h b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelDCSCondStateAlg.h index 546f92d4e5b24a860694aee9873e027b8e48f18b..1e064424d26ae6c50d9ad8f31b4c16b5f94e5bd2 100644 --- a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelDCSCondStateAlg.h +++ b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelDCSCondStateAlg.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration */ #ifndef PIXELDCSCONDSTATEALG @@ -11,7 +11,7 @@ #include "AthenaPoolUtilities/CondAttrListCollection.h" #include "StoreGate/WriteCondHandleKey.h" -#include "PixelConditionsData/PixelDCSConditionsData.h" +#include "PixelConditionsData/PixelModuleData.h" #include "GaudiKernel/ICondSvc.h" #include "GaudiKernel/Property.h" @@ -28,8 +28,9 @@ class PixelDCSCondStateAlg : public AthReentrantAlgorithm { private: SG::ReadCondHandleKey<CondAttrListCollection> m_readKeyState {this, "ReadKeyState", "/PIXEL/DCS/FSMSTATE", "Key of input (raw) State conditions folder"}; SG::ReadCondHandleKey<CondAttrListCollection> m_readKeyStatus {this, "ReadKeyStatus", "/PIXEL/DCS/FSMSTATUS", "Key of input (raw) Status conditions folder"}; - SG::WriteCondHandleKey<PixelDCSConditionsData> m_writeKeyState {this, "WriteKeyState", "PixelDCSStateCondData", "Key of output (derived) State conditions folder"}; - SG::WriteCondHandleKey<PixelDCSConditionsData> m_writeKeyStatus{this, "WriteKeyStatus", "PixelDCSStatusCondData", "Key of output (derived) Status conditions folder"}; + + SG::WriteCondHandleKey<PixelModuleData> m_writeKeyState {this, "WriteKeyState", "PixelDCSStateCondData", "Key of output (derived) State conditions folder"}; + SG::WriteCondHandleKey<PixelModuleData> m_writeKeyStatus{this, "WriteKeyStatus", "PixelDCSStatusCondData", "Key of output (derived) Status conditions folder"}; ServiceHandle<ICondSvc> m_condSvc; }; diff --git a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelDCSCondTempAlg.cxx b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelDCSCondTempAlg.cxx index 46e328a200bd35cc1570dffd34aab43677339e65..e754e7dea80258a7d1d99775e26371585aff3d76 100644 --- a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelDCSCondTempAlg.cxx +++ b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelDCSCondTempAlg.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration */ #include "PixelDCSCondTempAlg.h" @@ -10,13 +10,20 @@ PixelDCSCondTempAlg::PixelDCSCondTempAlg(const std::string& name, ISvcLocator* pSvcLocator): ::AthAlgorithm(name, pSvcLocator), + m_pixelID(nullptr), + m_useConditions(true), + m_defaultTemperature(-7.0), m_condSvc("CondSvc", name) { + declareProperty("UseConditions", m_useConditions); + declareProperty("Temperature", m_defaultTemperature, "Default temperature in Celcius."); } StatusCode PixelDCSCondTempAlg::initialize() { ATH_MSG_DEBUG("PixelDCSCondTempAlg::initialize()"); + ATH_CHECK(detStore()->retrieve(m_pixelID,"PixelID")); + ATH_CHECK(m_condSvc.retrieve()); ATH_CHECK(m_readKey.initialize()); @@ -32,7 +39,7 @@ StatusCode PixelDCSCondTempAlg::initialize() { StatusCode PixelDCSCondTempAlg::execute() { ATH_MSG_DEBUG("PixelDCSCondTempAlg::execute()"); - SG::WriteCondHandle<PixelDCSConditionsData> writeHandle(m_writeKey); + SG::WriteCondHandle<PixelModuleData> writeHandle(m_writeKey); // Do we have a valid Write Cond Handle for current time? if (writeHandle.isValid()) { ATH_MSG_DEBUG("CondHandle " << writeHandle.fullKey() << " is already valid.. In theory this should not be called, but may happen if multiple concurrent events are being processed out of order."); @@ -56,25 +63,37 @@ StatusCode PixelDCSCondTempAlg::execute() { ATH_MSG_INFO("Range of input is " << rangeW); // Construct the output Cond Object and fill it in - std::unique_ptr<PixelDCSConditionsData> writeCdo(std::make_unique<PixelDCSConditionsData>()); + std::unique_ptr<PixelModuleData> writeCdo(std::make_unique<PixelModuleData>()); // Read temperature info std::string param{"temperature"}; - for (CondAttrListCollection::const_iterator attrList=readCdo->begin(); attrList!=readCdo->end(); ++attrList) { - const CondAttrListCollection::ChanNum &channelNumber{attrList->first}; - const CondAttrListCollection::AttributeList &payload{attrList->second}; - if (payload.exists(param) and not payload[param].isNull()) { - float val = payload[param].data<float>(); - writeCdo->setValue(channelNumber, val); - } - else { - ATH_MSG_WARNING(param << " does not exist for ChanNum " << channelNumber); - writeCdo->setValue(channelNumber, -88.0); + if (m_useConditions) { + for (CondAttrListCollection::const_iterator attrList=readCdo->begin(); attrList!=readCdo->end(); ++attrList) { + CondAttrListCollection::ChanNum channelNumber{attrList->first}; + CondAttrListCollection::AttributeList payload{attrList->second}; + if (payload.exists(param) and not payload[param].isNull()) { + float val = payload[param].data<float>(); + if (val>100.0 || val<-80.0) { + writeCdo->setTemperature((int)channelNumber, m_defaultTemperature); + } + else { + writeCdo->setTemperature((int)channelNumber, val); + } + } + else { + ATH_MSG_WARNING(param << " does not exist for ChanNum " << channelNumber); + writeCdo->setTemperature((int)channelNumber, m_defaultTemperature); + } + } + } + else { + for (int i=0; i<(int)m_pixelID->wafer_hash_max(); i++) { + writeCdo->setTemperature(i, m_defaultTemperature); } } if (writeHandle.record(rangeW, std::move(writeCdo)).isFailure()) { - ATH_MSG_FATAL("Could not record PixelDCSConditionsData " << writeHandle.key() << " with EventRange " << rangeW << " into Conditions Store"); + ATH_MSG_FATAL("Could not record PixelModuleData " << writeHandle.key() << " with EventRange " << rangeW << " into Conditions Store"); return StatusCode::FAILURE; } ATH_MSG_INFO("recorded new CDO " << writeHandle.key() << " with range " << rangeW << " into Conditions Store"); diff --git a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelDCSCondTempAlg.h b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelDCSCondTempAlg.h index f36cbd12d46f28ad6a2c88c9e0797564e430dc2a..d8cace7ce588ecedb0fbb13e1a36607cf4fb1710 100644 --- a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelDCSCondTempAlg.h +++ b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelDCSCondTempAlg.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration */ #ifndef PIXELDCSCONDTEMPALG @@ -11,7 +11,9 @@ #include "AthenaPoolUtilities/CondAttrListCollection.h" #include "StoreGate/WriteCondHandleKey.h" -#include "PixelConditionsData/PixelDCSConditionsData.h" +#include "PixelConditionsData/PixelModuleData.h" + +#include "InDetIdentifier/PixelID.h" #include "GaudiKernel/ICondSvc.h" #include "GaudiKernel/Property.h" @@ -26,8 +28,13 @@ class PixelDCSCondTempAlg : public AthAlgorithm { virtual StatusCode finalize() override; private: + const PixelID* m_pixelID; + + bool m_useConditions; + float m_defaultTemperature; + SG::ReadCondHandleKey<CondAttrListCollection> m_readKey{this, "ReadKey", "/PIXEL/DCS/TEMPERATURE", "Key of input (raw) temperature conditions folder"}; - SG::WriteCondHandleKey<PixelDCSConditionsData> m_writeKey{this, "WriteKey", "PixelDCSTempCondData", "Key of output (derived) temperature conditions folder"}; + SG::WriteCondHandleKey<PixelModuleData> m_writeKey{this, "WriteKey", "PixelDCSTempCondData", "Key of output (derived) temperature conditions folder"}; ServiceHandle<ICondSvc> m_condSvc; }; diff --git a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelSiliconConditionsTestAlg.cxx b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelSiliconConditionsTestAlg.cxx index 9e1b97fc60697b395c250b94a29026d93102b946..3477d414a0dd14f7252fdb3f56a29ccac2de43de 100644 --- a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelSiliconConditionsTestAlg.cxx +++ b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelSiliconConditionsTestAlg.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration */ #include "PixelSiliconConditionsTestAlg.h" @@ -16,9 +16,11 @@ StatusCode PixelSiliconConditionsTestAlg::initialize() { ATH_MSG_INFO("Calling initialize"); - ATH_CHECK(m_siliconTool.retrieve()); - +// OLD ATH_CHECK(m_siliconTool.retrieve()); + ATH_CHECK(m_readKeyTemp.initialize()); + ATH_CHECK(m_readKeyHV.initialize()); ATH_CHECK(m_moduleDataKey.initialize()); + ATH_CHECK(m_lorentzAngleTool.retrieve()); return StatusCode::SUCCESS; } @@ -27,32 +29,23 @@ StatusCode PixelSiliconConditionsTestAlg::execute(){ //This method is only used to test the summary service, and only used within this package, // so the INFO level messages have no impact on performance of these services when used by clients - for (int i=0; i<2048; i++) { - std::cout << "STSTST Hash ID=" << IdentifierHash(i) << " Bias Voltage=" << m_siliconTool->biasVoltage(IdentifierHash(i)) << " Temperature=" << m_siliconTool->temperature(IdentifierHash(i)) << " Depletion V=" << m_siliconTool->depletionVoltage(IdentifierHash(i)) << " FSM state=" << m_siliconTool->PixelFSMState(IdentifierHash(i)) << " FSM status=" << m_siliconTool->PixelFSMStatus(IdentifierHash(i)) << std::endl; - } - - for (int i=0; i<2048; i++) { - std::cout << "STSTST Hash ID=" << IdentifierHash(i) - << " ModuleStatus=" << SG::ReadCondHandle<PixelModuleData>(m_moduleDataKey)->getModuleStatus(IdentifierHash(i)) - << " ChipStatus=" << SG::ReadCondHandle<PixelModuleData>(m_moduleDataKey)->getChipStatus(IdentifierHash(i)) - << std::endl; - } + SG::ReadCondHandle<PixelModuleData> hv(m_readKeyHV); + SG::ReadCondHandle<PixelModuleData> temp(m_readKeyTemp); + SG::ReadCondHandle<PixelModuleData> deadmap(m_moduleDataKey); -// for (int i=0; i<2048; i++) { -// std::cout << "Hash ID=" << IdentifierHash(i) << " Bias Voltage=" << m_siliconTool->biasVoltage(IdentifierHash(i)) << " Temperature=" << m_siliconTool->temperature(IdentifierHash(i)) << " Depletion V=" << m_siliconTool->depletionVoltage(IdentifierHash(i)) << " FSM state=" << m_siliconTool->PixelFSMState(IdentifierHash(i)) << " FSM status=" << m_siliconTool->PixelFSMStatus(IdentifierHash(i)) << " ModuleStatus=" << m_deadmapTool->ModuleStatus(IdentifierHash(i)) << " ChipStatus=" << m_deadmapTool->ChipStatus(IdentifierHash(i)) << " TDAQModuleStatus=" << m_tdaqTool->ModuleStatus(IdentifierHash(i)) << std::endl; -// } + // Check HV + for (int i=0; i<2048; i++) { std::cout << "PIXEL HV : " << i << " " << hv->getBiasVoltage(i) << std::endl; } +// OLD for (int i=0; i<2048; i++) { std::cout << "PIXEL HV : " << i << " " << m_siliconTool->biasVoltage(IdentifierHash(i)) << std::endl; } -// for (int i=0; i<2048; i++) { -// std::cout << "Hash ID=" << IdentifierHash(i) -// << " ModuleStatus=" << SG::ReadCondHandle<PixelModuleData>(m_condKey)->getModuleStatus(IdentifierHash(i)) -// << " ChipStatus=" << SG::ReadCondHandle<PixelModuleData>(m_condKey)->getChipStatus(IdentifierHash(i)) -// << " TDAQModuleStatus=" << SG::ReadCondHandle<PixelModuleData>(m_condKey)->getTDAQModuleStatus(IdentifierHash(i)) -// << std::endl; -// } + // Check temperature + for (int i=0; i<2048; i++) { std::cout << "PIXEL Temperature : " << i << " " << temp->getTemperature(i) << std::endl; } +// OLD for (int i=0; i<2048; i++) { std::cout << "PIXEL Temperature : " << i << " " << m_siliconTool->temperature(IdentifierHash(i)) << std::endl; } + // Check deadmap + for (int i=0; i<2048; i++) { std::cout << "PIXEL Deadmap : " << i << " " << deadmap->getModuleStatus(i) << std::endl; } +// OLD for (int i=0; i<2048; i++) { std::cout << "PIXEL Deadmap : " << i << " " << deadmap->getModuleStatus(IdentifierHash(i)) << std::endl; } - int hitDiscConfig = SG::ReadCondHandle<PixelModuleData>(m_moduleDataKey)->getIBLHitDiscConfig(); - std::cout << "STSTST PixelModuleData " << hitDiscConfig << std::endl; + for (int i=0; i<2048; i++) { std::cout << "PIXEL LorentzAngle : " << i << " " << m_lorentzAngleTool->getLorentzShift(IdentifierHash(i)) << std::endl; } return StatusCode::SUCCESS; } diff --git a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelSiliconConditionsTestAlg.h b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelSiliconConditionsTestAlg.h index e611035f889d5bf8983558c824ac4bce390d1033..2d53262b3743c37ef377ae2ec96efffdd3c392e1 100644 --- a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelSiliconConditionsTestAlg.h +++ b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelSiliconConditionsTestAlg.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration */ #ifndef PIXELSILICONcONDITIONSTESTALG_H @@ -9,10 +9,11 @@ #include "AthenaBaseComps/AthAlgorithm.h" #include "GaudiKernel/ToolHandle.h" -#include "PixelConditionsTools/IPixelDCSConditionsTool.h" - #include "PixelConditionsData/PixelModuleData.h" #include "StoreGate/ReadCondHandleKey.h" +#include "InDetCondTools/ISiLorentzAngleTool.h" + +// OLD #include "PixelConditionsTools/IPixelDCSConditionsTool.h" class PixelSiliconConditionsTestAlg : public AthAlgorithm { public: @@ -24,9 +25,11 @@ class PixelSiliconConditionsTestAlg : public AthAlgorithm { virtual StatusCode finalize() override; private: - ToolHandle<IPixelDCSConditionsTool> m_siliconTool{this, "PixelDCSConditionsTool", "PixelDCSConditionsTool", "Tool to retrieve Pixel information"}; +// OLD ToolHandle<IPixelDCSConditionsTool> m_siliconTool{this, "PixelDCSConditionsTool", "PixelDCSConditionsTool", "Tool to retrieve Pixel information"}; + SG::ReadCondHandleKey<PixelModuleData> m_readKeyTemp{this, "ReadKeyeTemp", "PixelDCSTempCondData", "Key of input sensor temperature conditions folder"}; + SG::ReadCondHandleKey<PixelModuleData> m_readKeyHV {this, "ReadKeyHV", "PixelDCSHVCondData", "Key of input bias voltage conditions folder"}; SG::ReadCondHandleKey<PixelModuleData> m_moduleDataKey{this, "PixelModuleData", "PixelModuleData", "Output key"}; - + ToolHandle<ISiLorentzAngleTool> m_lorentzAngleTool{this, "LorentzAngleTool", "PixelLorentzAngleTool", "Tool to retreive Lorentz angle"}; }; #endif diff --git a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelTDAQCondAlg.cxx b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelTDAQCondAlg.cxx index 62b59832e2454d173e5218c418a20efb7bc6656d..f6343a0404dc9ff98d7e3ec611141b61e3562206 100644 --- a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelTDAQCondAlg.cxx +++ b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelTDAQCondAlg.cxx @@ -1,15 +1,15 @@ /* - Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration */ #include "PixelTDAQCondAlg.h" -#include "Identifier/IdentifierHash.h" #include "GaudiKernel/EventIDRange.h" #include <memory> #include <sstream> PixelTDAQCondAlg::PixelTDAQCondAlg(const std::string& name, ISvcLocator* pSvcLocator): ::AthReentrantAlgorithm(name, pSvcLocator), + m_pixelID(nullptr), m_condSvc("CondSvc", name) { } @@ -17,6 +17,8 @@ PixelTDAQCondAlg::PixelTDAQCondAlg(const std::string& name, ISvcLocator* pSvcLoc StatusCode PixelTDAQCondAlg::initialize() { ATH_MSG_INFO("PixelTDAQCondAlg::initialize()"); + ATH_CHECK(detStore()->retrieve(m_pixelID,"PixelID")); + ATH_CHECK(m_condSvc.retrieve()); ATH_CHECK(m_readKey.initialize()); @@ -56,9 +58,16 @@ StatusCode PixelTDAQCondAlg::execute(const EventContext& ctx) const { std::unique_ptr<PixelModuleData> writeCdo(std::make_unique<PixelModuleData>()); // Read dead map info + std::vector<int> checkActive; for (CondAttrListCollection::const_iterator attrList=readCdo->begin(); attrList!=readCdo->end(); ++attrList) { - const CondAttrListCollection::ChanNum &channelNumber = attrList->first; - writeCdo -> setTDAQModuleStatus(channelNumber-1, 0); + CondAttrListCollection::ChanNum channelNumber = attrList->first; + CondAttrListCollection::AttributeList payload = attrList->second; + checkActive.push_back((int)channelNumber-1); + } + + for (int i=0; i<(int)m_pixelID->wafer_hash_max(); i++) { + auto itr = std::find(checkActive.begin(),checkActive.end(),i); + if ((size_t)std::distance(checkActive.begin(),itr)==checkActive.size()) { writeCdo->setModuleStatus(i,1); } } if (writeHandle.record(rangeW, std::move(writeCdo)).isFailure()) { diff --git a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelTDAQCondAlg.h b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelTDAQCondAlg.h index 02722b898104cd2a38845d757f8d27d022863bec..a86395e104cf949fbb24cfa1f5037e204143f384 100644 --- a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelTDAQCondAlg.h +++ b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelTDAQCondAlg.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration */ #ifndef PIXELTDAQCONDALG @@ -13,6 +13,8 @@ #include "StoreGate/WriteCondHandleKey.h" #include "PixelConditionsData/PixelModuleData.h" +#include "InDetIdentifier/PixelID.h" + #include "GaudiKernel/ICondSvc.h" #include "GaudiKernel/Property.h" @@ -26,8 +28,10 @@ class PixelTDAQCondAlg : public AthReentrantAlgorithm { virtual StatusCode finalize() override; private: + const PixelID* m_pixelID; + SG::ReadCondHandleKey<CondAttrListCollection> m_readKey{this, "ReadKey", "/TDAQ/Resources/ATLAS/PIXEL/Modules", "Input key of TDAQ deadmap conditions folder"}; - SG::WriteCondHandleKey<PixelModuleData> m_writeKey{this, "WriteKey", "PixelModuleData", "Output key of pixel module data"}; + SG::WriteCondHandleKey<PixelModuleData> m_writeKey{this, "WriteKey", "PixelTDAQCondData", "Output key of pixel module data"}; ServiceHandle<ICondSvc> m_condSvc; }; diff --git a/InnerDetector/InDetConditions/PixelConditionsData/PixelConditionsData/PixelDCSConditionsData.h b/InnerDetector/InDetConditions/PixelConditionsData/PixelConditionsData/PixelDCSConditionsData.h deleted file mode 100644 index e8781680debc5d17f638577703cf6d0520fc5ae8..0000000000000000000000000000000000000000 --- a/InnerDetector/InDetConditions/PixelConditionsData/PixelConditionsData/PixelDCSConditionsData.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration -*/ - -#ifndef PIXELDCSCONDDATA_H -#define PIXELDCSCONDDATA_H - -#include "AthenaKernel/CLASS_DEF.h" -#include "AthenaPoolUtilities/CondAttrListCollection.h" -#include <map> - -class PixelDCSConditionsData { - public: - PixelDCSConditionsData(); - virtual ~PixelDCSConditionsData(); - - void setValue(const CondAttrListCollection::ChanNum& chanNum, const float value); - void setValue(const CondAttrListCollection::ChanNum& chanNum, const std::string value); - bool getValue(const CondAttrListCollection::ChanNum& chanNum, float& value) const; - bool getValue(const CondAttrListCollection::ChanNum& chanNum, std::string& value) const; - void clear(); - - private: - typedef std::map<CondAttrListCollection::ChanNum, float> FloatConditions; - typedef std::map<CondAttrListCollection::ChanNum, std::string> StringConditions; - FloatConditions m_channelValues; - StringConditions m_channelStrings; -}; - -CLASS_DEF( PixelDCSConditionsData , 345532773 , 1 ) - -#include "AthenaKernel/CondCont.h" -CONDCONT_DEF( PixelDCSConditionsData, 578786393 ); - -#endif // PIXELDCSCONDDATA_H diff --git a/InnerDetector/InDetConditions/PixelConditionsData/PixelConditionsData/PixelModuleData.h b/InnerDetector/InDetConditions/PixelConditionsData/PixelConditionsData/PixelModuleData.h index 254b4c26df06957f67d3b2601f39d6d44a55f1d0..1ace713919d3a82e4f01fa144b4016792333d8f9 100644 --- a/InnerDetector/InDetConditions/PixelConditionsData/PixelConditionsData/PixelModuleData.h +++ b/InnerDetector/InDetConditions/PixelConditionsData/PixelConditionsData/PixelModuleData.h @@ -1,12 +1,11 @@ /* - Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration */ #ifndef PIXELDEADMAPCONDDATA_H #define PIXELDEADMAPCONDDATA_H #include "AthenaKernel/CLASS_DEF.h" -#include "AthenaPoolUtilities/CondAttrListCollection.h" #include <map> class PixelModuleData { @@ -14,14 +13,20 @@ class PixelModuleData { PixelModuleData(); virtual ~PixelModuleData(); - void setModuleStatus(const CondAttrListCollection::ChanNum& chanNum, const int value); - int getModuleStatus(const CondAttrListCollection::ChanNum& chanNum) const; + void setBiasVoltage(const int chanNum, const float value); + float getBiasVoltage(const int chanNum) const; - void setChipStatus(const CondAttrListCollection::ChanNum& chanNum, const int value); - int getChipStatus(const CondAttrListCollection::ChanNum& chanNum) const; + void setTemperature(const int chanNum, const float value); + float getTemperature(const int chanNum) const; - void setTDAQModuleStatus(const CondAttrListCollection::ChanNum& chanNum, const int value); - int getTDAQModuleStatus(const CondAttrListCollection::ChanNum& chanNum) const; + void setModuleStatus(const int chanNum, const int value); + int getModuleStatus(const int chanNum) const; + + void setChipStatus(const int chanNum, const int value); + int getChipStatus(const int chanNum) const; + + enum DCSModuleStatus{OK,WARNING,ERROR,FATAL,NOSTATUS}; + enum DCSModuleState{READY,ON,UNKNOWN,TRANSITION,UNDEFINED,NOSTATE}; void setBarrelAnalogThreshold(std::vector<int> BarrelAnalogThreshold); void setEndcapAnalogThreshold(std::vector<int> EndcapAnalogThreshold); @@ -65,10 +70,12 @@ class PixelModuleData { void clear(); private: - typedef std::map<CondAttrListCollection::ChanNum, int> IntConditions; + typedef std::map<int, float> FloatConditions; + typedef std::map<int, int> IntConditions; + FloatConditions m_biasVoltage; + FloatConditions m_temperature; IntConditions m_moduleStatus; IntConditions m_chipStatus; - IntConditions m_tdaqStatus; std::vector<int> m_BarrelAnalogThreshold; std::vector<int> m_EndcapAnalogThreshold; diff --git a/InnerDetector/InDetConditions/PixelConditionsData/src/PixelDCSConditionsData.cxx b/InnerDetector/InDetConditions/PixelConditionsData/src/PixelDCSConditionsData.cxx deleted file mode 100644 index af7f59903dfd9e3c29f919e758b052601d7d6d71..0000000000000000000000000000000000000000 --- a/InnerDetector/InDetConditions/PixelConditionsData/src/PixelDCSConditionsData.cxx +++ /dev/null @@ -1,43 +0,0 @@ -/* - Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration -*/ - -#include "PixelConditionsData/PixelDCSConditionsData.h" - -PixelDCSConditionsData::PixelDCSConditionsData(): - m_channelValues() -{ -} - -PixelDCSConditionsData::~PixelDCSConditionsData() { } - -void PixelDCSConditionsData::setValue(const CondAttrListCollection::ChanNum& chanNum, const float value) { - m_channelValues[chanNum] = value; -} - -void PixelDCSConditionsData::setValue(const CondAttrListCollection::ChanNum& chanNum, const std::string value) { - m_channelStrings[chanNum] = value; -} - -bool PixelDCSConditionsData::getValue(const CondAttrListCollection::ChanNum& chanNum, float& value) const { - auto itr = m_channelValues.find(chanNum); - if (itr!=m_channelValues.end()) { - value = itr->second; - return true; - } - return false; -} - -bool PixelDCSConditionsData::getValue(const CondAttrListCollection::ChanNum& chanNum, std::string& value) const { - auto itr = m_channelStrings.find(chanNum); - if (itr!=m_channelStrings.end()) { - value = itr->second; - return true; - } - return false; -} - -void PixelDCSConditionsData::clear() { - m_channelValues.clear(); -} - diff --git a/InnerDetector/InDetConditions/PixelConditionsData/src/PixelModuleData.cxx b/InnerDetector/InDetConditions/PixelConditionsData/src/PixelModuleData.cxx index ff19da7355369bea198c9dbdd1ead8d750c80d4e..57d8e7a77e2e5f0b724262fcf25f772681aadf21 100644 --- a/InnerDetector/InDetConditions/PixelConditionsData/src/PixelModuleData.cxx +++ b/InnerDetector/InDetConditions/PixelConditionsData/src/PixelModuleData.cxx @@ -1,51 +1,61 @@ /* - Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration */ #include "PixelConditionsData/PixelModuleData.h" PixelModuleData::PixelModuleData(): + m_biasVoltage(), + m_temperature(), m_moduleStatus(), - m_chipStatus(), - m_tdaqStatus() + m_chipStatus() { } PixelModuleData::~PixelModuleData() { } +void PixelModuleData::setBiasVoltage(const int chanNum, const float value) { + m_biasVoltage[chanNum] = value; +} + +float PixelModuleData::getBiasVoltage(const int chanNum) const { + auto itr = m_biasVoltage.find(chanNum); + if (itr!=m_biasVoltage.end()) { return itr->second; } + return 0; +} + +void PixelModuleData::setTemperature(const int chanNum, const float value) { + m_temperature[chanNum] = value; +} + +float PixelModuleData::getTemperature(const int chanNum) const { + auto itr = m_temperature.find(chanNum); + if (itr!=m_temperature.end()) { return itr->second; } + return -7.0; // this is temporaly fix +} + // Module status -void PixelModuleData::setModuleStatus(const CondAttrListCollection::ChanNum& chanNum, const int value) { +void PixelModuleData::setModuleStatus(const int chanNum, const int value) { m_moduleStatus[chanNum] = value; } -int PixelModuleData::getModuleStatus(const CondAttrListCollection::ChanNum& chanNum) const { +int PixelModuleData::getModuleStatus(const int chanNum) const { auto itr = m_moduleStatus.find(chanNum); if (itr!=m_moduleStatus.end()) { return itr->second; } return 0; } // Chip (FE) status -void PixelModuleData::setChipStatus(const CondAttrListCollection::ChanNum& chanNum, const int value) { +void PixelModuleData::setChipStatus(const int chanNum, const int value) { m_chipStatus[chanNum] = value; } -int PixelModuleData::getChipStatus(const CondAttrListCollection::ChanNum& chanNum) const { +int PixelModuleData::getChipStatus(const int chanNum) const { auto itr = m_chipStatus.find(chanNum); if (itr!=m_chipStatus.end()) { return itr->second; } return 0; } -// TDAQ module status -void PixelModuleData::setTDAQModuleStatus(const CondAttrListCollection::ChanNum& chanNum, const int value) { - m_tdaqStatus[chanNum] = value; -} - -int PixelModuleData::getTDAQModuleStatus(const CondAttrListCollection::ChanNum& chanNum) const { - auto itr = m_tdaqStatus.find(chanNum); - if (itr!=m_tdaqStatus.end()) { return itr->second; } - return 1; -} - void PixelModuleData::setBarrelAnalogThreshold(std::vector<int> BarrelAnalogThreshold) { m_BarrelAnalogThreshold = BarrelAnalogThreshold; } void PixelModuleData::setEndcapAnalogThreshold(std::vector<int> EndcapAnalogThreshold) { m_EndcapAnalogThreshold = EndcapAnalogThreshold; } void PixelModuleData::setDBMAnalogThreshold(std::vector<int> DBMAnalogThreshold) { m_DBMAnalogThreshold = DBMAnalogThreshold; } @@ -140,8 +150,9 @@ int PixelModuleData::getIBLOverflowToT() const { } void PixelModuleData::clear() { + m_biasVoltage.clear(); + m_temperature.clear(); m_moduleStatus.clear(); m_chipStatus.clear(); - m_tdaqStatus.clear(); } diff --git a/InnerDetector/InDetConditions/PixelConditionsTools/PixelConditionsTools/IPixelDCSConditionsTool.h b/InnerDetector/InDetConditions/PixelConditionsTools/PixelConditionsTools/IPixelDCSConditionsTool.h deleted file mode 100644 index e619f657e76a37d23b6bd7124c85aac23e9975da..0000000000000000000000000000000000000000 --- a/InnerDetector/InDetConditions/PixelConditionsTools/PixelConditionsTools/IPixelDCSConditionsTool.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration -*/ - -#ifndef IPIXELDCSCONDITIONSTOOL_H -#define IPIXELDCSCONDITIONSTOOL_H - -#include "GaudiKernel/IAlgTool.h" -#include "InDetConditionsSummaryService/ISiliconConditionsTool.h" - -#include "Identifier/Identifier.h" -#include "Identifier/IdentifierHash.h" - -class IPixelDCSConditionsTool: virtual public ISiliconConditionsTool { - public: - virtual ~IPixelDCSConditionsTool() = default; - - DeclareInterfaceID(IPixelDCSConditionsTool, 1, 0); - - virtual std::string PixelFSMState(const Identifier& elementId) const = 0; - virtual std::string PixelFSMState(const IdentifierHash& elementHash) const = 0; - - virtual std::string PixelFSMStatus(const Identifier& elementId) const = 0; - virtual std::string PixelFSMStatus(const IdentifierHash& elementHash) const = 0; - -}; - -#endif // IPIXELDCSCONDITIONSTOOL_H diff --git a/InnerDetector/InDetConditions/PixelConditionsTools/python/EnterCalibrationToDb.py b/InnerDetector/InDetConditions/PixelConditionsTools/python/EnterCalibrationToDb.py deleted file mode 100755 index 325b631ae41adb7fb022ea3281fc445d387c3ded..0000000000000000000000000000000000000000 --- a/InnerDetector/InDetConditions/PixelConditionsTools/python/EnterCalibrationToDb.py +++ /dev/null @@ -1,104 +0,0 @@ -#!/usr/bin/python - -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -# Shaun Roe, 4 February 2015 - -from IBLTotParser import * -from PyCool import cool -import sys, os - -def upload(connection, mydata, folderPath): - """Upload a dictionary of channelNum:string4kData to a local sqlite db - Shaun Roe February 9 2015 - """ - db=None - creation=False - dbSvc=cool.DatabaseSvcFactory.databaseService() - try: - db=dbSvc.openDatabase(connection,False) - except Exception,e: - print 'Problem opening database',e - print '..will try to create one instead' - try: - db=dbSvc.createDatabase(connection) - creation=True - except Exception,e: - print 'Problem creating database',e - return -1 - - print "Opened database",connection - #all the data are simple strings, type String4k - dataType=cool.StorageType.String4k - # setup a folder payload specification - spec=cool.RecordSpecification() - spec.extend("data",cool.StorageType.String4k) - desc='<timeStamp>run-lumi</timeStamp><addrHeader><address_header service_type="71" clid="1238547719" /></addrHeader><typeName>CondAttrListCollection</typeName>' - myfolder=None - if creation: - myfolder=db.createFolder(folderPath,spec,desc,cool.FolderVersioning.MULTI_VERSION,True) - else: - myfolder=db.getFolder(folderPath) - #iovMin=cool.ValidityKeyMin - iovMin=(222222 << 32) - iovMax=cool.ValidityKeyMax - uploadCount=0 - try: - for hashId in mydata: - payload=cool.Record(spec) - payload['data'] = mydata[hashId] - print mydata[hashId] - channelID = cool.ChannelId(hashId) - myfolder.storeObject(iovMin,iovMax,payload,channelID) - uploadCount+=1 - except Exception,e: - print "Problem uploading ", e - db.closeDatabase() - return 0 - db.closeDatabase() - return uploadCount - - -def main(): - """'main()' command to make an SQLite db from a pixel calibration text file. - The calibration file format is as sent by - Tayfun Ince, but the identifier format may be either the svn format one (link below) or - that prepared by Geraldine Conti. Different parsers are supplied in the IBLTotParser - module to cope with either format. - Note that as of Feb 13 2015, this has *only* been tested on a calibration file - containing IBL data, not a full calibration set. - The data were uploaded using the following procedure: - **FIRST set up an Athena release ** - To generate a consistent 2048-module set, I downloaded a known tag to a local - sqlite file: - AtlCoolCopy.exe ATLAS_COOLOFL_PIXEL/OFLP200 sqlite://;schema=mycool.db;dbname=OFLP200 -tag PixCalib-SIM-RUN12-000-01 -folder /PIXEL/PixCalib -run 222222 -ot HEAD -create - This was checked with an sqlite browser. - Run this command with - python EnterCalibrationToDb.py - and then I checked the sqlite file again. - The final upload to the central db was performed with: - AtlCoolCopy.exe "sqlite://;schema=mycool.db;dbname=OFLP200" "oracle://ATLAS_COOLWRITE;schema=ATLAS_COOLOFL_PIXEL;dbname=OFLP200;user=<uname>;password=<password>" -folder /PIXEL/PixCalib -tag HEAD -ot PixCalib-SIM-RUN12-IBL-02 - ..and checked with coolcherrypy: - http://coolcherrypy.cern.ch:8080/cooldb/ATLAS_COOLPROD/ATLAS_COOLOFL_PIXEL/OFLP200/PIXEL/PixCalib/timespan/954444812386304-954444812386306/tag/PixCalib-SIM-RUN12-IBL-02/channels/420 - Fares checked this and created two new tags: - PixCalib-SIM-RUN12-000-02 - PixCalib-DATA-RUN2-IBL-00 - """ - connection="sqlite://;schema=mycool.db;dbname=OFLP200" - calibrationFile="IBLCalibrationData.txt" #Calibration file from Tayfun Ince - hashIdFile="gcontiIdTable.txt" #Identifier file provided by Geraldine Conti - svnFilename="table_Run2.txt" # ...or... the in-svn identifier file from Fares Djama - # https://svnweb.cern.ch/trac/atlasoff/browser/InnerDetector/InDetCalibAlgs/PixelCalibAlgs/trunk/share/table_Run2.txt - mydata=parseFiles(calibrationFile,svnFilename) - #mydata=IBLTot(calibrationFile, hashIdFile) - folderPath="/PIXEL/PixCalib" - numUploads= upload(connection, mydata, folderPath) - print "Number of entries: ",numUploads - if numUploads==0: - return -1 - return 0 - -if __name__=="__main__": - sys.exit(main()) - - - diff --git a/InnerDetector/InDetConditions/PixelConditionsTools/python/IBLTotParser.py b/InnerDetector/InDetConditions/PixelConditionsTools/python/IBLTotParser.py deleted file mode 100644 index 6e79c7b52144bc07f9597392b69e05d29af44995..0000000000000000000000000000000000000000 --- a/InnerDetector/InDetConditions/PixelConditionsTools/python/IBLTotParser.py +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/python # Geraldine Conti 3 February 2015 from collections import defaultdict import sys,re # def IBLTot(calibrationFile, hashIdFile): """ Read and parse calibration data to return a dictionary of hashId: calibration_string The Calibration file has lines of format(note modules may have 1, 2 or 16 line entries): LI_S01_A_M1_A1 I0 2559 71 115 2559 2550 63 130 2550 2550 63 130 2550 20.841 -889.378 16504.8 20.841 -889.378 16504.8 0.263637 2.34152e-05 I1 2560 65 112 2560 2566 69 129 2566 2566 69 129 2566 19.8282 -1305.08 13770.5 19.8282 -1305.08 13770.5 0.143171 2.94417e-05 The HashId correspondence is in a file with lines of format: 20480 LI_S15_C_34_M3_C1_2 -4 0 0 0 and should have 2048 entries, the line number (from zero) being the hashId Geraldine Conti 3 February 2015 """ f = open(calibrationFile,'r') mylongstr = "" mydict = {} HashID = 10000 parsed = {} for line in iter(f): data=line.strip().split(" ") # FIND LINES WITH MODULES IDs if(data[0].find('_')>0): if(not HashID==10000): key = HashID mydict[key]=mylongstr mylongstr = "" f2 = open(hashIdFile,'r') # LOOP ON ID FILE ######################## HashID = 0 for line2 in iter(f2): data2=line2.strip().split(" ") if(data2[1]==data[0]): myinfo = str(data2[2]+','+data2[3]+','+data2[4]+','+data2[5]) mylongstr += ''.join(myinfo)+' \n' break HashID += 1 f2.close() # END LOOP ON ID FILE ################### if(HashID==2048): print 'PROBLEM WITH:',data[0] if(data[0].find('_')<1): mylongstr += ' '.join(data)+' \n' # # TO FILL IN THE LAST ENTRY key = HashID mydict[key]=mylongstr f.close() return mydict def marryCalibrationToHash(idDict, calDict): """ Join an idDictionary of hash: (identifier, positionIndices) to a calibration dictionary of Identifier: CalibrationString to get the result hash: ModifiedCalibrationString Shaun Roe 9 Feb 2015 """ result=dict() hashIndex=0 indicesIndex=1 for humanReadableId in calDict: idTuple=idDict[humanReadableId] result[idTuple[hashIndex]] = idTuple[indicesIndex]+"\n"+calDict[humanReadableId] return result def readTotCalibrationData(fname): """Open a calibration file and read data to dictionary of Identifier:CalibrationString Shaun Roe 9 Feb 2015 """ with open(fname,'rU') as fp: return dict([i for i in generateTotCalibrationData(fp)]) def generateTotCalibrationData(fp): """Generator to give key,value pairs of Identifier, CalibrationString Shaun Roe 9 Feb 2015 """ k,v="","" #key, value pairs for line in fp: if ("_" in line): if v !="": yield k,v k=mapCalibId2SvnTableId(line.rstrip()) v="" else: v+=line yield k,v def readGeraldinesIdTable(fname): """Read an id correspondence table with lines of format 20480 LI_S15_C_34_M3_C1_2 -4 0 0 0 Shaun Roe 9 February 2015 """ try: lines = dict([idDictEntry(i,line) for i,line in enumerate (open(fname))]) except ValueError as e: print "An error occurred: ",e.args lines = None return lines def readSvnIdTable(fname): """Read an id correspondence table with lines of format PixMapOverlayWr... INFO 1967 56315904 [2.1.2.1.27.0.0.0] D2A-B03-S2-M5 Shaun Roe 9 February 2015 """ dataSignature = "PixMapOverlayWr... INFO " try: lines = dict([svnIdDictEntry(line) for line in open(fname) if dataSignature in line]) except ValueError as e: print "An error occurred: ",e.args lines = None return lines def svnIdDictEntry(line): """Form a dictionary entry from lines like PixMapOverlayWr... INFO 1967 56315904 [2.1.2.1.27.0.0.0] D2A-B03-S2-M5 PixMapOverlayWr... INFO 0 20480 [2.1.-4.0.0.0.0.0] LI_S15_C_34_M3_C1_2 PixMapOverlayWr... INFO 149 27873280 [2.1.-2.2.41.0.0.0]D3C-B04-S2-M1 Shaun Roe 9 February 2015 """ r="^PixMapOverlayWr\.\.\.\s+INFO\s+([0-9]+)\s+[0-9]+\s+\[2\.1\.([-0-9.]+)\.0\.0]\s*([-A-Z0-9_]+)\s*$" parsed=re.match(r, line) if (not parsed): raise ValueError("This string could not be parsed",textLine) return parsed.group(3), (int(parsed.group(1)), parsed.group(2).replace(".",",")) def idDictEntry(hash, textLine): """ Form an id dictionary entry from lines of format 48504832 L2_B19_S02_M6C 0 3 36 -6 Shaun Roe 9 February 2015 """ if hashOutOfRange(hash): raise ValueError("Hash out of range",hash) regexString="^([0-9]+)\s([A-Z0-9_]+)\s([0-9-]+\s[0-9-]+\s[0-9-]+\s[0-9-]+)\s*$" parsed = re.match(regexString, textLine) if (not parsed): raise ValueError("This string could not be parsed",textLine) return parsed.group(2), (hash, parsed.group(3).replace(" ",",")) def hashOutOfRange(hashId): #Check if the hash is in the valid range return (hashId<0) or (hashId>2047) def parseFiles(calibFilename,idFilename,idFileParser=readSvnIdTable): """Parse a calibration data file and an id file into a dictionary of hash: calibrationString. NOTE: The parser chosen must be appropriate to the id file format Shaun Roe 9 February 2015 """ if idFileParser == IBLTot: return idFileParser(calibFilename,idFilename) idDict=idFileParser(idFilename) calDict=readTotCalibrationData(calibFilename) return marryCalibrationToHash(idDict, calDict) def mapCalibId2SvnTableId(calibId): """Mapping from pixel calibration to svn id table nomenclatures""" component = calibId.split("_") layerDisk=component[0] if ("L0" in layerDisk) or ("L1" in layerDisk) or ("L2" in layerDisk): component[2]=component[2][0] + "0" + component[2][1] del component[3] return "-".join(component) if ("D" in layerDisk): return "-".join(component) return calibId def main(): idFilename="table_summaryNEW.txt" calibFilename = "IBLCalibrationData.txt" svnFilename="table_Run2.txt" d=parseFiles(calibFilename,svnFilename) print len(d) return 0 if __name__=="__main__": sys.exit(main()) -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration diff --git a/InnerDetector/InDetConditions/PixelConditionsTools/python/PixelConditionsSummaryToolSetup.py b/InnerDetector/InDetConditions/PixelConditionsTools/python/PixelConditionsSummaryToolSetup.py index f32b14808fe1b7dec097342aa2534bbafba8f725..4094ad6eee463d55c370765eecdf74e0db45e8c5 100644 --- a/InnerDetector/InDetConditions/PixelConditionsTools/python/PixelConditionsSummaryToolSetup.py +++ b/InnerDetector/InDetConditions/PixelConditionsTools/python/PixelConditionsSummaryToolSetup.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration class PixelConditionsSummaryToolSetup: "Class to simplify setup of PixelConditionsSummaryTool and required conditions algorithms" @@ -57,11 +57,15 @@ class PixelConditionsSummaryToolSetup: from AthenaCommon.AlgSequence import AthSequencer condSeq = AthSequencer("AthCondSeq") - if not hasattr(ToolSvc, "PixelDCSConditionsTool"): - from PixelConditionsTools.PixelDCSConditionsToolSetup import PixelDCSConditionsToolSetup - pixelDCSConditionsToolSetup = PixelDCSConditionsToolSetup() - pixelDCSConditionsToolSetup.setUseConditions(self.useConditions) - pixelDCSConditionsToolSetup.setup() + if (self.useDCSState): + if not conddb.folderRequested("/PIXEL/DCS/FSMSTATE"): + conddb.addFolder("DCS_OFL", "/PIXEL/DCS/FSMSTATE", className="CondAttrListCollection") + if not conddb.folderRequested("/PIXEL/DCS/FSMSTATUS"): + conddb.addFolder("DCS_OFL", "/PIXEL/DCS/FSMSTATUS", className="CondAttrListCollection") + + if not hasattr(condSeq, "PixelDCSCondStateAlg"): + from PixelConditionsAlgorithms.PixelConditionsAlgorithmsConf import PixelDCSCondStateAlg + condSeq += PixelDCSCondStateAlg(name="PixelDCSCondStateAlg") if (self.useTDAQ): PixelTDAQFolder = "/TDAQ/Resources/ATLAS/PIXEL/Modules" @@ -93,7 +97,6 @@ class PixelConditionsSummaryToolSetup: if not hasattr(ToolSvc, self.toolName): from PixelConditionsTools.PixelConditionsToolsConf import PixelConditionsSummaryTool ToolSvc += PixelConditionsSummaryTool(name=self.toolName, - PixelDCSConditionsTool=ToolSvc.PixelDCSConditionsTool, UseDCSState=self.useDCSState, UseByteStream=self.useByteStream, UseTDAQ=self.useTDAQ, diff --git a/InnerDetector/InDetConditions/PixelConditionsTools/python/PixelDCSConditionsToolSetup.py b/InnerDetector/InDetConditions/PixelConditionsTools/python/PixelDCSConditionsToolSetup.py deleted file mode 100644 index fc6eb8f85394d6ba59e47b96a0603c72e1b39826..0000000000000000000000000000000000000000 --- a/InnerDetector/InDetConditions/PixelConditionsTools/python/PixelDCSConditionsToolSetup.py +++ /dev/null @@ -1,88 +0,0 @@ -# Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration - -class PixelDCSConditionsToolSetup: - "Class to simplify setup of PixelDCSConditionsTool and required conditions algorithms" - - def __init__(self): - self.stateFolder = "/PIXEL/DCS/FSMSTATE" - self.statusFolder = "/PIXEL/DCS/FSMSTATUS" - self.hvFolder = "/PIXEL/DCS/HV" - self.tempFolder = "/PIXEL/DCS/TEMPERATURE" - self.dbInstance = "DCS_OFL" - - self.useConditions = True - - self.stateAlgName = "PixelDCSCondStateAlg" - self.hvAlgName = "PixelDCSCondHVAlg" - self.tempAlgName = "PixelDCSCondTempAlg" - - self.toolName = "PixelDCSConditionsTool" - self.tool = None - - def getUseConditions(self): - return self.useConditions - - def setUseConditions(self, useConditions): - self.useConditions = useConditions - - def getToolName(self): - return self.toolName - - def setToolName(self, toolName): - self.toolName = toolName - - def getTool(self): - return self.tool - - def setFolders(self): - from AthenaCommon.GlobalFlags import globalflags - from IOVDbSvc.CondDB import conddb - - from AthenaCommon.AthenaCommonFlags import athenaCommonFlags - if athenaCommonFlags.isOnline(): - self.hvFolder = "/PIXEL/HLT/DCS/HV" - self.tempFolder = "/PIXEL/HLT/DCS/TEMPERATURE" - self.dbInstance = "PIXEL_ONL" - - if (self.useConditions): - if not conddb.folderRequested(self.hvFolder): - conddb.addFolder(self.dbInstance, self.hvFolder, className="CondAttrListCollection") - if not conddb.folderRequested(self.tempFolder): - conddb.addFolder(self.dbInstance, self.tempFolder, className="CondAttrListCollection") - if ((globalflags.DataSource=='data')): - if not conddb.folderRequested(self.stateFolder): - conddb.addFolder(self.dbInstance, self.stateFolder, className="CondAttrListCollection") - if not conddb.folderRequested(self.statusFolder): - conddb.addFolder(self.dbInstance, self.statusFolder, className="CondAttrListCollection") - - def setAlgs(self): - from AthenaCommon.GlobalFlags import globalflags - from AthenaCommon.AlgSequence import AthSequencer - condSeq = AthSequencer("AthCondSeq") - - if (self.useConditions): - if ((globalflags.DataSource=='data')): - if not hasattr(condSeq, self.stateAlgName): - from PixelConditionsAlgorithms.PixelConditionsAlgorithmsConf import PixelDCSCondStateAlg - condSeq += PixelDCSCondStateAlg(name = self.stateAlgName) - - if not hasattr(condSeq, self.hvAlgName): - from PixelConditionsAlgorithms.PixelConditionsAlgorithmsConf import PixelDCSCondHVAlg - condSeq += PixelDCSCondHVAlg(name = self.hvAlgName, ReadKey = self.hvFolder) - - if not hasattr(condSeq, self.tempAlgName): - from PixelConditionsAlgorithms.PixelConditionsAlgorithmsConf import PixelDCSCondTempAlg - condSeq += PixelDCSCondTempAlg(name = self.tempAlgName, ReadKey = self.tempFolder) - - def setTool(self): - from AthenaCommon.GlobalFlags import globalflags - from AthenaCommon.AppMgr import ToolSvc - if not hasattr(ToolSvc, self.toolName): - from PixelConditionsTools.PixelConditionsToolsConf import PixelDCSConditionsTool - ToolSvc += PixelDCSConditionsTool(name=self.toolName, UseConditions=self.useConditions, IsDATA=(globalflags.DataSource=='data')) - self.tool = getattr(ToolSvc, self.toolName) - - def setup(self): - self.setFolders() - self.setAlgs() - self.setTool() diff --git a/InnerDetector/InDetConditions/PixelConditionsTools/python/gcontiIdTable.txt b/InnerDetector/InDetConditions/PixelConditionsTools/python/gcontiIdTable.txt deleted file mode 100644 index 43ae31d4bd7add40b098f9a99271a946b811e63b..0000000000000000000000000000000000000000 --- a/InnerDetector/InDetConditions/PixelConditionsTools/python/gcontiIdTable.txt +++ /dev/null @@ -1,2048 +0,0 @@ -20480 LI_S15_C_34_M3_C1_2 -4 0 0 0 -86016 LI_S15_C_34_M4_C4_2 -4 0 1 0 -151552 LI_S15_C_12_M1_C1_1 -4 0 2 0 -217088 LI_S15_C_12_M2_C4_1 -4 0 3 0 -4214784 LI_S15_C_34_M3_C2_2 -4 1 0 0 -4280320 LI_S15_C_34_M4_C5_2 -4 1 1 0 -4345856 LI_S15_C_12_M1_C2_1 -4 1 2 0 -4411392 LI_S15_C_12_M2_C5_1 -4 1 3 0 -8409088 LI_S15_C_34_M3_C3_2 -4 2 0 0 -8474624 LI_S15_C_34_M4_C6_2 -4 2 1 0 -8540160 LI_S15_C_12_M1_C3_1 -4 2 2 0 -8605696 LI_S15_C_12_M2_C6_1 -4 2 3 0 -16797696 D1C_B01_S2_M4 -2 0 0 0 -16863232 D1C_B01_S2_M3 -2 0 1 0 -16928768 D1C_B01_S2_M5 -2 0 2 0 -16994304 D1C_B01_S2_M2 -2 0 3 0 -17059840 D1C_B01_S2_M6 -2 0 4 0 -17125376 D1C_B01_S2_M1 -2 0 5 0 -17190912 D1C_B02_S1_M4 -2 0 6 0 -17256448 D1C_B02_S1_M3 -2 0 7 0 -17321984 D1C_B02_S1_M5 -2 0 8 0 -17387520 D1C_B02_S1_M2 -2 0 9 0 -17453056 D1C_B02_S1_M6 -2 0 10 0 -17518592 D1C_B02_S1_M1 -2 0 11 0 -17584128 D1C_B02_S2_M4 -2 0 12 0 -17649664 D1C_B02_S2_M3 -2 0 13 0 -17715200 D1C_B02_S2_M5 -2 0 14 0 -17780736 D1C_B02_S2_M2 -2 0 15 0 -17846272 D1C_B02_S2_M6 -2 0 16 0 -17911808 D1C_B02_S2_M1 -2 0 17 0 -17977344 D1C_B03_S1_M4 -2 0 18 0 -18042880 D1C_B03_S1_M3 -2 0 19 0 -18108416 D1C_B03_S1_M5 -2 0 20 0 -18173952 D1C_B03_S1_M2 -2 0 21 0 -18239488 D1C_B03_S1_M6 -2 0 22 0 -18305024 D1C_B03_S1_M1 -2 0 23 0 -18370560 D1C_B03_S2_M4 -2 0 24 0 -18436096 D1C_B03_S2_M3 -2 0 25 0 -18501632 D1C_B03_S2_M5 -2 0 26 0 -18567168 D1C_B03_S2_M2 -2 0 27 0 -18632704 D1C_B03_S2_M6 -2 0 28 0 -18698240 D1C_B03_S2_M1 -2 0 29 0 -18763776 D1C_B04_S1_M4 -2 0 30 0 -18829312 D1C_B04_S1_M3 -2 0 31 0 -18894848 D1C_B04_S1_M5 -2 0 32 0 -18960384 D1C_B04_S1_M2 -2 0 33 0 -19025920 D1C_B04_S1_M6 -2 0 34 0 -19091456 D1C_B04_S1_M1 -2 0 35 0 -19156992 D1C_B04_S2_M4 -2 0 36 0 -19222528 D1C_B04_S2_M3 -2 0 37 0 -19288064 D1C_B04_S2_M5 -2 0 38 0 -19353600 D1C_B04_S2_M2 -2 0 39 0 -19419136 D1C_B04_S2_M6 -2 0 40 0 -19484672 D1C_B04_S2_M1 -2 0 41 0 -19550208 D1C_B01_S1_M4 -2 0 42 0 -19615744 D1C_B01_S1_M3 -2 0 43 0 -19681280 D1C_B01_S1_M5 -2 0 44 0 -19746816 D1C_B01_S1_M2 -2 0 45 0 -19812352 D1C_B01_S1_M6 -2 0 46 0 -19877888 D1C_B01_S1_M1 -2 0 47 0 -20992000 D2C_B01_S2_M4 -2 1 0 0 -21057536 D2C_B01_S2_M3 -2 1 1 0 -21123072 D2C_B01_S2_M5 -2 1 2 0 -21188608 D2C_B01_S2_M2 -2 1 3 0 -21254144 D2C_B01_S2_M6 -2 1 4 0 -21319680 D2C_B01_S2_M1 -2 1 5 0 -21385216 D2C_B02_S1_M4 -2 1 6 0 -21450752 D2C_B02_S1_M3 -2 1 7 0 -21516288 D2C_B02_S1_M5 -2 1 8 0 -21581824 D2C_B02_S1_M2 -2 1 9 0 -21647360 D2C_B02_S1_M6 -2 1 10 0 -21712896 D2C_B02_S1_M1 -2 1 11 0 -21778432 D2C_B02_S2_M4 -2 1 12 0 -21843968 D2C_B02_S2_M3 -2 1 13 0 -21909504 D2C_B02_S2_M5 -2 1 14 0 -21975040 D2C_B02_S2_M2 -2 1 15 0 -22040576 D2C_B02_S2_M6 -2 1 16 0 -22106112 D2C_B02_S2_M1 -2 1 17 0 -22171648 D2C_B03_S1_M4 -2 1 18 0 -22237184 D2C_B03_S1_M3 -2 1 19 0 -22302720 D2C_B03_S1_M5 -2 1 20 0 -22368256 D2C_B03_S1_M2 -2 1 21 0 -22433792 D2C_B03_S1_M6 -2 1 22 0 -22499328 D2C_B03_S1_M1 -2 1 23 0 -22564864 D2C_B03_S2_M4 -2 1 24 0 -22630400 D2C_B03_S2_M3 -2 1 25 0 -22695936 D2C_B03_S2_M5 -2 1 26 0 -22761472 D2C_B03_S2_M2 -2 1 27 0 -22827008 D2C_B03_S2_M6 -2 1 28 0 -22892544 D2C_B03_S2_M1 -2 1 29 0 -22958080 D2C_B04_S1_M4 -2 1 30 0 -23023616 D2C_B04_S1_M3 -2 1 31 0 -23089152 D2C_B04_S1_M5 -2 1 32 0 -23154688 D2C_B04_S1_M2 -2 1 33 0 -23220224 D2C_B04_S1_M6 -2 1 34 0 -23285760 D2C_B04_S1_M1 -2 1 35 0 -23351296 D2C_B04_S2_M4 -2 1 36 0 -23416832 D2C_B04_S2_M3 -2 1 37 0 -23482368 D2C_B04_S2_M5 -2 1 38 0 -23547904 D2C_B04_S2_M2 -2 1 39 0 -23613440 D2C_B04_S2_M6 -2 1 40 0 -23678976 D2C_B04_S2_M1 -2 1 41 0 -23744512 D2C_B01_S1_M4 -2 1 42 0 -23810048 D2C_B01_S1_M3 -2 1 43 0 -23875584 D2C_B01_S1_M5 -2 1 44 0 -23941120 D2C_B01_S1_M2 -2 1 45 0 -24006656 D2C_B01_S1_M6 -2 1 46 0 -24072192 D2C_B01_S1_M1 -2 1 47 0 -25186304 D3C_B01_S2_M4 -2 2 0 0 -25251840 D3C_B01_S2_M3 -2 2 1 0 -25317376 D3C_B01_S2_M5 -2 2 2 0 -25382912 D3C_B01_S2_M2 -2 2 3 0 -25448448 D3C_B01_S2_M6 -2 2 4 0 -25513984 D3C_B01_S2_M1 -2 2 5 0 -25579520 D3C_B02_S1_M4 -2 2 6 0 -25645056 D3C_B02_S1_M3 -2 2 7 0 -25710592 D3C_B02_S1_M5 -2 2 8 0 -25776128 D3C_B02_S1_M2 -2 2 9 0 -25841664 D3C_B02_S1_M6 -2 2 10 0 -25907200 D3C_B02_S1_M1 -2 2 11 0 -25972736 D3C_B02_S2_M4 -2 2 12 0 -26038272 D3C_B02_S2_M3 -2 2 13 0 -26103808 D3C_B02_S2_M5 -2 2 14 0 -26169344 D3C_B02_S2_M2 -2 2 15 0 -26234880 D3C_B02_S2_M6 -2 2 16 0 -26300416 D3C_B02_S2_M1 -2 2 17 0 -26365952 D3C_B03_S1_M4 -2 2 18 0 -26431488 D3C_B03_S1_M3 -2 2 19 0 -26497024 D3C_B03_S1_M5 -2 2 20 0 -26562560 D3C_B03_S1_M2 -2 2 21 0 -26628096 D3C_B03_S1_M6 -2 2 22 0 -26693632 D3C_B03_S1_M1 -2 2 23 0 -26759168 D3C_B03_S2_M4 -2 2 24 0 -26824704 D3C_B03_S2_M3 -2 2 25 0 -26890240 D3C_B03_S2_M5 -2 2 26 0 -26955776 D3C_B03_S2_M2 -2 2 27 0 -27021312 D3C_B03_S2_M6 -2 2 28 0 -27086848 D3C_B03_S2_M1 -2 2 29 0 -27152384 D3C_B04_S1_M4 -2 2 30 0 -27217920 D3C_B04_S1_M3 -2 2 31 0 -27283456 D3C_B04_S1_M5 -2 2 32 0 -27348992 D3C_B04_S1_M2 -2 2 33 0 -27414528 D3C_B04_S1_M6 -2 2 34 0 -27480064 D3C_B04_S1_M1 -2 2 35 0 -27545600 D3C_B04_S2_M4 -2 2 36 0 -27611136 D3C_B04_S2_M3 -2 2 37 0 -27676672 D3C_B04_S2_M5 -2 2 38 0 -27742208 D3C_B04_S2_M2 -2 2 39 0 -27807744 D3C_B04_S2_M6 -2 2 40 0 -27873280 D3C_B04_S2_M1 -2 2 41 0 -27938816 D3C_B01_S1_M4 -2 2 42 0 -28004352 D3C_B01_S1_M3 -2 2 43 0 -28069888 D3C_B01_S1_M5 -2 2 44 0 -28135424 D3C_B01_S1_M2 -2 2 45 0 -28200960 D3C_B01_S1_M6 -2 2 46 0 -28266496 D3C_B01_S1_M1 -2 2 47 0 -33554432 LI_S01_C_M4_C8_2 0 0 0 -10 -33556480 LI_S01_C_M4_C8_1 0 0 0 -9 -33558528 LI_S01_C_M4_C7_2 0 0 0 -8 -33560576 LI_S01_C_M4_C7_1 0 0 0 -7 -33562624 LI_S01_C_M3_C6 0 0 0 -6 -33564672 LI_S01_C_M3_C5 0 0 0 -5 -33566720 LI_S01_C_M2_C4 0 0 0 -4 -33568768 LI_S01_C_M2_C3 0 0 0 -3 -33570816 LI_S01_C_M1_C2 0 0 0 -2 -33572864 LI_S01_C_M1_C1 0 0 0 -1 -33574912 LI_S01_A_M1_A1 0 0 0 0 -33576960 LI_S01_A_M1_A2 0 0 0 1 -33579008 LI_S01_A_M2_A3 0 0 0 2 -33581056 LI_S01_A_M2_A4 0 0 0 3 -33583104 LI_S01_A_M3_A5 0 0 0 4 -33585152 LI_S01_A_M3_A6 0 0 0 5 -33587200 LI_S01_A_M4_A7_1 0 0 0 6 -33589248 LI_S01_A_M4_A7_2 0 0 0 7 -33591296 LI_S01_A_M4_A8_1 0 0 0 8 -33593344 LI_S01_A_M4_A8_2 0 0 0 9 -33619968 LI_S02_C_M4_C8_2 0 0 1 -10 -33622016 LI_S02_C_M4_C8_1 0 0 1 -9 -33624064 LI_S02_C_M4_C7_2 0 0 1 -8 -33626112 LI_S02_C_M4_C7_1 0 0 1 -7 -33628160 LI_S02_C_M3_C6 0 0 1 -6 -33630208 LI_S02_C_M3_C5 0 0 1 -5 -33632256 LI_S02_C_M2_C4 0 0 1 -4 -33634304 LI_S02_C_M2_C3 0 0 1 -3 -33636352 LI_S02_C_M1_C2 0 0 1 -2 -33638400 LI_S02_C_M1_C1 0 0 1 -1 -33640448 LI_S02_A_M1_A1 0 0 1 0 -33642496 LI_S02_A_M1_A2 0 0 1 1 -33644544 LI_S02_A_M2_A3 0 0 1 2 -33646592 LI_S02_A_M2_A4 0 0 1 3 -33648640 LI_S02_A_M3_A5 0 0 1 4 -33650688 LI_S02_A_M3_A6 0 0 1 5 -33652736 LI_S02_A_M4_A7_1 0 0 1 6 -33654784 LI_S02_A_M4_A7_2 0 0 1 7 -33656832 LI_S02_A_M4_A8_1 0 0 1 8 -33658880 LI_S02_A_M4_A8_2 0 0 1 9 -33685504 LI_S03_C_M4_C8_2 0 0 2 -10 -33687552 LI_S03_C_M4_C8_1 0 0 2 -9 -33689600 LI_S03_C_M4_C7_2 0 0 2 -8 -33691648 LI_S03_C_M4_C7_1 0 0 2 -7 -33693696 LI_S03_C_M3_C6 0 0 2 -6 -33695744 LI_S03_C_M3_C5 0 0 2 -5 -33697792 LI_S03_C_M2_C4 0 0 2 -4 -33699840 LI_S03_C_M2_C3 0 0 2 -3 -33701888 LI_S03_C_M1_C2 0 0 2 -2 -33703936 LI_S03_C_M1_C1 0 0 2 -1 -33705984 LI_S03_A_M1_A1 0 0 2 0 -33708032 LI_S03_A_M1_A2 0 0 2 1 -33710080 LI_S03_A_M2_A3 0 0 2 2 -33712128 LI_S03_A_M2_A4 0 0 2 3 -33714176 LI_S03_A_M3_A5 0 0 2 4 -33716224 LI_S03_A_M3_A6 0 0 2 5 -33718272 LI_S03_A_M4_A7_1 0 0 2 6 -33720320 LI_S03_A_M4_A7_2 0 0 2 7 -33722368 LI_S03_A_M4_A8_1 0 0 2 8 -33724416 LI_S03_A_M4_A8_2 0 0 2 9 -33751040 LI_S04_C_M4_C8_2 0 0 3 -10 -33753088 LI_S04_C_M4_C8_1 0 0 3 -9 -33755136 LI_S04_C_M4_C7_2 0 0 3 -8 -33757184 LI_S04_C_M4_C7_1 0 0 3 -7 -33759232 LI_S04_C_M3_C6 0 0 3 -6 -33761280 LI_S04_C_M3_C5 0 0 3 -5 -33763328 LI_S04_C_M2_C4 0 0 3 -4 -33765376 LI_S04_C_M2_C3 0 0 3 -3 -33767424 LI_S04_C_M1_C2 0 0 3 -2 -33769472 LI_S04_C_M1_C1 0 0 3 -1 -33771520 LI_S04_A_M1_A1 0 0 3 0 -33773568 LI_S04_A_M1_A2 0 0 3 1 -33775616 LI_S04_A_M2_A3 0 0 3 2 -33777664 LI_S04_A_M2_A4 0 0 3 3 -33779712 LI_S04_A_M3_A5 0 0 3 4 -33781760 LI_S04_A_M3_A6 0 0 3 5 -33783808 LI_S04_A_M4_A7_1 0 0 3 6 -33785856 LI_S04_A_M4_A7_2 0 0 3 7 -33787904 LI_S04_A_M4_A8_1 0 0 3 8 -33789952 LI_S04_A_M4_A8_2 0 0 3 9 -33816576 LI_S05_C_M4_C8_2 0 0 4 -10 -33818624 LI_S05_C_M4_C8_1 0 0 4 -9 -33820672 LI_S05_C_M4_C7_2 0 0 4 -8 -33822720 LI_S05_C_M4_C7_1 0 0 4 -7 -33824768 LI_S05_C_M3_C6 0 0 4 -6 -33826816 LI_S05_C_M3_C5 0 0 4 -5 -33828864 LI_S05_C_M2_C4 0 0 4 -4 -33830912 LI_S05_C_M2_C3 0 0 4 -3 -33832960 LI_S05_C_M1_C2 0 0 4 -2 -33835008 LI_S05_C_M1_C1 0 0 4 -1 -33837056 LI_S05_A_M1_A1 0 0 4 0 -33839104 LI_S05_A_M1_A2 0 0 4 1 -33841152 LI_S05_A_M2_A3 0 0 4 2 -33843200 LI_S05_A_M2_A4 0 0 4 3 -33845248 LI_S05_A_M3_A5 0 0 4 4 -33847296 LI_S05_A_M3_A6 0 0 4 5 -33849344 LI_S05_A_M4_A7_1 0 0 4 6 -33851392 LI_S05_A_M4_A7_2 0 0 4 7 -33853440 LI_S05_A_M4_A8_1 0 0 4 8 -33855488 LI_S05_A_M4_A8_2 0 0 4 9 -33882112 LI_S06_C_M4_C8_2 0 0 5 -10 -33884160 LI_S06_C_M4_C8_1 0 0 5 -9 -33886208 LI_S06_C_M4_C7_2 0 0 5 -8 -33888256 LI_S06_C_M4_C7_1 0 0 5 -7 -33890304 LI_S06_C_M3_C6 0 0 5 -6 -33892352 LI_S06_C_M3_C5 0 0 5 -5 -33894400 LI_S06_C_M2_C4 0 0 5 -4 -33896448 LI_S06_C_M2_C3 0 0 5 -3 -33898496 LI_S06_C_M1_C2 0 0 5 -2 -33900544 LI_S06_C_M1_C1 0 0 5 -1 -33902592 LI_S06_A_M1_A1 0 0 5 0 -33904640 LI_S06_A_M1_A2 0 0 5 1 -33906688 LI_S06_A_M2_A3 0 0 5 2 -33908736 LI_S06_A_M2_A4 0 0 5 3 -33910784 LI_S06_A_M3_A5 0 0 5 4 -33912832 LI_S06_A_M3_A6 0 0 5 5 -33914880 LI_S06_A_M4_A7_1 0 0 5 6 -33916928 LI_S06_A_M4_A7_2 0 0 5 7 -33918976 LI_S06_A_M4_A8_1 0 0 5 8 -33921024 LI_S06_A_M4_A8_2 0 0 5 9 -33947648 LI_S07_C_M4_C8_2 0 0 6 -10 -33949696 LI_S07_C_M4_C8_1 0 0 6 -9 -33951744 LI_S07_C_M4_C7_2 0 0 6 -8 -33953792 LI_S07_C_M4_C7_1 0 0 6 -7 -33955840 LI_S07_C_M3_C6 0 0 6 -6 -33957888 LI_S07_C_M3_C5 0 0 6 -5 -33959936 LI_S07_C_M2_C4 0 0 6 -4 -33961984 LI_S07_C_M2_C3 0 0 6 -3 -33964032 LI_S07_C_M1_C2 0 0 6 -2 -33966080 LI_S07_C_M1_C1 0 0 6 -1 -33968128 LI_S07_A_M1_A1 0 0 6 0 -33970176 LI_S07_A_M1_A2 0 0 6 1 -33972224 LI_S07_A_M2_A3 0 0 6 2 -33974272 LI_S07_A_M2_A4 0 0 6 3 -33976320 LI_S07_A_M3_A5 0 0 6 4 -33978368 LI_S07_A_M3_A6 0 0 6 5 -33980416 LI_S07_A_M4_A7_1 0 0 6 6 -33982464 LI_S07_A_M4_A7_2 0 0 6 7 -33984512 LI_S07_A_M4_A8_1 0 0 6 8 -33986560 LI_S07_A_M4_A8_2 0 0 6 9 -34013184 LI_S08_C_M4_C8_2 0 0 7 -10 -34015232 LI_S08_C_M4_C8_1 0 0 7 -9 -34017280 LI_S08_C_M4_C7_2 0 0 7 -8 -34019328 LI_S08_C_M4_C7_1 0 0 7 -7 -34021376 LI_S08_C_M3_C6 0 0 7 -6 -34023424 LI_S08_C_M3_C5 0 0 7 -5 -34025472 LI_S08_C_M2_C4 0 0 7 -4 -34027520 LI_S08_C_M2_C3 0 0 7 -3 -34029568 LI_S08_C_M1_C2 0 0 7 -2 -34031616 LI_S08_C_M1_C1 0 0 7 -1 -34033664 LI_S08_A_M1_A1 0 0 7 0 -34035712 LI_S08_A_M1_A2 0 0 7 1 -34037760 LI_S08_A_M2_A3 0 0 7 2 -34039808 LI_S08_A_M2_A4 0 0 7 3 -34041856 LI_S08_A_M3_A5 0 0 7 4 -34043904 LI_S08_A_M3_A6 0 0 7 5 -34045952 LI_S08_A_M4_A7_1 0 0 7 6 -34048000 LI_S08_A_M4_A7_2 0 0 7 7 -34050048 LI_S08_A_M4_A8_1 0 0 7 8 -34052096 LI_S08_A_M4_A8_2 0 0 7 9 -34078720 LI_S09_C_M4_C8_2 0 0 8 -10 -34080768 LI_S09_C_M4_C8_1 0 0 8 -9 -34082816 LI_S09_C_M4_C7_2 0 0 8 -8 -34084864 LI_S09_C_M4_C7_1 0 0 8 -7 -34086912 LI_S09_C_M3_C6 0 0 8 -6 -34088960 LI_S09_C_M3_C5 0 0 8 -5 -34091008 LI_S09_C_M2_C4 0 0 8 -4 -34093056 LI_S09_C_M2_C3 0 0 8 -3 -34095104 LI_S09_C_M1_C2 0 0 8 -2 -34097152 LI_S09_C_M1_C1 0 0 8 -1 -34099200 LI_S09_A_M1_A1 0 0 8 0 -34101248 LI_S09_A_M1_A2 0 0 8 1 -34103296 LI_S09_A_M2_A3 0 0 8 2 -34105344 LI_S09_A_M2_A4 0 0 8 3 -34107392 LI_S09_A_M3_A5 0 0 8 4 -34109440 LI_S09_A_M3_A6 0 0 8 5 -34111488 LI_S09_A_M4_A7_1 0 0 8 6 -34113536 LI_S09_A_M4_A7_2 0 0 8 7 -34115584 LI_S09_A_M4_A8_1 0 0 8 8 -34117632 LI_S09_A_M4_A8_2 0 0 8 9 -34144256 LI_S10_C_M4_C8_2 0 0 9 -10 -34146304 LI_S10_C_M4_C8_1 0 0 9 -9 -34148352 LI_S10_C_M4_C7_2 0 0 9 -8 -34150400 LI_S10_C_M4_C7_1 0 0 9 -7 -34152448 LI_S10_C_M3_C6 0 0 9 -6 -34154496 LI_S10_C_M3_C5 0 0 9 -5 -34156544 LI_S10_C_M2_C4 0 0 9 -4 -34158592 LI_S10_C_M2_C3 0 0 9 -3 -34160640 LI_S10_C_M1_C2 0 0 9 -2 -34162688 LI_S10_C_M1_C1 0 0 9 -1 -34164736 LI_S10_A_M1_A1 0 0 9 0 -34166784 LI_S10_A_M1_A2 0 0 9 1 -34168832 LI_S10_A_M2_A3 0 0 9 2 -34170880 LI_S10_A_M2_A4 0 0 9 3 -34172928 LI_S10_A_M3_A5 0 0 9 4 -34174976 LI_S10_A_M3_A6 0 0 9 5 -34177024 LI_S10_A_M4_A7_1 0 0 9 6 -34179072 LI_S10_A_M4_A7_2 0 0 9 7 -34181120 LI_S10_A_M4_A8_1 0 0 9 8 -34183168 LI_S10_A_M4_A8_2 0 0 9 9 -34209792 LI_S11_C_M4_C8_2 0 0 10 -10 -34211840 LI_S11_C_M4_C8_1 0 0 10 -9 -34213888 LI_S11_C_M4_C7_2 0 0 10 -8 -34215936 LI_S11_C_M4_C7_1 0 0 10 -7 -34217984 LI_S11_C_M3_C6 0 0 10 -6 -34220032 LI_S11_C_M3_C5 0 0 10 -5 -34222080 LI_S11_C_M2_C4 0 0 10 -4 -34224128 LI_S11_C_M2_C3 0 0 10 -3 -34226176 LI_S11_C_M1_C2 0 0 10 -2 -34228224 LI_S11_C_M1_C1 0 0 10 -1 -34230272 LI_S11_A_M1_A1 0 0 10 0 -34232320 LI_S11_A_M1_A2 0 0 10 1 -34234368 LI_S11_A_M2_A3 0 0 10 2 -34236416 LI_S11_A_M2_A4 0 0 10 3 -34238464 LI_S11_A_M3_A5 0 0 10 4 -34240512 LI_S11_A_M3_A6 0 0 10 5 -34242560 LI_S11_A_M4_A7_1 0 0 10 6 -34244608 LI_S11_A_M4_A7_2 0 0 10 7 -34246656 LI_S11_A_M4_A8_1 0 0 10 8 -34248704 LI_S11_A_M4_A8_2 0 0 10 9 -34275328 LI_S12_C_M4_C8_2 0 0 11 -10 -34277376 LI_S12_C_M4_C8_1 0 0 11 -9 -34279424 LI_S12_C_M4_C7_2 0 0 11 -8 -34281472 LI_S12_C_M4_C7_1 0 0 11 -7 -34283520 LI_S12_C_M3_C6 0 0 11 -6 -34285568 LI_S12_C_M3_C5 0 0 11 -5 -34287616 LI_S12_C_M2_C4 0 0 11 -4 -34289664 LI_S12_C_M2_C3 0 0 11 -3 -34291712 LI_S12_C_M1_C2 0 0 11 -2 -34293760 LI_S12_C_M1_C1 0 0 11 -1 -34295808 LI_S12_A_M1_A1 0 0 11 0 -34297856 LI_S12_A_M1_A2 0 0 11 1 -34299904 LI_S12_A_M2_A3 0 0 11 2 -34301952 LI_S12_A_M2_A4 0 0 11 3 -34304000 LI_S12_A_M3_A5 0 0 11 4 -34306048 LI_S12_A_M3_A6 0 0 11 5 -34308096 LI_S12_A_M4_A7_1 0 0 11 6 -34310144 LI_S12_A_M4_A7_2 0 0 11 7 -34312192 LI_S12_A_M4_A8_1 0 0 11 8 -34314240 LI_S12_A_M4_A8_2 0 0 11 9 -34340864 LI_S13_C_M4_C8_2 0 0 12 -10 -34342912 LI_S13_C_M4_C8_1 0 0 12 -9 -34344960 LI_S13_C_M4_C7_2 0 0 12 -8 -34347008 LI_S13_C_M4_C7_1 0 0 12 -7 -34349056 LI_S13_C_M3_C6 0 0 12 -6 -34351104 LI_S13_C_M3_C5 0 0 12 -5 -34353152 LI_S13_C_M2_C4 0 0 12 -4 -34355200 LI_S13_C_M2_C3 0 0 12 -3 -34357248 LI_S13_C_M1_C2 0 0 12 -2 -34359296 LI_S13_C_M1_C1 0 0 12 -1 -34361344 LI_S13_A_M1_A1 0 0 12 0 -34363392 LI_S13_A_M1_A2 0 0 12 1 -34365440 LI_S13_A_M2_A3 0 0 12 2 -34367488 LI_S13_A_M2_A4 0 0 12 3 -34369536 LI_S13_A_M3_A5 0 0 12 4 -34371584 LI_S13_A_M3_A6 0 0 12 5 -34373632 LI_S13_A_M4_A7_1 0 0 12 6 -34375680 LI_S13_A_M4_A7_2 0 0 12 7 -34377728 LI_S13_A_M4_A8_1 0 0 12 8 -34379776 LI_S13_A_M4_A8_2 0 0 12 9 -34406400 LI_S14_C_M4_C8_2 0 0 13 -10 -34408448 LI_S14_C_M4_C8_1 0 0 13 -9 -34410496 LI_S14_C_M4_C7_2 0 0 13 -8 -34412544 LI_S14_C_M4_C7_1 0 0 13 -7 -34414592 LI_S14_C_M3_C6 0 0 13 -6 -34416640 LI_S14_C_M3_C5 0 0 13 -5 -34418688 LI_S14_C_M2_C4 0 0 13 -4 -34420736 LI_S14_C_M2_C3 0 0 13 -3 -34422784 LI_S14_C_M1_C2 0 0 13 -2 -34424832 LI_S14_C_M1_C1 0 0 13 -1 -34426880 LI_S14_A_M1_A1 0 0 13 0 -34428928 LI_S14_A_M1_A2 0 0 13 1 -34430976 LI_S14_A_M2_A3 0 0 13 2 -34433024 LI_S14_A_M2_A4 0 0 13 3 -34435072 LI_S14_A_M3_A5 0 0 13 4 -34437120 LI_S14_A_M3_A6 0 0 13 5 -34439168 LI_S14_A_M4_A7_1 0 0 13 6 -34441216 LI_S14_A_M4_A7_2 0 0 13 7 -34443264 LI_S14_A_M4_A8_1 0 0 13 8 -34445312 LI_S14_A_M4_A8_2 0 0 13 9 -37756928 L0_B11_S02_M6C 0 1 0 -6 -37758976 L0_B11_S02_M5C 0 1 0 -5 -37761024 L0_B11_S02_M4C 0 1 0 -4 -37763072 L0_B11_S02_M3C 0 1 0 -3 -37765120 L0_B11_S02_M2C 0 1 0 -2 -37767168 L0_B11_S02_M1C 0 1 0 -1 -37769216 L0_B11_S02_M0 0 1 0 0 -37771264 L0_B11_S02_M1A 0 1 0 1 -37773312 L0_B11_S02_M2A 0 1 0 2 -37775360 L0_B11_S02_M3A 0 1 0 3 -37777408 L0_B11_S02_M4A 0 1 0 4 -37779456 L0_B11_S02_M5A 0 1 0 5 -37781504 L0_B11_S02_M6A 0 1 0 6 -37822464 L0_B01_S01_M6C 0 1 1 -6 -37824512 L0_B01_S01_M5C 0 1 1 -5 -37826560 L0_B01_S01_M4C 0 1 1 -4 -37828608 L0_B01_S01_M3C 0 1 1 -3 -37830656 L0_B01_S01_M2C 0 1 1 -2 -37832704 L0_B01_S01_M1C 0 1 1 -1 -37834752 L0_B01_S01_M0 0 1 1 0 -37836800 L0_B01_S01_M1A 0 1 1 1 -37838848 L0_B01_S01_M2A 0 1 1 2 -37840896 L0_B01_S01_M3A 0 1 1 3 -37842944 L0_B01_S01_M4A 0 1 1 4 -37844992 L0_B01_S01_M5A 0 1 1 5 -37847040 L0_B01_S01_M6A 0 1 1 6 -37888000 L0_B01_S02_M6C 0 1 2 -6 -37890048 L0_B01_S02_M5C 0 1 2 -5 -37892096 L0_B01_S02_M4C 0 1 2 -4 -37894144 L0_B01_S02_M3C 0 1 2 -3 -37896192 L0_B01_S02_M2C 0 1 2 -2 -37898240 L0_B01_S02_M1C 0 1 2 -1 -37900288 L0_B01_S02_M0 0 1 2 0 -37902336 L0_B01_S02_M1A 0 1 2 1 -37904384 L0_B01_S02_M2A 0 1 2 2 -37906432 L0_B01_S02_M3A 0 1 2 3 -37908480 L0_B01_S02_M4A 0 1 2 4 -37910528 L0_B01_S02_M5A 0 1 2 5 -37912576 L0_B01_S02_M6A 0 1 2 6 -37953536 L0_B02_S01_M6C 0 1 3 -6 -37955584 L0_B02_S01_M5C 0 1 3 -5 -37957632 L0_B02_S01_M4C 0 1 3 -4 -37959680 L0_B02_S01_M3C 0 1 3 -3 -37961728 L0_B02_S01_M2C 0 1 3 -2 -37963776 L0_B02_S01_M1C 0 1 3 -1 -37965824 L0_B02_S01_M0 0 1 3 0 -37967872 L0_B02_S01_M1A 0 1 3 1 -37969920 L0_B02_S01_M2A 0 1 3 2 -37971968 L0_B02_S01_M3A 0 1 3 3 -37974016 L0_B02_S01_M4A 0 1 3 4 -37976064 L0_B02_S01_M5A 0 1 3 5 -37978112 L0_B02_S01_M6A 0 1 3 6 -38019072 L0_B02_S02_M6C 0 1 4 -6 -38021120 L0_B02_S02_M5C 0 1 4 -5 -38023168 L0_B02_S02_M4C 0 1 4 -4 -38025216 L0_B02_S02_M3C 0 1 4 -3 -38027264 L0_B02_S02_M2C 0 1 4 -2 -38029312 L0_B02_S02_M1C 0 1 4 -1 -38031360 L0_B02_S02_M0 0 1 4 0 -38033408 L0_B02_S02_M1A 0 1 4 1 -38035456 L0_B02_S02_M2A 0 1 4 2 -38037504 L0_B02_S02_M3A 0 1 4 3 -38039552 L0_B02_S02_M4A 0 1 4 4 -38041600 L0_B02_S02_M5A 0 1 4 5 -38043648 L0_B02_S02_M6A 0 1 4 6 -38084608 L0_B03_S01_M6C 0 1 5 -6 -38086656 L0_B03_S01_M5C 0 1 5 -5 -38088704 L0_B03_S01_M4C 0 1 5 -4 -38090752 L0_B03_S01_M3C 0 1 5 -3 -38092800 L0_B03_S01_M2C 0 1 5 -2 -38094848 L0_B03_S01_M1C 0 1 5 -1 -38096896 L0_B03_S01_M0 0 1 5 0 -38098944 L0_B03_S01_M1A 0 1 5 1 -38100992 L0_B03_S01_M2A 0 1 5 2 -38103040 L0_B03_S01_M3A 0 1 5 3 -38105088 L0_B03_S01_M4A 0 1 5 4 -38107136 L0_B03_S01_M5A 0 1 5 5 -38109184 L0_B03_S01_M6A 0 1 5 6 -38150144 L0_B03_S02_M6C 0 1 6 -6 -38152192 L0_B03_S02_M5C 0 1 6 -5 -38154240 L0_B03_S02_M4C 0 1 6 -4 -38156288 L0_B03_S02_M3C 0 1 6 -3 -38158336 L0_B03_S02_M2C 0 1 6 -2 -38160384 L0_B03_S02_M1C 0 1 6 -1 -38162432 L0_B03_S02_M0 0 1 6 0 -38164480 L0_B03_S02_M1A 0 1 6 1 -38166528 L0_B03_S02_M2A 0 1 6 2 -38168576 L0_B03_S02_M3A 0 1 6 3 -38170624 L0_B03_S02_M4A 0 1 6 4 -38172672 L0_B03_S02_M5A 0 1 6 5 -38174720 L0_B03_S02_M6A 0 1 6 6 -38215680 L0_B04_S01_M6C 0 1 7 -6 -38217728 L0_B04_S01_M5C 0 1 7 -5 -38219776 L0_B04_S01_M4C 0 1 7 -4 -38221824 L0_B04_S01_M3C 0 1 7 -3 -38223872 L0_B04_S01_M2C 0 1 7 -2 -38225920 L0_B04_S01_M1C 0 1 7 -1 -38227968 L0_B04_S01_M0 0 1 7 0 -38230016 L0_B04_S01_M1A 0 1 7 1 -38232064 L0_B04_S01_M2A 0 1 7 2 -38234112 L0_B04_S01_M3A 0 1 7 3 -38236160 L0_B04_S01_M4A 0 1 7 4 -38238208 L0_B04_S01_M5A 0 1 7 5 -38240256 L0_B04_S01_M6A 0 1 7 6 -38281216 L0_B04_S02_M6C 0 1 8 -6 -38283264 L0_B04_S02_M5C 0 1 8 -5 -38285312 L0_B04_S02_M4C 0 1 8 -4 -38287360 L0_B04_S02_M3C 0 1 8 -3 -38289408 L0_B04_S02_M2C 0 1 8 -2 -38291456 L0_B04_S02_M1C 0 1 8 -1 -38293504 L0_B04_S02_M0 0 1 8 0 -38295552 L0_B04_S02_M1A 0 1 8 1 -38297600 L0_B04_S02_M2A 0 1 8 2 -38299648 L0_B04_S02_M3A 0 1 8 3 -38301696 L0_B04_S02_M4A 0 1 8 4 -38303744 L0_B04_S02_M5A 0 1 8 5 -38305792 L0_B04_S02_M6A 0 1 8 6 -38346752 L0_B05_S01_M6C 0 1 9 -6 -38348800 L0_B05_S01_M5C 0 1 9 -5 -38350848 L0_B05_S01_M4C 0 1 9 -4 -38352896 L0_B05_S01_M3C 0 1 9 -3 -38354944 L0_B05_S01_M2C 0 1 9 -2 -38356992 L0_B05_S01_M1C 0 1 9 -1 -38359040 L0_B05_S01_M0 0 1 9 0 -38361088 L0_B05_S01_M1A 0 1 9 1 -38363136 L0_B05_S01_M2A 0 1 9 2 -38365184 L0_B05_S01_M3A 0 1 9 3 -38367232 L0_B05_S01_M4A 0 1 9 4 -38369280 L0_B05_S01_M5A 0 1 9 5 -38371328 L0_B05_S01_M6A 0 1 9 6 -38412288 L0_B05_S02_M6C 0 1 10 -6 -38414336 L0_B05_S02_M5C 0 1 10 -5 -38416384 L0_B05_S02_M4C 0 1 10 -4 -38418432 L0_B05_S02_M3C 0 1 10 -3 -38420480 L0_B05_S02_M2C 0 1 10 -2 -38422528 L0_B05_S02_M1C 0 1 10 -1 -38424576 L0_B05_S02_M0 0 1 10 0 -38426624 L0_B05_S02_M1A 0 1 10 1 -38428672 L0_B05_S02_M2A 0 1 10 2 -38430720 L0_B05_S02_M3A 0 1 10 3 -38432768 L0_B05_S02_M4A 0 1 10 4 -38434816 L0_B05_S02_M5A 0 1 10 5 -38436864 L0_B05_S02_M6A 0 1 10 6 -38477824 L0_B06_S01_M6C 0 1 11 -6 -38479872 L0_B06_S01_M5C 0 1 11 -5 -38481920 L0_B06_S01_M4C 0 1 11 -4 -38483968 L0_B06_S01_M3C 0 1 11 -3 -38486016 L0_B06_S01_M2C 0 1 11 -2 -38488064 L0_B06_S01_M1C 0 1 11 -1 -38490112 L0_B06_S01_M0 0 1 11 0 -38492160 L0_B06_S01_M1A 0 1 11 1 -38494208 L0_B06_S01_M2A 0 1 11 2 -38496256 L0_B06_S01_M3A 0 1 11 3 -38498304 L0_B06_S01_M4A 0 1 11 4 -38500352 L0_B06_S01_M5A 0 1 11 5 -38502400 L0_B06_S01_M6A 0 1 11 6 -38543360 L0_B06_S02_M6C 0 1 12 -6 -38545408 L0_B06_S02_M5C 0 1 12 -5 -38547456 L0_B06_S02_M4C 0 1 12 -4 -38549504 L0_B06_S02_M3C 0 1 12 -3 -38551552 L0_B06_S02_M2C 0 1 12 -2 -38553600 L0_B06_S02_M1C 0 1 12 -1 -38555648 L0_B06_S02_M0 0 1 12 0 -38557696 L0_B06_S02_M1A 0 1 12 1 -38559744 L0_B06_S02_M2A 0 1 12 2 -38561792 L0_B06_S02_M3A 0 1 12 3 -38563840 L0_B06_S02_M4A 0 1 12 4 -38565888 L0_B06_S02_M5A 0 1 12 5 -38567936 L0_B06_S02_M6A 0 1 12 6 -38608896 L0_B07_S01_M6C 0 1 13 -6 -38610944 L0_B07_S01_M5C 0 1 13 -5 -38612992 L0_B07_S01_M4C 0 1 13 -4 -38615040 L0_B07_S01_M3C 0 1 13 -3 -38617088 L0_B07_S01_M2C 0 1 13 -2 -38619136 L0_B07_S01_M1C 0 1 13 -1 -38621184 L0_B07_S01_M0 0 1 13 0 -38623232 L0_B07_S01_M1A 0 1 13 1 -38625280 L0_B07_S01_M2A 0 1 13 2 -38627328 L0_B07_S01_M3A 0 1 13 3 -38629376 L0_B07_S01_M4A 0 1 13 4 -38631424 L0_B07_S01_M5A 0 1 13 5 -38633472 L0_B07_S01_M6A 0 1 13 6 -38674432 L0_B07_S02_M6C 0 1 14 -6 -38676480 L0_B07_S02_M5C 0 1 14 -5 -38678528 L0_B07_S02_M4C 0 1 14 -4 -38680576 L0_B07_S02_M3C 0 1 14 -3 -38682624 L0_B07_S02_M2C 0 1 14 -2 -38684672 L0_B07_S02_M1C 0 1 14 -1 -38686720 L0_B07_S02_M0 0 1 14 0 -38688768 L0_B07_S02_M1A 0 1 14 1 -38690816 L0_B07_S02_M2A 0 1 14 2 -38692864 L0_B07_S02_M3A 0 1 14 3 -38694912 L0_B07_S02_M4A 0 1 14 4 -38696960 L0_B07_S02_M5A 0 1 14 5 -38699008 L0_B07_S02_M6A 0 1 14 6 -38739968 L0_B08_S01_M6C 0 1 15 -6 -38742016 L0_B08_S01_M5C 0 1 15 -5 -38744064 L0_B08_S01_M4C 0 1 15 -4 -38746112 L0_B08_S01_M3C 0 1 15 -3 -38748160 L0_B08_S01_M2C 0 1 15 -2 -38750208 L0_B08_S01_M1C 0 1 15 -1 -38752256 L0_B08_S01_M0 0 1 15 0 -38754304 L0_B08_S01_M1A 0 1 15 1 -38756352 L0_B08_S01_M2A 0 1 15 2 -38758400 L0_B08_S01_M3A 0 1 15 3 -38760448 L0_B08_S01_M4A 0 1 15 4 -38762496 L0_B08_S01_M5A 0 1 15 5 -38764544 L0_B08_S01_M6A 0 1 15 6 -38805504 L0_B08_S02_M6C 0 1 16 -6 -38807552 L0_B08_S02_M5C 0 1 16 -5 -38809600 L0_B08_S02_M4C 0 1 16 -4 -38811648 L0_B08_S02_M3C 0 1 16 -3 -38813696 L0_B08_S02_M2C 0 1 16 -2 -38815744 L0_B08_S02_M1C 0 1 16 -1 -38817792 L0_B08_S02_M0 0 1 16 0 -38819840 L0_B08_S02_M1A 0 1 16 1 -38821888 L0_B08_S02_M2A 0 1 16 2 -38823936 L0_B08_S02_M3A 0 1 16 3 -38825984 L0_B08_S02_M4A 0 1 16 4 -38828032 L0_B08_S02_M5A 0 1 16 5 -38830080 L0_B08_S02_M6A 0 1 16 6 -38871040 L0_B09_S01_M6C 0 1 17 -6 -38873088 L0_B09_S01_M5C 0 1 17 -5 -38875136 L0_B09_S01_M4C 0 1 17 -4 -38877184 L0_B09_S01_M3C 0 1 17 -3 -38879232 L0_B09_S01_M2C 0 1 17 -2 -38881280 L0_B09_S01_M1C 0 1 17 -1 -38883328 L0_B09_S01_M0 0 1 17 0 -38885376 L0_B09_S01_M1A 0 1 17 1 -38887424 L0_B09_S01_M2A 0 1 17 2 -38889472 L0_B09_S01_M3A 0 1 17 3 -38891520 L0_B09_S01_M4A 0 1 17 4 -38893568 L0_B09_S01_M5A 0 1 17 5 -38895616 L0_B09_S01_M6A 0 1 17 6 -38936576 L0_B09_S02_M6C 0 1 18 -6 -38938624 L0_B09_S02_M5C 0 1 18 -5 -38940672 L0_B09_S02_M4C 0 1 18 -4 -38942720 L0_B09_S02_M3C 0 1 18 -3 -38944768 L0_B09_S02_M2C 0 1 18 -2 -38946816 L0_B09_S02_M1C 0 1 18 -1 -38948864 L0_B09_S02_M0 0 1 18 0 -38950912 L0_B09_S02_M1A 0 1 18 1 -38952960 L0_B09_S02_M2A 0 1 18 2 -38955008 L0_B09_S02_M3A 0 1 18 3 -38957056 L0_B09_S02_M4A 0 1 18 4 -38959104 L0_B09_S02_M5A 0 1 18 5 -38961152 L0_B09_S02_M6A 0 1 18 6 -39002112 L0_B10_S01_M6C 0 1 19 -6 -39004160 L0_B10_S01_M5C 0 1 19 -5 -39006208 L0_B10_S01_M4C 0 1 19 -4 -39008256 L0_B10_S01_M3C 0 1 19 -3 -39010304 L0_B10_S01_M2C 0 1 19 -2 -39012352 L0_B10_S01_M1C 0 1 19 -1 -39014400 L0_B10_S01_M0 0 1 19 0 -39016448 L0_B10_S01_M1A 0 1 19 1 -39018496 L0_B10_S01_M2A 0 1 19 2 -39020544 L0_B10_S01_M3A 0 1 19 3 -39022592 L0_B10_S01_M4A 0 1 19 4 -39024640 L0_B10_S01_M5A 0 1 19 5 -39026688 L0_B10_S01_M6A 0 1 19 6 -39067648 L0_B10_S02_M6C 0 1 20 -6 -39069696 L0_B10_S02_M5C 0 1 20 -5 -39071744 L0_B10_S02_M4C 0 1 20 -4 -39073792 L0_B10_S02_M3C 0 1 20 -3 -39075840 L0_B10_S02_M2C 0 1 20 -2 -39077888 L0_B10_S02_M1C 0 1 20 -1 -39079936 L0_B10_S02_M0 0 1 20 0 -39081984 L0_B10_S02_M1A 0 1 20 1 -39084032 L0_B10_S02_M2A 0 1 20 2 -39086080 L0_B10_S02_M3A 0 1 20 3 -39088128 L0_B10_S02_M4A 0 1 20 4 -39090176 L0_B10_S02_M5A 0 1 20 5 -39092224 L0_B10_S02_M6A 0 1 20 6 -39133184 L0_B11_S01_M6C 0 1 21 -6 -39135232 L0_B11_S01_M5C 0 1 21 -5 -39137280 L0_B11_S01_M4C 0 1 21 -4 -39139328 L0_B11_S01_M3C 0 1 21 -3 -39141376 L0_B11_S01_M2C 0 1 21 -2 -39143424 L0_B11_S01_M1C 0 1 21 -1 -39145472 L0_B11_S01_M0 0 1 21 0 -39147520 L0_B11_S01_M1A 0 1 21 1 -39149568 L0_B11_S01_M2A 0 1 21 2 -39151616 L0_B11_S01_M3A 0 1 21 3 -39153664 L0_B11_S01_M4A 0 1 21 4 -39155712 L0_B11_S01_M5A 0 1 21 5 -39157760 L0_B11_S01_M6A 0 1 21 6 -41951232 L1_B01_S01_M6C 0 2 0 -6 -41953280 L1_B01_S01_M5C 0 2 0 -5 -41955328 L1_B01_S01_M4C 0 2 0 -4 -41957376 L1_B01_S01_M3C 0 2 0 -3 -41959424 L1_B01_S01_M2C 0 2 0 -2 -41961472 L1_B01_S01_M1C 0 2 0 -1 -41963520 L1_B01_S01_M0 0 2 0 0 -41965568 L1_B01_S01_M1A 0 2 0 1 -41967616 L1_B01_S01_M2A 0 2 0 2 -41969664 L1_B01_S01_M3A 0 2 0 3 -41971712 L1_B01_S01_M4A 0 2 0 4 -41973760 L1_B01_S01_M5A 0 2 0 5 -41975808 L1_B01_S01_M6A 0 2 0 6 -42016768 L1_B01_S02_M6C 0 2 1 -6 -42018816 L1_B01_S02_M5C 0 2 1 -5 -42020864 L1_B01_S02_M4C 0 2 1 -4 -42022912 L1_B01_S02_M3C 0 2 1 -3 -42024960 L1_B01_S02_M2C 0 2 1 -2 -42027008 L1_B01_S02_M1C 0 2 1 -1 -42029056 L1_B01_S02_M0 0 2 1 0 -42031104 L1_B01_S02_M1A 0 2 1 1 -42033152 L1_B01_S02_M2A 0 2 1 2 -42035200 L1_B01_S02_M3A 0 2 1 3 -42037248 L1_B01_S02_M4A 0 2 1 4 -42039296 L1_B01_S02_M5A 0 2 1 5 -42041344 L1_B01_S02_M6A 0 2 1 6 -42082304 L1_B02_S01_M6C 0 2 2 -6 -42084352 L1_B02_S01_M5C 0 2 2 -5 -42086400 L1_B02_S01_M4C 0 2 2 -4 -42088448 L1_B02_S01_M3C 0 2 2 -3 -42090496 L1_B02_S01_M2C 0 2 2 -2 -42092544 L1_B02_S01_M1C 0 2 2 -1 -42094592 L1_B02_S01_M0 0 2 2 0 -42096640 L1_B02_S01_M1A 0 2 2 1 -42098688 L1_B02_S01_M2A 0 2 2 2 -42100736 L1_B02_S01_M3A 0 2 2 3 -42102784 L1_B02_S01_M4A 0 2 2 4 -42104832 L1_B02_S01_M5A 0 2 2 5 -42106880 L1_B02_S01_M6A 0 2 2 6 -42147840 L1_B02_S02_M6C 0 2 3 -6 -42149888 L1_B02_S02_M5C 0 2 3 -5 -42151936 L1_B02_S02_M4C 0 2 3 -4 -42153984 L1_B02_S02_M3C 0 2 3 -3 -42156032 L1_B02_S02_M2C 0 2 3 -2 -42158080 L1_B02_S02_M1C 0 2 3 -1 -42160128 L1_B02_S02_M0 0 2 3 0 -42162176 L1_B02_S02_M1A 0 2 3 1 -42164224 L1_B02_S02_M2A 0 2 3 2 -42166272 L1_B02_S02_M3A 0 2 3 3 -42168320 L1_B02_S02_M4A 0 2 3 4 -42170368 L1_B02_S02_M5A 0 2 3 5 -42172416 L1_B02_S02_M6A 0 2 3 6 -42213376 L1_B03_S01_M6C 0 2 4 -6 -42215424 L1_B03_S01_M5C 0 2 4 -5 -42217472 L1_B03_S01_M4C 0 2 4 -4 -42219520 L1_B03_S01_M3C 0 2 4 -3 -42221568 L1_B03_S01_M2C 0 2 4 -2 -42223616 L1_B03_S01_M1C 0 2 4 -1 -42225664 L1_B03_S01_M0 0 2 4 0 -42227712 L1_B03_S01_M1A 0 2 4 1 -42229760 L1_B03_S01_M2A 0 2 4 2 -42231808 L1_B03_S01_M3A 0 2 4 3 -42233856 L1_B03_S01_M4A 0 2 4 4 -42235904 L1_B03_S01_M5A 0 2 4 5 -42237952 L1_B03_S01_M6A 0 2 4 6 -42278912 L1_B03_S02_M6C 0 2 5 -6 -42280960 L1_B03_S02_M5C 0 2 5 -5 -42283008 L1_B03_S02_M4C 0 2 5 -4 -42285056 L1_B03_S02_M3C 0 2 5 -3 -42287104 L1_B03_S02_M2C 0 2 5 -2 -42289152 L1_B03_S02_M1C 0 2 5 -1 -42291200 L1_B03_S02_M0 0 2 5 0 -42293248 L1_B03_S02_M1A 0 2 5 1 -42295296 L1_B03_S02_M2A 0 2 5 2 -42297344 L1_B03_S02_M3A 0 2 5 3 -42299392 L1_B03_S02_M4A 0 2 5 4 -42301440 L1_B03_S02_M5A 0 2 5 5 -42303488 L1_B03_S02_M6A 0 2 5 6 -42344448 L1_B04_S01_M6C 0 2 6 -6 -42346496 L1_B04_S01_M5C 0 2 6 -5 -42348544 L1_B04_S01_M4C 0 2 6 -4 -42350592 L1_B04_S01_M3C 0 2 6 -3 -42352640 L1_B04_S01_M2C 0 2 6 -2 -42354688 L1_B04_S01_M1C 0 2 6 -1 -42356736 L1_B04_S01_M0 0 2 6 0 -42358784 L1_B04_S01_M1A 0 2 6 1 -42360832 L1_B04_S01_M2A 0 2 6 2 -42362880 L1_B04_S01_M3A 0 2 6 3 -42364928 L1_B04_S01_M4A 0 2 6 4 -42366976 L1_B04_S01_M5A 0 2 6 5 -42369024 L1_B04_S01_M6A 0 2 6 6 -42409984 L1_B04_S02_M6C 0 2 7 -6 -42412032 L1_B04_S02_M5C 0 2 7 -5 -42414080 L1_B04_S02_M4C 0 2 7 -4 -42416128 L1_B04_S02_M3C 0 2 7 -3 -42418176 L1_B04_S02_M2C 0 2 7 -2 -42420224 L1_B04_S02_M1C 0 2 7 -1 -42422272 L1_B04_S02_M0 0 2 7 0 -42424320 L1_B04_S02_M1A 0 2 7 1 -42426368 L1_B04_S02_M2A 0 2 7 2 -42428416 L1_B04_S02_M3A 0 2 7 3 -42430464 L1_B04_S02_M4A 0 2 7 4 -42432512 L1_B04_S02_M5A 0 2 7 5 -42434560 L1_B04_S02_M6A 0 2 7 6 -42475520 L1_B05_S01_M6C 0 2 8 -6 -42477568 L1_B05_S01_M5C 0 2 8 -5 -42479616 L1_B05_S01_M4C 0 2 8 -4 -42481664 L1_B05_S01_M3C 0 2 8 -3 -42483712 L1_B05_S01_M2C 0 2 8 -2 -42485760 L1_B05_S01_M1C 0 2 8 -1 -42487808 L1_B05_S01_M0 0 2 8 0 -42489856 L1_B05_S01_M1A 0 2 8 1 -42491904 L1_B05_S01_M2A 0 2 8 2 -42493952 L1_B05_S01_M3A 0 2 8 3 -42496000 L1_B05_S01_M4A 0 2 8 4 -42498048 L1_B05_S01_M5A 0 2 8 5 -42500096 L1_B05_S01_M6A 0 2 8 6 -42541056 L1_B05_S02_M6C 0 2 9 -6 -42543104 L1_B05_S02_M5C 0 2 9 -5 -42545152 L1_B05_S02_M4C 0 2 9 -4 -42547200 L1_B05_S02_M3C 0 2 9 -3 -42549248 L1_B05_S02_M2C 0 2 9 -2 -42551296 L1_B05_S02_M1C 0 2 9 -1 -42553344 L1_B05_S02_M0 0 2 9 0 -42555392 L1_B05_S02_M1A 0 2 9 1 -42557440 L1_B05_S02_M2A 0 2 9 2 -42559488 L1_B05_S02_M3A 0 2 9 3 -42561536 L1_B05_S02_M4A 0 2 9 4 -42563584 L1_B05_S02_M5A 0 2 9 5 -42565632 L1_B05_S02_M6A 0 2 9 6 -42606592 L1_B06_S01_M6C 0 2 10 -6 -42608640 L1_B06_S01_M5C 0 2 10 -5 -42610688 L1_B06_S01_M4C 0 2 10 -4 -42612736 L1_B06_S01_M3C 0 2 10 -3 -42614784 L1_B06_S01_M2C 0 2 10 -2 -42616832 L1_B06_S01_M1C 0 2 10 -1 -42618880 L1_B06_S01_M0 0 2 10 0 -42620928 L1_B06_S01_M1A 0 2 10 1 -42622976 L1_B06_S01_M2A 0 2 10 2 -42625024 L1_B06_S01_M3A 0 2 10 3 -42627072 L1_B06_S01_M4A 0 2 10 4 -42629120 L1_B06_S01_M5A 0 2 10 5 -42631168 L1_B06_S01_M6A 0 2 10 6 -42672128 L1_B06_S02_M6C 0 2 11 -6 -42674176 L1_B06_S02_M5C 0 2 11 -5 -42676224 L1_B06_S02_M4C 0 2 11 -4 -42678272 L1_B06_S02_M3C 0 2 11 -3 -42680320 L1_B06_S02_M2C 0 2 11 -2 -42682368 L1_B06_S02_M1C 0 2 11 -1 -42684416 L1_B06_S02_M0 0 2 11 0 -42686464 L1_B06_S02_M1A 0 2 11 1 -42688512 L1_B06_S02_M2A 0 2 11 2 -42690560 L1_B06_S02_M3A 0 2 11 3 -42692608 L1_B06_S02_M4A 0 2 11 4 -42694656 L1_B06_S02_M5A 0 2 11 5 -42696704 L1_B06_S02_M6A 0 2 11 6 -42737664 L1_B07_S01_M6C 0 2 12 -6 -42739712 L1_B07_S01_M5C 0 2 12 -5 -42741760 L1_B07_S01_M4C 0 2 12 -4 -42743808 L1_B07_S01_M3C 0 2 12 -3 -42745856 L1_B07_S01_M2C 0 2 12 -2 -42747904 L1_B07_S01_M1C 0 2 12 -1 -42749952 L1_B07_S01_M0 0 2 12 0 -42752000 L1_B07_S01_M1A 0 2 12 1 -42754048 L1_B07_S01_M2A 0 2 12 2 -42756096 L1_B07_S01_M3A 0 2 12 3 -42758144 L1_B07_S01_M4A 0 2 12 4 -42760192 L1_B07_S01_M5A 0 2 12 5 -42762240 L1_B07_S01_M6A 0 2 12 6 -42803200 L1_B07_S02_M6C 0 2 13 -6 -42805248 L1_B07_S02_M5C 0 2 13 -5 -42807296 L1_B07_S02_M4C 0 2 13 -4 -42809344 L1_B07_S02_M3C 0 2 13 -3 -42811392 L1_B07_S02_M2C 0 2 13 -2 -42813440 L1_B07_S02_M1C 0 2 13 -1 -42815488 L1_B07_S02_M0 0 2 13 0 -42817536 L1_B07_S02_M1A 0 2 13 1 -42819584 L1_B07_S02_M2A 0 2 13 2 -42821632 L1_B07_S02_M3A 0 2 13 3 -42823680 L1_B07_S02_M4A 0 2 13 4 -42825728 L1_B07_S02_M5A 0 2 13 5 -42827776 L1_B07_S02_M6A 0 2 13 6 -42868736 L1_B08_S01_M6C 0 2 14 -6 -42870784 L1_B08_S01_M5C 0 2 14 -5 -42872832 L1_B08_S01_M4C 0 2 14 -4 -42874880 L1_B08_S01_M3C 0 2 14 -3 -42876928 L1_B08_S01_M2C 0 2 14 -2 -42878976 L1_B08_S01_M1C 0 2 14 -1 -42881024 L1_B08_S01_M0 0 2 14 0 -42883072 L1_B08_S01_M1A 0 2 14 1 -42885120 L1_B08_S01_M2A 0 2 14 2 -42887168 L1_B08_S01_M3A 0 2 14 3 -42889216 L1_B08_S01_M4A 0 2 14 4 -42891264 L1_B08_S01_M5A 0 2 14 5 -42893312 L1_B08_S01_M6A 0 2 14 6 -42934272 L1_B08_S02_M6C 0 2 15 -6 -42936320 L1_B08_S02_M5C 0 2 15 -5 -42938368 L1_B08_S02_M4C 0 2 15 -4 -42940416 L1_B08_S02_M3C 0 2 15 -3 -42942464 L1_B08_S02_M2C 0 2 15 -2 -42944512 L1_B08_S02_M1C 0 2 15 -1 -42946560 L1_B08_S02_M0 0 2 15 0 -42948608 L1_B08_S02_M1A 0 2 15 1 -42950656 L1_B08_S02_M2A 0 2 15 2 -42952704 L1_B08_S02_M3A 0 2 15 3 -42954752 L1_B08_S02_M4A 0 2 15 4 -42956800 L1_B08_S02_M5A 0 2 15 5 -42958848 L1_B08_S02_M6A 0 2 15 6 -42999808 L1_B09_S01_M6C 0 2 16 -6 -43001856 L1_B09_S01_M5C 0 2 16 -5 -43003904 L1_B09_S01_M4C 0 2 16 -4 -43005952 L1_B09_S01_M3C 0 2 16 -3 -43008000 L1_B09_S01_M2C 0 2 16 -2 -43010048 L1_B09_S01_M1C 0 2 16 -1 -43012096 L1_B09_S01_M0 0 2 16 0 -43014144 L1_B09_S01_M1A 0 2 16 1 -43016192 L1_B09_S01_M2A 0 2 16 2 -43018240 L1_B09_S01_M3A 0 2 16 3 -43020288 L1_B09_S01_M4A 0 2 16 4 -43022336 L1_B09_S01_M5A 0 2 16 5 -43024384 L1_B09_S01_M6A 0 2 16 6 -43065344 L1_B09_S02_M6C 0 2 17 -6 -43067392 L1_B09_S02_M5C 0 2 17 -5 -43069440 L1_B09_S02_M4C 0 2 17 -4 -43071488 L1_B09_S02_M3C 0 2 17 -3 -43073536 L1_B09_S02_M2C 0 2 17 -2 -43075584 L1_B09_S02_M1C 0 2 17 -1 -43077632 L1_B09_S02_M0 0 2 17 0 -43079680 L1_B09_S02_M1A 0 2 17 1 -43081728 L1_B09_S02_M2A 0 2 17 2 -43083776 L1_B09_S02_M3A 0 2 17 3 -43085824 L1_B09_S02_M4A 0 2 17 4 -43087872 L1_B09_S02_M5A 0 2 17 5 -43089920 L1_B09_S02_M6A 0 2 17 6 -43130880 L1_B10_S01_M6C 0 2 18 -6 -43132928 L1_B10_S01_M5C 0 2 18 -5 -43134976 L1_B10_S01_M4C 0 2 18 -4 -43137024 L1_B10_S01_M3C 0 2 18 -3 -43139072 L1_B10_S01_M2C 0 2 18 -2 -43141120 L1_B10_S01_M1C 0 2 18 -1 -43143168 L1_B10_S01_M0 0 2 18 0 -43145216 L1_B10_S01_M1A 0 2 18 1 -43147264 L1_B10_S01_M2A 0 2 18 2 -43149312 L1_B10_S01_M3A 0 2 18 3 -43151360 L1_B10_S01_M4A 0 2 18 4 -43153408 L1_B10_S01_M5A 0 2 18 5 -43155456 L1_B10_S01_M6A 0 2 18 6 -43196416 L1_B10_S02_M6C 0 2 19 -6 -43198464 L1_B10_S02_M5C 0 2 19 -5 -43200512 L1_B10_S02_M4C 0 2 19 -4 -43202560 L1_B10_S02_M3C 0 2 19 -3 -43204608 L1_B10_S02_M2C 0 2 19 -2 -43206656 L1_B10_S02_M1C 0 2 19 -1 -43208704 L1_B10_S02_M0 0 2 19 0 -43210752 L1_B10_S02_M1A 0 2 19 1 -43212800 L1_B10_S02_M2A 0 2 19 2 -43214848 L1_B10_S02_M3A 0 2 19 3 -43216896 L1_B10_S02_M4A 0 2 19 4 -43218944 L1_B10_S02_M5A 0 2 19 5 -43220992 L1_B10_S02_M6A 0 2 19 6 -43261952 L1_B11_S01_M6C 0 2 20 -6 -43264000 L1_B11_S01_M5C 0 2 20 -5 -43266048 L1_B11_S01_M4C 0 2 20 -4 -43268096 L1_B11_S01_M3C 0 2 20 -3 -43270144 L1_B11_S01_M2C 0 2 20 -2 -43272192 L1_B11_S01_M1C 0 2 20 -1 -43274240 L1_B11_S01_M0 0 2 20 0 -43276288 L1_B11_S01_M1A 0 2 20 1 -43278336 L1_B11_S01_M2A 0 2 20 2 -43280384 L1_B11_S01_M3A 0 2 20 3 -43282432 L1_B11_S01_M4A 0 2 20 4 -43284480 L1_B11_S01_M5A 0 2 20 5 -43286528 L1_B11_S01_M6A 0 2 20 6 -43327488 L1_B11_S02_M6C 0 2 21 -6 -43329536 L1_B11_S02_M5C 0 2 21 -5 -43331584 L1_B11_S02_M4C 0 2 21 -4 -43333632 L1_B11_S02_M3C 0 2 21 -3 -43335680 L1_B11_S02_M2C 0 2 21 -2 -43337728 L1_B11_S02_M1C 0 2 21 -1 -43339776 L1_B11_S02_M0 0 2 21 0 -43341824 L1_B11_S02_M1A 0 2 21 1 -43343872 L1_B11_S02_M2A 0 2 21 2 -43345920 L1_B11_S02_M3A 0 2 21 3 -43347968 L1_B11_S02_M4A 0 2 21 4 -43350016 L1_B11_S02_M5A 0 2 21 5 -43352064 L1_B11_S02_M6A 0 2 21 6 -43393024 L1_B12_S01_M6C 0 2 22 -6 -43395072 L1_B12_S01_M5C 0 2 22 -5 -43397120 L1_B12_S01_M4C 0 2 22 -4 -43399168 L1_B12_S01_M3C 0 2 22 -3 -43401216 L1_B12_S01_M2C 0 2 22 -2 -43403264 L1_B12_S01_M1C 0 2 22 -1 -43405312 L1_B12_S01_M0 0 2 22 0 -43407360 L1_B12_S01_M1A 0 2 22 1 -43409408 L1_B12_S01_M2A 0 2 22 2 -43411456 L1_B12_S01_M3A 0 2 22 3 -43413504 L1_B12_S01_M4A 0 2 22 4 -43415552 L1_B12_S01_M5A 0 2 22 5 -43417600 L1_B12_S01_M6A 0 2 22 6 -43458560 L1_B12_S02_M6C 0 2 23 -6 -43460608 L1_B12_S02_M5C 0 2 23 -5 -43462656 L1_B12_S02_M4C 0 2 23 -4 -43464704 L1_B12_S02_M3C 0 2 23 -3 -43466752 L1_B12_S02_M2C 0 2 23 -2 -43468800 L1_B12_S02_M1C 0 2 23 -1 -43470848 L1_B12_S02_M0 0 2 23 0 -43472896 L1_B12_S02_M1A 0 2 23 1 -43474944 L1_B12_S02_M2A 0 2 23 2 -43476992 L1_B12_S02_M3A 0 2 23 3 -43479040 L1_B12_S02_M4A 0 2 23 4 -43481088 L1_B12_S02_M5A 0 2 23 5 -43483136 L1_B12_S02_M6A 0 2 23 6 -43524096 L1_B13_S01_M6C 0 2 24 -6 -43526144 L1_B13_S01_M5C 0 2 24 -5 -43528192 L1_B13_S01_M4C 0 2 24 -4 -43530240 L1_B13_S01_M3C 0 2 24 -3 -43532288 L1_B13_S01_M2C 0 2 24 -2 -43534336 L1_B13_S01_M1C 0 2 24 -1 -43536384 L1_B13_S01_M0 0 2 24 0 -43538432 L1_B13_S01_M1A 0 2 24 1 -43540480 L1_B13_S01_M2A 0 2 24 2 -43542528 L1_B13_S01_M3A 0 2 24 3 -43544576 L1_B13_S01_M4A 0 2 24 4 -43546624 L1_B13_S01_M5A 0 2 24 5 -43548672 L1_B13_S01_M6A 0 2 24 6 -43589632 L1_B13_S02_M6C 0 2 25 -6 -43591680 L1_B13_S02_M5C 0 2 25 -5 -43593728 L1_B13_S02_M4C 0 2 25 -4 -43595776 L1_B13_S02_M3C 0 2 25 -3 -43597824 L1_B13_S02_M2C 0 2 25 -2 -43599872 L1_B13_S02_M1C 0 2 25 -1 -43601920 L1_B13_S02_M0 0 2 25 0 -43603968 L1_B13_S02_M1A 0 2 25 1 -43606016 L1_B13_S02_M2A 0 2 25 2 -43608064 L1_B13_S02_M3A 0 2 25 3 -43610112 L1_B13_S02_M4A 0 2 25 4 -43612160 L1_B13_S02_M5A 0 2 25 5 -43614208 L1_B13_S02_M6A 0 2 25 6 -43655168 L1_B14_S01_M6C 0 2 26 -6 -43657216 L1_B14_S01_M5C 0 2 26 -5 -43659264 L1_B14_S01_M4C 0 2 26 -4 -43661312 L1_B14_S01_M3C 0 2 26 -3 -43663360 L1_B14_S01_M2C 0 2 26 -2 -43665408 L1_B14_S01_M1C 0 2 26 -1 -43667456 L1_B14_S01_M0 0 2 26 0 -43669504 L1_B14_S01_M1A 0 2 26 1 -43671552 L1_B14_S01_M2A 0 2 26 2 -43673600 L1_B14_S01_M3A 0 2 26 3 -43675648 L1_B14_S01_M4A 0 2 26 4 -43677696 L1_B14_S01_M5A 0 2 26 5 -43679744 L1_B14_S01_M6A 0 2 26 6 -43720704 L1_B14_S02_M6C 0 2 27 -6 -43722752 L1_B14_S02_M5C 0 2 27 -5 -43724800 L1_B14_S02_M4C 0 2 27 -4 -43726848 L1_B14_S02_M3C 0 2 27 -3 -43728896 L1_B14_S02_M2C 0 2 27 -2 -43730944 L1_B14_S02_M1C 0 2 27 -1 -43732992 L1_B14_S02_M0 0 2 27 0 -43735040 L1_B14_S02_M1A 0 2 27 1 -43737088 L1_B14_S02_M2A 0 2 27 2 -43739136 L1_B14_S02_M3A 0 2 27 3 -43741184 L1_B14_S02_M4A 0 2 27 4 -43743232 L1_B14_S02_M5A 0 2 27 5 -43745280 L1_B14_S02_M6A 0 2 27 6 -43786240 L1_B15_S01_M6C 0 2 28 -6 -43788288 L1_B15_S01_M5C 0 2 28 -5 -43790336 L1_B15_S01_M4C 0 2 28 -4 -43792384 L1_B15_S01_M3C 0 2 28 -3 -43794432 L1_B15_S01_M2C 0 2 28 -2 -43796480 L1_B15_S01_M1C 0 2 28 -1 -43798528 L1_B15_S01_M0 0 2 28 0 -43800576 L1_B15_S01_M1A 0 2 28 1 -43802624 L1_B15_S01_M2A 0 2 28 2 -43804672 L1_B15_S01_M3A 0 2 28 3 -43806720 L1_B15_S01_M4A 0 2 28 4 -43808768 L1_B15_S01_M5A 0 2 28 5 -43810816 L1_B15_S01_M6A 0 2 28 6 -43851776 L1_B15_S02_M6C 0 2 29 -6 -43853824 L1_B15_S02_M5C 0 2 29 -5 -43855872 L1_B15_S02_M4C 0 2 29 -4 -43857920 L1_B15_S02_M3C 0 2 29 -3 -43859968 L1_B15_S02_M2C 0 2 29 -2 -43862016 L1_B15_S02_M1C 0 2 29 -1 -43864064 L1_B15_S02_M0 0 2 29 0 -43866112 L1_B15_S02_M1A 0 2 29 1 -43868160 L1_B15_S02_M2A 0 2 29 2 -43870208 L1_B15_S02_M3A 0 2 29 3 -43872256 L1_B15_S02_M4A 0 2 29 4 -43874304 L1_B15_S02_M5A 0 2 29 5 -43876352 L1_B15_S02_M6A 0 2 29 6 -43917312 L1_B16_S01_M6C 0 2 30 -6 -43919360 L1_B16_S01_M5C 0 2 30 -5 -43921408 L1_B16_S01_M4C 0 2 30 -4 -43923456 L1_B16_S01_M3C 0 2 30 -3 -43925504 L1_B16_S01_M2C 0 2 30 -2 -43927552 L1_B16_S01_M1C 0 2 30 -1 -43929600 L1_B16_S01_M0 0 2 30 0 -43931648 L1_B16_S01_M1A 0 2 30 1 -43933696 L1_B16_S01_M2A 0 2 30 2 -43935744 L1_B16_S01_M3A 0 2 30 3 -43937792 L1_B16_S01_M4A 0 2 30 4 -43939840 L1_B16_S01_M5A 0 2 30 5 -43941888 L1_B16_S01_M6A 0 2 30 6 -43982848 L1_B16_S02_M6C 0 2 31 -6 -43984896 L1_B16_S02_M5C 0 2 31 -5 -43986944 L1_B16_S02_M4C 0 2 31 -4 -43988992 L1_B16_S02_M3C 0 2 31 -3 -43991040 L1_B16_S02_M2C 0 2 31 -2 -43993088 L1_B16_S02_M1C 0 2 31 -1 -43995136 L1_B16_S02_M0 0 2 31 0 -43997184 L1_B16_S02_M1A 0 2 31 1 -43999232 L1_B16_S02_M2A 0 2 31 2 -44001280 L1_B16_S02_M3A 0 2 31 3 -44003328 L1_B16_S02_M4A 0 2 31 4 -44005376 L1_B16_S02_M5A 0 2 31 5 -44007424 L1_B16_S02_M6A 0 2 31 6 -44048384 L1_B17_S01_M6C 0 2 32 -6 -44050432 L1_B17_S01_M5C 0 2 32 -5 -44052480 L1_B17_S01_M4C 0 2 32 -4 -44054528 L1_B17_S01_M3C 0 2 32 -3 -44056576 L1_B17_S01_M2C 0 2 32 -2 -44058624 L1_B17_S01_M1C 0 2 32 -1 -44060672 L1_B17_S01_M0 0 2 32 0 -44062720 L1_B17_S01_M1A 0 2 32 1 -44064768 L1_B17_S01_M2A 0 2 32 2 -44066816 L1_B17_S01_M3A 0 2 32 3 -44068864 L1_B17_S01_M4A 0 2 32 4 -44070912 L1_B17_S01_M5A 0 2 32 5 -44072960 L1_B17_S01_M6A 0 2 32 6 -44113920 L1_B17_S02_M6C 0 2 33 -6 -44115968 L1_B17_S02_M5C 0 2 33 -5 -44118016 L1_B17_S02_M4C 0 2 33 -4 -44120064 L1_B17_S02_M3C 0 2 33 -3 -44122112 L1_B17_S02_M2C 0 2 33 -2 -44124160 L1_B17_S02_M1C 0 2 33 -1 -44126208 L1_B17_S02_M0 0 2 33 0 -44128256 L1_B17_S02_M1A 0 2 33 1 -44130304 L1_B17_S02_M2A 0 2 33 2 -44132352 L1_B17_S02_M3A 0 2 33 3 -44134400 L1_B17_S02_M4A 0 2 33 4 -44136448 L1_B17_S02_M5A 0 2 33 5 -44138496 L1_B17_S02_M6A 0 2 33 6 -44179456 L1_B18_S01_M6C 0 2 34 -6 -44181504 L1_B18_S01_M5C 0 2 34 -5 -44183552 L1_B18_S01_M4C 0 2 34 -4 -44185600 L1_B18_S01_M3C 0 2 34 -3 -44187648 L1_B18_S01_M2C 0 2 34 -2 -44189696 L1_B18_S01_M1C 0 2 34 -1 -44191744 L1_B18_S01_M0 0 2 34 0 -44193792 L1_B18_S01_M1A 0 2 34 1 -44195840 L1_B18_S01_M2A 0 2 34 2 -44197888 L1_B18_S01_M3A 0 2 34 3 -44199936 L1_B18_S01_M4A 0 2 34 4 -44201984 L1_B18_S01_M5A 0 2 34 5 -44204032 L1_B18_S01_M6A 0 2 34 6 -44244992 L1_B18_S02_M6C 0 2 35 -6 -44247040 L1_B18_S02_M5C 0 2 35 -5 -44249088 L1_B18_S02_M4C 0 2 35 -4 -44251136 L1_B18_S02_M3C 0 2 35 -3 -44253184 L1_B18_S02_M2C 0 2 35 -2 -44255232 L1_B18_S02_M1C 0 2 35 -1 -44257280 L1_B18_S02_M0 0 2 35 0 -44259328 L1_B18_S02_M1A 0 2 35 1 -44261376 L1_B18_S02_M2A 0 2 35 2 -44263424 L1_B18_S02_M3A 0 2 35 3 -44265472 L1_B18_S02_M4A 0 2 35 4 -44267520 L1_B18_S02_M5A 0 2 35 5 -44269568 L1_B18_S02_M6A 0 2 35 6 -44310528 L1_B19_S01_M6C 0 2 36 -6 -44312576 L1_B19_S01_M5C 0 2 36 -5 -44314624 L1_B19_S01_M4C 0 2 36 -4 -44316672 L1_B19_S01_M3C 0 2 36 -3 -44318720 L1_B19_S01_M2C 0 2 36 -2 -44320768 L1_B19_S01_M1C 0 2 36 -1 -44322816 L1_B19_S01_M0 0 2 36 0 -44324864 L1_B19_S01_M1A 0 2 36 1 -44326912 L1_B19_S01_M2A 0 2 36 2 -44328960 L1_B19_S01_M3A 0 2 36 3 -44331008 L1_B19_S01_M4A 0 2 36 4 -44333056 L1_B19_S01_M5A 0 2 36 5 -44335104 L1_B19_S01_M6A 0 2 36 6 -44376064 L1_B19_S02_M6C 0 2 37 -6 -44378112 L1_B19_S02_M5C 0 2 37 -5 -44380160 L1_B19_S02_M4C 0 2 37 -4 -44382208 L1_B19_S02_M3C 0 2 37 -3 -44384256 L1_B19_S02_M2C 0 2 37 -2 -44386304 L1_B19_S02_M1C 0 2 37 -1 -44388352 L1_B19_S02_M0 0 2 37 0 -44390400 L1_B19_S02_M1A 0 2 37 1 -44392448 L1_B19_S02_M2A 0 2 37 2 -44394496 L1_B19_S02_M3A 0 2 37 3 -44396544 L1_B19_S02_M4A 0 2 37 4 -44398592 L1_B19_S02_M5A 0 2 37 5 -44400640 L1_B19_S02_M6A 0 2 37 6 -46145536 L2_B01_S02_M6C 0 3 0 -6 -46147584 L2_B01_S02_M5C 0 3 0 -5 -46149632 L2_B01_S02_M4C 0 3 0 -4 -46151680 L2_B01_S02_M3C 0 3 0 -3 -46153728 L2_B01_S02_M2C 0 3 0 -2 -46155776 L2_B01_S02_M1C 0 3 0 -1 -46157824 L2_B01_S02_M0 0 3 0 0 -46159872 L2_B01_S02_M1A 0 3 0 1 -46161920 L2_B01_S02_M2A 0 3 0 2 -46163968 L2_B01_S02_M3A 0 3 0 3 -46166016 L2_B01_S02_M4A 0 3 0 4 -46168064 L2_B01_S02_M5A 0 3 0 5 -46170112 L2_B01_S02_M6A 0 3 0 6 -46211072 L2_B02_S01_M6C 0 3 1 -6 -46213120 L2_B02_S01_M5C 0 3 1 -5 -46215168 L2_B02_S01_M4C 0 3 1 -4 -46217216 L2_B02_S01_M3C 0 3 1 -3 -46219264 L2_B02_S01_M2C 0 3 1 -2 -46221312 L2_B02_S01_M1C 0 3 1 -1 -46223360 L2_B02_S01_M0 0 3 1 0 -46225408 L2_B02_S01_M1A 0 3 1 1 -46227456 L2_B02_S01_M2A 0 3 1 2 -46229504 L2_B02_S01_M3A 0 3 1 3 -46231552 L2_B02_S01_M4A 0 3 1 4 -46233600 L2_B02_S01_M5A 0 3 1 5 -46235648 L2_B02_S01_M6A 0 3 1 6 -46276608 L2_B02_S02_M6C 0 3 2 -6 -46278656 L2_B02_S02_M5C 0 3 2 -5 -46280704 L2_B02_S02_M4C 0 3 2 -4 -46282752 L2_B02_S02_M3C 0 3 2 -3 -46284800 L2_B02_S02_M2C 0 3 2 -2 -46286848 L2_B02_S02_M1C 0 3 2 -1 -46288896 L2_B02_S02_M0 0 3 2 0 -46290944 L2_B02_S02_M1A 0 3 2 1 -46292992 L2_B02_S02_M2A 0 3 2 2 -46295040 L2_B02_S02_M3A 0 3 2 3 -46297088 L2_B02_S02_M4A 0 3 2 4 -46299136 L2_B02_S02_M5A 0 3 2 5 -46301184 L2_B02_S02_M6A 0 3 2 6 -46342144 L2_B03_S01_M6C 0 3 3 -6 -46344192 L2_B03_S01_M5C 0 3 3 -5 -46346240 L2_B03_S01_M4C 0 3 3 -4 -46348288 L2_B03_S01_M3C 0 3 3 -3 -46350336 L2_B03_S01_M2C 0 3 3 -2 -46352384 L2_B03_S01_M1C 0 3 3 -1 -46354432 L2_B03_S01_M0 0 3 3 0 -46356480 L2_B03_S01_M1A 0 3 3 1 -46358528 L2_B03_S01_M2A 0 3 3 2 -46360576 L2_B03_S01_M3A 0 3 3 3 -46362624 L2_B03_S01_M4A 0 3 3 4 -46364672 L2_B03_S01_M5A 0 3 3 5 -46366720 L2_B03_S01_M6A 0 3 3 6 -46407680 L2_B03_S02_M6C 0 3 4 -6 -46409728 L2_B03_S02_M5C 0 3 4 -5 -46411776 L2_B03_S02_M4C 0 3 4 -4 -46413824 L2_B03_S02_M3C 0 3 4 -3 -46415872 L2_B03_S02_M2C 0 3 4 -2 -46417920 L2_B03_S02_M1C 0 3 4 -1 -46419968 L2_B03_S02_M0 0 3 4 0 -46422016 L2_B03_S02_M1A 0 3 4 1 -46424064 L2_B03_S02_M2A 0 3 4 2 -46426112 L2_B03_S02_M3A 0 3 4 3 -46428160 L2_B03_S02_M4A 0 3 4 4 -46430208 L2_B03_S02_M5A 0 3 4 5 -46432256 L2_B03_S02_M6A 0 3 4 6 -46473216 L2_B04_S01_M6C 0 3 5 -6 -46475264 L2_B04_S01_M5C 0 3 5 -5 -46477312 L2_B04_S01_M4C 0 3 5 -4 -46479360 L2_B04_S01_M3C 0 3 5 -3 -46481408 L2_B04_S01_M2C 0 3 5 -2 -46483456 L2_B04_S01_M1C 0 3 5 -1 -46485504 L2_B04_S01_M0 0 3 5 0 -46487552 L2_B04_S01_M1A 0 3 5 1 -46489600 L2_B04_S01_M2A 0 3 5 2 -46491648 L2_B04_S01_M3A 0 3 5 3 -46493696 L2_B04_S01_M4A 0 3 5 4 -46495744 L2_B04_S01_M5A 0 3 5 5 -46497792 L2_B04_S01_M6A 0 3 5 6 -46538752 L2_B04_S02_M6C 0 3 6 -6 -46540800 L2_B04_S02_M5C 0 3 6 -5 -46542848 L2_B04_S02_M4C 0 3 6 -4 -46544896 L2_B04_S02_M3C 0 3 6 -3 -46546944 L2_B04_S02_M2C 0 3 6 -2 -46548992 L2_B04_S02_M1C 0 3 6 -1 -46551040 L2_B04_S02_M0 0 3 6 0 -46553088 L2_B04_S02_M1A 0 3 6 1 -46555136 L2_B04_S02_M2A 0 3 6 2 -46557184 L2_B04_S02_M3A 0 3 6 3 -46559232 L2_B04_S02_M4A 0 3 6 4 -46561280 L2_B04_S02_M5A 0 3 6 5 -46563328 L2_B04_S02_M6A 0 3 6 6 -46604288 L2_B05_S01_M6C 0 3 7 -6 -46606336 L2_B05_S01_M5C 0 3 7 -5 -46608384 L2_B05_S01_M4C 0 3 7 -4 -46610432 L2_B05_S01_M3C 0 3 7 -3 -46612480 L2_B05_S01_M2C 0 3 7 -2 -46614528 L2_B05_S01_M1C 0 3 7 -1 -46616576 L2_B05_S01_M0 0 3 7 0 -46618624 L2_B05_S01_M1A 0 3 7 1 -46620672 L2_B05_S01_M2A 0 3 7 2 -46622720 L2_B05_S01_M3A 0 3 7 3 -46624768 L2_B05_S01_M4A 0 3 7 4 -46626816 L2_B05_S01_M5A 0 3 7 5 -46628864 L2_B05_S01_M6A 0 3 7 6 -46669824 L2_B05_S02_M6C 0 3 8 -6 -46671872 L2_B05_S02_M5C 0 3 8 -5 -46673920 L2_B05_S02_M4C 0 3 8 -4 -46675968 L2_B05_S02_M3C 0 3 8 -3 -46678016 L2_B05_S02_M2C 0 3 8 -2 -46680064 L2_B05_S02_M1C 0 3 8 -1 -46682112 L2_B05_S02_M0 0 3 8 0 -46684160 L2_B05_S02_M1A 0 3 8 1 -46686208 L2_B05_S02_M2A 0 3 8 2 -46688256 L2_B05_S02_M3A 0 3 8 3 -46690304 L2_B05_S02_M4A 0 3 8 4 -46692352 L2_B05_S02_M5A 0 3 8 5 -46694400 L2_B05_S02_M6A 0 3 8 6 -46735360 L2_B06_S01_M6C 0 3 9 -6 -46737408 L2_B06_S01_M5C 0 3 9 -5 -46739456 L2_B06_S01_M4C 0 3 9 -4 -46741504 L2_B06_S01_M3C 0 3 9 -3 -46743552 L2_B06_S01_M2C 0 3 9 -2 -46745600 L2_B06_S01_M1C 0 3 9 -1 -46747648 L2_B06_S01_M0 0 3 9 0 -46749696 L2_B06_S01_M1A 0 3 9 1 -46751744 L2_B06_S01_M2A 0 3 9 2 -46753792 L2_B06_S01_M3A 0 3 9 3 -46755840 L2_B06_S01_M4A 0 3 9 4 -46757888 L2_B06_S01_M5A 0 3 9 5 -46759936 L2_B06_S01_M6A 0 3 9 6 -46800896 L2_B06_S02_M6C 0 3 10 -6 -46802944 L2_B06_S02_M5C 0 3 10 -5 -46804992 L2_B06_S02_M4C 0 3 10 -4 -46807040 L2_B06_S02_M3C 0 3 10 -3 -46809088 L2_B06_S02_M2C 0 3 10 -2 -46811136 L2_B06_S02_M1C 0 3 10 -1 -46813184 L2_B06_S02_M0 0 3 10 0 -46815232 L2_B06_S02_M1A 0 3 10 1 -46817280 L2_B06_S02_M2A 0 3 10 2 -46819328 L2_B06_S02_M3A 0 3 10 3 -46821376 L2_B06_S02_M4A 0 3 10 4 -46823424 L2_B06_S02_M5A 0 3 10 5 -46825472 L2_B06_S02_M6A 0 3 10 6 -46866432 L2_B07_S01_M6C 0 3 11 -6 -46868480 L2_B07_S01_M5C 0 3 11 -5 -46870528 L2_B07_S01_M4C 0 3 11 -4 -46872576 L2_B07_S01_M3C 0 3 11 -3 -46874624 L2_B07_S01_M2C 0 3 11 -2 -46876672 L2_B07_S01_M1C 0 3 11 -1 -46878720 L2_B07_S01_M0 0 3 11 0 -46880768 L2_B07_S01_M1A 0 3 11 1 -46882816 L2_B07_S01_M2A 0 3 11 2 -46884864 L2_B07_S01_M3A 0 3 11 3 -46886912 L2_B07_S01_M4A 0 3 11 4 -46888960 L2_B07_S01_M5A 0 3 11 5 -46891008 L2_B07_S01_M6A 0 3 11 6 -46931968 L2_B07_S02_M6C 0 3 12 -6 -46934016 L2_B07_S02_M5C 0 3 12 -5 -46936064 L2_B07_S02_M4C 0 3 12 -4 -46938112 L2_B07_S02_M3C 0 3 12 -3 -46940160 L2_B07_S02_M2C 0 3 12 -2 -46942208 L2_B07_S02_M1C 0 3 12 -1 -46944256 L2_B07_S02_M0 0 3 12 0 -46946304 L2_B07_S02_M1A 0 3 12 1 -46948352 L2_B07_S02_M2A 0 3 12 2 -46950400 L2_B07_S02_M3A 0 3 12 3 -46952448 L2_B07_S02_M4A 0 3 12 4 -46954496 L2_B07_S02_M5A 0 3 12 5 -46956544 L2_B07_S02_M6A 0 3 12 6 -46997504 L2_B08_S01_M6C 0 3 13 -6 -46999552 L2_B08_S01_M5C 0 3 13 -5 -47001600 L2_B08_S01_M4C 0 3 13 -4 -47003648 L2_B08_S01_M3C 0 3 13 -3 -47005696 L2_B08_S01_M2C 0 3 13 -2 -47007744 L2_B08_S01_M1C 0 3 13 -1 -47009792 L2_B08_S01_M0 0 3 13 0 -47011840 L2_B08_S01_M1A 0 3 13 1 -47013888 L2_B08_S01_M2A 0 3 13 2 -47015936 L2_B08_S01_M3A 0 3 13 3 -47017984 L2_B08_S01_M4A 0 3 13 4 -47020032 L2_B08_S01_M5A 0 3 13 5 -47022080 L2_B08_S01_M6A 0 3 13 6 -47063040 L2_B08_S02_M6C 0 3 14 -6 -47065088 L2_B08_S02_M5C 0 3 14 -5 -47067136 L2_B08_S02_M4C 0 3 14 -4 -47069184 L2_B08_S02_M3C 0 3 14 -3 -47071232 L2_B08_S02_M2C 0 3 14 -2 -47073280 L2_B08_S02_M1C 0 3 14 -1 -47075328 L2_B08_S02_M0 0 3 14 0 -47077376 L2_B08_S02_M1A 0 3 14 1 -47079424 L2_B08_S02_M2A 0 3 14 2 -47081472 L2_B08_S02_M3A 0 3 14 3 -47083520 L2_B08_S02_M4A 0 3 14 4 -47085568 L2_B08_S02_M5A 0 3 14 5 -47087616 L2_B08_S02_M6A 0 3 14 6 -47128576 L2_B09_S01_M6C 0 3 15 -6 -47130624 L2_B09_S01_M5C 0 3 15 -5 -47132672 L2_B09_S01_M4C 0 3 15 -4 -47134720 L2_B09_S01_M3C 0 3 15 -3 -47136768 L2_B09_S01_M2C 0 3 15 -2 -47138816 L2_B09_S01_M1C 0 3 15 -1 -47140864 L2_B09_S01_M0 0 3 15 0 -47142912 L2_B09_S01_M1A 0 3 15 1 -47144960 L2_B09_S01_M2A 0 3 15 2 -47147008 L2_B09_S01_M3A 0 3 15 3 -47149056 L2_B09_S01_M4A 0 3 15 4 -47151104 L2_B09_S01_M5A 0 3 15 5 -47153152 L2_B09_S01_M6A 0 3 15 6 -47194112 L2_B09_S02_M6C 0 3 16 -6 -47196160 L2_B09_S02_M5C 0 3 16 -5 -47198208 L2_B09_S02_M4C 0 3 16 -4 -47200256 L2_B09_S02_M3C 0 3 16 -3 -47202304 L2_B09_S02_M2C 0 3 16 -2 -47204352 L2_B09_S02_M1C 0 3 16 -1 -47206400 L2_B09_S02_M0 0 3 16 0 -47208448 L2_B09_S02_M1A 0 3 16 1 -47210496 L2_B09_S02_M2A 0 3 16 2 -47212544 L2_B09_S02_M3A 0 3 16 3 -47214592 L2_B09_S02_M4A 0 3 16 4 -47216640 L2_B09_S02_M5A 0 3 16 5 -47218688 L2_B09_S02_M6A 0 3 16 6 -47259648 L2_B10_S01_M6C 0 3 17 -6 -47261696 L2_B10_S01_M5C 0 3 17 -5 -47263744 L2_B10_S01_M4C 0 3 17 -4 -47265792 L2_B10_S01_M3C 0 3 17 -3 -47267840 L2_B10_S01_M2C 0 3 17 -2 -47269888 L2_B10_S01_M1C 0 3 17 -1 -47271936 L2_B10_S01_M0 0 3 17 0 -47273984 L2_B10_S01_M1A 0 3 17 1 -47276032 L2_B10_S01_M2A 0 3 17 2 -47278080 L2_B10_S01_M3A 0 3 17 3 -47280128 L2_B10_S01_M4A 0 3 17 4 -47282176 L2_B10_S01_M5A 0 3 17 5 -47284224 L2_B10_S01_M6A 0 3 17 6 -47325184 L2_B10_S02_M6C 0 3 18 -6 -47327232 L2_B10_S02_M5C 0 3 18 -5 -47329280 L2_B10_S02_M4C 0 3 18 -4 -47331328 L2_B10_S02_M3C 0 3 18 -3 -47333376 L2_B10_S02_M2C 0 3 18 -2 -47335424 L2_B10_S02_M1C 0 3 18 -1 -47337472 L2_B10_S02_M0 0 3 18 0 -47339520 L2_B10_S02_M1A 0 3 18 1 -47341568 L2_B10_S02_M2A 0 3 18 2 -47343616 L2_B10_S02_M3A 0 3 18 3 -47345664 L2_B10_S02_M4A 0 3 18 4 -47347712 L2_B10_S02_M5A 0 3 18 5 -47349760 L2_B10_S02_M6A 0 3 18 6 -47390720 L2_B11_S01_M6C 0 3 19 -6 -47392768 L2_B11_S01_M5C 0 3 19 -5 -47394816 L2_B11_S01_M4C 0 3 19 -4 -47396864 L2_B11_S01_M3C 0 3 19 -3 -47398912 L2_B11_S01_M2C 0 3 19 -2 -47400960 L2_B11_S01_M1C 0 3 19 -1 -47403008 L2_B11_S01_M0 0 3 19 0 -47405056 L2_B11_S01_M1A 0 3 19 1 -47407104 L2_B11_S01_M2A 0 3 19 2 -47409152 L2_B11_S01_M3A 0 3 19 3 -47411200 L2_B11_S01_M4A 0 3 19 4 -47413248 L2_B11_S01_M5A 0 3 19 5 -47415296 L2_B11_S01_M6A 0 3 19 6 -47456256 L2_B11_S02_M6C 0 3 20 -6 -47458304 L2_B11_S02_M5C 0 3 20 -5 -47460352 L2_B11_S02_M4C 0 3 20 -4 -47462400 L2_B11_S02_M3C 0 3 20 -3 -47464448 L2_B11_S02_M2C 0 3 20 -2 -47466496 L2_B11_S02_M1C 0 3 20 -1 -47468544 L2_B11_S02_M0 0 3 20 0 -47470592 L2_B11_S02_M1A 0 3 20 1 -47472640 L2_B11_S02_M2A 0 3 20 2 -47474688 L2_B11_S02_M3A 0 3 20 3 -47476736 L2_B11_S02_M4A 0 3 20 4 -47478784 L2_B11_S02_M5A 0 3 20 5 -47480832 L2_B11_S02_M6A 0 3 20 6 -47521792 L2_B12_S01_M6C 0 3 21 -6 -47523840 L2_B12_S01_M5C 0 3 21 -5 -47525888 L2_B12_S01_M4C 0 3 21 -4 -47527936 L2_B12_S01_M3C 0 3 21 -3 -47529984 L2_B12_S01_M2C 0 3 21 -2 -47532032 L2_B12_S01_M1C 0 3 21 -1 -47534080 L2_B12_S01_M0 0 3 21 0 -47536128 L2_B12_S01_M1A 0 3 21 1 -47538176 L2_B12_S01_M2A 0 3 21 2 -47540224 L2_B12_S01_M3A 0 3 21 3 -47542272 L2_B12_S01_M4A 0 3 21 4 -47544320 L2_B12_S01_M5A 0 3 21 5 -47546368 L2_B12_S01_M6A 0 3 21 6 -47587328 L2_B12_S02_M6C 0 3 22 -6 -47589376 L2_B12_S02_M5C 0 3 22 -5 -47591424 L2_B12_S02_M4C 0 3 22 -4 -47593472 L2_B12_S02_M3C 0 3 22 -3 -47595520 L2_B12_S02_M2C 0 3 22 -2 -47597568 L2_B12_S02_M1C 0 3 22 -1 -47599616 L2_B12_S02_M0 0 3 22 0 -47601664 L2_B12_S02_M1A 0 3 22 1 -47603712 L2_B12_S02_M2A 0 3 22 2 -47605760 L2_B12_S02_M3A 0 3 22 3 -47607808 L2_B12_S02_M4A 0 3 22 4 -47609856 L2_B12_S02_M5A 0 3 22 5 -47611904 L2_B12_S02_M6A 0 3 22 6 -47652864 L2_B13_S01_M6C 0 3 23 -6 -47654912 L2_B13_S01_M5C 0 3 23 -5 -47656960 L2_B13_S01_M4C 0 3 23 -4 -47659008 L2_B13_S01_M3C 0 3 23 -3 -47661056 L2_B13_S01_M2C 0 3 23 -2 -47663104 L2_B13_S01_M1C 0 3 23 -1 -47665152 L2_B13_S01_M0 0 3 23 0 -47667200 L2_B13_S01_M1A 0 3 23 1 -47669248 L2_B13_S01_M2A 0 3 23 2 -47671296 L2_B13_S01_M3A 0 3 23 3 -47673344 L2_B13_S01_M4A 0 3 23 4 -47675392 L2_B13_S01_M5A 0 3 23 5 -47677440 L2_B13_S01_M6A 0 3 23 6 -47718400 L2_B13_S02_M6C 0 3 24 -6 -47720448 L2_B13_S02_M5C 0 3 24 -5 -47722496 L2_B13_S02_M4C 0 3 24 -4 -47724544 L2_B13_S02_M3C 0 3 24 -3 -47726592 L2_B13_S02_M2C 0 3 24 -2 -47728640 L2_B13_S02_M1C 0 3 24 -1 -47730688 L2_B13_S02_M0 0 3 24 0 -47732736 L2_B13_S02_M1A 0 3 24 1 -47734784 L2_B13_S02_M2A 0 3 24 2 -47736832 L2_B13_S02_M3A 0 3 24 3 -47738880 L2_B13_S02_M4A 0 3 24 4 -47740928 L2_B13_S02_M5A 0 3 24 5 -47742976 L2_B13_S02_M6A 0 3 24 6 -47783936 L2_B14_S01_M6C 0 3 25 -6 -47785984 L2_B14_S01_M5C 0 3 25 -5 -47788032 L2_B14_S01_M4C 0 3 25 -4 -47790080 L2_B14_S01_M3C 0 3 25 -3 -47792128 L2_B14_S01_M2C 0 3 25 -2 -47794176 L2_B14_S01_M1C 0 3 25 -1 -47796224 L2_B14_S01_M0 0 3 25 0 -47798272 L2_B14_S01_M1A 0 3 25 1 -47800320 L2_B14_S01_M2A 0 3 25 2 -47802368 L2_B14_S01_M3A 0 3 25 3 -47804416 L2_B14_S01_M4A 0 3 25 4 -47806464 L2_B14_S01_M5A 0 3 25 5 -47808512 L2_B14_S01_M6A 0 3 25 6 -47849472 L2_B14_S02_M6C 0 3 26 -6 -47851520 L2_B14_S02_M5C 0 3 26 -5 -47853568 L2_B14_S02_M4C 0 3 26 -4 -47855616 L2_B14_S02_M3C 0 3 26 -3 -47857664 L2_B14_S02_M2C 0 3 26 -2 -47859712 L2_B14_S02_M1C 0 3 26 -1 -47861760 L2_B14_S02_M0 0 3 26 0 -47863808 L2_B14_S02_M1A 0 3 26 1 -47865856 L2_B14_S02_M2A 0 3 26 2 -47867904 L2_B14_S02_M3A 0 3 26 3 -47869952 L2_B14_S02_M4A 0 3 26 4 -47872000 L2_B14_S02_M5A 0 3 26 5 -47874048 L2_B14_S02_M6A 0 3 26 6 -47915008 L2_B15_S01_M6C 0 3 27 -6 -47917056 L2_B15_S01_M5C 0 3 27 -5 -47919104 L2_B15_S01_M4C 0 3 27 -4 -47921152 L2_B15_S01_M3C 0 3 27 -3 -47923200 L2_B15_S01_M2C 0 3 27 -2 -47925248 L2_B15_S01_M1C 0 3 27 -1 -47927296 L2_B15_S01_M0 0 3 27 0 -47929344 L2_B15_S01_M1A 0 3 27 1 -47931392 L2_B15_S01_M2A 0 3 27 2 -47933440 L2_B15_S01_M3A 0 3 27 3 -47935488 L2_B15_S01_M4A 0 3 27 4 -47937536 L2_B15_S01_M5A 0 3 27 5 -47939584 L2_B15_S01_M6A 0 3 27 6 -47980544 L2_B15_S02_M6C 0 3 28 -6 -47982592 L2_B15_S02_M5C 0 3 28 -5 -47984640 L2_B15_S02_M4C 0 3 28 -4 -47986688 L2_B15_S02_M3C 0 3 28 -3 -47988736 L2_B15_S02_M2C 0 3 28 -2 -47990784 L2_B15_S02_M1C 0 3 28 -1 -47992832 L2_B15_S02_M0 0 3 28 0 -47994880 L2_B15_S02_M1A 0 3 28 1 -47996928 L2_B15_S02_M2A 0 3 28 2 -47998976 L2_B15_S02_M3A 0 3 28 3 -48001024 L2_B15_S02_M4A 0 3 28 4 -48003072 L2_B15_S02_M5A 0 3 28 5 -48005120 L2_B15_S02_M6A 0 3 28 6 -48046080 L2_B16_S01_M6C 0 3 29 -6 -48048128 L2_B16_S01_M5C 0 3 29 -5 -48050176 L2_B16_S01_M4C 0 3 29 -4 -48052224 L2_B16_S01_M3C 0 3 29 -3 -48054272 L2_B16_S01_M2C 0 3 29 -2 -48056320 L2_B16_S01_M1C 0 3 29 -1 -48058368 L2_B16_S01_M0 0 3 29 0 -48060416 L2_B16_S01_M1A 0 3 29 1 -48062464 L2_B16_S01_M2A 0 3 29 2 -48064512 L2_B16_S01_M3A 0 3 29 3 -48066560 L2_B16_S01_M4A 0 3 29 4 -48068608 L2_B16_S01_M5A 0 3 29 5 -48070656 L2_B16_S01_M6A 0 3 29 6 -48111616 L2_B16_S02_M6C 0 3 30 -6 -48113664 L2_B16_S02_M5C 0 3 30 -5 -48115712 L2_B16_S02_M4C 0 3 30 -4 -48117760 L2_B16_S02_M3C 0 3 30 -3 -48119808 L2_B16_S02_M2C 0 3 30 -2 -48121856 L2_B16_S02_M1C 0 3 30 -1 -48123904 L2_B16_S02_M0 0 3 30 0 -48125952 L2_B16_S02_M1A 0 3 30 1 -48128000 L2_B16_S02_M2A 0 3 30 2 -48130048 L2_B16_S02_M3A 0 3 30 3 -48132096 L2_B16_S02_M4A 0 3 30 4 -48134144 L2_B16_S02_M5A 0 3 30 5 -48136192 L2_B16_S02_M6A 0 3 30 6 -48177152 L2_B17_S01_M6C 0 3 31 -6 -48179200 L2_B17_S01_M5C 0 3 31 -5 -48181248 L2_B17_S01_M4C 0 3 31 -4 -48183296 L2_B17_S01_M3C 0 3 31 -3 -48185344 L2_B17_S01_M2C 0 3 31 -2 -48187392 L2_B17_S01_M1C 0 3 31 -1 -48189440 L2_B17_S01_M0 0 3 31 0 -48191488 L2_B17_S01_M1A 0 3 31 1 -48193536 L2_B17_S01_M2A 0 3 31 2 -48195584 L2_B17_S01_M3A 0 3 31 3 -48197632 L2_B17_S01_M4A 0 3 31 4 -48199680 L2_B17_S01_M5A 0 3 31 5 -48201728 L2_B17_S01_M6A 0 3 31 6 -48242688 L2_B17_S02_M6C 0 3 32 -6 -48244736 L2_B17_S02_M5C 0 3 32 -5 -48246784 L2_B17_S02_M4C 0 3 32 -4 -48248832 L2_B17_S02_M3C 0 3 32 -3 -48250880 L2_B17_S02_M2C 0 3 32 -2 -48252928 L2_B17_S02_M1C 0 3 32 -1 -48254976 L2_B17_S02_M0 0 3 32 0 -48257024 L2_B17_S02_M1A 0 3 32 1 -48259072 L2_B17_S02_M2A 0 3 32 2 -48261120 L2_B17_S02_M3A 0 3 32 3 -48263168 L2_B17_S02_M4A 0 3 32 4 -48265216 L2_B17_S02_M5A 0 3 32 5 -48267264 L2_B17_S02_M6A 0 3 32 6 -48308224 L2_B18_S01_M6C 0 3 33 -6 -48310272 L2_B18_S01_M5C 0 3 33 -5 -48312320 L2_B18_S01_M4C 0 3 33 -4 -48314368 L2_B18_S01_M3C 0 3 33 -3 -48316416 L2_B18_S01_M2C 0 3 33 -2 -48318464 L2_B18_S01_M1C 0 3 33 -1 -48320512 L2_B18_S01_M0 0 3 33 0 -48322560 L2_B18_S01_M1A 0 3 33 1 -48324608 L2_B18_S01_M2A 0 3 33 2 -48326656 L2_B18_S01_M3A 0 3 33 3 -48328704 L2_B18_S01_M4A 0 3 33 4 -48330752 L2_B18_S01_M5A 0 3 33 5 -48332800 L2_B18_S01_M6A 0 3 33 6 -48373760 L2_B18_S02_M6C 0 3 34 -6 -48375808 L2_B18_S02_M5C 0 3 34 -5 -48377856 L2_B18_S02_M4C 0 3 34 -4 -48379904 L2_B18_S02_M3C 0 3 34 -3 -48381952 L2_B18_S02_M2C 0 3 34 -2 -48384000 L2_B18_S02_M1C 0 3 34 -1 -48386048 L2_B18_S02_M0 0 3 34 0 -48388096 L2_B18_S02_M1A 0 3 34 1 -48390144 L2_B18_S02_M2A 0 3 34 2 -48392192 L2_B18_S02_M3A 0 3 34 3 -48394240 L2_B18_S02_M4A 0 3 34 4 -48396288 L2_B18_S02_M5A 0 3 34 5 -48398336 L2_B18_S02_M6A 0 3 34 6 -48439296 L2_B19_S01_M6C 0 3 35 -6 -48441344 L2_B19_S01_M5C 0 3 35 -5 -48443392 L2_B19_S01_M4C 0 3 35 -4 -48445440 L2_B19_S01_M3C 0 3 35 -3 -48447488 L2_B19_S01_M2C 0 3 35 -2 -48449536 L2_B19_S01_M1C 0 3 35 -1 -48451584 L2_B19_S01_M0 0 3 35 0 -48453632 L2_B19_S01_M1A 0 3 35 1 -48455680 L2_B19_S01_M2A 0 3 35 2 -48457728 L2_B19_S01_M3A 0 3 35 3 -48459776 L2_B19_S01_M4A 0 3 35 4 -48461824 L2_B19_S01_M5A 0 3 35 5 -48463872 L2_B19_S01_M6A 0 3 35 6 -48504832 L2_B19_S02_M6C 0 3 36 -6 -48506880 L2_B19_S02_M5C 0 3 36 -5 -48508928 L2_B19_S02_M4C 0 3 36 -4 -48510976 L2_B19_S02_M3C 0 3 36 -3 -48513024 L2_B19_S02_M2C 0 3 36 -2 -48515072 L2_B19_S02_M1C 0 3 36 -1 -48517120 L2_B19_S02_M0 0 3 36 0 -48519168 L2_B19_S02_M1A 0 3 36 1 -48521216 L2_B19_S02_M2A 0 3 36 2 -48523264 L2_B19_S02_M3A 0 3 36 3 -48525312 L2_B19_S02_M4A 0 3 36 4 -48527360 L2_B19_S02_M5A 0 3 36 5 -48529408 L2_B19_S02_M6A 0 3 36 6 -48570368 L2_B20_S01_M6C 0 3 37 -6 -48572416 L2_B20_S01_M5C 0 3 37 -5 -48574464 L2_B20_S01_M4C 0 3 37 -4 -48576512 L2_B20_S01_M3C 0 3 37 -3 -48578560 L2_B20_S01_M2C 0 3 37 -2 -48580608 L2_B20_S01_M1C 0 3 37 -1 -48582656 L2_B20_S01_M0 0 3 37 0 -48584704 L2_B20_S01_M1A 0 3 37 1 -48586752 L2_B20_S01_M2A 0 3 37 2 -48588800 L2_B20_S01_M3A 0 3 37 3 -48590848 L2_B20_S01_M4A 0 3 37 4 -48592896 L2_B20_S01_M5A 0 3 37 5 -48594944 L2_B20_S01_M6A 0 3 37 6 -48635904 L2_B20_S02_M6C 0 3 38 -6 -48637952 L2_B20_S02_M5C 0 3 38 -5 -48640000 L2_B20_S02_M4C 0 3 38 -4 -48642048 L2_B20_S02_M3C 0 3 38 -3 -48644096 L2_B20_S02_M2C 0 3 38 -2 -48646144 L2_B20_S02_M1C 0 3 38 -1 -48648192 L2_B20_S02_M0 0 3 38 0 -48650240 L2_B20_S02_M1A 0 3 38 1 -48652288 L2_B20_S02_M2A 0 3 38 2 -48654336 L2_B20_S02_M3A 0 3 38 3 -48656384 L2_B20_S02_M4A 0 3 38 4 -48658432 L2_B20_S02_M5A 0 3 38 5 -48660480 L2_B20_S02_M6A 0 3 38 6 -48701440 L2_B21_S01_M6C 0 3 39 -6 -48703488 L2_B21_S01_M5C 0 3 39 -5 -48705536 L2_B21_S01_M4C 0 3 39 -4 -48707584 L2_B21_S01_M3C 0 3 39 -3 -48709632 L2_B21_S01_M2C 0 3 39 -2 -48711680 L2_B21_S01_M1C 0 3 39 -1 -48713728 L2_B21_S01_M0 0 3 39 0 -48715776 L2_B21_S01_M1A 0 3 39 1 -48717824 L2_B21_S01_M2A 0 3 39 2 -48719872 L2_B21_S01_M3A 0 3 39 3 -48721920 L2_B21_S01_M4A 0 3 39 4 -48723968 L2_B21_S01_M5A 0 3 39 5 -48726016 L2_B21_S01_M6A 0 3 39 6 -48766976 L2_B21_S02_M6C 0 3 40 -6 -48769024 L2_B21_S02_M5C 0 3 40 -5 -48771072 L2_B21_S02_M4C 0 3 40 -4 -48773120 L2_B21_S02_M3C 0 3 40 -3 -48775168 L2_B21_S02_M2C 0 3 40 -2 -48777216 L2_B21_S02_M1C 0 3 40 -1 -48779264 L2_B21_S02_M0 0 3 40 0 -48781312 L2_B21_S02_M1A 0 3 40 1 -48783360 L2_B21_S02_M2A 0 3 40 2 -48785408 L2_B21_S02_M3A 0 3 40 3 -48787456 L2_B21_S02_M4A 0 3 40 4 -48789504 L2_B21_S02_M5A 0 3 40 5 -48791552 L2_B21_S02_M6A 0 3 40 6 -48832512 L2_B22_S01_M6C 0 3 41 -6 -48834560 L2_B22_S01_M5C 0 3 41 -5 -48836608 L2_B22_S01_M4C 0 3 41 -4 -48838656 L2_B22_S01_M3C 0 3 41 -3 -48840704 L2_B22_S01_M2C 0 3 41 -2 -48842752 L2_B22_S01_M1C 0 3 41 -1 -48844800 L2_B22_S01_M0 0 3 41 0 -48846848 L2_B22_S01_M1A 0 3 41 1 -48848896 L2_B22_S01_M2A 0 3 41 2 -48850944 L2_B22_S01_M3A 0 3 41 3 -48852992 L2_B22_S01_M4A 0 3 41 4 -48855040 L2_B22_S01_M5A 0 3 41 5 -48857088 L2_B22_S01_M6A 0 3 41 6 -48898048 L2_B22_S02_M6C 0 3 42 -6 -48900096 L2_B22_S02_M5C 0 3 42 -5 -48902144 L2_B22_S02_M4C 0 3 42 -4 -48904192 L2_B22_S02_M3C 0 3 42 -3 -48906240 L2_B22_S02_M2C 0 3 42 -2 -48908288 L2_B22_S02_M1C 0 3 42 -1 -48910336 L2_B22_S02_M0 0 3 42 0 -48912384 L2_B22_S02_M1A 0 3 42 1 -48914432 L2_B22_S02_M2A 0 3 42 2 -48916480 L2_B22_S02_M3A 0 3 42 3 -48918528 L2_B22_S02_M4A 0 3 42 4 -48920576 L2_B22_S02_M5A 0 3 42 5 -48922624 L2_B22_S02_M6A 0 3 42 6 -48963584 L2_B23_S01_M6C 0 3 43 -6 -48965632 L2_B23_S01_M5C 0 3 43 -5 -48967680 L2_B23_S01_M4C 0 3 43 -4 -48969728 L2_B23_S01_M3C 0 3 43 -3 -48971776 L2_B23_S01_M2C 0 3 43 -2 -48973824 L2_B23_S01_M1C 0 3 43 -1 -48975872 L2_B23_S01_M0 0 3 43 0 -48977920 L2_B23_S01_M1A 0 3 43 1 -48979968 L2_B23_S01_M2A 0 3 43 2 -48982016 L2_B23_S01_M3A 0 3 43 3 -48984064 L2_B23_S01_M4A 0 3 43 4 -48986112 L2_B23_S01_M5A 0 3 43 5 -48988160 L2_B23_S01_M6A 0 3 43 6 -49029120 L2_B23_S02_M6C 0 3 44 -6 -49031168 L2_B23_S02_M5C 0 3 44 -5 -49033216 L2_B23_S02_M4C 0 3 44 -4 -49035264 L2_B23_S02_M3C 0 3 44 -3 -49037312 L2_B23_S02_M2C 0 3 44 -2 -49039360 L2_B23_S02_M1C 0 3 44 -1 -49041408 L2_B23_S02_M0 0 3 44 0 -49043456 L2_B23_S02_M1A 0 3 44 1 -49045504 L2_B23_S02_M2A 0 3 44 2 -49047552 L2_B23_S02_M3A 0 3 44 3 -49049600 L2_B23_S02_M4A 0 3 44 4 -49051648 L2_B23_S02_M5A 0 3 44 5 -49053696 L2_B23_S02_M6A 0 3 44 6 -49094656 L2_B24_S01_M6C 0 3 45 -6 -49096704 L2_B24_S01_M5C 0 3 45 -5 -49098752 L2_B24_S01_M4C 0 3 45 -4 -49100800 L2_B24_S01_M3C 0 3 45 -3 -49102848 L2_B24_S01_M2C 0 3 45 -2 -49104896 L2_B24_S01_M1C 0 3 45 -1 -49106944 L2_B24_S01_M0 0 3 45 0 -49108992 L2_B24_S01_M1A 0 3 45 1 -49111040 L2_B24_S01_M2A 0 3 45 2 -49113088 L2_B24_S01_M3A 0 3 45 3 -49115136 L2_B24_S01_M4A 0 3 45 4 -49117184 L2_B24_S01_M5A 0 3 45 5 -49119232 L2_B24_S01_M6A 0 3 45 6 -49160192 L2_B24_S02_M6C 0 3 46 -6 -49162240 L2_B24_S02_M5C 0 3 46 -5 -49164288 L2_B24_S02_M4C 0 3 46 -4 -49166336 L2_B24_S02_M3C 0 3 46 -3 -49168384 L2_B24_S02_M2C 0 3 46 -2 -49170432 L2_B24_S02_M1C 0 3 46 -1 -49172480 L2_B24_S02_M0 0 3 46 0 -49174528 L2_B24_S02_M1A 0 3 46 1 -49176576 L2_B24_S02_M2A 0 3 46 2 -49178624 L2_B24_S02_M3A 0 3 46 3 -49180672 L2_B24_S02_M4A 0 3 46 4 -49182720 L2_B24_S02_M5A 0 3 46 5 -49184768 L2_B24_S02_M6A 0 3 46 6 -49225728 L2_B25_S01_M6C 0 3 47 -6 -49227776 L2_B25_S01_M5C 0 3 47 -5 -49229824 L2_B25_S01_M4C 0 3 47 -4 -49231872 L2_B25_S01_M3C 0 3 47 -3 -49233920 L2_B25_S01_M2C 0 3 47 -2 -49235968 L2_B25_S01_M1C 0 3 47 -1 -49238016 L2_B25_S01_M0 0 3 47 0 -49240064 L2_B25_S01_M1A 0 3 47 1 -49242112 L2_B25_S01_M2A 0 3 47 2 -49244160 L2_B25_S01_M3A 0 3 47 3 -49246208 L2_B25_S01_M4A 0 3 47 4 -49248256 L2_B25_S01_M5A 0 3 47 5 -49250304 L2_B25_S01_M6A 0 3 47 6 -49291264 L2_B25_S02_M6C 0 3 48 -6 -49293312 L2_B25_S02_M5C 0 3 48 -5 -49295360 L2_B25_S02_M4C 0 3 48 -4 -49297408 L2_B25_S02_M3C 0 3 48 -3 -49299456 L2_B25_S02_M2C 0 3 48 -2 -49301504 L2_B25_S02_M1C 0 3 48 -1 -49303552 L2_B25_S02_M0 0 3 48 0 -49305600 L2_B25_S02_M1A 0 3 48 1 -49307648 L2_B25_S02_M2A 0 3 48 2 -49309696 L2_B25_S02_M3A 0 3 48 3 -49311744 L2_B25_S02_M4A 0 3 48 4 -49313792 L2_B25_S02_M5A 0 3 48 5 -49315840 L2_B25_S02_M6A 0 3 48 6 -49356800 L2_B26_S01_M6C 0 3 49 -6 -49358848 L2_B26_S01_M5C 0 3 49 -5 -49360896 L2_B26_S01_M4C 0 3 49 -4 -49362944 L2_B26_S01_M3C 0 3 49 -3 -49364992 L2_B26_S01_M2C 0 3 49 -2 -49367040 L2_B26_S01_M1C 0 3 49 -1 -49369088 L2_B26_S01_M0 0 3 49 0 -49371136 L2_B26_S01_M1A 0 3 49 1 -49373184 L2_B26_S01_M2A 0 3 49 2 -49375232 L2_B26_S01_M3A 0 3 49 3 -49377280 L2_B26_S01_M4A 0 3 49 4 -49379328 L2_B26_S01_M5A 0 3 49 5 -49381376 L2_B26_S01_M6A 0 3 49 6 -49422336 L2_B26_S02_M6C 0 3 50 -6 -49424384 L2_B26_S02_M5C 0 3 50 -5 -49426432 L2_B26_S02_M4C 0 3 50 -4 -49428480 L2_B26_S02_M3C 0 3 50 -3 -49430528 L2_B26_S02_M2C 0 3 50 -2 -49432576 L2_B26_S02_M1C 0 3 50 -1 -49434624 L2_B26_S02_M0 0 3 50 0 -49436672 L2_B26_S02_M1A 0 3 50 1 -49438720 L2_B26_S02_M2A 0 3 50 2 -49440768 L2_B26_S02_M3A 0 3 50 3 -49442816 L2_B26_S02_M4A 0 3 50 4 -49444864 L2_B26_S02_M5A 0 3 50 5 -49446912 L2_B26_S02_M6A 0 3 50 6 -49487872 L2_B01_S01_M6C 0 3 51 -6 -49489920 L2_B01_S01_M5C 0 3 51 -5 -49491968 L2_B01_S01_M4C 0 3 51 -4 -49494016 L2_B01_S01_M3C 0 3 51 -3 -49496064 L2_B01_S01_M2C 0 3 51 -2 -49498112 L2_B01_S01_M1C 0 3 51 -1 -49500160 L2_B01_S01_M0 0 3 51 0 -49502208 L2_B01_S01_M1A 0 3 51 1 -49504256 L2_B01_S01_M2A 0 3 51 2 -49506304 L2_B01_S01_M3A 0 3 51 3 -49508352 L2_B01_S01_M4A 0 3 51 4 -49510400 L2_B01_S01_M5A 0 3 51 5 -49512448 L2_B01_S01_M6A 0 3 51 6 -50352128 D1A_B01_S2_M1 2 0 0 0 -50417664 D1A_B01_S2_M6 2 0 1 0 -50483200 D1A_B01_S2_M2 2 0 2 0 -50548736 D1A_B01_S2_M5 2 0 3 0 -50614272 D1A_B01_S2_M3 2 0 4 0 -50679808 D1A_B01_S2_M4 2 0 5 0 -50745344 D1A_B02_S1_M1 2 0 6 0 -50810880 D1A_B02_S1_M6 2 0 7 0 -50876416 D1A_B02_S1_M2 2 0 8 0 -50941952 D1A_B02_S1_M5 2 0 9 0 -51007488 D1A_B02_S1_M3 2 0 10 0 -51073024 D1A_B02_S1_M4 2 0 11 0 -51138560 D1A_B02_S2_M1 2 0 12 0 -51204096 D1A_B02_S2_M6 2 0 13 0 -51269632 D1A_B02_S2_M2 2 0 14 0 -51335168 D1A_B02_S2_M5 2 0 15 0 -51400704 D1A_B02_S2_M3 2 0 16 0 -51466240 D1A_B02_S2_M4 2 0 17 0 -51531776 D1A_B03_S1_M1 2 0 18 0 -51597312 D1A_B03_S1_M6 2 0 19 0 -51662848 D1A_B03_S1_M2 2 0 20 0 -51728384 D1A_B03_S1_M5 2 0 21 0 -51793920 D1A_B03_S1_M3 2 0 22 0 -51859456 D1A_B03_S1_M4 2 0 23 0 -51924992 D1A_B03_S2_M1 2 0 24 0 -51990528 D1A_B03_S2_M6 2 0 25 0 -52056064 D1A_B03_S2_M2 2 0 26 0 -52121600 D1A_B03_S2_M5 2 0 27 0 -52187136 D1A_B03_S2_M3 2 0 28 0 -52252672 D1A_B03_S2_M4 2 0 29 0 -52318208 D1A_B04_S1_M1 2 0 30 0 -52383744 D1A_B04_S1_M6 2 0 31 0 -52449280 D1A_B04_S1_M2 2 0 32 0 -52514816 D1A_B04_S1_M5 2 0 33 0 -52580352 D1A_B04_S1_M3 2 0 34 0 -52645888 D1A_B04_S1_M4 2 0 35 0 -52711424 D1A_B04_S2_M1 2 0 36 0 -52776960 D1A_B04_S2_M6 2 0 37 0 -52842496 D1A_B04_S2_M2 2 0 38 0 -52908032 D1A_B04_S2_M5 2 0 39 0 -52973568 D1A_B04_S2_M3 2 0 40 0 -53039104 D1A_B04_S2_M4 2 0 41 0 -53104640 D1A_B01_S1_M1 2 0 42 0 -53170176 D1A_B01_S1_M6 2 0 43 0 -53235712 D1A_B01_S1_M2 2 0 44 0 -53301248 D1A_B01_S1_M5 2 0 45 0 -53366784 D1A_B01_S1_M3 2 0 46 0 -53432320 D1A_B01_S1_M4 2 0 47 0 -54546432 D2A_B01_S2_M1 2 1 0 0 -54611968 D2A_B01_S2_M6 2 1 1 0 -54677504 D2A_B01_S2_M2 2 1 2 0 -54743040 D2A_B01_S2_M5 2 1 3 0 -54808576 D2A_B01_S2_M3 2 1 4 0 -54874112 D2A_B01_S2_M4 2 1 5 0 -54939648 D2A_B02_S1_M1 2 1 6 0 -55005184 D2A_B02_S1_M6 2 1 7 0 -55070720 D2A_B02_S1_M2 2 1 8 0 -55136256 D2A_B02_S1_M5 2 1 9 0 -55201792 D2A_B02_S1_M3 2 1 10 0 -55267328 D2A_B02_S1_M4 2 1 11 0 -55332864 D2A_B02_S2_M1 2 1 12 0 -55398400 D2A_B02_S2_M6 2 1 13 0 -55463936 D2A_B02_S2_M2 2 1 14 0 -55529472 D2A_B02_S2_M5 2 1 15 0 -55595008 D2A_B02_S2_M3 2 1 16 0 -55660544 D2A_B02_S2_M4 2 1 17 0 -55726080 D2A_B03_S1_M1 2 1 18 0 -55791616 D2A_B03_S1_M6 2 1 19 0 -55857152 D2A_B03_S1_M2 2 1 20 0 -55922688 D2A_B03_S1_M5 2 1 21 0 -55988224 D2A_B03_S1_M3 2 1 22 0 -56053760 D2A_B03_S1_M4 2 1 23 0 -56119296 D2A_B03_S2_M1 2 1 24 0 -56184832 D2A_B03_S2_M6 2 1 25 0 -56250368 D2A_B03_S2_M2 2 1 26 0 -56315904 D2A_B03_S2_M5 2 1 27 0 -56381440 D2A_B03_S2_M3 2 1 28 0 -56446976 D2A_B03_S2_M4 2 1 29 0 -56512512 D2A_B04_S1_M1 2 1 30 0 -56578048 D2A_B04_S1_M6 2 1 31 0 -56643584 D2A_B04_S1_M2 2 1 32 0 -56709120 D2A_B04_S1_M5 2 1 33 0 -56774656 D2A_B04_S1_M3 2 1 34 0 -56840192 D2A_B04_S1_M4 2 1 35 0 -56905728 D2A_B04_S2_M1 2 1 36 0 -56971264 D2A_B04_S2_M6 2 1 37 0 -57036800 D2A_B04_S2_M2 2 1 38 0 -57102336 D2A_B04_S2_M5 2 1 39 0 -57167872 D2A_B04_S2_M3 2 1 40 0 -57233408 D2A_B04_S2_M4 2 1 41 0 -57298944 D2A_B01_S1_M1 2 1 42 0 -57364480 D2A_B01_S1_M6 2 1 43 0 -57430016 D2A_B01_S1_M2 2 1 44 0 -57495552 D2A_B01_S1_M5 2 1 45 0 -57561088 D2A_B01_S1_M3 2 1 46 0 -57626624 D2A_B01_S1_M4 2 1 47 0 -58740736 D3A_B01_S2_M1 2 2 0 0 -58806272 D3A_B01_S2_M6 2 2 1 0 -58871808 D3A_B01_S2_M2 2 2 2 0 -58937344 D3A_B01_S2_M5 2 2 3 0 -59002880 D3A_B01_S2_M3 2 2 4 0 -59068416 D3A_B01_S2_M4 2 2 5 0 -59133952 D3A_B02_S1_M1 2 2 6 0 -59199488 D3A_B02_S1_M6 2 2 7 0 -59265024 D3A_B02_S1_M2 2 2 8 0 -59330560 D3A_B02_S1_M5 2 2 9 0 -59396096 D3A_B02_S1_M3 2 2 10 0 -59461632 D3A_B02_S1_M4 2 2 11 0 -59527168 D3A_B02_S2_M1 2 2 12 0 -59592704 D3A_B02_S2_M6 2 2 13 0 -59658240 D3A_B02_S2_M2 2 2 14 0 -59723776 D3A_B02_S2_M5 2 2 15 0 -59789312 D3A_B02_S2_M3 2 2 16 0 -59854848 D3A_B02_S2_M4 2 2 17 0 -59920384 D3A_B03_S1_M1 2 2 18 0 -59985920 D3A_B03_S1_M6 2 2 19 0 -60051456 D3A_B03_S1_M2 2 2 20 0 -60116992 D3A_B03_S1_M5 2 2 21 0 -60182528 D3A_B03_S1_M3 2 2 22 0 -60248064 D3A_B03_S1_M4 2 2 23 0 -60313600 D3A_B03_S2_M1 2 2 24 0 -60379136 D3A_B03_S2_M6 2 2 25 0 -60444672 D3A_B03_S2_M2 2 2 26 0 -60510208 D3A_B03_S2_M5 2 2 27 0 -60575744 D3A_B03_S2_M3 2 2 28 0 -60641280 D3A_B03_S2_M4 2 2 29 0 -60706816 D3A_B04_S1_M1 2 2 30 0 -60772352 D3A_B04_S1_M6 2 2 31 0 -60837888 D3A_B04_S1_M2 2 2 32 0 -60903424 D3A_B04_S1_M5 2 2 33 0 -60968960 D3A_B04_S1_M3 2 2 34 0 -61034496 D3A_B04_S1_M4 2 2 35 0 -61100032 D3A_B04_S2_M1 2 2 36 0 -61165568 D3A_B04_S2_M6 2 2 37 0 -61231104 D3A_B04_S2_M2 2 2 38 0 -61296640 D3A_B04_S2_M5 2 2 39 0 -61362176 D3A_B04_S2_M3 2 2 40 0 -61427712 D3A_B04_S2_M4 2 2 41 0 -61493248 D3A_B01_S1_M1 2 2 42 0 -61558784 D3A_B01_S1_M6 2 2 43 0 -61624320 D3A_B01_S1_M2 2 2 44 0 -61689856 D3A_B01_S1_M5 2 2 45 0 -61755392 D3A_B01_S1_M3 2 2 46 0 -61820928 D3A_B01_S1_M4 2 2 47 0 -67129344 LI_S15_A_34_M3_A1_1 4 0 0 0 -67194880 LI_S15_A_34_M4_A4_1 4 0 1 0 -67260416 LI_S15_A_12_M1_A1_2 4 0 2 0 -67325952 LI_S15_A_12_M2_A4_2 4 0 3 0 -71323648 LI_S15_A_34_M3_A2_1 4 1 0 0 -71389184 LI_S15_A_34_M4_A5_1 4 1 1 0 -71454720 LI_S15_A_12_M1_A2_2 4 1 2 0 -71520256 LI_S15_A_12_M2_A5_2 4 1 3 0 -75517952 LI_S15_A_34_M3_A3_1 4 2 0 0 -75583488 LI_S15_A_34_M4_A6_1 4 2 1 0 -75649024 LI_S15_A_12_M1_A3_2 4 2 2 0 -75714560 LI_S15_A_12_M2_A6_2 4 2 3 0 diff --git a/InnerDetector/InDetConditions/PixelConditionsTools/src/PixelConditionsSummaryTool.cxx b/InnerDetector/InDetConditions/PixelConditionsTools/src/PixelConditionsSummaryTool.cxx index a7c05be15fb0981d7d569d623a3985c2d9b59b87..a35fee8446aa433968e6074115acb70255246b38 100644 --- a/InnerDetector/InDetConditions/PixelConditionsTools/src/PixelConditionsSummaryTool.cxx +++ b/InnerDetector/InDetConditions/PixelConditionsTools/src/PixelConditionsSummaryTool.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration */ #ifndef SIMULATIONBASE @@ -34,38 +34,51 @@ StatusCode PixelConditionsSummaryTool::initialize(){ ATH_CHECK(setProperties()); - if (m_useDCSState) { ATH_CHECK(m_DCSConditionsTool.retrieve()); } + if (m_useDCSState) { + ATH_CHECK(m_condDCSStateKey.initialize()); + ATH_CHECK(m_condDCSStatusKey.initialize()); + } if (m_useByteStream) { ATH_CHECK(m_pixelBSErrorsSvc.retrieve()); } ATH_CHECK(detStore()->retrieve(m_pixelID,"PixelID")); - if (m_useTDAQ || m_useDeadMap) { ATH_CHECK(m_condKey.initialize()); } + if (m_useTDAQ) { ATH_CHECK(m_condTDAQKey.initialize()); } - return StatusCode::SUCCESS; -} + if (m_useDeadMap) { ATH_CHECK(m_condDeadMapKey.initialize()); } -bool PixelConditionsSummaryTool::isActive(const Identifier & elementId, const InDetConditions::Hierarchy h) const { - - UNUSED_VARIABLE(h); - - IdentifierHash moduleHash = m_pixelID->wafer_hash(elementId); - - if (m_useByteStream && !m_pixelBSErrorsSvc->isActive(moduleHash)) { return false; } - - if (m_useDCSState) { - bool isDCSActive = false; - std::string dcsState = m_DCSConditionsTool->PixelFSMState(moduleHash); + for (unsigned int istate=0; istate<m_isActiveStates.size(); istate++) { + if (m_isActiveStates[istate]=="READY") { m_activeState.push_back(PixelModuleData::DCSModuleState::READY); } + else if (m_isActiveStates[istate]=="ON") { m_activeState.push_back(PixelModuleData::DCSModuleState::ON); } + else if (m_isActiveStates[istate]=="UNKNOWN") { m_activeState.push_back(PixelModuleData::DCSModuleState::UNKNOWN); } + else if (m_isActiveStates[istate]=="TRANSITION") { m_activeState.push_back(PixelModuleData::DCSModuleState::TRANSITION); } + else if (m_isActiveStates[istate]=="UNDEFINED") { m_activeState.push_back(PixelModuleData::DCSModuleState::UNDEFINED); } + else if (m_isActiveStates[istate]=="NOSTATE") { m_activeState.push_back(PixelModuleData::DCSModuleState::NOSTATE); } + else { + ATH_MSG_ERROR("No matching DCS state " << m_isActiveStates[istate] << " in DCSModuleState"); + return StatusCode::FAILURE; + } + } - for (unsigned int istate=0; istate<m_isActiveStates.size(); istate++) { - if (m_isActiveStates[istate]==dcsState) { isDCSActive=true; } + for (unsigned int istatus=0; istatus<m_isActiveStatus.size(); istatus++) { + if (m_isActiveStatus[istatus]=="OK") { m_activeStatus.push_back(PixelModuleData::DCSModuleStatus::OK); } + else if (m_isActiveStatus[istatus]=="WARNING") { m_activeStatus.push_back(PixelModuleData::DCSModuleStatus::WARNING); } + else if (m_isActiveStatus[istatus]=="ERROR") { m_activeStatus.push_back(PixelModuleData::DCSModuleStatus::ERROR); } + else if (m_isActiveStatus[istatus]=="FATAL") { m_activeStatus.push_back(PixelModuleData::DCSModuleStatus::FATAL); } + else if (m_isActiveStatus[istatus]=="NOSTATUS") { m_activeStatus.push_back(PixelModuleData::DCSModuleStatus::NOSTATUS); } + else { + ATH_MSG_ERROR("No matching DCS status " << m_isActiveStatus[istatus] << " in DCSModuleStatus"); + return StatusCode::FAILURE; } - if (!isDCSActive) { return isDCSActive; } } - if (m_useTDAQ && SG::ReadCondHandle<PixelModuleData>(m_condKey)->getTDAQModuleStatus(moduleHash)) { return false; } + return StatusCode::SUCCESS; +} - if (m_useDeadMap && SG::ReadCondHandle<PixelModuleData>(m_condKey)->getModuleStatus(moduleHash)) { return false; } +bool PixelConditionsSummaryTool::isActive(const Identifier & elementId, const InDetConditions::Hierarchy h) const { + + UNUSED_VARIABLE(elementId); + UNUSED_VARIABLE(h); return true; } @@ -75,18 +88,17 @@ bool PixelConditionsSummaryTool::isActive(const IdentifierHash & moduleHash) con if (m_useByteStream && !m_pixelBSErrorsSvc->isActive(moduleHash)) { return false; } if (m_useDCSState) { + SG::ReadCondHandle<PixelModuleData> dcsstate_data(m_condDCSStateKey); bool isDCSActive = false; - std::string dcsState = m_DCSConditionsTool->PixelFSMState(moduleHash); - - for (unsigned int istate=0; istate<m_isActiveStates.size(); istate++) { - if (m_isActiveStates[istate]==dcsState) { isDCSActive=true; } + for (unsigned int istate=0; istate<m_activeState.size(); istate++) { + if (m_activeState[istate]==dcsstate_data->getModuleStatus(moduleHash)) { isDCSActive=true; } } - if (!isDCSActive) { return isDCSActive; } + if (!isDCSActive) { return false; } } - if (m_useTDAQ && SG::ReadCondHandle<PixelModuleData>(m_condKey)->getTDAQModuleStatus(moduleHash)) { return false; } + if (m_useTDAQ && SG::ReadCondHandle<PixelModuleData>(m_condTDAQKey)->getModuleStatus(moduleHash)) { return false; } - if (m_useDeadMap && SG::ReadCondHandle<PixelModuleData>(m_condKey)->getModuleStatus(moduleHash)) { return false; } + if (m_useDeadMap && SG::ReadCondHandle<PixelModuleData>(m_condDeadMapKey)->getModuleStatus(moduleHash)) { return false; } return true; } @@ -98,46 +110,28 @@ bool PixelConditionsSummaryTool::isActive(const IdentifierHash & moduleHash, con if (m_useByteStream && !m_pixelBSErrorsSvc->isActive(moduleHash)) { return false; } if (m_useDCSState) { + SG::ReadCondHandle<PixelModuleData> dcsstate_data(m_condDCSStateKey); bool isDCSActive = false; - std::string dcsState = m_DCSConditionsTool->PixelFSMState(moduleHash); - - for (unsigned int istate=0; istate<m_isActiveStates.size(); istate++) { - if (m_isActiveStates[istate]==dcsState) { isDCSActive=true; } + for (unsigned int istate=0; istate<m_activeState.size(); istate++) { + if (m_activeState[istate]==dcsstate_data->getModuleStatus(moduleHash)) { isDCSActive=true; } } - if (!isDCSActive) { return isDCSActive; } + if (!isDCSActive) { return false; } } - if (m_useTDAQ && SG::ReadCondHandle<PixelModuleData>(m_condKey)->getTDAQModuleStatus(moduleHash)) { return false; } + if (m_useTDAQ && SG::ReadCondHandle<PixelModuleData>(m_condTDAQKey)->getModuleStatus(moduleHash)) { return false; } - if (m_useDeadMap && SG::ReadCondHandle<PixelModuleData>(m_condKey)->getModuleStatus(moduleHash)) { return false; } + if (m_useDeadMap && SG::ReadCondHandle<PixelModuleData>(m_condDeadMapKey)->getModuleStatus(moduleHash)) { return false; } return true; } double PixelConditionsSummaryTool::activeFraction(const IdentifierHash & moduleHash, const Identifier & idStart, const Identifier & idEnd) const { + UNUSED_VARIABLE(moduleHash); UNUSED_VARIABLE(idStart); UNUSED_VARIABLE(idEnd); - if (m_useByteStream && !m_pixelBSErrorsSvc->isActive(moduleHash)) { return 0.; } - - if (m_useDCSState) { - bool isDCSActive = false; - std::string dcsState = m_DCSConditionsTool->PixelFSMState(moduleHash); - - for (unsigned int istate=0; istate<m_isActiveStates.size(); istate++) { - if (m_isActiveStates[istate]==dcsState) { isDCSActive=true; } - } - if (!isDCSActive) { return 0.; } - } - - if (m_useTDAQ && SG::ReadCondHandle<PixelModuleData>(m_condKey)->getTDAQModuleStatus(moduleHash)) { return 0.0; } - - if (m_useDeadMap && SG::ReadCondHandle<PixelModuleData>(m_condKey)->getModuleStatus(moduleHash)) { return 0.0; } - - // TODO!!! Calculate active fraction from dead map. - - return 1.; + return 1.0; } bool PixelConditionsSummaryTool::isGood(const Identifier & elementId, const InDetConditions::Hierarchy h)const{ @@ -150,23 +144,24 @@ bool PixelConditionsSummaryTool::isGood(const Identifier & elementId, const InDe if (m_useByteStream && !m_pixelBSErrorsSvc->isGood(moduleHash)) { return false; } if (m_useDCSState) { + SG::ReadCondHandle<PixelModuleData> dcsstate_data(m_condDCSStateKey); bool isDCSActive = false; - std::string dcsState = m_DCSConditionsTool->PixelFSMState(moduleHash); - bool isDCSGood = false; - std::string dcsStatus = m_DCSConditionsTool->PixelFSMStatus(moduleHash); - - for (unsigned int istate=0; istate<m_isActiveStates.size(); istate++) { - if (m_isActiveStates[istate]==dcsState) { isDCSActive=true; } + for (unsigned int istate=0; istate<m_activeState.size(); istate++) { + if (m_activeState[istate]==dcsstate_data->getModuleStatus(moduleHash)) { isDCSActive=true; } } - for (unsigned int istatus=0; istatus<m_isActiveStatus.size(); istatus++) { - if (m_isActiveStatus[istatus]==dcsStatus) { isDCSGood=true; } + if (!isDCSActive) { return false; } + + SG::ReadCondHandle<PixelModuleData> dcsstatus_data(m_condDCSStatusKey); + bool isDCSGood = false; + for (unsigned int istatus=0; istatus<m_activeStatus.size(); istatus++) { + if (m_activeStatus[istatus]==dcsstatus_data->getModuleStatus(moduleHash)) { isDCSGood=true; } } - if (!(isDCSActive && isDCSGood)) { return false; } + if (!isDCSGood) { return false; } } - if (m_useTDAQ && SG::ReadCondHandle<PixelModuleData>(m_condKey)->getTDAQModuleStatus(moduleHash)) { return false; } + if (m_useTDAQ && SG::ReadCondHandle<PixelModuleData>(m_condTDAQKey)->getModuleStatus(moduleHash)) { return false; } - if (m_useDeadMap && SG::ReadCondHandle<PixelModuleData>(m_condKey)->getModuleStatus(moduleHash)) { return false; } + if (m_useDeadMap && SG::ReadCondHandle<PixelModuleData>(m_condDeadMapKey)->getModuleStatus(moduleHash)) { return false; } return true; } @@ -176,23 +171,24 @@ bool PixelConditionsSummaryTool::isGood(const IdentifierHash & moduleHash) const if (m_useByteStream && !m_pixelBSErrorsSvc->isGood(moduleHash)) { return false; } if (m_useDCSState) { + SG::ReadCondHandle<PixelModuleData> dcsstate_data(m_condDCSStateKey); bool isDCSActive = false; - std::string dcsState = m_DCSConditionsTool->PixelFSMState(moduleHash); - bool isDCSGood = false; - std::string dcsStatus = m_DCSConditionsTool->PixelFSMStatus(moduleHash); - - for (unsigned int istate=0; istate<m_isActiveStates.size(); istate++) { - if (m_isActiveStates[istate]==dcsState) { isDCSActive=true; } + for (unsigned int istate=0; istate<m_activeState.size(); istate++) { + if (m_activeState[istate]==dcsstate_data->getModuleStatus(moduleHash)) { isDCSActive=true; } } - for (unsigned int istatus=0; istatus<m_isActiveStatus.size(); istatus++) { - if (m_isActiveStatus[istatus]==dcsStatus) { isDCSGood=true; } + if (!isDCSActive) { return false; } + + SG::ReadCondHandle<PixelModuleData> dcsstatus_data(m_condDCSStatusKey); + bool isDCSGood = false; + for (unsigned int istatus=0; istatus<m_activeStatus.size(); istatus++) { + if (m_activeStatus[istatus]==dcsstatus_data->getModuleStatus(moduleHash)) { isDCSGood=true; } } - if (!(isDCSActive && isDCSGood)) { return false; } + if (!isDCSGood) { return false; } } - if (m_useTDAQ && SG::ReadCondHandle<PixelModuleData>(m_condKey)->getTDAQModuleStatus(moduleHash)) { return false; } + if (m_useTDAQ && SG::ReadCondHandle<PixelModuleData>(m_condTDAQKey)->getModuleStatus(moduleHash)) { return false; } - if (m_useDeadMap && SG::ReadCondHandle<PixelModuleData>(m_condKey)->getModuleStatus(moduleHash)) { return false; } + if (m_useDeadMap && SG::ReadCondHandle<PixelModuleData>(m_condDeadMapKey)->getModuleStatus(moduleHash)) { return false; } return true; } @@ -204,23 +200,24 @@ bool PixelConditionsSummaryTool::isGood(const IdentifierHash & moduleHash, const if (m_useByteStream && !m_pixelBSErrorsSvc->isGood(moduleHash)) { return false; } if (m_useDCSState) { + SG::ReadCondHandle<PixelModuleData> dcsstate_data(m_condDCSStateKey); bool isDCSActive = false; - std::string dcsState = m_DCSConditionsTool->PixelFSMState(moduleHash); - bool isDCSGood = false; - std::string dcsStatus = m_DCSConditionsTool->PixelFSMStatus(moduleHash); - - for (unsigned int istate=0; istate<m_isActiveStates.size(); istate++) { - if (m_isActiveStates[istate]==dcsState) { isDCSActive=true; } + for (unsigned int istate=0; istate<m_activeState.size(); istate++) { + if (m_activeState[istate]==dcsstate_data->getModuleStatus(moduleHash)) { isDCSActive=true; } } - for (unsigned int istatus=0; istatus<m_isActiveStatus.size(); istatus++) { - if (m_isActiveStatus[istatus]==dcsStatus) { isDCSGood=true; } + if (!isDCSActive) { return false; } + + SG::ReadCondHandle<PixelModuleData> dcsstatus_data(m_condDCSStatusKey); + bool isDCSGood = false; + for (unsigned int istatus=0; istatus<m_activeStatus.size(); istatus++) { + if (m_activeStatus[istatus]==dcsstatus_data->getModuleStatus(moduleHash)) { isDCSGood=true; } } - if (!(isDCSActive && isDCSGood)) { return false; } + if (!isDCSGood) { return false; } } - if (m_useTDAQ && SG::ReadCondHandle<PixelModuleData>(m_condKey)->getTDAQModuleStatus(moduleHash)) { return false; } + if (m_useTDAQ && SG::ReadCondHandle<PixelModuleData>(m_condTDAQKey)->getModuleStatus(moduleHash)) { return false; } - if (m_useDeadMap && SG::ReadCondHandle<PixelModuleData>(m_condKey)->getModuleStatus(moduleHash)) { return false; } + if (m_useDeadMap && SG::ReadCondHandle<PixelModuleData>(m_condDeadMapKey)->getModuleStatus(moduleHash)) { return false; } return true; } @@ -233,23 +230,24 @@ double PixelConditionsSummaryTool::goodFraction(const IdentifierHash & moduleHas if (m_useByteStream && !m_pixelBSErrorsSvc->isGood(moduleHash)) { return 0.; } if (m_useDCSState) { + SG::ReadCondHandle<PixelModuleData> dcsstate_data(m_condDCSStateKey); bool isDCSActive = false; - std::string dcsState = m_DCSConditionsTool->PixelFSMState(moduleHash); - bool isDCSGood = false; - std::string dcsStatus = m_DCSConditionsTool->PixelFSMStatus(moduleHash); - - for (unsigned int istate=0; istate<m_isActiveStates.size(); istate++) { - if (m_isActiveStates[istate]==dcsState) { isDCSActive=true; } + for (unsigned int istate=0; istate<m_activeState.size(); istate++) { + if (m_activeState[istate]==dcsstate_data->getModuleStatus(moduleHash)) { isDCSActive=true; } } - for (unsigned int istatus=0; istatus<m_isActiveStatus.size(); istatus++) { - if (m_isActiveStatus[istatus]==dcsStatus) { isDCSGood=true; } + if (!isDCSActive) { return false; } + + SG::ReadCondHandle<PixelModuleData> dcsstatus_data(m_condDCSStatusKey); + bool isDCSGood = false; + for (unsigned int istatus=0; istatus<m_activeStatus.size(); istatus++) { + if (m_activeStatus[istatus]==dcsstatus_data->getModuleStatus(moduleHash)) { isDCSGood=true; } } - if (!(isDCSActive && isDCSGood)) { return 0.; } + if (!isDCSGood) { return 0.0; } } - if (m_useTDAQ && SG::ReadCondHandle<PixelModuleData>(m_condKey)->getTDAQModuleStatus(moduleHash)) { return 0.0; } + if (m_useTDAQ && SG::ReadCondHandle<PixelModuleData>(m_condTDAQKey)->getModuleStatus(moduleHash)) { return 1.0; } - if (m_useDeadMap && SG::ReadCondHandle<PixelModuleData>(m_condKey)->getModuleStatus(moduleHash)) { return 0.0; } + if (m_useDeadMap && SG::ReadCondHandle<PixelModuleData>(m_condDeadMapKey)->getModuleStatus(moduleHash)) { return 1.0; } // TODO!!! Calculate active fraction from dead map. diff --git a/InnerDetector/InDetConditions/PixelConditionsTools/src/PixelConditionsSummaryTool.h b/InnerDetector/InDetConditions/PixelConditionsTools/src/PixelConditionsSummaryTool.h index dc214a3881d7374bb6aecc4af1c56c1776d02855..7794c8caaa0f3f726bdf8b662fc18b9c32af6ec9 100644 --- a/InnerDetector/InDetConditions/PixelConditionsTools/src/PixelConditionsSummaryTool.h +++ b/InnerDetector/InDetConditions/PixelConditionsTools/src/PixelConditionsSummaryTool.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration */ #ifndef PIXELCONDITIONSSERVICES_PIXELCONDITIONSSUMMARYTOOL_H @@ -10,7 +10,6 @@ #include "AthenaBaseComps/AthAlgTool.h" #include "InDetConditionsSummaryService/IInDetConditionsTool.h" -#include "PixelConditionsTools/IPixelDCSConditionsTool.h" #include "PixelConditionsTools/IPixelByteStreamErrorsSvc.h" #include "Identifier/Identifier.h" @@ -41,18 +40,21 @@ class PixelConditionsSummaryTool: public AthAlgTool, public IInDetConditionsTool private: const PixelID* m_pixelID; - ToolHandle<IPixelDCSConditionsTool> m_DCSConditionsTool {this, "PixelDCSConditionsTool", "PixelDCSConditionsTool", "Tool to retrieve Pixel information"}; - ServiceHandle< IPixelByteStreamErrorsSvc > m_pixelBSErrorsSvc; std::vector<std::string> m_isActiveStatus; std::vector<std::string> m_isActiveStates; + std::vector<int> m_activeState; + std::vector<int> m_activeStatus; bool m_useDCSState; bool m_useByteStream; bool m_useTDAQ; bool m_useDeadMap; - SG::ReadCondHandleKey<PixelModuleData> m_condKey{this, "PixelModuleData", "PixelModuleData", "Output key of pixel module data"}; + SG::ReadCondHandleKey<PixelModuleData> m_condDCSStateKey{this, "PixelDCSStateCondData", "PixelDCSStateCondData", "Pixel FSM state key"}; + SG::ReadCondHandleKey<PixelModuleData> m_condDCSStatusKey{this, "PixelDCSStatusCondData", "PixelDCSStatusCondData", "Pixel FSM status key"}; + SG::ReadCondHandleKey<PixelModuleData> m_condTDAQKey{this, "PixelTDAQCondData", "PixelTDAQCondData", "Pixel TDAQ conditions key"}; + SG::ReadCondHandleKey<PixelModuleData> m_condDeadMapKey{this, "PixelModuleData", "PixelModuleData", "Pixel deadmap conditions key"}; }; inline InterfaceID& PixelConditionsSummaryTool::interfaceID(){ diff --git a/InnerDetector/InDetConditions/PixelConditionsTools/src/PixelDCSConditionsTool.cxx b/InnerDetector/InDetConditions/PixelConditionsTools/src/PixelDCSConditionsTool.cxx deleted file mode 100644 index 374f9954e57a2abd154ca5363aba42c28ab98669..0000000000000000000000000000000000000000 --- a/InnerDetector/InDetConditions/PixelConditionsTools/src/PixelDCSConditionsTool.cxx +++ /dev/null @@ -1,159 +0,0 @@ -/* - Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration -*/ - -#ifndef SIMULATIONBASE -#include "PixelDCSConditionsTool.h" - -PixelDCSConditionsTool::PixelDCSConditionsTool(const std::string& type, const std::string& name, const IInterface* parent): - base_class(type, name, parent), - m_pixid(nullptr), - m_useConditions(true), - m_isDATA(true), - m_defaultTemperature(-7.0), - m_defaultBiasVoltage(150.0), - m_defaultDepletionVoltage(0.0) -{ - declareProperty("UseConditions", m_useConditions); - declareProperty("IsDATA", m_isDATA); - declareProperty("Temperature", m_defaultTemperature, "Default temperature in Celcius."); - declareProperty("BiasVoltage", m_defaultBiasVoltage, "Default bias voltage in Volt." ); - declareProperty("DepletionVoltage", m_defaultDepletionVoltage, "Default depletion voltage in Volt."); -} - -StatusCode PixelDCSConditionsTool::initialize() { - ATH_MSG_DEBUG("PixelDCSConditionsTool::initialize()"); - - if (m_useConditions) { - ATH_CHECK(m_condKeyHV.initialize()); - ATH_CHECK(m_condKeyTemp.initialize()); - if (m_isDATA) { - ATH_CHECK(m_condKeyState.initialize()); - ATH_CHECK(m_condKeyStatus.initialize()); - } - } - ATH_CHECK(detStore()->retrieve(m_pixid,"PixelID")); - - return StatusCode::SUCCESS; -} - -StatusCode PixelDCSConditionsTool::finalize() { - ATH_MSG_DEBUG("PixelDCSConditionsTool::finalize()"); - return StatusCode::SUCCESS; -} - -float PixelDCSConditionsTool::temperature(const Identifier& elementId) const { - const IdentifierHash elementHash = m_pixid->wafer_hash(elementId); - return temperature(elementHash); -} - -float PixelDCSConditionsTool::biasVoltage(const Identifier& elementId) const { - const IdentifierHash elementHash = m_pixid->wafer_hash(elementId); - return biasVoltage(elementHash); -} - -float PixelDCSConditionsTool::depletionVoltage(const Identifier& /*elementId*/) const { - return m_defaultDepletionVoltage; -} - -std::string PixelDCSConditionsTool::PixelFSMState(const Identifier& elementId) const { - const IdentifierHash elementHash = m_pixid->wafer_hash(elementId); - return PixelFSMState(elementHash); -} - -std::string PixelDCSConditionsTool::PixelFSMStatus(const Identifier& elementId) const { - const IdentifierHash elementHash = m_pixid->wafer_hash(elementId); - return PixelFSMStatus(elementHash); -} - -float PixelDCSConditionsTool::temperature(const IdentifierHash& elementHash) const { - if (m_useConditions) { - const PixelDCSConditionsData* data(getCondDataTemp()); - if (data==nullptr) { return m_defaultTemperature; } - float temperature = m_defaultTemperature; - if (not data->getValue(elementHash, temperature)) { return m_defaultTemperature; } - if (temperature>100.0 or temperature<-80.0) { temperature = m_defaultTemperature; } - return temperature; - } - return m_defaultTemperature; -} - -float PixelDCSConditionsTool::biasVoltage(const IdentifierHash& elementHash) const { - if (m_useConditions) { - const PixelDCSConditionsData* data(getCondDataHV()); - if (data==nullptr) { return m_defaultBiasVoltage; } - float hv = m_defaultBiasVoltage; - if (not data->getValue(elementHash, hv)) { return m_defaultBiasVoltage; } - if (hv>1000.0 or hv<-1000.0) { hv = m_defaultBiasVoltage; } - return hv; - } - return m_defaultBiasVoltage; -} - -float PixelDCSConditionsTool::depletionVoltage(const IdentifierHash& /*elementHash*/) const { - return m_defaultDepletionVoltage; -} - -std::string PixelDCSConditionsTool::PixelFSMState(const IdentifierHash& elementHash) const { - std::string defaultState = "READY"; - if (!m_isDATA) { return defaultState; } - if (m_useConditions) { - const PixelDCSConditionsData* data(getCondDataState()); - if (data==nullptr) { return defaultState; } - std::string fsmstate = defaultState; - if (not data->getValue(elementHash, fsmstate)) { return defaultState; } - return fsmstate; - } - return defaultState; -} - -std::string PixelDCSConditionsTool::PixelFSMStatus(const IdentifierHash& elementHash) const { - std::string defaultStatus = "OK"; - if (!m_isDATA) { return defaultStatus; } - if (m_useConditions) { - const PixelDCSConditionsData* data(getCondDataStatus()); - if (data==nullptr) { return defaultStatus; } - std::string fsmstatus = defaultStatus; - if (not data->getValue(elementHash, fsmstatus)) { return defaultStatus; } - return fsmstatus; - } - return defaultStatus; -} - -const PixelDCSConditionsData* PixelDCSConditionsTool::getCondDataHV() const { - SG::ReadCondHandle<PixelDCSConditionsData> condData(m_condKeyHV); - if (not condData.isValid()) { - ATH_MSG_ERROR("Failed to get " << m_condKeyHV.key()); - return nullptr; - } - return *condData; -} - -const PixelDCSConditionsData* PixelDCSConditionsTool::getCondDataTemp() const { - SG::ReadCondHandle<PixelDCSConditionsData> condData(m_condKeyTemp); - if (not condData.isValid()) { - ATH_MSG_ERROR("Failed to get " << m_condKeyTemp.key()); - return nullptr; - } - return *condData; -} - -const PixelDCSConditionsData* PixelDCSConditionsTool::getCondDataState() const { - SG::ReadCondHandle<PixelDCSConditionsData> condData(m_condKeyState); - if (not condData.isValid()) { - ATH_MSG_ERROR("Failed to get " << m_condKeyState.key()); - return nullptr; - } - return *condData; -} - -const PixelDCSConditionsData* PixelDCSConditionsTool::getCondDataStatus() const { - SG::ReadCondHandle<PixelDCSConditionsData> condData(m_condKeyStatus); - if (not condData.isValid()) { - ATH_MSG_ERROR("Failed to get " << m_condKeyStatus.key()); - return nullptr; - } - return *condData; -} - -#endif // not SIMULATIONBASE diff --git a/InnerDetector/InDetConditions/PixelConditionsTools/src/PixelDCSConditionsTool.h b/InnerDetector/InDetConditions/PixelConditionsTools/src/PixelDCSConditionsTool.h deleted file mode 100644 index 30c9d6bd7842776fb3d2aec605e855edf4e097b5..0000000000000000000000000000000000000000 --- a/InnerDetector/InDetConditions/PixelConditionsTools/src/PixelDCSConditionsTool.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration -*/ - -#ifndef PIXELSILICONCONDITIONStOOL_H -#define PIXELSILICONCONDITIONStOOL_H - -#include "AthenaBaseComps/AthAlgTool.h" -#include "GaudiKernel/ServiceHandle.h" - -#include "PixelConditionsTools/IPixelDCSConditionsTool.h" -#include "PixelConditionsData/PixelDCSConditionsData.h" -#include "StoreGate/ReadCondHandleKey.h" - -#include "InDetIdentifier/PixelID.h" -#include "InDetReadoutGeometry/PixelDetectorManager.h" - -class PixelDCSConditionsTool: public extends<AthAlgTool, IPixelDCSConditionsTool> { - public: - - PixelDCSConditionsTool(const std::string& type, const std::string& name, const IInterface* parent); - virtual ~PixelDCSConditionsTool() = default; - - virtual StatusCode initialize() override; - virtual StatusCode finalize() override; - - virtual float temperature(const Identifier& elementId) const override; - virtual float biasVoltage(const Identifier& elementId) const override; - virtual float depletionVoltage(const Identifier& elementId) const override; - - virtual float temperature(const IdentifierHash& elementHash) const override; - virtual float biasVoltage(const IdentifierHash& elementHash) const override; - virtual float depletionVoltage(const IdentifierHash& elementHash) const override; - - virtual std::string PixelFSMState(const Identifier& elementId) const override; - virtual std::string PixelFSMState(const IdentifierHash& elementHash) const override; - - virtual std::string PixelFSMStatus(const Identifier& elementId) const override; - virtual std::string PixelFSMStatus(const IdentifierHash& elementHash) const override; - - private: - const PixelID* m_pixid; - - bool m_useConditions; - bool m_isDATA; - float m_defaultTemperature; - float m_defaultBiasVoltage; - float m_defaultDepletionVoltage; - - SG::ReadCondHandleKey<PixelDCSConditionsData> m_condKeyHV{this, "CondKeyHV", "PixelDCSHVCondData", "Pixel bias voltage"}; - SG::ReadCondHandleKey<PixelDCSConditionsData> m_condKeyTemp{this, "CondKeyTemp", "PixelDCSTempCondData", "Pixel temperature"}; - - SG::ReadCondHandleKey<PixelDCSConditionsData> m_condKeyState{this, "CondKeyState", "PixelDCSStateCondData", "Pixel FSM state"}; - SG::ReadCondHandleKey<PixelDCSConditionsData> m_condKeyStatus{this, "CondKeyStatus", "PixelDCSStatusCondData", "Pixel FSM status"}; - - const PixelDCSConditionsData* getCondDataHV() const; - const PixelDCSConditionsData* getCondDataTemp() const; - - const PixelDCSConditionsData* getCondDataState() const; - const PixelDCSConditionsData* getCondDataStatus() const; -}; - -#endif // PIXELSILICONCONDITIONStOOL_H diff --git a/InnerDetector/InDetConditions/PixelConditionsTools/src/components/PixelConditionsTools_entries.cxx b/InnerDetector/InDetConditions/PixelConditionsTools/src/components/PixelConditionsTools_entries.cxx index 3f6dfc62ac2d8eafeee433442e2e551a6aaff0a4..933143257e0e017f6b803dbc336857dce82551a0 100644 --- a/InnerDetector/InDetConditions/PixelConditionsTools/src/components/PixelConditionsTools_entries.cxx +++ b/InnerDetector/InDetConditions/PixelConditionsTools/src/components/PixelConditionsTools_entries.cxx @@ -2,16 +2,10 @@ #include "src/PixelDistortionsTool.h" #ifndef SIMULATIONBASE #include "src/PixelConditionsSummaryTool.h" -#include "src/PixelDCSConditionsTool.h" -// STSTST #include "src/PixelDeadMapConditionsTool.h" -// STSTST #include "src/PixelTDAQConditionsTool.h" #endif DECLARE_COMPONENT( PixelCalibDbTool ) DECLARE_COMPONENT( PixelDistortionsTool ) #ifndef SIMULATIONBASE DECLARE_COMPONENT( PixelConditionsSummaryTool ) -DECLARE_COMPONENT( PixelDCSConditionsTool ) -// STSTST DECLARE_COMPONENT( PixelDeadMapConditionsTool ) -// STSTST DECLARE_COMPONENT( PixelTDAQConditionsTool ) #endif diff --git a/InnerDetector/InDetConditions/SiLorentzAngleSvc/python/PixelLorentzAngleToolSetup.py b/InnerDetector/InDetConditions/SiLorentzAngleSvc/python/PixelLorentzAngleToolSetup.py index 24409985d422c162ed6cfcdc8d31d9eb77fad6cd..a025892b33974845177c33ec83f3473f66c03cd8 100644 --- a/InnerDetector/InDetConditions/SiLorentzAngleSvc/python/PixelLorentzAngleToolSetup.py +++ b/InnerDetector/InDetConditions/SiLorentzAngleSvc/python/PixelLorentzAngleToolSetup.py @@ -1,38 +1,62 @@ -# Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration class PixelLorentzAngleToolSetup: - "Class to simplify setup of PixelLorentzAngleTool" - def __init__(self): - from AthenaCommon.AppMgr import ToolSvc - if not hasattr(ToolSvc, "PixelDCSConditionsTool"): - from PixelConditionsTools.PixelDCSConditionsToolSetup import PixelDCSConditionsToolSetup - pixelDCSConditionsToolSetup = PixelDCSConditionsToolSetup() - pixelDCSConditionsToolSetup.setup() - - if not hasattr(ToolSvc, "PixelSiPropertiesTool"): - from SiPropertiesSvc.PixelSiPropertiesToolSetup import PixelSiPropertiesToolSetup - pixelSiPropertiesToolSetup = PixelSiPropertiesToolSetup() - pixelSiPropertiesToolSetup.setup() - - from AthenaCommon.AlgSequence import AthSequencer - condSeq = AthSequencer("AthCondSeq") - if not hasattr(condSeq, "PixelSiLorentzAngleCondAlg"): - from SiLorentzAngleSvc.SiLorentzAngleSvcConf import PixelSiLorentzAngleCondAlg - from AthenaCommon.AthenaCommonFlags import athenaCommonFlags - condSeq += PixelSiLorentzAngleCondAlg(name = "PixelSiLorentzAngleCondAlg", - PixelDCSConditionsTool = ToolSvc.PixelDCSConditionsTool, - SiPropertiesTool = ToolSvc.PixelSiPropertiesTool, - UseMagFieldSvc = True, - UseMagFieldDcs = (not athenaCommonFlags.isOnline())) - pixelSiLorentzAngleCondAlg = condSeq.PixelSiLorentzAngleCondAlg - - if not hasattr(ToolSvc, "PixelLorentzAngleTool"): - from SiLorentzAngleSvc.SiLorentzAngleSvcConf import SiLorentzAngleTool - ToolSvc += SiLorentzAngleTool(name="PixelLorentzAngleTool", DetectorName="Pixel", SiLorentzAngleCondData="PixelSiLorentzAngleCondData") - pixelLorentzAngleTool = ToolSvc.PixelLorentzAngleTool - # Pass the silicon conditions tool to the Lorentz angle tool - # Also make sure UseMagFieldTool is True as AtlasGeoModel sets this to False - # if loaded first. - pixelLorentzAngleTool.UseMagFieldSvc = True - self.PixelLorentzAngleTool = pixelLorentzAngleTool + "Class to simplify setup of PixelLorentzAngleTool" + def __init__(self): + hvFolder = "/PIXEL/DCS/HV" + tempFolder = "/PIXEL/DCS/TEMPERATURE" + dbInstance = "DCS_OFL" + + from AthenaCommon.AthenaCommonFlags import athenaCommonFlags + if athenaCommonFlags.isOnline(): + hvFolder = "/PIXEL/HLT/DCS/HV" + tempFolder = "/PIXEL/HLT/DCS/TEMPERATURE" + dbInstance = "PIXEL_ONL" + + from IOVDbSvc.CondDB import conddb + if not conddb.folderRequested(hvFolder): + conddb.addFolder(dbInstance, hvFolder, className="CondAttrListCollection") + if not conddb.folderRequested(tempFolder): + conddb.addFolder(dbInstance, tempFolder, className="CondAttrListCollection") + + from AthenaCommon.GlobalFlags import globalflags + from AthenaCommon.AlgSequence import AthSequencer + condSeq = AthSequencer("AthCondSeq") + + if not hasattr(condSeq,"PixelDCSCondHVAlg"): + from PixelConditionsAlgorithms.PixelConditionsAlgorithmsConf import PixelDCSCondHVAlg + condSeq += PixelDCSCondHVAlg(name="PixelDCSCondHVAlg", ReadKey=hvFolder, UseConditions=True) + + if not hasattr(condSeq,"PixelDCSCondTempAlg"): + from PixelConditionsAlgorithms.PixelConditionsAlgorithmsConf import PixelDCSCondTempAlg + condSeq += PixelDCSCondTempAlg(name="PixelDCSCondTempAlg", ReadKey=tempFolder, UseConditions=True) + + if not hasattr(condSeq, "PixelSiPropertiesCondAlg"): + from SiPropertiesSvc.SiPropertiesSvcConf import PixelSiPropertiesCondAlg + condSeq += PixelSiPropertiesCondAlg(name="PixelSiPropertiesCondAlg") + + from AthenaCommon.AppMgr import ToolSvc + if not hasattr(ToolSvc, "PixelSiPropertiesTool"): + from SiPropertiesSvc.SiPropertiesSvcConf import SiPropertiesTool + ToolSvc += SiPropertiesTool(name = "PixelSiPropertiesTool", + DetectorName = "Pixel", + ReadKey = "PixelSiliconPropertiesVector") + + if not hasattr(condSeq, "PixelSiLorentzAngleCondAlg"): + from SiLorentzAngleSvc.SiLorentzAngleSvcConf import PixelSiLorentzAngleCondAlg + condSeq += PixelSiLorentzAngleCondAlg(name = "PixelSiLorentzAngleCondAlg", + SiPropertiesTool = ToolSvc.PixelSiPropertiesTool, + UseMagFieldSvc = True, + UseMagFieldDcs = (not athenaCommonFlags.isOnline())) + pixelSiLorentzAngleCondAlg = condSeq.PixelSiLorentzAngleCondAlg + + if not hasattr(ToolSvc, "PixelLorentzAngleTool"): + from SiLorentzAngleSvc.SiLorentzAngleSvcConf import SiLorentzAngleTool + ToolSvc += SiLorentzAngleTool(name="PixelLorentzAngleTool", DetectorName="Pixel", SiLorentzAngleCondData="PixelSiLorentzAngleCondData") + pixelLorentzAngleTool = ToolSvc.PixelLorentzAngleTool + # Pass the silicon conditions tool to the Lorentz angle tool + # Also make sure UseMagFieldTool is True as AtlasGeoModel sets this to False + # if loaded first. + pixelLorentzAngleTool.UseMagFieldSvc = True + self.PixelLorentzAngleTool = pixelLorentzAngleTool diff --git a/InnerDetector/InDetConditions/SiLorentzAngleSvc/src/PixelSiLorentzAngleCondAlg.cxx b/InnerDetector/InDetConditions/SiLorentzAngleSvc/src/PixelSiLorentzAngleCondAlg.cxx index e4d988f4621044c42315ff588a5a8edd6ffa1280..8743c0c9f830ae371f44454590e6b04f4b8a6060 100644 --- a/InnerDetector/InDetConditions/SiLorentzAngleSvc/src/PixelSiLorentzAngleCondAlg.cxx +++ b/InnerDetector/InDetConditions/SiLorentzAngleSvc/src/PixelSiLorentzAngleCondAlg.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration */ #include "PixelSiLorentzAngleCondAlg.h" @@ -42,7 +42,6 @@ StatusCode PixelSiLorentzAngleCondAlg::initialize() { return StatusCode::FAILURE; } - ATH_CHECK(m_DCSConditionsTool.retrieve()); ATH_CHECK(m_siPropertiesTool.retrieve()); if (m_useMagFieldSvc) { @@ -75,8 +74,8 @@ PixelSiLorentzAngleCondAlg::execute() { EventIDRange rangeBField{eidStart, eidStop}; // Read Cond Handle (temperature) - SG::ReadCondHandle<PixelDCSConditionsData> readHandleTemp(m_readKeyTemp); - const PixelDCSConditionsData* readCdoTemp(*readHandleTemp); + SG::ReadCondHandle<PixelModuleData> readHandleTemp(m_readKeyTemp); + const PixelModuleData* readCdoTemp(*readHandleTemp); if (readCdoTemp==nullptr) { ATH_MSG_FATAL("Null pointer to the read conditions object"); return StatusCode::FAILURE; @@ -90,8 +89,8 @@ PixelSiLorentzAngleCondAlg::execute() { ATH_MSG_DEBUG("Input is " << readHandleTemp.fullKey() << " with the range of " << rangeTemp); // Read Cond Handle (HV) - SG::ReadCondHandle<PixelDCSConditionsData> readHandleHV(m_readKeyHV); - const PixelDCSConditionsData* readCdoHV(*readHandleHV); + SG::ReadCondHandle<PixelModuleData> readHandleHV(m_readKeyHV); + const PixelModuleData* readCdoHV(*readHandleHV); if (readCdoHV==nullptr) { ATH_MSG_FATAL("Null pointer to the read conditions object"); return StatusCode::FAILURE; @@ -153,9 +152,10 @@ PixelSiLorentzAngleCondAlg::execute() { for (PixelID::size_type hash=0; hash<wafer_hash_max; hash++) { const IdentifierHash elementHash = static_cast<IdentifierHash::value_type>(hash); - double temperature = m_DCSConditionsTool->temperature(elementHash)+273.15; - double deplVoltage = m_DCSConditionsTool->depletionVoltage(elementHash)*CLHEP::volt; - double biasVoltage = m_DCSConditionsTool->biasVoltage(elementHash)*CLHEP::volt; + double temperature = readCdoTemp->getTemperature(elementHash)+273.15; + double deplVoltage = 0.0*CLHEP::volt; + double biasVoltage = readCdoHV->getBiasVoltage(elementHash)*CLHEP::volt; + ATH_MSG_DEBUG("Pixel Hash = " << elementHash << " Temperature = " << temperature << " [deg K], BiasV = " << biasVoltage << " DeplV = " << deplVoltage); const InDetDD::SiDetectorElement* element = m_detManager->getDetectorElement(elementHash); diff --git a/InnerDetector/InDetConditions/SiLorentzAngleSvc/src/PixelSiLorentzAngleCondAlg.h b/InnerDetector/InDetConditions/SiLorentzAngleSvc/src/PixelSiLorentzAngleCondAlg.h index 8253c56259b85456d424fa2d00fc8454fb0ae16d..79c71168e7e7ce25ec867b5ef6bb99e281ffc26c 100644 --- a/InnerDetector/InDetConditions/SiLorentzAngleSvc/src/PixelSiLorentzAngleCondAlg.h +++ b/InnerDetector/InDetConditions/SiLorentzAngleSvc/src/PixelSiLorentzAngleCondAlg.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration */ #ifndef PIXELSILORENTZANGLECONDALG @@ -10,8 +10,7 @@ #include "StoreGate/ReadCondHandleKey.h" #include "StoreGate/WriteCondHandleKey.h" #include "AthenaPoolUtilities/CondAttrListCollection.h" -#include "PixelConditionsData/PixelDCSConditionsData.h" -#include "PixelConditionsTools/IPixelDCSConditionsTool.h" +#include "PixelConditionsData/PixelModuleData.h" #include "GaudiKernel/ICondSvc.h" #include "SiPropertiesSvc/ISiPropertiesTool.h" @@ -43,13 +42,11 @@ class PixelSiLorentzAngleCondAlg: public AthAlgorithm { ServiceHandle<ICondSvc> m_condSvc; ServiceHandle<MagField::IMagFieldSvc> m_magFieldSvc; - SG::ReadCondHandleKey<PixelDCSConditionsData> m_readKeyTemp{this, "ReadKeyeTemp", "PixelDCSTempCondData", "Key of input sensor temperature conditions folder"}; - SG::ReadCondHandleKey<PixelDCSConditionsData> m_readKeyHV {this, "ReadKeyHV", "PixelDCSHVCondData", "Key of input bias voltage conditions folder"}; - + SG::ReadCondHandleKey<PixelModuleData> m_readKeyTemp{this, "ReadKeyeTemp", "PixelDCSTempCondData", "Key of input sensor temperature conditions folder"}; + SG::ReadCondHandleKey<PixelModuleData> m_readKeyHV {this, "ReadKeyHV", "PixelDCSHVCondData", "Key of input bias voltage conditions folder"}; SG::ReadCondHandleKey<CondAttrListCollection> m_readKeyBFieldSensor{this, "ReadKeyBFieldSensor", "/EXT/DCS/MAGNETS/SENSORDATA", "Key of input B-field sensor"}; - SG::WriteCondHandleKey<SiLorentzAngleCondData> m_writeKey{this, "WriteKey", "PixelSiLorentzAngleCondData", "Key of output SiLorentzAngleCondData"}; - ToolHandle<IPixelDCSConditionsTool> m_DCSConditionsTool{this, "PixelDCSConditionsTool", "PixelDCSConditionsTool", "Tool to retrieve Pixel information"}; + SG::WriteCondHandleKey<SiLorentzAngleCondData> m_writeKey{this, "WriteKey", "PixelSiLorentzAngleCondData", "Key of output SiLorentzAngleCondData"}; ToolHandle<ISiPropertiesTool> m_siPropertiesTool{this, "SiPropertiesTool", "SiPropertiesTool", "Tool to retrieve SiProperties"}; diff --git a/InnerDetector/InDetConditions/SiPropertiesSvc/python/PixelSiPropertiesToolSetup.py b/InnerDetector/InDetConditions/SiPropertiesSvc/python/PixelSiPropertiesToolSetup.py index f979e6143335452aa151d5a1fd109aa28d4e4214..4d983c1121e578973a100ea4561d862f698117a3 100644 --- a/InnerDetector/InDetConditions/SiPropertiesSvc/python/PixelSiPropertiesToolSetup.py +++ b/InnerDetector/InDetConditions/SiPropertiesSvc/python/PixelSiPropertiesToolSetup.py @@ -1,55 +1,76 @@ -# Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration class PixelSiPropertiesToolSetup: - "Class to simplify setup of PixelSiPropertiesTool and required conditions algorithm" - - def __init__(self): - self.algName = "PixelSiPropertiesCondAlg" - self.alg = None - self.toolName = "PixelSiPropertiesTool" - self.tool = None - - def getAlgName(self): - return self.algName - - def setAlgName(self, algName): - self.algName = algName - - def getAlg(self): - return self.alg - - def getToolName(self): - return self.toolName - - def setToolName(self, toolName): - self.toolName = toolName - - def getTool(self): - return self.tool - - def setAlg(self): - from AthenaCommon.AppMgr import ToolSvc - if not hasattr(ToolSvc, "PixelDCSConditionsTool"): - from PixelConditionsTools.PixelDCSConditionsToolSetup import PixelDCSConditionsToolSetup - pixelDCSConditionsToolSetup = PixelDCSConditionsToolSetup() - pixelDCSConditionsToolSetup.setup() - - from AthenaCommon.AlgSequence import AthSequencer - condSeq = AthSequencer("AthCondSeq") - if not hasattr(condSeq, self.algName): - from SiPropertiesSvc.SiPropertiesSvcConf import PixelSiPropertiesCondAlg - condSeq += PixelSiPropertiesCondAlg(name = self.algName, PixelDCSConditionsTool=ToolSvc.PixelDCSConditionsTool) - self.alg = getattr(condSeq, self.algName) - - def setTool(self): - from AthenaCommon.AppMgr import ToolSvc - if not hasattr(ToolSvc, self.toolName): - from SiPropertiesSvc.SiPropertiesSvcConf import SiPropertiesTool - ToolSvc += SiPropertiesTool(name = self.toolName, - DetectorName = "Pixel", - ReadKey = "PixelSiliconPropertiesVector") - self.tool = getattr(ToolSvc, self.toolName) - - def setup(self): - self.setAlg() - self.setTool() + "Class to simplify setup of PixelSiPropertiesTool and required conditions algorithm" + + def __init__(self): + self.algName = "PixelSiPropertiesCondAlg" + self.alg = None + self.toolName = "PixelSiPropertiesTool" + self.tool = None + + def getAlgName(self): + return self.algName + + def setAlgName(self, algName): + self.algName = algName + + def getAlg(self): + return self.alg + + def getToolName(self): + return self.toolName + + def setToolName(self, toolName): + self.toolName = toolName + + def getTool(self): + return self.tool + + def setAlg(self): + hvFolder = "/PIXEL/DCS/HV" + tempFolder = "/PIXEL/DCS/TEMPERATURE" + dbInstance = "DCS_OFL" + + from AthenaCommon.AthenaCommonFlags import athenaCommonFlags + if athenaCommonFlags.isOnline(): + hvFolder = "/PIXEL/HLT/DCS/HV" + tempFolder = "/PIXEL/HLT/DCS/TEMPERATURE" + dbInstance = "PIXEL_ONL" + + from IOVDbSvc.CondDB import conddb + if not conddb.folderRequested(hvFolder): + conddb.addFolder(dbInstance, hvFolder, className="CondAttrListCollection") + if not conddb.folderRequested(tempFolder): + conddb.addFolder(dbInstance, tempFolder, className="CondAttrListCollection") + + from AthenaCommon.GlobalFlags import globalflags + from AthenaCommon.AlgSequence import AthSequencer + condSeq = AthSequencer("AthCondSeq") + + if not hasattr(condSeq,"PixelDCSCondHVAlg"): + from PixelConditionsAlgorithms.PixelConditionsAlgorithmsConf import PixelDCSCondHVAlg + condSeq += PixelDCSCondHVAlg(name="PixelDCSCondHVAlg", ReadKey=hvFolder, UseConditions=True) + + if not hasattr(condSeq,"PixelDCSCondTempAlg"): + from PixelConditionsAlgorithms.PixelConditionsAlgorithmsConf import PixelDCSCondTempAlg + condSeq += PixelDCSCondTempAlg(name="PixelDCSCondTempAlg", ReadKey=tempFolder, UseConditions=True) + + from AthenaCommon.AppMgr import ToolSvc + if not hasattr(condSeq, "PixelSiPropertiesCondAlg"): + from SiPropertiesSvc.SiPropertiesSvcConf import PixelSiPropertiesCondAlg + condSeq += PixelSiPropertiesCondAlg(name="PixelSiPropertiesCondAlg") + self.alg = getattr(condSeq, "PixelSiPropertiesCondAlg") + + def setTool(self): + from AthenaCommon.AppMgr import ToolSvc + if not hasattr(ToolSvc, "PixelSiPropertiesTool"): + from SiPropertiesSvc.SiPropertiesSvcConf import SiPropertiesTool + ToolSvc += SiPropertiesTool(name = "PixelSiPropertiesTool", + DetectorName = "Pixel", + ReadKey = "PixelSiliconPropertiesVector") + self.tool = getattr(ToolSvc, "PixelSiPropertiesTool") + + def setup(self): + self.setAlg() + self.setTool() diff --git a/InnerDetector/InDetConditions/SiPropertiesSvc/src/PixelSiPropertiesCondAlg.cxx b/InnerDetector/InDetConditions/SiPropertiesSvc/src/PixelSiPropertiesCondAlg.cxx index a2f05a7f7301cc4a3cbb5f5219084756d9978016..1eddd274b86463c1c1b32bc6017829fabd5d765c 100644 --- a/InnerDetector/InDetConditions/SiPropertiesSvc/src/PixelSiPropertiesCondAlg.cxx +++ b/InnerDetector/InDetConditions/SiPropertiesSvc/src/PixelSiPropertiesCondAlg.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration */ #include "PixelSiPropertiesCondAlg.h" @@ -33,8 +33,6 @@ StatusCode PixelSiPropertiesCondAlg::initialize() { return StatusCode::FAILURE; } - ATH_CHECK(m_DCSConditionsTool.retrieve()); - return StatusCode::SUCCESS; } @@ -48,8 +46,8 @@ StatusCode PixelSiPropertiesCondAlg::execute() { } // Read Cond Handle (temperature) - SG::ReadCondHandle<PixelDCSConditionsData> readHandleTemp(m_readKeyTemp); - const PixelDCSConditionsData* readCdoTemp(*readHandleTemp); + SG::ReadCondHandle<PixelModuleData> readHandleTemp(m_readKeyTemp); + const PixelModuleData* readCdoTemp(*readHandleTemp); if (readCdoTemp==nullptr) { ATH_MSG_FATAL("Null pointer to the read conditions object"); return StatusCode::FAILURE; @@ -62,8 +60,8 @@ StatusCode PixelSiPropertiesCondAlg::execute() { ATH_MSG_INFO("Input is " << readHandleTemp.fullKey() << " with the range of " << rangeTemp); // Read Cond Handle (HV) - SG::ReadCondHandle<PixelDCSConditionsData> readHandleHV(m_readKeyHV); - const PixelDCSConditionsData* readCdoHV(*readHandleHV); + SG::ReadCondHandle<PixelModuleData> readHandleHV(m_readKeyHV); + const PixelModuleData* readCdoHV(*readHandleHV); if (readCdoHV==nullptr) { ATH_MSG_FATAL("Null pointer to the read conditions object"); return StatusCode::FAILURE; @@ -89,9 +87,9 @@ StatusCode PixelSiPropertiesCondAlg::execute() { for (PixelID::size_type hash=0; hash<wafer_hash_max; hash++) { const IdentifierHash elementHash = static_cast<IdentifierHash::value_type>(hash); - double temperature = m_DCSConditionsTool->temperature(elementHash)+273.15; - double deplVoltage = m_DCSConditionsTool->depletionVoltage(elementHash)*CLHEP::volt; - double biasVoltage = m_DCSConditionsTool->biasVoltage(elementHash)*CLHEP::volt; + double temperature = readCdoTemp->getTemperature(elementHash)+273.15; + double deplVoltage = 0.0*CLHEP::volt; + double biasVoltage = readCdoHV->getBiasVoltage(elementHash)*CLHEP::volt; const InDetDD::SiDetectorElement* element = m_detManager->getDetectorElement(elementHash); double depletionDepth = element->thickness(); diff --git a/InnerDetector/InDetConditions/SiPropertiesSvc/src/PixelSiPropertiesCondAlg.h b/InnerDetector/InDetConditions/SiPropertiesSvc/src/PixelSiPropertiesCondAlg.h index f5e5a8c561b080634fc92a8ca09d87117de167dd..3e0be4071512a7c3535b252c8cf981cf252b4efb 100644 --- a/InnerDetector/InDetConditions/SiPropertiesSvc/src/PixelSiPropertiesCondAlg.h +++ b/InnerDetector/InDetConditions/SiPropertiesSvc/src/PixelSiPropertiesCondAlg.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration */ #ifndef PIXELSIPROPERTIESCONDALG @@ -9,8 +9,7 @@ #include "StoreGate/ReadCondHandleKey.h" #include "StoreGate/WriteCondHandleKey.h" -#include "PixelConditionsData/PixelDCSConditionsData.h" -#include "PixelConditionsTools/IPixelDCSConditionsTool.h" +#include "PixelConditionsData/PixelModuleData.h" #include "GaudiKernel/ICondSvc.h" #include "SiPropertiesSvc/SiliconPropertiesVector.h" @@ -30,11 +29,11 @@ class PixelSiPropertiesCondAlg : public AthAlgorithm { const InDetDD::PixelDetectorManager * m_detManager; ServiceHandle<ICondSvc> m_condSvc; - SG::ReadCondHandleKey<PixelDCSConditionsData> m_readKeyTemp {this, "ReadKeyeTemp", "PixelDCSTempCondData", "Key of input sensor temperature conditions folder"}; - SG::ReadCondHandleKey<PixelDCSConditionsData> m_readKeyHV {this, "ReadKeyHV", "PixelDCSHVCondData", "Key of input bias voltage conditions folder"}; + + SG::ReadCondHandleKey<PixelModuleData> m_readKeyTemp {this, "ReadKeyeTemp", "PixelDCSTempCondData", "Key of input sensor temperature conditions folder"}; + SG::ReadCondHandleKey<PixelModuleData> m_readKeyHV {this, "ReadKeyHV", "PixelDCSHVCondData", "Key of input bias voltage conditions folder"}; SG::WriteCondHandleKey<InDet::SiliconPropertiesVector> m_writeKey{this, "WriteKey", "PixelSiliconPropertiesVector", "Key of output silicon properties conditions folder"}; - ToolHandle<IPixelDCSConditionsTool> m_DCSConditionsTool{this, "PixelDCSConditionsTool", "PixelDCSConditionsTool", "Tool to retrieve Pixel information"}; }; #endif // PIXELSIPROPERTIESCONDALG diff --git a/InnerDetector/InDetDigitization/FastSiDigitization/python/FastSiDigitizationConfig.py b/InnerDetector/InDetDigitization/FastSiDigitization/python/FastSiDigitizationConfig.py index d2e52954cc94bc8f2417b775fbe6e5385a2a2130..daab02627aff9639f3234485401ef5264766d08a 100644 --- a/InnerDetector/InDetDigitization/FastSiDigitization/python/FastSiDigitizationConfig.py +++ b/InnerDetector/InDetDigitization/FastSiDigitization/python/FastSiDigitizationConfig.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration # The earliest bunch crossing time for which interactions will be sent # to the Fast Pixel Digitization code. @@ -65,11 +65,6 @@ def FastClusterMakerTool(name="FastClusterMakerTool", **kwargs): def commonPixelFastDigitizationConfig(name,**kwargs): - # Setup the DCS folders and tool used in the sctSiliconConditionsTool - from PixelConditionsTools.PixelDCSConditionsToolSetup import PixelDCSConditionsToolSetup - pixelDCSConditionsToolSetup = PixelDCSConditionsToolSetup() - pixelDCSConditionsToolSetup.setup() - kwargs.setdefault("ClusterMaker", "FastClusterMakerTool") # Import Digitization job properties diff --git a/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/CMakeLists.txt b/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/CMakeLists.txt index 6a7636385a56fc6261c0617a834b274ceff2bb66..11419eab58419eed332597de7c392551c40b44e4 100644 --- a/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/CMakeLists.txt +++ b/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/CMakeLists.txt @@ -15,6 +15,7 @@ atlas_depends_on_subdirs( PUBLIC Event/xAOD/xAODTracking InnerDetector/InDetConditions/PixelConditionsServices InnerDetector/InDetConditions/PixelConditionsTools + InnerDetector/InDetConditions/PixelConditionsData InnerDetector/InDetConditions/InDetCondTools InnerDetector/InDetConditions/TRT_ConditionsServices InnerDetector/InDetDetDescr/InDetIdentifier @@ -37,7 +38,7 @@ atlas_add_component( InDetPrepRawDataToxAOD src/*.cxx src/components/*.cxx INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} ${HEPMC_INCLUDE_DIRS} - LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} ${HEPMC_LIBRARIES} GaudiKernel AthenaBaseComps StoreGateLib SGtests Identifier xAODTracking TRT_ConditionsServicesLib InDetIdentifier InDetReadoutGeometry InDetRawData InDetSimData InDetPrepRawData InDetSimEvent TrkSurfaces TrkTruthData ) + LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} ${HEPMC_LIBRARIES} GaudiKernel AthenaBaseComps StoreGateLib SGtests Identifier xAODTracking TRT_ConditionsServicesLib InDetIdentifier InDetReadoutGeometry InDetRawData InDetSimData InDetPrepRawData PixelConditionsData InDetSimEvent TrkSurfaces TrkTruthData ) # Install files from the package: atlas_install_python_modules( python/*.py ) diff --git a/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/share/InDetDxAOD.py b/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/share/InDetDxAOD.py index 481e498608eaae86ef7a5e20dbf0a789c1812723..b757c825632442e6f342dd82d02828f45ba78859 100644 --- a/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/share/InDetDxAOD.py +++ b/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/share/InDetDxAOD.py @@ -405,9 +405,18 @@ if dumpSctInfo: print xAOD_SCT_PrepDataToxAOD.properties() if dumpPixInfo: - from PixelConditionsTools.PixelDCSConditionsToolSetup import PixelDCSConditionsToolSetup - pixelDCSConditionsToolSetup = PixelDCSConditionsToolSetup() - pixelDCSConditionsToolSetup.setup() + from IOVDbSvc.CondDB import conddb + if not conddb.folderRequested("/PIXEL/DCS/FSMSTATE"): + conddb.addFolder("DCS_OFL", "/PIXEL/DCS/FSMSTATE", className="CondAttrListCollection") + if not conddb.folderRequested("/PIXEL/DCS/FSMSTATUS"): + conddb.addFolder("DCS_OFL", "/PIXEL/DCS/FSMSTATUS", className="CondAttrListCollection") + + from AthenaCommon.AlgSequence import AthSequencer + condSeq = AthSequencer("AthCondSeq") + if not hasattr(condSeq, "PixelDCSCondStateAlg"): + from PixelConditionsAlgorithms.PixelConditionsAlgorithmsConf import PixelDCSCondStateAlg + condSeq += PixelDCSCondStateAlg(name="PixelDCSCondStateAlg") + from AthenaCommon.AppMgr import ToolSvc if not hasattr(ToolSvc, "PixelLorentzAngleTool"): from SiLorentzAngleSvc.PixelLorentzAngleToolSetup import PixelLorentzAngleToolSetup @@ -415,7 +424,6 @@ if dumpPixInfo: from InDetPrepRawDataToxAOD.InDetPrepRawDataToxAODConf import PixelPrepDataToxAOD xAOD_PixelPrepDataToxAOD = PixelPrepDataToxAOD( name = "xAOD_PixelPrepDataToxAOD") - xAOD_PixelPrepDataToxAOD.PixelDCSConditionsTool = pixelDCSConditionsToolSetup.getTool() xAOD_PixelPrepDataToxAOD.LorentzAngleTool = ToolSvc.PixelLorentzAngleTool xAOD_PixelPrepDataToxAOD.OutputLevel = INFO xAOD_PixelPrepDataToxAOD.UseTruthInfo = dumpTruthInfo diff --git a/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/PixelPrepDataToxAOD.cxx b/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/PixelPrepDataToxAOD.cxx index 259e4e5b4ec262dd20ae5472de10dadca717c724..f643b6928825aa4903200564f788ff9f71ea991f 100644 --- a/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/PixelPrepDataToxAOD.cxx +++ b/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/PixelPrepDataToxAOD.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration */ /////////////////////////////////////////////////////////////////// @@ -88,7 +88,10 @@ StatusCode PixelPrepDataToxAOD::initialize() CHECK(m_calibSvc.retrieve()); - ATH_CHECK(m_DCSConditionsTool.retrieve()); + ATH_CHECK(m_condDCSStateKey.initialize()); + ATH_CHECK(m_condDCSStatusKey.initialize()); + ATH_CHECK(m_readKeyTemp.initialize()); + ATH_CHECK(m_readKeyHV.initialize()); CHECK(m_pixelBSErrorsSvc.retrieve()); @@ -224,10 +227,13 @@ StatusCode PixelPrepDataToxAOD::execute() if(m_writeRDOinformation) { IdentifierHash moduleHash = clusterCollection->identifyHash(); AUXDATA(xprd,int,isBSError) = (int)m_pixelBSErrorsSvc->isActive(moduleHash); - AUXDATA(xprd,std::string,DCSState) = (std::string)m_DCSConditionsTool->PixelFSMState(moduleHash); - AUXDATA(xprd,float,BiasVoltage) = (float)m_DCSConditionsTool->biasVoltage(moduleHash); - AUXDATA(xprd,float,Temperature) = (float)m_DCSConditionsTool->temperature(moduleHash); - AUXDATA(xprd,float,DepletionVoltage) = (float)m_DCSConditionsTool->depletionVoltage(moduleHash); + AUXDATA(xprd,int,DCSState) = SG::ReadCondHandle<PixelModuleData>(m_condDCSStateKey)->getModuleStatus(moduleHash); + + float deplVoltage = 0.0; + AUXDATA(xprd,float,BiasVoltage) = SG::ReadCondHandle<PixelModuleData>(m_readKeyHV)->getBiasVoltage(moduleHash); + AUXDATA(xprd,float,Temperature) = SG::ReadCondHandle<PixelModuleData>(m_readKeyTemp)->getTemperature(moduleHash); + AUXDATA(xprd,float,DepletionVoltage) = deplVoltage; + AUXDATA(xprd,float,LorentzShift) = (float)m_lorentzAngleTool->getLorentzShift(moduleHash); addRdoInformation(xprd, prd); diff --git a/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/PixelPrepDataToxAOD.h b/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/PixelPrepDataToxAOD.h index 70bf8f9f1886a3c884a13729ce6c74b4cb573c5b..6cb62f5e76483040f60589a62a4c81f090b75913 100644 --- a/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/PixelPrepDataToxAOD.h +++ b/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/PixelPrepDataToxAOD.h @@ -20,7 +20,7 @@ #include "xAODTracking/TrackMeasurementValidation.h" #include "xAODTracking/TrackMeasurementValidationContainer.h" -#include "PixelConditionsTools/IPixelDCSConditionsTool.h" +#include "PixelConditionsData/PixelModuleData.h" #include "InDetCondTools/ISiLorentzAngleTool.h" #include "PixelConditionsServices/IPixelByteStreamErrorsSvc.h" #include "PixelConditionsServices/IPixelCalibSvc.h" @@ -103,7 +103,13 @@ private: bool m_useSiHitsGeometryMatching; ServiceHandle<IPixelCalibSvc> m_calibSvc; - ToolHandle<IPixelDCSConditionsTool> m_DCSConditionsTool{this, "PixelDCSConditionsTool", "PixelDCSConditionsTool", "Tool to retrieve Pixel information"}; + + SG::ReadCondHandleKey<PixelModuleData> m_condDCSStateKey{this, "PixelDCSStateCondData", "PixelDCSStateCondData", "Pixel FSM state key"}; + SG::ReadCondHandleKey<PixelModuleData> m_condDCSStatusKey{this, "PixelDCSStatusCondData", "PixelDCSStatusCondData", "Pixel FSM status key"}; + + SG::ReadCondHandleKey<PixelModuleData> m_readKeyTemp{this, "ReadKeyeTemp", "PixelDCSTempCondData", "Key of input sensor temperature conditions folder"}; + SG::ReadCondHandleKey<PixelModuleData> m_readKeyHV {this, "ReadKeyHV", "PixelDCSHVCondData", "Key of input bias voltage conditions folder"}; + ServiceHandle<IPixelByteStreamErrorsSvc> m_pixelBSErrorsSvc; ToolHandle<ISiLorentzAngleTool> m_lorentzAngleTool{this, "LorentzAngleTool", "SiLorentzAngleTool", "Tool to retreive Lorentz angle"}; diff --git a/InnerDetector/InDetExample/InDetDetDescrExample/share/ReadSiDetectorElements_jobOptions.py b/InnerDetector/InDetExample/InDetDetDescrExample/share/ReadSiDetectorElements_jobOptions.py index 01861c2a3d13e0375fefebb4800704f21372bb54..a390e41f293b70f92f7c4dec323a25f02da755b0 100755 --- a/InnerDetector/InDetExample/InDetDetDescrExample/share/ReadSiDetectorElements_jobOptions.py +++ b/InnerDetector/InDetExample/InDetDetDescrExample/share/ReadSiDetectorElements_jobOptions.py @@ -60,10 +60,6 @@ from AthenaCommon.AppMgr import ServiceMgr # Pixel # # Load DCS service -from PixelConditionsTools.PixelDCSConditionsToolSetup import PixelDCSConditionsToolSetup -pixelDCSConditionsToolSetup = PixelDCSConditionsToolSetup() -pixelDCSConditionsToolSetup.setup() -pixelDCSConditionsTool = pixelDCSConditionsToolSetup.getTool() from SiPropertiesSvc.PixelSiPropertiesToolSetup import PixelSiPropertiesToolSetup pixelSiPropertiesToolSetup = PixelSiPropertiesToolSetup() pixelSiPropertiesToolSetup.setup() diff --git a/InnerDetector/InDetExample/InDetTrigRecExample/python/InDetTrigConfigConditions.py b/InnerDetector/InDetExample/InDetTrigRecExample/python/InDetTrigConfigConditions.py index 56539587d4fa1da5ed4ffbce398bc2b8269b8271..660226db840cb39bbafc4172c5ee8f68b5b765c0 100644 --- a/InnerDetector/InDetExample/InDetTrigRecExample/python/InDetTrigConfigConditions.py +++ b/InnerDetector/InDetExample/InDetTrigRecExample/python/InDetTrigConfigConditions.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration class PixelConditionsServicesSetup: """ @@ -90,13 +90,7 @@ class PixelConditionsServicesSetup: if not hasattr(condSeq, 'PixelDCSCondTempAlg'): from PixelConditionsAlgorithms.PixelConditionsAlgorithmsConf import PixelDCSCondTempAlg - condSeq += PixelDCSCondTempAlg(name="PixelDCSCondTempAlg", ReadKey=PixelTempFolder) - - - from PixelConditionsTools.PixelConditionsToolsConf import PixelDCSConditionsTool - TrigPixelDCSConditionsTool = PixelDCSConditionsTool(name="PixelDCSConditionsTool", UseConditions=True, IsDATA=self.isData) - - ToolSvc += TrigPixelDCSConditionsTool + condSeq += PixelDCSCondTempAlg(name="PixelDCSCondTempAlg", ReadKey=PixelTempFolder, UseConditions=True) ######################### # TDAQ Conditions Setup # @@ -133,7 +127,6 @@ class PixelConditionsServicesSetup: from PixelConditionsTools.PixelConditionsToolsConf import PixelConditionsSummaryTool TrigPixelConditionsSummaryTool = PixelConditionsSummaryTool(name=self.instanceName('PixelConditionsSummaryTool'), - PixelDCSConditionsTool=TrigPixelDCSConditionsTool, UseDCSState=self.useDCS, UseByteStream=self.useBS, UseTDAQ=self.useTDAQ, @@ -189,7 +182,7 @@ class PixelConditionsServicesSetup: ####################### if not hasattr(condSeq, 'PixelSiPropertiesCondAlg'): from SiPropertiesSvc.SiPropertiesSvcConf import PixelSiPropertiesCondAlg - condSeq += PixelSiPropertiesCondAlg(name="PixelSiPropertiesCondAlg", PixelDCSConditionsTool=TrigPixelDCSConditionsTool) + condSeq += PixelSiPropertiesCondAlg(name="PixelSiPropertiesCondAlg") from SiPropertiesSvc.SiPropertiesSvcConf import SiPropertiesTool TrigSiPropertiesTool = SiPropertiesTool(name="PixelSiPropertiesTool", DetectorName="Pixel", ReadKey="PixelSiliconPropertiesVector") @@ -199,7 +192,6 @@ class PixelConditionsServicesSetup: if not hasattr(condSeq, 'PixelSiLorentzAngleCondAlg'): from SiLorentzAngleSvc.SiLorentzAngleSvcConf import PixelSiLorentzAngleCondAlg condSeq += PixelSiLorentzAngleCondAlg(name="PixelSiLorentzAngleCondAlg", - PixelDCSConditionsTool=TrigPixelDCSConditionsTool, SiPropertiesTool=TrigSiPropertiesTool, UseMagFieldSvc = True, UseMagFieldDcs = (not athenaCommonFlags.isOnline())) diff --git a/Trigger/TrigValidation/TrigUpgradeTest/python/InDetConfig.py b/Trigger/TrigValidation/TrigUpgradeTest/python/InDetConfig.py index 3311aff346edc5ea826d0866cbd566d0ec12bdb1..1e3a220a165228dfe7b2bb9c4a31c194ca261d45 100644 --- a/Trigger/TrigValidation/TrigUpgradeTest/python/InDetConfig.py +++ b/Trigger/TrigValidation/TrigUpgradeTest/python/InDetConfig.py @@ -1,5 +1,5 @@ # -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration # from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator @@ -144,10 +144,6 @@ def TrigInDetCondConfig( flags ): PixelTDAQInstance = "TDAQ_ONL" acc.merge(addFolders(flags, PixelTDAQFolder, PixelTDAQInstance, className="CondAttrListCollection")) - from PixelConditionsTools.PixelConditionsToolsConf import PixelDCSConditionsTool - TrigPixelDCSConditionsTool = PixelDCSConditionsTool(name="PixelDCSConditionsTool", UseConditions=True, IsDATA=True) - acc.addPublicTool(TrigPixelDCSConditionsTool) - PixelHVFolder = "/PIXEL/DCS/HV" PixelTempFolder = "/PIXEL/DCS/TEMPERATURE" PixelDBInstance = "DCS_OFL" @@ -161,17 +157,20 @@ def TrigInDetCondConfig( flags ): from PixelConditionsAlgorithms.PixelConditionsAlgorithmsConf import PixelDCSCondTempAlg acc.addCondAlgo(PixelDCSCondTempAlg(name="PixelDCSCondTempAlg", ReadKey=PixelTempFolder)) + from PixelConditionsAlgorithms.PixelConditionsAlgorithmsConf import PixelTDAQCondAlg + acc.addCondAlgo(PixelTDAQCondAlg(name="PixelTDAQCondAlg", ReadKey=PixelTDAQFolder)) - from PixelConditionsTools.PixelConditionsToolsConf import PixelDCSConditionsTool - TrigPixelDCSConditionsTool = PixelDCSConditionsTool(name="PixelDCSConditionsTool", UseConditions=True, IsDATA=True) + PixelDeadMapFolder = "/PIXEL/PixMapOverlay" + PixelDeadMapInstance = "PIXEL_OFL" - acc.addPublicTool(TrigPixelDCSConditionsTool) + acc.merge(addFolders(flags, PixelTempFolder, PixelDBInstance, className="CondAttrListCollection")) + acc.merge(addFolders(flags, PixelDeadMapFolder, PixelDeadMapInstance, className="CondAttrListCollection")) - from PixelConditionsAlgorithms.PixelConditionsAlgorithmsConf import PixelTDAQCondAlg - acc.addCondAlgo(PixelTDAQCondAlg(name="PixelTDAQCondAlg", ReadKey=PixelTDAQFolder)) + from PixelConditionsAlgorithms.PixelConditionsAlgorithmsConf import PixelConfigCondAlg + acc.addCondAlgo(PixelConfigCondAlg(name="PixelConfigCondAlg", UseDeadMap=False, ReadDeadMapKey=PixelDeadMapFolder)) from SiPropertiesSvc.SiPropertiesSvcConf import PixelSiPropertiesCondAlg - acc.addCondAlgo(PixelSiPropertiesCondAlg(name="PixelSiPropertiesCondAlg", PixelDCSConditionsTool=TrigPixelDCSConditionsTool)) + acc.addCondAlgo(PixelSiPropertiesCondAlg(name="PixelSiPropertiesCondAlg")) from SiPropertiesSvc.SiPropertiesSvcConf import SiPropertiesTool TrigSiPropertiesTool = SiPropertiesTool(name="PixelSiPropertiesTool", DetectorName="Pixel", ReadKey="PixelSiliconPropertiesVector") @@ -180,7 +179,6 @@ def TrigInDetCondConfig( flags ): from SiLorentzAngleSvc.SiLorentzAngleSvcConf import PixelSiLorentzAngleCondAlg acc.addCondAlgo(PixelSiLorentzAngleCondAlg(name="PixelSiLorentzAngleCondAlg", - PixelDCSConditionsTool=TrigPixelDCSConditionsTool, SiPropertiesTool=TrigSiPropertiesTool, UseMagFieldSvc = True, UseMagFieldDcs = False))