diff --git a/LArCalorimeter/LArCalibTools/LArCalibTools/LArCond2NtupleBase.h b/LArCalorimeter/LArCalibTools/LArCalibTools/LArCond2NtupleBase.h index fc8cff6d5a1fa9d1068a9c71bd1fb00161cf5484..3bb442fb849ece6f223646b80d9c74f6b352bab4 100644 --- a/LArCalorimeter/LArCalibTools/LArCalibTools/LArCond2NtupleBase.h +++ b/LArCalorimeter/LArCalibTools/LArCalibTools/LArCond2NtupleBase.h @@ -78,8 +78,11 @@ class LArCond2NtupleBase : public AthAlgorithm { ToolHandle<ILArFEBTempTool> m_FEBTempTool; SG::ReadCondHandleKey<LArOnOffIdMapping> m_cablingKey{this,"CablingKey","LArOnOffIdMap","SG Key of LArOnOffIdMapping object"}; + SG::ReadCondHandleKey<LArOnOffIdMapping> m_cablingSCKey{this,"CablingSCKey","LArOnOffIdMapSC","SG Key of LArOnOffIdMapping object"}; + SG::ReadCondHandleKey<LArBadChannelCont> m_BCKey{this, "BadChanKey", "LArBadChannel", "SG bad channels key"}; SG::ReadCondHandleKey<LArCalibLineMapping> m_calibMapKey{this,"CalibMapKey","LArCalibLineMap","SG Key of calib line mapping object"}; + SG::ReadCondHandleKey<LArCalibLineMapping> m_calibMapSCKey{this,"CalibMapSCKey","LArCalibIdMapSC","SG Key of calib line mapping object"}; bool m_isSC; bool m_isFlat; diff --git a/LArCalorimeter/LArCalibTools/LArCalibTools/LArDigits2Ntuple.h b/LArCalorimeter/LArCalibTools/LArCalibTools/LArDigits2Ntuple.h index 92c32658bcc8b17fa5ce4780f34a05762efd9815..365f6c36717a307365ca71a7f3902c9a95ff4bd2 100644 --- a/LArCalorimeter/LArCalibTools/LArCalibTools/LArDigits2Ntuple.h +++ b/LArCalorimeter/LArCalibTools/LArCalibTools/LArDigits2Ntuple.h @@ -8,6 +8,7 @@ #include "LArCalibTools/LArCond2NtupleBase.h" #include "xAODEventInfo/EventInfo.h" #include "StoreGate/ReadCondHandleKey.h" +#include "LArRawEvent/LArFebHeaderContainer.h" class LArDigits2Ntuple : public LArCond2NtupleBase { @@ -15,27 +16,51 @@ class LArDigits2Ntuple : public LArCond2NtupleBase LArDigits2Ntuple(const std::string & name, ISvcLocator * pSvcLocator); ~LArDigits2Ntuple(); - //standard algorithm methods + // Standard algorithm methods virtual StatusCode initialize(); virtual StatusCode execute(); private: - std::string m_contKey; - unsigned int m_Nsamples; int m_ipass; long m_event; std::vector<unsigned int> m_FTlist; + std::vector<std::string> m_contKeys; + NTuple::Item<long> m_ntNsamples; NTuple::Item<short> m_gain; - NTuple::Item<long> m_IEvent; + NTuple::Item<unsigned long long> m_IEvent; NTuple::Array<short> m_samples; - NTuple::Item<long> m_bcid; + NTuple::Item<short> m_bcid; + NTuple::Item<short> m_latomeChannel; + + // From LATOME header + NTuple::Item<uint16_t> m_bcidLATOMEHEAD; + NTuple::Item<uint32_t> m_latomeidLATOMEHEAD; + NTuple::Item<uint32_t> m_l1idLATOMEHEAD; + // DigitContainer + NTuple::Array<unsigned short> m_bcidVec; + NTuple::Item<uint32_t> m_latomeSourceId; + NTuple::Array<short> m_samples_ADC_BAS; + NTuple::Array<unsigned short> m_bcidVec_ADC_BAS; + NTuple::Array<int> m_energyVec_ET; + NTuple::Array<unsigned short> m_bcidVec_ET; + NTuple::Array<bool> m_saturVec_ET; + + NTuple::Array<int> m_energyVec_ET_ID; + NTuple::Array<unsigned short> m_bcidVec_ET_ID; + NTuple::Array<bool> m_saturVec_ET_ID; + + bool m_isSC; bool m_fillBCID; + int m_fillLatomeSourceID; + bool m_overwriteEventNumber; + SG::ReadHandleKey<xAOD::EventInfo> m_evtInfoKey { this, "EventInfoKey", "EventInfo", "SG for EventInfo Key" }; + SG::ReadHandleKey<LArFebHeaderContainer> m_LArFebHeaderContainerKey { this, "LArFebHeaderKey", "LArFebHeader" }; }; diff --git a/LArCalorimeter/LArCalibTools/share/LArDigits2Ntuple_jobOptions.py b/LArCalorimeter/LArCalibTools/share/LArDigits2Ntuple_jobOptions.py index f970419da63695f8020366d57d5bfb45c65cf5a3..0df7787c0572bc99204eb354c6748b748f3d1fad 100755 --- a/LArCalorimeter/LArCalibTools/share/LArDigits2Ntuple_jobOptions.py +++ b/LArCalorimeter/LArCalibTools/share/LArDigits2Ntuple_jobOptions.py @@ -1,4 +1,4 @@ -import commands +import os if not 'SubDet' in dir(): @@ -17,7 +17,13 @@ if not 'OutputRootFileName' in dir(): OutputRootFileName = BaseFileName+".root" if not 'OutputDir' in dir(): - OutputDir = commands.getoutput("pwd") + OutputDir = os.getcwd() + +if not 'SCDecodeAllContainers' in dir(): + SCDecodeAllContainers=False + +if not 'SCProtectSourceId' in dir(): + SCProtectSourceId=False if not 'FilePrefix' in dir(): if (int(RunNumberList[0]))<99800 : @@ -27,6 +33,16 @@ if not 'FilePrefix' in dir(): if not 'InputDir' in dir(): InputDir = "/castor/cern.ch/grid/atlas/DAQ/lar/ElecCalib/2014/"+RunNumberList[0] + +#if not 'FillSCDataBCID' in dir(): +# FillSCDataBCID=-1 +if not 'FillLatomeSourceID' in dir(): + FillLatomeSourceID=-1 +if not 'OverwriteEventNumber' in dir(): + OverwriteEventNumber=False + +if not 'BSConverter_Add_BCID_LATOMEID' in dir(): + BSConverter_Add_BCID_LATOMEID=False if not 'FullFileName' in dir(): if not 'Trigger' in dir(): @@ -99,35 +115,57 @@ if SuperCells: LArCalibIdMappingSC() - svcMgr.IOVDbSvc.GlobalTag=LArCalib_Flags.globalFlagDB svcMgr.IOVDbSvc.DBInstance="" -from LArBadChannelTool.LArBadChannelAccess import LArBadChannelAccess - -if 'InputDBConnectionBadChannel' not in dir(): - InputDBConnectionBadChannel = "<db>COOLONL_LAR/CONDBR2</db>" +if 'BadChannelsFolder' not in dir(): BadChannelsFolder="/LAR/BadChannels/BadChannels" - BadChannelsTagSpec = LArCalibFolderTag (BadChannelsFolder,"-RUN2-UPD1-00") - LArBadChannelAccess(dbString=BadChannelsFolder+InputDBConnectionBadChannel+"<tag>"+BadChannelsTagSpec+"</tag>") -else: - BadChannelsFolder="/LAR/BadChannelsOfl/BadChannels" - #def DBConnectionFile(sqlitefile): - # return "sqlite://;schema="+sqlitefile+";dbname=CONDBR2" - #InputDBConnectionBadChannel = DBConnectionFile(InputDBConnectionBadChannel) - #BadChannelsTagSpec = LArCalibFolderTag (BadChannelsFolder,"") - LArBadChannelAccess(dbString=BadChannelsFolder+"<dbConnection>"+InputDBConnectionBadChannel+"</dbConnection>") +if 'MissingFEBsFolder' not in dir(): + MissingFEBsFolder="/LAR/BadChannels/MissingFEBs" +if not 'ReadBadChannelFromCOOL' in dir(): + ReadBadChannelFromCOOL = True -if not SuperCells: - from LArBadChannelTool.LArBadFebAccess import LArBadFebAccess - MissingFEBsFolder="/LAR/BadChannels/MissingFEBs" - MissingFEBsTagSpec = LArCalibFolderTag (MissingFEBsFolder,"-RUN2-UPD1-01") - LArBadFebAccess(dbString=MissingFEBsFolder+InputDBConnectionBadChannel+"<tag>"+MissingFEBsTagSpec+"</tag>") +if ( ReadBadChannelFromCOOL ): + if 'InputBadChannelSQLiteFile' in dir(): + InputDBConnectionBadChannel = DBConnectionFile(InputBadChannelSQLiteFile) + else: + if 'InputDBConnectionBadChannel' not in dir(): + InputDBConnectionBadChannel = "COOLOFL_LAR/" + conddb.dbname + +if 'BadChannelsLArCalibFolderTag' in dir() : + BadChannelsTagSpec = LArCalibFolderTag (BadChannelsFolder,BadChannelsLArCalibFolderTag) + conddb.addFolder("",BadChannelsFolder+"<tag>"+BadChannelsTagSpec+"</tag>"+"<dbConnection>"+InputDBConnectionBadChannel+"</dbConnection>", + className="CondAttrListCollection") +else : + conddb.addFolder("",BadChannelsFolder+"<dbConnection>"+InputDBConnectionBadChannel+"</dbConnection>",className="CondAttrListCollection") + + +if 'MissingFEBsLArCalibFolderTag' in dir() : + MissingFEBsTagSpec = LArCalibFolderTag (MissingFEBsFolder,MissingFEBsLArCalibFolderTag) + conddb.addFolder("",MissingFEBsFolder+"<tag>"+MissingFEBsTagSpec+"</tag>"+"<dbConnection>"+InputDBConnectionBadChannel+"</dbConnection>",className='AthenaAttributeList') +else : + conddb.addFolder("",MissingFEBsFolder+"<dbConnection>"+InputDBConnectionBadChannel+"</dbConnection>",className='AthenaAttributeList') + + +from LArBadChannelTool.LArBadChannelToolConf import LArBadChannelCondAlg, LArBadFebCondAlg +theLArBadChannelCondAlg=LArBadChannelCondAlg(ReadKey=BadChannelsFolder) +condSeq+=theLArBadChannelCondAlg + +theLArBadFebCondAlg=LArBadFebCondAlg(ReadKey=MissingFEBsFolder) +condSeq+=theLArBadFebCondAlg + +if SuperCells: + conddb.addFolder("","/LAR/IdentifierOfl/OnOffIdMap_SC<db>COOLOFL_LAR/OFLP200</db><tag>LARIdentifierOflOnOffIdMap_SC-000</tag>") + + + + from AthenaCommon.AlgSequence import AlgSequence topSequence = AlgSequence() + ## get a handle to the ApplicationManager, to the ServiceManager and to the ToolSvc from AthenaCommon.AppMgr import (theApp, ServiceMgr as svcMgr,ToolSvc) @@ -139,20 +177,23 @@ if not 'FullFileName' in dir(): else : svcMgr.EventSelector.Input=FullFileName -scvMgr.EventSelector.MaxBadEvents = 0 +svcMgr.EventSelector.MaxBadEvents = 0 + svcMgr.ByteStreamCnvSvc.InitCnvs += [ "EventInfo"] theByteStreamAddressProviderSvc =svcMgr.ByteStreamAddressProviderSvc + + if not SuperCells: from LArByteStream.LArByteStreamConf import LArRodDecoder svcMgr.ToolSvc += LArRodDecoder() - theByteStreamAddressProviderSvc.TypeNames += ["LArFebHeaderContainer/LArFebHeader"] theByteStreamAddressProviderSvc.TypeNames += [ "LArDigitContainer/HIGH" ] theByteStreamAddressProviderSvc.TypeNames += [ "LArDigitContainer/MEDIUM"] theByteStreamAddressProviderSvc.TypeNames += [ "LArDigitContainer/LOW" ] theByteStreamAddressProviderSvc.TypeNames += [ "LArDigitContainer/FREE" ] + # this will go outside SC loop include ("LArROD/LArFebErrorSummaryMaker_jobOptions.py") topSequence.LArFebErrorSummaryMaker.CheckAllFEB=False @@ -165,21 +206,46 @@ if not SuperCells: topSequence+=theLArBadEventCatcher else: theByteStreamAddressProviderSvc.TypeNames += [ "LArDigitContainer/SC" ] + if SCDecodeAllContainers: + theByteStreamAddressProviderSvc.TypeNames += [ "LArDigitContainer/SC_ADC_BAS" ] + theByteStreamAddressProviderSvc.TypeNames += [ "LArRawSCContainer/SC_ET" ] + theByteStreamAddressProviderSvc.TypeNames += [ "LArRawSCContainer/SC_ET_ID" ] + theByteStreamAddressProviderSvc.TypeNames += [ "LArLATOMEHeaderContainer/SC_LATOME_HEADER" ] + from LArByteStream.LArByteStreamConf import LArLATOMEDecoder + theLArLATOMEDecoder = LArLATOMEDecoder("LArLATOMEDecoder") + theLArLATOMEDecoder.latomeInfoFileName = LatomeInfo + theLArLATOMEDecoder.DumpFile = SC_DumpFile + theLArLATOMEDecoder.RawDataFile = SC_RawDataFile + theLArLATOMEDecoder.SampleShift = SC_SampleShift + theLArLATOMEDecoder.ProtectSourceId = SCProtectSourceId + svcMgr.ToolSvc += theLArLATOMEDecoder from LArCalibTools.LArCalibToolsConf import * LArDigits2Ntuple=LArDigits2Ntuple("LArDigits2Ntuple") -LArDigits2Ntuple.ContainerKey = Gain +#LArDigits2Ntuple.ContainerKey = Gain +contkeys = [] +contkeys.append(Gain) + + +if SuperCells and SCDecodeAllContainers: + contkeys.append("SC_ADC_BAS") + contkeys.append("SC_ET") + contkeys.append("SC_ET_ID") + contkeys.append("SC_LATOME_HEADER") +LArDigits2Ntuple.ContainerKeys = contkeys LArDigits2Ntuple.AddFEBTempInfo=False if 'FTlist' in dir(): LArDigits2Ntuple.FTlist=FTlist + +LArDigits2Ntuple.isSC = SuperCells + +LArDigits2Ntuple.FillBCID = True if SuperCells: - #from xAODEventInfoCnv.xAODEventInfoCreator import xAODMaker__EventInfoCnvAlg - #topSequence+=xAODMaker__EventInfoCnvAlg() - LArDigits2Ntuple.isSC = True LArDigits2Ntuple.RealGeometry = True - LArDigits2Ntuple.OffId = True - LArDigits2Ntuple.FillBCID = True + LArDigits2Ntuple.OffId = True + LArDigits2Ntuple.AddBadChannelInfo = False + LArDigits2Ntuple.OverwriteEventNumber = OverwriteEventNumber topSequence+= LArDigits2Ntuple @@ -190,11 +256,13 @@ svcMgr += NTupleSvc() svcMgr.NTupleSvc.Output = [ "FILE1 DATAFILE='"+OutputDir + "/" +OutputRootFileName+"' OPT='NEW'" ] AthenaEventLoopMgr=Service("AthenaEventLoopMgr") -AthenaEventLoopMgr.OutputLevel=ERROR +AthenaEventLoopMgr.OutputLevel=WARNING theApp.EvtMax=EvtMax svcMgr.MessageSvc.OutputLevel=WARNING +LArDigits2Ntuple.OutputLevel=WARNING + #DetStore=Service("DetectorStore"); #DetStore.dump=TRUE #from StoreGate.StoreGateConf import StoreGateSvc diff --git a/LArCalorimeter/LArCalibTools/share/LArPedestal2Ntuple_jobOptions.py b/LArCalorimeter/LArCalibTools/share/LArPedestal2Ntuple_jobOptions.py index 907a6e0b605cea3ebae68fddbd2bb62405db5f4f..a253c7a49212e0fcc989a145b4ed6c40c19949e5 100755 --- a/LArCalorimeter/LArCalibTools/share/LArPedestal2Ntuple_jobOptions.py +++ b/LArCalorimeter/LArCalibTools/share/LArPedestal2Ntuple_jobOptions.py @@ -57,7 +57,7 @@ GlobalFlags.DataSource.set_data() GlobalFlags.InputFormat.set_bytestream() from AthenaCommon.DetFlags import DetFlags -DetFlags.Calo_setOff() +DetFlags.Calo_setOn() # ON for geometry DetFlags.ID_setOff() DetFlags.Muon_setOff() DetFlags.Truth_setOff() diff --git a/LArCalorimeter/LArCalibTools/src/LArAutoCorr2Ntuple.cxx b/LArCalorimeter/LArCalibTools/src/LArAutoCorr2Ntuple.cxx index 10a795300a9e702ed4b7f39a06b19415aa19fdb7..86c160b10d5d473dff4c8b8ac2eabc78b54a4c57 100755 --- a/LArCalorimeter/LArCalibTools/src/LArAutoCorr2Ntuple.cxx +++ b/LArCalorimeter/LArCalibTools/src/LArAutoCorr2Ntuple.cxx @@ -9,10 +9,10 @@ #include "StoreGate/StoreGateSvc.h" LArAutoCorr2Ntuple::LArAutoCorr2Ntuple(const std::string& name, ISvcLocator* pSvcLocator) - : LArCond2NtupleBase(name, pSvcLocator),m_nsamples(7) + : LArCond2NtupleBase(name, pSvcLocator)//,m_nsamples(7) { declareProperty("ContainerKey",m_objKey); - declareProperty("Nsamples", m_nsamples); + declareProperty("Nsamples", m_nsamples=32); m_ntTitle="AutoCorrelation"; m_ntpath="/NTUPLES/FILE1/AUTOCORR"; @@ -64,6 +64,7 @@ StatusCode LArAutoCorr2Ntuple::stop() { for (;it!=it_e;it++) { const HWIdentifier hwid = *it; ILArAutoCorr::AutoCorrRef_t corr=larAutoCorr->autoCorr(hwid,igain); + if (corr.size()>0) { fillFromIdentifier(hwid); gain = igain; diff --git a/LArCalorimeter/LArCalibTools/src/LArAverages2Ntuple.cxx b/LArCalorimeter/LArCalibTools/src/LArAverages2Ntuple.cxx index 3ec3972153ca6d13b86109af83815db271b84888..129b2f96eff1192ece2e2fb6196cb24b58262d59 100644 --- a/LArCalorimeter/LArCalibTools/src/LArAverages2Ntuple.cxx +++ b/LArCalorimeter/LArCalibTools/src/LArAverages2Ntuple.cxx @@ -16,7 +16,7 @@ LArAverages2Ntuple::LArAverages2Ntuple(const std::string& name, ISvcLocator* pSv // m_eventCounter(0) { declareProperty("ContainerKey",m_contKey); - declareProperty("NSamples",m_Nsamples=7); + declareProperty("NSamples",m_Nsamples=50); declareProperty("KeepOnlyPulsed",m_keepPulsed=true); declareProperty("isSC",m_isSC=false); m_ipass=0; diff --git a/LArCalorimeter/LArCalibTools/src/LArCaliWaves2Ntuple.cxx b/LArCalorimeter/LArCalibTools/src/LArCaliWaves2Ntuple.cxx index f661986ba2def090324cb9b1fbb798db7c36d7fc..80be1ab0f4892e4317cc31ffb09941c5618c54c3 100755 --- a/LArCalorimeter/LArCalibTools/src/LArCaliWaves2Ntuple.cxx +++ b/LArCalorimeter/LArCalibTools/src/LArCaliWaves2Ntuple.cxx @@ -112,8 +112,19 @@ StatusCode LArCaliWaves2Ntuple::stop() } } - SG::ReadCondHandle<LArCalibLineMapping> clHdl{m_calibMapKey}; - const LArCalibLineMapping *clCont {*clHdl}; + + //SG::ReadCondHandle<LArCalibLineMapping> clHdl{m_calibMapKey}; + //const LArCalibLineMapping *clCont {*clHdl}; + const LArCalibLineMapping *clCont=0; + if(m_isSC) { + ATH_MSG_DEBUG( "LArCaliWaves2Ntuple: using SC calib map" ); + SG::ReadCondHandle<LArCalibLineMapping> clHdl{m_calibMapSCKey}; + clCont=*clHdl; + } else { + SG::ReadCondHandle<LArCalibLineMapping> clHdl{m_calibMapKey}; + clCont=*clHdl; + } + if(!clCont) { ATH_MSG_WARNING( "Do not have calib line mapping !!!" ); return StatusCode::FAILURE; diff --git a/LArCalorimeter/LArCalibTools/src/LArCond2NtupleBase.cxx b/LArCalorimeter/LArCalibTools/src/LArCond2NtupleBase.cxx index 01ec90992eccfe22898cab3694f2f7d6238350e6..d1a0dd6499c3dbb86d3dba11e19bcc3a91897985 100644 --- a/LArCalorimeter/LArCalibTools/src/LArCond2NtupleBase.cxx +++ b/LArCalorimeter/LArCalibTools/src/LArCond2NtupleBase.cxx @@ -145,8 +145,15 @@ StatusCode LArCond2NtupleBase::initialize() { } ATH_CHECK( m_BCKey.initialize() ); - ATH_CHECK( m_cablingKey.initialize() ); - ATH_CHECK( m_calibMapKey.initialize() ); + /// do we need both of them at some point when data has both SC and cells? + if(m_isSC){ + ATH_CHECK( m_cablingSCKey.initialize() ); + ATH_CHECK( m_calibMapSCKey.initialize() ); + } + else{ + ATH_CHECK( m_cablingKey.initialize() ); + ATH_CHECK( m_calibMapKey.initialize() ); + } //Online-identifier variables sc=nt->addItem("channelId",m_onlChanId,0x38000000,0x3A000000); @@ -303,27 +310,41 @@ StatusCode LArCond2NtupleBase::initialize() { bool LArCond2NtupleBase::fillFromIdentifier(const HWIdentifier& hwid) { - ATH_MSG_DEBUG("Starting....."); + ATH_MSG_DEBUG("Starting fillFromIdentifier"); SG::ReadCondHandle<LArBadChannelCont> readHandle{m_BCKey}; const LArBadChannelCont *bcCont {*readHandle}; if(m_addBC && !bcCont) { ATH_MSG_WARNING( "Do not have Bad chan container " << m_BCKey.key() ); return false; } - SG::ReadCondHandle<LArCalibLineMapping> clHdl{m_calibMapKey}; - const LArCalibLineMapping *clCont {*clHdl}; + const LArCalibLineMapping *clCont=0; + if(m_isSC){ + SG::ReadCondHandle<LArCalibLineMapping> clHdl{m_calibMapSCKey}; + clCont={*clHdl}; + } + else{ + SG::ReadCondHandle<LArCalibLineMapping> clHdl{m_calibMapKey}; + clCont={*clHdl}; + } if(!clCont) { ATH_MSG_WARNING( "Do not have calib line mapping !!!" ); return false; } - SG::ReadCondHandle<LArOnOffIdMapping> cablingHdl{m_cablingKey}; - const LArOnOffIdMapping* cabling=*cablingHdl; + const LArOnOffIdMapping* cabling=0; + if(m_isSC){ + SG::ReadCondHandle<LArOnOffIdMapping> cablingHdl{m_cablingSCKey}; + cabling=*cablingHdl; + } + else{ + SG::ReadCondHandle<LArOnOffIdMapping> cablingHdl{m_cablingKey}; + cabling=*cablingHdl; + } + if(!cabling) { ATH_MSG_WARNING( "Do not have cabling !" ); return false; } - ATH_MSG_DEBUG("Starting 1....."); m_onlChanId = hwid.get_identifier32().get_compact(); m_barrel_ec = m_onlineId->barrel_ec(hwid); @@ -349,7 +370,7 @@ bool LArCond2NtupleBase::fillFromIdentifier(const HWIdentifier& hwid) { m_eta=NOT_VALID; m_phi=NOT_VALID; } else { - ATH_MSG_DEBUG(&m_reta << " " << &m_rphi << " " << &m_layer); + //ATH_MSG_DEBUG(&m_reta << " " << &m_rphi << " " << &m_layer); m_reta=NOT_VALID; m_rphi=NOT_VALID; } @@ -437,5 +458,6 @@ bool LArCond2NtupleBase::fillFromIdentifier(const HWIdentifier& hwid) { const SG::ReadCondHandleKey<LArOnOffIdMapping>& LArCond2NtupleBase::cablingKey() const { + if(m_isSC) return m_cablingSCKey; return m_cablingKey; } diff --git a/LArCalorimeter/LArCalibTools/src/LArDigits2Ntuple.cxx b/LArCalorimeter/LArCalibTools/src/LArDigits2Ntuple.cxx index b2570ab5940af491753ae82148e73053729b38a0..374f5a403a5ab7c2b801d68c82136d771e392546 100644 --- a/LArCalorimeter/LArCalibTools/src/LArDigits2Ntuple.cxx +++ b/LArCalorimeter/LArCalibTools/src/LArDigits2Ntuple.cxx @@ -1,12 +1,14 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ #include "LArCalibTools/LArDigits2Ntuple.h" #include "EventInfo/EventInfo.h" #include "EventInfo/EventID.h" #include "LArRawEvent/LArDigitContainer.h" - +#include "LArRawEvent/LArRawSCContainer.h" +#include "LArRawEvent/LArSCDigit.h" +#include "LArRawEvent/LArLATOMEHeaderContainer.h" //#include "GaudiKernel/ToolHandle.h" LArDigits2Ntuple::LArDigits2Ntuple(const std::string& name, ISvcLocator* pSvcLocator): @@ -14,13 +16,14 @@ LArDigits2Ntuple::LArDigits2Ntuple(const std::string& name, ISvcLocator* pSvcLoc m_ipass(0), m_event(0), m_FTlist(0), m_fillBCID(false) { - declareProperty("ContainerKey",m_contKey); + declareProperty("ContainerKeys",m_contKeys); declareProperty("NSamples",m_Nsamples=32); declareProperty("FTlist",m_FTlist); declareProperty("FillBCID",m_fillBCID); + declareProperty("OverwriteEventNumber",m_overwriteEventNumber=false); m_ntTitle="LArDigits"; - m_ntpath="/NTUPLES/FILE1/LARDIGITS"+m_contKey; - + m_ntpath="/NTUPLES/FILE1/LARDIGITS"; + } LArDigits2Ntuple::~LArDigits2Ntuple() @@ -29,37 +32,35 @@ LArDigits2Ntuple::~LArDigits2Ntuple() StatusCode LArDigits2Ntuple::initialize() { - ATH_MSG_INFO( "in initialize" ); + ATH_MSG_INFO( "in initialize" ); - StatusCode sc=LArCond2NtupleBase::initialize(); - if (sc!=StatusCode::SUCCESS) { - ATH_MSG_ERROR( "Base init failed" ); - return StatusCode::FAILURE; - } + m_isSC = ( std::any_of(m_contKeys.begin(), m_contKeys.end(),[&](std::string const &s) {return s.find("SC") != std::string::npos;} ) ); + ATH_MSG_DEBUG(" IS it SC?? " << m_isSC ); + + StatusCode sc=LArCond2NtupleBase::initialize(); + if (sc!=StatusCode::SUCCESS) { + ATH_MSG_ERROR( "Base init failed" ); + return StatusCode::FAILURE; + } + sc=m_nt->addItem("IEvent",m_IEvent); if (sc!=StatusCode::SUCCESS) { - ATH_MSG_ERROR( "addItem 'IEvent' failed" ); - return sc; - } - - sc=m_nt->addItem("Gain",m_gain,-1,3); + ATH_MSG_ERROR( "addItem 'IEvent' failed" ); + return sc; + } + + sc=m_nt->addItem("samples",m_Nsamples,m_samples); if (sc!=StatusCode::SUCCESS) { - ATH_MSG_ERROR( "addItem 'Gain' failed" ); - return sc; - } - + ATH_MSG_ERROR( "addItem 'samples' failed" ); + return sc; + } + sc=m_nt->addItem("Nsamples",m_ntNsamples,0,32); if (sc!=StatusCode::SUCCESS) { - ATH_MSG_ERROR( "addItem 'Nsamples' failed" ); - return sc; - } - - sc=m_nt->addItem("samples",m_Nsamples,m_samples); - if (sc!=StatusCode::SUCCESS) { - ATH_MSG_ERROR( "addItem 'samples' failed" ); - return sc; - } + ATH_MSG_ERROR( "addItem 'Nsamples' failed" ); + return sc; + } if(m_fillBCID){ sc=m_nt->addItem("BCID",m_bcid); @@ -68,15 +69,122 @@ StatusCode LArDigits2Ntuple::initialize() return sc; } } + + if (m_isSC){ + sc=m_nt->addItem("latomeChannel",m_latomeChannel); + if (sc!=StatusCode::SUCCESS) { + ATH_MSG_ERROR( "addItem 'latomeChannel' failed" ); + return sc; + } + } - ATH_CHECK(m_evtInfoKey.initialize() ); + // Loop over container keys + for ( std::string ck : m_contKeys ){ + + if ( ck.find("SC") == std::string::npos){ // main readout only + sc=m_nt->addItem("Gain",m_gain,-1,3); + if (sc!=StatusCode::SUCCESS) { + ATH_MSG_ERROR( "addItem 'Gain' failed" ); + return sc; + } + + }else if ( ck == "SC" ){ // SC DigitContainer + sc=m_nt->addItem("bcidVec",m_Nsamples, m_bcidVec); //here - > define length? + if (sc!=StatusCode::SUCCESS) { + ATH_MSG_ERROR( "addItem 'bcidVec' failed" ); + return sc; + } + sc=m_nt->addItem("latomeSourceId",m_latomeSourceId); + if (sc!=StatusCode::SUCCESS) { + ATH_MSG_ERROR( "addItem 'latomeSourceId' failed" ); + return sc; + } + + }else if ( ck == "SC_ADC_BAS" ){ // SC_ADC_BAS DigitContainer + sc=m_nt->addItem("samples_ADC_BAS",m_Nsamples,m_samples_ADC_BAS); + if (sc!=StatusCode::SUCCESS) { + ATH_MSG_ERROR( "addItem 'samples_ADC_BAS' failed" ); + return sc; + } + - m_ipass = 0; + sc=m_nt->addItem("bcidVec_ADC_BAS",m_Nsamples, m_bcidVec_ADC_BAS); //here - > define length? + if (sc!=StatusCode::SUCCESS) { + ATH_MSG_ERROR( "addItem 'bcidVec_ADC_BAS' failed" ); + return sc; + } + + }else if ( ck == "SC_LATOME_HEADER" ){ // SC LATOME HEADER + sc=m_nt->addItem("bcidLATOMEHEAD",m_bcidLATOMEHEAD); + if (sc!=StatusCode::SUCCESS) { + ATH_MSG_ERROR( "addItem 'bcidLATOMEHEAD' failed" ); + return sc; + } + sc=m_nt->addItem("latomeidLATOMEHEAD",m_latomeidLATOMEHEAD); + if (sc!=StatusCode::SUCCESS) { + ATH_MSG_ERROR( "addItem 'latomeidLATOMEHEAD' failed" ); + return sc; + } + sc=m_nt->addItem("l1idLATOMEHEAD",m_l1idLATOMEHEAD); + if (sc!=StatusCode::SUCCESS) { + ATH_MSG_ERROR( "addItem 'l1idLATOMEHEAD' failed" ); + return sc; + } + + }else if ( ck == "SC_ET" ){ // SC_ET RawSCContainer + sc=m_nt->addItem("energyVec_ET", m_Nsamples, m_energyVec_ET); + if (sc!=StatusCode::SUCCESS) { + ATH_MSG_ERROR( "addItem 'energyVec_ET' failed" ); + return sc; + } + sc=m_nt->addItem("bcidVec_ET", m_Nsamples, m_bcidVec_ET); + if (sc!=StatusCode::SUCCESS) { + ATH_MSG_ERROR( "addItem 'bcidVec_ET' failed" ); + return sc; + } + sc=m_nt->addItem("saturVec_ET", m_Nsamples, m_saturVec_ET); + if (sc!=StatusCode::SUCCESS) { + ATH_MSG_ERROR( "addItem 'saturVec_ET' failed" ); + return sc; + } + + }else if ( ck == "SC_ET_ID" ){ // SC_ET_ID RawSCContainer + sc=m_nt->addItem("energyVec_ET_ID", m_Nsamples, m_energyVec_ET_ID); + if (sc!=StatusCode::SUCCESS) { + ATH_MSG_ERROR( "addItem 'energyVec_ET_ID' failed" ); + return sc; + } + sc=m_nt->addItem("bcidVec_ET_ID", m_Nsamples, m_bcidVec_ET_ID); + if (sc!=StatusCode::SUCCESS) { + ATH_MSG_ERROR( "addItem 'bcidVec_ET_ID' failed" ); + return sc; + } + sc=m_nt->addItem("saturVec_ET_ID", m_Nsamples, m_saturVec_ET_ID); + if (sc!=StatusCode::SUCCESS) { + ATH_MSG_ERROR( "addItem 'saturVec_ET_ID' failed" ); + return sc; + } + } + + } // end container key loop + + + //} + + + + ATH_CHECK(m_evtInfoKey.initialize() ); + + if( !m_isSC ) ATH_CHECK( m_LArFebHeaderContainerKey.initialize() ); + + + m_ipass = 0; + m_event=0; - + return StatusCode::SUCCESS; - + } StatusCode LArDigits2Ntuple::execute() @@ -89,62 +197,280 @@ StatusCode LArDigits2Ntuple::execute() m_event++; unsigned long long thisevent; unsigned long thisbcid=0; + SG::ReadHandle<xAOD::EventInfo> evt (m_evtInfoKey); thisevent = evt->eventNumber(); - if(m_fillBCID) thisbcid = evt->bcid(); + // Get BCID from FEB header + if ( !m_isSC ){ // we are not processing SC data, Feb header could be accessed + SG::ReadHandle<LArFebHeaderContainer> hdrCont(m_LArFebHeaderContainerKey); + if (! hdrCont.isValid()) { + ATH_MSG_WARNING( "No LArFEB container found in TDS" ); + } + else { + ATH_MSG_DEBUG( "LArFEB container found"); + if(m_fillBCID) thisbcid = (*hdrCont->begin())->BCId() ; + ATH_MSG_DEBUG( "BCID FROM FEB HEADER " << thisbcid ); + ATH_MSG_DEBUG( "NSAMPLES FROM FEB HEADER " << (*hdrCont->begin())->NbSamples() ); + } + }else{ + // This should be used for main readout later, once TDAQ fill event headers also in calib. runs properly + thisbcid = evt->bcid(); + } + /// set it here once and no need to set at each SC/cell + const LArDigitContainer* DigitContainer = NULL; - sc=evtStore()->retrieve(DigitContainer,m_contKey); + sc=evtStore()->retrieve(DigitContainer,m_contKeys.at(0)); if (sc!=StatusCode::SUCCESS) { - ATH_MSG_WARNING( "Unable to retrieve LArDigitContainer with key " << m_contKey << " from DetectorStore. " ); - } + ATH_MSG_WARNING( "Unable to retrieve LArDigitContainer with key " << m_contKeys.at(0) << " from DetectorStore. " ); + } else - ATH_MSG_DEBUG( "Got LArDigitContainer with key " << m_contKey ); + ATH_MSG_DEBUG( "Got LArDigitContainer with key " << m_contKeys.at(0) ); + + const LArDigitContainer* DigitContainer1 = NULL; + const LArRawSCContainer* etcontainer = NULL; + const LArRawSCContainer* etcontainer1 = NULL; + const LArLATOMEHeaderContainer* headcontainer = NULL; + std::map<unsigned int, const LArLATOMEHeader*> LATOMEHeadMap; + if (m_isSC){ + if ((std::find(m_contKeys.begin(), m_contKeys.end(), "SC_ADC_BAS") != m_contKeys.end()) ){ + sc=evtStore()->retrieve(DigitContainer1,"SC_ADC_BAS"); + if (sc!=StatusCode::SUCCESS) { + ATH_MSG_WARNING( "Unable to retrieve LArDigitContainer with key SC_ADC_BAS from DetectorStore. " ); + } + else + ATH_MSG_DEBUG( "Got LArDigitContainer with key SC_ADC_BAS " ); + } + + if ((std::find(m_contKeys.begin(), m_contKeys.end(), "SC_ET") != m_contKeys.end()) ){ + sc=evtStore()->retrieve(etcontainer,"SC_ET"); + if (sc!=StatusCode::SUCCESS) { + ATH_MSG_WARNING( "Unable to retrieve LArRawSCContainer with key SC_ET from DetectorStore. " ); + } + else + ATH_MSG_DEBUG( "Got LArDigitContainer with key SC_ET " ); + } + + if ((std::find(m_contKeys.begin(), m_contKeys.end(), "SC_ET_ID") != m_contKeys.end()) ){ + sc=evtStore()->retrieve(etcontainer1,"SC_ET_ID"); + if (sc!=StatusCode::SUCCESS) { + ATH_MSG_WARNING( "Unable to retrieve LArRawSCContainer with key SC_ET_ID from DetectorStore. " ); + } + else + ATH_MSG_DEBUG( "Got LArDigitContainer with key SC_ET_ID" ); + } + + if ((std::find(m_contKeys.begin(), m_contKeys.end(), "SC_LATOME_HEADER") != m_contKeys.end()) ){ + sc=evtStore()->retrieve(headcontainer,"SC_LATOME_HEADER"); + if (sc!=StatusCode::SUCCESS) { + ATH_MSG_WARNING( "Unable to retrieve LArLATOMEHeaderContainer with key SC_LATOME_HEADER from DetectorStore. " ); + } + else + ATH_MSG_DEBUG( "Got LArDigitContainer with key SC_LATOME_HEADER " ); + } + + if (headcontainer){ // loop through header container and fill map + LArLATOMEHeaderContainer::const_iterator hit=headcontainer->begin(); + LArLATOMEHeaderContainer::const_iterator hit_e=headcontainer->end(); + for (;hit!=hit_e;hit++) { + LATOMEHeadMap.insert ( std::pair<unsigned int, const LArLATOMEHeader*>( (*hit)->SourceId(), (*hit) ) ); + } + } + } // end if m_isSC + + /// set container pointers to 0 if size is 0 (avoid checking again the size in many places) + if( DigitContainer && DigitContainer->size() == 0 )DigitContainer=0; + + if( DigitContainer1 && DigitContainer1->size() == 0 )DigitContainer1=0; + + if( etcontainer && etcontainer->size() == 0 )etcontainer=0; + + if( etcontainer1 && etcontainer1->size() == 0 )etcontainer1=0; - - if (DigitContainer) { - - LArDigitContainer::const_iterator it=DigitContainer->begin(); - LArDigitContainer::const_iterator it_e=DigitContainer->end(); - - if(it == it_e) { - ATH_MSG_DEBUG( "LArDigitContainer with key=" << m_contKey << " is empty " ); - return StatusCode::SUCCESS; - }else{ - ATH_MSG_DEBUG( "LArDigitContainer with key=" << m_contKey << " has " <<DigitContainer->size() << " entries" ); + int cellsno = 0; + if (DigitContainer) cellsno = DigitContainer->size(); + if (DigitContainer1){ + if ( cellsno == 0 ){ + cellsno = DigitContainer1->size(); + }else if(DigitContainer1->size() != (unsigned)cellsno ){ ATH_MSG_ERROR(" NOOOOOOO! Different number of entries "<< cellsno << " " << DigitContainer1->size() ); + } + } + if (etcontainer){ + if ( cellsno == 0 ){ + cellsno = etcontainer->size(); + }else if(etcontainer->size() != (unsigned)cellsno ){ ATH_MSG_ERROR(" NOOOOOOO! Different number of entries "<< cellsno << " " << etcontainer->size() ); + } + } + if (etcontainer1){ + if ( cellsno == 0 ){ + cellsno = etcontainer1->size(); + }else if(etcontainer1->size() != (unsigned)cellsno ){ ATH_MSG_ERROR(" NOOOOOOO! Different number of entries "<< cellsno << " " << etcontainer1->size() ); } + } + + unsigned cellCounter=0; + for( int c=0;c<cellsno;c++ ){ + + if(m_fillBCID) m_bcid = thisbcid; + m_IEvent=thisevent; + if(m_overwriteEventNumber) m_IEvent=m_event; + + if( DigitContainer ){ - unsigned cellCounter=0; - for (;it!=it_e;it++) { + const LArDigit* digi = DigitContainer->at(c); + // ====================== - unsigned int trueMaxSample = (*it)->nsamples(); - m_ntNsamples = trueMaxSample; + unsigned int trueMaxSample = digi->nsamples(); + m_ntNsamples = trueMaxSample; - m_gain=(*it)->gain(); - if(m_gain < CaloGain::INVALIDGAIN || m_gain > CaloGain::LARNGAIN) m_gain=CaloGain::LARNGAIN; + if (!m_isSC){ + m_gain=digi->gain(); + if(m_gain < CaloGain::INVALIDGAIN || m_gain > CaloGain::LARNGAIN) m_gain=CaloGain::LARNGAIN; + } - // std::cout << "trigger = " << Ntrigger << ", m_samples = "<< m_ntNsamples << std::endl; + // std::cout << "trigger = " << Ntrigger << ", m_samples = "<< m_ntNsamples << std::endl; + if(trueMaxSample>m_Nsamples){ + if(!m_ipass){ + ATH_MSG_WARNING( "The number of samples in data is larger than the one specified by JO: " << trueMaxSample << " > " << m_Nsamples << " --> only " << m_Nsamples << " will be available in the ntuple " ); + m_ipass=1; + } + trueMaxSample = m_Nsamples; + } - if(trueMaxSample>m_Nsamples){ - if(!m_ipass){ - ATH_MSG_WARNING( "The number of samples in data is larger than the one specified by JO: " << trueMaxSample << " > " << m_Nsamples << " --> only " << m_Nsamples << " will be available in the ntuple " ); - m_ipass=1; + fillFromIdentifier(digi->hardwareID()); + if(m_FTlist.size() > 0) { // should do a selection + if(std::find(std::begin(m_FTlist), std::end(m_FTlist), m_FT) == std::end(m_FTlist)) { // is our FT in list ? + continue; + } + } + + for(unsigned i=0; i<trueMaxSample;++i) m_samples[i]=digi->samples().at(i); + + if (m_isSC){ // LArSCDigit stuff + const LArSCDigit* scdigi = dynamic_cast<const LArSCDigit*>(digi); + if(!scdigi){ ATH_MSG_DEBUG(" CAN'T CAST "); + }else{ + if (headcontainer){ + const LArLATOMEHeader* headmap = LATOMEHeadMap[scdigi->SourceId()]; + if(headmap){ + m_bcidLATOMEHEAD = headmap->BCId(); + m_latomeidLATOMEHEAD = headmap->LatomeId(); + m_l1idLATOMEHEAD = headmap->L1Id(); + } + } + m_latomeChannel = scdigi->Channel(); + for( unsigned i=0; i<scdigi->BCId().size();++i){ + m_bcidVec[i] = scdigi->BCId().at(i); + } + m_latomeSourceId = scdigi->SourceId(); + } } - trueMaxSample = m_Nsamples; } - m_IEvent=thisevent; - if(m_fillBCID) m_bcid = thisbcid; + // DigitContainer 1 -> SC_ADC_BAS + if( DigitContainer1 ){ + + //ATH_MSG_DEBUG("ADDING DIGITCONTAINER1"); + + const LArDigit* digi = DigitContainer1->at(c); + //for(unsigned i=0; i<trueMaxSample;++i) m_samples[i]=digi->samples().at(i); + // ====================== + + unsigned int trueMaxSample = digi->nsamples(); + m_ntNsamples = trueMaxSample; + + // std::cout << "trigger = " << Ntrigger << ", m_samples_ADC_BAS = "<< m_ntNsamples << std::endl; + if(trueMaxSample>m_Nsamples){ + if(!m_ipass){ + ATH_MSG_WARNING( "The number of samples in data is larger than the one specified by JO: " << trueMaxSample << " > " << m_Nsamples << " --> only " << m_Nsamples << " will be available in the ntuple " ); + m_ipass=1; + } + trueMaxSample = m_Nsamples; + } + + if( !DigitContainer){ //// already filled in DigitContainer? + fillFromIdentifier(digi->hardwareID()); + } + + for(unsigned i=0; i<trueMaxSample;++i) m_samples_ADC_BAS[i]=digi->samples().at(i); + + const LArSCDigit* scdigi = dynamic_cast<const LArSCDigit*>(digi); + if(!scdigi){ ATH_MSG_DEBUG(" CAN'T CAST "); + }else{ + if ( !DigitContainer){ + if (headcontainer){ + const LArLATOMEHeader* headmap = LATOMEHeadMap[scdigi->SourceId()]; + if(headmap){ + m_bcidLATOMEHEAD = headmap->BCId(); + m_latomeidLATOMEHEAD = headmap->LatomeId(); + m_l1idLATOMEHEAD = headmap->L1Id(); + } + } + m_latomeChannel = scdigi->Channel(); + m_latomeSourceId = scdigi->SourceId(); + } + + for( unsigned i=0; i<scdigi->BCId().size();++i){ + m_bcidVec_ADC_BAS[i] = scdigi->BCId().at(i); + } + } + } + + // etcontainer -> SC_ET + if( etcontainer ){ + //ATH_MSG_DEBUG("ADDING ETCONTAINER"); + const LArRawSC* rawSC = etcontainer->at(c); + + if ( !DigitContainer && !DigitContainer1 ){ + m_latomeChannel = rawSC->chan(); + if (headcontainer){ + const LArLATOMEHeader* headmap = LATOMEHeadMap[rawSC->SourceId()]; + if(headmap){ + m_bcidLATOMEHEAD = headmap->BCId(); + m_latomeidLATOMEHEAD = headmap->LatomeId(); + m_l1idLATOMEHEAD = headmap->L1Id(); + } + } + } + for( unsigned i=0; i<rawSC->bcids().size();++i){// just use the vector directly? + m_bcidVec_ET[i] = rawSC->bcids().at(i); + } + for( unsigned i=0; i<rawSC->energies().size();++i){// just use the vector directly? + m_energyVec_ET[i] = rawSC->energies().at(i); + } + for( unsigned i=0; i<rawSC->satur().size();++i){// just use the vector directly? + m_saturVec_ET[i] = rawSC->satur().at(i); + } - fillFromIdentifier((*it)->hardwareID()); - if(m_FTlist.size() > 0) { // should do a selection - if(std::find(std::begin(m_FTlist), std::end(m_FTlist), m_FT) == std::end(m_FTlist)) { // is our FT in list ? - continue; - } } + + // etcontainer1 -> SC_ET_ID + if( etcontainer1 ){ + //ATH_MSG_DEBUG("ADDING ETCONTAINER1"); + const LArRawSC* rawSC = etcontainer1->at(c); + //const std::vector<int> bcidVec = rawSC->bcids(); + if ( !DigitContainer && !DigitContainer1 && !etcontainer ){ + m_latomeChannel = rawSC->chan(); + if (headcontainer){ + const LArLATOMEHeader* headmap = LATOMEHeadMap[rawSC->SourceId()]; + if(headmap){ + m_bcidLATOMEHEAD = headmap->BCId(); + m_latomeidLATOMEHEAD = headmap->LatomeId(); + m_l1idLATOMEHEAD = headmap->L1Id(); + } + } + } + for( unsigned i=0; i<rawSC->bcids().size();++i){// just use the vector directly? + m_bcidVec_ET_ID[i] = rawSC->bcids()[i]; + } + for( unsigned i=0; i<rawSC->energies().size();++i){// just use the vector directly? + m_energyVec_ET_ID[i] = rawSC->energies()[i]; + } + for( unsigned i=0; i<rawSC->satur().size();++i){// just use the vector directly? + m_saturVec_ET_ID[i] = rawSC->satur()[i]; + } - const std::vector<short> sam = (*it)->samples(); - for(unsigned i=0; i<trueMaxSample;++i) m_samples[i]=sam[i]; + } sc=ntupleSvc()->writeRecord(m_nt); if (sc!=StatusCode::SUCCESS) { @@ -153,7 +479,7 @@ StatusCode LArDigits2Ntuple::execute() } cellCounter++; }// over cells - } - ATH_MSG_DEBUG( "LArDigits2Ntuple has finished." ); - return StatusCode::SUCCESS; + + ATH_MSG_DEBUG( "LArDigits2Ntuple has finished." ); + return StatusCode::SUCCESS; }// end finalize-method. diff --git a/LArCalorimeter/LArCalibTools/src/LArOFC2Ntuple.cxx b/LArCalorimeter/LArCalibTools/src/LArOFC2Ntuple.cxx index 47fc5d9872cf90be5409829e59fd419f370b8e35..194320a52ef7dc0dd3b1d168eb24188566243a02 100644 --- a/LArCalorimeter/LArCalibTools/src/LArOFC2Ntuple.cxx +++ b/LArCalorimeter/LArCalibTools/src/LArOFC2Ntuple.cxx @@ -94,9 +94,18 @@ StatusCode LArOFC2Ntuple::stop() { return StatusCode::FAILURE; } } + + const LArOnOffIdMapping *cabling=0; + if(m_isSC) { + ATH_MSG_DEBUG( "LArOFC2Ntuple: using SC cabling" ); + SG::ReadCondHandle<LArOnOffIdMapping> cablingHdl{m_cablingSCKey}; + cabling=*cablingHdl; + }else{ + SG::ReadCondHandle<LArOnOffIdMapping> cablingHdl{m_cablingKey}; + cabling=*cablingHdl; + } + - SG::ReadCondHandle<LArOnOffIdMapping> cablingHdl{m_cablingKey}; - const LArOnOffIdMapping* cabling=*cablingHdl; if(!cabling) { ATH_MSG_WARNING( "Do not have cabling object LArOnOffIdMapping" ); return StatusCode::FAILURE; diff --git a/LArCalorimeter/LArCalibTools/src/LArRamps2Ntuple.cxx b/LArCalorimeter/LArCalibTools/src/LArRamps2Ntuple.cxx index 1c0a0545c89523afebf1886fe3aa57884a42fd29..117eeafbf35e7981606d3b1725bd7f0d56f86a2f 100755 --- a/LArCalorimeter/LArCalibTools/src/LArRamps2Ntuple.cxx +++ b/LArCalorimeter/LArCalibTools/src/LArRamps2Ntuple.cxx @@ -294,8 +294,17 @@ StatusCode LArRamps2Ntuple::stop() { }//end-if rampComplete - SG::ReadCondHandle<LArOnOffIdMapping> cablingHdl{m_cablingKey}; - const LArOnOffIdMapping* cabling=*cablingHdl; + const LArOnOffIdMapping *cabling=0; + if(m_isSC) { + ATH_MSG_DEBUG( "LArRamps2Ntuple: using SC cabling" ); + SG::ReadCondHandle<LArOnOffIdMapping> cablingHdl{m_cablingSCKey}; + cabling=*cablingHdl; + }else{ + SG::ReadCondHandle<LArOnOffIdMapping> cablingHdl{m_cablingKey}; + cabling=*cablingHdl; + } + + if(!cabling) { ATH_MSG_WARNING( "Do not have cabling object LArOnOffIdMapping" ); return StatusCode::FAILURE;