Skip to content
Snippets Groups Projects
Commit deb1d8eb authored by Melissa Yexley's avatar Melissa Yexley
Browse files

seperating the stream tools in the JiveXML alg

parent ad9c79c3
No related branches found
No related tags found
No related merge requests found
......@@ -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:
......
......@@ -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:
......
......@@ -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"};
};
......
# 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
......@@ -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;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment