diff --git a/graphics/EventDisplaysOnline/python/EventDisplaysOnlineConfig.py b/graphics/EventDisplaysOnline/python/EventDisplaysOnlineConfig.py index 1baeb0440ef412576a8ef2f500272ae1867bd9ff..9c887124ec17c5df32a94df49024f778edfbdea7 100644 --- a/graphics/EventDisplaysOnline/python/EventDisplaysOnlineConfig.py +++ b/graphics/EventDisplaysOnline/python/EventDisplaysOnlineConfig.py @@ -182,12 +182,12 @@ if not testWithoutPartition: def StreamToFileToolCfg(flags, name='StreamToFileTool',**kwargs): result = ComponentAccumulator() - prefixFileName = "%s/.Unknown/JiveXML" % outputDirectory + prefixFileName = "%s/.Unknown/JiveXMLtest" % outputDirectory kwargs.setdefault("FileNamePrefix", prefixFileName) + kwargs.setdefault("MyTest", "EDOcofig") the_tool = CompFactory.JiveXML.StreamToFileTool(**kwargs) result.setPrivateTools(the_tool) return result - streamToFileTool = acc.popToolsAndMerge(StreamToFileToolCfg(flags)) if not isOfflineTest: diff --git a/graphics/EventDisplaysOnline/python/OnlineEventDisplaysSvc.py b/graphics/EventDisplaysOnline/python/OnlineEventDisplaysSvc.py index 76772b133f13d208718b3e96a40e1f455f6fddd4..9171b6c6a7c0e03fb60e3e1c0dc8f3670202f6e6 100644 --- a/graphics/EventDisplaysOnline/python/OnlineEventDisplaysSvc.py +++ b/graphics/EventDisplaysOnline/python/OnlineEventDisplaysSvc.py @@ -27,8 +27,7 @@ class OnlineEventDisplaysSvc( PyAthena.Svc ): self.zpgid = None self.partition = None - - self.StreamToFileTool = kw.get('StreamToFileTool') + self.StreamToFileTool = None #kw.get('StreamToFileTool') self.StreamToServerTool = None self.VP1EventProducer = None @@ -58,14 +57,13 @@ class OnlineEventDisplaysSvc( PyAthena.Svc ): return StatusCode.Success def getJobOptions(self): - #self.StreamToFileTool = PyAthena.py_tool('JiveXML::StreamToFileTool', iface='IProperty') + self.StreamToFileTool = PyAthena.py_tool('JiveXML::StreamToFileTool', iface='IProperty') self.StreamToServerTool = PyAthena.py_tool('JiveXML::StreamToServerTool', iface='IProperty') + help(self.StreamToFileTool) # Some casting magic is needed to access algorithm properties from GaudiPython.Bindings import gbl, InterfaceCast vp1alg = PyAthena.py_alg('VP1EventProd') self.VP1EventProducer = InterfaceCast(gbl.IProperty).cast(vp1alg) - print(type(self.StreamToFileTool)) - print(self.StreamToFileTool.MyTest) self.msg.info("StreamToFileTool: %s", self.StreamToFileTool) self.msg.info("StreamToServerTool: %s", self.StreamToServerTool) self.msg.info("VP1EventProducer: %s", self.VP1EventProducer) @@ -174,9 +172,10 @@ class OnlineEventDisplaysSvc( PyAthena.Svc ): # Set output stream for JiveXML event streaming (file and server) print('stream name and file name prefix:',"%s" % self.stream, "%s/JiveXML" % self.directory) self.StreamToServerTool.getProperty('StreamName').setValue("%s" % self.stream) + + print('before changing my test in online svc:',self.StreamToFileTool.getProperty("MyTest").value()) self.StreamToFileTool.getProperty('FileNamePrefix').setValue("%s/JiveXML" % self.directory) - print(self.StreamToFileTool.getProperty("MyTest").value()) - self.StreamToFileTool.getProperty("MyTest").setValue("updated") + self.StreamToFileTool.getProperty("MyTest").setValue("updatedinOsvc") print(self.StreamToFileTool.getProperty("MyTest").value()) self.msg.debug("Directory in try: %s", self.directory) except Exception as err: diff --git a/graphics/JiveXML/JiveXML/AlgoJiveXML.h b/graphics/JiveXML/JiveXML/AlgoJiveXML.h index de5b07159a10c1505a4339aa1ff60534e5f0269a..d2e0eac4b8e5cdcb6d8dd3efa03968b7ff4f1276 100755 --- a/graphics/JiveXML/JiveXML/AlgoJiveXML.h +++ b/graphics/JiveXML/JiveXML/AlgoJiveXML.h @@ -56,28 +56,26 @@ namespace JiveXML { Gaudi::Property<bool> m_onlineMode {this, "OnlineMode", false, "Whether an XMLRPC server shall be started"}; Gaudi::Property<bool> m_writeGeometry {this, "WriteGeometry", false, "Whether Geometry-XML files shall be produced"}; Gaudi::Property<std::string> m_geometryVersionIn {this, "GeometryVersion", "default", "Geometry version as read from Athena"}; - Gaudi::Property<std::vector<std::string>> m_GeoWriterNames {this, "GeoWriterNames", {"JiveXML::GeometryWriter/GeometryWriter","JiveXML::MuonGeometryWriter/MuonGeometryWriter"}, "The names of the geometry-writer tools"}; + Gaudi::Property<std::vector<std::string>> m_GeoWriterNames {this, "GeoWriterNames", {"JiveXML::GeometryWriter/GeometryWriter","JiveXML::MuonGeometryWriter/MuonGeometryWriter"}, "The names of the geometry-writer tools"}; + /** + * The list of DataRetrievers. This is initialised using the list of names + * supplied by the jobOptions. DataRetrievers are AlgTools residing in the + * corresponding sub-detector packages (e.g. TrackRetriever in InDetJiveXML). + **/ + ToolHandleArray<JiveXML::IDataRetriever> m_DataRetrievers; - protected: + /** + * Handle to the formatting tool, which is passed on to + * the data retrievers and converts the data into XML + **/ + ToolHandle<JiveXML::IFormatTool> m_FormatTool {this, "FormatTool", "JiveXML::XMLFormatTool/XMLFormatTool", "Format tool"}; - /** - * The list of DataRetrievers. This is initialised using the list of names - * supplied by the jobOptions. DataRetrievers are AlgTools residing in the - * corresponding sub-detector packages (e.g. TrackRetriever in InDetJiveXML). - **/ - ToolHandleArray<JiveXML::IDataRetriever> m_DataRetrievers; - - /** - * Handle to the formatting tool, which is passed on to - * the data retrievers and converts the data into XML - **/ - ToolHandle<JiveXML::IFormatTool> m_FormatTool; - - /** - * List of streaming tools that pass the formatted XML text - * into a file, to a server, etc. - **/ - ToolHandleArray<JiveXML::IStreamTool> m_StreamTools; + /** + * Streaming tools that pass the formatted XML text + * into a file, to a server, etc. + **/ + ToolHandle<JiveXML::IStreamTool> m_StreamToFileTool {this, "StreamToFileTool", "JiveXML::StreamToFileTool/StreamToFileTool", "Stream to file tool"}; + ToolHandle<JiveXML::IStreamTool> m_StreamToServerTool {this, "StreamToServerTool", "JiveXML::StreamToServerTool/StreamToServerTool", "Stream to server tool"}; }; diff --git a/graphics/JiveXML/python/JiveXMLConfig.py b/graphics/JiveXML/python/JiveXMLConfig.py index c1421b4051a5e4453fe2c88018ef157e1a57c949..e6b1e8ba4ef844b156d9d291e563fdd86cfe759e 100644 --- a/graphics/JiveXML/python/JiveXMLConfig.py +++ b/graphics/JiveXML/python/JiveXMLConfig.py @@ -1,9 +1,10 @@ -# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator from AthenaConfiguration.ComponentFactory import CompFactory from AthenaConfiguration.Enums import Format + def getATLASVersion(): import os @@ -46,7 +47,7 @@ def getDataTypes(flags, haveRDO=False, readAOD=False): # Taken from CaloJiveXML_DataTypes.py # TODO find correct flag and check the LArDigitRetriever is doing what we want it to do #if doLArDigits: - # data_types += ["JiveXML::LArDigitRetriever/LArDigitRetriever"] + #data_types += ["JiveXML::LArDigitRetriever/LArDigitRetriever"] #else: data_types += ["JiveXML::CaloFCalRetriever/CaloFCalRetriever"] data_types += ["JiveXML::CaloLArRetriever/CaloLArRetriever"] @@ -177,11 +178,6 @@ def TrackRetrieverCfg(flags, name="TrackRetriever", **kwargs): # kwargs.setdefault("DoWriteHLT", True) ### switch residual data off: kwargs.setdefault("DoWriteResiduals", False) - if flags.Common.isOnline: - doHitsDetails = False - else: - doHitsDetails = True - kwargs.setdefault("DoHitsDetails", doHitsDetails) the_tool = CompFactory.JiveXML.TrackRetriever(name, **kwargs) result.addPublicTool(the_tool) return result @@ -213,95 +209,129 @@ def CaloRetrieversCfg(flags, **kwargs): from LArRecUtils.LArADC2MeVCondAlgConfig import LArADC2MeVCondAlgCfg result.merge(LArADC2MeVCondAlgCfg (flags)) - rawChannelContainer = flags.Tile.RawChannelContainer - digitsContainer = "TileDigitsCnt" - if "TileDigitsFlt" in flags.Input.Collections: - digitsContainer = "TileDigitsFlt" + from AthenaConfiguration.Enums import Format + if flags.Input.Format is Format.BS: + tileDigitsContainer = "TileDigitsCnt" + + if flags.Tile.doOpt2: + tileRawChannelContainer = 'TileRawChannelOpt2' + elif flags.Tile.doOptATLAS: + tileRawChannelContainer = 'TileRawChannelFixed' + elif flags.Tile.doFitCOOL: + tileRawChannelContainer = 'TileRawChannelFitCool' + elif flags.Tile.doFit: + tileRawChannelContainer = 'TileRawChannelFit' + else: + tileRawChannelContainer = 'TileRawChannelCnt' - result.addPublicTool( - CompFactory.JiveXML.CaloClusterRetriever(name = "CaloClusterRetriever",**kwargs - ) - ) - - if flags.Common.isOnline: - doTileCellDetails = True - doTileDigit = True else: - doTileCellDetails = False - doTileDigit = False - result.addPublicTool( - CompFactory.JiveXML.CaloTileRetriever( - name = "CaloTileRetriever", - TileDigitsContainer = digitsContainer, - TileRawChannelContainer = rawChannelContainer, - DoTileCellDetails = doTileCellDetails, - DoTileDigit = doTileDigit, - DoBadTile = False, + if "TileDigitsCnt" in flags.Input.Collections: + tileDigitsContainer = "TileDigitsCnt" + elif "TileDigitsFlt" in flags.Input.Collections: + tileDigitsContainer = "TileDigitsFlt" + + if "TileRawChannelOpt2" in flags.Input.Collections: + tileRawChannelContainer = 'TileRawChannelOpt2' + elif "TileRawChannelFitCool" in flags.Input.Collections: + tileRawChannelContainer = 'TileRawChannelFitCool' + elif "TileRawChannelFit" in flags.Input.Collections: + tileRawChannelContainer = 'TileRawChannelFit' + elif "TileRawChannelCnt" in flags.Input.Collections: + tileRawChannelContainer = 'TileRawChannelCnt' + + from CaloJiveXML.CaloJiveXMLConf import JiveXML__LArDigitRetriever + theLArDigitRetriever = JiveXML__LArDigitRetriever(name="LArDigitRetriever") + theLArDigitRetriever.DoLArDigit = False + theLArDigitRetriever.DoHECDigit = False + theLArDigitRetriever.DoFCalDigit = False + + if (theLArDigitRetriever.DoLArDigit or theLArDigitRetriever.DoHECDigit or theLArDigitRetriever.DoFCalDigit): + result.addPublicTool( + CompFactory.JiveXML.LArDigitRetriever( + name="LArDigitRetriever", + DoLArDigit=False, + DoHECDigit=False, + DoFCalDigit=False, + ) ) - ) - - if flags.Common.isOnline: - doMBTSDigits = True - doMBTSCellDetails = True + else: - doMBTSDigits = False - doMBTSCellDetails = False + result.addPublicTool( + CompFactory.JiveXML.CaloFCalRetriever( + name="CaloFCalRetriever", + DoFCalCellDetails=False, + DoBadFCal=False, + ) + ) - result.addPublicTool( - CompFactory.JiveXML.CaloMBTSRetriever( - name = "CaloMBTSRetriever", - TileDigitsContainer= digitsContainer, - TileRawChannelContainer = rawChannelContainer, - DoMBTSDigits = doMBTSDigits, - DoMBTSCellDetails = doMBTSCellDetails, + result.addPublicTool( + CompFactory.JiveXML.CaloLArRetriever( + name="CaloLArRetriever", + DoLArCellDetails=False, + DoBadLAr=False, + ) ) - ) - result.addPublicTool( - CompFactory.JiveXML.CaloFCalRetriever( - name = "CaloFCalRetriever", - DoFCalCellDetails = False, - DoBadFCal = False, + result.addPublicTool( + CompFactory.JiveXML.CaloHECRetriever( + name="CaloHECRetriever", + DoHECCellDetails=False, + DoBadHEC=False, + ) ) - ) result.addPublicTool( - CompFactory.JiveXML.CaloLArRetriever( - name = "CaloLArRetriever", - DoLArCellDetails = False, - DoBadLAr = False, + CompFactory.JiveXML.CaloClusterRetriever(name = "CaloClusterRetriever",**kwargs ) ) - + result.addPublicTool( - CompFactory.JiveXML.CaloHECRetriever( - name = "CaloHECRetriever", - DoHECCellDetails = False, - DoBadHEC = False, + CompFactory.JiveXML.CaloTileRetriever( + name = "CaloTileRetriever", + TileDigitsContainer = tileDigitsContainer, + TileRawChannelContainer = tileRawChannelContainer, + DoTileCellDetails = False, + DoTileDigit = False, + DoBadTile = False, ) ) result.addPublicTool( - CompFactory.JiveXML.LArDigitRetriever( - name = "LArDigitRetriever", - DoLArDigit = False, - DoHECDigit = False, - DoFCalDigit = False, + CompFactory.JiveXML.CaloMBTSRetriever( + name = "CaloMBTSRetriever", + TileDigitsContainer= tileDigitsContainer, + TileRawChannelContainer = tileRawChannelContainer, + DoMBTSDigits = False, ) ) + return result def MuonRetrieversCfg(flags, **kwargs): result = ComponentAccumulator() - # TODO add in other retrievers - # Based on MuonJiveXML_DataTypes.py #kwargs.setdefault("StoreGateKey", "MDT_DriftCircles") - result.addPublicTool( - CompFactory.JiveXML.MdtPrepDataRetriever(name = "MdtPrepDataRetriever",**kwargs - ) - ) + if flags.Detector.EnableMuon: + # Taken from MuonJiveXML_DataTypes.py + if flags.Detector.EnableMDT: + result.addPublicTool(CompFactory.JiveXML.MdtPrepDataRetriever(name="MdtPrepDataRetriever"), **kwargs) + if flags.Detector.EnableTGC: + result.addPublicTool(CompFactory.JiveXML.TgcPrepDataRetriever(name="TgcPrepDataRetriever"), **kwargs) + if flags.Detector.EnableRPC: + result.addPublicTool(CompFactory.JiveXML.RpcPrepDataRetriever(name="RpcPrepDataRetriever"), **kwargs) + if flags.Detector.EnableCSC: + result.addPublicTool(CompFactory.JiveXML.CSCClusterRetriever(name="CSCClusterRetriever"), **kwargs) + result.addPublicTool(CompFactory.JiveXML.CscPrepDataRetriever(name="CscPrepDataRetriever"), **kwargs) + if flags.Detector.EnablesTGC: + result.addPublicTool(CompFactory.JiveXML.sTgcPrepDataRetriever(name="sTgcPrepDataRetriever"), **kwargs) + if flags.Detector.EnableMM: + result.addPublicTool(CompFactory.JiveXML.MMPrepDataRetriever(name="MMPrepDataRetriever"), **kwargs) + # TODO Not sure if below are still needed? + # data_types += ["JiveXML::TrigMuonROIRetriever/TrigMuonROIRetriever"] + # data_types += ["JiveXML::MuidTrackRetriever/MuidTrackRetriever] + # data_types += ["JiveXML::TrigRpcDataRetriever/TrigRpcDataRetriever"] + return result @@ -384,7 +414,6 @@ def xAODRetrieversCfg(flags): ) return result - def TriggerRetrieversCfg(flags): result = ComponentAccumulator() if flags.Reco.EnableTrigger: @@ -428,21 +457,16 @@ def TriggerRetrieversCfg(flags): ) return result - def AlgoJiveXMLCfg(flags, name="AlgoJiveXML", **kwargs): # This is based on a few old-style configuation files: # JiveXML_RecEx_config.py # JiveXML_jobOptionBase.py result = ComponentAccumulator() - kwargs.setdefault("AtlasRelease", getATLASVersion()) kwargs.setdefault("WriteToFile", True) - # Enable this to recreate the geometry XML files for Atlantis + kwargs.setdefault("OnlineMode", False) + ### Enable this to recreate the geometry XML files for Atlantis kwargs.setdefault("WriteGeometry", False) - if flags.Common.isOnline: - kwargs.setdefault("OnlineMode", True) - else: - kwargs.setdefault("OnlineMode", False) # This next bit sets the data types, then we set the associated public tools readAOD = False # FIXME - set this properly @@ -471,6 +495,4 @@ def AlgoJiveXMLCfg(flags, name="AlgoJiveXML", **kwargs): the_alg = CompFactory.JiveXML.AlgoJiveXML(name="AlgoJiveXML", **kwargs) result.addEventAlgo(the_alg, primary=True) - - return result diff --git a/graphics/JiveXML/src/AlgoJiveXML.cxx b/graphics/JiveXML/src/AlgoJiveXML.cxx index 33f0fad4bb8968a8753e0209b8b762d2f1b8190a..d3eb97469df0a6bde35e2949a649e32dabd72087 100755 --- a/graphics/JiveXML/src/AlgoJiveXML.cxx +++ b/graphics/JiveXML/src/AlgoJiveXML.cxx @@ -21,14 +21,7 @@ namespace JiveXML{ AlgoJiveXML::AlgoJiveXML(const std::string& name, ISvcLocator* pSvcLocator) : AthAlgorithm(name, pSvcLocator) { - //Array of tools that retrieve the data, set public and createIf as default - declareProperty("DataRetrievers", m_DataRetrievers = ToolHandleArray<IDataRetriever>( NULL ,true)); - - //Generate XMLFormatTool as default privat format tool - declareProperty("FormatTool", m_FormatTool = ToolHandle<IFormatTool>("JiveXML::XMLFormatTool/XMLFormatTool",this)); - - //Array of tools for streaming events, set public and createIf as default - declareProperty("StreamTools", m_StreamTools = ToolHandleArray<IStreamTool>(NULL,true)); + } /** @@ -37,8 +30,7 @@ namespace JiveXML{ * - Get GeometryWriters and write geometry if asked for * - Get the formatting tool * - Get the data retrievers - * - Get the streaming tools, including defaults if asked for - */ + * - Get the streaming tools, including defaults if asked for */ StatusCode AlgoJiveXML::initialize(){ //be verbose @@ -91,22 +83,16 @@ namespace JiveXML{ */ ATH_MSG_DEBUG("Retrieving streaming tools"); if (m_writeToFile){ - ATH_MSG_INFO("Adding default file streaming tool"); - m_StreamTools.push_back("JiveXML::StreamToFileTool/StreamToFileTool"); + ATH_MSG_INFO("Retrieving default file streaming tool"); + ATH_CHECK(m_StreamToFileTool.retrieve()); } /// Get the streaming tools if (m_onlineMode == true){ - m_StreamTools.push_back("JiveXML::StreamToServerTool/StreamToServerTool"); + ATH_MSG_INFO("Retrieving default server streaming tool"); + ATH_CHECK(m_StreamToFileTool.retrieve()); } - if (m_StreamTools.size() == 0) { - ATH_MSG_WARNING("No streaming tools defined, events will be created but not stored!"); - } else { - if (m_StreamTools.retrieve().isFailure()){ - ATH_MSG_ERROR("Unable to retrieve streaming tools !"); - return StatusCode::FAILURE; - } - } + /** * Get the IDataRetrievers requested in the m_dataTypes list from the toolSvc @@ -314,16 +300,17 @@ namespace JiveXML{ /** * Now stream the events to all registered streaming tools */ - ATH_MSG_DEBUG( "Starting loop over event streamers" ); - //Loop over streaming tools - ToolHandleArray<IStreamTool>::iterator StreamToolsItr = m_StreamTools.begin(); - for ( ; StreamToolsItr != m_StreamTools.end(); ++StreamToolsItr ){ - ATH_MSG_INFO("Streaming event to " << (*StreamToolsItr)->name() ); - if ( (*StreamToolsItr)->StreamEvent(eventNo, runNo, m_FormatTool->getFormattedEvent()).isFailure() ){ - ATH_MSG_WARNING( "Could not stream event to " << (*StreamToolsItr)->name() ); - } + + ATH_MSG_INFO("Streaming event to file"); + if ( (m_StreamToFileTool->StreamEvent(eventNo, runNo, m_FormatTool->getFormattedEvent()).isFailure() )){ + ATH_MSG_WARNING( "Could not stream event to file" ); + } + if(m_onlineMode==true){ + ATH_MSG_INFO("Streaming event to server"); + if ( (m_StreamToServerTool->StreamEvent(eventNo, runNo, m_FormatTool->getFormattedEvent()).isFailure() )){ + ATH_MSG_WARNING( "Could not stream event to server" ); + } } - ATH_MSG_DEBUG( "Finished loop over event streamers" ); return StatusCode::SUCCESS; } @@ -339,8 +326,9 @@ namespace JiveXML{ /// Release all the tools m_DataRetrievers.release().ignore(); m_FormatTool.release().ignore(); - m_StreamTools.release().ignore(); - + m_StreamToFileTool.release().ignore(); + m_StreamToServerTool.release().ignore(); + return StatusCode::SUCCESS; }