  | 
  
    ATLAS Offline Software
    
   | 
 
 
 
 
Tool responsible for filling an HLT result object with serialised EDM collections.  
 More...
#include <TriggerEDMSerialiserTool.h>
 | 
| StatusCode  | addCollectionToSerialise (const std::string &typeKeyAuxIDs, std::vector< Address > &addressVec) const | 
|   | Parse entry from m_collectionsToSerialize and add it to m_toSerialise.  More...
  | 
|   | 
| StatusCode  | fillPayload (const void *data, size_t sz, std::vector< uint32_t > &buffer) const | 
|   | Copy bytes from the memory into the buffer converting from char[] to uint32_t[] This function is candidate to be made global function at some point and we will need also readPayload function.  More...
  | 
|   | 
| StatusCode  | serialiseContainer (void *data, const Address &address, std::vector< uint32_t > &buffer) const | 
|   | Place inside the buffer the serialised container (can be either TP, xAOD) involves simple invocation of serialiser.  More...
  | 
|   | 
| StatusCode  | serialisexAODAuxContainer (void *data, const Address &address, std::vector< uint32_t > &buffer, SGImplSvc *evtStore) const | 
|   | Place inside the buffer serialised the xAOD Aux container involves selection and recording of dynamic variables.  More...
  | 
|   | 
| StatusCode  | serialiseTPContainer (void *data, const Address &address, std::vector< uint32_t > &buffer) const | 
|   | Place inside the buffer the serialised old type of container involves T/P conversion.  More...
  | 
|   | 
| StatusCode  | serialiseDynAux (DataObject *dObject, const Address &address, std::vector< uint32_t > &buffer, size_t &nDynWritten) const | 
|   | Add dynamic variables to the payload.  More...
  | 
|   | 
| StatusCode  | serialise (const Address &address, std::vector< uint32_t > &buffer, SGImplSvc *evtStore) const | 
|   | Retrieve data from event store, serialise and fill the buffer using one of the specific serialise methods, depending on the data type.  More...
  | 
|   | 
| StatusCode  | tryAddData (HLT::HLTResultMT &hltResult, const uint16_t id, const std::vector< uint32_t > &data, Address::Truncation truncationMode, const std::unordered_map< uint16_t, std::vector< uint32_t >> &deferredInterfaceBuffer) const | 
|   | Try appending serialised data to HLT result.  More...
  | 
|   | 
| StatusCode  | fillDebugInfo (const TruncationInfoMap &truncationInfoMap, xAOD::TrigCompositeContainer &debugInfoCont, HLT::HLTResultMT &resultToFill, SGImplSvc *evtStore) const | 
|   | Parse the truncation debug information, fill monitoring histograms, fill and record the debug info collection.  More...
  | 
|   | 
Tool responsible for filling an HLT result object with serialised EDM collections. 
Its configuration is a list of EDM classes + keys + designation of dynamic variables + HLT result IDs. According to this list, objects are looked up in the main store and if found the serialisation service is used to convert the collections into arrays of bytes. Serialised data is wrapped info a vector of 32-bit integers and prefixed with header containing description of the payload (details may change). Such fragments for subsequent collections are concatenated together to form EDM payload in HLTResultMT. The HLTResultMT object stores serialised payload for all HLT result ROBs and all of them are filled together following the IDs in the configuration list.
For unpacking, the 
- See also
 - TriggerEDMDeserialiserAlg is used 
 
Definition at line 37 of file TriggerEDMSerialiserTool.h.
 
◆ TruncationInfoMap
◆ TriggerEDMSerialiserTool()
      
        
          | TriggerEDMSerialiserTool::TriggerEDMSerialiserTool  | 
          ( | 
          const std::string &  | 
          type,  | 
        
        
           | 
           | 
          const std::string &  | 
          name,  | 
        
        
           | 
           | 
          const IInterface *  | 
          parent  | 
        
        
           | 
          ) | 
           |  | 
        
      
 
 
◆ ~TriggerEDMSerialiserTool()
  
  
      
        
          | virtual TriggerEDMSerialiserTool::~TriggerEDMSerialiserTool  | 
          ( | 
           | ) | 
           | 
         
       
   | 
  
overridevirtualdefault   | 
  
 
 
◆ activeModuleIDs()
Build a list of module IDs to serialise based on the stream tags. 
Definition at line 655 of file TriggerEDMSerialiserTool.cxx.
  656   std::set<uint16_t> activeIDs;
 
  657   for (
const eformat::helper::StreamTag& 
st : 
result.getStreamTags()) {
 
  658     if (
st.robs.empty() && 
st.dets.empty()) { 
 
  663       eformat::helper::SourceIdentifier sid(robid);
 
  664       if (sid.subdetector_id() != eformat::SubDetector::TDAQ_HLT) {
 
  667       activeIDs.insert(sid.module_id());
 
 
 
 
◆ addCollectionToSerialise()
  
  
      
        
          | StatusCode TriggerEDMSerialiserTool::addCollectionToSerialise  | 
          ( | 
          const std::string &  | 
          typeKeyAuxIDs,  | 
         
        
           | 
           | 
          std::vector< Address > &  | 
          addressVec  | 
         
        
           | 
          ) | 
           |  const | 
         
       
   | 
  
private   | 
  
 
Parse entry from m_collectionsToSerialize and add it to m_toSerialise. 
Definition at line 89 of file TriggerEDMSerialiserTool.cxx.
   93   std::vector<std::string> def;
 
   94   boost::split( def, typeKeyAuxIDs, boost::is_any_of(
";") );
 
   96   if ( def.size() < 2 ) {
 
   97     ATH_MSG_ERROR(
"Invalid EDM collection specification: " << typeKeyAuxIDs);
 
   98     return StatusCode::FAILURE;
 
  101   const std::string typeKeyAux = def[0];
 
  102   const std::string configuredType = typeKeyAux.substr( 0, typeKeyAux.find(
'#') );
 
  103   const std::string 
key = typeKeyAux.substr( typeKeyAux.find(
'#')+1, typeKeyAux.find(
'.')-typeKeyAux.find(
'#') );
 
  105   std::string transientType;
 
  106   std::string persistentType;
 
  109   if ( configuredType.find(
'_') == std::string::npos ) {
 
  110     transientType = configuredType;
 
  112     transientType  = configuredType.substr( 0, configuredType.find(
'_') );
 
  115   if ( 
m_clidSvc->getIDOfTypeName(transientType, clid).isFailure() )  {
 
  116     ATH_MSG_ERROR( 
"Can not find CLID for " << transientType << 
" that is needed for serialisation " << 
key );
 
  117     return StatusCode::FAILURE;
 
  119   ATH_MSG_VERBOSE(
"Decoded transient type: " << transientType << 
" with the CLID " << clid );
 
  120   if ( transientType == configuredType ) {
 
  121     std::string realTypeName;
 
  122     if( 
m_clidSvc->getTypeInfoNameOfID( clid, realTypeName ).isFailure() ) {
 
  123       ATH_MSG_ERROR( 
"Can not find real type name for " << transientType << 
" that is needed for serialisation " << 
key );
 
  124       return StatusCode::FAILURE;
 
  126     persistentType = transientType + 
version( realTypeName );
 
  127     ATH_MSG_VERBOSE(transientType << 
" = "<< configuredType << 
" thus obtained real type name from clid svc " << realTypeName << 
" forming persistent type name "<< persistentType );
 
  129     persistentType = configuredType;
 
  136     ATH_MSG_ERROR( 
"The type " << persistentType <<  
" is not known to ROOT serialiser" );
 
  137     return StatusCode::FAILURE;
 
  141   if ( def.size() > 2 && def[2].find(
"allowTruncation") != std::string::npos ) {
 
  146   std::vector<std::string> splitModuleIDs;
 
  147   boost::split( splitModuleIDs, def[1], boost::is_any_of(
",") );
 
  148   std::vector<uint16_t> moduleIdVec;
 
  149   for ( 
const auto& 
module: splitModuleIDs ) moduleIdVec.push_back( std::stoi( 
module ) );
 
  150   std::sort(moduleIdVec.begin(), moduleIdVec.end());
 
  152   if (moduleIdVec.empty()) {
 
  153     ATH_MSG_ERROR( 
"No HLT result module IDs given for " << typeKeyAux );
 
  154     return StatusCode::FAILURE;
 
  157   ATH_MSG_DEBUG( 
"Transient type " << transientType << 
" persistent type " << persistentType << 
" will be written to " << moduleIdVec.size() << 
" result ROBFragments with IDs: " 
  158       << moduleIdVec << 
"" );
 
  160   if ( persistentType.rfind(
"xAOD", 0) != std::string::npos ) { 
 
  162     if ( typeKeyAux.find(
'.') != std::string::npos ) { 
 
  164       const std::string allVars = typeKeyAux.substr( typeKeyAux.find(
'.')+1 );
 
  165       if (!allVars.empty()) {
 
  166         std::set<std::string> variableNames;
 
  167         boost::split( variableNames, allVars, [](
const char c){ 
return c == 
'.'; } );
 
  169           for ( 
const auto& 
el: variableNames ) {
 
  173         sel.selectAux( variableNames );
 
  182   return StatusCode::SUCCESS;
 
 
 
 
◆ fill()
  
  
      
        
          | StatusCode TriggerEDMSerialiserTool::fill  | 
          ( | 
          HLT::HLTResultMT &  | 
          resultToFill,  | 
         
        
           | 
           | 
          const EventContext &  | 
          ctx  | 
         
        
           | 
          ) | 
           |  const | 
         
       
   | 
  
overridevirtual   | 
  
 
Definition at line 402 of file TriggerEDMSerialiserTool.cxx.
  406     ATH_MSG_ERROR(
"Trying to fill a result which is not empty! Likely misconfiguration, returning a FAILURE");
 
  407     return StatusCode::FAILURE;
 
  418   auto debugInfoData = std::make_unique<xAOD::TrigCompositeContainer>();
 
  419   auto debugInfoAux  = std::make_unique<xAOD::TrigCompositeAuxContainer>();
 
  420   debugInfoData->setStore(debugInfoAux.get());
 
  421   ATH_CHECK(debugInfo.record(std::move(debugInfoData), std::move(debugInfoAux)));
 
  425   if (activeModules.empty()) {
 
  426     ATH_MSG_DEBUG(
"No active module IDs in this event. This is normal for events accepted " 
  427                   << 
"only to calibration streams. Skip all EDM serialisation.");
 
  428     return StatusCode::SUCCESS;
 
  432   std::vector<uint32_t> 
buffer;
 
  435   std::unordered_map<uint16_t, std::vector<uint32_t>> deferredInterfaceBuffer;
 
  438     std::vector<uint16_t> addressActiveModuleIds;
 
  440                           activeModules.begin(), activeModules.end(),
 
  441                           std::back_inserter(addressActiveModuleIds));
 
  442     if (addressActiveModuleIds.empty()) {
 
  444                     << 
"because its module IDs are not active in this event");
 
  457     ATH_MSG_DEBUG( 
"Serialised size of " << 
address.persTypeName() << 
" is " << thisFragmentSize << 
" bytes" );
 
  458     for (
const uint16_t id : addressActiveModuleIds) {
 
  470            deferredInterfaceBuffer.erase(
id);
 
  475         ATH_MSG_DEBUG(
"Module " << 
id << 
" payload after inserting " << 
address.persTypeName() << 
" has " 
  477         truncationInfoMap[
id].push_back({&
address, thisFragmentSize, 
true});
 
  481                         " truncated - could not add " << 
address.persTypeName() <<
 
  483         truncationInfoMap[
id].push_back({&
address, thisFragmentSize, 
false});
 
  491   return StatusCode::SUCCESS;
 
 
 
 
◆ fillDebugInfo()
Parse the truncation debug information, fill monitoring histograms, fill and record the debug info collection. 
Definition at line 538 of file TriggerEDMSerialiserTool.cxx.
  544     ATH_MSG_ERROR(
"HLT result truncation on total size! Limit of " 
  546                   << 
" MB exceeded. Flagging all module IDs as truncated.");
 
  552   for (
const auto& [
id, truncationInfoVec] : truncationInfoMap) {
 
  556       debugInfoCont.
push_back(debugInfoThisModule); 
 
  562       std::pair<std::string, size_t> largestRecorded{
"None", 0};
 
  563       std::pair<std::string, size_t> largestDropped{
"None", 0};
 
  564       std::pair<std::string, size_t> firstDropped{
"None", 0};
 
  565       moduleId(*debugInfoThisModule) = 
id;
 
  567       bool severeTruncation = 
false;
 
  568       bool truncated = 
false;
 
  569       for (
const TruncationInfo& truncationInfo : truncationInfoVec) {
 
  571         sizeSum += truncationInfo.size;
 
  572         typeNameVec(*debugInfoThisModule).push_back(truncationInfo.addrPtr->persTypeName());
 
  573         sizeVec(*debugInfoThisModule).push_back(truncationInfo.size);
 
  574         isRecordedVec(*debugInfoThisModule).push_back(
static_cast<char>(truncationInfo.recorded));
 
  575         if (truncationInfo.recorded && truncationInfo.size > largestRecorded.second) {
 
  576           largestRecorded = {truncationInfo.addrPtr->persTypeName(), truncationInfo.size};
 
  578         if (!truncationInfo.recorded && truncationInfo.size > largestDropped.second) {
 
  579           largestDropped = {truncationInfo.addrPtr->persTypeName(), truncationInfo.size};
 
  581         if (!truncationInfo.recorded && !truncated) {
 
  582           firstDropped = {truncationInfo.addrPtr->persTypeName(), truncationInfo.size};
 
  586         if (!truncationInfo.recorded) {
 
  590       totalSize(*debugInfoThisModule) = sizeSum;
 
  591       msg(severeTruncation ? MSG::ERROR : MSG::WARNING)
 
  592         << 
"HLT result truncation" << (severeTruncation ? 
"." : 
" in low priority collections.")
 
  593         << 
" Module ID: " << 
id << 
", limit: " 
  595         << sizeSum/1024. << 
" kB, largest recorded collection: " << largestRecorded.first
 
  596         << 
" (" << largestRecorded.second/1024. << 
" kB), largest dropped collection: " 
  597         << largestDropped.first << 
" (" << largestDropped.second/1024. << 
" kB), " 
  598         << 
" first dropped collection: " <<firstDropped.first << 
" (" << firstDropped.second/1024. << 
" kB)" 
  605         std::stringstream 
ss;
 
  606         ss << 
"Passing chains in this event: ";
 
  614       const std::string 
prefix = severeTruncation ? 
"" : 
"Allowed";
 
  618         prefix+
"Truncation_LargestName",
 
  619         largestRecorded.second > largestDropped.second ? largestRecorded.first : largestDropped.first);
 
  621         prefix+
"Truncation_LargestSize",
 
  622         largestRecorded.second > largestDropped.second ? largestRecorded.second/1024. : largestDropped.second/1024.);
 
  627   if (!debugInfoCont.
empty()) {
 
  628     std::vector<Address> debugInfoAddressVec;
 
  629     const std::string debugInfoID = std::string(
"xAOD::TrigCompositeContainer#")+
m_debugInfoWHKey.key()+
";0";
 
  630     const std::string debugInfoAuxID = std::string(
"xAOD::TrigCompositeAuxContainer#")+
m_debugInfoWHKey.key()+
"Aux.;0";
 
  633     std::vector<uint32_t> 
buffer;
 
  634     for (
const Address& 
address : debugInfoAddressVec) {
 
  641   return StatusCode::SUCCESS;
 
 
 
 
◆ fillPayload()
  
  
      
        
          | StatusCode TriggerEDMSerialiserTool::fillPayload  | 
          ( | 
          const void *  | 
          data,  | 
         
        
           | 
           | 
          size_t  | 
          sz,  | 
         
        
           | 
           | 
          std::vector< uint32_t > &  | 
          buffer  | 
         
        
           | 
          ) | 
           |  const | 
         
       
   | 
  
private   | 
  
 
Copy bytes from the memory into the buffer converting from char[] to uint32_t[] This function is candidate to be made global function at some point and we will need also readPayload function. 
Definition at line 198 of file TriggerEDMSerialiserTool.cxx.
  203   const size_t neededSize = std::ceil( 
double(
sz)/
sizeof(
uint32_t) );
 
  204   const size_t existingSize = 
buffer.size();
 
  205   buffer.resize(existingSize + neededSize);
 
  207   return StatusCode::SUCCESS;
 
 
 
 
◆ initialize()
  
  
      
        
          | StatusCode TriggerEDMSerialiserTool::initialize  | 
          ( | 
           | ) | 
           | 
         
       
   | 
  
overridevirtual   | 
  
 
Definition at line 37 of file TriggerEDMSerialiserTool.cxx.
   51   auto jobOptionsSvc = service<Gaudi::Interfaces::IOptionsSvc>(
"JobOptionsSvc",  
false);
 
   52   if (!jobOptionsSvc.isValid()) {
 
   53     ATH_MSG_WARNING(
"Could not retrieve JobOptionsSvc, will not update the EventSizeHardLimitMB property");
 
   56     if (jobOptionsSvc->has(
"DataFlowConfig.DF_MaxEventSizeMB")) {
 
   57       if (
m_eventSizeHardLimitMB.fromString(jobOptionsSvc->get(
"DataFlowConfig.DF_MaxEventSizeMB")).isSuccess()) {
 
   59                       << 
" from DataFlowConfig.DF_MaxEventSizeMB");
 
   62         ATH_MSG_ERROR(
"Could not convert DataFlowConfig.DF_MaxEventSizeMB to integer. Leaving EventSizeHardLimitMB=" 
   67       ATH_MSG_DEBUG(
"Could not retrieve DataFlowConfig.DF_MaxEventSizeMB from JobOptionsSvc. This is fine if running " 
   68                     << 
"offline, but should not happen online. Leaving EventSizeHardLimitMB=" 
   77       return StatusCode::FAILURE;
 
   86   return StatusCode::SUCCESS;
 
 
 
 
◆ makeHeader()
Given the ID of the collection (in address arg) insert basic streaming info into the buffer. 
Definition at line 185 of file TriggerEDMSerialiserTool.cxx.
  189   std::vector<uint32_t> serializedLabel;
 
  192   ss.serialize( 
descr, serializedLabel );
 
  193   buffer.push_back( serializedLabel.size() );
 
  194   buffer.insert( 
buffer.end(), serializedLabel.begin(), serializedLabel.end() ); 
 
  195   return StatusCode::SUCCESS;
 
 
 
 
◆ serialise()
  
  
      
        
          | StatusCode TriggerEDMSerialiserTool::serialise  | 
          ( | 
          const Address &  | 
          address,  | 
         
        
           | 
           | 
          std::vector< uint32_t > &  | 
          buffer,  | 
         
        
           | 
           | 
          SGImplSvc *  | 
          evtStore  | 
         
        
           | 
          ) | 
           |  const | 
         
       
   | 
  
private   | 
  
 
Retrieve data from event store, serialise and fill the buffer using one of the specific serialise methods, depending on the data type. 
Definition at line 375 of file TriggerEDMSerialiserTool.cxx.
  377   if ( dObj == 
nullptr ) {
 
  379     return StatusCode::SUCCESS;
 
  383   if ( rawptr == 
nullptr ) {
 
  384     ATH_MSG_DEBUG( 
"Data Object with key " << 
address.key << 
" can not be converted to void* for streaming" );
 
  385     return StatusCode::SUCCESS;
 
  398   ATH_MSG_ERROR(
"Unknown Address category - neither of xAODInterface, xAODAux, OldTP");
 
  399   return StatusCode::FAILURE;
 
 
 
 
◆ serialiseContainer()
  
  
      
        
          | StatusCode TriggerEDMSerialiserTool::serialiseContainer  | 
          ( | 
          void *  | 
          data,  | 
         
        
           | 
           | 
          const Address &  | 
          address,  | 
         
        
           | 
           | 
          std::vector< uint32_t > &  | 
          buffer  | 
         
        
           | 
          ) | 
           |  const | 
         
       
   | 
  
private   | 
  
 
Place inside the buffer the serialised container (can be either TP, xAOD) involves simple invocation of serialiser. 
Definition at line 287 of file TriggerEDMSerialiserTool.cxx.
  293   ATH_MSG_DEBUG( 
"Streamed to buffer at address " << mem << 
" of " << 
sz << 
" bytes" );
 
  295   if ( mem == 
nullptr or 
sz == 0 ) {
 
  297     return StatusCode::FAILURE;
 
  301   std::vector<uint32_t> fragment;
 
  304   if ( mem != 
nullptr ) 
delete [] 
static_cast<const char*
>( mem );
 
  308   fragment[0] = fragment.size();
 
  309   buffer.insert( 
buffer.end(), fragment.begin(), fragment.end() );
 
  311   return StatusCode::SUCCESS;
 
 
 
 
◆ serialiseDynAux()
  
  
      
        
          | StatusCode TriggerEDMSerialiserTool::serialiseDynAux  | 
          ( | 
          DataObject *  | 
          dObject,  | 
         
        
           | 
           | 
          const Address &  | 
          address,  | 
         
        
           | 
           | 
          std::vector< uint32_t > &  | 
          buffer,  | 
         
        
           | 
           | 
          size_t &  | 
          nDynWritten  | 
         
        
           | 
          ) | 
           |  const | 
         
       
   | 
  
private   | 
  
 
Add dynamic variables to the payload. 
Definition at line 212 of file TriggerEDMSerialiserTool.cxx.
  218   const SG::IAuxStoreIO* auxStoreIO = dObjAux->template cast<SG::IAuxStoreIO> (
nullptr, 
true);
 
  219   if ( auxStoreIO == 
nullptr ) {
 
  220     ATH_MSG_DEBUG( 
"Can't obtain AuxContainerBase of " << 
address.key <<  
" no dynamic variables presumably" );
 
  221     return StatusCode::SUCCESS;
 
  226   if ( selected.
empty() ) {
 
  227     ATH_MSG_VERBOSE( 
"Empty set of dynamic variables to store, do nothing" );
 
  228     return StatusCode::SUCCESS;
 
  230   ATH_MSG_DEBUG(
"Ready for serialisation of " << selected.
size() << 
" dynamic variables");
 
  235     const std::type_info* tinfo = auxStoreIO->
getIOType (auxVarID);
 
  240     TClass* 
cls = TClass::GetClass (*tinfo);
 
  244       << 
"' fulltype '" << fullTypeName << 
"' aux ID '" << auxVarID << 
"' class '" << 
cls->GetName() );
 
  248       if ( 
m_clidSvc->getIDOfTypeInfoName(fullTypeName, clid).isFailure() ) { 
 
  249         ATH_MSG_ERROR(
"Unable to obtain CLID for either typeName:" << 
typeName << 
" or fullTypeName:" << fullTypeName);
 
  250         ATH_MSG_ERROR(
"Please check if this is something which should obtain a CLID via TriggerEDMCLIDs.h");
 
  251         return StatusCode::FAILURE;
 
  258     const void* rawptr = auxStoreIO->
getIOData( auxVarID );
 
  264     if ( mem == 
nullptr or 
sz == 0 ) {
 
  266       return StatusCode::FAILURE;
 
  270     std::vector<uint32_t> fragment;
 
  276     fragment[0] = fragment.size();
 
  278     delete [] 
static_cast<const char*
>( mem );
 
  280     buffer.insert( 
buffer.end(), fragment.begin(), fragment.end() );
 
  283   return StatusCode::SUCCESS;
 
 
 
 
◆ serialiseTPContainer()
  
  
      
        
          | StatusCode TriggerEDMSerialiserTool::serialiseTPContainer  | 
          ( | 
          void *  | 
          data,  | 
         
        
           | 
           | 
          const Address &  | 
          address,  | 
         
        
           | 
           | 
          std::vector< uint32_t > &  | 
          buffer  | 
         
        
           | 
          ) | 
           |  const | 
         
       
   | 
  
private   | 
  
 
Place inside the buffer the serialised old type of container involves T/P conversion. 
Definition at line 360 of file TriggerEDMSerialiserTool.cxx.
  363   std::string converterPersistentType;
 
  372   return StatusCode::SUCCESS;
 
 
 
 
◆ serialisexAODAuxContainer()
  
  
      
        
          | StatusCode TriggerEDMSerialiserTool::serialisexAODAuxContainer  | 
          ( | 
          void *  | 
          data,  | 
         
        
           | 
           | 
          const Address &  | 
          address,  | 
         
        
           | 
           | 
          std::vector< uint32_t > &  | 
          buffer,  | 
         
        
           | 
           | 
          SGImplSvc *  | 
          evtStore  | 
         
        
           | 
          ) | 
           |  const | 
         
       
   | 
  
private   | 
  
 
Place inside the buffer serialised the xAOD Aux container involves selection and recording of dynamic variables. 
Definition at line 314 of file TriggerEDMSerialiserTool.cxx.
  328   if (data_interface != 
nullptr) {
 
  345   size_t baseSize = 
buffer.size();
 
  347     return StatusCode::SUCCESS;
 
  351   size_t nDynWritten = 0;
 
  353   if ( nDynWritten > 0 ) {
 
  355            << nDynWritten << 
"x DynAux : " << 
buffer.size()*
sizeof(
uint32_t) );
 
  357   return StatusCode::SUCCESS;
 
 
 
 
◆ tryAddData()
  
  
      
        
          | StatusCode TriggerEDMSerialiserTool::tryAddData  | 
          ( | 
          HLT::HLTResultMT &  | 
          hltResult,  | 
         
        
           | 
           | 
          const uint16_t  | 
          id,  | 
         
        
           | 
           | 
          const std::vector< uint32_t > &  | 
          data,  | 
         
        
           | 
           | 
          Address::Truncation  | 
          truncationMode,  | 
         
        
           | 
           | 
          const std::unordered_map< uint16_t, std::vector< uint32_t >> &  | 
          deferredInterfaceBuffer  | 
         
        
           | 
          ) | 
           |  const | 
         
       
   | 
  
private   | 
  
 
Try appending serialised data to HLT result. 
If data would exceed truncation threshold, don't add and flag the corresponding module ID as truncated. 
- Returns
 - FAILURE in case the truncation threshold is undefined 
 
Definition at line 494 of file TriggerEDMSerialiserTool.cxx.
  500     ATH_MSG_ERROR(
"Module ID " << 
id << 
" missing from TruncationThresholds map. Cannot determine if result needs truncation");
 
  501     return StatusCode::FAILURE;
 
  508   size_t currentTotalSizeWords = 0;
 
  510   const uint32_t currentTotalSizeBytes = currentTotalSizeWords*
sizeof(
uint32_t);
 
  517     ATH_MSG_DEBUG(
"Skipping adding data to result with module ID " << 
id << 
" because of full-result truncation");
 
  523     ATH_MSG_DEBUG(
"Skipping adding data to truncated result with module ID " << 
id);
 
  532     ATH_MSG_DEBUG(
"Adding data to result with module ID " << 
id);
 
  535   return StatusCode::SUCCESS;
 
 
 
 
◆ version()
  
  
      
        
          | std::string TriggerEDMSerialiserTool::version  | 
          ( | 
          const std::string &  | 
          name | ) | 
           | 
         
       
   | 
  
staticprivate   | 
  
 
Obtain version from the actual type name. 
Definition at line 644 of file TriggerEDMSerialiserTool.cxx.
  645   if ( 
name.find(
"DataVector") != std::string::npos ) {
 
  649   if ( 
name.find(
'_') != std::string::npos ) {
 
  650     return name.substr( 
name.find(
'_') );
 
 
 
 
◆ tester
◆ m_clidSvc
Initial value:{ this, "ClassIDSvc", "ClassIDSvc",
      "Service to translate class name to CLID" }
 
Definition at line 122 of file TriggerEDMSerialiserTool.h.
 
 
◆ m_collectionsToSerialize
  
  
      
        
          | Gaudi::Property< std::vector< std::string > > TriggerEDMSerialiserTool::m_collectionsToSerialize | 
         
       
   | 
  
private   | 
  
 
Initial value:{
    this, "CollectionsToSerialize", {},
    "EDM streaming configuration \'collectionKeyType;module1,module2,...[;allowTruncation]\' where collectionKeyType is a string "
    "formatted like for AthenaOutputStream, e.g. TYPE#SG.aux1.aux2..etc. For xAOD classes the typedef type should be "
    "used and the _vN version number is automatically detected. For old T/P classes the persistent version has to be "
    "given. Module IDs following the semicolon are the HLT result ROB module IDs to which the collection should be "
    "written. ID=0 is the main result, other IDs are used for data scouting. The optional allowTruncation "
    "indicates if the collection can be truncated without raising an ERROR.",
    "OrderedSet<std::string>"
  }
 
Definition at line 53 of file TriggerEDMSerialiserTool.h.
 
 
◆ m_debugInfoWHKey
Initial value:{
    this, "DebugInfoWHKey", "TruncationDebugInfo"
  }
 
StoreGate key for the truncation debug info object. 
Definition at line 79 of file TriggerEDMSerialiserTool.h.
 
 
◆ m_debugNavigationSummaryRHKey
Initial value:{
    this, "NavigationSummaryRHKey", "HLTNav_Summary"
  }
 
StoreGate key for the navigation summary object - with this we can print which chains accepted the event which truncated. 
Definition at line 83 of file TriggerEDMSerialiserTool.h.
 
 
◆ m_eventSizeHardLimitMB
  
  
      
        
          | Gaudi::Property<int> TriggerEDMSerialiserTool::m_eventSizeHardLimitMB | 
         
       
   | 
  
private   | 
  
 
Initial value:{
    this, "EventSizeHardLimitMB", -1,
    "Hard limit for output event size in megabytes. Set automatically in initialize from run parameters. "
    "In partition, it corresponds to DCM sbaBlockSize_MiB. Value <0 means no limit."
  }
 
Definition at line 69 of file TriggerEDMSerialiserTool.h.
 
 
◆ m_fullResultTruncationFrac
  
  
      
        
          | Gaudi::Property<float> TriggerEDMSerialiserTool::m_fullResultTruncationFrac | 
         
       
   | 
  
private   | 
  
 
Initial value:{
    this, "FullResultTruncationFrac", 0.8,
    "Fraction of EventSizeHardLimitMB which defines the limit on the total size of HLT output (sum of all modules)"
  }
 
Definition at line 74 of file TriggerEDMSerialiserTool.h.
 
 
◆ m_monTool
◆ m_saveDynamic
  
  
      
        
          | Gaudi::Property<bool> TriggerEDMSerialiserTool::m_saveDynamic | 
         
       
   | 
  
private   | 
  
 
Initial value:{
    this, "SaveDynamic", true, "If false skips serialising of dynamic variables. Use for test purpose only."
  }
 
Definition at line 63 of file TriggerEDMSerialiserTool.h.
 
 
◆ m_serializerSvc
Initial value:{ this, "Serializer", "AthenaRootSerializeSvc",
      "Service to translate transient to persistent representation" }
 
Definition at line 124 of file TriggerEDMSerialiserTool.h.
 
 
◆ m_toSerialise
  
  
      
        
          | std::vector< Address > TriggerEDMSerialiserTool::m_toSerialise | 
         
       
   | 
  
private   | 
  
 
 
◆ m_tpTool
Initial value:{ this, "TPTool", "TrigSerTPTool/TrigSerTPTool",
      "Tool to do Transient/Persistent conversion (Old EDM)"}
 
Definition at line 127 of file TriggerEDMSerialiserTool.h.
 
 
◆ m_truncationThresholds
  
  
      
        
          | Gaudi::Property<std::map<uint16_t,uint32_t> > TriggerEDMSerialiserTool::m_truncationThresholds | 
         
       
   | 
  
private   | 
  
 
Initial value:{
    this, "TruncationThresholds", {}, "HLT result truncation thresholds. Key is module ID, value is max size in bytes"
  }
 
Definition at line 66 of file TriggerEDMSerialiserTool.h.
 
 
The documentation for this class was generated from the following files:
 
void copyAuxStoreThinned(const SG::IConstAuxStore &orig, SG::IAuxStore ©, const SG::ThinningInfo *info)
Helper to copy an aux store while applying thinning.
 
def persistent(transient)
 
char data[hepevt_bytes_allocation_ATLAS]
 
Group
Properties of a chain group.
 
static TScopeAdapter ByNameNoQuiet(const std::string &name, Bool_t load=kTRUE)
 
A non-templated base class for DataBucket, allows to access the transient object address as a void*.
 
static AuxTypeRegistry & instance()
Return the singleton registry instance.
 
TrigComposite_v1 TrigComposite
Declare the latest version of the class.
 
Helper class to provide type-safe access to aux data.
 
bool fromStorable(DataObject *pDObj, T *&pTrans, bool quiet=false, IRegisterTransient *irt=0, bool isConst=true)
 
std::string getName(SG::auxid_t auxid) const
Return the name of an aux data item.
 
void addDecisionID(DecisionID id, Decision *d)
Appends the decision (given as ID) to the decision object.
 
std::string getVecTypeName(SG::auxid_t auxid) const
Return the type of the STL vector used to hold an aux data item.
 
Common base class for the auxiliary containers.
 
#define ATH_MSG_VERBOSE(x)
 
virtual const std::type_info * getIOType(SG::auxid_t auxid) const =0
Return the type of the data to be stored for one aux data item.
 
void * cast(void *p, CLID clid) const
Cast to a base pointer.
 
Interface providing I/O for a generic auxiliary store.
 
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
 
const ExtendedEventContext & getExtendedEventContext(const EventContext &ctx)
Retrieve an extended context from a context object.
 
const Decision * getTerminusNode(SG::ReadHandle< DecisionContainer > &container)
 
size_t auxid_t
Identifier for a particular aux data item.
 
bit_t size() const
Count the number of 1 bits in the set.
 
const std::set< uint16_t > & getTruncatedModuleIds() const
Getter for the truncation information.
 
std::string typeinfoName(const std::type_info &ti)
Convert a type_info to a demangled string.
 
void addTruncatedModuleId(const uint16_t moduleId, bool severeTruncation=true)
Add module ID to the list of truncated results.
 
void addSerialisedData(const uint16_t moduleId, const std::vector< uint32_t > &data)
Append serialised data (copy of input) for a given moduleId, doesn't remove existing data.
 
Default, invalid implementation of ClassID_traits.
 
DataObject * accessData(const CLID &id) const
find proxy and access its data. Returns 0 to flag failure
 
The Athena Transient Store API.
 
bool empty() const
Return true if there are no 1 bits in the set.
 
Class used to describe composite objects in the HLT.
 
uint32_t CLID
The Class ID type.
 
virtual const SG::auxid_set_t & getDynamicAuxIDs() const =0
Get the list of all dynamically created variables.
 
Class helping in dealing with dynamic branch selection.
 
const std::unordered_map< uint16_t, std::vector< uint32_t > > & getSerialisedData() const
Serialised data getter.
 
static const BaseInfoBase * find(CLID clid)
Find the BaseInfoBase instance for clid.
 
value_type push_back(value_type pElem)
Add an element to the end of the collection.
 
virtual const void * getIOData(SG::auxid_t auxid) const =0
Return a pointer to the data to be stored for one aux data item.
 
void sort(typename std::reverse_iterator< DataModel_detail::iterator< DVL > > beg, typename std::reverse_iterator< DataModel_detail::iterator< DVL > > end, const Compare &comp)
Specialization of sort for DataVector/List.
 
#define ATH_MSG_WARNING(x)
 
void Destruct(void *place) const
 
The non-template portion of the BaseInfo implementation.
 
void decisionIDs(const Decision *d, DecisionIDContainer &destination)
Extracts DecisionIDs stored in the Decision object.
 
std::string name() const
reports human redable name
 
A set of aux data identifiers.
 
Declare a monitored scalar variable.
 
Set * set_intersection(Set *set1, Set *set2)
Perform an intersection of two sets.
 
Bool_t IsComplete() const
 
bool empty() const noexcept
Returns true if the collection is empty.