diff --git a/Control/StoreGate/StoreGate/StoreGate.h b/Control/StoreGate/StoreGate/StoreGate.h deleted file mode 100644 index d0999a5db85b67723cb1e7774c1c74f696d86304..0000000000000000000000000000000000000000 --- a/Control/StoreGate/StoreGate/StoreGate.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -*/ - -#ifndef STOREGATE_STOREGATE_H -#define STOREGATE_STOREGATE_H - -/** @class StoreGate - * @brief a multipleton that provides access to StoreGateSvc instances - * @author ATLAS Collaboration - * $Id: StoreGate.h,v 1.10 2003-04-16 01:58:11 calaf Exp $ - **/ - -#include "StoreGate/StoreGateSvc.h" -#include <string> - -class NullType; -class ActiveStoreSvc; - -class StoreGate { -public: - /// returns active store ptr (see ActiveStoreSvc). Can be slow: use sparingly - static StoreGateSvc* pointer(); - /// returns active store ref (see ActiveStoreSvc). Can be slow: use sparingly - static StoreGateSvc& instance(); - /// returns ptr to ActiveStoreSvc. Cache it and use it to access active store - /// multiple times - static ActiveStoreSvc* activeStoreSvc(); - /** multipleton: get a store by name - * @param sgID name of the StoreGateSvc ptr to be returned */ - static StoreGateSvc* pointer(const std::string& sgID); - /** multipleton: get a store by name - * @param sgID name of the StoreGateSvc ptr to be returned - * @throws std::runtime_error if not found*/ - static StoreGateSvc& instance(const std::string& sgID); - - friend class NullType; //remove compiler warning - -protected: - ~StoreGate(); //FIXME avoid compiler warning for private -private: - //standard singleton stuff - StoreGate(); - StoreGate(StoreGate&); - StoreGate& operator=(const StoreGate&); -}; -#endif // STOREGATE_STOREGATE_H - - - - - diff --git a/Control/StoreGate/src/StoreGate.cxx b/Control/StoreGate/src/StoreGate.cxx deleted file mode 100644 index 7d3bccb215702adc027ae0d3a404656c4d5688a3..0000000000000000000000000000000000000000 --- a/Control/StoreGate/src/StoreGate.cxx +++ /dev/null @@ -1,115 +0,0 @@ -/* - Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -*/ - -#include "StoreGate/StoreGate.h" -#include "StoreGate/ActiveStoreSvc.h" -#include "StoreGate/tools/hash_functions.h" - -#include <exception> -#include <iostream> - -#include "GaudiKernel/Bootstrap.h" -#include "GaudiKernel/Kernel.h" -#include "GaudiKernel/ISvcLocator.h" -#include "GaudiKernel/IService.h" - -using namespace std; - -ActiveStoreSvc* -getActiveStoreSvc() { - ActiveStoreSvc* pASG(0); - static const bool CREATEIF(true); - if ((Gaudi::svcLocator()->service("ActiveStoreSvc", pASG, CREATEIF)).isSuccess()) { - pASG->addRef(); //FIXME WHO RELEASES? - return pASG; - } else { -#ifndef NDEBUG - cerr << __FILE__ << ':' << __LINE__ << ": " - << "ERROR Could not locate ActiveStoreSvc " <<endl; -#endif - return 0; - } -} - -StoreGateSvc* -getStore() { - ActiveStoreSvc* pASG(0); - StoreGateSvc* pSG(0); - static const bool CREATEIF(true); - if ((Gaudi::svcLocator()->service("ActiveStoreSvc", pASG, CREATEIF)).isSuccess() && - 0 != (pSG = pASG->operator->())) { - pSG->addRef(); //FIXME WHO RELEASES? - return pSG; - } else { -#ifndef NDEBUG - cerr << __FILE__ << ':' << __LINE__ << ": " - << "ERROR Could not locate active StoreGate " <<endl; -#endif - return 0; - } -} - -StoreGateSvc* -getStore(std::string name) { - StoreGateSvc* pSGService(0); - static const bool CREATEIF(true); - if ((Gaudi::svcLocator()->service(name, pSGService, CREATEIF)).isSuccess()) { - pSGService->addRef(); - return pSGService; - } else { -#ifndef NDEBUG - cerr << __FILE__ << ':' << __LINE__ << ": " - << "ERROR Could not locate StoreGate " - << "instance named " << name << endl; -#endif - return 0; - } -} - -StoreGateSvc* -StoreGate::pointer() { - return getStore(); -} - - -StoreGateSvc& -StoreGate::instance() { - StoreGateSvc* ptr(pointer()); - if (0 == ptr) { - throw std::runtime_error("Could not locate active StoreGate "); - } - return *ptr; -} - -ActiveStoreSvc* -StoreGate::activeStoreSvc() { - return getActiveStoreSvc(); -} - -StoreGateSvc* -StoreGate::pointer(const std::string& sgID) { - return getStore(sgID); -} - - -StoreGateSvc& -StoreGate::instance(const std::string& sgID) { - StoreGateSvc* ptr(pointer(sgID)); - if (0 == ptr) { - throw std::runtime_error("Could not locate required StoreGate instance"); - } - return *ptr; -} - - - - - - - - - - - - diff --git a/Control/StoreGate/test/SGtests.cxx b/Control/StoreGate/test/SGtests.cxx index 543899ef3cfc57fd636beab9c5bccdd37783ecbf..c06235924c0ed51f47c092872ef0484e9ad3bf56 100644 --- a/Control/StoreGate/test/SGtests.cxx +++ b/Control/StoreGate/test/SGtests.cxx @@ -32,7 +32,6 @@ #include "StoreGate/SGWPtr.h" #include "StoreGate/WriteHandle.h" #include "StoreGate/ReadHandle.h" -#include "StoreGate/StoreGate.h" #include "StoreGate/StoreGateSvc.h" #include "SGTools/DataStore.h" #include "SGTools/SGVersionedKey.h" diff --git a/Control/StoreGate/test/WriteCondHandle_test.cxx b/Control/StoreGate/test/WriteCondHandle_test.cxx index 7a8329f150838affa86528a5902b39129fd3969a..2bd75d599174f4a72e19d232c2ce52d3c7b142da 100644 --- a/Control/StoreGate/test/WriteCondHandle_test.cxx +++ b/Control/StoreGate/test/WriteCondHandle_test.cxx @@ -23,7 +23,7 @@ #include "AthenaKernel/errorcheck.h" #include "AthenaKernel/ExtendedEventContext.h" #include "CxxUtils/checker_macros.h" -#include "StoreGate/StoreGate.h" +#include "StoreGate/StoreGateSvc.h" #include <cassert> #include <iostream> diff --git a/Database/RDBAccessSvc/src/RDBAccessSvc.cxx b/Database/RDBAccessSvc/src/RDBAccessSvc.cxx index edcfb9e4ce7c080877895df3da41b961d39bc544..94418c743f995e5a8d943628d7ca7fafe5736095 100755 --- a/Database/RDBAccessSvc/src/RDBAccessSvc.cxx +++ b/Database/RDBAccessSvc/src/RDBAccessSvc.cxx @@ -17,17 +17,10 @@ #include "RDBVersionAccessor.h" #include "RDBQuery.h" -#include "RelationalAccess/RelationalServiceException.h" -#include "RelationalAccess/SchemaException.h" -#include "RelationalAccess/SessionException.h" -#include "RelationalAccess/IRelationalService.h" -#include "RelationalAccess/IRelationalDomain.h" #include "RelationalAccess/ISessionProxy.h" #include "RelationalAccess/ITransaction.h" #include "RelationalAccess/SchemaException.h" #include "RelationalAccess/ConnectionService.h" -#include "RelationalAccess/IConnectionService.h" -#include "RelationalAccess/AccessMode.h" #include "RelationalAccess/ICursor.h" #include "RelationalAccess/ITable.h" #include "RelationalAccess/ISchema.h" @@ -36,14 +29,11 @@ #include "CxxUtils/checker_macros.h" #include "CoralBase/Exception.h" -#include "RelationalAccess/AuthenticationServiceException.h" - -#include "GaudiKernel/ServiceHandle.h" #include <thread> -RDBAccessSvc::RDBAccessSvc(const std::string& name, ISvcLocator* svc): - AthService(name,svc) +RDBAccessSvc::RDBAccessSvc(const std::string& name, ISvcLocator* svc) + : AthService(name,svc) { } @@ -53,6 +43,7 @@ RDBAccessSvc::~RDBAccessSvc() bool RDBAccessSvc::connect(const std::string& connName) { + std::lock_guard<std::mutex> guard(m_sessionMutex); // Check if it is the first attempt to open a connection connName if(m_sessions.find(connName)==m_sessions.end()) { ATH_MSG_DEBUG(" Trying to open the connection " << connName << " for the first time"); @@ -62,7 +53,7 @@ bool RDBAccessSvc::connect(const std::string& connName) // 3. Recordset by connection m_sessions[connName] = 0; m_openConnections[connName] = 0; - m_recordsetptrs[connName] = new RecordsetPtrMap(); + m_recordsetptrs.emplace(connName,RecordsetPtrMap()); } // Use existing Connection Proxy if available @@ -76,6 +67,7 @@ bool RDBAccessSvc::connect(const std::string& connName) coral::ISessionProxy *proxy = 0; try { proxy = conSvcH.connect(connName,coral::ReadOnly); + proxy->transaction().start(true); ATH_MSG_DEBUG("Proxy for connection " << connName << " obtained"); } catch(std::exception& e) { @@ -91,28 +83,27 @@ bool RDBAccessSvc::connect(const std::string& connName) bool RDBAccessSvc::disconnect(const std::string& connName) { - if(m_openConnections.find(connName)==m_openConnections.end()) { + auto connection = m_openConnections.find(connName); + if(connection==m_openConnections.end()) { ATH_MSG_ERROR("Wrong name for the connection: " << connName); return false; } - if(m_openConnections[connName]>0) { - m_openConnections[connName]--; + std::lock_guard<std::mutex> guard(m_sessionMutex); + if(connection->second>0) { + connection->second--; - ATH_MSG_DEBUG("Connection " << connName << " Sessions = " << m_openConnections[connName]); - - if(m_openConnections[connName]==0) { - if(m_sessions.find(connName)!=m_sessions.end()) { - delete m_sessions[connName]; - m_sessions[connName] = 0; + ATH_MSG_DEBUG("Connection " << connName << " Sessions = " << connection->second); + + if(connection->second==0) { + auto session = m_sessions.find(connName); + if(session!=m_sessions.end()) { + session->second->transaction().commit(); + delete session->second; + session->second = nullptr; } ATH_MSG_DEBUG(connName << " Disconnected!"); - - // clean up all shared recordsets for this connection - if(m_recordsetptrs.find(connName)!=m_recordsetptrs.end()) { - m_recordsetptrs[connName]->clear(); - } } } return true; @@ -123,8 +114,10 @@ bool RDBAccessSvc::shutdown(const std::string& connName) if(connName=="*Everything*") { for(const auto& ii : m_openConnections) { if(ii.second != 0) { - ATH_MSG_WARNING("Close everything: Connection: " << ii.first << " with reference count = " << ii.second << " will be closed."); - return shutdown_connection(ii.first); + ATH_MSG_INFO("Close everything: Connection: " << ii.first << " with reference count = " << ii.second << " will be closed."); + if(!shutdown_connection(ii.first)) { + return false; + } } } return true; @@ -135,33 +128,31 @@ bool RDBAccessSvc::shutdown(const std::string& connName) bool RDBAccessSvc::shutdown_connection(const std::string& connName) { - if(m_openConnections.find(connName)==m_openConnections.end()) { + auto connection = m_openConnections.find(connName); + if(connection==m_openConnections.end()) { ATH_MSG_ERROR("Wrong name for the connection: " << connName); return false; } - - m_openConnections[connName]=0; + std::lock_guard<std::mutex> guard(m_sessionMutex); + connection->second = 0; - ATH_MSG_DEBUG("Connection " << connName << " Sessions = " << m_openConnections[connName]); - if(m_sessions.find(connName)!=m_sessions.end()) { - delete m_sessions[connName]; - m_sessions[connName] = 0; + auto session = m_sessions.find(connName); + if(session!=m_sessions.end() + && session->second) { + session->second->transaction().commit(); + delete session->second; + session->second = nullptr; } ATH_MSG_DEBUG(connName << " Disconnected!"); - // clean up all shared recordsets for this connection - if(m_recordsetptrs.find(connName)!=m_recordsetptrs.end()) { - m_recordsetptrs[connName]->clear(); - } - return true; } -IRDBRecordset_ptr RDBAccessSvc::getRecordsetPtr(const std::string& node, - const std::string& tag, - const std::string& tag2node, - const std::string& connName) +IRDBRecordset_ptr RDBAccessSvc::getRecordsetPtr(const std::string& node + , const std::string& tag + , const std::string& tag2node + , const std::string& connName) { std::string key = node + "::" + tag; if(tag2node!="") @@ -169,15 +160,15 @@ IRDBRecordset_ptr RDBAccessSvc::getRecordsetPtr(const std::string& node, ATH_MSG_DEBUG("Getting RecordsetPtr with key " << key); - std::lock_guard<std::mutex> guard(m_mutex); + std::lock_guard<std::mutex> guard(m_recordsetMutex); if(!connect(connName)) { ATH_MSG_ERROR("Unable to open connection " << connName << ". Returning empty recordset"); return IRDBRecordset_ptr(new RDBRecordset(this)); } - RecordsetPtrMap* recordsets = m_recordsetptrs[connName]; - RecordsetPtrMap::const_iterator it = recordsets->find(key); - if(it != recordsets->end()) { + RecordsetPtrMap& recordsets = m_recordsetptrs[connName]; + RecordsetPtrMap::const_iterator it = recordsets.find(key); + if(it != recordsets.end()) { ATH_MSG_DEBUG("Reusing existing recordset"); disconnect(connName); return it->second; @@ -188,9 +179,6 @@ IRDBRecordset_ptr RDBAccessSvc::getRecordsetPtr(const std::string& node, coral::ISessionProxy* session = m_sessions[connName]; try { - // Start new readonly transaction - session->transaction().start(true); - // Check lookup table first std::string lookupMapKey = tag + "::" + connName; GlobalTagLookupMap::const_iterator lookupmap = m_globalTagLookup.find(lookupMapKey); @@ -209,9 +197,6 @@ IRDBRecordset_ptr RDBAccessSvc::getRecordsetPtr(const std::string& node, versionAccessor.getChildTagData(); recConcrete->getData(session,versionAccessor.getNodeName(),versionAccessor.getTagName(),versionAccessor.getTagID()); } - - // Finish the transaction - session->transaction().commit(); } catch(coral::SchemaException& se) { ATH_MSG_ERROR("Schema Exception : " << se.what()); @@ -223,18 +208,18 @@ IRDBRecordset_ptr RDBAccessSvc::getRecordsetPtr(const std::string& node, ATH_MSG_ERROR("Exception caught(...)"); } - (*recordsets)[key] = rec; + recordsets.emplace(key,rec); disconnect(connName); return rec; } -std::unique_ptr<IRDBQuery> RDBAccessSvc::getQuery(const std::string& node, - const std::string& tag, - const std::string& tag2node, - const std::string& connName) +std::unique_ptr<IRDBQuery> RDBAccessSvc::getQuery(const std::string& node + , const std::string& tag + , const std::string& tag2node + , const std::string& connName) { ATH_MSG_DEBUG("getQuery (" << node << "," << tag << "," << tag2node << "," << connName << ")"); - std::lock_guard<std::mutex> guard(m_mutex); + std::lock_guard<std::mutex> guard(m_recordsetMutex); std::unique_ptr<IRDBQuery> query; @@ -257,22 +242,16 @@ std::unique_ptr<IRDBQuery> RDBAccessSvc::getQuery(const std::string& node, } } else { - // Start new readonly transaction - session->transaction().start(true); - RDBVersionAccessor versionAccessor{node,(tag2node.empty()?node:tag2node),tag,session,msg()}; versionAccessor.getChildTagData(); childTagId = versionAccessor.getTagID(); - - // Finish the transaction - session->transaction().commit(); } if(childTagId.empty()) { ATH_MSG_WARNING("Could not get the tag for " << node << " node. Returning 0 pointer to IRDBQuery"); } else { - query = std::unique_ptr<IRDBQuery>(new RDBQuery(this,session,node,childTagId,connName)); + query = std::unique_ptr<IRDBQuery>(new RDBQuery(this,node,childTagId,connName)); } } catch(coral::SchemaException& se) { @@ -289,10 +268,10 @@ std::unique_ptr<IRDBQuery> RDBAccessSvc::getQuery(const std::string& node, return query; } -std::string RDBAccessSvc::getChildTag(const std::string& childNode, - const std::string& parentTag, - const std::string& parentNode, - const std::string& connName) +std::string RDBAccessSvc::getChildTag(const std::string& childNode + , const std::string& parentTag + , const std::string& parentNode + , const std::string& connName) { return getChildTag(childNode , parentTag @@ -301,14 +280,14 @@ std::string RDBAccessSvc::getChildTag(const std::string& childNode, , false); } -std::string RDBAccessSvc::getChildTag(const std::string& childNode, - const std::string& parentTag, - const std::string& parentNode, - const std::string& connName, - bool force) +std::string RDBAccessSvc::getChildTag(const std::string& childNode + , const std::string& parentTag + , const std::string& parentNode + , const std::string& connName + , bool force) { ATH_MSG_DEBUG("getChildTag for " << childNode << " " << parentTag << " " << parentNode); - std::lock_guard<std::mutex> guard(m_mutex); + std::lock_guard<std::mutex> guard(m_recordsetMutex); // Check lookup table first std::string lookupMapKey = parentTag + "::" + connName; @@ -333,15 +312,9 @@ std::string RDBAccessSvc::getChildTag(const std::string& childNode, std::string childTag(""); try { // We don't have lookup table for given parent tag. Go into slow mode through Version Accessor - // Start new readonly transaction coral::ISessionProxy* session = m_sessions[connName]; - session->transaction().start(true); - RDBVersionAccessor versionAccessor(childNode,parentNode,parentTag,session,msg()); versionAccessor.getChildTagData(); - - // Finish the transaction - session->transaction().commit(); childTag = versionAccessor.getTagName(); } @@ -360,12 +333,12 @@ std::string RDBAccessSvc::getChildTag(const std::string& childNode, return childTag; } -void RDBAccessSvc::getTagDetails(RDBTagDetails& tagDetails, - const std::string& tag, - const std::string& connName) +void RDBAccessSvc::getTagDetails(RDBTagDetails& tagDetails + , const std::string& tag + , const std::string& connName) { ATH_MSG_DEBUG("getTagDetails for tag: " << tag); - std::lock_guard<std::mutex> guard(m_mutex); + std::lock_guard<std::mutex> guard(m_recordsetMutex); if(!connect(connName)) { ATH_MSG_ERROR("Failed to open connection " << connName); @@ -373,9 +346,6 @@ void RDBAccessSvc::getTagDetails(RDBTagDetails& tagDetails, coral::ISessionProxy* session = m_sessions[connName]; try { - // Start new readonly transaction - session->transaction().start(true); - coral::ITable& tableTag2Node = session->nominalSchema().tableHandle("HVS_TAG2NODE"); coral::IQuery *queryTag2Node = tableTag2Node.newQuery(); queryTag2Node->addToOutputList("LOCKED"); @@ -426,10 +396,6 @@ void RDBAccessSvc::getTagDetails(RDBTagDetails& tagDetails, delete lookup; } } - // Finish the transaction - if(session->transaction().isActive()) { - session->transaction().commit(); - } } catch(coral::SchemaException& se) { ATH_MSG_INFO("Schema Exception : " << se.what()); @@ -444,8 +410,8 @@ void RDBAccessSvc::getTagDetails(RDBTagDetails& tagDetails, disconnect(connName); } -void RDBAccessSvc::getAllLeafNodes(std::vector<std::string>& list, - const std::string& connName) +void RDBAccessSvc::getAllLeafNodes(std::vector<std::string>& list + , const std::string& connName) { list.clear(); if(!connect(connName)) { @@ -455,9 +421,6 @@ void RDBAccessSvc::getAllLeafNodes(std::vector<std::string>& list, coral::ISessionProxy* session = m_sessions[connName]; try { - // Start new readonly transaction - session->transaction().start(true); - coral::ITable& tableNode = session->nominalSchema().tableHandle("HVS_NODE"); coral::IQuery *queryNode = tableNode.newQuery(); queryNode->addToOutputList("NODE_NAME"); @@ -472,11 +435,6 @@ void RDBAccessSvc::getAllLeafNodes(std::vector<std::string>& list, } delete queryNode; - - // Finish the transaction - if(session->transaction().isActive()) { - session->transaction().commit(); - } } catch(coral::SchemaException& se) { ATH_MSG_INFO("Schema Exception : " << se.what()); @@ -536,6 +494,12 @@ std::vector<std::string> RDBAccessSvc::getLockedSupportedTags(const std::string& return taglist; } +coral::ISessionProxy* RDBAccessSvc::getSession(const std::string& connName) +{ + auto sessionIt = m_sessions.find(connName); + return sessionIt == m_sessions.end() ? nullptr : sessionIt->second; +} + StatusCode RDBAccessSvc::initialize() { return StatusCode::SUCCESS; @@ -543,12 +507,6 @@ StatusCode RDBAccessSvc::initialize() StatusCode RDBAccessSvc::finalize() { - // Clean up all remaining recordsets - RecordsetPtrsByConn::iterator first_ptr_map = m_recordsetptrs.begin(); - RecordsetPtrsByConn::iterator last_ptr_map = m_recordsetptrs.end(); - for(;first_ptr_map!=last_ptr_map;++first_ptr_map) { - delete first_ptr_map->second; - } m_recordsetptrs.clear(); // Clear global tag lookup table diff --git a/Database/RDBAccessSvc/src/RDBAccessSvc.h b/Database/RDBAccessSvc/src/RDBAccessSvc.h index 1c326c0beef3e8716b48f4e86171767364d83164..317ac855f80eeb2e72ff8982b1ef15a7415c4f7f 100755 --- a/Database/RDBAccessSvc/src/RDBAccessSvc.h +++ b/Database/RDBAccessSvc/src/RDBAccessSvc.h @@ -18,7 +18,6 @@ #include "RDBAccessSvc/IRDBAccessSvc.h" #include "RDBRecordset.h" -#include "Gaudi/Property.h" #include "AthenaBaseComps/AthService.h" #include <string> @@ -30,7 +29,6 @@ class RDBRecordset; namespace coral { class ISessionProxy; - class IRelationalService; } template <class TYPE> class SvcFactory; @@ -40,10 +38,10 @@ template <class TYPE> class SvcFactory; typedef std::map<std::string, IRDBRecordset_ptr> RecordsetPtrMap; // Pointers to recordset maps by connection name -typedef std::map<std::string, RecordsetPtrMap*> RecordsetPtrsByConn; +typedef std::map<std::string, RecordsetPtrMap> RecordsetPtrsByConn; // Session map -typedef std::map<std::string, coral::ISessionProxy*, std::less<std::string> > SessionMap; +typedef std::map<std::string, coral::ISessionProxy*> SessionMap; // Lookup table for global tag contents quick access typedef std::pair<std::string, std::string> TagNameId; @@ -59,9 +57,18 @@ typedef std::map<std::string, TagNameIdByNode*> GlobalTagLookupMap; // Key - <Gl class RDBAccessSvc final : public AthService, virtual public IRDBAccessSvc { - friend class RDBRecordset; - public: + /// Standard Service Constructor + RDBAccessSvc(const std::string& name, ISvcLocator* svc); + + /// Standard Service Destructor + ~RDBAccessSvc() override; + + StatusCode initialize() override; + StatusCode finalize() override; + StatusCode queryInterface( const InterfaceID& riid, void** ppvInterface ) override; + + friend class SvcFactory<RDBAccessSvc>; /// Retrieve interface ID static const InterfaceID& interfaceID() { return IID_IRDBAccessSvc; } @@ -87,10 +94,10 @@ class RDBAccessSvc final : public AthService, virtual public IRDBAccessSvc /// tag of the HVS branch node specified by tag2node otherwise /// @param tag2node [IN] some parent of the HVS leaf node specified by node parameter /// @return pointer to the recordset object - IRDBRecordset_ptr getRecordsetPtr(const std::string& node, - const std::string& tag, - const std::string& tag2node="", - const std::string& connName = "ATLASDD") override; + IRDBRecordset_ptr getRecordsetPtr(const std::string& node + , const std::string& tag + , const std::string& tag2node="" + , const std::string& connName = "ATLASDD") override; /// Gets the tag name for the node by giving its parent node tag /// @param childNode [IN] name of the child node @@ -98,53 +105,44 @@ class RDBAccessSvc final : public AthService, virtual public IRDBAccessSvc /// @param parentNode [IN] name of the parent node /// @param fetchData [IN] if true fetch the corresponding data /// this parameter has no sence if child is the branch node - std::string getChildTag(const std::string& childNode, - const std::string& parentTag, - const std::string& parentNode, - const std::string& connName) override; + std::string getChildTag(const std::string& childNode + , const std::string& parentTag + , const std::string& parentNode + , const std::string& connName) override; - std::string getChildTag(const std::string& childNode, - const std::string& parentTag, - const std::string& parentNode, - const std::string& connName, - bool force); + std::string getChildTag(const std::string& childNode + , const std::string& parentTag + , const std::string& parentNode + , const std::string& connName + , bool force); - std::unique_ptr<IRDBQuery> getQuery(const std::string& node, - const std::string& tag, - const std::string& tag2node, - const std::string& connName) override; + std::unique_ptr<IRDBQuery> getQuery(const std::string& node + , const std::string& tag + , const std::string& tag2node + , const std::string& connName) override; - void getTagDetails(RDBTagDetails& tagDetails, - const std::string& tag, - const std::string& connName = "ATLASDD") override; + void getTagDetails(RDBTagDetails& tagDetails + , const std::string& tag + , const std::string& connName = "ATLASDD") override; - void getAllLeafNodes(std::vector<std::string>& list, - const std::string& connName = "ATLASDD"); + void getAllLeafNodes(std::vector<std::string>& list + , const std::string& connName = "ATLASDD"); std::vector<std::string> getLockedSupportedTags(const std::string& connName = "ATLASDD"); - inline MsgStream& msgStream() { return msg(); } + coral::ISessionProxy* getSession(const std::string& connName = "ATLASDD"); - StatusCode initialize() override; - StatusCode finalize() override; - StatusCode queryInterface( const InterfaceID& riid, void** ppvInterface ) override; - - friend class SvcFactory<RDBAccessSvc>; - - /// Standard Service Constructor - RDBAccessSvc(const std::string& name, ISvcLocator* svc); - - /// Standard Service Destructor - ~RDBAccessSvc() override; + inline MsgStream& msgStream() { return msg(); } private: SessionMap m_sessions; - std::map<std::string, unsigned int, std::less<std::string> > m_openConnections; + std::map<std::string, unsigned int> m_openConnections; RecordsetPtrsByConn m_recordsetptrs; GlobalTagLookupMap m_globalTagLookup; - std::mutex m_mutex; + std::mutex m_recordsetMutex; + std::mutex m_sessionMutex; bool shutdown_connection(const std::string& connName); }; diff --git a/Database/RDBAccessSvc/src/RDBQuery.cxx b/Database/RDBAccessSvc/src/RDBQuery.cxx index 008e905ceac8f0dca128640004a316ea8a5a02c1..0f13635e94fe544f631c033d684576f8a0af65be 100755 --- a/Database/RDBAccessSvc/src/RDBQuery.cxx +++ b/Database/RDBAccessSvc/src/RDBQuery.cxx @@ -5,12 +5,10 @@ #include "RDBQuery.h" #include "RDBAccessSvc.h" #include <stdexcept> -#include <iostream> #include "RelationalAccess/ICursor.h" #include "RelationalAccess/IQuery.h" #include "RelationalAccess/ISessionProxy.h" -#include "RelationalAccess/ITransaction.h" #include "RelationalAccess/ISchema.h" #include "RelationalAccess/ITable.h" #include "RelationalAccess/ITableDescription.h" @@ -24,25 +22,20 @@ #include "CxxUtils/checker_macros.h" RDBQuery::RDBQuery(RDBAccessSvc* accessSvc - , coral::ISessionProxy* session , const std::string& nodeName , const std::string& tagId , const std::string& connName) - : IRDBQuery() - , m_query(0) - , m_queryCount(0) - , m_accessSvc(accessSvc) - , m_session(session) - , m_nodeName(nodeName) - , m_tagId(tagId) - , m_connName(connName) - , m_size(0) - , m_cursor(0) + : IRDBQuery() + , m_query(nullptr) + , m_queryCount(nullptr) + , m_accessSvc(accessSvc) + , m_nodeName(nodeName) + , m_tagId(tagId) + , m_connName(connName) + , m_size(0) + , m_cursor(nullptr) + , m_executed(false) { - if (!m_accessSvc->connect(m_connName)) { - m_accessSvc->msg() << MSG::ERROR << "Can't connect to database: " - << connName << endmsg; - } } RDBQuery::~RDBQuery() @@ -53,17 +46,30 @@ RDBQuery::~RDBQuery() void RDBQuery::execute() { - if(m_accessSvc->msg().level() <= MSG::DEBUG) + if(m_executed) { + m_accessSvc->msg() << MSG::WARNING << "RDBQuery cannot be executed more than once! Query: " + << m_nodeName << ", " + << m_tagId << ", " + << m_orderField << ", " + << m_fields.size() << endmsg; + return; + } + + if(m_accessSvc->msg().level() <= MSG::DEBUG) { m_accessSvc->msg() << MSG::DEBUG << "Query execute " << m_nodeName << ", " << m_tagId << ", " << m_orderField << ", " << m_fields.size() << endmsg; + } - try - { - // ... Start readonly transaction - m_session->transaction().start(true); + if (!m_accessSvc->connect(m_connName)) { + m_accessSvc->msg() << MSG::ERROR << "Cannot connect to the database: " + << m_connName << endmsg; + throw std::runtime_error( "Cannot connect to the database " + m_connName); + } + m_executed=true; + try { // ... Get the node name and change to to Upper Case std::string upperName = m_nodeName; std::string::iterator it = upperName.begin(); @@ -73,20 +79,22 @@ void RDBQuery::execute() } // ... Create query objects - m_query = m_session->nominalSchema().newQuery(); - m_queryCount = m_session->nominalSchema().newQuery(); + m_query = m_accessSvc->getSession(m_connName)->nominalSchema().newQuery(); + m_queryCount = m_accessSvc->getSession(m_connName)->nominalSchema().newQuery(); // Add fields if(m_fields.size()>0) { // Custom fields - for(unsigned int i=0; i<m_fields.size(); ++i) + for(unsigned int i=0; i<m_fields.size(); ++i) { m_query->addToOutputList(upperName+"_DATA."+m_fields[i]); + } } else { // All fields from the table - const coral::ITableDescription& dataTableDesc = m_session->nominalSchema().tableHandle(upperName + "_DATA").description(); - for(int i=0; i<dataTableDesc.numberOfColumns(); ++i) + const coral::ITableDescription& dataTableDesc = m_accessSvc->getSession(m_connName)->nominalSchema().tableHandle(upperName + "_DATA").description(); + for(int i=0; i<dataTableDesc.numberOfColumns(); ++i) { m_query->addToOutputList(upperName+"_DATA."+dataTableDesc.columnDescription(i).name()); + } } m_queryCount->addToOutputList("COUNT("+upperName+"_DATA_ID)","SUMREC"); @@ -98,10 +106,12 @@ void RDBQuery::execute() m_queryCount->addToTableList(upperName + "_DATA2TAG"); // ... Define order - if(m_orderField.empty()) + if(m_orderField.empty()) { m_query->addToOrderList(upperName + "_DATA." + upperName + "_DATA_ID"); - else + } + else { m_query->addToOrderList(upperName + "_DATA." + m_orderField); + } // ... Define conditions coral::AttributeList bindsData ATLAS_THREAD_SAFE; @@ -127,7 +137,6 @@ void RDBQuery::execute() // ... Get the data cursor m_cursor = &(m_query->execute()); - return; } catch(coral::SchemaException& se) { @@ -150,21 +159,7 @@ long RDBQuery::size() void RDBQuery::finalize() { - if(m_cursor) - m_cursor->close(); - - if(m_session) { - try { - // finish the transaction - m_session->transaction().commit(); - } - catch(std::exception& e) { - m_accessSvc->msg() << MSG::WARNING << "QUERY Finalize: Exception : " + std::string(e.what()) << endmsg; - } - catch(...) { - m_accessSvc->msg() << MSG::WARNING << "QUERY Finalize : Exception caught... " << endmsg; - } - } + if(m_cursor) m_cursor->close(); m_accessSvc->disconnect(m_connName); } diff --git a/Database/RDBAccessSvc/src/RDBQuery.h b/Database/RDBAccessSvc/src/RDBQuery.h index b9c896368af2dbe180bc1f389d1b262a1dde7e43..a5d128ccc08496b7dc541bc9b5fa1b431c1d675c 100755 --- a/Database/RDBAccessSvc/src/RDBQuery.h +++ b/Database/RDBAccessSvc/src/RDBQuery.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ #ifndef RDBACCESSSVC_RDBQUERY_H @@ -13,7 +13,6 @@ namespace coral { class IQuery; - class ISessionProxy; class ICursor; } @@ -30,7 +29,6 @@ class RDBQuery final : public IRDBQuery { public: RDBQuery(RDBAccessSvc* accessSvc - , coral::ISessionProxy* session , const std::string& nodeName , const std::string& tagId , const std::string& connName); @@ -51,7 +49,6 @@ class RDBQuery final : public IRDBQuery coral::IQuery* m_query; coral::IQuery* m_queryCount; RDBAccessSvc* m_accessSvc; - coral::ISessionProxy* m_session; std::string m_nodeName; std::string m_tagId; std::string m_connName; @@ -59,6 +56,7 @@ class RDBQuery final : public IRDBQuery std::vector<std::string> m_fields; coral::ICursor* m_cursor; std::string m_orderField; + bool m_executed; }; #endif diff --git a/Database/RDBAccessSvc/src/RDBRecord.cxx b/Database/RDBAccessSvc/src/RDBRecord.cxx index 0da53148915aea4cee7a612182b3a6e73e336a33..660fabb93ec44d286f24ec9681901e15dede03fc 100755 --- a/Database/RDBAccessSvc/src/RDBRecord.cxx +++ b/Database/RDBAccessSvc/src/RDBRecord.cxx @@ -22,19 +22,18 @@ #include <stdexcept> #include <sstream> -#include <iostream> +#include <string> -RDBRecord::RDBRecord(const coral::AttributeList& attList, - std::string tableName): - m_values(0), - m_tableName(tableName) +RDBRecord::RDBRecord(const coral::AttributeList& attList + , std::string tableName) + : m_values(0) + , m_tableName(tableName) { // Copy attList. Try to avoid sharing, for thread-safety. m_values = new coral::AttributeList(attList.specification(), false); m_values->fastCopyData (attList); - for(unsigned int i=0; i<m_values->size(); i++) - { + for(unsigned int i=0; i<m_values->size(); i++) { std::string key = (*m_values)[i].specification().name(); m_name2Index[key] = i; } @@ -48,8 +47,9 @@ RDBRecord::~RDBRecord() bool RDBRecord::isFieldNull(const std::string& fieldName) const { FieldName2ListIndex::const_iterator it = m_name2Index.find(m_tableName+"."+fieldName); - if(it==m_name2Index.end()) + if(it==m_name2Index.end()) { throw std::runtime_error( "Wrong name for the field " + m_tableName+"."+fieldName); + } return (*m_values)[it->second].isNull(); } @@ -57,146 +57,166 @@ bool RDBRecord::isFieldNull(const std::string& fieldName) const int RDBRecord::getInt(const std::string& fieldName) const { FieldName2ListIndex::const_iterator it = m_name2Index.find(m_tableName+"."+fieldName); - if(it==m_name2Index.end()) + if(it==m_name2Index.end()) { throw std::runtime_error( "Wrong name for the field " + m_tableName+"."+fieldName); + } - if((*m_values)[it->second].specification().type()==typeid(int)) + if((*m_values)[it->second].specification().type()==typeid(int)) { return (*m_values)[it->second].data<int>(); - else if((*m_values)[it->second].specification().type()==typeid(long)) + } + else if((*m_values)[it->second].specification().type()==typeid(long)) { return (int)(*m_values)[it->second].data<long>(); - else + } + else { throw std::runtime_error( "Field " + fieldName + " is NOT of integer type\n"); + } } long RDBRecord::getLong(const std::string& fieldName) const { FieldName2ListIndex::const_iterator it = m_name2Index.find(m_tableName+"."+fieldName); - if(it==m_name2Index.end()) + if(it==m_name2Index.end()) { throw std::runtime_error( "Wrong name for the field " + m_tableName+"."+fieldName); + } - if((*m_values)[it->second].specification().type()==typeid(long)) + if((*m_values)[it->second].specification().type()==typeid(long)) { return (*m_values)[it->second].data<long>(); - else if((*m_values)[it->second].specification().type()==typeid(int)) + } + else if((*m_values)[it->second].specification().type()==typeid(int)) { return (long)(*m_values)[it->second].data<int>(); - else if((*m_values)[it->second].specification().type()==typeid(long long)) + } + else if((*m_values)[it->second].specification().type()==typeid(long long)) { return (long)(*m_values)[it->second].data<long long>(); - else - throw std::runtime_error( "Field " + fieldName + " is NOT of long type"); + } + else { + throw std::runtime_error( "Field " + fieldName + " is NOT of long type"); + } } double RDBRecord::getDouble(const std::string& fieldName) const { FieldName2ListIndex::const_iterator it = m_name2Index.find(m_tableName+"."+fieldName); - if(it==m_name2Index.end()) + if(it==m_name2Index.end()) { throw std::runtime_error( "Wrong name for the field " + m_tableName+"."+fieldName); + } - if((*m_values)[it->second].specification().type()==typeid(double)) + if((*m_values)[it->second].specification().type()==typeid(double)) { return (*m_values)[it->second].data<double>(); - else + } + else { throw std::runtime_error( "Field " + fieldName + " is NOT of double type"); + } } float RDBRecord::getFloat(const std::string& fieldName) const { FieldName2ListIndex::const_iterator it = m_name2Index.find(m_tableName+"."+fieldName); - if(it==m_name2Index.end()) + if(it==m_name2Index.end()) { throw std::runtime_error( "Wrong name for the field " + m_tableName+"."+fieldName); + } - if((*m_values)[it->second].specification().type()==typeid(float)) + if((*m_values)[it->second].specification().type()==typeid(float)) { return (*m_values)[it->second].data<float>(); - else + } + else { throw std::runtime_error( "Field " + fieldName + " is NOT of float type"); + } } std::string RDBRecord::getString(const std::string& fieldName) const { FieldName2ListIndex::const_iterator it = m_name2Index.find(m_tableName+"."+fieldName); - if(it==m_name2Index.end()) + if(it==m_name2Index.end()) { throw std::runtime_error( "Wrong name for the field " + m_tableName+"."+fieldName); + } - if((*m_values)[it->second].specification().type()==typeid(std::string)) + if((*m_values)[it->second].specification().type()==typeid(std::string)) { return (*m_values)[it->second].data<std::string>(); - else + } + else { throw std::runtime_error( "Field " + fieldName + " is NOT of string type"); + } } int RDBRecord::getInt(const std::string& fieldName, unsigned int index) const { - std::ostringstream strInd; - strInd << index; - - FieldName2ListIndex::const_iterator it = m_name2Index.find(m_tableName+"."+fieldName + "_" + strInd.str()); - if(it==m_name2Index.end()) - throw std::runtime_error("Wrong name for the array field " + m_tableName+"."+fieldName + " or index=" + strInd.str() + " is out of range"); + FieldName2ListIndex::const_iterator it = m_name2Index.find(m_tableName+"."+fieldName + "_" + std::to_string(index)); + if(it==m_name2Index.end()) { + throw std::runtime_error("Wrong name for the array field " + m_tableName+"."+fieldName + " or index=" + std::to_string(index) + " is out of range"); + } - if((*m_values)[it->second].specification().type()==typeid(int)) + if((*m_values)[it->second].specification().type()==typeid(int)) { return (*m_values)[it->second].data<int>(); - else if((*m_values)[it->second].specification().type()==typeid(long)) + } + else if((*m_values)[it->second].specification().type()==typeid(long)) { return (int)(*m_values)[it->second].data<long>(); - else + } + else { throw std::runtime_error( "Field " + fieldName + " is NOT of integer type\n"); + } } long RDBRecord::getLong(const std::string& fieldName, unsigned int index) const { - std::ostringstream strInd; - strInd << index; - - FieldName2ListIndex::const_iterator it = m_name2Index.find(m_tableName+"."+fieldName + "_" + strInd.str()); - if(it==m_name2Index.end()) - throw std::runtime_error("Wrong name for the array field " + m_tableName+"."+fieldName + " or index=" + strInd.str() + " is out of range"); + FieldName2ListIndex::const_iterator it = m_name2Index.find(m_tableName+"."+fieldName + "_" + std::to_string(index)); + if(it==m_name2Index.end()) { + throw std::runtime_error("Wrong name for the array field " + m_tableName+"."+fieldName + " or index=" + std::to_string(index) + " is out of range"); + } - if((*m_values)[it->second].specification().type()==typeid(long)) + if((*m_values)[it->second].specification().type()==typeid(long)) { return (*m_values)[it->second].data<long>(); - else if((*m_values)[it->second].specification().type()==typeid(int)) + } + else if((*m_values)[it->second].specification().type()==typeid(int)) { return (long)(*m_values)[it->second].data<int>(); - else + } + else { throw std::runtime_error( "Field " + fieldName + " is NOT of long type"); + } } double RDBRecord::getDouble(const std::string& fieldName, unsigned int index) const { - std::ostringstream strInd; - strInd << index; - - FieldName2ListIndex::const_iterator it = m_name2Index.find(m_tableName+"."+fieldName + "_" + strInd.str()); - if(it==m_name2Index.end()) - throw std::runtime_error("Wrong name for the array field " + m_tableName+"."+fieldName + " or index=" + strInd.str() + " is out of range"); + FieldName2ListIndex::const_iterator it = m_name2Index.find(m_tableName+"."+fieldName + "_" + std::to_string(index)); + if(it==m_name2Index.end()) { + throw std::runtime_error("Wrong name for the array field " + m_tableName+"."+fieldName + " or index=" + std::to_string(index) + " is out of range"); + } - if((*m_values)[it->second].specification().type()==typeid(double)) + if((*m_values)[it->second].specification().type()==typeid(double)) { return (*m_values)[it->second].data<double>(); - else + } + else { throw std::runtime_error( "Field " + fieldName + " is NOT of double type"); + } } float RDBRecord::getFloat(const std::string& fieldName, unsigned int index) const { - std::ostringstream strInd; - strInd << index; - - FieldName2ListIndex::const_iterator it = m_name2Index.find(m_tableName+"."+fieldName + "_" + strInd.str()); - if(it==m_name2Index.end()) - throw std::runtime_error("Wrong name for the array field " + m_tableName+"."+fieldName + " or index=" + strInd.str() + " is out of range"); + FieldName2ListIndex::const_iterator it = m_name2Index.find(m_tableName+"."+fieldName + "_" + std::to_string(index)); + if(it==m_name2Index.end()) { + throw std::runtime_error("Wrong name for the array field " + m_tableName+"."+fieldName + " or index=" + std::to_string(index) + " is out of range"); + } - if((*m_values)[it->second].specification().type()==typeid(float)) + if((*m_values)[it->second].specification().type()==typeid(float)) { return (*m_values)[it->second].data<float>(); - else + } + else { throw std::runtime_error( "Field " + fieldName + " is NOT of float type"); + } } std::string RDBRecord::getString(const std::string& fieldName, unsigned int index) const { - std::ostringstream strInd; - strInd << index; - - FieldName2ListIndex::const_iterator it = m_name2Index.find(m_tableName+"."+fieldName + "_" + strInd.str()); - if(it==m_name2Index.end()) - throw std::runtime_error("Wrong name for the array field " + m_tableName+"."+fieldName + " or index=" + strInd.str() + " is out of range"); + FieldName2ListIndex::const_iterator it = m_name2Index.find(m_tableName+"."+fieldName + "_" + std::to_string(index)); + if(it==m_name2Index.end()) { + throw std::runtime_error("Wrong name for the array field " + m_tableName+"."+fieldName + " or index=" + std::to_string(index) + " is out of range"); + } - if((*m_values)[it->second].specification().type()==typeid(std::string)) + if((*m_values)[it->second].specification().type()==typeid(std::string)) { return (*m_values)[it->second].data<std::string>(); - else + } + else { throw std::runtime_error( "Field " + fieldName + " is NOT of string type"); + } } bool RDBRecord::operator!=(const RDBRecord& rhs) const @@ -204,8 +224,7 @@ bool RDBRecord::operator!=(const RDBRecord& rhs) const const coral::AttributeList& myAttList = *m_values; const coral::AttributeList& rhsAttList = *rhs.m_values; - if(myAttList.size()!=rhsAttList.size()) - return true; + if(myAttList.size()!=rhsAttList.size()) return true; for(size_t i(0); i<myAttList.size(); ++i) { const coral::Attribute& myAtt = myAttList[i]; @@ -214,8 +233,9 @@ bool RDBRecord::operator!=(const RDBRecord& rhs) const for(size_t j(0); j<rhsAttList.size(); ++j) { const coral::Attribute& rhsAtt = rhsAttList[j]; if(rhsAtt.specification().name()==name) { - if(myAtt!=rhsAtt) + if(myAtt!=rhsAtt) { return true; + } exists = true; break; } diff --git a/Database/RDBAccessSvc/src/RDBRecordset.cxx b/Database/RDBAccessSvc/src/RDBRecordset.cxx index e0ab595b14552d73b8c2a9f1f56fdc248c1d540d..06e73f6726ebe42b8d28aab0c3f796139c2f570f 100755 --- a/Database/RDBAccessSvc/src/RDBRecordset.cxx +++ b/Database/RDBAccessSvc/src/RDBRecordset.cxx @@ -15,8 +15,6 @@ #include "RDBAccessSvc.h" #include "RDBRecordset.h" #include "RDBRecord.h" -#include "RDBVersionAccessor.h" -#include "RDBQuery.h" #include "RelationalAccess/ISessionProxy.h" #include "RelationalAccess/ICursor.h" @@ -38,29 +36,31 @@ #include <iostream> #include <set> -RDBRecordset::RDBRecordset(RDBAccessSvc* accessSvc): - m_tableName(""), - m_tagName(""), - m_accessSvc(accessSvc) +RDBRecordset::RDBRecordset(RDBAccessSvc* accessSvc) + : m_tableName("") + , m_tagName("") + , m_accessSvc(accessSvc) { } RDBRecordset::~RDBRecordset() { - for(unsigned int ind=0; ind<m_records.size(); ind++) - delete m_records[ind]; + for(auto record : m_records) { + delete record; + } m_records.clear(); } -void RDBRecordset::getData(coral::ISessionProxy* session, - const std::string& nodeName, - const std::string& tagName, - const std::string& tagId) +void RDBRecordset::getData(coral::ISessionProxy* session + , const std::string& nodeName + , const std::string& tagName + , const std::string& tagId) { - if(m_accessSvc->msg().level() <= MSG::DEBUG) + if(m_accessSvc->msg().level() <= MSG::DEBUG) { m_accessSvc->msg() << MSG::DEBUG << "Recordset get data " << nodeName << ", " << tagName << ", " << tagId << endmsg; + } if(session==0) { m_accessSvc->msg() << MSG::ERROR << "RT: No connection to database!" << endmsg; @@ -92,8 +92,9 @@ void RDBRecordset::getData(coral::ISessionProxy* session, // Compose the list of output fields for queryStructure const coral::ITableDescription& dataTableDesc = session->nominalSchema().tableHandle(upperName + "_DATA").description(); - for(int i=0; i<dataTableDesc.numberOfColumns(); i++) + for(int i=0; i<dataTableDesc.numberOfColumns(); i++) { queryStructure->addToOutputList(upperName + "_DATA." + dataTableDesc.columnDescription(i).name()); + } // Create table list for query >> data and data2vers tables queryStructure->addToTableList(upperName + "_DATA"); @@ -165,8 +166,7 @@ IRDBRecordset::const_iterator RDBRecordset::end() const bool RDBRecordset::operator!=(const RDBRecordset& rhs) const { - if(m_records.size()!=rhs.m_records.size()) - return true; + if(m_records.size()!=rhs.m_records.size()) return true; for(size_t i=0; i<m_records.size(); ++i) { RDBRecord* rec1 = dynamic_cast<RDBRecord*>(m_records[i]); @@ -254,23 +254,26 @@ void RDBRecordset::compare(const RDBRecordset& rec, std::ostream& os) const break; } } - if(!found) + if(!found) { uniq1.insert(i); + } } // print out results if(uniq0.size()>0) { os << "Records with the following data ids are present in recordset 0 and missing in recordset 1: " << std::endl; std::set<size_t>::const_iterator it = uniq0.begin(); - for(; it!=uniq0.end(); ++it) + for(; it!=uniq0.end(); ++it) { os << m_records[*it]->getLong(upperName+"_DATA_ID") << " "; + } os << std::endl; } if(uniq1.size()>0) { os << "Records with the following data ids are present in recordset 1 and missing in recordset 0: " << std::endl; std::set<size_t>::const_iterator it = uniq1.begin(); - for(; it!=uniq1.end(); ++it) + for(; it!=uniq1.end(); ++it) { os << rec.m_records[*it]->getLong(upperName+"_DATA_ID") << " "; + } os << std::endl; } @@ -278,6 +281,5 @@ void RDBRecordset::compare(const RDBRecordset& rec, std::ostream& os) const void RDBRecordset::setNodeName(const std::string& nodeName) { - if(m_tableName.empty()) - m_tableName = nodeName; + if(m_tableName.empty()) m_tableName = nodeName; } diff --git a/Database/RDBAccessSvc/src/RDBRecordset.h b/Database/RDBAccessSvc/src/RDBRecordset.h index 6aad45ae2dc695d484524829bb199773b358a8fd..1257db95ed122ca7c0d3973851892aa9981d8cf4 100755 --- a/Database/RDBAccessSvc/src/RDBRecordset.h +++ b/Database/RDBAccessSvc/src/RDBRecordset.h @@ -49,10 +49,10 @@ class RDBRecordset final: public IRDBRecordset /// Constructs SQL query and retrieves the data from DB /// @param session [IN] active relational session /// @param taginfo [IN] object holding information about the node tag - void getData(coral::ISessionProxy* session, - const std::string& nodeName, - const std::string& tagName, - const std::string& tagId); + void getData(coral::ISessionProxy* session + , const std::string& nodeName + , const std::string& tagName + , const std::string& tagId); /// @return number of records unsigned int size() const override; diff --git a/Database/RDBAccessSvc/src/RDBVersionAccessor.cxx b/Database/RDBAccessSvc/src/RDBVersionAccessor.cxx index c7e972e9e54fc41958a044635b2ed2b4d4668d3e..7bb67ae5133786108fe352c513e05e063e1283e1 100755 --- a/Database/RDBAccessSvc/src/RDBVersionAccessor.cxx +++ b/Database/RDBAccessSvc/src/RDBVersionAccessor.cxx @@ -18,7 +18,6 @@ #include "RelationalAccess/ICursor.h" #include "RelationalAccess/ITable.h" #include "RelationalAccess/ISchema.h" -#include "RelationalAccess/ITransaction.h" #include "RelationalAccess/IQuery.h" #include "RelationalAccess/SchemaException.h" @@ -28,24 +27,23 @@ #include "CoralBase/AttributeList.h" #include "GaudiKernel/MsgStream.h" -#include "GaudiKernel/IMessageSvc.h" #include <stdexcept> #include <sstream> -RDBVersionAccessor::RDBVersionAccessor(std::string childNode, - std::string parentNode, - std::string parentTag, - coral::ISessionProxy* session, - MsgStream& msgStream): - m_session(session), - m_childNode(childNode), - m_parentNode(parentNode), - m_parentTag(parentTag), - m_tagName(""), - m_tagID(""), - m_isChildLeaf(false), - m_msgStream(msgStream) +RDBVersionAccessor::RDBVersionAccessor(std::string childNode + , std::string parentNode + , std::string parentTag + , coral::ISessionProxy* session + , MsgStream& msgStream) + : m_session(session) + , m_childNode(childNode) + , m_parentNode(parentNode) + , m_parentTag(parentTag) + , m_tagName("") + , m_tagID("") + , m_isChildLeaf(false) + , m_msgStream(msgStream) { } @@ -54,18 +52,17 @@ void RDBVersionAccessor::getChildTagData() std::string parentNodeId, childNodeId, parentTagId; int nRows; - if(!m_session) - { + if(!m_session) { m_msgStream << MSG::ERROR << "VersionAccessor: No connection to database!" << endmsg; return; } - try - { - if(m_msgStream.level()==MSG::VERBOSE) + try { + if(m_msgStream.level()==MSG::VERBOSE) { m_msgStream << MSG::VERBOSE << "VersionAccessor: Version accessor for \n ChildNode = " << m_childNode << " ParentNode = " << m_parentNode << " ParentTag = " << m_parentTag << endmsg; + } coral::ITable& tableTag2Node = m_session->nominalSchema().tableHandle("HVS_TAG2NODE"); coral::ITable& tableNode = m_session->nominalSchema().tableHandle("HVS_NODE"); @@ -86,10 +83,8 @@ void RDBVersionAccessor::getChildTagData() coral::ICursor& cursorTag2Node = queryTag2Node->execute(); nRows = 0; - while(cursorTag2Node.next()) - { - if(++nRows>1) - { + while(cursorTag2Node.next()) { + if(++nRows>1) { delete queryTag2Node; throw std::runtime_error( "The tag " + m_parentTag + " is not unique in HVS_TAG2NODE table!"); } @@ -98,15 +93,15 @@ void RDBVersionAccessor::getChildTagData() parentTagId = attribute2String(row,"TAG_ID"); } - if(nRows==0) - { + if(nRows==0) { delete queryTag2Node; throw std::runtime_error( "The tag " + m_parentTag + " not found in HVS_TAG2NODE table!"); } delete queryTag2Node; - if(m_msgStream.level()==MSG::VERBOSE) + if(m_msgStream.level()==MSG::VERBOSE) { m_msgStream << MSG::VERBOSE << "VersionAccessor: Parent Tag Id = " << parentTagId << endmsg; + } // // STEP 2. Get NodeIDs for parentNode and child @@ -134,22 +129,21 @@ void RDBVersionAccessor::getChildTagData() coral::ICursor& cursorNodeIDs = queryNodeIDs->execute(); nRows = 0; - while(cursorNodeIDs.next()) - { - if(++nRows>2) + while(cursorNodeIDs.next()) { + if(++nRows>2) { break; + } const coral::AttributeList& row = cursorNodeIDs.currentRow(); - if(attribute2String(row,"NODE_NAME")==m_childNode) - { + if(attribute2String(row,"NODE_NAME")==m_childNode) { childNodeId = attribute2String(row,"NODE_ID"); m_isChildLeaf = (attribute2String(row,"BRANCH_FLAG")=="0"); } - else + else { parentNodeId = attribute2String(row,"NODE_ID"); + } } - if(nRows!=2 && m_childNode!=m_parentNode) - { + if(nRows!=2 && m_childNode!=m_parentNode) { delete queryNodeIDs; throw std::runtime_error("Error processing HVS_NODE, Number of fetched records !=2"); } @@ -161,8 +155,7 @@ void RDBVersionAccessor::getChildTagData() delete queryNodeIDs; - if(m_childNode==m_parentNode) - { + if(m_childNode==m_parentNode) { m_tagName = m_parentTag; m_tagID = parentTagId; return; @@ -188,8 +181,7 @@ void RDBVersionAccessor::getChildTagData() coral::AttributeList bindsNode ATLAS_THREAD_SAFE; bindsNode.extend<std::string>("nodeId"); - while(currentParrent != parentNodeId) - { + while(currentParrent != parentNodeId) { // // Query: "SELECT PARENT_ID FROM HVS_NODE WHERE NODE_ID='currentChild'" // @@ -206,18 +198,15 @@ void RDBVersionAccessor::getChildTagData() nRows = 0; // Process Query results - while(cursorNode.next()) - { - if(++nRows>1) - { + while(cursorNode.next()) { + if(++nRows>1) { delete queryNode; throw std::runtime_error("The node " + currentChild + " has more than one parent!"); } const coral::AttributeList& row = cursorNode.currentRow(); - if(row[0].isNull()) - { + if(row[0].isNull()) { delete queryNode; throw std::runtime_error("The requested child and parent nodes are not on the same branch!"); } @@ -226,8 +215,7 @@ void RDBVersionAccessor::getChildTagData() currentChild = currentParrent; path.push_back(currentParrent); } - if(nRows==0) - { + if(nRows==0) { delete queryNode; throw std::runtime_error("The node " + currentChild + " has no parent!"); } @@ -245,8 +233,7 @@ void RDBVersionAccessor::getChildTagData() bindsLtag2Ltag.extend<std::string>("parentN"); - for(unsigned int ind=1; ind<path.size(); ind++) - { + for(unsigned int ind=1; ind<path.size(); ind++) { // Query: "SELECT CHILD_TAG FROM HVS_LTAG2LTAG WHERE // CHILD_NODE = 'path[path.size()-ind-1]' AND // PARENT_TAG = 'parentTagId' AND @@ -267,10 +254,8 @@ void RDBVersionAccessor::getChildTagData() nRows = 0; // Process Query results - while(cursorLtag2Ltag.next()) - { - if(++nRows>1) - { + while(cursorLtag2Ltag.next()) { + if(++nRows>1) { delete queryLtag2Ltag; throw std::runtime_error("Version " + parentTagId + " has more than one child of type " + path[path.size()-ind-1] + "!"); @@ -279,17 +264,16 @@ void RDBVersionAccessor::getChildTagData() const coral::AttributeList& row = cursorLtag2Ltag.currentRow(); parentTagId = attribute2String(row,"CHILD_TAG"); } - if(nRows==0) - { + if(nRows==0) { delete queryLtag2Ltag; throw std::runtime_error("Version " + parentTagId + " has no child of type " + path[path.size()-ind-1] + "!"); } delete queryLtag2Ltag; - if(m_msgStream.level()==MSG::VERBOSE) + if(m_msgStream.level()==MSG::VERBOSE) { m_msgStream << MSG::VERBOSE << "VersionAccessor: Parent Tag Id = " << parentTagId << endmsg; - + } } // @@ -311,10 +295,8 @@ void RDBVersionAccessor::getChildTagData() coral::ICursor& cursorTagName = queryTagName->execute(); nRows = 0; - while(cursorTagName.next()) - { - if(++nRows>1) - { + while(cursorTagName.next()) { + if(++nRows>1) { delete queryTagName; throw std::runtime_error("More than one record retrieved when getting tag name for given ID"); } @@ -324,8 +306,9 @@ void RDBVersionAccessor::getChildTagData() m_tagName =attribute2String(row,"TAG_NAME"); m_tagID = parentTagId; - if(m_msgStream.level()==MSG::VERBOSE) + if(m_msgStream.level()==MSG::VERBOSE) { m_msgStream << MSG::VERBOSE << "VersionAccessor: Child Tag Name = " << m_tagName << endmsg; + } } delete queryTagName; diff --git a/Database/RDBAccessSvc/src/RDBVersionAccessor.h b/Database/RDBAccessSvc/src/RDBVersionAccessor.h index 19681e013e4390f298a4dfab5953b2a902e5eca7..e42b3db523ae3c6dc12305dd888a05862eca04ea 100755 --- a/Database/RDBAccessSvc/src/RDBVersionAccessor.h +++ b/Database/RDBAccessSvc/src/RDBVersionAccessor.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ /** @@ -12,8 +12,8 @@ * $Id: RDBVersionAccessor.h,v 1.11 2006-05-11 22:34:39 tsulaia Exp $ */ -#ifndef _RDB_VERSIONACCESSOR_H_ -#define _RDB_VERSIONACCESSOR_H_ +#ifndef RDBACCESSSVC_RDBVERSIONACCESSOR_H +#define RDBACCESSSVC_RDBVERSIONACCESSOR_H #include <string> #include "GaudiKernel/MsgStream.h" @@ -41,11 +41,11 @@ class RDBVersionAccessor /// @param parentNode [IN] parent node name /// @param parentTag [IN] parent tag name /// @param session [IN] active relational session - RDBVersionAccessor(std::string childNode, - std::string parentNode, - std::string parentTag, - coral::ISessionProxy* session, - MsgStream& stream); + RDBVersionAccessor(std::string childNode + , std::string parentNode + , std::string parentTag + , coral::ISessionProxy* session + , MsgStream& stream); /// Constructs SQL query and retrieves child tag ID and Name from DB void getChildTagData(); @@ -68,8 +68,8 @@ class RDBVersionAccessor RDBVersionAccessor(); // Convert attribute value to std::string - std::string attribute2String(const coral::AttributeList& attList, - std::string fieldName); + std::string attribute2String(const coral::AttributeList& attList + , std::string fieldName); coral::ISessionProxy* m_session; diff --git a/Database/RDBAccessSvc/src/SourceCompAlg.h b/Database/RDBAccessSvc/src/SourceCompAlg.h index 62df92bbd0f11780e9113f9736ed671cf0bcbb4a..2382314be51902a6c996971c6924e33aef055520 100644 --- a/Database/RDBAccessSvc/src/SourceCompAlg.h +++ b/Database/RDBAccessSvc/src/SourceCompAlg.h @@ -6,7 +6,6 @@ #define RDBACCESSSVC_SOURCECOMPALG_H #include "AthenaBaseComps/AthAlgorithm.h" -#include "RDBAccessSvc/IRDBAccessSvc.h" #include <string> #include <fstream> diff --git a/Event/ByteStreamCnvSvc/ByteStreamCnvSvc/ByteStreamInputSvc.h b/Event/ByteStreamCnvSvc/ByteStreamCnvSvc/ByteStreamInputSvc.h index fb7498dd3105ffea65b3ab432517f40e5e1f5d97..0bf7f2d8accd372b9cc3aecb0494655917784741 100644 --- a/Event/ByteStreamCnvSvc/ByteStreamCnvSvc/ByteStreamInputSvc.h +++ b/Event/ByteStreamCnvSvc/ByteStreamCnvSvc/ByteStreamInputSvc.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ #ifndef BYTESTREAMCNVSVC_BYTESTREAMINPUTSVC_H @@ -38,7 +38,7 @@ public: virtual const RawEvent* currentEvent() const = 0; /// virtual method for accessing the current event status virtual unsigned int currentEventStatus() const; - virtual std::pair<long,std::string> getBlockIterator(const std::string /* file */); + virtual std::pair<long,std::string> getBlockIterator(const std::string& /* file */); virtual void closeBlockIterator(bool); virtual bool ready() const; virtual StatusCode generateDataHeader(); @@ -57,7 +57,7 @@ inline unsigned int ByteStreamInputSvc::currentEventStatus() const { } // Virtual methods needed for file input -inline std::pair<long,std::string> ByteStreamInputSvc::getBlockIterator(const std::string /* file */) {return std::make_pair(-1,"GUID");} +inline std::pair<long,std::string> ByteStreamInputSvc::getBlockIterator(const std::string& /* file */) {return std::make_pair(-1,"GUID");} inline void ByteStreamInputSvc::closeBlockIterator(bool) {} inline bool ByteStreamInputSvc::ready() const {return false;} inline StatusCode ByteStreamInputSvc::generateDataHeader() {return StatusCode::SUCCESS;} diff --git a/Event/ByteStreamCnvSvc/src/ByteStreamEventStorageInputSvc.cxx b/Event/ByteStreamCnvSvc/src/ByteStreamEventStorageInputSvc.cxx index a0723224e942fe54eb633efc1947a8a33a170698..9625b79dec6b5c9f4a9e28d3b7a7d076eff4fa4d 100644 --- a/Event/ByteStreamCnvSvc/src/ByteStreamEventStorageInputSvc.cxx +++ b/Event/ByteStreamCnvSvc/src/ByteStreamEventStorageInputSvc.cxx @@ -518,7 +518,7 @@ ByteStreamEventStorageInputSvc::ready() const /******************************************************************************/ std::pair<long,std::string> -ByteStreamEventStorageInputSvc::getBlockIterator(const std::string fileName) +ByteStreamEventStorageInputSvc::getBlockIterator(const std::string& fileName) { // open the file if(m_reader != 0) closeBlockIterator(); diff --git a/Event/ByteStreamCnvSvc/src/ByteStreamEventStorageInputSvc.h b/Event/ByteStreamCnvSvc/src/ByteStreamEventStorageInputSvc.h index c0a878753c4ea4487e0e81f95bc88cbc4eeb171e..e195b33e17be65fca8fbb4ad150ce8a09bda8e5d 100644 --- a/Event/ByteStreamCnvSvc/src/ByteStreamEventStorageInputSvc.h +++ b/Event/ByteStreamCnvSvc/src/ByteStreamEventStorageInputSvc.h @@ -61,7 +61,7 @@ public: virtual void validateEvent (); virtual long positionInBlock (); - virtual std::pair<long,std::string> getBlockIterator(const std::string fileName); + virtual std::pair<long,std::string> getBlockIterator(const std::string& fileName); void closeBlockIterator(bool clearMetadata=true); bool setSequentialRead (); bool ready () const; diff --git a/Event/ByteStreamCnvSvc/src/ByteStreamMergeOutputSvc.cxx b/Event/ByteStreamCnvSvc/src/ByteStreamMergeOutputSvc.cxx index 1028f743deb617f780fa85807f9ea93a57519847..d58588eef340b2f46dee7fea290c4dfe5f42631e 100644 --- a/Event/ByteStreamCnvSvc/src/ByteStreamMergeOutputSvc.cxx +++ b/Event/ByteStreamCnvSvc/src/ByteStreamMergeOutputSvc.cxx @@ -147,7 +147,7 @@ bool ByteStreamMergeOutputSvc::putEvent(const RawEvent* newEvent) { mergedEventWrite->stream_tag(event->nstream_tag(), tmp); mergedEventWrite->checksum_type(event->checksum_type()); // copy robs - for(ROBMAP::iterator it = robsToAdd.begin(), itEnd = robsToAdd.end(); it != itEnd; it++) { + for(ROBMAP::iterator it = robsToAdd.begin(), itEnd = robsToAdd.end(); it != itEnd; ++it) { mergedEventWrite->append(it->second); } // convert RawEventWrite to RawEvent @@ -160,7 +160,7 @@ bool ByteStreamMergeOutputSvc::putEvent(const RawEvent* newEvent) { } RawEvent newRawEvent(buffer); StatusCode sc = m_outSvc->putEvent(&newRawEvent) ? StatusCode::SUCCESS : StatusCode::FAILURE; - for(ROBMAP::iterator it = robsToAdd.begin(), itEnd = robsToAdd.end(); it != itEnd; it++) { + for(ROBMAP::iterator it = robsToAdd.begin(), itEnd = robsToAdd.end(); it != itEnd; ++it) { delete it->second; it->second = 0; } delete mergedEventWrite; mergedEventWrite = 0; diff --git a/Event/ByteStreamCnvSvc/src/EventSelectorByteStream.cxx b/Event/ByteStreamCnvSvc/src/EventSelectorByteStream.cxx index b481be19b4e4710ae29959caa60f4b1b6a008ef8..eb5fa9eed0407b1529763178f914b59caa31d424 100644 --- a/Event/ByteStreamCnvSvc/src/EventSelectorByteStream.cxx +++ b/Event/ByteStreamCnvSvc/src/EventSelectorByteStream.cxx @@ -182,10 +182,9 @@ StatusCode EventSelectorByteStream::reinit(lock_t& /*lock*/) { m_NumEvents = 0; bool retError = false; if (!m_helperTools.empty()) { - for (std::vector<ToolHandle<IAthenaSelectorTool> >::iterator iter = m_helperTools.begin(), - last = m_helperTools.end(); iter != last; iter++) { - if (!(*iter)->postInitialize().isSuccess()) { - ATH_MSG_FATAL("Failed to postInitialize() " << (*iter)->name()); + for (ToolHandle<IAthenaSelectorTool>& tool : m_helperTools) { + if (!tool->postInitialize().isSuccess()) { + ATH_MSG_FATAL("Failed to postInitialize() " << tool->name()); retError = true; } } @@ -248,10 +247,9 @@ StatusCode EventSelectorByteStream::finalize() { ATH_MSG_WARNING("Failed to preFinalize() CounterTool"); } } - for (std::vector<ToolHandle<IAthenaSelectorTool> >::iterator iter = m_helperTools.begin(), - last = m_helperTools.end(); iter != last; iter++) { - if (!(*iter)->preFinalize().isSuccess()) { - ATH_MSG_WARNING("Failed to preFinalize() " << (*iter)->name()); + for (ToolHandle<IAthenaSelectorTool>& tool : m_helperTools) { + if (!tool->preFinalize().isSuccess()) { + ATH_MSG_WARNING("Failed to preFinalize() " << tool->name()); } } delete m_beginIter; m_beginIter = 0; @@ -357,10 +355,9 @@ StatusCode EventSelectorByteStream::nextImpl(IEvtSelector::Context& it, return(StatusCode::SUCCESS); } // Call all selector tool preNext before starting loop - for (std::vector<ToolHandle<IAthenaSelectorTool> >::const_iterator iter = m_helperTools.begin(), - last = m_helperTools.end(); iter != last; iter++) { - if (!(*iter)->preNext().isSuccess()) { - ATH_MSG_WARNING("Failed to preNext() " << (*iter)->name()); + for (const ToolHandle<IAthenaSelectorTool>& tool : m_helperTools) { + if (!tool->preNext().isSuccess()) { + ATH_MSG_WARNING("Failed to preNext() " << tool->name()); } } if (!m_counterTool.empty()) { @@ -406,14 +403,13 @@ StatusCode EventSelectorByteStream::nextImpl(IEvtSelector::Context& it, StatusCode status(StatusCode::SUCCESS); // Build event info attribute list if (recordAttributeListImpl(lock).isFailure()) ATH_MSG_WARNING("Unable to build event info att list"); - for (std::vector<ToolHandle<IAthenaSelectorTool> >::const_iterator iter = m_helperTools.begin(), - last = m_helperTools.end(); iter != last; iter++) { - StatusCode toolStatus = (*iter)->postNext(); + for (const ToolHandle<IAthenaSelectorTool>& tool : m_helperTools) { + StatusCode toolStatus = tool->postNext(); if (toolStatus.isRecoverable()) { - ATH_MSG_INFO("Request skipping event from: " << (*iter)->name()); + ATH_MSG_INFO("Request skipping event from: " << tool->name()); status = StatusCode::RECOVERABLE; } else if (toolStatus.isFailure()) { - ATH_MSG_WARNING("Failed to postNext() " << (*iter)->name()); + ATH_MSG_WARNING("Failed to postNext() " << tool->name()); status = StatusCode::FAILURE; } } diff --git a/Event/ByteStreamCnvSvc/test/AtlCopyBSEvent.cxx b/Event/ByteStreamCnvSvc/test/AtlCopyBSEvent.cxx index 4af0f739421d2ca3a86ba9227f11c7d5b0b2c560..d7a84c2507e71f66d942dfd544bffa6153713fa5 100644 --- a/Event/ByteStreamCnvSvc/test/AtlCopyBSEvent.cxx +++ b/Event/ByteStreamCnvSvc/test/AtlCopyBSEvent.cxx @@ -189,7 +189,7 @@ int main ATLAS_NOT_THREAD_SAFE (int argc, char *argv[]) { try { if (!catalogFile.empty()) { ctlg->setWriteCatalog(*catalogFile.begin()); - for (std::vector<std::string>::const_iterator iter = catalogFile.begin(); iter != catalogFile.end(); iter++) { + for (std::vector<std::string>::const_iterator iter = catalogFile.begin(); iter != catalogFile.end(); ++iter) { ctlg->addReadCatalog(*iter); } } else { @@ -201,7 +201,7 @@ int main ATLAS_NOT_THREAD_SAFE (int argc, char *argv[]) { return -1; } ctlg->start(); - for (std::vector<std::string>::const_iterator collIter = collNames.begin(), typeIter = collTypes.begin(), collEnd = collNames.end(); collIter != collEnd; collIter++, typeIter++) { + for (std::vector<std::string>::const_iterator collIter = collNames.begin(), typeIter = collTypes.begin(), collEnd = collNames.end(); collIter != collEnd; ++collIter, ++typeIter) { try { // Open the collection and execute the query pool::ICollection* srcColl = collSvc->handle(*collIter, *typeIter, collConnect, true); @@ -270,14 +270,14 @@ int main ATLAS_NOT_THREAD_SAFE (int argc, char *argv[]) { std::sort(searchEvents.begin(),searchEvents.end()); std::cout << "Events to copy: "; - for (std::vector<uint32_t>::const_iterator itEvt1=searchEvents.begin(), itEvt2=searchEvents.end(); itEvt1!=itEvt2; itEvt1++) { + for (std::vector<uint32_t>::const_iterator itEvt1=searchEvents.begin(), itEvt2=searchEvents.end(); itEvt1!=itEvt2; ++itEvt1) { std::cout << *itEvt1 << " "; } std::cout << std::endl; EventStorage::DataWriter* pDW=NULL; //start loop over files - for (std::vector<std::string>::const_iterator it = fileNames.begin(), it_e = fileNames.end(); it != it_e; it++) { + for (std::vector<std::string>::const_iterator it = fileNames.begin(), it_e = fileNames.end(); it != it_e; ++it) { const std::string& fName=*it; std::cout << "Checking file " << fName << std::endl; DataReader *pDR = pickDataReader(fName); @@ -381,7 +381,7 @@ void eventLoop(DataReader* pDR, EventStorage::DataWriter* pDW, unsigned& nFound, if (pOffsetEvents != 0) { if (offIt == offEnd) break; ecode = pDR->getData(eventSize, &buf, *offIt); - offIt++; + ++offIt; } else { ecode = pDR->getData(eventSize,&buf); } diff --git a/Event/ByteStreamCnvSvc/test/AtlFindBSEvent.cxx b/Event/ByteStreamCnvSvc/test/AtlFindBSEvent.cxx index 49257d6eea070a31dd03188854bdb65992168a70..2a312e536f0fdb7f71c58c65f202faf6f581ce41 100644 --- a/Event/ByteStreamCnvSvc/test/AtlFindBSEvent.cxx +++ b/Event/ByteStreamCnvSvc/test/AtlFindBSEvent.cxx @@ -106,7 +106,7 @@ int main ATLAS_NOT_THREAD_SAFE (int argc, char *argv[]) //start loop over files std::vector<std::string>::const_iterator it=fileNames.begin(); std::vector<std::string>::const_iterator it_e=fileNames.end(); - for (;!found && it!=it_e;it++) { + for (;!found && it!=it_e;++it) { const std::string& fName=*it; eventCounter=0; diff --git a/Event/ByteStreamCnvSvc/test/AtlListBSEvents.cxx b/Event/ByteStreamCnvSvc/test/AtlListBSEvents.cxx index 4d7e8db67ebbcb92fb9e3bccd9df74111c6589cb..36eb619623e58172ee66f2fd12afdfd343fdd7c1 100644 --- a/Event/ByteStreamCnvSvc/test/AtlListBSEvents.cxx +++ b/Event/ByteStreamCnvSvc/test/AtlListBSEvents.cxx @@ -65,7 +65,7 @@ int main ATLAS_NOT_THREAD_SAFE (int argc, char *argv[]) std::map<SubDetectorGroup,unsigned> totalSizePerSubdet; std::map<SubDetectorGroup,unsigned>::iterator sizeit; - for(sizeit=totalSizePerSubdet.begin();sizeit!=totalSizePerSubdet.end();sizeit++) + for(sizeit=totalSizePerSubdet.begin();sizeit!=totalSizePerSubdet.end();++sizeit) sizeit->second=0; unsigned totalSize=0; @@ -111,11 +111,7 @@ int main ATLAS_NOT_THREAD_SAFE (int argc, char *argv[]) } //start loop over files - std::vector<std::string>::const_iterator it=fileNames.begin(); - std::vector<std::string>::const_iterator it_e=fileNames.end(); - for (;eventCounter<=maxEvents && it!=it_e;it++) { - const std::string& fName=*it; - + for (const std::string& fName : fileNames) { std::cout << "Checking file " << fName << std::endl; DataReader *pDR = pickDataReader(fName); @@ -250,7 +246,7 @@ int main ATLAS_NOT_THREAD_SAFE (int argc, char *argv[]) std::vector<std::pair<SubDetectorGroup,std::string> >::const_iterator nit=namesPerSubdet.begin(); std::vector<std::pair<SubDetectorGroup,std::string> >::const_iterator nit_e=namesPerSubdet.end(); unsigned sum=0; - for(;nit!=nit_e;nit++) { + for(;nit!=nit_e;++nit) { const SubDetectorGroup sd=nit->first; const std::string& name=nit->second; diff --git a/Event/EventBookkeeperTools/Root/BookkeeperTool.cxx b/Event/EventBookkeeperTools/Root/BookkeeperTool.cxx index 7222472c8130cae67c9dffb57ba406b53602214d..05da271a408bd6d91f0b414fed0e38312d58d664 100644 --- a/Event/EventBookkeeperTools/Root/BookkeeperTool.cxx +++ b/Event/EventBookkeeperTools/Root/BookkeeperTool.cxx @@ -292,14 +292,19 @@ StatusCode BookkeeperTool::loadXAODMetaData() // If no such object is found then return if (itTruthMetaDataPtr == metaDataContainer->end()) { - ATH_MSG_ERROR("Could not load weight meta data!"); - return StatusCode::FAILURE; + m_numberOfWeightVariations = 1; + ATH_MSG_DEBUG("Could not load weight meta data! Assumming 1 variation."); + return StatusCode::SUCCESS; } // Update cached weight data const std::vector<std::string> &truthWeightNames = (*itTruthMetaDataPtr)->weightNames(); m_numberOfWeightVariations = truthWeightNames.size(); + if (m_numberOfWeightVariations == 0) { + ATH_MSG_DEBUG("No variations present, setting to 1."); + m_numberOfWeightVariations = 1; + } return StatusCode::SUCCESS; #endif diff --git a/Event/EventBookkeeperTools/test/test_CutFlowSvc.py b/Event/EventBookkeeperTools/test/test_CutFlowSvc.py index 0ad4259ceef016c8570c21677e1566c23b8c3ae1..26403c15b12d9bd714b67a5a4480b67699a61ec1 100755 --- a/Event/EventBookkeeperTools/test/test_CutFlowSvc.py +++ b/Event/EventBookkeeperTools/test/test_CutFlowSvc.py @@ -4,6 +4,7 @@ Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration """ import sys +from argparse import ArgumentParser from AthenaCommon.Configurable import Configurable from AthenaConfiguration.AllConfigFlags import ConfigFlags @@ -15,9 +16,18 @@ from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg from EventBookkeeperTools.EventBookkeeperToolsConfig import CutFlowSvcCfg, CutFlowOutputList +# Argument parsing +parser = ArgumentParser(prog='dump-cbk') +parser.add_argument('input', metavar='input', type=str, nargs='?', + help='Specify the input file') +args = parser.parse_args() + # Setup configuration Configurable.configurableRun3Behavior = True -ConfigFlags.Input.Files = defaultTestFiles.AOD_MC +if args.input: + ConfigFlags.Input.Files = [args.input] +else: + ConfigFlags.Input.Files = defaultTestFiles.AOD_MC ConfigFlags.Output.AODFileName = "testAOD.pool.root" # Flags relating to multithreaded execution diff --git a/Event/PyDumper/python/Dumpers.py b/Event/PyDumper/python/Dumpers.py index 4a83826b58ffc60e36decff6a8001b388f29f7c5..fd88cdc1dc55bd44ec93245d890ea579e430eae4 100644 --- a/Event/PyDumper/python/Dumpers.py +++ b/Event/PyDumper/python/Dumpers.py @@ -50,6 +50,10 @@ Muon = getattr (Analysis, 'Muon', None) if Analysis else None jetAssocNull = cppyy.bind_object(cppyy.nullptr, JetAssociationBase) if JetAssociationBase else None muonNull = cppyy.bind_object(cppyy.nullptr, Muon) if Muon else None +InDet = getattr (cppyy.gbl, 'InDet', None) +InDetLowBetaCandidate = getattr (InDet, 'InDetLowBetaCandidate', None) +InDetLowBetaCandidateNull = cppyy.bind_object(cppyy.nullptr, InDetLowBetaCandidate) if InDetLowBetaCandidate else None + # Work around a cling bug. if hasattr(ROOT,'TrackParticleTruthCollection'): @@ -3814,7 +3818,7 @@ def dump_TrigRNNOutput (p, f): def dump_InDetLowBetaCandidate (p, f): - if p is None: + if p == InDetLowBetaCandidateNull: fprint (f, '(null)') return if hasattr (p, 'getTRTInverseBeta'): diff --git a/Event/PyDumper/python/SgDumpLib.py b/Event/PyDumper/python/SgDumpLib.py index 85387d68d093d3219eae6db828172c02f80233c2..45a1e6273dd70630157238a240e6c7a8b977775f 100644 --- a/Event/PyDumper/python/SgDumpLib.py +++ b/Event/PyDumper/python/SgDumpLib.py @@ -279,7 +279,6 @@ def _run_jobo(job, msg, options): return sc, out sh = out - from time import time logfile = tempfile.NamedTemporaryFile(prefix='sg_dumper_job_', suffix='.logfile.txt', dir=os.getcwd(), @@ -329,6 +328,7 @@ def _run_jobo(job, msg, options): return pos + import time while app_handle.poll() is None: pos = _monitor(pos) time.sleep (5) diff --git a/InnerDetector/InDetConditions/TRT_ConditionsAlgs/CMakeLists.txt b/InnerDetector/InDetConditions/TRT_ConditionsAlgs/CMakeLists.txt index eba3d78c7ee82ce7f9886a00dd1800780a8e061c..64053a00d2d8915ebb484bc5b38c2c3d91334ec4 100644 --- a/InnerDetector/InDetConditions/TRT_ConditionsAlgs/CMakeLists.txt +++ b/InnerDetector/InDetConditions/TRT_ConditionsAlgs/CMakeLists.txt @@ -5,15 +5,11 @@ atlas_subdir( TRT_ConditionsAlgs ) # External dependencies: find_package( CORAL COMPONENTS CoralBase CoralKernel RelationalAccess ) +find_package( COOL COMPONENTS CoolKernel CoolApplication ) # Component(s) in the package: atlas_add_component( TRT_ConditionsAlgs src/*.cxx src/components/*.cxx - INCLUDE_DIRS ${CORAL_INCLUDE_DIRS} - LINK_LIBRARIES LINK_LIBRARIES ${CORAL_LIBRARIES} AthenaBaseComps AthenaKernel AthenaPoolUtilities DetDescrConditions GaudiKernel GeoModelUtilities GeoPrimitives InDetIdentifier StoreGateLib TRT_ConditionsData TRT_ConditionsServicesLib TRT_ReadoutGeometry ) - -# Install files from the package: -atlas_install_joboptions( share/*.py ) -atlas_install_runtime( share/*.txt share/*.py ) - + INCLUDE_DIRS ${CORAL_INCLUDE_DIRS} ${COOL_INCLUDE_DIRS} + LINK_LIBRARIES LINK_LIBRARIES ${CORAL_LIBRARIES} ${COOL_LIBRARIES} AthenaBaseComps AthenaKernel AthenaPoolUtilities DetDescrConditions GaudiKernel GeoModelUtilities GeoPrimitives InDetIdentifier StoreGateLib TRT_ConditionsData TRT_ConditionsServicesLib TRT_ReadoutGeometry ) diff --git a/InnerDetector/InDetConditions/TRT_ConditionsNN/CMakeLists.txt b/InnerDetector/InDetConditions/TRT_ConditionsNN/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..79655d48bbc22b8a5d091c8bbb58b42bc9410324 --- /dev/null +++ b/InnerDetector/InDetConditions/TRT_ConditionsNN/CMakeLists.txt @@ -0,0 +1,23 @@ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration + +# Declare the package name: +atlas_subdir( TRT_ConditionsNN ) + +# External dependencies: +find_package( CORAL COMPONENTS CoralBase CoralKernel RelationalAccess ) +find_package( COOL COMPONENTS CoolKernel CoolApplication ) +find_package( lwtnn ) + +# Component(s) in the package: +atlas_add_library( TRT_ConditionsNNLib + src/TRTPIDNN.cxx + PUBLIC_HEADERS TRT_ConditionsNN + INCLUDE_DIRS ${LWTNN_INCLUDE_DIRS} + LINK_LIBRARIES ${LWTNN_LIBRARIES} AthenaKernel AthenaPoolUtilities Identifier GaudiKernel ) + + +atlas_add_component( TRT_ConditionsNN + src/*Alg.cxx + src/components/*.cxx + INCLUDE_DIRS ${CORAL_INCLUDE_DIRS} ${COOL_INCLUDE_DIRS} + LINK_LIBRARIES ${CORAL_LIBRARIES} ${COOL_LIBRARIES} AthenaBaseComps AthenaKernel AthenaPoolUtilities GaudiKernel StoreGateLib TRT_ConditionsNNLib ) diff --git a/InnerDetector/InDetConditions/TRT_ConditionsNN/TRT_ConditionsNN/ATLAS_CHECK_THREAD_SAFETY b/InnerDetector/InDetConditions/TRT_ConditionsNN/TRT_ConditionsNN/ATLAS_CHECK_THREAD_SAFETY new file mode 100644 index 0000000000000000000000000000000000000000..666a7e13f5a0aa733f0a9aa93ad6b7619269ebf8 --- /dev/null +++ b/InnerDetector/InDetConditions/TRT_ConditionsNN/TRT_ConditionsNN/ATLAS_CHECK_THREAD_SAFETY @@ -0,0 +1 @@ +InnerDetector/InDetConditions/TRT_ConditionsNN diff --git a/InnerDetector/InDetConditions/TRT_ConditionsNN/TRT_ConditionsNN/TRTPIDNN.h b/InnerDetector/InDetConditions/TRT_ConditionsNN/TRT_ConditionsNN/TRTPIDNN.h new file mode 100644 index 0000000000000000000000000000000000000000..a916d1bd92487cfc7615593a0db45614c49f0f08 --- /dev/null +++ b/InnerDetector/InDetConditions/TRT_ConditionsNN/TRT_ConditionsNN/TRTPIDNN.h @@ -0,0 +1,77 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ +#ifndef INDETTRTPIDNN_H +#define INDETTRTPIDNN_H + +/////////////////////////////////////////////////////////////////// +// TRTPIDNN.h, (c) ATLAS Detector software +/////////////////////////////////////////////////////////////////// + +/****************************************************************************************\ + + Class to wrap the lwtnn instance of the TRT PID NN. It is instantiated in PIDNNCondAlg. + + Author: Christian Grefe (christian.grefe@cern.ch) + +\****************************************************************************************/ +#include "GaudiKernel/StatusCode.h" +#include "AthenaKernel/CLASS_DEF.h" +#include "AthenaKernel/CondCont.h" +#include "lwtnn/LightweightGraph.hh" +#include <map> +#include <memory> +#include <string> +#include <vector> + +namespace InDet { + class TRTPIDNN { + public: + TRTPIDNN()=default; + virtual ~TRTPIDNN()=default; + + std::string getDefaultOutputNode() const { + return m_outputNode; + } + + std::string getDefaultOutputLabel() const { + return m_outputLabel; + } + + // get the structure of the scalar inputs to the NN + std::map<std::string, std::map<std::string, double>> getScalarInputs() const { + return m_scalarInputs; + } + + // get the structure of the vector inputs to the NN + std::map<std::string, std::map<std::string, std::vector<double>>> getVectorInputs() const { + return m_vectorInputs; + } + + // calculate NN response for default output node and label + double evaluate(std::map<std::string, std::map<std::string, double>>& scalarInputs, + std::map<std::string, std::map<std::string, std::vector<double>>>& vectorInputs) const { + return evaluate(scalarInputs, vectorInputs, m_outputNode, m_outputLabel); + } + + // calculate NN response + double evaluate(std::map<std::string, std::map<std::string, double>>& scalarInputs, + std::map<std::string, std::map<std::string, std::vector<double>>>& vectorInputs, + const std::string& outputNode, const std::string& outputLabel) const; + + // set up the NN + StatusCode configure(const std::string& json); + + private: + std::unique_ptr<lwt::LightweightGraph> m_nn; // the NN + lwt::GraphConfig m_nnConfig; // cofiguration of the NN + std::map<std::string, std::map<std::string, double>> m_scalarInputs; // template for the structure of the scalar inputs to the NN + std::map<std::string, std::map<std::string, std::vector<double>>> m_vectorInputs; // template for the structure of the vector inputs to the NN + std::string m_outputNode; // name of the output node of the NN + std::string m_outputLabel; // name of the output label of the NN +}; +} +CLASS_DEF(InDet::TRTPIDNN,341715853,1) +CONDCONT_DEF(InDet::TRTPIDNN,710491600); + +#endif diff --git a/InnerDetector/InDetConditions/TRT_ConditionsNN/doc/packagedoc.h b/InnerDetector/InDetConditions/TRT_ConditionsNN/doc/packagedoc.h new file mode 100644 index 0000000000000000000000000000000000000000..f77889b0c8f69ceb9e2abfa0d9c16a2751985574 --- /dev/null +++ b/InnerDetector/InDetConditions/TRT_ConditionsNN/doc/packagedoc.h @@ -0,0 +1,27 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ + +/** +@page TRT_ConditionsNN_page TRT_ConditionsNN package + +@author christian.grefe@cern.ch + +@section TRT_ConditionsNN_TRT_ConditionsNNIntro Introduction + +This package provides conditions algorithms and conditions data objects for NN-related TRT objects. + +@section TRT_ConditionsNN_TRT_ConditionsNNOverview Class Overview + + - TRTPIDNN: holds the NN representation + - TRTPIDNNCondAlg: Conditions algorithm that provides TRTPIDNN objects + + +*/ +/** + + +*/ +/** + +*/ diff --git a/InnerDetector/InDetConditions/TRT_ConditionsNN/src/TRTPIDNN.cxx b/InnerDetector/InDetConditions/TRT_ConditionsNN/src/TRTPIDNN.cxx new file mode 100644 index 0000000000000000000000000000000000000000..4ad7e38879bb0590268147aadd8ede5cadc67721 --- /dev/null +++ b/InnerDetector/InDetConditions/TRT_ConditionsNN/src/TRTPIDNN.cxx @@ -0,0 +1,74 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ +#include "TRT_ConditionsNN/TRTPIDNN.h" +#include "AthenaKernel/getMessageSvc.h" +#include "GaudiKernel/MsgStream.h" +#include <iostream> + +// lwtnn includes +//#include "lwtnn/LightweightGraph.hh" +#include "lwtnn/Exceptions.hh" +#include "lwtnn/parse_json.hh" + +// JSON parsing +#include "boost/property_tree/ptree.hpp" +#include "boost/property_tree/json_parser.hpp" +#include "boost/property_tree/exceptions.hpp" + +double InDet::TRTPIDNN::evaluate(std::map<std::string, std::map<std::string, double>>& scalarInputs, + std::map<std::string, std::map<std::string, std::vector<double>>>& vectorInputs, + const std::string& outputNode, const std::string& outputLabel) const { + MsgStream log(Athena::getMessageSvc(),"TRTPIDNN"); + const auto result = m_nn->compute(scalarInputs, vectorInputs, outputNode); + const auto itResult = result.find(outputLabel); + if (itResult == result.end()) { + log << MSG::ERROR << " unable to find output: node=" << outputNode << ", label=" << outputLabel << endmsg; + return 0.5; + } + return itResult->second; +} + +StatusCode InDet::TRTPIDNN::configure(const std::string& json) { + MsgStream log(Athena::getMessageSvc(),"TRTPIDNN"); + try { + std::istringstream inputCfg(json); + m_nnConfig = lwt::parse_json_graph(inputCfg); + } catch (boost::property_tree::ptree_error& err) { + log << MSG::ERROR << " NN not readable: " << err.what() << endmsg; + return StatusCode::FAILURE; + } + + try { + m_nn.reset(new lwt::LightweightGraph(m_nnConfig)); + } catch (lwt::NNConfigurationException& err) { + log << MSG::ERROR << " NN configuration failed: " << err.what() << endmsg; + return StatusCode::FAILURE; + } + + // set the default output node name + if (m_nnConfig.outputs.empty() or m_nnConfig.outputs.begin()->second.labels.empty()) { + log << MSG::ERROR << " unable to define NN output." << endmsg; + return StatusCode::FAILURE; + } + m_outputNode = m_nnConfig.outputs.begin()->first; + m_outputLabel = *(m_nnConfig.outputs[m_outputNode].labels.begin()); + + // store templates of the structure of the inputs to the NN + m_scalarInputs.clear(); + for (auto input : m_nnConfig.inputs) { + m_scalarInputs[input.name] = {}; + for (auto variable : input.variables) { + m_scalarInputs[input.name][variable.name] = input.defaults[variable.name]; + } + } + m_vectorInputs.clear(); + for (auto input : m_nnConfig.input_sequences) { + m_vectorInputs[input.name] = {}; + for (auto variable : input.variables) { + m_vectorInputs[input.name][variable.name] = {}; + } + } + + return StatusCode::SUCCESS; +} diff --git a/InnerDetector/InDetConditions/TRT_ConditionsNN/src/TRTPIDNNCondAlg.cxx b/InnerDetector/InDetConditions/TRT_ConditionsNN/src/TRTPIDNNCondAlg.cxx new file mode 100644 index 0000000000000000000000000000000000000000..1683027fcb2219783241938660a03cf4ff8913e0 --- /dev/null +++ b/InnerDetector/InDetConditions/TRT_ConditionsNN/src/TRTPIDNNCondAlg.cxx @@ -0,0 +1,91 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ + +#include "TRTPIDNNCondAlg.h" +#include "CoolKernel/IObject.h" + +TRTPIDNNCondAlg::TRTPIDNNCondAlg(const std::string& name + , ISvcLocator* pSvcLocator ) + : ::AthAlgorithm(name,pSvcLocator), + m_condSvc("CondSvc",name) +{} +TRTPIDNNCondAlg::~TRTPIDNNCondAlg(){} + +StatusCode TRTPIDNNCondAlg::initialize() +{ + + // CondSvc + ATH_CHECK( m_condSvc.retrieve() ); + + // Read key + ATH_CHECK( m_readKey.initialize() ); + + // Register write handle + ATH_CHECK( m_writeKey.initialize() ); + + if (m_condSvc->regHandle(this, m_writeKey).isFailure()) { + ATH_MSG_ERROR("unable to register WriteCondHandle " << m_writeKey.fullKey() << " with CondSvc"); + return StatusCode::FAILURE; + } + + return StatusCode::SUCCESS; +} + +StatusCode TRTPIDNNCondAlg::execute() +{ + ATH_MSG_DEBUG("execute " << name()); + + // Construct Write Cond Handle and check its validity + + SG::WriteCondHandle<InDet::TRTPIDNN> writeHandle{m_writeKey}; + + // Do we have a valid Write Cond Handle for current time? + if(writeHandle.isValid()) { + ATH_MSG_DEBUG("CondHandle " << writeHandle.fullKey() << " is already valid." + << ". In theory this should not be called, but may happen" + << " if multiple concurrent events are being processed out of order."); + + return StatusCode::SUCCESS; + } + + std::unique_ptr<InDet::TRTPIDNN> writeCdo{std::make_unique<InDet::TRTPIDNN>()}; + + // Read the NN configuration from the ReadHandle + SG::ReadCondHandle<CondAttrListCollection> readHandle{m_readKey}; + const CondAttrListCollection* attrListColl{*readHandle}; + if (attrListColl==nullptr or attrListColl->size() != 1) { + ATH_MSG_ERROR(" Problem reading /TRT/Calib/PID_NN cond object"); + return StatusCode::FAILURE; + } + // The NN configuration is stored as one big string in the first channel + const coral::AttributeList& attrList = attrListColl->begin()->second; + const std::string json = attrList["NN_config"].data<cool::String16M>(); + if (StatusCode::SUCCESS != writeCdo->configure(json)) { + ATH_MSG_ERROR ("Problem setting up TRTPIDNN."); + return StatusCode::FAILURE; + } + + // Assign range of writeCdo to that of the ReadHandle + EventIDRange rangeW; + + if(!readHandle.range(rangeW)) { + ATH_MSG_ERROR("Failed to retrieve validity range for " << readHandle.key()); + return StatusCode::FAILURE; + } + + // Record CDO + if(writeHandle.record(rangeW,std::move(writeCdo)).isFailure()) { + ATH_MSG_ERROR("Could not record InDet::TRTPIDNN " << writeHandle.key() + << " with EventRange " << rangeW + << " into Conditions Store"); + return StatusCode::FAILURE; + } + + ATH_MSG_INFO("Recorded InDet::TRTPIDNN " << writeHandle.key() + << " with EventRange " << rangeW + << " into Conditions Store"); + + + return StatusCode::SUCCESS; +} diff --git a/InnerDetector/InDetConditions/TRT_ConditionsNN/src/TRTPIDNNCondAlg.h b/InnerDetector/InDetConditions/TRT_ConditionsNN/src/TRTPIDNNCondAlg.h new file mode 100644 index 0000000000000000000000000000000000000000..ae2bd3338402985ff6202bbf0dce76daebc5ae3a --- /dev/null +++ b/InnerDetector/InDetConditions/TRT_ConditionsNN/src/TRTPIDNNCondAlg.h @@ -0,0 +1,38 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef TRTPIDNNCONDALG_H +#define TRTPIDNNCONDALG_H + +#include "AthenaBaseComps/AthAlgorithm.h" +#include "StoreGate/WriteCondHandleKey.h" +#include "TRT_ConditionsNN/TRTPIDNN.h" +#include "AthenaPoolUtilities/CondAttrListCollection.h" +#include "GaudiKernel/ICondSvc.h" +#include "Gaudi/Property.h" + +/****************************************************************************************\ + + Conditions algorithm to handle TRT PID NN. + + Author: Christian Grefe (christian.grefe@cern.ch) + +\****************************************************************************************/ + +class TRTPIDNNCondAlg : public AthAlgorithm +{ + public: + TRTPIDNNCondAlg(const std::string& name, ISvcLocator* pSvcLocator); + virtual ~TRTPIDNNCondAlg() override; + + virtual StatusCode initialize() override; + virtual StatusCode execute() override; + + private: + ServiceHandle<ICondSvc> m_condSvc; + SG::ReadCondHandleKey<CondAttrListCollection> m_readKey{this,"TRTPIDNNReadKey","/TRT/Calib/PID_NN","TRTPIDNN in-key"}; + SG::WriteCondHandleKey<InDet::TRTPIDNN> m_writeKey{this,"TRTPIDNNWriteKey","TRTPIDNN","TRTPIDNN out-key"}; + +}; +#endif diff --git a/InnerDetector/InDetConditions/TRT_ConditionsNN/src/components/TRT_ConditionsNN_entries.cxx b/InnerDetector/InDetConditions/TRT_ConditionsNN/src/components/TRT_ConditionsNN_entries.cxx new file mode 100644 index 0000000000000000000000000000000000000000..83ad9c0beb60d9f070948f2d5504218655a91dee --- /dev/null +++ b/InnerDetector/InDetConditions/TRT_ConditionsNN/src/components/TRT_ConditionsNN_entries.cxx @@ -0,0 +1,3 @@ +#include "../TRTPIDNNCondAlg.h" + +DECLARE_COMPONENT( TRTPIDNNCondAlg ) diff --git a/InnerDetector/InDetExample/InDetRecExample/python/TrackingCommon.py b/InnerDetector/InDetExample/InDetRecExample/python/TrackingCommon.py index 9e51a95f7036244662b70554598ab0189b48298b..68302473537b4af138bf709348b2022e21e78754 100644 --- a/InnerDetector/InDetExample/InDetRecExample/python/TrackingCommon.py +++ b/InnerDetector/InDetExample/InDetRecExample/python/TrackingCommon.py @@ -1088,7 +1088,6 @@ def getInDetTrackSummaryTool(name='InDetTrackSummaryTool',**kwargs) : doSharedHits = False, doHolesInDet = do_holes, TRT_ElectronPidTool = None, # we don't want to use those tools during pattern - TRT_ToT_dEdxTool = None, # dito PixelToTPIDTool = None) # we don't want to use those tools during pattern from TrkTrackSummaryTool.TrkTrackSummaryToolConf import Trk__TrackSummaryTool return Trk__TrackSummaryTool(name = the_name, **kwargs) @@ -1111,16 +1110,12 @@ def getInDetTrackSummaryToolSharedHits(name='InDetTrackSummaryToolSharedHits',** if 'TRT_ElectronPidTool' not in kwargs : kwargs = setDefaults( kwargs, TRT_ElectronPidTool = getInDetTRT_ElectronPidTool()) - if 'TRT_ToT_dEdxTool' not in kwargs : - kwargs = setDefaults( kwargs, TRT_ToT_dEdxTool = getInDetTRT_dEdxTool()) - if 'PixelToTPIDTool' not in kwargs : kwargs = setDefaults( kwargs, PixelToTPIDTool = getInDetPixelToTPIDTool()) from InDetRecExample.InDetJobProperties import InDetFlags kwargs = setDefaults(kwargs, - doSharedHits = InDetFlags.doSharedHits(), - minTRThitsForTRTdEdx = 1) # default is 1 + doSharedHits = InDetFlags.doSharedHits()) return getInDetTrackSummaryTool( name, **kwargs) diff --git a/InnerDetector/InDetExample/InDetRecExample/share/InDetRecConditionsAccess.py b/InnerDetector/InDetExample/InDetRecExample/share/InDetRecConditionsAccess.py index 4054e492ba74ff5888faeb4dfc394bdca99f017e..4a047c5eaf4bbecbe29ee11e8b2a9ab1030c8d5d 100644 --- a/InnerDetector/InDetExample/InDetRecExample/share/InDetRecConditionsAccess.py +++ b/InnerDetector/InDetExample/InDetRecExample/share/InDetRecConditionsAccess.py @@ -471,6 +471,11 @@ if DetFlags.haveRIO.TRT_on(): if not conddb.folderRequested( "/TRT/Calib/ToT/ToTValue"): conddb.addFolderSplitOnline( "TRT", "/TRT/Onl/Calib/ToT/ToTValue", "/TRT/Calib/ToT/ToTValue",className='CondAttrListCollection') + if not conddb.folderRequested( "/TRT/Calib/PID_NN"): + conddb.addFolderSplitOnline( "TRT", "/TRT/Onl/Calib/PID_NN", "/TRT/Calib/PID_NN",className='CondAttrListCollection') + # FIXME: force tag until the folder is included in global tag + conddb.addOverride("/TRT/Calib/PID_NN", "TRTCalibPID_NN_v1") + conddb.addOverride("/TRT/Onl/Calib/PID_NN", "TRTCalibPID_NN_v1") # # now do the services @@ -522,6 +527,10 @@ if DetFlags.haveRIO.TRT_on(): from TRT_ConditionsAlgs.TRT_ConditionsAlgsConf import TRTHTCondAlg TRTHTCondAlg = TRTHTCondAlg(name = "TRTHTCondAlg") + # PID NN + from TRT_ConditionsNN.TRT_ConditionsNNConf import TRTPIDNNCondAlg + TRTPIDNNCondAlg = TRTPIDNNCondAlg(name = "TRTPIDNNCondAlg") + # dEdx probability algorithm from TRT_ConditionsAlgs.TRT_ConditionsAlgsConf import TRTToTCondAlg TRTToTCondAlg = TRTToTCondAlg(name = "TRTToTCondAlg") @@ -542,6 +551,8 @@ if DetFlags.haveRIO.TRT_on(): # Condition algorithms for Pid if not hasattr(condSeq, "TRTHTCondAlg"): condSeq += TRTHTCondAlg + if not hasattr(condSeq, "TRTPIDNNCondAlg"): + condSeq += TRTPIDNNCondAlg if not hasattr(condSeq, "TRTToTCondAlg"): condSeq += TRTToTCondAlg diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/python/TrackSummaryToolWorkaround.py b/InnerDetector/InDetMonitoring/SCT_Monitoring/python/TrackSummaryToolWorkaround.py index 0df7e5c1dc1dfab10eb03c67dbea10d429cb9823..72cf3e03e4883aa6a77da7cc3c36f8431677ffd6 100644 --- a/InnerDetector/InDetMonitoring/SCT_Monitoring/python/TrackSummaryToolWorkaround.py +++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/python/TrackSummaryToolWorkaround.py @@ -100,7 +100,6 @@ def TrackSummaryToolWorkaround(flags): doSharedHits = False, doHolesInDet = True, TRT_ElectronPidTool = '', - TRT_ToT_dEdxTool = '', PixelToTPIDTool = '') result.setPrivateTools(InDetTrackSummaryTool) ############################## WORKAROUND (END) ############################ diff --git a/InnerDetector/InDetRecEvent/InDetPrepRawData/InDetPrepRawData/PixelGangedClusterAmbiguities.h b/InnerDetector/InDetRecEvent/InDetPrepRawData/InDetPrepRawData/PixelGangedClusterAmbiguities.h index 3e044d86b77a5733338073f10ca48b624e2cde7f..fe1968a56e7414ced3fe96f9a3ebbc47e7e089d9 100755 --- a/InnerDetector/InDetRecEvent/InDetPrepRawData/InDetPrepRawData/PixelGangedClusterAmbiguities.h +++ b/InnerDetector/InDetRecEvent/InDetPrepRawData/InDetPrepRawData/PixelGangedClusterAmbiguities.h @@ -26,6 +26,13 @@ namespace InDet{ { Identifier ida = (a!=0 ? a->identify() : Identifier(0)); Identifier idb = (b!=0 ? b->identify() : Identifier(0)); + + // sometimes different clusters have the same identity + // use the size to determine the order/break degeneracy + if( ida == idb && ida != Identifier(0) ) { + return (a->width() < b->width()); + } + return ida < idb; } }; diff --git a/InnerDetector/InDetRecEvent/InDetPrepRawData/InDetPrepRawData/SiWidth.h b/InnerDetector/InDetRecEvent/InDetPrepRawData/InDetPrepRawData/SiWidth.h index 563e23dfab39c45b091f5d126292919c86cc235f..f7663d62483c4bba5b87d743de952c757d3c0f29 100755 --- a/InnerDetector/InDetRecEvent/InDetPrepRawData/InDetPrepRawData/SiWidth.h +++ b/InnerDetector/InDetRecEvent/InDetPrepRawData/InDetPrepRawData/SiWidth.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ /////////////////////////////////////////////////////////////////// @@ -63,6 +63,9 @@ namespace InDet { // return z double z() const; + // comparison + bool operator <(const SiWidth& width) const; + bool operator >(const SiWidth& width) const; /////////////////////////////////////////////////////////////////// // Non-const methods: @@ -128,6 +131,28 @@ namespace InDet { { return m_phirzWidth[Trk::locZ]; } + + // comparison + // return true if smaller in either direction + inline bool InDet::SiWidth::operator <(const InDet::SiWidth &width) const + { + // size phi + if ( m_colrow[0] < width.colRow()[0] ) { return true; } + // size z + if ( m_colrow[1] < width.colRow()[1] ) { return true; } + return false; + } + + // flip logic of < + inline bool InDet::SiWidth::operator >(const InDet::SiWidth &width) const + { + // size phi + if ( m_colrow[0] < width.colRow()[0] ) { return false; } + // size z + if ( m_colrow[1] < width.colRow()[1] ) { return false; } + return true; + } + inline void SiWidth::setColumn(const double col) { @@ -137,7 +162,7 @@ namespace InDet { inline void SiWidth::setRow(const double row) { m_colrow[1] = row; - } + } inline void SiWidth::setColRow(const Amg::Vector2D& colRow) { diff --git a/InnerDetector/InDetRecTools/TRT_ElectronPidTools/CMakeLists.txt b/InnerDetector/InDetRecTools/TRT_ElectronPidTools/CMakeLists.txt index c74ef1d4367d928934d4ed743ca10ca21f4a31f8..9d8cd9e769d483966c270584cb9436ea579f993c 100644 --- a/InnerDetector/InDetRecTools/TRT_ElectronPidTools/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/TRT_ElectronPidTools/CMakeLists.txt @@ -11,8 +11,7 @@ atlas_add_library( TRT_ElectronPidToolsLib TRT_ElectronPidTools/*.h INTERFACE PUBLIC_HEADERS TRT_ElectronPidTools - LINK_LIBRARIES GaudiKernel AthenaBaseComps AthenaKernel TrkTrack InDetRawData TrkParameters TrkToolInterfaces TRT_ConditionsData TrkEventPrimitives TRT_ConditionsServicesLib InDetPrepRawData StoreGateLib TRT_ConditionsData ) - + LINK_LIBRARIES GaudiKernel AthenaBaseComps AthenaKernel TrkTrack InDetRawData TrkParameters TrkToolInterfaces TRT_ConditionsData TrkEventPrimitives TRT_ConditionsServicesLib InDetPrepRawData StoreGateLib TRT_ConditionsNNLib ) # Component(s) in the package: atlas_add_component( TRT_ElectronPidTools src/*.cxx diff --git a/InnerDetector/InDetRecTools/TRT_ElectronPidTools/TRT_ElectronPidTools/TRT_ElectronPidToolRun2.h b/InnerDetector/InDetRecTools/TRT_ElectronPidTools/TRT_ElectronPidTools/TRT_ElectronPidToolRun2.h index 0456cd962d445f63b35cfcb859ab9a702a609958..8f63d7511f9576ff988e1b3daf75977372c7774e 100644 --- a/InnerDetector/InDetRecTools/TRT_ElectronPidTools/TRT_ElectronPidTools/TRT_ElectronPidToolRun2.h +++ b/InnerDetector/InDetRecTools/TRT_ElectronPidTools/TRT_ElectronPidTools/TRT_ElectronPidToolRun2.h @@ -19,6 +19,7 @@ #include "TrkToolInterfaces/ITRT_ElectronPidTool.h" #include "TRT_ElectronPidTools/ITRT_ElectronToTTool.h" #include "TRT_ConditionsData/HTcalculator.h" +#include "TRT_ConditionsNN/TRTPIDNN.h" #include "TrkEventPrimitives/ParticleHypothesis.h" #include "TRT_ElectronPidTools/ITRT_LocalOccupancy.h" @@ -143,6 +144,11 @@ namespace InDet "HTcalculator", "HTcalculator", "HTcalculator in-key" }; + + SG::ReadCondHandleKey<InDet::TRTPIDNN> m_TRTPIDNNReadKey{ this, + "TRTPIDNN", + "TRTPIDNN", + "TRTPIDNN in-key" }; }; } // end of namespace diff --git a/InnerDetector/InDetRecTools/TRT_ElectronPidTools/src/TRT_ElectronPidToolRun2.cxx b/InnerDetector/InDetRecTools/TRT_ElectronPidTools/src/TRT_ElectronPidToolRun2.cxx index 1b283a54e4e5c5382308812b3586be7060cd7eef..04e0f80d2defd7c734dd3c973e334c8a2ab48d3b 100644 --- a/InnerDetector/InDetRecTools/TRT_ElectronPidTools/src/TRT_ElectronPidToolRun2.cxx +++ b/InnerDetector/InDetRecTools/TRT_ElectronPidTools/src/TRT_ElectronPidToolRun2.cxx @@ -21,6 +21,7 @@ // Tracking: #include "TrkTrack/Track.h" +#include "TrkTrackSummary/TrackSummary.h" #include "TrkTrack/TrackStateOnSurface.h" #include "TrkMeasurementBase/MeasurementBase.h" #include "TrkRIO_OnTrack/RIO_OnTrack.h" @@ -35,6 +36,9 @@ // ToT Tool Interface #include "TRT_ElectronPidTools/ITRT_ToT_dEdx.h" +// For the track length in straw calculations +#include "TRT_ToT_dEdx.h" + // Particle masses // Math functions: @@ -48,6 +52,16 @@ //#include "TRT_ElectronPidToolRun2_HTcalculation.cxx" +// Helper method to store NN input variables into maps +template <typename T> +void storeNNVariable(std::map<std::string, T>& theMap, const std::string& name, const T& value) { + auto it = theMap.find(name); + if (it != theMap.end()) { + it->second = value; + } +} + + /*****************************************************************************\ |*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*| @@ -96,6 +110,8 @@ StatusCode InDet::TRT_ElectronPidToolRun2::initialize() ATH_CHECK( m_HTReadKey.initialize() ); + ATH_CHECK( m_TRTPIDNNReadKey.initialize() ); + CHECK( m_TRTStrawSummaryTool.retrieve() ); if ( !m_TRTStrawSummaryTool.empty()) ATH_MSG_INFO( "Retrieved tool " << m_TRTStrawSummaryTool); @@ -119,11 +135,7 @@ StatusCode InDet::TRT_ElectronPidToolRun2::finalize() std::vector<float> InDet::TRT_ElectronPidToolRun2::electronProbability_old(const Trk::Track& track) { // Simply return values without calculation - std::vector<float> PIDvalues(4); - PIDvalues[0] = 0.5; - PIDvalues[1] = 0.5; - PIDvalues[2] = 0.0; - PIDvalues[3] = 0.5; + std::vector<float> PIDvalues = Trk::eProbabilityDefault; const Trk::TrackParameters* perigee = track.perigeeParameters(); if (!perigee) { return PIDvalues; } return PIDvalues; @@ -146,15 +158,16 @@ InDet::TRT_ElectronPidToolRun2::electronProbability(const Trk::Track& track) con ATH_MSG_WARNING (" No Pid calibration from the DB."); } - //Initialize the return vector - std::vector<float> PIDvalues(5); - float & prob_El_Comb = PIDvalues[0] = 0.5; - float & prob_El_HT = PIDvalues[1] = 0.5; - float & prob_El_ToT = PIDvalues[2] = 0.5; - float & prob_El_Brem = PIDvalues[3] = 0.5; - float & occ_local = PIDvalues[4] = 0.0; + // Get the PID NN + SG::ReadCondHandle<InDet::TRTPIDNN> readHandlePIDNN{m_TRTPIDNNReadKey,ctx}; + const InDet::TRTPIDNN* PIDNN = (*readHandlePIDNN); + // make sure some calibration is available + if(PIDNN==nullptr) { + ATH_MSG_WARNING (" No PID NN available from the DB."); + } - float dEdx = 0.0; + // Initialize the vector with default PID values + std::vector<float> PIDvalues = Trk::eProbabilityDefault; // Check for perigee: const Trk::TrackParameters* perigee = track.perigeeParameters(); @@ -183,7 +196,12 @@ InDet::TRT_ElectronPidToolRun2::electronProbability(const Trk::Track& track) con double eta = -log(tan(theta/2.0)); // Check the tool to get the local occupancy (i.e. for the track in question): - occ_local = m_LocalOccTool->LocalOccupancy(ctx,track); + PIDvalues[Trk::TRTTrackOccupancy] = m_LocalOccTool->LocalOccupancy(ctx,track); + + if (PIDvalues[Trk::TRTTrackOccupancy] > 1.0 || PIDvalues[Trk::TRTTrackOccupancy] < 0.0) { + ATH_MSG_WARNING(" Occupancy was outside allowed range! Returning default Pid values. Occupancy = " << PIDvalues[Trk::TRTTrackOccupancy] ); + return PIDvalues; + } ATH_MSG_DEBUG (""); ATH_MSG_DEBUG (""); @@ -199,8 +217,20 @@ InDet::TRT_ElectronPidToolRun2::electronProbability(const Trk::Track& track) con // Loop over TRT hits on track, and calculate HT and R-ToT probability: // ------------------------------------------------------------------------------------ + std::vector<double> hit_HTMB; + std::vector<double> hit_gasType; + std::vector<double> hit_tot; + std::vector<double> hit_L; + std::vector<double> hit_rTrkWire; + std::vector<double> hit_HitZ; + std::vector<double> hit_HitR; + std::vector<double> hit_isPrec; + unsigned int nTRThits = 0; unsigned int nTRThitsHTMB = 0; + unsigned int nXehits = 0; + unsigned int nArhits = 0; + unsigned int nPrecHits = 0; // Check for track states: @@ -221,15 +251,7 @@ InDet::TRT_ElectronPidToolRun2::electronProbability(const Trk::Track& track) con if (!measurement) continue; // Get drift circle (ensures that hit is from TRT): - const InDet::TRT_DriftCircleOnTrack* driftcircle = nullptr; - if (measurement->type(Trk::MeasurementBaseType::RIO_OnTrack)) { - const Trk::RIO_OnTrack* tmpRio = - static_cast<const Trk::RIO_OnTrack*>(measurement); - if (tmpRio->rioType(Trk::RIO_OnTrackType::TRT_DriftCircle)) { - driftcircle = static_cast<const InDet::TRT_DriftCircleOnTrack*>(tmpRio); - } - } - + const InDet::TRT_DriftCircleOnTrack* driftcircle = dynamic_cast<const InDet::TRT_DriftCircleOnTrack*>(measurement); if (!driftcircle) continue; // From now (May 2015) onwards, we ONLY USE MIDDLE HT BIT: @@ -237,6 +259,7 @@ InDet::TRT_ElectronPidToolRun2::electronProbability(const Trk::Track& track) con nTRThits++; if (isHTMB) nTRThitsHTMB++; + hit_HTMB.push_back(static_cast<double>(isHTMB)); // ------------------------------------------------------------------------------------ @@ -263,14 +286,17 @@ InDet::TRT_ElectronPidToolRun2::electronProbability(const Trk::Track& track) con } // Get Z (Barrel) or R (Endcap) location of the hit, and distance from track to wire (i.e. anode) in straw: - double HitZ, HitR, rTrkWire; - bool hasTrackParameters= true; // Keep track of this for HT prob calculation + double HitZ = 0.; + double HitR = 0.; + double rTrkWire = 0.; + bool hasTrackParameters = true; // Keep track of this for HT prob calculation if ((*tsosIter)->trackParameters()) { // If we have precise information (from hit), get that: const Amg::Vector3D& gp = driftcircle->globalPosition(); HitR = gp.perp(); HitZ = gp.z(); rTrkWire = fabs((*tsosIter)->trackParameters()->parameters()[Trk::driftRadius]); + if (rTrkWire > 2.2) rTrkWire = 2.175; // cut off track-to-wire distance for outliers } else { // Otherwise just use the straw coordinates: hasTrackParameters = false; // Jared - pass this to HT calculation @@ -279,6 +305,12 @@ InDet::TRT_ElectronPidToolRun2::electronProbability(const Trk::Track& track) con rTrkWire = 0; } + // fill vectors for NN PID + hit_HitZ.push_back(HitZ); + hit_HitR.push_back(HitR); + hit_rTrkWire.push_back(rTrkWire); + hit_L.push_back(TRT_ToT_dEdx::calculateTrackLengthInStraw((*tsosIter), m_trtId)); + hit_tot.push_back(driftcircle->timeOverThreshold()); // ------------------------------------------------------------------------------------ // Collection and checks of input variables for HT probability calculation: @@ -302,13 +334,6 @@ InDet::TRT_ElectronPidToolRun2::electronProbability(const Trk::Track& track) con ZRpos[TrtPart] = ZRpos_min[TrtPart] + 0.001; } - if (rTrkWire > 2.2) rTrkWire = 2.175; // Happens once in a while - no need for warning! - - if (occ_local > 1.0 || occ_local < 0.0) { - ATH_MSG_WARNING(" Occupancy was outside allowed range! TrtPart = " << TrtPart << " Occupancy = " << occ_local); - continue; - } - // ------------------------------------------------------------------------------------ // Calculate the HT probability: // ------------------------------------------------------------------------------------ @@ -332,7 +357,24 @@ InDet::TRT_ElectronPidToolRun2::electronProbability(const Trk::Track& track) con << nTRThits << " TrtPart: " << TrtPart << " GasType: " << GasType << " SL: " << StrawLayer << " ZRpos: " << ZRpos[TrtPart] << " TWdist: " << rTrkWire - << " Occ_Local: " << occ_local << " HTMB: " << isHTMB); + << " Occ_Local: " << PIDvalues[Trk::TRTTrackOccupancy] << " HTMB: " << isHTMB); + + // RNN gas type observables + hit_gasType.push_back(static_cast<double>(GasType)); + if (GasType == 0) { + nXehits++; + } else if (GasType == 1) { + nArhits++; + } + + // RNN hit preciion observables + float errDc = sqrt(driftcircle->localCovariance()(Trk::driftRadius, Trk::driftRadius)); + bool isPrec = false; + if (errDc < 1.0) { + isPrec = true; + nPrecHits++; + } + hit_isPrec.push_back(static_cast<double>(isPrec)); // Then call pHT functions with these values: // ------------------------------------------ @@ -344,7 +386,7 @@ InDet::TRT_ElectronPidToolRun2::electronProbability(const Trk::Track& track) con StrawLayer, ZRpos[TrtPart], rTrkWire, - occ_local, + PIDvalues[Trk::TRTTrackOccupancy] , hasTrackParameters); double pHTpi = HTcalc->getProbHT(pTrk, Trk::pion, @@ -353,7 +395,7 @@ InDet::TRT_ElectronPidToolRun2::electronProbability(const Trk::Track& track) con StrawLayer, ZRpos[TrtPart], rTrkWire, - occ_local, + PIDvalues[Trk::TRTTrackOccupancy] , hasTrackParameters); if (pHTel > 0.999 || pHTpi > 0.999 || pHTel < 0.001 || pHTpi < 0.001) { @@ -361,7 +403,7 @@ InDet::TRT_ElectronPidToolRun2::electronProbability(const Trk::Track& track) con << pHTel << " pHTpi = " << pHTpi << " TrtPart: " << TrtPart << " SL: " << StrawLayer << " ZRpos: " << ZRpos[TrtPart] << " TWdist: " << rTrkWire - << " Occ_Local: " << occ_local); + << " Occ_Local: " << PIDvalues[Trk::TRTTrackOccupancy] ); continue; } @@ -370,7 +412,7 @@ InDet::TRT_ElectronPidToolRun2::electronProbability(const Trk::Track& track) con << pHTel << " pHTpi = " << pHTpi << " TrtPart: " << TrtPart << " SL: " << StrawLayer << " ZRpos: " << ZRpos[TrtPart] << " TWdist: " << rTrkWire - << " Occ_Local: " << occ_local); + << " Occ_Local: " << PIDvalues[Trk::TRTTrackOccupancy] ); continue; } @@ -379,44 +421,84 @@ InDet::TRT_ElectronPidToolRun2::electronProbability(const Trk::Track& track) con else {pHTel_prod *= 1.0-pHTel; pHTpi_prod *= 1.0-pHTpi;} ATH_MSG_DEBUG ("check pHT(el): " << pHTel << " pHT(pi): " << pHTpi ); - // Jared - Development Output... - - //std::cout << "check pHT(el): " << pHTel << " pHT(pi): " << pHTpi << std::endl; - - }//of loop over hits + } // end of loop over hits // If number of hits is adequate (default is 5 hits), calculate HT and ToT probability. if (not (nTRThits >= m_minTRThits)) return PIDvalues; // Calculate electron probability (HT) - prob_El_HT = pHTel_prod / (pHTel_prod + pHTpi_prod); + PIDvalues[Trk::eProbabilityHT] = pHTel_prod / (pHTel_prod + pHTpi_prod); - ATH_MSG_DEBUG ("check---------------------------------------------------------------------------------------"); - ATH_MSG_DEBUG("check nTRThits: " << nTRThits << " : " << nTRThitsHTMB - << " pHTel_prod: " << pHTel_prod - << " pHTpi_prod: " << pHTpi_prod - << " probEl: " << prob_El_HT); - ATH_MSG_DEBUG ("check---------------------------------------------------------------------------------------"); - ATH_MSG_DEBUG (""); - ATH_MSG_DEBUG (""); + ATH_MSG_DEBUG ("check nTRThits: " << nTRThits << " : " << nTRThitsHTMB + << " pHTel_prod: " << pHTel_prod + << " pHTpi_prod: " << pHTpi_prod + << " probEl: " << PIDvalues[Trk::eProbabilityHT]); - // Jared - ToT Implementation - dEdx = m_TRTdEdxTool->dEdx(ctx,&track, false); // Divide by L, exclude HT hits - double usedHits = m_TRTdEdxTool->usedHits(ctx,&track, false); - prob_El_ToT = m_TRTdEdxTool->getTest(ctx,dEdx, pTrk, Trk::electron, Trk::pion, usedHits); + PIDvalues[Trk::TRTdEdx] = m_TRTdEdxTool->dEdx(ctx,&track); // default dEdx using all hits + PIDvalues[Trk::eProbabilityNumberOfTRTHitsUsedFordEdx] = m_TRTdEdxTool->usedHits(ctx,&track); + double dEdx_noHTHits = m_TRTdEdxTool->dEdx(ctx,&track, false); // Divide by L, exclude HT hits + double dEdx_usedHits_noHTHits = m_TRTdEdxTool->usedHits(ctx,&track, false); + PIDvalues[Trk::eProbabilityToT] = m_TRTdEdxTool->getTest(ctx, dEdx_noHTHits, pTrk, Trk::electron, Trk::pion, dEdx_usedHits_noHTHits); // Limit the probability values the upper and lower limits that are given/trusted for each part: - double limProbHT = HTcalc->Limit(prob_El_HT); - double limProbToT = HTcalc->Limit(prob_El_ToT); + double limProbHT = HTcalc->Limit(PIDvalues[Trk::eProbabilityHT]); + double limProbToT = HTcalc->Limit(PIDvalues[Trk::eProbabilityToT]); // Calculate the combined probability, assuming no correlations (none are expected). - prob_El_Comb = (limProbHT * limProbToT ) / ( (limProbHT * limProbToT) + ( (1.0-limProbHT) * (1.0-limProbToT)) ); + PIDvalues[Trk::eProbabilityComb] = (limProbHT * limProbToT ) / ( (limProbHT * limProbToT) + ( (1.0-limProbHT) * (1.0-limProbToT)) ); // Troels: VERY NASTY NAMING, BUT AGREED UPON FOR NOW (for debugging, 27. NOV. 2014): - prob_El_Brem = pHTel_prod; // decorates electron LH to el brem for now... (still used?) + PIDvalues[Trk::eProbabilityBrem] = pHTel_prod; // decorates electron LH to el brem for now... (still used?) + + // Calculate RNN PID score + std::map<std::string, std::map<std::string, double>> scalarInputs_NN = PIDNN->getScalarInputs(); + std::map<std::string, std::map<std::string, std::vector<double>>> vectorInputs_NN = PIDNN->getVectorInputs(); + + // Calculate the hit fraction + double fAr = static_cast<double>(nArhits) / nTRThits; + double fHTMB = static_cast<double>(nTRThitsHTMB) / nTRThits; + double PHF = static_cast<double>(nPrecHits) / nTRThits; + + if (!scalarInputs_NN.empty()) { + std::map<std::string, double>& trackVarMap = scalarInputs_NN.begin()->second; + storeNNVariable(trackVarMap, "trkOcc", static_cast<double>(PIDvalues[Trk::TRTTrackOccupancy])); + storeNNVariable(trackVarMap, "p", pTrk); + storeNNVariable(trackVarMap, "pT", pT); + storeNNVariable(trackVarMap, "nXehits", static_cast<double>(nXehits)); + storeNNVariable(trackVarMap, "fAr", fAr); + storeNNVariable(trackVarMap, "fHTMB", fHTMB); + storeNNVariable(trackVarMap, "PHF", PHF); + storeNNVariable(trackVarMap, "dEdx", static_cast<double>(dEdx_noHTHits)); + } + + if (!vectorInputs_NN.empty()) { + std::map<std::string, std::vector<double>>& hitVarMap = vectorInputs_NN.begin()->second; + storeNNVariable(hitVarMap, "hit_HTMB", hit_HTMB); + storeNNVariable(hitVarMap, "hit_gasType", hit_gasType); + storeNNVariable(hitVarMap, "hit_tot", hit_tot); + storeNNVariable(hitVarMap, "hit_L", hit_L); + storeNNVariable(hitVarMap, "hit_rTrkWire", hit_rTrkWire); + storeNNVariable(hitVarMap, "hit_HitZ", hit_HitZ); + storeNNVariable(hitVarMap, "hit_HitR", hit_HitR); + storeNNVariable(hitVarMap, "hit_isPrec", hit_isPrec); + } + PIDvalues[Trk::eProbabilityNN] = PIDNN->evaluate(scalarInputs_NN, vectorInputs_NN); - //std::cout << "Prob_HT = " << prob_El_HT << " Prob_ToT = " << prob_El_ToT << " Prob_Comb = " << prob_El_Comb << std::endl; + ATH_MSG_DEBUG ("check NN PID calculation: "); + for (auto scalarInputs : scalarInputs_NN) { + ATH_MSG_DEBUG (" scalar inputs: " << scalarInputs.first); + for (auto variable : scalarInputs.second) { + ATH_MSG_DEBUG (" " << variable.first << " = " << variable.second); + } + } + for (auto vectorInputs : vectorInputs_NN) { + ATH_MSG_DEBUG (" vector inputs: " << vectorInputs.first); + for (auto variable : vectorInputs.second) { + ATH_MSG_DEBUG (" " << variable.first << " = " << variable.second); + } + } + ATH_MSG_DEBUG (" eProbilityNN: " << PIDvalues[Trk::eProbabilityNN]); return PIDvalues; } diff --git a/InnerDetector/InDetRecTools/TRT_ElectronPidTools/src/TRT_ToT_dEdx.cxx b/InnerDetector/InDetRecTools/TRT_ElectronPidTools/src/TRT_ToT_dEdx.cxx index cc7cb3ec2780eb3da9f5b5cddccfd461ab69a690..bb619ec0e06d949322377452a00f7aaa440c7b21 100644 --- a/InnerDetector/InDetRecTools/TRT_ElectronPidTools/src/TRT_ToT_dEdx.cxx +++ b/InnerDetector/InDetRecTools/TRT_ElectronPidTools/src/TRT_ToT_dEdx.cxx @@ -1215,7 +1215,10 @@ double TRT_ToT_dEdx::trackOccupancyCorrection(const Trk::Track* track, bool use corr=dEdxCorrection->trackOccPar0NoHt[index]+dEdxCorrection->trackOccPar1NoHt[index]*trackOcc+dEdxCorrection->trackOccPar2NoHt[index]*pow(trackOcc,2); } - return corr; + if (corr != 0) { + return 1./corr; + } + return 0.; } double TRT_ToT_dEdx::calculateTrackLengthInStraw(const Trk::TrackStateOnSurface* trackState, const TRT_ID* identifier) { @@ -1252,6 +1255,11 @@ double TRT_ToT_dEdx::calculateTrackLengthInStraw(const Trk::TrackStateOnSurface* const InDetDD::TRT_BaseElement* element = driftcircle->detectorElement(); double strawphi = element->center(DCId).phi(); + // check if track is an outlier + if (Trt_Rtrack >= 2.0) { + return 0.; + } + double length=0; if (HitPart == 1) { //Barrel length = 2*std::sqrt(4-Trt_Rtrack*Trt_Rtrack)*1./std::abs(std::sin(Trt_HitTheta)); diff --git a/MuonSpectrometer/MuonCalib/MdtCalib/MdtCalibSvc/MdtCalibSvc/MdtCalibrationDbTool.h b/MuonSpectrometer/MuonCalib/MdtCalib/MdtCalibSvc/MdtCalibSvc/MdtCalibrationDbTool.h index b388cb86552ca8cdcebbe877de7ea8d0a294b222..f0fec1632a7903403e99e0485a102d967665eb4f 100644 --- a/MuonSpectrometer/MuonCalib/MdtCalib/MdtCalibSvc/MdtCalibSvc/MdtCalibrationDbTool.h +++ b/MuonSpectrometer/MuonCalib/MdtCalib/MdtCalibSvc/MdtCalibSvc/MdtCalibrationDbTool.h @@ -99,7 +99,8 @@ private: SG::ReadCondHandleKey<MdtRtRelationCollection> m_readKeyRt{this,"MdtRtRelationCollection","MdtRtRelationCollection","MDT RT relations"}; SG::ReadCondHandleKey<MdtTubeCalibContainerCollection> m_readKeyTube{this,"MdtTubeCalibContainerCollection","MdtTubeCalibContainerCollection","MDT tube calib"}; SG::ReadCondHandleKey<MdtCorFuncSetCollection> m_readKeyCor{this,"MdtCorFuncSetCollection","MdtCorFuncSetCollection","MDT cor Funcs"}; - + + Gaudi::Property<bool> m_wasConfigured {this,"WasConfigured",false,"This tool is too complicated to rely on defaults. Will fail if not configured."}; }; #endif // MDTCALIBSVC_MDTCALIBRATIONDBTOOL_H diff --git a/MuonSpectrometer/MuonCalib/MdtCalib/MdtCalibSvc/src/MdtCalibrationDbTool.cxx b/MuonSpectrometer/MuonCalib/MdtCalib/MdtCalibSvc/src/MdtCalibrationDbTool.cxx index c438cb0cdbaa74800ad9d661e49ae9f20414d000..f16d455e4b36c289d618a1289c2efb1be181678e 100644 --- a/MuonSpectrometer/MuonCalib/MdtCalib/MdtCalibSvc/src/MdtCalibrationDbTool.cxx +++ b/MuonSpectrometer/MuonCalib/MdtCalib/MdtCalibSvc/src/MdtCalibrationDbTool.cxx @@ -55,6 +55,10 @@ StatusCode MdtCalibrationDbTool::initialize() { ATH_CHECK(m_readKeyRt.initialize()); ATH_CHECK(m_readKeyTube.initialize()); ATH_CHECK(m_readKeyCor.initialize (m_createSlewingFunction || m_createWireSagFunction || m_create_b_field_function)); + + if (!m_wasConfigured){ + ATH_MSG_WARNING( "This tool is too complicated to rely on defaults. Potential configuration issue." ); + } return StatusCode::SUCCESS; } //end MdtCalibrationDbTool::initialize diff --git a/MuonSpectrometer/MuonCnv/MuonCnvExample/python/MuonCalibConfig.py b/MuonSpectrometer/MuonCnv/MuonCnvExample/python/MuonCalibConfig.py index 94608b056c31c27d82957381cc97ed5ba395d377..084fcafe75514875a4ef86fe05ef969cb1087310 100644 --- a/MuonSpectrometer/MuonCnv/MuonCnvExample/python/MuonCalibConfig.py +++ b/MuonSpectrometer/MuonCnv/MuonCnvExample/python/MuonCalibConfig.py @@ -162,48 +162,275 @@ def setupMdtCondDB(): condSequence += MdtCalibDbAlg("MdtCalibDbAlg") if conddb.isOnline and not conddb.isMC: - MdtCalibDbAlg.TubeFolder = "/MDT/T0" - MdtCalibDbAlg.RtFolder = "/MDT/RT" - MdtCalibDbAlg.ReadKeyTube = "/MDT/T0" - MdtCalibDbAlg.ReadKeyRt = "/MDT/RT" + condSequence.MdtCalibDbAlg.TubeFolder = "/MDT/T0" + condSequence.MdtCalibDbAlg.RtFolder = "/MDT/RT" + condSequence.MdtCalibDbAlg.ReadKeyTube = "/MDT/T0" + condSequence.MdtCalibDbAlg.ReadKeyRt = "/MDT/RT" else: - MdtCalibDbAlg.TubeFolder = "/MDT/T0" + mdt_folder_name_appendix - MdtCalibDbAlg.RtFolder = "/MDT/RT" + mdt_folder_name_appendix - MdtCalibDbAlg.ReadKeyTube = "/MDT/T0" + mdt_folder_name_appendix - MdtCalibDbAlg.ReadKeyRt = "/MDT/RT" + mdt_folder_name_appendix - MdtCalibDbAlg.RT_InputFiles = ["Muon_RT_default.data"] + condSequence.MdtCalibDbAlg.TubeFolder = "/MDT/T0" + mdt_folder_name_appendix + condSequence.MdtCalibDbAlg.RtFolder = "/MDT/RT" + mdt_folder_name_appendix + condSequence.MdtCalibDbAlg.ReadKeyTube = "/MDT/T0" + mdt_folder_name_appendix + condSequence.MdtCalibDbAlg.ReadKeyRt = "/MDT/RT" + mdt_folder_name_appendix + condSequence.MdtCalibDbAlg.RT_InputFiles = ["Muon_RT_default.data"] if globalflags.DataSource == 'data': - MdtCalibDbAlg.defaultT0 = 40 + condSequence.MdtCalibDbAlg.defaultT0 = 40 elif globalflags.DataSource == 'geant4': - MdtCalibDbAlg.defaultT0 = 799 - MdtCalibDbAlg.UseMLRt = mdtCalibFlags.useMLRt() - MdtCalibDbAlg.TimeSlewingCorrection = mdtCalibFlags.correctMdtRtForTimeSlewing() - MdtCalibDbAlg.MeanCorrectionVsR = [ -5.45973, -4.57559, -3.71995, -3.45051, -3.4505, -3.4834, -3.59509, -3.74869, -3.92066, -4.10799, -4.35237, -4.61329, -4.84111, -5.14524 ] - MdtCalibDbAlg.PropagationSpeedBeta = mdtCalibFlags.mdtPropagationSpeedBeta() + condSequence.MdtCalibDbAlg.defaultT0 = 799 + condSequence.MdtCalibDbAlg.UseMLRt = mdtCalibFlags.useMLRt() + condSequence.MdtCalibDbAlg.TimeSlewingCorrection = mdtCalibFlags.correctMdtRtForTimeSlewing() + condSequence.MdtCalibDbAlg.MeanCorrectionVsR = [ -5.45973, -4.57559, -3.71995, -3.45051, -3.4505, -3.4834, -3.59509, -3.74869, -3.92066, -4.10799, -4.35237, -4.61329, -4.84111, -5.14524 ] + condSequence.MdtCalibDbAlg.PropagationSpeedBeta = mdtCalibFlags.mdtPropagationSpeedBeta() # the same as MdtCalibrationDbTool - MdtCalibDbAlg.CreateBFieldFunctions = mdtCalibFlags.correctMdtRtForBField() - MdtCalibDbAlg.CreateWireSagFunctions = mdtCalibFlags.correctMdtRtWireSag() - MdtCalibDbAlg.CreateSlewingFunctions = mdtCalibFlags.correctMdtRtForTimeSlewing() + condSequence.MdtCalibDbAlg.CreateBFieldFunctions = mdtCalibFlags.correctMdtRtForBField() + condSequence.MdtCalibDbAlg.CreateWireSagFunctions = mdtCalibFlags.correctMdtRtWireSag() + condSequence.MdtCalibDbAlg.CreateSlewingFunctions = mdtCalibFlags.correctMdtRtForTimeSlewing() +def MdtCalibrationTool(name="MdtCalibrationTool", **kwargs): from MdtCalibSvc.MdtCalibSvcConf import MdtCalibrationTool - MdtCalibrationTool.DoSlewingCorrection = mdtCalibFlags.correctMdtRtForTimeSlewing() + kwargs.setdefault("DoSlewingCorrection", mdtCalibFlags.correctMdtRtForTimeSlewing()) + # Hack to use DoTemperatureCorrection for applyRtScaling; but applyRtScaling should not be used anyway, since MLRT can be used - MdtCalibrationTool.DoTemperatureCorrection = mdtCalibFlags.applyRtScaling() - MdtCalibrationTool.DoWireSagCorrection = mdtCalibFlags.correctMdtRtWireSag() + kwargs.setdefault("DoTemperatureCorrection", mdtCalibFlags.applyRtScaling()) + kwargs.setdefault("DoWireSagCorrection", mdtCalibFlags.correctMdtRtWireSag()) + # for collisions cut away hits that are far outside of the MDT time window if beamFlags.beamType() == 'collisions': - MdtCalibrationTool.DoTofCorrection = True - if globalflags.DataSource() == 'geant4': - MdtCalibrationTool.TimeWindowSetting = mdtCalibWindowNumber('Collision_G4') - elif globalflags.DataSource() == 'data': - MdtCalibrationTool.TimeWindowSetting = mdtCalibWindowNumber('Collision_G4') + kwargs.setdefault("DoTofCorrection", True) + + if globalflags.DataSource() == 'geant4' or globalflags.DataSource() == 'data': + kwargs.setdefault("TimeWindowSetting", mdtCalibWindowNumber('Collision_G4')) else: # cosmics or single beam - MdtCalibrationTool.DoTofCorrection = False + kwargs.setdefault("DoTofCorrection", False) + + kwargs.setdefault("CalibrationDbTool", MdtCalibrationDbTool()) + return MdtCalibrationTool(name, **kwargs) + +def MdtCalibrationDbTool(name="MdtCalibrationDbTool", **kwargs): from MdtCalibSvc.MdtCalibSvcConf import MdtCalibrationDbTool - MdtCalibrationDbTool.CreateBFieldFunctions = mdtCalibFlags.correctMdtRtForBField() - MdtCalibrationDbTool.CreateWireSagFunctions = mdtCalibFlags.correctMdtRtWireSag() - MdtCalibrationDbTool.CreateSlewingFunctions = mdtCalibFlags.correctMdtRtForTimeSlewing() + kwargs.setdefault("CreateBFieldFunctions", mdtCalibFlags.correctMdtRtForBField()) + kwargs.setdefault("CreateWireSagFunctions", mdtCalibFlags.correctMdtRtWireSag()) + kwargs.setdefault("CreateSlewingFunctions", mdtCalibFlags.correctMdtRtForTimeSlewing()) + kwargs.setdefault("WasConfigured", True) + + return MdtCalibrationDbTool(name, **kwargs) + + +# return a list of dictionaires containing the calib config info (keys etc) +def getCalibConfigs(): + global muonRecFlags,rec + configs = [] + if muonRecFlags.calibMuonStandalone and (muonRecFlags.doStandalone or rec.readESD): +# try: + configs.append( muonRec.getConfig("MuonStandalone").getCalibConfig() ) +# except KeyError: +# logMuon.warning("Could not get calibration config for MuonStandAlone - not adding MuonStandAlone info to calibration") +# muonRecFlags.calibMuonStandalone = False + else: + muonRecFlags.calibMuonStandalone = False + + return configs + + + +## Setup MuonSegmenToCalibSegment algorithm. +# @param[in] segmentKeys list of segment keys to use or single segments key (string) +def getMuonSegmentToCalibSegment(): + global topSequence,muonRecFlags + try: + return topSequence.MuonSegmentToCalibSegment + except AttributeError: + + from MuonCalibPatRec.MuonCalibPatRecConf import MuonCalib__MuonSegmentToCalibSegment + MuonSegmentToCalibSegment = MuonCalib__MuonSegmentToCalibSegment("MuonSegmentToCalibSegment") + # set consistent time-of-flight correction with MdtDriftCircleOnTrackCreator + mdtCreator = getPublicTool("MdtDriftCircleOnTrackCreator") + MuonSegmentToCalibSegment.DoTOF = getProperty(mdtCreator,"DoTofCorrection") + # when doing segment fits with floating t0's + MuonSegmentToCalibSegment.UpdateForT0Shift = type(MuonSegmentToCalibSegment.getDefaultProperty("UpdateForT0Shift")) (muonRecFlags.doSegmentT0Fit()) + MuonSegmentToCalibSegment.UseCscSegments = False + MuonSegmentToCalibSegment.SegmentLocations = [ "MuonSegments" ] + MuonSegmentToCalibSegment.SegmentAuthors = [ 4,8 ] + MuonSegmentToCalibSegment.ReadSegments = True # rather than SegmentCombinations + + from MuonCnvExample import MuonCalibConfig + MuonCalibConfig.setupMdtCondDB() + + MuonSegmentToCalibSegment.CalibrationTool = MuonCalibConfig.MdtCalibrationTool() + + # finally add it to topSequence + topSequence += MuonSegmentToCalibSegment + + return topSequence.MuonSegmentToCalibSegment + + +## Setup the basic MuonCalibAlg algorithm. Needs further configuration after this call +# depending on the use-case. +# @param[in] evenTag The event tag written to file +def getMuonCalibAlg(eventTag): + global topSequence,beamFlags + try: + return topSequence.MuonCalibAlg + except AttributeError: + from MuonCalibAlgs.MuonCalibAlgsConf import MuonCalib__MuonCalibAlg + MuonCalibAlg = MuonCalib__MuonCalibAlg("MuonCalibAlg", + doMDTs = muonRecFlags.doMDTs(), + doCSCs = muonRecFlags.doCSCs(), + doRPCs = muonRecFlags.doRPCs(), + doTGCs = (muonRecFlags.doTGCs() and muonRecFlags.calibNtupleRawTGC()), + doTGCCoinData = (muonRecFlags.doTGCs() and muonRecFlags.calibNtupleRawTGC()), + doTruth = rec.doTruth(), + DoPrdSelect = muonRecFlags.doPrdSelect(), # optional cutting away of PRD hits to simulate dead channels + NtupleName = muonRecFlags.calibNtupleOutput(), # set the name of the output calibration ntuple + EventTag = eventTag ) + + if beamFlags.beamType == 'singlebeam' or beamFlags.beamType == 'cosmics': + MuonCalibAlg.addTriggerTag = False + else: + MuonCalibAlg.addTriggerTag = rec.doTrigger() + MuonCalibAlg.doTruth=rec.doTruth() + topSequence += MuonCalibAlg + return topSequence.MuonCalibAlg + + +def setupMuonCalibNtuple(): + global topSequence,muonRecFlags,beamFlags,ToolSvc,rec,DetFlags + if not rec.doMuon() or not DetFlags.Muon_on(): + logMuon.warning("Not setting up requested Muon Calibration Ntuple because Muons are off") + return + + logMuon.info("Setting up Muon Calibration Ntuple") + try: + configs = getCalibConfigs() + # MuonSegmentToCalibSegment is only needed if we want segments + if muonRecFlags.calibNtupleSegments and muonRecFlags.calibMuonStandalone: + MuonSegmentToCalibSegment = getMuonSegmentToCalibSegment() + + # MuonCalibAlg is always needed + eventTag="UNKNOWN" + if (muonRecFlags.calibNtupleSegments or muonRecFlags.calibNtupleTracks) and muonRecFlags.calibMuonStandalone: + if len(configs) >= 1: + eventTag = configs[0]["eventTag"] + elif muonRecFlags.calibNtupleTrigger: + eventTag = "TRIG" + else: + eventTag = "HITS" + + MuonCalibAlg = getMuonCalibAlg(eventTag) + # configure for writing ntuple + from MuonCalibTools.MuonCalibToolsConf import MuonCalib__PatternNtupleMaker + MuonCalibTool = MuonCalib__PatternNtupleMaker("MuonCalibPatternNtupleMaker") + MuonCalibTool.FillTruth = rec.doTruth() + MuonCalibTool.DoRawTGC = (muonRecFlags.doTGCs() and muonRecFlags.calibNtupleRawTGC()) + ToolSvc += MuonCalibTool + MuonCalibAlg.MuonCalibTool = MuonCalibTool + + # MuonCalibExtraTree only if we want to write tracks + if muonRecFlags.calibNtupleTracks: + MuonCalibTool.DelayFinish = True + from MuonCalibExtraTreeAlg.MuonCalibExtraTreeAlgConf import MuonCalib__MuonCalibExtraTreeAlg + MuonCalibExtraTreeAlg = MuonCalib__MuonCalibExtraTreeAlg("MuonCalibExtraTreeAlg", + NtupleName = "PatternNtupleMaker", + ) + segmentOnTrackSelector=None + if hasattr(topSequence, "MuonSegmentToCalibSegment"): + from MuonCalibExtraTreeAlg.MuonCalibExtraTreeAlgConf import MuonCalib__SegmentOnTrackSelector + segmentOnTrackSelector=MuonCalib__SegmentOnTrackSelector() + segmentOnTrackSelector.PattternLocation = "PatternsForCalibration" + ToolSvc+=segmentOnTrackSelector + MuonCalibExtraTreeAlg.SegmentOnTrackSelector= segmentOnTrackSelector + if not rec.doMuonCombined(): + tool_nr=0 + from MuonCalibExtraTreeAlg.MuonCalibExtraTreeAlgConf import MuonCalib__ExtraTreeTrackFillerTool + resPullCalc=getPublicTool("ResidualPullCalculator") + for config in configs: + trackDumpTool = MuonCalib__ExtraTreeTrackFillerTool("ExtraTreeTrackFillerTool" + str(tool_nr)) + trackDumpTool.TrackCollectionKey = config['tracksKey'] + trackDumpTool.SegmentAuthors = [config['segmentAuthor']] + trackDumpTool.TrackAuthor = config['trackAuthor'] + trackDumpTool.PullCalculator = resPullCalc + ToolSvc+=trackDumpTool + MuonCalibExtraTreeAlg.TrackFillerTools.append(trackDumpTool) + tool_nr+=1 + # configure needed tools + + + # add to topSequence + topSequence += MuonCalibExtraTreeAlg + + + # MuonCalibExtraTreeTriggerAlg only if trigger is available + if muonRecFlags.calibNtupleTrigger: # and DetFlags.detdescr.LVL1_on() and DetFlags.haveRDO.LVL1_on(): + # protect against running without AtlasTrigger project + doMuCTPI = True + if doMuCTPI: + try: + from TrigT1RPCRecRoiSvc import TrigT1RPCRecRoiConfig + from TrigT1TGCRecRoiSvc import TrigT1TGCRecRoiConfig + except ImportError: + logMuon.warning("MuonCalibExtraTreeTriggerAlg.doMuCTPI = False because AtlasTrigger is not available") + doMuCTPI = False + + # delay writing of MuonCalibAlg + MuonCalibTool.DelayFinish = True + # also delay MuonCalibExtraTreeAlg if it is running + try: + topSequence.MuonCalibExtraTreeAlg.DelayFinish = True + except AttributeError: + pass + + from MuonCalibExtraTreeAlg.MuonCalibExtraTreeAlgConf import MuonCalib__MuonCalibExtraTreeTriggerAlg + topSequence += MuonCalib__MuonCalibExtraTreeTriggerAlg( 'MuonCalibExtraTreeTriggerAlg', + doMuCTPI = doMuCTPI, + doLVL1Calo = rec.doTile() or rec.doLArg() or DetFlags.haveRDO.Calo_on(), + doMBTS = rec.doTile() or DetFlags.haveRDO.Tile_on() ) + + + except: + from AthenaCommon.Resilience import treatException + treatException("Problem in MuonCalib - Muon Calibration Ntuple configuration probably incomplete") + + + +def setupMuonCalib(): + global topSequence,ToolSvc + if not rec.doMuon() or not DetFlags.Muon_on(): + logMuon.warning("Not setting up requested Muon Calibration because Muons are off") + return + + logMuon.info("Setting up Muon Calibration") + try: + from MuonCnvExample.MuonCalibFlags import muonCalibFlags + muonCalibFlags.setDefaults() + + configs = getCalibConfigs() + # + # MuonSegmentToCalibSegment + # + calibConfig = muonRec.allConfigs()[0].getCalibConfig() #muonRec.getConfig(muonCalibFlags.EventTag()).getCalibConfig() + MuonSegmentToCalibSegment = getMuonSegmentToCalibSegment() + # + # MuonCalibAlg + # + MuonCalibAlg = getMuonCalibAlg(muonCalibFlags.EventTag()) + + from MdtCalibTools.MdtCalibToolsConf import MuonCalib__MdtCalibTool + MuonCalibTool = MuonCalib__MdtCalibTool() + calibMode = muonCalibFlags.Mode() + if calibMode == 'regionNtuple': + from MdtCalibTools.MdtCalibToolsConf import MuonCalib__MdtCalibNtupleMakerTool + MdtCalibTool = MuonCalib__MdtCalibNtupleMakerTool() + else: + raise RuntimeError( "Unknown Muon Calibration Mode: %r" % calibMode ) + + ToolSvc += MdtCalibTool + MuonCalibTool.MdtCalibTool = MdtCalibTool + + ToolSvc += MuonCalibTool + MuonCalibAlg.MuonCalibTool = MuonCalibTool + except: + from AthenaCommon.Resilience import treatException + treatException("Problem in MuonCalib - Muon Calibration configuration probably incomplete") # return a list of dictionaires containing the calib config info (keys etc) diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/CompetingMuonClustersOnTrackCnv_p2_test.ref b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/CompetingMuonClustersOnTrackCnv_p2_test.ref index 3c50c1642a444a9b155e398bc90631a7ec9f8ac4..e1e476e67f6d9b190a4f283945b243c651c5f9c4 100644 --- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/CompetingMuonClustersOnTrackCnv_p2_test.ref +++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/CompetingMuonClustersOnTrackCnv_p2_test.ref @@ -1,18 +1,18 @@ -Initializing Gaudi ApplicationMgr using job opts /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt -JobOptionsSvc INFO # =======> /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +Initializing Gaudi ApplicationMgr using job opts /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO # =======> /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt JobOptionsSvc INFO # (1,1): ApplicationMgr.Dlls += ["StoreGate", "CLIDComps"] JobOptionsSvc INFO # (2,1): ApplicationMgr.ExtSvc += ["StoreGateSvc", "StoreGateSvc/DetectorStore", "StoreGateSvc/ConditionStore", "Athena::RCUSvc"] -JobOptionsSvc INFO Job options successfully read in from /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO Job options successfully read in from /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt ApplicationMgr SUCCESS ==================================================================================================================================== - Welcome to ApplicationMgr (GaudiCoreSvc v33r0) - running on lxplus719.cern.ch on Sat Mar 7 20:56:03 2020 + Welcome to ApplicationMgr (GaudiCoreSvc v34r0) + running on pcumass4 on Wed Nov 4 09:34:39 2020 ==================================================================================================================================== ApplicationMgr INFO Successfully loaded modules : StoreGate, CLIDComps ApplicationMgr INFO Application Manager Configured successfully -ClassIDSvc INFO getRegistryEntries: read 11371 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 12361 CLIDRegistry entries for module ALL EventLoopMgr WARNING Unable to locate service "EventSelector" EventLoopMgr WARNING No events will be processed from external input. ApplicationMgr INFO Application Manager Initialized successfully @@ -140,7 +140,9 @@ MmIdHelper INFO The element hash max is 64 MmIdHelper INFO The detector element hash max is 128 MmIdHelper INFO Initializing MicroMegas hash indices for finding neighbors ... AtlasDetectorID::initialize_from_dictionary - OK -ClassIDSvc INFO getRegistryEntries: read 372 CLIDRegistry entries for module ALL +SCTDetectorManager INFO Using contructor with name specification, to create SCT_DetectorManager named SCT +SCTDetectorManager INFO +ClassIDSvc INFO getRegistryEntries: read 379 CLIDRegistry entries for module ALL test1 -ClassIDSvc INFO getRegistryEntries: read 291 CLIDRegistry entries for module ALL -ClassIDSvc INFO getRegistryEntries: read 168 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 320 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 170 CLIDRegistry entries for module ALL diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/CscClusterOnTrackCnv_p2_test.ref b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/CscClusterOnTrackCnv_p2_test.ref index 80f2a7c8a758f6e81459b471d52d091eef43094f..eeeefbe0302b1c70663e39634fa50ca6978c3949 100644 --- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/CscClusterOnTrackCnv_p2_test.ref +++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/CscClusterOnTrackCnv_p2_test.ref @@ -1,18 +1,18 @@ -Initializing Gaudi ApplicationMgr using job opts /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt -JobOptionsSvc INFO # =======> /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +Initializing Gaudi ApplicationMgr using job opts /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO # =======> /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt JobOptionsSvc INFO # (1,1): ApplicationMgr.Dlls += ["StoreGate", "CLIDComps"] JobOptionsSvc INFO # (2,1): ApplicationMgr.ExtSvc += ["StoreGateSvc", "StoreGateSvc/DetectorStore", "StoreGateSvc/ConditionStore", "Athena::RCUSvc"] -JobOptionsSvc INFO Job options successfully read in from /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO Job options successfully read in from /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt ApplicationMgr SUCCESS ==================================================================================================================================== - Welcome to ApplicationMgr (GaudiCoreSvc v33r0) - running on lxplus719.cern.ch on Sat Mar 7 20:27:28 2020 + Welcome to ApplicationMgr (GaudiCoreSvc v34r0) + running on pcumass4 on Wed Nov 4 09:34:27 2020 ==================================================================================================================================== ApplicationMgr INFO Successfully loaded modules : StoreGate, CLIDComps ApplicationMgr INFO Application Manager Configured successfully -ClassIDSvc INFO getRegistryEntries: read 11371 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 12361 CLIDRegistry entries for module ALL EventLoopMgr WARNING Unable to locate service "EventSelector" EventLoopMgr WARNING No events will be processed from external input. ApplicationMgr INFO Application Manager Initialized successfully @@ -140,7 +140,9 @@ MmIdHelper INFO The element hash max is 64 MmIdHelper INFO The detector element hash max is 128 MmIdHelper INFO Initializing MicroMegas hash indices for finding neighbors ... AtlasDetectorID::initialize_from_dictionary - OK -ClassIDSvc INFO getRegistryEntries: read 372 CLIDRegistry entries for module ALL +SCTDetectorManager INFO Using contructor with name specification, to create SCT_DetectorManager named SCT +SCTDetectorManager INFO +ClassIDSvc INFO getRegistryEntries: read 379 CLIDRegistry entries for module ALL test1 -ClassIDSvc INFO getRegistryEntries: read 291 CLIDRegistry entries for module ALL -ClassIDSvc INFO getRegistryEntries: read 168 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 320 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 170 CLIDRegistry entries for module ALL diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/CscPrepDataContainerCnv_p1_test.ref b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/CscPrepDataContainerCnv_p1_test.ref index a463acacecb056c45c29ee01141bcaa525926453..851b18a96969ec79a2cb9c0224b6d4f2e22d3f63 100644 --- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/CscPrepDataContainerCnv_p1_test.ref +++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/CscPrepDataContainerCnv_p1_test.ref @@ -1,18 +1,18 @@ -Initializing Gaudi ApplicationMgr using job opts /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt -JobOptionsSvc INFO # =======> /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +Initializing Gaudi ApplicationMgr using job opts /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO # =======> /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt JobOptionsSvc INFO # (1,1): ApplicationMgr.Dlls += ["StoreGate", "CLIDComps"] JobOptionsSvc INFO # (2,1): ApplicationMgr.ExtSvc += ["StoreGateSvc", "StoreGateSvc/DetectorStore", "StoreGateSvc/ConditionStore", "Athena::RCUSvc"] -JobOptionsSvc INFO Job options successfully read in from /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO Job options successfully read in from /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt ApplicationMgr SUCCESS ==================================================================================================================================== - Welcome to ApplicationMgr (GaudiCoreSvc v33r0) - running on lxplus719.cern.ch on Sat Mar 7 20:58:07 2020 + Welcome to ApplicationMgr (GaudiCoreSvc v34r0) + running on pcumass4 on Wed Nov 4 09:34:57 2020 ==================================================================================================================================== ApplicationMgr INFO Successfully loaded modules : StoreGate, CLIDComps ApplicationMgr INFO Application Manager Configured successfully -ClassIDSvc INFO getRegistryEntries: read 11370 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 12360 CLIDRegistry entries for module ALL EventLoopMgr WARNING Unable to locate service "EventSelector" EventLoopMgr WARNING No events will be processed from external input. ApplicationMgr INFO Application Manager Initialized successfully @@ -140,5 +140,7 @@ MmIdHelper INFO The element hash max is 64 MmIdHelper INFO The detector element hash max is 128 MmIdHelper INFO Initializing MicroMegas hash indices for finding neighbors ... AtlasDetectorID::initialize_from_dictionary - OK -ClassIDSvc INFO getRegistryEntries: read 372 CLIDRegistry entries for module ALL +SCTDetectorManager INFO Using contructor with name specification, to create SCT_DetectorManager named SCT +SCTDetectorManager INFO +ClassIDSvc INFO getRegistryEntries: read 379 CLIDRegistry entries for module ALL test1 diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/CscPrepDataContainerCnv_p2_test.ref b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/CscPrepDataContainerCnv_p2_test.ref index cea147a8d8eac2fbf3bbcaf3a9bd2746ee2db16e..30848425c8b60ab4e0f218706560e8e17df41f9f 100644 --- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/CscPrepDataContainerCnv_p2_test.ref +++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/CscPrepDataContainerCnv_p2_test.ref @@ -1,18 +1,18 @@ -Initializing Gaudi ApplicationMgr using job opts /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt -JobOptionsSvc INFO # =======> /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +Initializing Gaudi ApplicationMgr using job opts /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO # =======> /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt JobOptionsSvc INFO # (1,1): ApplicationMgr.Dlls += ["StoreGate", "CLIDComps"] JobOptionsSvc INFO # (2,1): ApplicationMgr.ExtSvc += ["StoreGateSvc", "StoreGateSvc/DetectorStore", "StoreGateSvc/ConditionStore", "Athena::RCUSvc"] -JobOptionsSvc INFO Job options successfully read in from /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO Job options successfully read in from /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt ApplicationMgr SUCCESS ==================================================================================================================================== - Welcome to ApplicationMgr (GaudiCoreSvc v33r0) - running on lxplus719.cern.ch on Sat Mar 7 21:13:45 2020 + Welcome to ApplicationMgr (GaudiCoreSvc v34r0) + running on pcumass4 on Wed Nov 4 09:34:59 2020 ==================================================================================================================================== ApplicationMgr INFO Successfully loaded modules : StoreGate, CLIDComps ApplicationMgr INFO Application Manager Configured successfully -ClassIDSvc INFO getRegistryEntries: read 11370 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 12360 CLIDRegistry entries for module ALL EventLoopMgr WARNING Unable to locate service "EventSelector" EventLoopMgr WARNING No events will be processed from external input. ApplicationMgr INFO Application Manager Initialized successfully @@ -140,5 +140,7 @@ MmIdHelper INFO The element hash max is 64 MmIdHelper INFO The detector element hash max is 128 MmIdHelper INFO Initializing MicroMegas hash indices for finding neighbors ... AtlasDetectorID::initialize_from_dictionary - OK -ClassIDSvc INFO getRegistryEntries: read 372 CLIDRegistry entries for module ALL +SCTDetectorManager INFO Using contructor with name specification, to create SCT_DetectorManager named SCT +SCTDetectorManager INFO +ClassIDSvc INFO getRegistryEntries: read 379 CLIDRegistry entries for module ALL test1 diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/CscStripPrepDataContainerCnv_p1_test.ref b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/CscStripPrepDataContainerCnv_p1_test.ref index 926b5347c3ad146a199427412130198f674fbb1a..764dbbe20bea1d22f14a64dbb9dd883d3e826c67 100644 --- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/CscStripPrepDataContainerCnv_p1_test.ref +++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/CscStripPrepDataContainerCnv_p1_test.ref @@ -1,18 +1,18 @@ -Initializing Gaudi ApplicationMgr using job opts /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt -JobOptionsSvc INFO # =======> /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +Initializing Gaudi ApplicationMgr using job opts /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO # =======> /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt JobOptionsSvc INFO # (1,1): ApplicationMgr.Dlls += ["StoreGate", "CLIDComps"] JobOptionsSvc INFO # (2,1): ApplicationMgr.ExtSvc += ["StoreGateSvc", "StoreGateSvc/DetectorStore", "StoreGateSvc/ConditionStore", "Athena::RCUSvc"] -JobOptionsSvc INFO Job options successfully read in from /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO Job options successfully read in from /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt ApplicationMgr SUCCESS ==================================================================================================================================== - Welcome to ApplicationMgr (GaudiCoreSvc v33r0) - running on lxplus719.cern.ch on Sun Mar 8 00:26:26 2020 + Welcome to ApplicationMgr (GaudiCoreSvc v34r0) + running on pcumass4 on Wed Nov 4 09:35:01 2020 ==================================================================================================================================== ApplicationMgr INFO Successfully loaded modules : StoreGate, CLIDComps ApplicationMgr INFO Application Manager Configured successfully -ClassIDSvc INFO getRegistryEntries: read 11372 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 12362 CLIDRegistry entries for module ALL EventLoopMgr WARNING Unable to locate service "EventSelector" EventLoopMgr WARNING No events will be processed from external input. ApplicationMgr INFO Application Manager Initialized successfully @@ -140,5 +140,7 @@ MmIdHelper INFO The element hash max is 64 MmIdHelper INFO The detector element hash max is 128 MmIdHelper INFO Initializing MicroMegas hash indices for finding neighbors ... AtlasDetectorID::initialize_from_dictionary - OK -ClassIDSvc INFO getRegistryEntries: read 372 CLIDRegistry entries for module ALL +SCTDetectorManager INFO Using contructor with name specification, to create SCT_DetectorManager named SCT +SCTDetectorManager INFO +ClassIDSvc INFO getRegistryEntries: read 379 CLIDRegistry entries for module ALL test1 diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/MMPrepDataContainerCnv_p1_test.ref b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/MMPrepDataContainerCnv_p1_test.ref index 93fd0cd6a5227e32171ebecb97e3cafee9fda221..df8f187c316bc26ed9b490b051e1fd31f796ec97 100644 --- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/MMPrepDataContainerCnv_p1_test.ref +++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/MMPrepDataContainerCnv_p1_test.ref @@ -1,18 +1,18 @@ -Initializing Gaudi ApplicationMgr using job opts /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt -JobOptionsSvc INFO # =======> /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +Initializing Gaudi ApplicationMgr using job opts /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO # =======> /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt JobOptionsSvc INFO # (1,1): ApplicationMgr.Dlls += ["StoreGate", "CLIDComps"] JobOptionsSvc INFO # (2,1): ApplicationMgr.ExtSvc += ["StoreGateSvc", "StoreGateSvc/DetectorStore", "StoreGateSvc/ConditionStore", "Athena::RCUSvc"] -JobOptionsSvc INFO Job options successfully read in from /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO Job options successfully read in from /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt ApplicationMgr SUCCESS ==================================================================================================================================== - Welcome to ApplicationMgr (GaudiCoreSvc v33r0) - running on lxplus719.cern.ch on Sun Mar 8 00:21:46 2020 + Welcome to ApplicationMgr (GaudiCoreSvc v34r0) + running on pcumass4 on Wed Nov 4 09:35:20 2020 ==================================================================================================================================== ApplicationMgr INFO Successfully loaded modules : StoreGate, CLIDComps ApplicationMgr INFO Application Manager Configured successfully -ClassIDSvc INFO getRegistryEntries: read 11370 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 12360 CLIDRegistry entries for module ALL EventLoopMgr WARNING Unable to locate service "EventSelector" EventLoopMgr WARNING No events will be processed from external input. ApplicationMgr INFO Application Manager Initialized successfully @@ -140,5 +140,7 @@ MmIdHelper INFO The element hash max is 64 MmIdHelper INFO The detector element hash max is 128 MmIdHelper INFO Initializing MicroMegas hash indices for finding neighbors ... AtlasDetectorID::initialize_from_dictionary - OK -ClassIDSvc INFO getRegistryEntries: read 372 CLIDRegistry entries for module ALL +SCTDetectorManager INFO Using contructor with name specification, to create SCT_DetectorManager named SCT +SCTDetectorManager INFO +ClassIDSvc INFO getRegistryEntries: read 379 CLIDRegistry entries for module ALL test1 diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/MM_ClusterOnTrackCnv_p1_test.ref b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/MM_ClusterOnTrackCnv_p1_test.ref index e55934786df9e6ed4635fea8551f6872a8621ce5..b87dc25d8c1d1e71459759f9e4e10dea61d733bc 100644 --- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/MM_ClusterOnTrackCnv_p1_test.ref +++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/MM_ClusterOnTrackCnv_p1_test.ref @@ -1,18 +1,18 @@ -Initializing Gaudi ApplicationMgr using job opts /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt -JobOptionsSvc INFO # =======> /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +Initializing Gaudi ApplicationMgr using job opts /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO # =======> /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt JobOptionsSvc INFO # (1,1): ApplicationMgr.Dlls += ["StoreGate", "CLIDComps"] JobOptionsSvc INFO # (2,1): ApplicationMgr.ExtSvc += ["StoreGateSvc", "StoreGateSvc/DetectorStore", "StoreGateSvc/ConditionStore", "Athena::RCUSvc"] -JobOptionsSvc INFO Job options successfully read in from /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO Job options successfully read in from /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt ApplicationMgr SUCCESS ==================================================================================================================================== - Welcome to ApplicationMgr (GaudiCoreSvc v33r0) - running on lxplus719.cern.ch on Sat Mar 7 20:49:20 2020 + Welcome to ApplicationMgr (GaudiCoreSvc v34r0) + running on pcumass4 on Wed Nov 4 09:34:33 2020 ==================================================================================================================================== ApplicationMgr INFO Successfully loaded modules : StoreGate, CLIDComps ApplicationMgr INFO Application Manager Configured successfully -ClassIDSvc INFO getRegistryEntries: read 11371 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 12361 CLIDRegistry entries for module ALL EventLoopMgr WARNING Unable to locate service "EventSelector" EventLoopMgr WARNING No events will be processed from external input. ApplicationMgr INFO Application Manager Initialized successfully @@ -140,7 +140,9 @@ MmIdHelper INFO The element hash max is 64 MmIdHelper INFO The detector element hash max is 128 MmIdHelper INFO Initializing MicroMegas hash indices for finding neighbors ... AtlasDetectorID::initialize_from_dictionary - OK -ClassIDSvc INFO getRegistryEntries: read 372 CLIDRegistry entries for module ALL +SCTDetectorManager INFO Using contructor with name specification, to create SCT_DetectorManager named SCT +SCTDetectorManager INFO +ClassIDSvc INFO getRegistryEntries: read 379 CLIDRegistry entries for module ALL test1 -ClassIDSvc INFO getRegistryEntries: read 291 CLIDRegistry entries for module ALL -ClassIDSvc INFO getRegistryEntries: read 168 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 320 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 170 CLIDRegistry entries for module ALL diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/MM_DigitContainerCnv_p1_test.ref b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/MM_DigitContainerCnv_p1_test.ref index 1f43aa615789d4c51545f3fabfaaae7611588677..28dae364c486ec9d8a0b63511e7665d960e9ab3d 100644 --- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/MM_DigitContainerCnv_p1_test.ref +++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/MM_DigitContainerCnv_p1_test.ref @@ -1,18 +1,18 @@ -Initializing Gaudi ApplicationMgr using job opts /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt -JobOptionsSvc INFO # =======> /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +Initializing Gaudi ApplicationMgr using job opts /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO # =======> /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt JobOptionsSvc INFO # (1,1): ApplicationMgr.Dlls += ["StoreGate", "CLIDComps"] JobOptionsSvc INFO # (2,1): ApplicationMgr.ExtSvc += ["StoreGateSvc", "StoreGateSvc/DetectorStore", "StoreGateSvc/ConditionStore", "Athena::RCUSvc"] -JobOptionsSvc INFO Job options successfully read in from /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO Job options successfully read in from /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt ApplicationMgr SUCCESS ==================================================================================================================================== - Welcome to ApplicationMgr (GaudiCoreSvc v33r0) - running on lxplus719.cern.ch on Sat Mar 7 20:54:00 2020 + Welcome to ApplicationMgr (GaudiCoreSvc v34r0) + running on pcumass4 on Wed Nov 4 09:35:35 2020 ==================================================================================================================================== ApplicationMgr INFO Successfully loaded modules : StoreGate, CLIDComps ApplicationMgr INFO Application Manager Configured successfully -ClassIDSvc INFO getRegistryEntries: read 11361 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 12351 CLIDRegistry entries for module ALL EventLoopMgr WARNING Unable to locate service "EventSelector" EventLoopMgr WARNING No events will be processed from external input. ApplicationMgr INFO Application Manager Initialized successfully @@ -140,5 +140,7 @@ MmIdHelper INFO The element hash max is 64 MmIdHelper INFO The detector element hash max is 128 MmIdHelper INFO Initializing MicroMegas hash indices for finding neighbors ... AtlasDetectorID::initialize_from_dictionary - OK -ClassIDSvc INFO getRegistryEntries: read 372 CLIDRegistry entries for module ALL +SCTDetectorManager INFO Using contructor with name specification, to create SCT_DetectorManager named SCT +SCTDetectorManager INFO +ClassIDSvc INFO getRegistryEntries: read 379 CLIDRegistry entries for module ALL test1 diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/MM_DigitContainerCnv_p2_test.ref b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/MM_DigitContainerCnv_p2_test.ref index 944ac6415254d31fb4aa2ba7107a0c78ce7646f6..ad5ca7f9891de24ab02e8754b631883c08828885 100644 --- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/MM_DigitContainerCnv_p2_test.ref +++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/MM_DigitContainerCnv_p2_test.ref @@ -1,18 +1,18 @@ -Initializing Gaudi ApplicationMgr using job opts /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt -JobOptionsSvc INFO # =======> /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +Initializing Gaudi ApplicationMgr using job opts /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO # =======> /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt JobOptionsSvc INFO # (1,1): ApplicationMgr.Dlls += ["StoreGate", "CLIDComps"] JobOptionsSvc INFO # (2,1): ApplicationMgr.ExtSvc += ["StoreGateSvc", "StoreGateSvc/DetectorStore", "StoreGateSvc/ConditionStore", "Athena::RCUSvc"] -JobOptionsSvc INFO Job options successfully read in from /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO Job options successfully read in from /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt ApplicationMgr SUCCESS ==================================================================================================================================== - Welcome to ApplicationMgr (GaudiCoreSvc v33r0) - running on lxplus719.cern.ch on Sat Mar 7 20:35:31 2020 + Welcome to ApplicationMgr (GaudiCoreSvc v34r0) + running on pcumass4 on Wed Nov 4 09:35:37 2020 ==================================================================================================================================== ApplicationMgr INFO Successfully loaded modules : StoreGate, CLIDComps ApplicationMgr INFO Application Manager Configured successfully -ClassIDSvc INFO getRegistryEntries: read 11361 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 12351 CLIDRegistry entries for module ALL EventLoopMgr WARNING Unable to locate service "EventSelector" EventLoopMgr WARNING No events will be processed from external input. ApplicationMgr INFO Application Manager Initialized successfully @@ -140,5 +140,7 @@ MmIdHelper INFO The element hash max is 64 MmIdHelper INFO The detector element hash max is 128 MmIdHelper INFO Initializing MicroMegas hash indices for finding neighbors ... AtlasDetectorID::initialize_from_dictionary - OK -ClassIDSvc INFO getRegistryEntries: read 372 CLIDRegistry entries for module ALL +SCTDetectorManager INFO Using contructor with name specification, to create SCT_DetectorManager named SCT +SCTDetectorManager INFO +ClassIDSvc INFO getRegistryEntries: read 379 CLIDRegistry entries for module ALL test1 diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/MdtDriftCircleOnTrackCnv_p2_test.ref b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/MdtDriftCircleOnTrackCnv_p2_test.ref index f9cee4c88157c2a92437c793cc9902aad10460c3..54a2dbe22d0df7849a566eb72f870bd0e6dea47d 100644 --- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/MdtDriftCircleOnTrackCnv_p2_test.ref +++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/MdtDriftCircleOnTrackCnv_p2_test.ref @@ -1,18 +1,18 @@ -Initializing Gaudi ApplicationMgr using job opts /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt -JobOptionsSvc INFO # =======> /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +Initializing Gaudi ApplicationMgr using job opts /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO # =======> /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt JobOptionsSvc INFO # (1,1): ApplicationMgr.Dlls += ["StoreGate", "CLIDComps"] JobOptionsSvc INFO # (2,1): ApplicationMgr.ExtSvc += ["StoreGateSvc", "StoreGateSvc/DetectorStore", "StoreGateSvc/ConditionStore", "Athena::RCUSvc"] -JobOptionsSvc INFO Job options successfully read in from /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO Job options successfully read in from /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt ApplicationMgr SUCCESS ==================================================================================================================================== - Welcome to ApplicationMgr (GaudiCoreSvc v33r0) - running on lxplus719.cern.ch on Sat Mar 7 20:58:07 2020 + Welcome to ApplicationMgr (GaudiCoreSvc v34r0) + running on pcumass4 on Wed Nov 4 09:34:37 2020 ==================================================================================================================================== ApplicationMgr INFO Successfully loaded modules : StoreGate, CLIDComps ApplicationMgr INFO Application Manager Configured successfully -ClassIDSvc INFO getRegistryEntries: read 11371 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 12361 CLIDRegistry entries for module ALL EventLoopMgr WARNING Unable to locate service "EventSelector" EventLoopMgr WARNING No events will be processed from external input. ApplicationMgr INFO Application Manager Initialized successfully @@ -140,7 +140,9 @@ MmIdHelper INFO The element hash max is 64 MmIdHelper INFO The detector element hash max is 128 MmIdHelper INFO Initializing MicroMegas hash indices for finding neighbors ... AtlasDetectorID::initialize_from_dictionary - OK -ClassIDSvc INFO getRegistryEntries: read 372 CLIDRegistry entries for module ALL +SCTDetectorManager INFO Using contructor with name specification, to create SCT_DetectorManager named SCT +SCTDetectorManager INFO +ClassIDSvc INFO getRegistryEntries: read 379 CLIDRegistry entries for module ALL test1 -ClassIDSvc INFO getRegistryEntries: read 291 CLIDRegistry entries for module ALL -ClassIDSvc INFO getRegistryEntries: read 168 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 320 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 170 CLIDRegistry entries for module ALL diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/MdtPrepDataContainerCnv_p1_test.ref b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/MdtPrepDataContainerCnv_p1_test.ref index 1584f712d129f7b79dd198d27c2ee89a29a1f87d..6d93fdab534a8a9fbe7094f73c62778307f4e204 100644 --- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/MdtPrepDataContainerCnv_p1_test.ref +++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/MdtPrepDataContainerCnv_p1_test.ref @@ -1,18 +1,18 @@ -Initializing Gaudi ApplicationMgr using job opts /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt -JobOptionsSvc INFO # =======> /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +Initializing Gaudi ApplicationMgr using job opts /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO # =======> /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt JobOptionsSvc INFO # (1,1): ApplicationMgr.Dlls += ["StoreGate", "CLIDComps"] JobOptionsSvc INFO # (2,1): ApplicationMgr.ExtSvc += ["StoreGateSvc", "StoreGateSvc/DetectorStore", "StoreGateSvc/ConditionStore", "Athena::RCUSvc"] -JobOptionsSvc INFO Job options successfully read in from /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO Job options successfully read in from /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt ApplicationMgr SUCCESS ==================================================================================================================================== - Welcome to ApplicationMgr (GaudiCoreSvc v33r0) - running on lxplus719.cern.ch on Sun Mar 8 00:59:40 2020 + Welcome to ApplicationMgr (GaudiCoreSvc v34r0) + running on pcumass4 on Wed Nov 4 09:35:03 2020 ==================================================================================================================================== ApplicationMgr INFO Successfully loaded modules : StoreGate, CLIDComps ApplicationMgr INFO Application Manager Configured successfully -ClassIDSvc INFO getRegistryEntries: read 11370 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 12360 CLIDRegistry entries for module ALL EventLoopMgr WARNING Unable to locate service "EventSelector" EventLoopMgr WARNING No events will be processed from external input. ApplicationMgr INFO Application Manager Initialized successfully @@ -140,5 +140,7 @@ MmIdHelper INFO The element hash max is 64 MmIdHelper INFO The detector element hash max is 128 MmIdHelper INFO Initializing MicroMegas hash indices for finding neighbors ... AtlasDetectorID::initialize_from_dictionary - OK -ClassIDSvc INFO getRegistryEntries: read 372 CLIDRegistry entries for module ALL +SCTDetectorManager INFO Using contructor with name specification, to create SCT_DetectorManager named SCT +SCTDetectorManager INFO +ClassIDSvc INFO getRegistryEntries: read 379 CLIDRegistry entries for module ALL test1 diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/MdtPrepDataContainerCnv_p2_test.ref b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/MdtPrepDataContainerCnv_p2_test.ref index 1584f712d129f7b79dd198d27c2ee89a29a1f87d..ef6a7a9a7038e5b5b8ed7e8c703dfad206eecb74 100644 --- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/MdtPrepDataContainerCnv_p2_test.ref +++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/MdtPrepDataContainerCnv_p2_test.ref @@ -1,18 +1,18 @@ -Initializing Gaudi ApplicationMgr using job opts /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt -JobOptionsSvc INFO # =======> /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +Initializing Gaudi ApplicationMgr using job opts /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO # =======> /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt JobOptionsSvc INFO # (1,1): ApplicationMgr.Dlls += ["StoreGate", "CLIDComps"] JobOptionsSvc INFO # (2,1): ApplicationMgr.ExtSvc += ["StoreGateSvc", "StoreGateSvc/DetectorStore", "StoreGateSvc/ConditionStore", "Athena::RCUSvc"] -JobOptionsSvc INFO Job options successfully read in from /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO Job options successfully read in from /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt ApplicationMgr SUCCESS ==================================================================================================================================== - Welcome to ApplicationMgr (GaudiCoreSvc v33r0) - running on lxplus719.cern.ch on Sun Mar 8 00:59:40 2020 + Welcome to ApplicationMgr (GaudiCoreSvc v34r0) + running on pcumass4 on Wed Nov 4 09:35:05 2020 ==================================================================================================================================== ApplicationMgr INFO Successfully loaded modules : StoreGate, CLIDComps ApplicationMgr INFO Application Manager Configured successfully -ClassIDSvc INFO getRegistryEntries: read 11370 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 12360 CLIDRegistry entries for module ALL EventLoopMgr WARNING Unable to locate service "EventSelector" EventLoopMgr WARNING No events will be processed from external input. ApplicationMgr INFO Application Manager Initialized successfully @@ -140,5 +140,7 @@ MmIdHelper INFO The element hash max is 64 MmIdHelper INFO The detector element hash max is 128 MmIdHelper INFO Initializing MicroMegas hash indices for finding neighbors ... AtlasDetectorID::initialize_from_dictionary - OK -ClassIDSvc INFO getRegistryEntries: read 372 CLIDRegistry entries for module ALL +SCTDetectorManager INFO Using contructor with name specification, to create SCT_DetectorManager named SCT +SCTDetectorManager INFO +ClassIDSvc INFO getRegistryEntries: read 379 CLIDRegistry entries for module ALL test1 diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/RpcClusterOnTrackCnv_p3_test.ref b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/RpcClusterOnTrackCnv_p3_test.ref index 6793b6c6c481338faf8a83c85f0b191c50a6e50b..ea4f6544a6f4aa05f535c1cfb17e9e8de2392427 100644 --- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/RpcClusterOnTrackCnv_p3_test.ref +++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/RpcClusterOnTrackCnv_p3_test.ref @@ -1,18 +1,18 @@ -Initializing Gaudi ApplicationMgr using job opts /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt -JobOptionsSvc INFO # =======> /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +Initializing Gaudi ApplicationMgr using job opts /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO # =======> /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt JobOptionsSvc INFO # (1,1): ApplicationMgr.Dlls += ["StoreGate", "CLIDComps"] JobOptionsSvc INFO # (2,1): ApplicationMgr.ExtSvc += ["StoreGateSvc", "StoreGateSvc/DetectorStore", "StoreGateSvc/ConditionStore", "Athena::RCUSvc"] -JobOptionsSvc INFO Job options successfully read in from /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO Job options successfully read in from /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt ApplicationMgr SUCCESS ==================================================================================================================================== - Welcome to ApplicationMgr (GaudiCoreSvc v33r0) - running on lxplus719.cern.ch on Sat Mar 7 20:53:50 2020 + Welcome to ApplicationMgr (GaudiCoreSvc v34r0) + running on pcumass4 on Wed Nov 4 09:34:29 2020 ==================================================================================================================================== ApplicationMgr INFO Successfully loaded modules : StoreGate, CLIDComps ApplicationMgr INFO Application Manager Configured successfully -ClassIDSvc INFO getRegistryEntries: read 11371 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 12361 CLIDRegistry entries for module ALL EventLoopMgr WARNING Unable to locate service "EventSelector" EventLoopMgr WARNING No events will be processed from external input. ApplicationMgr INFO Application Manager Initialized successfully @@ -140,7 +140,9 @@ MmIdHelper INFO The element hash max is 64 MmIdHelper INFO The detector element hash max is 128 MmIdHelper INFO Initializing MicroMegas hash indices for finding neighbors ... AtlasDetectorID::initialize_from_dictionary - OK -ClassIDSvc INFO getRegistryEntries: read 372 CLIDRegistry entries for module ALL +SCTDetectorManager INFO Using contructor with name specification, to create SCT_DetectorManager named SCT +SCTDetectorManager INFO +ClassIDSvc INFO getRegistryEntries: read 379 CLIDRegistry entries for module ALL test1 -ClassIDSvc INFO getRegistryEntries: read 291 CLIDRegistry entries for module ALL -ClassIDSvc INFO getRegistryEntries: read 168 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 320 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 170 CLIDRegistry entries for module ALL diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/RpcCoinDataContainerCnv_p1_test.ref b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/RpcCoinDataContainerCnv_p1_test.ref index fbb360bf46942210cd4cb488c9bd391d819d5557..181fafde8e41f169feef2c4f3ee136f3290737db 100644 --- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/RpcCoinDataContainerCnv_p1_test.ref +++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/RpcCoinDataContainerCnv_p1_test.ref @@ -1,18 +1,18 @@ -Initializing Gaudi ApplicationMgr using job opts /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt -JobOptionsSvc INFO # =======> /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +Initializing Gaudi ApplicationMgr using job opts /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO # =======> /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt JobOptionsSvc INFO # (1,1): ApplicationMgr.Dlls += ["StoreGate", "CLIDComps"] JobOptionsSvc INFO # (2,1): ApplicationMgr.ExtSvc += ["StoreGateSvc", "StoreGateSvc/DetectorStore", "StoreGateSvc/ConditionStore", "Athena::RCUSvc"] -JobOptionsSvc INFO Job options successfully read in from /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO Job options successfully read in from /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt ApplicationMgr SUCCESS ==================================================================================================================================== - Welcome to ApplicationMgr (GaudiCoreSvc v33r0) - running on lxplus719.cern.ch on Sun Mar 8 00:26:32 2020 + Welcome to ApplicationMgr (GaudiCoreSvc v34r0) + running on pcumass4 on Wed Nov 4 09:35:26 2020 ==================================================================================================================================== ApplicationMgr INFO Successfully loaded modules : StoreGate, CLIDComps ApplicationMgr INFO Application Manager Configured successfully -ClassIDSvc INFO getRegistryEntries: read 11360 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 12350 CLIDRegistry entries for module ALL EventLoopMgr WARNING Unable to locate service "EventSelector" EventLoopMgr WARNING No events will be processed from external input. ApplicationMgr INFO Application Manager Initialized successfully @@ -140,5 +140,7 @@ MmIdHelper INFO The element hash max is 64 MmIdHelper INFO The detector element hash max is 128 MmIdHelper INFO Initializing MicroMegas hash indices for finding neighbors ... AtlasDetectorID::initialize_from_dictionary - OK -ClassIDSvc INFO getRegistryEntries: read 372 CLIDRegistry entries for module ALL +SCTDetectorManager INFO Using contructor with name specification, to create SCT_DetectorManager named SCT +SCTDetectorManager INFO +ClassIDSvc INFO getRegistryEntries: read 379 CLIDRegistry entries for module ALL test1 diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/RpcPrepDataContainerCnv_p1_test.ref b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/RpcPrepDataContainerCnv_p1_test.ref index 1584f712d129f7b79dd198d27c2ee89a29a1f87d..502a24e0fad6148483eac7445f667a815cb26dba 100644 --- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/RpcPrepDataContainerCnv_p1_test.ref +++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/RpcPrepDataContainerCnv_p1_test.ref @@ -1,18 +1,18 @@ -Initializing Gaudi ApplicationMgr using job opts /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt -JobOptionsSvc INFO # =======> /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +Initializing Gaudi ApplicationMgr using job opts /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO # =======> /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt JobOptionsSvc INFO # (1,1): ApplicationMgr.Dlls += ["StoreGate", "CLIDComps"] JobOptionsSvc INFO # (2,1): ApplicationMgr.ExtSvc += ["StoreGateSvc", "StoreGateSvc/DetectorStore", "StoreGateSvc/ConditionStore", "Athena::RCUSvc"] -JobOptionsSvc INFO Job options successfully read in from /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO Job options successfully read in from /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt ApplicationMgr SUCCESS ==================================================================================================================================== - Welcome to ApplicationMgr (GaudiCoreSvc v33r0) - running on lxplus719.cern.ch on Sun Mar 8 00:59:40 2020 + Welcome to ApplicationMgr (GaudiCoreSvc v34r0) + running on pcumass4 on Wed Nov 4 09:35:06 2020 ==================================================================================================================================== ApplicationMgr INFO Successfully loaded modules : StoreGate, CLIDComps ApplicationMgr INFO Application Manager Configured successfully -ClassIDSvc INFO getRegistryEntries: read 11370 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 12360 CLIDRegistry entries for module ALL EventLoopMgr WARNING Unable to locate service "EventSelector" EventLoopMgr WARNING No events will be processed from external input. ApplicationMgr INFO Application Manager Initialized successfully @@ -140,5 +140,7 @@ MmIdHelper INFO The element hash max is 64 MmIdHelper INFO The detector element hash max is 128 MmIdHelper INFO Initializing MicroMegas hash indices for finding neighbors ... AtlasDetectorID::initialize_from_dictionary - OK -ClassIDSvc INFO getRegistryEntries: read 372 CLIDRegistry entries for module ALL +SCTDetectorManager INFO Using contructor with name specification, to create SCT_DetectorManager named SCT +SCTDetectorManager INFO +ClassIDSvc INFO getRegistryEntries: read 379 CLIDRegistry entries for module ALL test1 diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/RpcPrepDataContainerCnv_p2_test.ref b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/RpcPrepDataContainerCnv_p2_test.ref index 42c3c15a2ba237665b5f72b09a3469a8faa2dc7d..9df09184480cf66e90da817fe69bafa5b43a8ed9 100644 --- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/RpcPrepDataContainerCnv_p2_test.ref +++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/RpcPrepDataContainerCnv_p2_test.ref @@ -1,18 +1,18 @@ -Initializing Gaudi ApplicationMgr using job opts /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt -JobOptionsSvc INFO # =======> /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +Initializing Gaudi ApplicationMgr using job opts /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO # =======> /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt JobOptionsSvc INFO # (1,1): ApplicationMgr.Dlls += ["StoreGate", "CLIDComps"] JobOptionsSvc INFO # (2,1): ApplicationMgr.ExtSvc += ["StoreGateSvc", "StoreGateSvc/DetectorStore", "StoreGateSvc/ConditionStore", "Athena::RCUSvc"] -JobOptionsSvc INFO Job options successfully read in from /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO Job options successfully read in from /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt ApplicationMgr SUCCESS ==================================================================================================================================== - Welcome to ApplicationMgr (GaudiCoreSvc v33r0) - running on lxplus719.cern.ch on Sun Mar 8 00:59:42 2020 + Welcome to ApplicationMgr (GaudiCoreSvc v34r0) + running on pcumass4 on Wed Nov 4 09:35:08 2020 ==================================================================================================================================== ApplicationMgr INFO Successfully loaded modules : StoreGate, CLIDComps ApplicationMgr INFO Application Manager Configured successfully -ClassIDSvc INFO getRegistryEntries: read 11370 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 12360 CLIDRegistry entries for module ALL EventLoopMgr WARNING Unable to locate service "EventSelector" EventLoopMgr WARNING No events will be processed from external input. ApplicationMgr INFO Application Manager Initialized successfully @@ -140,5 +140,7 @@ MmIdHelper INFO The element hash max is 64 MmIdHelper INFO The detector element hash max is 128 MmIdHelper INFO Initializing MicroMegas hash indices for finding neighbors ... AtlasDetectorID::initialize_from_dictionary - OK -ClassIDSvc INFO getRegistryEntries: read 372 CLIDRegistry entries for module ALL +SCTDetectorManager INFO Using contructor with name specification, to create SCT_DetectorManager named SCT +SCTDetectorManager INFO +ClassIDSvc INFO getRegistryEntries: read 379 CLIDRegistry entries for module ALL test1 diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/RpcPrepDataContainerCnv_p3_test.ref b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/RpcPrepDataContainerCnv_p3_test.ref index 42c3c15a2ba237665b5f72b09a3469a8faa2dc7d..261490cbdd5bdf3c6d5de4610dd711688a56d77d 100644 --- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/RpcPrepDataContainerCnv_p3_test.ref +++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/RpcPrepDataContainerCnv_p3_test.ref @@ -1,18 +1,18 @@ -Initializing Gaudi ApplicationMgr using job opts /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt -JobOptionsSvc INFO # =======> /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +Initializing Gaudi ApplicationMgr using job opts /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO # =======> /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt JobOptionsSvc INFO # (1,1): ApplicationMgr.Dlls += ["StoreGate", "CLIDComps"] JobOptionsSvc INFO # (2,1): ApplicationMgr.ExtSvc += ["StoreGateSvc", "StoreGateSvc/DetectorStore", "StoreGateSvc/ConditionStore", "Athena::RCUSvc"] -JobOptionsSvc INFO Job options successfully read in from /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO Job options successfully read in from /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt ApplicationMgr SUCCESS ==================================================================================================================================== - Welcome to ApplicationMgr (GaudiCoreSvc v33r0) - running on lxplus719.cern.ch on Sun Mar 8 00:59:42 2020 + Welcome to ApplicationMgr (GaudiCoreSvc v34r0) + running on pcumass4 on Wed Nov 4 09:35:10 2020 ==================================================================================================================================== ApplicationMgr INFO Successfully loaded modules : StoreGate, CLIDComps ApplicationMgr INFO Application Manager Configured successfully -ClassIDSvc INFO getRegistryEntries: read 11370 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 12360 CLIDRegistry entries for module ALL EventLoopMgr WARNING Unable to locate service "EventSelector" EventLoopMgr WARNING No events will be processed from external input. ApplicationMgr INFO Application Manager Initialized successfully @@ -140,5 +140,7 @@ MmIdHelper INFO The element hash max is 64 MmIdHelper INFO The detector element hash max is 128 MmIdHelper INFO Initializing MicroMegas hash indices for finding neighbors ... AtlasDetectorID::initialize_from_dictionary - OK -ClassIDSvc INFO getRegistryEntries: read 372 CLIDRegistry entries for module ALL +SCTDetectorManager INFO Using contructor with name specification, to create SCT_DetectorManager named SCT +SCTDetectorManager INFO +ClassIDSvc INFO getRegistryEntries: read 379 CLIDRegistry entries for module ALL test1 diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/STGC_ClusterOnTrackCnv_p1_test.ref b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/STGC_ClusterOnTrackCnv_p1_test.ref index f3f1295795bd68d57d356996c3d3834ff004d0ec..a5372c3c70f75bb979b22c08992954f6de39d477 100644 --- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/STGC_ClusterOnTrackCnv_p1_test.ref +++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/STGC_ClusterOnTrackCnv_p1_test.ref @@ -1,18 +1,18 @@ -Initializing Gaudi ApplicationMgr using job opts /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt -JobOptionsSvc INFO # =======> /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +Initializing Gaudi ApplicationMgr using job opts /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO # =======> /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt JobOptionsSvc INFO # (1,1): ApplicationMgr.Dlls += ["StoreGate", "CLIDComps"] JobOptionsSvc INFO # (2,1): ApplicationMgr.ExtSvc += ["StoreGateSvc", "StoreGateSvc/DetectorStore", "StoreGateSvc/ConditionStore", "Athena::RCUSvc"] -JobOptionsSvc INFO Job options successfully read in from /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO Job options successfully read in from /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt ApplicationMgr SUCCESS ==================================================================================================================================== - Welcome to ApplicationMgr (GaudiCoreSvc v33r0) - running on lxplus719.cern.ch on Sun Mar 8 00:57:19 2020 + Welcome to ApplicationMgr (GaudiCoreSvc v34r0) + running on pcumass4 on Wed Nov 4 09:34:35 2020 ==================================================================================================================================== ApplicationMgr INFO Successfully loaded modules : StoreGate, CLIDComps ApplicationMgr INFO Application Manager Configured successfully -ClassIDSvc INFO getRegistryEntries: read 11371 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 12361 CLIDRegistry entries for module ALL EventLoopMgr WARNING Unable to locate service "EventSelector" EventLoopMgr WARNING No events will be processed from external input. ApplicationMgr INFO Application Manager Initialized successfully @@ -140,7 +140,9 @@ MmIdHelper INFO The element hash max is 64 MmIdHelper INFO The detector element hash max is 128 MmIdHelper INFO Initializing MicroMegas hash indices for finding neighbors ... AtlasDetectorID::initialize_from_dictionary - OK -ClassIDSvc INFO getRegistryEntries: read 372 CLIDRegistry entries for module ALL +SCTDetectorManager INFO Using contructor with name specification, to create SCT_DetectorManager named SCT +SCTDetectorManager INFO +ClassIDSvc INFO getRegistryEntries: read 379 CLIDRegistry entries for module ALL test1 -ClassIDSvc INFO getRegistryEntries: read 291 CLIDRegistry entries for module ALL -ClassIDSvc INFO getRegistryEntries: read 168 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 320 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 170 CLIDRegistry entries for module ALL diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/STGC_DigitContainerCnv_p1_test.ref b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/STGC_DigitContainerCnv_p1_test.ref index 15caa6ea8b8584258de8d70ae032ea7c3fd61a37..d00583b1dd27333880def958a7a62723d1ddad95 100644 --- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/STGC_DigitContainerCnv_p1_test.ref +++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/STGC_DigitContainerCnv_p1_test.ref @@ -1,18 +1,18 @@ -Initializing Gaudi ApplicationMgr using job opts /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt -JobOptionsSvc INFO # =======> /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +Initializing Gaudi ApplicationMgr using job opts /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO # =======> /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt JobOptionsSvc INFO # (1,1): ApplicationMgr.Dlls += ["StoreGate", "CLIDComps"] JobOptionsSvc INFO # (2,1): ApplicationMgr.ExtSvc += ["StoreGateSvc", "StoreGateSvc/DetectorStore", "StoreGateSvc/ConditionStore", "Athena::RCUSvc"] -JobOptionsSvc INFO Job options successfully read in from /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO Job options successfully read in from /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt ApplicationMgr SUCCESS ==================================================================================================================================== - Welcome to ApplicationMgr (GaudiCoreSvc v33r0) - running on lxplus719.cern.ch on Sat Mar 7 20:58:17 2020 + Welcome to ApplicationMgr (GaudiCoreSvc v34r0) + running on pcumass4 on Wed Nov 4 09:35:40 2020 ==================================================================================================================================== ApplicationMgr INFO Successfully loaded modules : StoreGate, CLIDComps ApplicationMgr INFO Application Manager Configured successfully -ClassIDSvc INFO getRegistryEntries: read 11361 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 12351 CLIDRegistry entries for module ALL EventLoopMgr WARNING Unable to locate service "EventSelector" EventLoopMgr WARNING No events will be processed from external input. ApplicationMgr INFO Application Manager Initialized successfully @@ -140,5 +140,7 @@ MmIdHelper INFO The element hash max is 64 MmIdHelper INFO The detector element hash max is 128 MmIdHelper INFO Initializing MicroMegas hash indices for finding neighbors ... AtlasDetectorID::initialize_from_dictionary - OK -ClassIDSvc INFO getRegistryEntries: read 372 CLIDRegistry entries for module ALL +SCTDetectorManager INFO Using contructor with name specification, to create SCT_DetectorManager named SCT +SCTDetectorManager INFO +ClassIDSvc INFO getRegistryEntries: read 379 CLIDRegistry entries for module ALL test1 diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/STGC_RawDataContainerCnv_p1_test.ref b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/STGC_RawDataContainerCnv_p1_test.ref index f33987f72618cb35b7110c42b796c8d41936dcc7..69b35ca28fac4063cc4b1e4eaa8110f2f5f060d3 100644 --- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/STGC_RawDataContainerCnv_p1_test.ref +++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/STGC_RawDataContainerCnv_p1_test.ref @@ -1,18 +1,18 @@ -Initializing Gaudi ApplicationMgr using job opts /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt -JobOptionsSvc INFO # =======> /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +Initializing Gaudi ApplicationMgr using job opts /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO # =======> /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt JobOptionsSvc INFO # (1,1): ApplicationMgr.Dlls += ["StoreGate", "CLIDComps"] JobOptionsSvc INFO # (2,1): ApplicationMgr.ExtSvc += ["StoreGateSvc", "StoreGateSvc/DetectorStore", "StoreGateSvc/ConditionStore", "Athena::RCUSvc"] -JobOptionsSvc INFO Job options successfully read in from /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO Job options successfully read in from /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt ApplicationMgr SUCCESS ==================================================================================================================================== - Welcome to ApplicationMgr (GaudiCoreSvc v33r0) - running on lxplus719.cern.ch on Sat Mar 7 20:27:40 2020 + Welcome to ApplicationMgr (GaudiCoreSvc v34r0) + running on pcumass4 on Wed Nov 4 09:35:42 2020 ==================================================================================================================================== ApplicationMgr INFO Successfully loaded modules : StoreGate, CLIDComps ApplicationMgr INFO Application Manager Configured successfully -ClassIDSvc INFO getRegistryEntries: read 11360 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 12350 CLIDRegistry entries for module ALL EventLoopMgr WARNING Unable to locate service "EventSelector" EventLoopMgr WARNING No events will be processed from external input. ApplicationMgr INFO Application Manager Initialized successfully @@ -140,7 +140,9 @@ MmIdHelper INFO The element hash max is 64 MmIdHelper INFO The detector element hash max is 128 MmIdHelper INFO Initializing MicroMegas hash indices for finding neighbors ... AtlasDetectorID::initialize_from_dictionary - OK -ClassIDSvc INFO getRegistryEntries: read 372 CLIDRegistry entries for module ALL +SCTDetectorManager INFO Using contructor with name specification, to create SCT_DetectorManager named SCT +SCTDetectorManager INFO +ClassIDSvc INFO getRegistryEntries: read 379 CLIDRegistry entries for module ALL test1 Before has size: 2, after has size: 2 Collection #1 diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/TgcClusterOnTrackCnv_p2_test.ref b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/TgcClusterOnTrackCnv_p2_test.ref index afb0082ce2f5810854fa2710ae4136bf9e013fd6..e27a493f1a5fc7453973f371a1e555b5da20cc31 100644 --- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/TgcClusterOnTrackCnv_p2_test.ref +++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/TgcClusterOnTrackCnv_p2_test.ref @@ -1,18 +1,18 @@ -Initializing Gaudi ApplicationMgr using job opts /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt -JobOptionsSvc INFO # =======> /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +Initializing Gaudi ApplicationMgr using job opts /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO # =======> /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt JobOptionsSvc INFO # (1,1): ApplicationMgr.Dlls += ["StoreGate", "CLIDComps"] JobOptionsSvc INFO # (2,1): ApplicationMgr.ExtSvc += ["StoreGateSvc", "StoreGateSvc/DetectorStore", "StoreGateSvc/ConditionStore", "Athena::RCUSvc"] -JobOptionsSvc INFO Job options successfully read in from /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO Job options successfully read in from /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt ApplicationMgr SUCCESS ==================================================================================================================================== - Welcome to ApplicationMgr (GaudiCoreSvc v33r0) - running on lxplus719.cern.ch on Sat Mar 7 20:35:19 2020 + Welcome to ApplicationMgr (GaudiCoreSvc v34r0) + running on pcumass4 on Wed Nov 4 09:34:31 2020 ==================================================================================================================================== ApplicationMgr INFO Successfully loaded modules : StoreGate, CLIDComps ApplicationMgr INFO Application Manager Configured successfully -ClassIDSvc INFO getRegistryEntries: read 11371 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 12361 CLIDRegistry entries for module ALL EventLoopMgr WARNING Unable to locate service "EventSelector" EventLoopMgr WARNING No events will be processed from external input. ApplicationMgr INFO Application Manager Initialized successfully @@ -140,7 +140,9 @@ MmIdHelper INFO The element hash max is 64 MmIdHelper INFO The detector element hash max is 128 MmIdHelper INFO Initializing MicroMegas hash indices for finding neighbors ... AtlasDetectorID::initialize_from_dictionary - OK -ClassIDSvc INFO getRegistryEntries: read 372 CLIDRegistry entries for module ALL +SCTDetectorManager INFO Using contructor with name specification, to create SCT_DetectorManager named SCT +SCTDetectorManager INFO +ClassIDSvc INFO getRegistryEntries: read 379 CLIDRegistry entries for module ALL test1 -ClassIDSvc INFO getRegistryEntries: read 291 CLIDRegistry entries for module ALL -ClassIDSvc INFO getRegistryEntries: read 168 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 320 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 170 CLIDRegistry entries for module ALL diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/TgcCoinDataContainerCnv_p1_test.ref b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/TgcCoinDataContainerCnv_p1_test.ref index 1154f6d092517e4b8f48f442dbced038456c5d44..c2e52e80af0b59e3d9985a03b7a97b1f54d49890 100644 --- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/TgcCoinDataContainerCnv_p1_test.ref +++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/TgcCoinDataContainerCnv_p1_test.ref @@ -1,18 +1,18 @@ -Initializing Gaudi ApplicationMgr using job opts /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt -JobOptionsSvc INFO # =======> /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +Initializing Gaudi ApplicationMgr using job opts /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO # =======> /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt JobOptionsSvc INFO # (1,1): ApplicationMgr.Dlls += ["StoreGate", "CLIDComps"] JobOptionsSvc INFO # (2,1): ApplicationMgr.ExtSvc += ["StoreGateSvc", "StoreGateSvc/DetectorStore", "StoreGateSvc/ConditionStore", "Athena::RCUSvc"] -JobOptionsSvc INFO Job options successfully read in from /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO Job options successfully read in from /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt ApplicationMgr SUCCESS ==================================================================================================================================== - Welcome to ApplicationMgr (GaudiCoreSvc v33r0) - running on lxplus719.cern.ch on Sat Mar 7 21:13:54 2020 + Welcome to ApplicationMgr (GaudiCoreSvc v34r0) + running on pcumass4 on Wed Nov 4 09:35:27 2020 ==================================================================================================================================== ApplicationMgr INFO Successfully loaded modules : StoreGate, CLIDComps ApplicationMgr INFO Application Manager Configured successfully -ClassIDSvc INFO getRegistryEntries: read 11360 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 12350 CLIDRegistry entries for module ALL EventLoopMgr WARNING Unable to locate service "EventSelector" EventLoopMgr WARNING No events will be processed from external input. ApplicationMgr INFO Application Manager Initialized successfully @@ -140,5 +140,7 @@ MmIdHelper INFO The element hash max is 64 MmIdHelper INFO The detector element hash max is 128 MmIdHelper INFO Initializing MicroMegas hash indices for finding neighbors ... AtlasDetectorID::initialize_from_dictionary - OK -ClassIDSvc INFO getRegistryEntries: read 372 CLIDRegistry entries for module ALL +SCTDetectorManager INFO Using contructor with name specification, to create SCT_DetectorManager named SCT +SCTDetectorManager INFO +ClassIDSvc INFO getRegistryEntries: read 379 CLIDRegistry entries for module ALL test1 diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/TgcCoinDataContainerCnv_p2_test.ref b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/TgcCoinDataContainerCnv_p2_test.ref index c3171a22bf8f7cd7afd63e2b10bd77335320ad7a..504ba4f1fb7e42ad6278d029d721a037cb7beb22 100644 --- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/TgcCoinDataContainerCnv_p2_test.ref +++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/TgcCoinDataContainerCnv_p2_test.ref @@ -1,18 +1,18 @@ -Initializing Gaudi ApplicationMgr using job opts /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt -JobOptionsSvc INFO # =======> /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +Initializing Gaudi ApplicationMgr using job opts /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO # =======> /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt JobOptionsSvc INFO # (1,1): ApplicationMgr.Dlls += ["StoreGate", "CLIDComps"] JobOptionsSvc INFO # (2,1): ApplicationMgr.ExtSvc += ["StoreGateSvc", "StoreGateSvc/DetectorStore", "StoreGateSvc/ConditionStore", "Athena::RCUSvc"] -JobOptionsSvc INFO Job options successfully read in from /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO Job options successfully read in from /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt ApplicationMgr SUCCESS ==================================================================================================================================== - Welcome to ApplicationMgr (GaudiCoreSvc v33r0) - running on lxplus719.cern.ch on Sun Mar 8 00:21:46 2020 + Welcome to ApplicationMgr (GaudiCoreSvc v34r0) + running on pcumass4 on Wed Nov 4 09:35:29 2020 ==================================================================================================================================== ApplicationMgr INFO Successfully loaded modules : StoreGate, CLIDComps ApplicationMgr INFO Application Manager Configured successfully -ClassIDSvc INFO getRegistryEntries: read 11360 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 12350 CLIDRegistry entries for module ALL EventLoopMgr WARNING Unable to locate service "EventSelector" EventLoopMgr WARNING No events will be processed from external input. ApplicationMgr INFO Application Manager Initialized successfully @@ -140,5 +140,7 @@ MmIdHelper INFO The element hash max is 64 MmIdHelper INFO The detector element hash max is 128 MmIdHelper INFO Initializing MicroMegas hash indices for finding neighbors ... AtlasDetectorID::initialize_from_dictionary - OK -ClassIDSvc INFO getRegistryEntries: read 372 CLIDRegistry entries for module ALL +SCTDetectorManager INFO Using contructor with name specification, to create SCT_DetectorManager named SCT +SCTDetectorManager INFO +ClassIDSvc INFO getRegistryEntries: read 379 CLIDRegistry entries for module ALL test1 diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/TgcCoinDataContainerCnv_p3_test.ref b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/TgcCoinDataContainerCnv_p3_test.ref index e3a93452533b3c8f342692961f9ee50167f3338b..4a86c312012bc4e1f452bb003ee5a1608297b62d 100644 --- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/TgcCoinDataContainerCnv_p3_test.ref +++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/TgcCoinDataContainerCnv_p3_test.ref @@ -1,18 +1,18 @@ -Initializing Gaudi ApplicationMgr using job opts /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt -JobOptionsSvc INFO # =======> /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +Initializing Gaudi ApplicationMgr using job opts /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO # =======> /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt JobOptionsSvc INFO # (1,1): ApplicationMgr.Dlls += ["StoreGate", "CLIDComps"] JobOptionsSvc INFO # (2,1): ApplicationMgr.ExtSvc += ["StoreGateSvc", "StoreGateSvc/DetectorStore", "StoreGateSvc/ConditionStore", "Athena::RCUSvc"] -JobOptionsSvc INFO Job options successfully read in from /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO Job options successfully read in from /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt ApplicationMgr SUCCESS ==================================================================================================================================== - Welcome to ApplicationMgr (GaudiCoreSvc v33r0) - running on lxplus719.cern.ch on Sat Mar 7 20:56:13 2020 + Welcome to ApplicationMgr (GaudiCoreSvc v34r0) + running on pcumass4 on Wed Nov 4 09:35:31 2020 ==================================================================================================================================== ApplicationMgr INFO Successfully loaded modules : StoreGate, CLIDComps ApplicationMgr INFO Application Manager Configured successfully -ClassIDSvc INFO getRegistryEntries: read 11360 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 12350 CLIDRegistry entries for module ALL EventLoopMgr WARNING Unable to locate service "EventSelector" EventLoopMgr WARNING No events will be processed from external input. ApplicationMgr INFO Application Manager Initialized successfully @@ -140,5 +140,7 @@ MmIdHelper INFO The element hash max is 64 MmIdHelper INFO The detector element hash max is 128 MmIdHelper INFO Initializing MicroMegas hash indices for finding neighbors ... AtlasDetectorID::initialize_from_dictionary - OK -ClassIDSvc INFO getRegistryEntries: read 372 CLIDRegistry entries for module ALL +SCTDetectorManager INFO Using contructor with name specification, to create SCT_DetectorManager named SCT +SCTDetectorManager INFO +ClassIDSvc INFO getRegistryEntries: read 379 CLIDRegistry entries for module ALL test1 diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/TgcPrepDataContainerCnv_p1_test.ref b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/TgcPrepDataContainerCnv_p1_test.ref index 4917471e954852e1d00b91d6f84ae1c02a3c0ca2..c3da0d71eacf6dfd1bfdaacdb023cbf058ede200 100644 --- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/TgcPrepDataContainerCnv_p1_test.ref +++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/TgcPrepDataContainerCnv_p1_test.ref @@ -1,18 +1,18 @@ -Initializing Gaudi ApplicationMgr using job opts /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt -JobOptionsSvc INFO # =======> /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +Initializing Gaudi ApplicationMgr using job opts /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO # =======> /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt JobOptionsSvc INFO # (1,1): ApplicationMgr.Dlls += ["StoreGate", "CLIDComps"] JobOptionsSvc INFO # (2,1): ApplicationMgr.ExtSvc += ["StoreGateSvc", "StoreGateSvc/DetectorStore", "StoreGateSvc/ConditionStore", "Athena::RCUSvc"] -JobOptionsSvc INFO Job options successfully read in from /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO Job options successfully read in from /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt ApplicationMgr SUCCESS ==================================================================================================================================== - Welcome to ApplicationMgr (GaudiCoreSvc v33r0) - running on lxplus719.cern.ch on Sun Mar 8 00:57:21 2020 + Welcome to ApplicationMgr (GaudiCoreSvc v34r0) + running on pcumass4 on Wed Nov 4 09:35:12 2020 ==================================================================================================================================== ApplicationMgr INFO Successfully loaded modules : StoreGate, CLIDComps ApplicationMgr INFO Application Manager Configured successfully -ClassIDSvc INFO getRegistryEntries: read 11370 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 12360 CLIDRegistry entries for module ALL EventLoopMgr WARNING Unable to locate service "EventSelector" EventLoopMgr WARNING No events will be processed from external input. ApplicationMgr INFO Application Manager Initialized successfully @@ -140,5 +140,7 @@ MmIdHelper INFO The element hash max is 64 MmIdHelper INFO The detector element hash max is 128 MmIdHelper INFO Initializing MicroMegas hash indices for finding neighbors ... AtlasDetectorID::initialize_from_dictionary - OK -ClassIDSvc INFO getRegistryEntries: read 372 CLIDRegistry entries for module ALL +SCTDetectorManager INFO Using contructor with name specification, to create SCT_DetectorManager named SCT +SCTDetectorManager INFO +ClassIDSvc INFO getRegistryEntries: read 379 CLIDRegistry entries for module ALL test1 diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/TgcPrepDataContainerCnv_p2_test.ref b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/TgcPrepDataContainerCnv_p2_test.ref index bd3c418438615fe102cf5d749d27beab70af0dd0..c5386371eae29bd428fd5faf2466b2e0a6b2bbf3 100644 --- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/TgcPrepDataContainerCnv_p2_test.ref +++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/TgcPrepDataContainerCnv_p2_test.ref @@ -1,18 +1,18 @@ -Initializing Gaudi ApplicationMgr using job opts /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt -JobOptionsSvc INFO # =======> /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +Initializing Gaudi ApplicationMgr using job opts /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO # =======> /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt JobOptionsSvc INFO # (1,1): ApplicationMgr.Dlls += ["StoreGate", "CLIDComps"] JobOptionsSvc INFO # (2,1): ApplicationMgr.ExtSvc += ["StoreGateSvc", "StoreGateSvc/DetectorStore", "StoreGateSvc/ConditionStore", "Athena::RCUSvc"] -JobOptionsSvc INFO Job options successfully read in from /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO Job options successfully read in from /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt ApplicationMgr SUCCESS ==================================================================================================================================== - Welcome to ApplicationMgr (GaudiCoreSvc v33r0) - running on lxplus719.cern.ch on Sun Mar 8 00:57:24 2020 + Welcome to ApplicationMgr (GaudiCoreSvc v34r0) + running on pcumass4 on Wed Nov 4 09:35:14 2020 ==================================================================================================================================== ApplicationMgr INFO Successfully loaded modules : StoreGate, CLIDComps ApplicationMgr INFO Application Manager Configured successfully -ClassIDSvc INFO getRegistryEntries: read 11370 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 12360 CLIDRegistry entries for module ALL EventLoopMgr WARNING Unable to locate service "EventSelector" EventLoopMgr WARNING No events will be processed from external input. ApplicationMgr INFO Application Manager Initialized successfully @@ -140,5 +140,7 @@ MmIdHelper INFO The element hash max is 64 MmIdHelper INFO The detector element hash max is 128 MmIdHelper INFO Initializing MicroMegas hash indices for finding neighbors ... AtlasDetectorID::initialize_from_dictionary - OK -ClassIDSvc INFO getRegistryEntries: read 372 CLIDRegistry entries for module ALL +SCTDetectorManager INFO Using contructor with name specification, to create SCT_DetectorManager named SCT +SCTDetectorManager INFO +ClassIDSvc INFO getRegistryEntries: read 379 CLIDRegistry entries for module ALL test1 diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/TgcPrepDataContainerCnv_p3_test.ref b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/TgcPrepDataContainerCnv_p3_test.ref index bd3c418438615fe102cf5d749d27beab70af0dd0..94c5023c1e765e61dc831d4165fa04630af458df 100644 --- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/TgcPrepDataContainerCnv_p3_test.ref +++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/TgcPrepDataContainerCnv_p3_test.ref @@ -1,18 +1,18 @@ -Initializing Gaudi ApplicationMgr using job opts /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt -JobOptionsSvc INFO # =======> /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +Initializing Gaudi ApplicationMgr using job opts /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO # =======> /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt JobOptionsSvc INFO # (1,1): ApplicationMgr.Dlls += ["StoreGate", "CLIDComps"] JobOptionsSvc INFO # (2,1): ApplicationMgr.ExtSvc += ["StoreGateSvc", "StoreGateSvc/DetectorStore", "StoreGateSvc/ConditionStore", "Athena::RCUSvc"] -JobOptionsSvc INFO Job options successfully read in from /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO Job options successfully read in from /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt ApplicationMgr SUCCESS ==================================================================================================================================== - Welcome to ApplicationMgr (GaudiCoreSvc v33r0) - running on lxplus719.cern.ch on Sun Mar 8 00:57:24 2020 + Welcome to ApplicationMgr (GaudiCoreSvc v34r0) + running on pcumass4 on Wed Nov 4 09:35:16 2020 ==================================================================================================================================== ApplicationMgr INFO Successfully loaded modules : StoreGate, CLIDComps ApplicationMgr INFO Application Manager Configured successfully -ClassIDSvc INFO getRegistryEntries: read 11370 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 12360 CLIDRegistry entries for module ALL EventLoopMgr WARNING Unable to locate service "EventSelector" EventLoopMgr WARNING No events will be processed from external input. ApplicationMgr INFO Application Manager Initialized successfully @@ -140,5 +140,7 @@ MmIdHelper INFO The element hash max is 64 MmIdHelper INFO The detector element hash max is 128 MmIdHelper INFO Initializing MicroMegas hash indices for finding neighbors ... AtlasDetectorID::initialize_from_dictionary - OK -ClassIDSvc INFO getRegistryEntries: read 372 CLIDRegistry entries for module ALL +SCTDetectorManager INFO Using contructor with name specification, to create SCT_DetectorManager named SCT +SCTDetectorManager INFO +ClassIDSvc INFO getRegistryEntries: read 379 CLIDRegistry entries for module ALL test1 diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/sTgcPrepDataContainerCnv_p1_test.ref b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/sTgcPrepDataContainerCnv_p1_test.ref index 8878998c78af6485a700a6f4327bef16d17d4bac..74deb3704f3a5fd5f89f2e8eae814b6af74b8d26 100644 --- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/sTgcPrepDataContainerCnv_p1_test.ref +++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/share/sTgcPrepDataContainerCnv_p1_test.ref @@ -1,18 +1,18 @@ -Initializing Gaudi ApplicationMgr using job opts /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-dbg/x86_64-centos7-gcc8-dbg/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt -JobOptionsSvc INFO # =======> /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-dbg/x86_64-centos7-gcc8-dbg/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +Initializing Gaudi ApplicationMgr using job opts /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO # =======> /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt JobOptionsSvc INFO # (1,1): ApplicationMgr.Dlls += ["StoreGate", "CLIDComps"] JobOptionsSvc INFO # (2,1): ApplicationMgr.ExtSvc += ["StoreGateSvc", "StoreGateSvc/DetectorStore", "StoreGateSvc/ConditionStore", "Athena::RCUSvc"] -JobOptionsSvc INFO Job options successfully read in from /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-centos7-gcc8-dbg/x86_64-centos7-gcc8-dbg/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt +JobOptionsSvc INFO Job options successfully read in from /home/emoyse/master2/build/x86_64-centos7-gcc8-opt/jobOptions/MuonEventTPCnv/MuonEventTPCnv_test.txt ApplicationMgr SUCCESS ==================================================================================================================================== - Welcome to ApplicationMgr (GaudiCoreSvc v33r0) - running on lxplus7100.cern.ch on Sun Mar 8 00:56:08 2020 + Welcome to ApplicationMgr (GaudiCoreSvc v34r0) + running on pcumass4 on Wed Nov 4 09:35:18 2020 ==================================================================================================================================== ApplicationMgr INFO Successfully loaded modules : StoreGate, CLIDComps ApplicationMgr INFO Application Manager Configured successfully -ClassIDSvc INFO getRegistryEntries: read 11423 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 12360 CLIDRegistry entries for module ALL EventLoopMgr WARNING Unable to locate service "EventSelector" EventLoopMgr WARNING No events will be processed from external input. ApplicationMgr INFO Application Manager Initialized successfully @@ -68,22 +68,7 @@ eta_index 7 DEBUG Wafer range -> 2/1/0/0/0:21/-6:6 | 2/1/0/1/0:37/-6:6 | 2/1/0/2/0:51/-6:6 | 2/1/-2,2/0:2/0:47/0 DEBUG Pixel range -> 2/1/0/0/0:21/-6:6/0:327/0:191 | 2/1/0/1/0:37/-6:6/0:327/0:143 | 2/1/0/2/0:51/-6:6/0:327/0:143 | 2/1/-2,2/0:2/0:47/0/0:327/0:143 INFO SCT_ID::initialize_from_dictionary -DEBUG SCT_ID::initialize_from_dictionary (Re)initialize AtlasDetectorID::initialize_from_dictionary - OK -DEBUG SCT_ID::initLevelsFromDict decode index and bit fields for each level: -DEBUG SCT_ID::initLevelsFromDict indet decode 1 vals 2,4,5,7,10,11,12,13 mask/zero mask/shift/bits/offset 7 1fffffffffffffff 61 3 0 indexes 0 0 1 2 0 3 0 0 4 5 6 7 mode enumerated -DEBUG SCT_ID::initLevelsFromDict sct decode 1 vals 1:3 mask/zero mask/shift/bits/offset 3 e7ffffffffffffff 59 2 3 indexes mode both_bounded -DEBUG SCT_ID::initLevelsFromDict bec decode 1 vals -2,0,2 mask/zero mask/shift/bits/offset 3 f9ffffffffffffff 57 2 5 indexes 0 0 1 0 2 mode enumerated -DEBUG SCT_ID::initLevelsFromDict lay_disk decode 0 vals 0:8 mask/zero mask/shift/bits/offset f fe1fffffffffffff 53 4 7 indexes mode both_bounded -DEBUG SCT_ID::initLevelsFromDict phi_mod decode 0 vals 0:55 mask/zero mask/shift/bits/offset 3f ffe07fffffffffff 47 6 11 indexes mode both_bounded -DEBUG SCT_ID::initLevelsFromDict eta_mod decode 1 vals -6:6 mask/zero mask/shift/bits/offset f ffff87ffffffffff 43 4 17 indexes mode both_bounded -DEBUG SCT_ID::initLevelsFromDict side decode 0 vals 0:1 mask/zero mask/shift/bits/offset 1 fffffbffffffffff 42 1 21 indexes mode both_bounded -DEBUG SCT_ID::initLevelsFromDict strip decode 0 vals 0:767 mask/zero mask/shift/bits/offset 3ff fffffc00ffffffff 32 10 22 indexes mode both_bounded -DEBUG SCT_ID::initialize_from_dictionary Set barrel field values: 0 -DEBUG SCT_ID::initialize_from_dictionary Found field values: SCT 2 -DEBUG SCT_ID::init_neighbors -DEBUG SCT_ID::initialize_from_dictionary Wafer range -> 2/2/0/0/0:31/-6:-1/0:1 | 2/2/0/1/0:39/-6:-1/0:1 | 2/2/0/2/0:47/-6:-1/0:1 | 2/2/0/3/0:55/-6:-1/0:1 | 2/2/0/0/0:31/1:6/0:1 | 2/2/0/1/0:39/1:6/0:1 | 2/2/0/2/0:47/1:6/0:1 | 2/2/0/3/0:55/1:6/0:1 | 2/2/-2,2/0:8/0:51/0/0:1 | 2/2/-2,2/0/0:39/1/0:1 | 2/2/-2,2/1:5/0:39/1:2/0:1 | 2/2/-2,2/6:7/0:39/1/0:1 -Strip range -> 2/2/0/0/0:31/-6:-1/0:1/0:767 | 2/2/0/1/0:39/-6:-1/0:1/0:767 | 2/2/0/2/0:47/-6:-1/0:1/0:767 | 2/2/0/3/0:55/-6:-1/0:1/0:767 | 2/2/0/0/0:31/1:6/0:1/0:767 | 2/2/0/1/0:39/1:6/0:1/0:767 | 2/2/0/2/0:47/1:6/0:1/0:767 | 2/2/0/3/0:55/1:6/0:1/0:767 | 2/2/-2,2/0:8/0:51/0/0:1/0:767 | 2/2/-2,2/0/0:39/1/0:1/0:767 | 2/2/-2,2/1:5/0:39/1:2/0:1/0:767 | 2/2/-2,2/6:7/0:39/1/0:1/0:767 INFO Initialize from dictionary cout 0 DEBUG (Re)initialize AtlasDetectorID::initialize_from_dictionary - OK @@ -155,5 +140,7 @@ MmIdHelper INFO The element hash max is 64 MmIdHelper INFO The detector element hash max is 128 MmIdHelper INFO Initializing MicroMegas hash indices for finding neighbors ... AtlasDetectorID::initialize_from_dictionary - OK -ClassIDSvc INFO getRegistryEntries: read 372 CLIDRegistry entries for module ALL +SCTDetectorManager INFO Using contructor with name specification, to create SCT_DetectorManager named SCT +SCTDetectorManager INFO +ClassIDSvc INFO getRegistryEntries: read 379 CLIDRegistry entries for module ALL test1 diff --git a/MuonSpectrometer/MuonConfig/python/MuonCalibrationConfig.py b/MuonSpectrometer/MuonConfig/python/MuonCalibrationConfig.py index e6ac246bb0828c8bb2982e581cc79a3313487538..9b7244c3d267dc89cde391e343c437adb0e70387 100644 --- a/MuonSpectrometer/MuonConfig/python/MuonCalibrationConfig.py +++ b/MuonSpectrometer/MuonConfig/python/MuonCalibrationConfig.py @@ -69,10 +69,10 @@ def _setupMdtCondDB(flags): # end of function setupMdtCondDB() def MdtCalibrationToolCfg(flags, **kwargs): - result=MdtCalibrationDbToolCfg(flags, **kwargs) - mdt_calibibration_db_tool = result.getPrimary() + result=MdtCalibrationDbToolCfg(flags) + mdt_calibration_db_tool = result.getPrimary() - kwargs.setdefault("CalibrationDbTool", mdt_calibibration_db_tool) + kwargs.setdefault("CalibrationDbTool", mdt_calibration_db_tool) kwargs.setdefault("DoSlewingCorrection", flags.Muon.Calib.correctMdtRtForTimeSlewing) kwargs.setdefault("DoTemperatureCorrection", flags.Muon.Calib.applyRtScaling) kwargs.setdefault("DoWireSagCorrection", flags.Muon.Calib.correctMdtRtWireSag) @@ -80,7 +80,7 @@ def MdtCalibrationToolCfg(flags, **kwargs): acc = MagneticFieldSvcCfg(flags) result.merge(acc) - + MdtCalibrationTool = CompFactory.MdtCalibrationTool mdt_calibration_tool = MdtCalibrationTool(**kwargs) result.setPrivateTools(mdt_calibration_tool) @@ -93,7 +93,8 @@ def MdtCalibrationDbToolCfg(flags, **kwargs): kwargs.setdefault("CreateBFieldFunctions", flags.Muon.Calib.correctMdtRtForBField) kwargs.setdefault("CreateWireSagFunctions", flags.Muon.Calib.correctMdtRtWireSag) kwargs.setdefault("CreateSlewingFunctions", flags.Muon.Calib.correctMdtRtForTimeSlewing) - + kwargs.setdefault("WasConfigured", True) + MdtCalibrationDbTool = CompFactory.MdtCalibrationDbTool mdt_calibration_db_tool = MdtCalibrationDbTool(**kwargs) result.setPrivateTools(mdt_calibration_db_tool) diff --git a/MuonSpectrometer/MuonConfig/python/MuonRIO_OnTrackCreatorConfig.py b/MuonSpectrometer/MuonConfig/python/MuonRIO_OnTrackCreatorConfig.py index 94d30a541ef272c766d8901b052cce5d54d09a82..ba4b344dc0dcce083c9fe910250abe4c6ee4f580 100644 --- a/MuonSpectrometer/MuonConfig/python/MuonRIO_OnTrackCreatorConfig.py +++ b/MuonSpectrometer/MuonConfig/python/MuonRIO_OnTrackCreatorConfig.py @@ -72,15 +72,8 @@ def MdtDriftCircleOnTrackCreatorCfg(flags,name="MdtDriftCircleOnTrackCreator", * # acc = MdtCalibrationDbSvcCfg(flags) # result.merge(acc) - acc = MdtCalibrationDbToolCfg(flags) - mdt_calibibration_db_tool = acc.getPrimary() - result.merge(acc) - kwargs.setdefault("CalibrationDbTool", mdt_calibibration_db_tool) - - acc = MdtCalibrationToolCfg(flags) - mdt_calibibration_tool = acc.getPrimary() - result.merge(acc) - kwargs.setdefault("CalibrationTool", mdt_calibibration_tool) + kwargs.setdefault("CalibrationDbTool", result.popToolsAndMerge( MdtCalibrationDbToolCfg(flags))) + kwargs.setdefault("CalibrationTool", result.popToolsAndMerge( MdtCalibrationToolCfg(flags)) ) kwargs.setdefault("DoMagneticFieldCorrection", flags.Muon.Calib.correctMdtRtForBField) kwargs.setdefault("DoWireSag", flags.Muon.useWireSagCorrections) @@ -107,8 +100,8 @@ def MdtDriftCircleOnTrackCreatorCfg(flags,name="MdtDriftCircleOnTrackCreator", * if flags.Muon.MuonTrigger: kwargs.setdefault("doMDT", False) - - result.addPublicTool(Muon__MdtDriftCircleOnTrackCreator(name, **kwargs),primary=True) + + result.addPublicTool(Muon__MdtDriftCircleOnTrackCreator(name, WasConfigured=True, **kwargs),primary=True) return result def MuonClusterOnTrackCreatorCfg(flags,name="MuonClusterOnTrackCreator", **kwargs): diff --git a/MuonSpectrometer/MuonConfig/python/MuonRdoDecodeConfig.py b/MuonSpectrometer/MuonConfig/python/MuonRdoDecodeConfig.py index b78e56be7379f7e95648f8db7e6fc5a449192615..fc3cacf940986932da031fd3f76e69d4c1759a0c 100644 --- a/MuonSpectrometer/MuonConfig/python/MuonRdoDecodeConfig.py +++ b/MuonSpectrometer/MuonConfig/python/MuonRdoDecodeConfig.py @@ -121,6 +121,7 @@ def TgcRDODecodeCfg(flags, forTrigger=False): def MdtRDODecodeCfg(flags, forTrigger=False): acc = ComponentAccumulator() + from MuonConfig.MuonCalibrationConfig import MdtCalibrationToolCfg # We need the MDT cabling to be setup from MuonConfig.MuonCablingConfig import MDTCablingConfigCfg @@ -135,13 +136,14 @@ def MdtRDODecodeCfg(flags, forTrigger=False): # Get the RDO -> PRD tool Muon__MdtRdoToPrepDataToolMT=CompFactory.Muon.MdtRdoToPrepDataToolMT - MdtRdoToMdtPrepDataTool = Muon__MdtRdoToPrepDataToolMT(name = "MdtRdoToMdtPrepDataTool") - + calibTool = acc.popToolsAndMerge( MdtCalibrationToolCfg(flags)) + MdtRdoToMdtPrepDataTool = Muon__MdtRdoToPrepDataToolMT(name = "MdtRdoToMdtPrepDataTool", CalibrationTool = calibTool) + # Get the RDO -> PRD alorithm MdtRdoToMdtPrepData=CompFactory.MdtRdoToMdtPrepData MdtRdoToMdtPrepData = MdtRdoToMdtPrepData(name = "MdtRdoToMdtPrepData", DecodingTool = MdtRdoToMdtPrepDataTool, - PrintPrepData = False ) + PrintPrepData = False) # add RegSelTool from RegionSelector.RegSelToolConfig import regSelTool_MDT_Cfg MdtRdoToMdtPrepData.RegSel_MDT = acc.popToolsAndMerge( regSelTool_MDT_Cfg( flags ) ) diff --git a/MuonSpectrometer/MuonConfig/python/MuonRecToolsConfig.py b/MuonSpectrometer/MuonConfig/python/MuonRecToolsConfig.py index 0a6284b85992723fbebc9425653d14c4273c8f95..85f2eab75c34b304496d698e3a5eaa96ca15a4f3 100644 --- a/MuonSpectrometer/MuonConfig/python/MuonRecToolsConfig.py +++ b/MuonSpectrometer/MuonConfig/python/MuonRecToolsConfig.py @@ -37,10 +37,11 @@ def MuonTrackToSegmentToolCfg(flags,name="MuonTrackToSegmentTool", **kwargs): def MuonSeededSegmentFinderCfg(flags,name="MuonSeededSegmentFinder", **kwargs): Muon__MuonSeededSegmentFinder=CompFactory.Muon.MuonSeededSegmentFinder - from MuonConfig.MuonSegmentFindingConfig import DCMathSegmentMakerCfg, MdtMathSegmentFinder # FIXME - should really shift this to RecTools then. + from MuonConfig.MuonSegmentFindingConfig import DCMathSegmentMakerCfg, MdtMathSegmentFinderCfg # FIXME - should really shift this to RecTools then. + from MuonConfig.MuonRIO_OnTrackCreatorConfig import MdtDriftCircleOnTrackCreatorCfg result = ComponentAccumulator() - mdt_segment_finder = MdtMathSegmentFinder(flags, name="MCTBMdtMathSegmentFinder", UseChamberTheta = False, AssociationRoadWidth = 1.5) + mdt_segment_finder = result.popToolsAndMerge( MdtMathSegmentFinderCfg(flags, name="MCTBMdtMathSegmentFinder", UseChamberTheta = False, AssociationRoadWidth = 1.5) ) result.addPublicTool(mdt_segment_finder) if "SegmentMaker" not in kwargs or "SegmentMakerNoHoles" not in kwargs: @@ -62,6 +63,9 @@ def MuonSeededSegmentFinderCfg(flags,name="MuonSeededSegmentFinder", **kwargs): kwargs.setdefault("MMPrepDataContainer","") kwargs.setdefault("Printer", MuonEDMPrinterTool(flags) ) + acc = MdtDriftCircleOnTrackCreatorCfg(flags) + kwargs.setdefault("MdtRotCreator", acc.getPrimary()) + result.merge(acc) kwargs.setdefault('TgcPrepDataContainer', 'TGC_MeasurementsAllBCs' if not flags.Muon.useTGCPriorNextBC and not flags.Muon.useTGCPriorNextBC else 'TGC_Measurements') diff --git a/MuonSpectrometer/MuonConfig/python/MuonSegmentFindingConfig.py b/MuonSpectrometer/MuonConfig/python/MuonSegmentFindingConfig.py index 370a96d62934257a239a3139e3d65b0c67ab034a..f2f2c4ba924e41bd86c300bcbbdf1bbe4fcc0a0d 100644 --- a/MuonSpectrometer/MuonConfig/python/MuonSegmentFindingConfig.py +++ b/MuonSpectrometer/MuonConfig/python/MuonSegmentFindingConfig.py @@ -23,7 +23,7 @@ Muon__MuonSegmentSelectionTool=CompFactory.getComp("Muon::MuonSegmentSelectionTo Muon__MuonClusterSegmentFinder=CompFactory.getComp("Muon::MuonClusterSegmentFinder") #Local -from MuonConfig.MuonCalibrationConfig import MdtCalibDbAlgCfg +from MuonConfig.MuonCalibrationConfig import MdtCalibrationDbToolCfg from MuonConfig.MuonRecToolsConfig import MCTBFitterCfg, MuonAmbiProcessorCfg, MuonStationIntersectSvcCfg, MuonTrackCleanerCfg, MuonTrackSummaryToolCfg, MuonEDMPrinterTool from MuonConfig.MuonRIO_OnTrackCreatorConfig import MdtCalibWindowNumber @@ -76,16 +76,17 @@ def AdjustableT0Tool(flags,**kwargs): AdjT0__AdjustableT0Tool=CompFactory.getComp("AdjT0::AdjustableT0Tool") return AdjT0__AdjustableT0Tool(**kwargs) -def MdtMathSegmentFinder(flags,name="MdtMathSegmentFinder", **kwargs): +def MdtMathSegmentFinderCfg(flags,name="MdtMathSegmentFinder", **kwargs): # beamType = getattr(extraFlags,"beamType", beamFlags.beamType()) # doSegmentT0Fit = getattr(extraFlags,"doSegmentT0Fit",muonRecFlags.doSegmentT0Fit()) # enableCurvedSegmentFinding = getattr(extraFlags,"enableCurvedSegmentFinding", muonStandaloneFlags.enableCurvedSegmentFinding()) + result = ComponentAccumulator() if flags.Muon.doSegmentT0Fit: kwargs.setdefault("AssociationRoadWidth", 3.) kwargs.setdefault("MDTAssocationPullcut", 3.) kwargs.setdefault("RecoverMdtOutliers", False) - kwargs.setdefault("DCFitProvider", "MdtSegmentT0Fitter" ) + kwargs.setdefault("DCFitProvider", result.popToolsAndMerge(MdtSegmentT0FitterCfg(flags) ) ) if flags.Beam.Type == 'singlebeam' or flags.Beam.Type == 'cosmics' or flags.Input.isMC is False: kwargs.setdefault("AssociationRoadWidth", 2.) @@ -94,8 +95,8 @@ def MdtMathSegmentFinder(flags,name="MdtMathSegmentFinder", **kwargs): if flags.Muon.enableCurvedSegmentFinding: kwargs.setdefault("DoCurvedSegmentFinder",True) - - return Muon__MdtMathSegmentFinder(name=name,**kwargs) + result.setPrivateTools(Muon__MdtMathSegmentFinder(name=name,**kwargs)) + return result def MuonSegmentFittingToolCfg(flags, **kwargs): # declareProperty("SLPropagator", m_slPropagator); @@ -131,8 +132,13 @@ def MuonSegmentFittingToolCfg(flags, **kwargs): result.setPrivateTools(Muon__MuonSegmentFittingTool(**kwargs)) return result +def MdtSegmentT0FitterCfg(flags, name="MdtSegmentT0Fitter", **kwargs): + result = MdtCalibrationDbToolCfg(flags) # Needed by MdtSegmentT0Fitter + kwargs.setdefault("CalibrationDbTool", result.popPrivateTools()) + result.setPrivateTools(CompFactory.TrkDriftCircleMath.MdtSegmentT0Fitter(name, **kwargs)) + return result + def DCMathSegmentMakerCfg(flags, **kwargs): - TrkDriftCircleMath__MdtSegmentT0Fitter=CompFactory.TrkDriftCircleMath.MdtSegmentT0Fitter from MuonConfig.MuonRIO_OnTrackCreatorConfig import MdtDriftCircleOnTrackCreatorCfg, MuonClusterOnTrackCreatorCfg, TriggerChamberClusterOnTrackCreatorCfg from MuonConfig.MuonCondAlgConfig import MdtCondDbAlgCfg @@ -160,12 +166,7 @@ def DCMathSegmentMakerCfg(flags, **kwargs): kwargs.setdefault("AssumePointingPhi", beamType != 'cosmics') kwargs.setdefault("OutputFittedT0", True) - acc = MdtCalibDbAlgCfg(flags) # Needed by MdtSegmentT0Fitter - result.merge(acc) - - mdt_segment_t0_fitter = TrkDriftCircleMath__MdtSegmentT0Fitter() - result.addPublicTool(mdt_segment_t0_fitter) - kwargs.setdefault("DCFitProvider", mdt_segment_t0_fitter) + kwargs.setdefault("DCFitProvider", result.popToolsAndMerge(MdtSegmentT0FitterCfg(flags))) #kwargs.setdefault("CurvedErrorScaling", False) kwargs.setdefault("UsePreciseError", True) kwargs.setdefault("SinAngleCut", 0.4) @@ -183,11 +184,10 @@ def DCMathSegmentMakerCfg(flags, **kwargs): mdt_dcot_CA = MdtDriftCircleOnTrackCreatorCfg(flags, name="MdtDriftCircleOnTrackCreatorAdjustableT0", TimingMode=3, \ DoTofCorrection=True, TimeWindowSetting=MdtCalibWindowNumber('Collision_data')) result.merge(mdt_dcot_CA) - mdt_creator=acc.getPrimary() - kwargs.setdefault("MdtCreatorT0", mdt_creator) # TODO - is this correct? - mdt_math_segment_finder = MdtMathSegmentFinder(flags, doSegmentT0Fit=True) + kwargs.setdefault("MdtCreatorT0", mdt_dcot_CA.getPrimary()) # TODO - is this correct? + mdt_math_segment_finder = result.popToolsAndMerge(MdtMathSegmentFinderCfg(flags, doSegmentT0Fit=True)) else: - mdt_math_segment_finder = MdtMathSegmentFinder(flags) + mdt_math_segment_finder = result.popToolsAndMerge(MdtMathSegmentFinderCfg(flags)) result.addPublicTool(mdt_math_segment_finder) kwargs.setdefault("MdtSegmentFinder", mdt_math_segment_finder ) @@ -524,85 +524,52 @@ def MooSegmentFinderCfg(flags, name='MooSegmentFinder', **kwargs): return result def MuonClusterSegmentFinderToolCfg(flags, **kwargs): - #m_slTrackFitter("Trk::GlobalChi2Fitter/MCTBSLFitter"), - #m_ambiTool("Trk::SimpleAmbiguityProcessorTool/MuonAmbiProcessor"), - #m_trackToSegmentTool("Muon::MuonTrackToSegmentTool/MuonTrackToSegmentTool"), - #m_printer("Muon::MuonEDMPrinterTool/MuonEDMPrinterTool"), - #m_edmHelperSvc("Muon::MuonEDMHelperSvc/MuonEDMHelperSvc"), - #m_trackCleaner("Muon::MuonTrackCleaner/MuonTrackCleaner") { - #declareProperty("SLFitter", m_slTrackFitter); - #declareProperty("SegmentAmbiguityTool",m_ambiTool); - #declareProperty("TrackToSegmentTool", m_trackToSegmentTool); - #declareProperty("TrackCleaner", m_trackCleaner); + from MuonConfig.MuonRecToolsConfig import MuonTrackToSegmentToolCfg result=ComponentAccumulator() + # Won't explicitly configure MuonIdHelperSvc + # Won't explicitly configure MuonEDMHelperSvc + kwargs.setdefault('SegmentAmbiguityTool', result.popToolsAndMerge( MuonAmbiProcessorCfg(flags) ) ) + kwargs.setdefault('SLFitter', result.popToolsAndMerge( MCTBFitterCfg(flags, name = "SLFitter", StraightLine=True) ) ) + kwargs.setdefault("TrackToSegmentTool", result.popToolsAndMerge( MuonTrackToSegmentToolCfg(flags) ) ) + kwargs.setdefault("Printer", MuonEDMPrinterTool(flags) ) + kwargs.setdefault('TrackCleaner', result.popToolsAndMerge( MuonTrackCleanerCfg(flags) ) ) + kwargs.setdefault('TrackSummaryTool', result.popToolsAndMerge( MuonTrackSummaryToolCfg(flags) ) ) - acc = MCTBFitterCfg(flags, name = "SLFitter", StraightLine=True) - slfitter = acc.getPrimary() - result.addPublicTool(slfitter) - result.merge(acc) - kwargs.setdefault("SLFitter", slfitter) - - acc = MuonTrackCleanerCfg(flags) - cleaner = acc.getPrimary() - result.addPublicTool(cleaner) - kwargs.setdefault("TrackCleaner", cleaner) - result.merge(acc) - - acc = MuonTrackSummaryToolCfg(flags) - track_summary = acc.getPrimary( ) - result.addPublicTool(track_summary) - kwargs.setdefault('TrackSummaryTool', track_summary) - result.merge(acc) + result.setPrivateTools(Muon__MuonClusterSegmentFinderTool(**kwargs)) + return result - acc = MuonAmbiProcessorCfg(flags, name='MuonAmbiProcessor') - ambi = acc.popPrivateTools() - acc.addPublicTool(ambi) +def MuonPRDSelectionToolCfg( flags, name="MuonPRDSelectionTool", **kwargs): + from MuonConfig.MuonRIO_OnTrackCreatorConfig import MuonClusterOnTrackCreatorCfg, MdtDriftCircleOnTrackCreatorCfg + # Won't explicitly configure MuonIdHelperSvc + result=MdtDriftCircleOnTrackCreatorCfg(flags) + kwargs.setdefault("MdtDriftCircleOnTrackCreator", result.getPrimary()) + acc = MuonClusterOnTrackCreatorCfg(flags) + kwargs.setdefault("MuonClusterOnTrackCreator", acc.getPrimary() ) result.merge(acc) - kwargs.setdefault("SegmentAmbiguityTool", ambi) + # Won't explicitly configure MuonRecoValidationTool (but it would need configuration if used) + result.setPrivateTools(CompFactory.Muon.MuonPRDSelectionTool(**kwargs)) + return result +def MuonClusterSegmentFinderCfg(flags, **kwargs): from MuonConfig.MuonRecToolsConfig import MuonTrackToSegmentToolCfg - acc = MuonTrackToSegmentToolCfg(flags) - kwargs.setdefault( "TrackToSegmentTool", result.popToolsAndMerge(acc)) + from MuonConfig.MuonRIO_OnTrackCreatorConfig import MuonClusterOnTrackCreatorCfg - # FIXME - remaining tools - result.setPrivateTools(Muon__MuonClusterSegmentFinderTool(**kwargs)) - return result - -def MuonClusterSegmentFinderCfg(flags, **kwargs): - #declareProperty("MuonClusterizationTool", m_clusterTool); - #declareProperty("MuonEDMPrinterTool",m_printer ); - #declareProperty("MuonPRDSelectionTool", m_muonPRDSelectionTool ); - #declareProperty("MdtSegmentMaker",m_segmentMaker); - #declareProperty("SLFitter", m_slTrackFitter); - #declareProperty("TrackToSegmentTool", m_trackToSegmentTool); - #declareProperty("AmbiguityProcessor",m_ambiguityProcessor); - #declareProperty("TrackCleaner", m_trackCleaner); result=ComponentAccumulator() - # FIXME - rest of the tools. - - acc = DCMathSegmentMakerCfg(flags,name="DCMathSegmentMaker") - segment_maker = acc.getPrimary() - acc.addPublicTool(segment_maker) - kwargs.setdefault('MdtSegmentMaker', segment_maker) - result.merge(acc) - - acc = MCTBFitterCfg(flags, name = "SLFitter", StraightLine=True) - slfitter = acc.getPrimary() - acc.addPublicTool(slfitter) - result.merge(acc) - kwargs.setdefault("SLFitter", slfitter) - - acc = MuonAmbiProcessorCfg(flags, name='NewMuonAmbiProcessor') - ambi = acc.getPrimary() - acc.addPublicTool(ambi) - result.merge(acc) - kwargs.setdefault("AmbiguityProcessor", ambi) - acc = MuonTrackCleanerCfg(flags) - cleaner = acc.getPrimary() - acc.addPublicTool(cleaner) + # Won't explicitly configure MuonIdHelperSvc + kwargs.setdefault("MuonEDMPrinterTool", MuonEDMPrinterTool(flags) ) + # Won't explicitly configure MuonLayerHashProviderTool + kwargs.setdefault("MuonPRDSelectionTool", result.popToolsAndMerge( MuonPRDSelectionToolCfg(flags) ) ) + kwargs.setdefault('MdtSegmentMaker', result.popToolsAndMerge( DCMathSegmentMakerCfg(flags,name="DCMathSegmentMaker") ) ) + # Won't explicitly configure MuonClusterizationTool + acc = MuonClusterOnTrackCreatorCfg(flags) # This only sets a public tool at the moment, so need to it like this. FIXME + kwargs.setdefault("MuonClusterOnTrackCreator", acc.getPrimary() ) result.merge(acc) - kwargs.setdefault("TrackCleaner", cleaner) + kwargs.setdefault("TrackToSegmentTool", result.popToolsAndMerge( MuonTrackToSegmentToolCfg(flags) ) ) + kwargs.setdefault('SLFitter', result.popToolsAndMerge( MCTBFitterCfg(flags, name = "SLFitter", StraightLine=True) ) ) + kwargs.setdefault('AmbiguityProcessor', result.popToolsAndMerge( MuonAmbiProcessorCfg(flags) ) ) + kwargs.setdefault('TrackCleaner', result.popToolsAndMerge( MuonTrackCleanerCfg(flags) ) ) + # Won't explicitly configure MuonSegmentOverlapRemovalTool (though it possibly needs it) from MuonConfig.MuonRecToolsConfig import MuonTrackToSegmentToolCfg acc = MuonTrackToSegmentToolCfg(flags) @@ -748,8 +715,7 @@ if __name__=="__main__": itemsToRecord = ["Trk::SegmentCollection#MuonSegments", "Trk::SegmentCollection#NCB_MuonSegments"] SetupMuonStandaloneOutput(cfg, ConfigFlags, itemsToRecord) - - + # cfg.getService("StoreGateSvc").Dump = True cfg.printConfig() f=open("MuonSegmentFinding.pkl","wb") diff --git a/MuonSpectrometer/MuonConfig/python/MuonTrackBuildingConfig.py b/MuonSpectrometer/MuonConfig/python/MuonTrackBuildingConfig.py index d08ecc569532233ad50978b7ee5b9dc65d1cf9bd..c66983c0fca2ac6b9825996dbd71df01f2c775bc 100644 --- a/MuonSpectrometer/MuonConfig/python/MuonTrackBuildingConfig.py +++ b/MuonSpectrometer/MuonConfig/python/MuonTrackBuildingConfig.py @@ -18,9 +18,7 @@ def MooTrackFitterCfg(flags, name = 'MooTrackFitter', **kwargs): result.addPublicTool(mctb_fitter) kwargs.setdefault("Fitter", mctb_fitter) kwargs.setdefault("FitterPreFit", mctb_fitter) - - # FIXME MuPatHitTool currently isn't configured, but should be. - MuPatHitToolCfg + acc = MuPatHitToolCfg(flags) mu_pat_hit_tool = acc.getPrimary() result.addPublicTool(mu_pat_hit_tool) @@ -343,6 +341,8 @@ def MuPatCandidateToolCfg(flags, name="MuPatCandidateTool", **kwargs): Muon__MuPatCandidateTool=CompFactory.Muon.MuPatCandidateTool # https://gitlab.cern.ch/atlas/athena/blob/release/22.0.3/MuonSpectrometer/MuonReconstruction/MuonRecExample/python/MuPatTools.py#L32 from MuonConfig.MuonRIO_OnTrackCreatorConfig import CscClusterOnTrackCreatorCfg,MdtDriftCircleOnTrackCreatorCfg + from MuonConfig.MuonRecToolsConfig import MuPatHitToolCfg + result = MdtDriftCircleOnTrackCreatorCfg(flags) mdt_dcot_creator = result.getPrimary() kwargs.setdefault("MdtRotCreator", mdt_dcot_creator) @@ -354,16 +354,28 @@ def MuPatCandidateToolCfg(flags, name="MuPatCandidateTool", **kwargs): kwargs.setdefault("MuonPrinterTool", MuonEDMPrinterTool(flags) ) + acc = MuPatHitToolCfg(flags) + mu_pat_hit_tool = acc.getPrimary() + result.merge(acc) + kwargs.setdefault("HitTool", mu_pat_hit_tool) + mu_pat_cand_tool = Muon__MuPatCandidateTool(name, **kwargs) result.setPrivateTools(mu_pat_cand_tool) return result def MuonChamberHoleRecoveryToolCfg(flags, name="MuonChamberHoleRecoveryTool", **kwargs): + from MuonConfig.MuonRIO_OnTrackCreatorConfig import CscClusterOnTrackCreatorCfg,MdtDriftCircleOnTrackCreatorCfg + Muon__MuonChamberHoleRecoveryTool=CompFactory.Muon.MuonChamberHoleRecoveryTool result=ComponentAccumulator() + # Not setting explicitly MuonStationIntersectSvc + acc = MdtDriftCircleOnTrackCreatorCfg(flags) + mdt_dcot_creator = acc.getPrimary() + kwargs.setdefault("MdtRotCreator", mdt_dcot_creator) + result.merge(acc) + kwargs.setdefault("AddMeasurements", not flags.Muon.doSegmentT0Fit ) if flags.Detector.GeometryCSC: - from MuonConfig.MuonRIO_OnTrackCreatorConfig import CscClusterOnTrackCreatorCfg extrakwargs={} if flags.Muon.enableErrorTuning or not flags.Input.isMC: extrakwargs["ErrorScalerBeta"] = 0.200 diff --git a/MuonSpectrometer/MuonDigitization/MDT_Digitization/python/MdtDigitizationConfig.py b/MuonSpectrometer/MuonDigitization/MDT_Digitization/python/MdtDigitizationConfig.py index e82b1c285072aed05d7029f547be6824d25883df..b8217bc2462934a56f6864730df254b76bfb071c 100644 --- a/MuonSpectrometer/MuonDigitization/MDT_Digitization/python/MdtDigitizationConfig.py +++ b/MuonSpectrometer/MuonDigitization/MDT_Digitization/python/MdtDigitizationConfig.py @@ -19,7 +19,9 @@ def MDT_LastXing(): return 150 def MdtDigitizationTool(name="MdtDigitizationTool",**kwargs): - import MuonCondAlg.MdtCondDbAlgConfig # noqa: F401 (MT-safe conditions access) + import MuonCondAlg.MdtCondDbAlgConfig # noqa: F401 MT-safe conditions access + from MuonCnvExample import MuonCalibConfig + kwargs.setdefault("MaskedStations", []) kwargs.setdefault("UseDeadChamberSvc", True) kwargs.setdefault("DiscardEarlyHits", True) @@ -50,6 +52,8 @@ def MdtDigitizationTool(name="MdtDigitizationTool",**kwargs): kwargs.setdefault("OutputSDOName", overlayFlags.bkgPrefix() + "MDT_SDO") else: kwargs.setdefault("OutputSDOName", "MDT_SDO") + + kwargs.setdefault("CalibrationDbTool", MuonCalibConfig.MdtCalibrationDbTool()) return CfgMgr.MdtDigitizationTool(name,**kwargs) #return CfgMgr.MDT_PileUpTool(name,**kwargs) diff --git a/MuonSpectrometer/MuonReconstruction/MuonRIO_OnTrackCreators/MdtDriftCircleOnTrackCreator/CMakeLists.txt b/MuonSpectrometer/MuonReconstruction/MuonRIO_OnTrackCreators/MdtDriftCircleOnTrackCreator/CMakeLists.txt index a6936e0f8d8316eb510a54c414cc327b4e9cd489..f2f9a3a07ab7902f3d5550f5a178cd82209403bf 100644 --- a/MuonSpectrometer/MuonReconstruction/MuonRIO_OnTrackCreators/MdtDriftCircleOnTrackCreator/CMakeLists.txt +++ b/MuonSpectrometer/MuonReconstruction/MuonRIO_OnTrackCreators/MdtDriftCircleOnTrackCreator/CMakeLists.txt @@ -17,5 +17,4 @@ atlas_add_component( MdtDriftCircleOnTrackCreator # Install files from the package: atlas_install_headers( MdtDriftCircleOnTrackCreator ) -atlas_install_joboptions( share/*.py ) diff --git a/MuonSpectrometer/MuonReconstruction/MuonRIO_OnTrackCreators/MdtDriftCircleOnTrackCreator/MdtDriftCircleOnTrackCreator/MdtDriftCircleOnTrackCreator.h b/MuonSpectrometer/MuonReconstruction/MuonRIO_OnTrackCreators/MdtDriftCircleOnTrackCreator/MdtDriftCircleOnTrackCreator/MdtDriftCircleOnTrackCreator.h index 77f8091767c2f06963fe210dd9520dc131aa2112..151382ed3b35cc18d12341289281257e8ab268af 100644 --- a/MuonSpectrometer/MuonReconstruction/MuonRIO_OnTrackCreators/MdtDriftCircleOnTrackCreator/MdtDriftCircleOnTrackCreator/MdtDriftCircleOnTrackCreator.h +++ b/MuonSpectrometer/MuonReconstruction/MuonRIO_OnTrackCreators/MdtDriftCircleOnTrackCreator/MdtDriftCircleOnTrackCreator/MdtDriftCircleOnTrackCreator.h @@ -189,8 +189,8 @@ namespace Muon { double muonErrorStrategy(const MuonDriftCircleErrorStrategy* myStrategy, double sigmaR, const Identifier& id) const; ServiceHandle<Muon::IMuonIdHelperSvc> m_idHelperSvc {this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"}; - ToolHandle<MdtCalibrationTool> m_mdtCalibrationTool{this,"CalibrationTool","MdtCalibrationTool"}; - ToolHandle<MdtCalibrationDbTool> m_mdtCalibrationDbTool{this,"CalibrationDbTool","MdtCalibrationDbTool"}; + ToolHandle<MdtCalibrationTool> m_mdtCalibrationTool{this,"CalibrationTool","MdtCalibrationTool"}; + ToolHandle<MdtCalibrationDbTool> m_mdtCalibrationDbTool{this,"CalibrationDbTool","MdtCalibrationDbTool"}; // Configuration variables bool m_doMdt; //!< Process MDT ROTs @@ -218,6 +218,7 @@ namespace Muon { bool m_doIndividualChamberReweights; //!< Deweight individual chambers bool m_isMC; //!< toggle between MC and data alignment errors (to be removed in rel. 21!) bool m_looseErrors; //!< toggle between loose errors (initial before alignment) and tight after alignment + Gaudi::Property<bool> m_wasConfigured {this,"WasConfigured",false,"This tool is too complicated to rely on defaults. Will fail if not configured."}; const double m_inverseSpeedOfLight = 1 / Gaudi::Units::c_light; // need 1/299.792458, needed inside timeOfFlight() }; diff --git a/MuonSpectrometer/MuonReconstruction/MuonRIO_OnTrackCreators/MdtDriftCircleOnTrackCreator/share/MdtDriftCircleOnTrackCreator.py b/MuonSpectrometer/MuonReconstruction/MuonRIO_OnTrackCreators/MdtDriftCircleOnTrackCreator/share/MdtDriftCircleOnTrackCreator.py deleted file mode 100644 index 1d5dfaa87b2bc89b656bf2d22067644896fcd800..0000000000000000000000000000000000000000 --- a/MuonSpectrometer/MuonReconstruction/MuonRIO_OnTrackCreators/MdtDriftCircleOnTrackCreator/share/MdtDriftCircleOnTrackCreator.py +++ /dev/null @@ -1,5 +0,0 @@ -print "***** WARNING ******************************************************************" -print " The file MdtDriftCircleOnTrackCreator/MdtDriftCircleOnTrackCreator.py" -print " is currently obsolete." -print "********************************************************************************" - diff --git a/MuonSpectrometer/MuonReconstruction/MuonRIO_OnTrackCreators/MdtDriftCircleOnTrackCreator/src/MdtDriftCircleOnTrackCreator.cxx b/MuonSpectrometer/MuonReconstruction/MuonRIO_OnTrackCreators/MdtDriftCircleOnTrackCreator/src/MdtDriftCircleOnTrackCreator.cxx index d7d7affb396fbe15423793956796b4d41da68fba..832872863f906696c1144300cdbaca749a9b7676 100644 --- a/MuonSpectrometer/MuonReconstruction/MuonRIO_OnTrackCreators/MdtDriftCircleOnTrackCreator/src/MdtDriftCircleOnTrackCreator.cxx +++ b/MuonSpectrometer/MuonReconstruction/MuonRIO_OnTrackCreators/MdtDriftCircleOnTrackCreator/src/MdtDriftCircleOnTrackCreator.cxx @@ -137,6 +137,10 @@ StatusCode Muon::MdtDriftCircleOnTrackCreator::initialize() ATH_MSG_ERROR( "Time Correction Type too large! Aborting." ); return StatusCode::FAILURE; } + + if (!m_wasConfigured){ + ATH_MSG_WARNING( "This tool is too complicated to rely on defaults. Potential configuration issue." ); + } return StatusCode::SUCCESS; } diff --git a/MuonSpectrometer/MuonReconstruction/MuonRecExample/python/MuonPrdProviderToolsConfig.py b/MuonSpectrometer/MuonReconstruction/MuonRecExample/python/MuonPrdProviderToolsConfig.py index edd0358ebe330792d03092db6a750495b75d68ab..dc084832971d7f04cc035c21d89ad341270b132f 100644 --- a/MuonSpectrometer/MuonReconstruction/MuonRecExample/python/MuonPrdProviderToolsConfig.py +++ b/MuonSpectrometer/MuonReconstruction/MuonRecExample/python/MuonPrdProviderToolsConfig.py @@ -36,6 +36,7 @@ def MdtPrepDataProviderTool(name="MdtPrepDataProviderTool", **kwargs): if globalflags.DataSource.is_data(): kwargs.setdefault("UseTwin", True) + kwargs.setdefault("CalibrationTool", MuonCalibConfig.MdtCalibrationTool()) from MuonMDT_CnvTools.MuonMDT_CnvToolsConf import Muon__MdtRdoToPrepDataToolMT return Muon__MdtRdoToPrepDataToolMT(name,**kwargs) diff --git a/MuonSpectrometer/MuonReconstruction/MuonRecExample/python/MuonRecTools.py b/MuonSpectrometer/MuonReconstruction/MuonRecExample/python/MuonRecTools.py index 49b060b6f8860aef4b2b687b615db173df969d10..dfadaae81f8a87dab87aef1b746983e096f3ad07 100644 --- a/MuonSpectrometer/MuonReconstruction/MuonRecExample/python/MuonRecTools.py +++ b/MuonSpectrometer/MuonReconstruction/MuonRecExample/python/MuonRecTools.py @@ -78,6 +78,8 @@ def MdtDriftCircleOnTrackCreator(name="MdtDriftCircleOnTrackCreator",**kwargs): kwargs.setdefault("DoMagneticFieldCorrection", mdtCalibFlags.correctMdtRtForBField()) kwargs.setdefault("DoWireSag", muonRecFlags.useWireSagCorrections()) kwargs.setdefault("DoSlewingCorrection", mdtCalibFlags.correctMdtRtForTimeSlewing()) + kwargs.setdefault("CalibrationTool", MuonCalibConfig.MdtCalibrationTool()) + kwargs.setdefault("CalibrationDbTool", MuonCalibConfig.MdtCalibrationDbTool()) if beamFlags.beamType() == 'cosmics' or beamFlags.beamType() == 'singlebeam' : kwargs.setdefault("DoTofCorrection", False) @@ -104,7 +106,7 @@ def MdtDriftCircleOnTrackCreator(name="MdtDriftCircleOnTrackCreator",**kwargs): if TriggerFlags.MuonSlice.doTrigMuonConfig: kwargs.setdefault("doMDT", True) - return CfgMgr.Muon__MdtDriftCircleOnTrackCreator(name,**kwargs) + return CfgMgr.Muon__MdtDriftCircleOnTrackCreator(name, WasConfigured=True, **kwargs) # end of factory function MdtDriftCircleOnTrackCreator @@ -349,6 +351,7 @@ def MdtSegmentT0Fitter(name="MdtSegmentT0Fitter",**kwargs): from MuonRecExample import MuonAlignConfig # noqa: F401 from MuonCnvExample import MuonCalibConfig # noqa: F401 MuonCalibConfig.setupMdtCondDB() + kwargs.setdefault("CalibrationDbTool", MuonCalibConfig.MdtCalibrationDbTool()) return CfgMgr.TrkDriftCircleMath__MdtSegmentT0Fitter(name,**kwargs) def MdtMathSegmentFinder(name="MdtMathSegmentFinder",extraFlags=None,**kwargs): diff --git a/PhysicsAnalysis/TopPhys/xAOD/TopCPTools/Root/TopJetMETCPTools.cxx b/PhysicsAnalysis/TopPhys/xAOD/TopCPTools/Root/TopJetMETCPTools.cxx index bb3e3d380abbc73b1ece46e007e4464ff0a96cf2..5e807046423707d8bd8e696f80073ba5da69c057 100644 --- a/PhysicsAnalysis/TopPhys/xAOD/TopCPTools/Root/TopJetMETCPTools.cxx +++ b/PhysicsAnalysis/TopPhys/xAOD/TopCPTools/Root/TopJetMETCPTools.cxx @@ -382,9 +382,11 @@ namespace top { calibConfigLargeR = "JES_MC16recommendation_FatJet_Trimmed_JMS_calo_12Oct2018.config"; } else if (calibChoice == "TCCMass") { calibConfigLargeR = "JES_MC16recommendation_FatJet_TCC_JMS_calo_30Oct2018.config"; + } else if (calibChoice == "UFOSDMass") { + calibConfigLargeR = "JES_MC16recommendation_R10_UFO_CSSK_SoftDrop_JMS_01April2020.config"; } else { ATH_MSG_ERROR( - "Unknown largeRJESJMSConfig (Available options: TAMass, CaloMass, CombMass and TCCMass)) : " + calibChoice); + "Unknown largeRJESJMSConfig (Available options: TAMass, CaloMass, CombMass, TCCMass and UFOSDMass)) : " + calibChoice); return StatusCode::FAILURE; } } else { //Insitu calibration for Data @@ -394,15 +396,19 @@ namespace top { } else if (calibChoice == "TCCMass") { calibConfigLargeR = "JES_MC16recommendation_FatJet_TCC_JMS_calo_30Oct2018.config"; //There's no insitu // calibration yet - } else { + } else if (calibChoice == "UFOSDMass") { + calibConfigLargeR = "JES_MC16recommendation_R10_UFO_CSSK_SoftDrop_JMS_01April2020.config"; //There's no insitu + // calibration yet + } else { ATH_MSG_ERROR( - "Unknown largeRJESJMSConfig (Available options: TAMass, CaloMass, CombMass and TCCMass) : " + calibChoice); + "Unknown largeRJESJMSConfig (Available options: TAMass, CaloMass, CombMass, TCCMass and UFOSDMass) : " + calibChoice); return StatusCode::FAILURE; } } std::string calibSequenceLargeR = "EtaJES_JMS"; if ((!m_config->isMC()) && - (calibChoice != "TCCMass")) calibSequenceLargeR = "EtaJES_JMS_Insitu_InsituCombinedMass"; //For data, there's + (calibChoice != "TCCMass") && + (calibChoice != "UFOSDMass")) calibSequenceLargeR = "EtaJES_JMS_Insitu_InsituCombinedMass"; //For data, there's // is insitu // calibration for // lc-topo jets diff --git a/PhysicsAnalysis/TopPhys/xAOD/TopConfiguration/Root/ConfigurationSettings.cxx b/PhysicsAnalysis/TopPhys/xAOD/TopConfiguration/Root/ConfigurationSettings.cxx index 6f1d01ea67d15147590e84d7336ffe145af464bd..c5f455ea61268ad36af17294c30ae9128e993903 100644 --- a/PhysicsAnalysis/TopPhys/xAOD/TopConfiguration/Root/ConfigurationSettings.cxx +++ b/PhysicsAnalysis/TopPhys/xAOD/TopConfiguration/Root/ConfigurationSettings.cxx @@ -221,7 +221,7 @@ namespace top { "Path to directory containing large-R jet uncertainties config", "rel21/Summer2019"); registerParameter("LargeRJESJMSConfig", - "Calibration for large-R JES/JMS. CombMass, CaloMass or TCCMass (default CombMass).", + "Calibration for large-R JES/JMS. CombMass, CaloMass, TCCMass or UFOSDMass (default CombMass).", "CombMass"); registerParameter("BoostedJetTagging", "Boosted jet taggers to use in the analysis, separated by commas or white spaces." diff --git a/PhysicsAnalysis/TopPhys/xAOD/TopSystematicObjectMaker/Root/JetObjectCollectionMaker.cxx b/PhysicsAnalysis/TopPhys/xAOD/TopSystematicObjectMaker/Root/JetObjectCollectionMaker.cxx index 21f5fe7c7c049bec58ec7c541716dd9343ff2a03..6ee10ed8087e27a147d60ae10813e64cce34832f 100644 --- a/PhysicsAnalysis/TopPhys/xAOD/TopSystematicObjectMaker/Root/JetObjectCollectionMaker.cxx +++ b/PhysicsAnalysis/TopPhys/xAOD/TopSystematicObjectMaker/Root/JetObjectCollectionMaker.cxx @@ -221,7 +221,7 @@ namespace top { largeRsysts.insert(m_jetUncertaintiesToolLargeR->recommendedSystematics()); } else { ATH_MSG_WARNING( - "TA Mass & Calo Mass are not supported for large-R jet uncertainties at the moment. Large-R jet systemtatics skipped!"); + "TA Mass & Calo Mass & UFO SD Mass are not supported for large-R jet uncertainties at the moment. Large-R jet systemtatics skipped!"); } } diff --git a/Projects/AnalysisBase/externals.txt b/Projects/AnalysisBase/externals.txt index d74ef6bfa537046888180fbd2cada71e150a5c67..cd048463713487dd992cc6a33cc5523c33e45fa1 100644 --- a/Projects/AnalysisBase/externals.txt +++ b/Projects/AnalysisBase/externals.txt @@ -6,4 +6,4 @@ # forbidden. # The version of atlas/atlasexternals to use: -AnalysisBaseExternalsVersion = 2.0.84 +AnalysisBaseExternalsVersion = 2.0.85 diff --git a/Projects/AthDataQuality/CMakeLists.txt b/Projects/AthDataQuality/CMakeLists.txt index 5106635935320af46572e71f445b5630afacaad2..75a5c2a00faed82b2de4470ed64d4a9f0d7aa7a1 100644 --- a/Projects/AthDataQuality/CMakeLists.txt +++ b/Projects/AthDataQuality/CMakeLists.txt @@ -18,7 +18,7 @@ set( TDAQ-COMMON_ATROOT find_package( AtlasCMake REQUIRED ) # Build the project against LCG: -set( LCG_VERSION_POSTFIX "python3" +set( LCG_VERSION_POSTFIX "python3_ATLAS_2" CACHE STRING "Version postfix for the LCG release to use" ) set( LCG_VERSION_NUMBER 98 CACHE STRING "Version number for the LCG release to use" ) diff --git a/Projects/AthDataQuality/externals.txt b/Projects/AthDataQuality/externals.txt index 528ea863b78a4a772dad1fa215434caf01b9eeca..ce0fa6e95687ad0e4c48f1707d7825605cacd19d 100644 --- a/Projects/AthDataQuality/externals.txt +++ b/Projects/AthDataQuality/externals.txt @@ -5,4 +5,4 @@ # an "origin/" prefix before it. For tags however this is explicitly # forbidden. -AtlasExternalsVersion = 2.0.84 +AtlasExternalsVersion = 2.0.85 diff --git a/Projects/AthGeneration/build_externals.sh b/Projects/AthGeneration/build_externals.sh index 1273378fd15f735a589ac3659f01e04e03db4b3a..3b50cc48cff407496d7d15391079557d883905a2 100755 --- a/Projects/AthGeneration/build_externals.sh +++ b/Projects/AthGeneration/build_externals.sh @@ -24,7 +24,7 @@ BUILDDIR="" BUILDTYPE="RelWithDebInfo" FORCE="" CI="" -EXTRACMAKE=(-DLCG_VERSION_NUMBER=98 -DLCG_VERSION_POSTFIX="python3") +EXTRACMAKE=(-DLCG_VERSION_NUMBER=98 -DLCG_VERSION_POSTFIX="python3_ATLAS_2") while getopts ":t:b:x:fch" opt; do case $opt in t) diff --git a/Projects/AthGeneration/externals.txt b/Projects/AthGeneration/externals.txt index aa90f04a096baa23219ab7f51aacfb0aa1bf0f42..8ea0e812eee807c0b2b1dd881ebe4bdf369e48c6 100644 --- a/Projects/AthGeneration/externals.txt +++ b/Projects/AthGeneration/externals.txt @@ -6,7 +6,7 @@ # forbidden. # The version of atlas/atlasexternals to use: -AthGenerationExternalsVersion = 2.0.84 +AthGenerationExternalsVersion = 2.0.85 # The version of atlas/Gaudi to use: GaudiVersion = v34r0.005 diff --git a/Projects/AthSimulation/build_externals.sh b/Projects/AthSimulation/build_externals.sh index e6467a5ff31fc6c2c19d8036c1db9b6bd357ffd0..3de9f169edf3f2581d559c36cd2a990f03a6270c 100755 --- a/Projects/AthSimulation/build_externals.sh +++ b/Projects/AthSimulation/build_externals.sh @@ -24,7 +24,7 @@ BUILDDIR="" BUILDTYPE="RelWithDebInfo" FORCE="" CI="" -EXTRACMAKE=(-DLCG_VERSION_NUMBER=98 -DLCG_VERSION_POSTFIX="python3") +EXTRACMAKE=(-DLCG_VERSION_NUMBER=98 -DLCG_VERSION_POSTFIX="python3_ATLAS_2") while getopts ":t:b:x:fch" opt; do case $opt in t) diff --git a/Projects/AthSimulation/externals.txt b/Projects/AthSimulation/externals.txt index 6e02eda2577b0bf28e34bc7b7d3a80b33cb8ce44..b72e0bd225f5f236b41b6253d6401581b259075f 100644 --- a/Projects/AthSimulation/externals.txt +++ b/Projects/AthSimulation/externals.txt @@ -6,7 +6,7 @@ # forbidden. # The version of atlas/atlasexternals to use: -AthSimulationExternalsVersion = 2.0.84 +AthSimulationExternalsVersion = 2.0.85 # The version of atlas/Gaudi to use: GaudiVersion = v34r0.005 diff --git a/Projects/Athena/build_externals.sh b/Projects/Athena/build_externals.sh index 20771cdb68c2420b3870e42aa4f861877a9c4a0e..e84746e1b1fd7ad6a0cac7ac1fc1dc7790077e26 100755 --- a/Projects/Athena/build_externals.sh +++ b/Projects/Athena/build_externals.sh @@ -24,7 +24,7 @@ BUILDDIR="" BUILDTYPE="RelWithDebInfo" FORCE="" CI="" -EXTRACMAKE=(-DLCG_VERSION_NUMBER=98 -DLCG_VERSION_POSTFIX="python3") +EXTRACMAKE=(-DLCG_VERSION_NUMBER=98 -DLCG_VERSION_POSTFIX="python3_ATLAS_2") while getopts ":t:b:x:fch" opt; do case $opt in t) diff --git a/Projects/Athena/externals.txt b/Projects/Athena/externals.txt index 4cb26b9a339d93a5b92cd621b9feecb130f68ebb..596814391928a2985134bba03759313886b77008 100644 --- a/Projects/Athena/externals.txt +++ b/Projects/Athena/externals.txt @@ -6,7 +6,7 @@ # forbidden. # The version of atlas/atlasexternals to use: -AthenaExternalsVersion = 2.0.84 +AthenaExternalsVersion = 2.0.85 # The version of atlas/Gaudi to use: GaudiVersion = v34r0.005 diff --git a/Projects/VP1Light/externals.txt b/Projects/VP1Light/externals.txt index 8e3f7150134e98c6da5dd386adf86068a852e6a3..65022b2ebd0be87f3b010204276a7b7068dc77ca 100644 --- a/Projects/VP1Light/externals.txt +++ b/Projects/VP1Light/externals.txt @@ -6,4 +6,4 @@ # forbidden. # The version of atlas/atlasexternals to use: -VP1LightExternalsVersion = 2.0.84 +VP1LightExternalsVersion = 2.0.85 diff --git a/Reconstruction/MuonIdentification/MuonCombinedConfig/python/MuonCombinedRecToolsConfig.py b/Reconstruction/MuonIdentification/MuonCombinedConfig/python/MuonCombinedRecToolsConfig.py index 1b39bc031dfd4fe728750020f2196b6f8bd25963..715ded49b3b09d492aeab24003b78e3456aa634e 100644 --- a/Reconstruction/MuonIdentification/MuonCombinedConfig/python/MuonCombinedRecToolsConfig.py +++ b/Reconstruction/MuonIdentification/MuonCombinedConfig/python/MuonCombinedRecToolsConfig.py @@ -211,14 +211,13 @@ def MuonMaterialProviderToolCfg(flags, name = "MuonMaterialProviderTool"): def MuonCreatorToolCfg(flags, name="MuonCreatorTool", **kwargs): from TrackToCalo.TrackToCaloConfig import ParticleCaloExtensionToolCfg - result = MuonMaterialProviderToolCfg(flags) - kwargs.setdefault( "CaloMaterialProvider", result.getPrimary() ) - if flags.Muon.MuonTrigger: - kwargs.setdefault('MakeTrackAtMSLink',True) - kwargs.setdefault("FillTimingInformation",False) - kwargs.setdefault("MuonSelectionTool", "") - kwargs.setdefault("UseCaloCells", False) - kwargs.setdefault("TrackSegmentAssociationTool", "") + result = ComponentAccumulator() + # Not explicitly setting up MuonIdHelperSvc, nor MuonEDMHelperSvc + kwargs.setdefault("Printer", MuonEDMPrinterTool(flags) ) + # Not explicitly setting up MuonPrintingTool + acc = ParticleCaloExtensionToolCfg(flags,StartFromPerigee=True) + kwargs.setdefault("ParticleCaloExtensionTool", acc.getPrimary() ) + result.merge(acc) acc = MuonCombinedParticleCreatorCfg(flags) kwargs.setdefault("TrackParticleCreator", acc.getPrimary() ) @@ -237,10 +236,29 @@ def MuonCreatorToolCfg(flags, name="MuonCreatorTool", **kwargs): kwargs.setdefault("AmbiguityProcessor", acc.popPrivateTools()) result.merge(acc) + kwargs.setdefault("Propagator", CompFactory.Trk.RungeKuttaPropagator(name = 'AtlasRungeKuttaPropagator'))# FIXME - there should be a CA for this! + # Not explicitly setting up MuonDressingTool (but probably should FIXME) + # Not explicitly setting up MomentumBalanceTool nor ScatteringAngleTool + # Not explicitly setting up MuonSegmentConverterTool (but probably should FIXME) + # Not explicitly setting up MeanMDTdADCTool (but probably should FIXME) + + kwargs.setdefault( "CaloMaterialProvider", result.popToolsAndMerge( MuonMaterialProviderToolCfg(flags) ) ) + + # Not explicitly setting up TrackSegmentAssociationTool + + kwargs.setdefault("TrackQuery", result.popToolsAndMerge(MuonTrackQueryCfg(flags)) ) + acc = MuonTrackSummaryToolCfg(flags) kwargs.setdefault("TrackSummaryTool", acc.popPrivateTools()) result.merge(acc) + if flags.Muon.MuonTrigger: + kwargs.setdefault('MakeTrackAtMSLink',True) + kwargs.setdefault("FillTimingInformation",False) + kwargs.setdefault("MuonSelectionTool", "") + kwargs.setdefault("UseCaloCells", False) + kwargs.setdefault("TrackSegmentAssociationTool", "") + # This tool needs MuonScatteringAngleSignificanceTool... which in turn needs TrackingVolumeSvc. # FIXME - probably this should be someplace central. trackingVolSvc = CompFactory.Trk.TrackingVolumesSvc(name="TrackingVolumesSvc") @@ -303,6 +321,14 @@ def MuonCandidateToolCfg(flags, name="MuonCandidateTool",**kwargs): result.setPrivateTools(tool) return result +def MuonCombinedDebuggerToolCfg( flags, name="MuonCombinedDebuggerTool",**kwargs ): + result=ComponentAccumulator() + match_quality = CompFactory.Rec.MuonMatchQuality(TrackQuery = result.popToolsAndMerge( MuonTrackQueryCfg(flags) ) ) + kwargs.setdefault("MuonMatchQuality",match_quality ) + tool = CompFactory.MuonCombined.MuonCombinedDebuggerTool(name, **kwargs) + result.setPrivateTools(tool) + return result + def MuonCombinedToolCfg(flags, name="MuonCombinedTool",**kwargs): tools = [] result=ComponentAccumulator() @@ -320,6 +346,8 @@ def MuonCombinedToolCfg(flags, name="MuonCombinedTool",**kwargs): result.merge(acc) kwargs.setdefault("MuonCombinedTagTools", tools ) + kwargs.setdefault("MuonCombinedDebuggerTool", result.popToolsAndMerge( MuonCombinedDebuggerToolCfg(flags) ) ) + tool = CompFactory.MuonCombined.MuonCombinedTool(name,**kwargs) result.setPrivateTools(tool) return result @@ -337,9 +365,7 @@ def MuonCombinedFitTagToolCfg(flags, name="MuonCombinedFitTagTool",**kwargs): result.addPublicTool(tool) kwargs.setdefault("TrackBuilder", tool ) - acc = MuonTrackQueryCfg(flags) - kwargs.setdefault("TrackQuery", acc.popPrivateTools() ) - result.merge(acc) + kwargs.setdefault("TrackQuery", result.popToolsAndMerge(MuonTrackQueryCfg(flags)) ) acc = MuonMatchQualityCfg(flags) kwargs.setdefault("MatchQuality", acc.popPrivateTools() ) @@ -412,6 +438,7 @@ def iPatSLFitterCfg(flags, name='iPatSLFitter', **kwargs): # track cleaner configured to use the same fitter def MuidTrackCleanerCfg(flags, name='MuidTrackCleaner', **kwargs ): + from MuonConfig.MuonRecToolsConfig import MuonTrackCleanerCfg if flags.Beam.Type == 'cosmics': kwargs.setdefault("PullCut" , 5.0) kwargs.setdefault("PullCutPhi" , 10.0) @@ -422,17 +449,7 @@ def MuidTrackCleanerCfg(flags, name='MuidTrackCleaner', **kwargs ): if flags.Muon.MuonTrigger: kwargs.setdefault("Iterate", False) kwargs.setdefault("RecoverOutliers", False) - result = iPatFitterCfg(flags) - kwargs.setdefault("Fitter" , result.popPrivateTools() ) - acc= iPatSLFitterCfg(flags) - kwargs.setdefault("SLFitter" , acc.popPrivateTools() ) - result.merge(acc) - - kwargs.setdefault("Printer", MuonEDMPrinterTool(flags) ) - - tool = CompFactory.Muon.MuonTrackCleaner(name,**kwargs) #FIXME this is also in MuonConfig - check to see whether we can just use this. - result.setPrivateTools(tool) - return result + return MuonTrackCleanerCfg(flags, name, **kwargs) def MuidCaloEnergyParam(flags, name='MuidCaloEnergyParam', **kwargs ): kwargs.setdefault("Cosmics", flags.Beam.Type == 'cosmics' ) @@ -648,6 +665,8 @@ def CombinedMuonTrackBuilderCfg(flags, name='CombinedMuonTrackBuilder', **kwargs kwargs.setdefault( "CaloMaterialProvider", acc.getPrimary() ) result.merge(acc) + kwargs.setdefault("TrackQuery", result.popToolsAndMerge(MuonTrackQueryCfg(flags)) ) + if flags.Muon.SAMuonTrigger: acc = MuonTrackSummaryToolCfg(flags) kwargs.setdefault("TrackSummaryTool", acc.popPrivateTools()) @@ -724,6 +743,8 @@ def CombinedMuonTrackBuilderFitCfg(flags, name='CombinedMuonTrackBuilderFit', ** def MuonMatchQualityCfg(flags, name='MuonMatchQuality', **kwargs ): result = CombinedMuonTagTestToolCfg(flags) kwargs.setdefault("TagTool", result.popPrivateTools() ) + kwargs.setdefault("TrackQuery", result.popToolsAndMerge(MuonTrackQueryCfg(flags)) ) + tool = CompFactory.Rec.MuonMatchQuality(name,**kwargs) result.setPrivateTools(tool) return result @@ -889,7 +910,7 @@ def MuonCaloTagToolCfg(flags, name='MuonCaloTagTool', **kwargs ): # Misc def MuonLayerSegmentFinderToolCfg(flags, name="MuonLayerSegmentFinderTool", **kwargs ): - from MuonConfig.MuonSegmentFindingConfig import DCMathSegmentMakerCfg, MuonClusterSegmentFinderToolCfg + from MuonConfig.MuonSegmentFindingConfig import DCMathSegmentMakerCfg, MuonClusterSegmentFinderToolCfg, MuonPRDSelectionToolCfg result = ComponentAccumulator() csc2d="" @@ -907,13 +928,15 @@ def MuonLayerSegmentFinderToolCfg(flags, name="MuonLayerSegmentFinderTool", **kw kwargs.setdefault("Csc2DSegmentMaker", csc2d ) kwargs.setdefault("Csc4DSegmentMaker", csc4d ) + kwargs.setdefault("MuonPRDSelectionTool", result.popToolsAndMerge( MuonPRDSelectionToolCfg(flags) ) ) + acc = DCMathSegmentMakerCfg(flags, name = "DCMathSegmentMaker") segmentmaker = acc.popPrivateTools() kwargs.setdefault("SegmentMaker", segmentmaker ) result.addPublicTool(segmentmaker) result.merge(acc) - acc = MuonClusterSegmentFinderCfg(flags, name = "MuonClusterSegmentFinderEJWM") + acc = MuonClusterSegmentFinderCfg(flags, name = "MuonClusterSegmentFinder") clustersegmentfinder = acc.getPrimary() #Already adds it as a public tool. kwargs.setdefault("MuonClusterSegmentFinder", clustersegmentfinder ) result.merge(acc) @@ -940,10 +963,16 @@ def MuonLayerSegmentMatchingToolCfg(flags, name="MuonLayerSegmentMatchingTool", def MuonInsideOutRecoToolCfg(flags, name="MuonInsideOutRecoTool", **kwargs ): # if TriggerFlags.MuonSlice.doTrigMuonConfig: # kwargs.setdefault("VertexContainer", "") - result = MuonLayerSegmentFinderToolCfg(flags, name= "MuonLayerSegmentFinderToolEJWM") + result = MuonLayerSegmentFinderToolCfg(flags, name= "MuonLayerSegmentFinderTool") layersegmentfindertool = result.popPrivateTools() kwargs.setdefault("MuonLayerSegmentFinderTool", layersegmentfindertool) result.addPublicTool(layersegmentfindertool) + + acc = MuonLayerSegmentMatchingToolCfg(flags) + muon_layer_segment_matching = acc.popPrivateTools() + kwargs.setdefault("MuonLayerSegmentMatchingTool", muon_layer_segment_matching) + acc.addPublicTool(muon_layer_segment_matching) + result.merge(acc) acc = MuonLayerAmbiguitySolverToolCfg(flags) muon_layer_ambiguity_solver = acc.popPrivateTools() @@ -951,12 +980,6 @@ def MuonInsideOutRecoToolCfg(flags, name="MuonInsideOutRecoTool", **kwargs ): acc.addPublicTool(muon_layer_ambiguity_solver) result.merge(acc) - acc = MuonLayerSegmentMatchingToolCfg(flags) - muon_layer_segment_matching = acc.popPrivateTools() - kwargs.setdefault("MuonLayerSegmentMatchingTool", muon_layer_segment_matching) - acc.addPublicTool(muon_layer_segment_matching) - result.merge(acc) - acc = MuonCandidateTrackBuilderToolCfg(flags) muon_candidate_track_builder = acc.popPrivateTools() kwargs.setdefault("MuonCandidateTrackBuilderTool", muon_candidate_track_builder) @@ -976,6 +999,9 @@ def MuonInsideOutRecoToolCfg(flags, name="MuonInsideOutRecoTool", **kwargs ): kwargs.setdefault("TrackAmbiguityProcessor", acc.getPrimary()) result.merge(acc) + from MuonConfig.MuonRecToolsConfig import MuonTrackSummaryToolCfg + kwargs.setdefault("TrackSummaryTool", acc.popToolsAndMerge( MuonTrackSummaryToolCfg(flags) ) ) + tool = CompFactory.MuonCombined.MuonInsideOutRecoTool(name, **kwargs) result.setPrivateTools(tool) return result @@ -1047,6 +1073,7 @@ def MuonStauRecoToolCfg(flags, name="MuonStauRecoTool", **kwargs ): from MuonConfig.MuonSegmentFindingConfig import DCMathSegmentMakerCfg from MuonConfig.MuonTrackBuildingConfig import MuonChamberHoleRecoveryToolCfg from MuonConfig.MuonRecToolsConfig import MuonAmbiProcessorCfg, MuonSeededSegmentFinderCfg + from MuonConfig.MuonCalibrationConfig import MdtCalibrationDbToolCfg kwargs.setdefault("ConsideredPDGs", [13,-13,1000015,-1000015]) kwargs.setdefault("DoTruth", flags.Input.isMC ) @@ -1092,4 +1119,7 @@ def MuonStauRecoToolCfg(flags, name="MuonStauRecoTool", **kwargs ): result.merge(acc) tool = CompFactory.MuonCombined.MuonStauRecoTool(name, **kwargs) result.setPrivateTools(tool) + + kwargs.setdefault("CalibrationDbTool", result.popToolsAndMerge( MdtCalibrationDbToolCfg(flags))) + return result diff --git a/Reconstruction/MuonIdentification/MuonCombinedRecExample/python/MuGirlTagTool.py b/Reconstruction/MuonIdentification/MuonCombinedRecExample/python/MuGirlTagTool.py index 967db99b0a3a1c1362f75ae01f461e0a12f018ce..ff9f2002549c125ab20d6913064e21dbeccccb5a 100644 --- a/Reconstruction/MuonIdentification/MuonCombinedRecExample/python/MuGirlTagTool.py +++ b/Reconstruction/MuonIdentification/MuonCombinedRecExample/python/MuGirlTagTool.py @@ -97,12 +97,15 @@ def MuonStauInsideOutRecoTool( name="MuonStauInsideOutRecoTool", **kwargs ): return CfgMgr.MuonCombined__MuonInsideOutRecoTool(name,**kwargs ) def MuonStauRecoTool( name="MuonStauRecoTool", **kwargs ): + from MuonCnvExample.MuonCalibConfig import MdtCalibrationDbTool + kwargs.setdefault("ConsideredPDGs", [13,-13,1000015,-1000015]) kwargs.setdefault("DoTruth", rec.doTruth() ) kwargs.setdefault("DoSummary", muonCombinedRecFlags.printSummary() ) kwargs.setdefault("MuonSegmentMaker", getPublicTool("DCMathStauSegmentMaker") ) kwargs.setdefault("MuonInsideOutRecoTool", getPublicTool("MuonStauInsideOutRecoTool") ) kwargs.setdefault("TrackAmbiguityProcessor", getPublicTool("MuonAmbiProcessor") ) + kwargs.setdefault("MdtCalibrationDbTool", MdtCalibrationDbTool()) return CfgMgr.MuonCombined__MuonStauRecoTool(name,**kwargs ) diff --git a/Reconstruction/RecExample/RecExCommon/share/RecExCommon_topOptions.py b/Reconstruction/RecExample/RecExCommon/share/RecExCommon_topOptions.py index fb953b93aecd9944913a2f68433ddf62b4d7202f..9dbe634be4df94f90a14aa50db1542a002aed09a 100644 --- a/Reconstruction/RecExample/RecExCommon/share/RecExCommon_topOptions.py +++ b/Reconstruction/RecExample/RecExCommon/share/RecExCommon_topOptions.py @@ -1283,20 +1283,26 @@ if ( rec.doAOD() or rec.doWriteAOD()) and not rec.readAOD() : from tauRec.tauRecFlags import tauFlags if ( rec.readESD() or tauFlags.Enabled() ) and rec.doTau: from CaloRec.CaloRecConf import CaloThinCellsByClusterAlg - alg = CaloThinCellsByClusterAlg('CaloThinCellsByClusterAlg_TauPi0Clusters', - StreamName = 'StreamAOD', - Clusters = 'TauPi0Clusters', - Cells = 'AllCalo') - topSequence += alg + tauCellAlg1 = CaloThinCellsByClusterAlg('CaloThinCellsByClusterAlg_TauPi0Clusters', + StreamName = 'StreamAOD', + Clusters = 'TauPi0Clusters', + Cells = 'AllCalo') + topSequence += tauCellAlg1 + + tauCellAlg2 = CaloThinCellsByClusterAlg('CaloThinCellsByClusterAlg_TauShotClusters', + StreamName = 'StreamAOD', + Clusters = 'TauShotClusters', + Cells = 'AllCalo') + topSequence += tauCellAlg2 from tauRec.tauRecConf import TauCellThinningAlg - alg = TauCellThinningAlg('TauCellThinningAlg', - StreamName = 'StreamAOD', - Cells = 'AllCalo', - CellLinks = 'CaloCalTopoClusters_links', - Taus = "TauJets", - UseSubtractedCluster = tauFlags.useSubtractedCluster()) - topSequence += alg + tauCellAlg3 = TauCellThinningAlg('TauCellThinningAlg', + StreamName = 'StreamAOD', + Cells = 'AllCalo', + CellLinks = 'CaloCalTopoClusters_links', + Taus = "TauJets", + UseSubtractedCluster = tauFlags.useSubtractedCluster()) + topSequence += tauCellAlg3 except Exception: treatException("Could not make AOD cells" ) diff --git a/Reconstruction/eflowRec/src/PFMuonFlowElementAssoc.cxx b/Reconstruction/eflowRec/src/PFMuonFlowElementAssoc.cxx index ea9ceb582c393d7eaebacfff3ecff71efc6852fa..324b2e9e8f05b2fbebaca1ec7065c4df2471b97b 100644 --- a/Reconstruction/eflowRec/src/PFMuonFlowElementAssoc.cxx +++ b/Reconstruction/eflowRec/src/PFMuonFlowElementAssoc.cxx @@ -33,7 +33,7 @@ PFMuonFlowElementAssoc::~PFMuonFlowElementAssoc() {} // ============================================================= StatusCode PFMuonFlowElementAssoc::initialize() { - ATH_MSG_INFO("Initializing " << name() << "..."); + ATH_MSG_VERBOSE("Initializing " << name() << "..."); // Initialise the decoration keys ATH_CHECK(m_muonChargedFEWriteHandleKey.initialize()); @@ -54,7 +54,7 @@ StatusCode PFMuonFlowElementAssoc::initialize() { ATH_CHECK(m_neutralFEReadHandleKey.initialize()); - ATH_MSG_INFO("Initialization completed successfully"); + ATH_MSG_VERBOSE("Initialization completed successfully"); return StatusCode::SUCCESS; } @@ -69,7 +69,7 @@ StatusCode PFMuonFlowElementAssoc::execute(const EventContext & ctx) const // WriteDecorHandles for the charged/neutral Flow Elements and Muons // Links a Muon that has a track to a charged flow element if possible - ATH_MSG_INFO("Started execute step"); + ATH_MSG_VERBOSE("Started execute step"); // Get container for muons SG::WriteDecorHandle<xAOD::MuonContainer,std::vector<FlowElementLink_t> > muonChargedFEWriteDecorHandle (m_muonChargedFEWriteHandleKey,ctx); @@ -111,6 +111,9 @@ StatusCode PFMuonFlowElementAssoc::execute(const EventContext & ctx) const //loop over muons in container for(const xAOD::Muon* muon: *muonChargedFEWriteDecorHandle){ const xAOD::TrackParticle* muon_trk=muon->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle); + if(muon_trk==nullptr) // not all muons have a track. catch the nullptrs in this case and skip + continue; + size_t MuonTrkIndex=muon_trk->index(); if(MuonTrkIndex==FETrackIndex){ // Add Muon element link to a vector @@ -139,7 +142,7 @@ StatusCode PFMuonFlowElementAssoc::execute(const EventContext & ctx) const m_UseMuonTopoClusters (True= Case 1, False = Case 2) **/ if(m_LinkNeutralFEClusters){ - ATH_MSG_INFO("Experimental: Cluster Linkers between neutral FEs and Muons are used"); + ATH_MSG_VERBOSE("Experimental: Cluster Linkers between neutral FEs and Muons are used"); for (const xAOD::FlowElement* FE: *NeutralFEmuonWriteDecorHandle){ int nMatchedFE=0; //get the index of the cluster corresponding to the Neutral FlowElements @@ -153,6 +156,10 @@ StatusCode PFMuonFlowElementAssoc::execute(const EventContext & ctx) const // retrieve the link to cells const CaloClusterCellLink* CellLink = FE_cluster->getCellLinks(); // build the iterator(s) for the looping over the elements inside the CellLink + if(CellLink==nullptr && !m_UseMuonTopoClusters){ // safety check if no celll link and we're doing the cell based matching only + ATH_MSG_WARNING("Flow Element cluster link is nullptr"); + continue; + } CaloClusterCellLink::const_iterator FE_FirstCell=CellLink->begin(); CaloClusterCellLink::const_iterator FE_LastCell=CellLink->end(); @@ -164,13 +171,21 @@ StatusCode PFMuonFlowElementAssoc::execute(const EventContext & ctx) const for (const xAOD::Muon* muon: *muonNeutralFEWriteDecorHandle ){ //Retrieve the ElementLink vector of clusters const ElementLink<xAOD::CaloClusterContainer> ClusterLink=muon->clusterLink(); - + //check if the ElementLink is valid + if(!ClusterLink.isValid()){ + ATH_MSG_DEBUG("Muon has an invalid link to cluster"); + continue; + } //access object from element link const xAOD::CaloCluster* cluster = *ClusterLink; // de-ref the element link to retrieve the pointer to the original object if(m_UseMuonTopoClusters){ // get the linker to the topo clusters std::vector<ElementLink<xAOD::CaloClusterContainer>> linksToTopoClusters=cluster->auxdata<std::vector<ElementLink<xAOD::CaloClusterContainer>> >("constituentClusterLinks"); for (ElementLink<xAOD::CaloClusterContainer> TopoClusterLink: linksToTopoClusters){ + if(!TopoClusterLink.isValid()){ + ATH_MSG_WARNING("Muon Calo cluster's TopoCluster link not found, skip"); + continue; + } const xAOD::CaloCluster* MuonTopoCluster=*TopoClusterLink; // de-ref the link to get the topo-cluster size_t MuonTopoCluster_index=MuonTopoCluster->index(); if(MuonTopoCluster_index==FEclusterindex){ @@ -179,7 +194,7 @@ StatusCode PFMuonFlowElementAssoc::execute(const EventContext & ctx) const FEMuonLinks.push_back(MuonLink_t(*muonReadHandle,muon->index())); // index() is the unique index of the cFlowElement in the cFlowElementcontaine muonNeutralFEVec.at(muon->index()).push_back(FlowElementLink_t(*NeutralFEReadHandle,FE->index())); - ATH_MSG_INFO("Got a match between NFE and Muon"); + ATH_MSG_VERBOSE("Got a match between NFE and Muon"); nMatchedFE++; // count number of matches between FE and muons } // check block of index matching } // end of loop over element links @@ -191,7 +206,12 @@ StatusCode PFMuonFlowElementAssoc::execute(const EventContext & ctx) const //retrieve cells associated to Muon cluster const CaloClusterCellLink* Muon_Clus_CellLink=cluster->getCellLinks(); + if(Muon_Clus_CellLink==nullptr){ + ATH_MSG_WARNING("This Muon calo cluster does not have any cells associated to it"); + continue; + } // if nullptr, skip this muon cluster. //get the iterator on the links + CaloClusterCellLink::const_iterator Muon_Clus_FirstCell=Muon_Clus_CellLink->begin(); CaloClusterCellLink::const_iterator Muon_Clus_LastCell=Muon_Clus_CellLink->end(); @@ -225,8 +245,8 @@ StatusCode PFMuonFlowElementAssoc::execute(const EventContext & ctx) const frac_muon_cluster_energy_matched=Muon_sum_matched_cellEnergy/tot_muon_cluster_energy; } if(frac_FE_cluster_energy_matched>0){ - ATH_MSG_INFO("Fraction of FE cluster energy used in match: "<<frac_FE_cluster_energy_matched<<", ismatched? "<<isCellMatched<<""); - ATH_MSG_INFO("Fraction of Muon cluster energy used in match: "<<frac_muon_cluster_energy_matched<<""); + ATH_MSG_VERBOSE("Fraction of FE cluster energy used in match: "<<frac_FE_cluster_energy_matched<<", ismatched? "<<isCellMatched<<""); + ATH_MSG_VERBOSE("Fraction of Muon cluster energy used in match: "<<frac_muon_cluster_energy_matched<<""); } if(isCellMatched){ // cell matched => Link the two objects. @@ -268,6 +288,10 @@ StatusCode PFMuonFlowElementAssoc::execute(const EventContext & ctx) const // For debug of the muon clusters used, add also: dR between caloclusters and number of caloclusters associated to each muon. //retrieve element link again to cluster const ElementLink<xAOD::CaloClusterContainer> ClusterContLink=muon->clusterLink(); + if(!ClusterContLink.isValid()){ + ATH_MSG_DEBUG("Muon cluster link is invalid, skip"); + continue; + } // use elem link to retrieve container const xAOD::CaloCluster* MuonCluster=*ClusterContLink; TLorentzVector muon_fourvec=muon->p4(); @@ -278,7 +302,7 @@ StatusCode PFMuonFlowElementAssoc::execute(const EventContext & ctx) const muon_ClusterInfo_deltaR_WriteDecorHandle(*muon)=deltaR_muon_cluster; } }// end of experimental block - ATH_MSG_INFO("Execute completed successfully"); + ATH_MSG_VERBOSE("Execute completed successfully"); return StatusCode::SUCCESS; } diff --git a/Reconstruction/egamma/egammaValidation/share/egammaArtCaloCalPostInclude.py b/Reconstruction/egamma/egammaValidation/share/egammaArtCaloCalPostInclude.py new file mode 100644 index 0000000000000000000000000000000000000000..a41d6d3374c55242f90f0183544cc9dabb255d62 --- /dev/null +++ b/Reconstruction/egamma/egammaValidation/share/egammaArtCaloCalPostInclude.py @@ -0,0 +1,21 @@ +# +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration. +# + +# Handle additonal moments for e/gamma ART +TypeForExisting = "xAOD::CaloClusterAuxContainer" +KeyForExisting = "CaloCalTopoClustersAux" +ExistingList = "" +AdditionalEgamma = ".LATERAL.ENG_FRAC_EM" +for CollectionsList in CILMergeAOD(TypeForExisting): + if KeyForExisting in CollectionsList: + ExistingList = CollectionsList + break + +if ExistingList: + AdditionalEgamma = ".LATERAL.ENG_FRAC_EM" + CILMergeAOD.removeItem(ExistingList) + CILMergeAOD.add(ExistingList+AdditionalEgamma) + StreamAOD.ItemList = CILMergeAOD() + print("Modified list") + print(StreamAOD.ItemList) diff --git a/Reconstruction/egamma/egammaValidation/test/test_electron.sh b/Reconstruction/egamma/egammaValidation/test/test_electron.sh index c3b46318783dbabf5703ff8e89449ef11b275706..3cbb7046e1ced4af548762a0cb754c10d9f41465 100755 --- a/Reconstruction/egamma/egammaValidation/test/test_electron.sh +++ b/Reconstruction/egamma/egammaValidation/test/test_electron.sh @@ -29,7 +29,7 @@ case $ArtProcess in echo "Unsetting ATHENA_NUM_PROC=${ATHENA_NUM_PROC}" unset ATHENA_NUM_PROC - AODMerge_tf.py --inputAODFile=art_core_*/Nightly_AOD_electron.pool.root --outputAOD_MRGFile=Nightly_AOD_electron.pool.root --preExec "from RecExConfig.RecAlgsFlags import recAlgs; recAlgs.doTrigger=False" --postExec "all:CILMergeAOD.removeItem(\"xAOD::CaloClusterAuxContainer#CaloCalTopoClustersAux.SECOND_R.SECOND_LAMBDA.CENTER_MAG.CENTER_LAMBDA.FIRST_ENG_DENS.ENG_FRAC_MAX.ISOLATION.ENG_BAD_CELLS.N_BAD_CELLS.BADLARQ_FRAC.ENG_POS.AVG_LAR_Q.AVG_TILE_Q.EM_PROBABILITY.BadChannelList\");CILMergeAOD.add(\"xAOD::CaloClusterAuxContainer#CaloCalTopoClustersAux.SECOND_R.SECOND_LAMBDA.CENTER_MAG.CENTER_LAMBDA.FIRST_ENG_DENS.ENG_FRAC_MAX.ISOLATION.ENG_BAD_CELLS.N_BAD_CELLS.BADLARQ_FRAC.ENG_POS.AVG_LAR_Q.AVG_TILE_Q.EM_PROBABILITY.BadChannelList.ENG_CALIB_TOT.ENG_CALIB_OUT_L.ENG_CALIB_EMB0.ENG_CALIB_EME0.ENG_CALIB_TILEG3.ENG_CALIB_DEAD_TOT.ENG_CALIB_DEAD_EMB0.ENG_CALIB_DEAD_TILE0.ENG_CALIB_DEAD_TILEG3.ENG_CALIB_DEAD_EME0.ENG_CALIB_DEAD_HEC0.ENG_CALIB_DEAD_FCAL.ENG_CALIB_DEAD_LEAKAGE.ENG_CALIB_DEAD_UNCLASS.ENG_CALIB_FRAC_EM.ENG_CALIB_FRAC_HAD.ENG_CALIB_FRAC_REST.LATERAL.ENG_FRAC_EM\");StreamAOD.ItemList=CILMergeAOD()" + AODMerge_tf.py --inputAODFile=art_core_*/Nightly_AOD_electron.pool.root --outputAOD_MRGFile=Nightly_AOD_electron.pool.root --preExec "from RecExConfig.RecAlgsFlags import recAlgs; recAlgs.doTrigger=False" --postInclude "all:egammaValidation/egammaArtCaloCalPostInclude.py" echo "art-result: $? AODMerge" @@ -67,7 +67,7 @@ case $ArtProcess in echo "Unsetting ATHENA_NUM_PROC=${ATHENA_NUM_PROC}" unset ATHENA_NUM_PROC - Reco_tf.py --inputRDOFile=$x --outputAODFile=Nightly_AOD_electron.pool.root --maxEvents=2000 --autoConfiguration="everything" --preExec="from ParticleBuilderOptions.AODFlags import AODFlags; AODFlags.ThinGeantTruth.set_Value_and_Lock(False);AODFlags.egammaTrackSlimmer.set_Value_and_Lock(False);AODFlags.ThinInDetForwardTrackParticles.set_Value_and_Lock(False); AODFlags.ThinNegativeEnergyNeutralPFOs.set_Value_and_Lock(False); rec.doTrigger=False; rec.doTau=False ; rec.doMuon=False; rec.doBTagging=False ; from RecExConfig.RecAlgsFlags import recAlgs; recAlgs.doMuonSpShower=False ; recAlgs.doEFlow=False ; recAlgs.doEFlowJet=False ; recAlgs.doMissingET=False ; recAlgs.doMissingETSig=False ; recAlgs.doTrigger=False ; from JetRec.JetRecFlags import jetFlags ; jetFlags.Enabled=False ; " --postExec "ESDtoAOD:CILMergeAOD.removeItem(\"xAOD::CaloClusterAuxContainer#CaloCalTopoClustersAux.SECOND_R.SECOND_LAMBDA.CENTER_MAG.CENTER_LAMBDA.FIRST_ENG_DENS.ENG_FRAC_MAX.ISOLATION.ENG_BAD_CELLS.N_BAD_CELLS.BADLARQ_FRAC.ENG_POS.AVG_LAR_Q.AVG_TILE_Q.EM_PROBABILITY.BadChannelList\");CILMergeAOD.add(\"xAOD::CaloClusterAuxContainer#CaloCalTopoClustersAux.SECOND_R.LATERAL.ENG_FRAC_EM.SECOND_LAMBDA.CENTER_MAG.CENTER_LAMBDA.FIRST_ENG_DENS.ENG_FRAC_MAX.ISOLATION.ENG_BAD_CELLS.N_BAD_CELLS.BADLARQ_FRAC.ENG_POS.AVG_LAR_Q.AVG_TILE_Q.EM_PROBABILITY.BadChannelList.ENG_CALIB_TOT.ENG_CALIB_OUT_L.ENG_CALIB_EMB0.ENG_CALIB_EME0.ENG_CALIB_TILEG3.ENG_CALIB_DEAD_TOT.ENG_CALIB_DEAD_EMB0.ENG_CALIB_DEAD_TILE0.ENG_CALIB_DEAD_TILEG3.ENG_CALIB_DEAD_EME0.ENG_CALIB_DEAD_HEC0.ENG_CALIB_DEAD_FCAL.ENG_CALIB_DEAD_LEAKAGE.ENG_CALIB_DEAD_UNCLASS.ENG_CALIB_FRAC_EM.ENG_CALIB_FRAC_HAD.ENG_CALIB_FRAC_REST\");StreamAOD.ItemList=CILMergeAOD()" "POOLMergeAthenaMPAOD0:CILMergeAOD.removeItem(\"xAOD::CaloClusterAuxContainer#CaloCalTopoClustersAux.SECOND_R.SECOND_LAMBDA.CENTER_MAG.CENTER_LAMBDA.FIRST_ENG_DENS.ENG_FRAC_MAX.ISOLATION.ENG_BAD_CELLS.N_BAD_CELLS.BADLARQ_FRAC.ENG_POS.AVG_LAR_Q.AVG_TILE_Q.EM_PROBABILITY.BadChannelList\");CILMergeAOD.add(\"xAOD::CaloClusterAuxContainer#CaloCalTopoClustersAux.SECOND_R.LATERAL.ENG_FRAC_EM.SECOND_LAMBDA.CENTER_MAG.CENTER_LAMBDA.FIRST_ENG_DENS.ENG_FRAC_MAX.ISOLATION.ENG_BAD_CELLS.N_BAD_CELLS.BADLARQ_FRAC.ENG_POS.AVG_LAR_Q.AVG_TILE_Q.EM_PROBABILITY.BadChannelList.ENG_CALIB_TOT.ENG_CALIB_OUT_L.ENG_CALIB_EMB0.ENG_CALIB_EME0.ENG_CALIB_TILEG3.ENG_CALIB_DEAD_TOT.ENG_CALIB_DEAD_EMB0.ENG_CALIB_DEAD_TILE0.ENG_CALIB_DEAD_TILEG3.ENG_CALIB_DEAD_EME0.ENG_CALIB_DEAD_HEC0.ENG_CALIB_DEAD_FCAL.ENG_CALIB_DEAD_LEAKAGE.ENG_CALIB_DEAD_UNCLASS.ENG_CALIB_FRAC_EM.ENG_CALIB_FRAC_HAD.ENG_CALIB_FRAC_REST\");StreamAOD.ItemList=CILMergeAOD()" + Reco_tf.py --inputRDOFile=$x --outputAODFile=Nightly_AOD_electron.pool.root --maxEvents=2000 --autoConfiguration="everything" --preExec="from ParticleBuilderOptions.AODFlags import AODFlags; AODFlags.ThinGeantTruth.set_Value_and_Lock(False);AODFlags.egammaTrackSlimmer.set_Value_and_Lock(False);AODFlags.ThinInDetForwardTrackParticles.set_Value_and_Lock(False); AODFlags.ThinNegativeEnergyNeutralPFOs.set_Value_and_Lock(False); rec.doTrigger=False; rec.doTau=False ; rec.doMuon=False; rec.doBTagging=False ; from RecExConfig.RecAlgsFlags import recAlgs; recAlgs.doMuonSpShower=False ; recAlgs.doEFlow=False ; recAlgs.doEFlowJet=False ; recAlgs.doMissingET=False ; recAlgs.doMissingETSig=False ; recAlgs.doTrigger=False ; from JetRec.JetRecFlags import jetFlags ; jetFlags.Enabled=False ; " --postInclude "ESDtoAOD:egammaValidation/egammaArtCaloCalPostInclude.py" "POOLMergeAthenaMPAOD0:egammaValidation/egammaArtCaloCalPostInclude.py" echo "art-result: $? reconstruction" diff --git a/Reconstruction/tauRec/share/TauAODList.py b/Reconstruction/tauRec/share/TauAODList.py index 159bb37e0542861313dd587e51c997a6c8b7b5c8..19dea7073b01a1c1984c373f3719304f5fdd9527 100644 --- a/Reconstruction/tauRec/share/TauAODList.py +++ b/Reconstruction/tauRec/share/TauAODList.py @@ -36,10 +36,11 @@ TauAODList += [ "xAOD::CaloClusterAuxContainer#TauPi0ClustersAux." ] TauAODList += [ "CaloClusterCellLinkContainer#TauPi0Clusters_links" ] #------------------------------------------------------------------------------ -# Shot clusters +# Shot clusters and cell links #------------------------------------------------------------------------------ TauAODList += [ "xAOD::CaloClusterContainer#TauShotClusters"] TauAODList += [ "xAOD::CaloClusterAuxContainer#TauShotClustersAux."] +TauAODList += [ "CaloClusterCellLinkContainer#TauShotClusters_links" ] #------------------------------------------------------------------------------ # Final reconstructed 4-vectors of Pi0s diff --git a/Reconstruction/tauRec/share/TauESDList.py b/Reconstruction/tauRec/share/TauESDList.py index a8d36482330776eec404f487345765ddc6200a00..de81e842a59a1ea3485855ac7e1b2ac5cf2bc6b2 100644 --- a/Reconstruction/tauRec/share/TauESDList.py +++ b/Reconstruction/tauRec/share/TauESDList.py @@ -36,10 +36,11 @@ TauESDList += [ "xAOD::CaloClusterAuxContainer#TauPi0ClustersAux." ] TauESDList += [ "CaloClusterCellLinkContainer#TauPi0Clusters_links" ] #------------------------------------------------------------------------------ -# Shot clusters +# Shot clusters and cell links #------------------------------------------------------------------------------ TauESDList += [ "xAOD::CaloClusterContainer#TauShotClusters"] TauESDList += [ "xAOD::CaloClusterAuxContainer#TauShotClustersAux."] +TauESDList += [ "CaloClusterCellLinkContainer#TauShotClusters_links" ] #------------------------------------------------------------------------------ # Final reconstructed 4-vectors of Pi0s diff --git a/Reconstruction/tauRec/src/TauProcessorAlg.cxx b/Reconstruction/tauRec/src/TauProcessorAlg.cxx index d5da68149fde0b2f89a89a5a236a178e380febc9..43136600269b3124febb7536b04428feb3fdee9e 100644 --- a/Reconstruction/tauRec/src/TauProcessorAlg.cxx +++ b/Reconstruction/tauRec/src/TauProcessorAlg.cxx @@ -3,15 +3,11 @@ */ #include "tauRec/TauProcessorAlg.h" -#include "xAODJet/Jet.h" -#include "xAODJet/JetContainer.h" #include "xAODTau/TauJetAuxContainer.h" -#include "xAODTau/TauDefs.h" -#include "xAODTau/TauTrackContainer.h" #include "xAODTau/TauTrackAuxContainer.h" -#include "StoreGate/ReadCondHandleKey.h" -#include "StoreGate/ReadHandle.h" -#include "StoreGate/WriteHandle.h" +#include "xAODCaloEvent/CaloClusterAuxContainer.h" +#include "xAODPFlow/PFOAuxContainer.h" +#include "CaloUtils/CaloClusterStoreHelper.h" #include "NavFourMom/INavigable4MomentumCollection.h" #include <boost/dynamic_bitset.hpp> @@ -40,6 +36,7 @@ StatusCode TauProcessorAlg::initialize() { ATH_CHECK( m_tauOutputContainer.initialize() ); ATH_CHECK( m_tauTrackOutputContainer.initialize() ); ATH_CHECK( m_tauShotClusOutputContainer.initialize() ); + ATH_CHECK( m_tauShotClusLinkContainer.initialize() ); ATH_CHECK( m_tauShotPFOOutputContainer.initialize() ); ATH_CHECK( m_tauPi0CellOutputContainer.initialize(SG::AllowEmpty) ); @@ -189,6 +186,10 @@ StatusCode TauProcessorAlg::execute(const EventContext& ctx) const { } }// loop through seeds + // build cell link container for shot clusters + SG::WriteHandle<CaloClusterCellLinkContainer> tauShotClusLinkHandle( m_tauShotClusLinkContainer, ctx ); + ATH_CHECK(CaloClusterStoreHelper::finalizeClusters (tauShotClusLinkHandle, tauShotClusContainer)); + // Check this is needed for the cell container? if(Pi0CellContainer) { // symlink as INavigable4MomentumCollection (as in CaloRec/CaloCellMaker) diff --git a/Reconstruction/tauRec/tauRec/TauProcessorAlg.h b/Reconstruction/tauRec/tauRec/TauProcessorAlg.h index 3a4c36ad859f3a75fd54e66cd19395320f6ce3cd..a4b0a4a31b43c5e464aacb286b32215fa2b1cb3d 100644 --- a/Reconstruction/tauRec/tauRec/TauProcessorAlg.h +++ b/Reconstruction/tauRec/tauRec/TauProcessorAlg.h @@ -14,10 +14,11 @@ #include "AthenaBaseComps/AthReentrantAlgorithm.h" #include "xAODTau/TauJetContainer.h" +#include "xAODTau/TauTrackContainer.h" +#include "xAODJet/JetContainer.h" #include "xAODPFlow/PFOContainer.h" -#include "xAODPFlow/PFOAuxContainer.h" #include "xAODCaloEvent/CaloClusterContainer.h" -#include "xAODCaloEvent/CaloClusterAuxContainer.h" +#include "CaloEvent/CaloClusterCellLinkContainer.h" #include "InDetReadoutGeometry/SiDetectorElementCollection.h" #include "TRT_ReadoutGeometry/TRT_DetElementContainer.h" #include "CaloInterface/ICaloCellMakerTool.h" @@ -60,6 +61,7 @@ class TauProcessorAlg: public AthReentrantAlgorithm SG::WriteHandleKey<xAOD::TauJetContainer> m_tauOutputContainer{this,"Key_tauOutputContainer","tmp_TauJets","output tau data key"}; SG::WriteHandleKey<xAOD::TauTrackContainer> m_tauTrackOutputContainer{this,"Key_tauTrackOutputContainer","TauTracks","output tau tracks data key"}; SG::WriteHandleKey<xAOD::CaloClusterContainer> m_tauShotClusOutputContainer{this,"Key_tauShotClusOutputContainer", "TauShotClusters", "tau shot clusters out key"}; + SG::WriteHandleKey<CaloClusterCellLinkContainer> m_tauShotClusLinkContainer{this,"Key_tauShotClusLinkContainer", "TauShotClusters_links", "tau shot clusters out key"}; SG::WriteHandleKey<xAOD::PFOContainer> m_tauShotPFOOutputContainer{this,"Key_tauShotPFOOutputContainer", "TauShotParticleFlowObjects", "tau pfo out key"}; SG::WriteHandleKey<CaloCellContainer> m_tauPi0CellOutputContainer{this,"Key_tauPi0CellOutputContainer","TauCommonPi0Cells","output calo cell key"}; diff --git a/Simulation/SimuJobTransforms/python/ISF_Skeleton.py b/Simulation/SimuJobTransforms/python/ISF_Skeleton.py new file mode 100644 index 0000000000000000000000000000000000000000..88da8ebffd70f8ed423150603abcfd6ec5e637bf --- /dev/null +++ b/Simulation/SimuJobTransforms/python/ISF_Skeleton.py @@ -0,0 +1,237 @@ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration + +import sys +from PyJobTransforms.CommonRunArgsToFlags import commonRunArgsToFlags + +# based on https://acode-browser1.usatlas.bnl.gov/lxr/source/athena/Control/AthenaServices/python/Configurables.py#0247 +def EvtIdModifierSvc_add_modifier(svc, + run_nbr=None, evt_nbr=None, time_stamp=None, lbk_nbr=None, + nevts=1): + if run_nbr is None: + modify_run_nbr = 0 + run_nbr = 0 + else: + modify_run_nbr = 1 + + + if evt_nbr is None: + modify_evt_nbr = 0 + evt_nbr = 0 + else: + modify_evt_nbr = 1 + + if time_stamp is None: + modify_time_stamp = 0 + time_stamp = 0 + else: + modify_time_stamp = 1 + + if lbk_nbr is None: + modify_lbk_nbr = 0 + lbk_nbr = 0 + else: + modify_lbk_nbr = 1 + + mod_bit = int(0b0000 + | (modify_run_nbr << 0) + | (modify_evt_nbr << 1) + | (modify_time_stamp << 2) + | (modify_lbk_nbr << 3)) + + svc.Modifiers += [run_nbr, evt_nbr, time_stamp, lbk_nbr, + nevts, mod_bit] + +def defaultSimulationFlags(ConfigFlags): + """Fill default simulation flags""" + # TODO: how to autoconfigure those + ConfigFlags.Sim.CalibrationRun = "Off" #"DeadLAr" + ConfigFlags.Sim.RecordStepInfo = False + ConfigFlags.Sim.CavernBG = "Signal" + ConfigFlags.Sim.BeamPipeSimMode = 'FastSim' + ConfigFlags.Sim.ReleaseGeoModel = False + ConfigFlags.Sim.ISFRun = True + ConfigFlags.GeoModel.Align.Dynamic = False + + #Frozen showers OFF = 0 + ConfigFlags.Sim.LArParameterization = 2 + + + #set the detector flags: - all on currently + #inner detectors + ConfigFlags.Detector.SimulateBCM = True + ConfigFlags.Detector.GeometryBCM = True + ConfigFlags.Detector.SimulateDBM = True + ConfigFlags.Detector.GeometryDBM = True + ConfigFlags.Detector.SimulatePixel = True + ConfigFlags.Detector.GeometryPixel = True + ConfigFlags.Detector.SimulateSCT = True + ConfigFlags.Detector.GeometrySCT = True + ConfigFlags.Detector.SimulateTRT = True + ConfigFlags.Detector.GeometryTRT = True + + #muon + ConfigFlags.Detector.SimulateMuon = True #True + ConfigFlags.Detector.GeometryMuon = True #True <these two break it (others can be true) + ConfigFlags.Detector.SimulateMDT = True #True + ConfigFlags.Detector.GeometryMDT = True #True + ConfigFlags.Detector.SimulateRPC = True #True + ConfigFlags.Detector.GeometryRPC = True #True + ConfigFlags.Detector.SimulateTGC = True #True + ConfigFlags.Detector.GeometryTGC = True #True + ConfigFlags.Detector.SimulateCSC = True #True + ConfigFlags.Detector.GeometryCSC = True #True + + #LAr + ConfigFlags.Detector.SimulateLAr = True + ConfigFlags.Detector.GeometryLAr = True + ConfigFlags.Detector.SimulateTile = True + ConfigFlags.Detector.GeometryTile = True + + ConfigFlags.Detector.SimulateHGTD = False + #ConfigFlags.Detector.GeometryHGTD = False #isn't a flag -- is it needed? + + + ConfigFlags.Detector.SimulateBpipe = True + ConfigFlags.Detector.GeometryBpipe = True + + + #forward region not migrated yet + ConfigFlags.Detector.SimulateLucid = False + ConfigFlags.Detector.SimulateZDC = False + ConfigFlags.Detector.SimulateALFA = False + ConfigFlags.Detector.SimulateAFP = False + ConfigFlags.Detector.SimulateFwdRegion = False + ConfigFlags.Detector.SimulateForward = False + + + + +def fromRunArgs(runArgs): + from AthenaCommon.Configurable import Configurable + Configurable.configurableRun3Behavior = True + + from AthenaCommon.Logging import logging + log = logging.getLogger('Overlay') + log.info('****************** STARTING Simulation *****************') + + log.info('**** Transformation run arguments') + log.info(str(runArgs)) + + log.info('**** Setting-up configuration flags') + from AthenaConfiguration.AllConfigFlags import ConfigFlags + commonRunArgsToFlags(runArgs, ConfigFlags) + + if hasattr(runArgs, 'inputEVNTFile'): + ConfigFlags.Input.Files = runArgs.inputEVNTFile + else: + raise RuntimeError('No input EVNT file defined') + + if hasattr(runArgs, 'outputHITSFile'): + if runArgs.outputHITSFile == 'None': + ConfigFlags.Output.HITSFileName = '' + else: + ConfigFlags.Output.HITSFileName = runArgs.outputHITSFile + else: + raise RuntimeError('No outputHITSFile defined') + + if hasattr(runArgs, 'DataRunNumber'): + ConfigFlags.Input.RunNumber = [runArgs.DataRunNumber] # is it updating? + + if hasattr(runArgs, 'outputHITSFile'): + ConfigFlags.Sim.PhysicsList = runArgs.physicsList + + if hasattr(runArgs, 'conditionsTag'): + ConfigFlags.IOVDb.GlobalTag = runArgs.conditionsTag + + if hasattr(runArgs, 'simulator'): + ConfigFlags.Sim.ISF.Simulator = runArgs.simulator + + if hasattr(runArgs, 'truthStrategy'): + ConfigFlags.Sim.TruthStrategy = runArgs.truthStrategy + + if hasattr(runArgs, 'maxEvents'): + evtMax = runArgs.maxEvents + else: + evtMax = -1 + + # Setup common simulation flags + defaultSimulationFlags(ConfigFlags) + + # Pre-exec + #simFlags error? + # if hasattr(runArgs, 'preExec') and runArgs.preExec != 'NONE' and runArgs.preExec: + # for cmd in runArgs.preExec: + # exec(cmd) + + # Pre-include + # if hasattr(runArgs, 'preInclude') and runArgs.preInclude: + # raise ValueError('preInclude not supported') + + # Lock flags + ConfigFlags.lock() + + + #run ISF + from AthenaConfiguration.MainServicesConfig import MainServicesCfg + cfg = MainServicesCfg(ConfigFlags) + + from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg + from AthenaPoolCnvSvc.PoolWriteConfig import PoolWriteCfg + cfg.merge(PoolReadCfg(ConfigFlags)) + cfg.merge(PoolWriteCfg(ConfigFlags)) + # todo its own cfg ... + #todo check evtMax=-1 works with this method + myRunNumber = 284500 + myFirstLB = 1 + myInitialTimeStamp = 1446539185 + from AthenaConfiguration.ComponentFactory import CompFactory + evtIdModifierSvc = CompFactory.EvtIdModifierSvc(EvtStoreName="StoreGateSvc") + iovDbMetaDataTool = CompFactory.IOVDbMetaDataTool() + iovDbMetaDataTool.MinMaxRunNumbers = [myRunNumber, 2147483647] + cfg.addPublicTool(iovDbMetaDataTool) + EvtIdModifierSvc_add_modifier(evtIdModifierSvc, run_nbr=myRunNumber, lbk_nbr=myFirstLB, time_stamp=myInitialTimeStamp, nevts=evtMax) + eventSelector = cfg.getService("EventSelector") + eventSelector.OverrideRunNumber = True + eventSelector.RunNumber = myRunNumber + eventSelector.FirstLB = myFirstLB + eventSelector.InitialTimeStamp = myInitialTimeStamp # Necessary to avoid a crash + if hasattr(eventSelector, "OverrideRunNumberFromInput"): + eventSelector.OverrideRunNumberFromInput = True + cfg.addService(evtIdModifierSvc, create=True) + # ... up to here? + + # add BeamEffectsAlg + from BeamEffects.BeamEffectsAlgConfig import BeamEffectsAlgCfg + cfg.merge(BeamEffectsAlgCfg(ConfigFlags)) + + # add the ISF_MainConfig + from ISF_Config.ISF_MainConfigNew import Kernel_FullG4MTCfg + cfg.merge(Kernel_FullG4MTCfg(ConfigFlags)) + + from TileGeoG4SD.TileGeoG4SDToolConfig import TileGeoG4SDCalcCfg + cfg.merge(TileGeoG4SDCalcCfg(ConfigFlags)) + + # Post-include + # if hasattr(runArgs, 'postInclude') and runArgs.postInclude: + # # from OverlayConfiguration.OverlayHelpers import accFromFragment + # for fragment in runArgs.postInclude: + # cfg.merge(accFromFragment(fragment, ConfigFlags)) + + # Post-exec + # if hasattr(runArgs, 'postExec') and runArgs.postExec != 'NONE' and runArgs.postExec: + # for cmd in runArgs.postExec: + # exec(cmd) + + import time + tic = time.time() + # Run the final accumulator + sc = cfg.run() + log.info("Run ISF_MainConfigNew_Test in " + str(time.time()-tic) + " seconds") + + sys.exit(not sc.isSuccess()) + + f = open("test.pkl","wb") + cfg.store(f) + f.close() + + sys.exit(0) \ No newline at end of file diff --git a/Simulation/SimuJobTransforms/python/SimTransformUtils.py b/Simulation/SimuJobTransforms/python/SimTransformUtils.py index 2cd2d3c5169c5fc81938c0f25324153392192bb5..b37ae4760f28f358a8a6d2177326c8878bb89000 100644 --- a/Simulation/SimuJobTransforms/python/SimTransformUtils.py +++ b/Simulation/SimuJobTransforms/python/SimTransformUtils.py @@ -128,6 +128,7 @@ def addSimulationSubstep(executorSet, overlayTransform = False): outData=['HITS','NULL'] ) executorSet.add(TRExe) SimExe = athenaExecutor(name = 'EVNTtoHITS', skeletonFile = 'SimuJobTransforms/skeleton.EVGENtoHIT_ISF.py', + skeletonCA = 'SimuJobTransforms.ISF_Skeleton', substep = 'sim', tryDropAndReload = False, perfMonFile = 'ntuple.pmon.gz', inData=['NULL','EVNT'], outData=['EVNT_TR','HITS','NULL'] ) diff --git a/Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h b/Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h index 24ed209335f3e748e1c5a7b0956bd622a12ead3d..64964c1f29ee5403045af92453477133a3f25851 100755 --- a/Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h +++ b/Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h @@ -124,22 +124,32 @@ enum SummaryType { eProbabilityToT_res = 49, //!< Electron probability from Time-Over-Threshold (ToT) information [float]. eProbabilityBrem_res = 50, //!< Electron probability from Brem fitting (DNA) [float]. pixeldEdx_res = 51, //!< the dE/dx estimate, calculated using the pixel clusters [?] + eProbabilityNN_res = 73, //!< Electron probability from NN [float]. + TRTTrackOccupancy_res = 74, //!< TRT track occupancy. + TRTdEdx_res = 75, //!< dEdx from TRT ToT measurement. // -- numbers... - numberOfTrackSummaryTypes = 73 + numberOfTrackSummaryTypes = 76 }; +// summary types that are stored as float values +static const std::vector<unsigned int> floatSummaryTypes = {eProbabilityComb_res, eProbabilityHT_res, eProbabilityToT_res, eProbabilityBrem_res, + pixeldEdx_res, eProbabilityNN_res, TRTTrackOccupancy_res, TRTdEdx_res}; + // Troels.Petersen@cern.ch: enum eProbabilityType { eProbabilityComb = 0, //!< Electron probability from combining the below probabilities. eProbabilityHT = 1, //!< Electron probability from High Threshold (HT) information. eProbabilityToT = 2, //!< Electron probability from Time-Over-Threshold (ToT) information. eProbabilityBrem = 3, //!< Electron probability from Brem fitting (DNA). - numberOfeProbabilityTypes = 4 - }; - // the eProbability vector is abused to store : - // [4] TRT local occupancy - // [5] TRT dE/dx + eProbabilityNN = 4, //!< Electron probability from NN. + TRTTrackOccupancy = 5, //!< TRT track occupancy. + TRTdEdx = 6, //!< dEdx from TRT ToT measurement. + eProbabilityNumberOfTRTHitsUsedFordEdx = 7, //!< Number of TRT hits used for dEdx measurement. + numberOfeProbabilityTypes = 8 + }; + +static const std::vector<float> eProbabilityDefault(numberOfeProbabilityTypes, 0.5); /** enumerates the various detector types currently accessible from the isHit() method. \todo work out how to add muons to this*/ diff --git a/Tracking/TrkEvent/TrkTrackSummary/src/TrackSummary.cxx b/Tracking/TrkEvent/TrkTrackSummary/src/TrackSummary.cxx index 9911f88e217cf261039e6e002a2f79a782eaba23..42de737e96ff33bba78b5546113843a5aa5f1a3c 100755 --- a/Tracking/TrkEvent/TrkTrackSummary/src/TrackSummary.cxx +++ b/Tracking/TrkEvent/TrkTrackSummary/src/TrackSummary.cxx @@ -19,7 +19,7 @@ const int Trk::TrackSummary::SummaryTypeNotSet=-1; Trk::TrackSummary::TrackSummary() : m_information(numberOfTrackSummaryTypes, SummaryTypeNotSet), - m_eProbability(numberOfeProbabilityTypes, 0.5), + m_eProbability(Trk::eProbabilityDefault), m_dedx(-1), m_nhitsdedx(-1), m_nhitsoverflowdedx(-1), @@ -105,8 +105,9 @@ Trk::TrackSummary& Trk::TrackSummary::operator+=(const TrackSummary& ts) } m_information[i]+= ts.m_information[i]; } - for (int i=0;i<numberOfeProbabilityTypes;++i) { m_eProbability[i] *= ts.m_eProbability[i]; -} + if (ts.m_eProbability != Trk::eProbabilityDefault) { + m_eProbability = ts.m_eProbability; + } if (m_dedx<0 && ts.m_dedx>=0) { m_dedx=ts.m_dedx; m_nhitsdedx=ts.m_nhitsdedx; @@ -198,6 +199,10 @@ T_out& dumpTrackSummary( T_out& out, const TrackSummary& trackSum ) out << " * Electron probability from HT: " << trackSum.getPID(eProbabilityHT) << "\n"; out << " * Electron probability from ToT: " << trackSum.getPID(eProbabilityToT) << "\n"; out << " * Electron probability from Brem: " << trackSum.getPID(eProbabilityBrem) << "\n"; + out << " * Electron probability from NN: " << trackSum.getPID(eProbabilityNN) << "\n"; + out << " * TRT track occupancy: " << trackSum.getPID(TRTTrackOccupancy) << "\n"; + out << " * dE/dx from TRT: " << trackSum.getPID(TRTdEdx) << "\n"; + out << " * number of TRT hits used for dE/dx: " << trackSum.getPID(eProbabilityNumberOfTRTHitsUsedFordEdx) << "\n"; out << " --------------------------------- " << "\n"; out << " dE/dx from pixels : " << trackSum.getPixeldEdx() << " MeV g^-1 cm^2" << "\n"; diff --git a/Tracking/TrkTools/TrkParticleCreator/src/TrackParticleCreatorTool.cxx b/Tracking/TrkTools/TrkParticleCreator/src/TrackParticleCreatorTool.cxx index c46db14d84887bf1c2f68aeb8b7d367667a3a8ee..8c844009a059d5d86a94fc9525e01b262c1cc1a2 100644 --- a/Tracking/TrkTools/TrkParticleCreator/src/TrackParticleCreatorTool.cxx +++ b/Tracking/TrkTools/TrkParticleCreator/src/TrackParticleCreatorTool.cxx @@ -86,9 +86,9 @@ createEProbabilityMap(std::map<std::string, std::pair<Trk::eProbabilityType, boo // added as decorations eprob_map.insert(std::make_pair("eProbabilityToT", std::make_pair(Trk::eProbabilityToT, true))); eprob_map.insert(std::make_pair("eProbabilityBrem", std::make_pair(Trk::eProbabilityBrem, true))); - eprob_map.insert(std::make_pair("TRTTrackOccupancy", std::make_pair(Trk::numberOfeProbabilityTypes, true))); - eprob_map.insert(std::make_pair( - "TRTdEdx", std::make_pair(static_cast<Trk::eProbabilityType>(Trk::numberOfeProbabilityTypes + 1), true))); + eprob_map.insert(std::make_pair("eProbabilityNN", std::make_pair(Trk::eProbabilityNN, true))); + eprob_map.insert(std::make_pair("TRTdEdx", std::make_pair(Trk::TRTdEdx, true))); + eprob_map.insert(std::make_pair("TRTTrackOccupancy", std::make_pair(Trk::TRTTrackOccupancy, true))); } void @@ -106,7 +106,7 @@ TrackParticleCreatorTool::TrackParticleCreatorTool(const std::string& t, const s , m_detID(nullptr) , m_pixelID(nullptr) , m_IBLParameterSvc("IBLParameterSvc", n) - , m_copyExtraSummaryName{ "eProbabilityComb", "eProbabilityHT", "TRTTrackOccupancy", "TRTdEdx", "TRTdEdxUsedHits" } + , m_copyExtraSummaryName{ "eProbabilityComb", "eProbabilityHT", "eProbabilityNN", "TRTTrackOccupancy", "TRTdEdx", "TRTdEdxUsedHits" } , m_copyEProbabilities{} , m_decorateEProbabilities{} , m_decorateSummaryTypes{} @@ -1054,9 +1054,6 @@ TrackParticleCreatorTool::TrackParticleCreatorTool(const std::string& t, const s } void TrackParticleCreatorTool::setTrackSummary( xAOD::TrackParticle& tp, const TrackSummary& summary ) const { - // int types - unsigned int offset = 47;// where the floats start in xAOD::SummaryType - // ensure that xAOD TrackSummary and TrackSummary enums are in sync. constexpr unsigned int xAodReferenceEnum=static_cast<unsigned int>(xAOD::pixeldEdx); constexpr unsigned int TrkReferenceEnum=static_cast<unsigned int>(Trk::pixeldEdx_res); @@ -1067,9 +1064,8 @@ TrackParticleCreatorTool::TrackParticleCreatorTool(const std::string& t, const s if ( i >= Trk::numberOfMdtHits && i <= Trk::numberOfRpcEtaHits ) continue; if ( i == Trk::numberOfCscUnspoiltEtaHits ) continue; if ( i >= Trk::numberOfCscEtaHoles && i <= Trk::numberOfTgcPhiHoles ) continue; - if ( i >= offset && i < offset+Trk::numberOfeProbabilityTypes+1){ - continue; - } + // skip values which are floats + if ( std::find(floatSummaryTypes.begin(), floatSummaryTypes.end(), i) != floatSummaryTypes.end() ) continue; if ( i >= Trk::numberOfStgcEtaHits && i <= Trk::numberOfMmHoles) continue; // coverity[mixed_enums] if (i == Trk::numberOfTRTHitsUsedFordEdx ) continue; diff --git a/Tracking/TrkTools/TrkToolInterfaces/TrkToolInterfaces/ITRT_ElectronPidTool.h b/Tracking/TrkTools/TrkToolInterfaces/TrkToolInterfaces/ITRT_ElectronPidTool.h index 12091989f1e6b45ea2763c516bbc70105d773a9c..7050bd36525aa6e525cfbe35687ff28352a88f88 100644 --- a/Tracking/TrkTools/TrkToolInterfaces/TrkToolInterfaces/ITRT_ElectronPidTool.h +++ b/Tracking/TrkTools/TrkToolInterfaces/TrkToolInterfaces/ITRT_ElectronPidTool.h @@ -10,6 +10,7 @@ #include "GaudiKernel/IAlgTool.h" #include "TrkEventPrimitives/ParticleHypothesis.h" +#include "TrkTrackSummary/TrackSummary.h" #include <vector> namespace Trk { @@ -44,8 +45,6 @@ namespace Trk { virtual double probHT( const double p, const Trk::ParticleHypothesis hypothesis, const int HitPart, const int Layer, const int Strawlayer) const = 0; virtual double probHTRun2( float pTrk, Trk::ParticleHypothesis hypothesis, int TrtPart, int GasType, int StrawLayer, float ZR, float rTrkWire, float Occupancy ) const = 0; - - }; inline const InterfaceID& Trk::ITRT_ElectronPidTool::interfaceID() diff --git a/Tracking/TrkTools/TrkTrackSummaryTool/TrkTrackSummaryTool/TrackSummaryTool.h b/Tracking/TrkTools/TrkTrackSummaryTool/TrkTrackSummaryTool/TrackSummaryTool.h index 2c3ca7d0363977c10f1490071dfd1b19456a9c89..b83d211e1c9a5ce0f97c270917e8f70045ce27fe 100755 --- a/Tracking/TrkTools/TrkTrackSummaryTool/TrkTrackSummaryTool/TrackSummaryTool.h +++ b/Tracking/TrkTools/TrkTrackSummaryTool/TrkTrackSummaryTool/TrackSummaryTool.h @@ -12,7 +12,6 @@ #include "TrkTrack/Track.h" #include "TrkTrackSummary/TrackSummary.h" -#include "TRT_ElectronPidTools/ITRT_ToT_dEdx.h" #include "TrkToolInterfaces/IExtendedTrackSummaryHelperTool.h" #include "TrkToolInterfaces/IPixelToTPIDTool.h" #include "TrkToolInterfaces/ITRT_ElectronPidTool.h" @@ -22,7 +21,6 @@ class AtlasDetectorID; class Identifier; -class ITRT_ToT_dEdx; namespace Trk { class ITRT_ElectronPidTool; @@ -222,8 +220,6 @@ private: "TRT_ElectronPidTool", "", "" }; - /** tool to calculate the TRT_ToT_dEdx.*/ - ToolHandle<ITRT_ToT_dEdx> m_trt_dEdxTool{ this, "TRT_ToT_dEdxTool", "", "" }; /**tool to calculate dE/dx using pixel clusters*/ ToolHandle<IPixelToTPIDTool> m_dedxtool{ this, "PixelToTPIDTool", "", "" }; /**tool to decipher muon RoTs*/ @@ -253,13 +249,6 @@ private: /** switch to deactivate Pixel info init */ Gaudi::Property<bool> m_pixelExists{ this, "PixelExists", true, "" }; - /** Only compute TRT dE/dx if there are at least this number of TRT hits or - * outliers.*/ - Gaudi::Property<int> m_minTRThitsForTRTdEdx{ this, - "minTRThitsForTRTdEdx", - 1, - "" }; - Gaudi::Property<bool> m_alwaysRecomputeHoles { this, "AlwaysRecomputeHoles", false, "" }; diff --git a/Tracking/TrkTools/TrkTrackSummaryTool/src/TrackSummaryTool.cxx b/Tracking/TrkTools/TrkTrackSummaryTool/src/TrackSummaryTool.cxx index 52ccbbc735384acada6d42944c93166f8a4c6a8d..a6f4e02619da0d50d72ac1dcbaaf19884d500acd 100755 --- a/Tracking/TrkTools/TrkTrackSummaryTool/src/TrackSummaryTool.cxx +++ b/Tracking/TrkTools/TrkTrackSummaryTool/src/TrackSummaryTool.cxx @@ -4,6 +4,7 @@ #include "TrkTrackSummaryTool/TrackSummaryTool.h" #include "TrkToolInterfaces/ITrackHoleSearchTool.h" +#include "TrkToolInterfaces/ITRT_ElectronPidTool.h" #include "TrkEventPrimitives/FitQualityOnSurface.h" #include "TrkEventPrimitives/ParticleHypothesis.h" @@ -71,11 +72,6 @@ StatusCode if ( !m_eProbabilityTool.empty()) msg(MSG::INFO) << "Retrieved tool " << m_eProbabilityTool << endmsg; - if (!m_trt_dEdxTool.empty()) { - ATH_CHECK( m_trt_dEdxTool.retrieve() ); - } - - if ( !m_dedxtool.empty() && m_dedxtool.retrieve().isFailure() ) { ATH_MSG_ERROR ("Failed to retrieve pixel dEdx tool " << m_dedxtool); @@ -196,8 +192,7 @@ information.resize(std::min(information.size(), static_cast<size_t>(numberOfTrackSummaryTypes))); // Troels.Petersen@cern.ch: -unsigned int numberOfeProbabilityTypes = Trk::numberOfeProbabilityTypes + 1; -std::vector<float> eProbability(numberOfeProbabilityTypes, 0.5); +std::vector<float> eProbability = Trk::eProbabilityDefault; float dedx = -1; int nhitsuseddedx = -1; @@ -238,9 +233,9 @@ std::vector<float> eProbability(numberOfeProbabilityTypes, 0.5); information[numberOfTRTTubeHits] = 0; information[numberOfTRTSharedHits] = 0; - // Troels.Petersen@cern.ch: if (!m_eProbabilityTool.empty()) { eProbability = m_eProbabilityTool->electronProbability(track); + information[Trk::numberOfTRTHitsUsedFordEdx] = static_cast<int>(eProbability[Trk::eProbabilityNumberOfTRTHitsUsedFordEdx]); } } @@ -318,22 +313,6 @@ std::vector<float> eProbability(numberOfeProbabilityTypes, 0.5); searchHolesStepWise(track,information, doHolesInDet, doHolesMuon); } - if (!m_trt_dEdxTool.empty()) { - if (information[Trk::numberOfTRTHits]+information[Trk::numberOfTRTOutliers]>=m_minTRThitsForTRTdEdx) { - int nhits = static_cast<int>( m_trt_dEdxTool->usedHits(&track) ); - double fvalue = (nhits>0 ? m_trt_dEdxTool->dEdx(&track) : 0.0); - eProbability.push_back(fvalue); - information[ numberOfTRTHitsUsedFordEdx] = static_cast<uint8_t>(std::max(nhits,0)); - } - else { - information[ numberOfTRTHitsUsedFordEdx]=0; - eProbability.push_back(0.0); - } - } - else { - eProbability.push_back(0.0); - } - ts.m_eProbability = eProbability; ts.m_idHitPattern = hitPattern.to_ulong(); ts.m_dedx = dedx; @@ -360,28 +339,14 @@ void Trk::TrackSummaryTool::updateSharedHitCount(const Track& track, const Trk:: void Trk::TrackSummaryTool::updateAdditionalInfo(const Track& track, TrackSummary &summary, bool initialise_to_zero) const { - unsigned int numberOfeProbabilityTypes = Trk::numberOfeProbabilityTypes+1; - std::vector<float> eProbability(numberOfeProbabilityTypes,0.5); - if ( !m_eProbabilityTool.empty() ) eProbability = m_eProbabilityTool->electronProbability(track); - - if (!m_trt_dEdxTool.empty()) { - if (summary.get(Trk::numberOfTRTHits)+summary.get(Trk::numberOfTRTOutliers)>=m_minTRThitsForTRTdEdx) { - int nhits = static_cast<int>( m_trt_dEdxTool->usedHits(&track) ); - double fvalue = (nhits>0 ? m_trt_dEdxTool->dEdx(&track) : 0.0); - eProbability.push_back(fvalue); - if (!summary.update(Trk::numberOfTRTHitsUsedFordEdx, static_cast<uint8_t>(std::max(nhits,0)) )) { - ATH_MSG_WARNING( "Attempt to update numberOfTRTHitsUsedFordEdx but this summary information is " - "already set. numberOfTRTHitsUsedFordEdx is:" << summary.get(numberOfTRTHitsUsedFordEdx) - << " =?= should:" << nhits ); - } - } - else { - eProbability.push_back(0.0); - if (!summary.update(Trk::numberOfTRTHitsUsedFordEdx, 0) ) { - ATH_MSG_WARNING( "Attempt to update numberOfTRTHitsUsedFordEdx but this summary information is " - "already set. numberOfTRTHitsUsedFordEdx is:" << summary.get(numberOfTRTHitsUsedFordEdx) - << " =?= should:" << 0 ); - } + std::vector<float> eProbability = Trk::eProbabilityDefault; + if (!m_eProbabilityTool.empty()) { + eProbability = m_eProbabilityTool->electronProbability(track); + int nHits = eProbability[Trk::eProbabilityNumberOfTRTHitsUsedFordEdx]; + if (!summary.update(Trk::numberOfTRTHitsUsedFordEdx, static_cast<uint8_t>(std::max(nHits,0)) )) { + ATH_MSG_WARNING("Attempt to update numberOfTRTHitsUsedFordEdx but this summary information is " + "already set. numberOfTRTHitsUsedFordEdx is:" << summary.get(numberOfTRTHitsUsedFordEdx) + << " =?= should:" << nHits ); } } @@ -393,7 +358,7 @@ void Trk::TrackSummaryTool::updateAdditionalInfo(const Track& track, TrackSummar dedx = m_dedxtool->dEdx(track, nhitsuseddedx, noverflowhitsdedx); } - m_idTool->updateAdditionalInfo(summary, eProbability,dedx, nhitsuseddedx,noverflowhitsdedx); + m_idTool->updateAdditionalInfo(summary, eProbability, dedx, nhitsuseddedx, noverflowhitsdedx); m_idTool->updateExpectedHitInfo(track, summary); diff --git a/Trigger/TrigAlgorithms/TrigEFMissingET/doc/met_configuration.md b/Trigger/TrigAlgorithms/TrigEFMissingET/doc/met_configuration.md index e384a8889fbc30ccd9bf209a811b7acbeb3730ed..004ce9ab4fcd07154632b925002acaea7bd1be89 100644 --- a/Trigger/TrigAlgorithms/TrigEFMissingET/doc/met_configuration.md +++ b/Trigger/TrigAlgorithms/TrigEFMissingET/doc/met_configuration.md @@ -166,6 +166,10 @@ There are three types of sequence that can be configured by this code The menu sequence describes a full 'input maker' + reco + hypo grouping, i.e. a segment that calculates a MET value and then creates a decision using it +All of these are divided into 'steps'. As hypos only appear at the end of each +step these are the only points at which early rejection is possible. This +motivates running CPU intensive reconstruction in later steps. + The 'difficult' part of this is the first part - the reco sequence. The MET code uses a helper class `TriggerMenuMT.HLTMenuConfig.MET.METRecoSequences.AlgConfig`. @@ -174,6 +178,10 @@ config class, which then knows how to interpret the rest of the `recoDict` to correctly configure the sequence. (In fact this class is used to configure all stages). +These then further use helper classes based on +`TriggerMenuMT.HLTMenuConfig.MET.AlgInputConfig.AlgInputConfig` +to provide the input sequences (e.g. clusters, tracks). + In our example, `xe110_tcpufit_lcw` gets converted into the `recoDict` ``` python { @@ -184,7 +192,8 @@ In our example, `xe110_tcpufit_lcw` gets converted into the `recoDict` ``` This is passed to the `TCPufitConfig` class, which sets up the input sequence creating the clusters and the MET algorithm calculating the MET according to the -`tcpufit` algorithm. +`tcpufit` algorithm. The cluster input sequence is set up by the +`ClusterInputConfig` class. The same happens to the `xe70_cell` piece, except it gets passed to the `CellConfig` class. @@ -280,13 +289,21 @@ defined) so it's guaranteed that your class will be known to python when A new `AlgConfig` class must define two things - a `@classmethod` called `algType` that returns the name of the EFrecoAlg that it defines -- an `__init__` method that receives the `recoDict` and defines `self.inputs` - and `self.fexAlg`. The base class `__init__` method must receive the **whole** - `recoDict` or it will not construct the correct names. +- an `__init__` method that receives the `recoDict` and calculates the necessary + inputs. The base class `__init__` method must receive the **whole** `recoDict` + or it will not construct the correct names. +- a make_fex function Look at the other classes in that module for inspiration and consult the `AlgConfig` docstring as well. +#### Creating a new input config + +You may require a new input config as well (i.e. something which calculates +an input object for one of the MET calculations). In order to do this, read the +documentation in `TriggerMenuMT.HLTMenuConfig.MET.AlgInputConfig` and check the +existing versions in `TriggerMenuMT.HLTMenuConfig.MET.METRecoSequences`. + #### Creating a new C++ class Where possible new C++ Fex classes should following the naming convention diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/python/TrigL2MuonSAConfig.py b/Trigger/TrigAlgorithms/TrigL2MuonSA/python/TrigL2MuonSAConfig.py index b7cd89d341ae661afe37ae9e0f1b4160c305af8f..04fcae2901a4041a20088490365cd3972e2256ae 100644 --- a/Trigger/TrigAlgorithms/TrigL2MuonSA/python/TrigL2MuonSAConfig.py +++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/python/TrigL2MuonSAConfig.py @@ -41,7 +41,11 @@ if not MuonGeometryFlags.hasCSC(): #Need different PRD collection names to run offline and Run 2 trigger in same job if not TriggerFlags.doMT(): from MuonMDT_CnvTools.MuonMDT_CnvToolsConf import Muon__MdtRdoToPrepDataTool - MdtRdoToMdtPrepDataTool = Muon__MdtRdoToPrepDataTool(name = "TrigMdtRdoToPrepDataTool",OutputCollection="TrigMDT_DriftCircles") + from MuonCnvExample import MuonCalibConfig + + MdtRdoToMdtPrepDataTool = Muon__MdtRdoToPrepDataTool(name = "TrigMdtRdoToPrepDataTool", + OutputCollection="TrigMDT_DriftCircles", + CalibrationTool=MuonCalibConfig.MdtCalibrationTool()) ToolSvc += MdtRdoToMdtPrepDataTool theDataPreparator.MDTDataPreparator.MdtPrepDataProvider = MdtRdoToMdtPrepDataTool theDataPreparator.MDTDataPreparator.MDTPrepDataContainer = MdtRdoToMdtPrepDataTool.OutputCollection @@ -143,7 +147,8 @@ class TrigL2MuonSAMTConfig(MuonSA.MuFastSteering): super( TrigL2MuonSAMTConfig, self ).__init__( name ) self.DataPreparator = theDataPreparator - self.PatternFinder = MuonSA.TrigL2MuonSA__MuFastPatternFinder() + from MuonCnvExample.MuonCalibConfig import MdtCalibrationTool + self.PatternFinder = MuonSA.TrigL2MuonSA__MuFastPatternFinder(CalibrationTool=MdtCalibrationTool()) self.StationFitter = theStationFitter self.TrackFitter = MuonSA.TrigL2MuonSA__MuFastTrackFitter() self.TrackExtrapolator = MuonSA.TrigL2MuonSA__MuFastTrackExtrapolator() @@ -231,7 +236,8 @@ class TrigL2MuonSAConfig(MuonSA.MuFastSteering): super( TrigL2MuonSAConfig, self ).__init__( name ) self.DataPreparator = theDataPreparator - self.PatternFinder = MuonSA.TrigL2MuonSA__MuFastPatternFinder() + from MuonCnvExample.MuonCalibConfig import MdtCalibrationTool + self.PatternFinder = MuonSA.TrigL2MuonSA__MuFastPatternFinder(CalibrationTool=MdtCalibrationTool()) self.StationFitter = theStationFitter self.TrackFitter = MuonSA.TrigL2MuonSA__MuFastTrackFitter() self.TrackExtrapolator = MuonSA.TrigL2MuonSA__MuFastTrackExtrapolator() diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/python/TrigL2MuonSAConfig_newJO.py b/Trigger/TrigAlgorithms/TrigL2MuonSA/python/TrigL2MuonSAConfig_newJO.py index 624b7307acfc836b9b9e97b68c141335485ff059..8a610a1ecef45d6290db6d836252bb018731af47 100644 --- a/Trigger/TrigAlgorithms/TrigL2MuonSA/python/TrigL2MuonSAConfig_newJO.py +++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/python/TrigL2MuonSAConfig_newJO.py @@ -115,6 +115,7 @@ def MmDataPreparatorCfg( flags, roisKey ): # Based on TrigL2MuonSAMTConfig at TrigL2MuonSA/TrigL2MuonSAConfig.py def muFastSteeringCfg( flags, roisKey, setup="" ): + from MuonConfig.MuonCalibrationConfig import MdtCalibrationToolCfg acc = ComponentAccumulator() @@ -171,9 +172,8 @@ def muFastSteeringCfg( flags, roisKey, setup="" ): PtFromAlphaBeta.AvoidMisalignedCSCs = True MuFastStationFitter = TrigL2MuonSA__MuFastStationFitter( PtFromAlphaBeta = PtFromAlphaBeta ) - TrigL2MuonSA__MuFastPatternFinder,TrigL2MuonSA__MuFastTrackFitter,TrigL2MuonSA__MuFastTrackExtrapolator,TrigL2MuonSA__MuCalStreamerTool,TrigL2MuonSA__CscSegmentMaker=CompFactory.getComps("TrigL2MuonSA::MuFastPatternFinder","TrigL2MuonSA::MuFastTrackFitter","TrigL2MuonSA::MuFastTrackExtrapolator","TrigL2MuonSA::MuCalStreamerTool","TrigL2MuonSA::CscSegmentMaker") - MuFastPatternFinder = TrigL2MuonSA__MuFastPatternFinder() + MuFastPatternFinder = TrigL2MuonSA__MuFastPatternFinder(CalibrationTool=acc.popToolsAndMerge( MdtCalibrationToolCfg(flags))) MuFastTrackFitter = TrigL2MuonSA__MuFastTrackFitter() MuFastTrackExtrapolator = TrigL2MuonSA__MuFastTrackExtrapolator() MuCalStreamerTool = TrigL2MuonSA__MuCalStreamerTool() diff --git a/Trigger/TrigAlgorithms/TrigMuonEF/python/TrigMuonEFConfig.py b/Trigger/TrigAlgorithms/TrigMuonEF/python/TrigMuonEFConfig.py index 2db8347a2972c3f71998215c10a8e089c8c8af23..243f1cae90b722fdd54bde815c238c9e4fb0c2b2 100755 --- a/Trigger/TrigAlgorithms/TrigMuonEF/python/TrigMuonEFConfig.py +++ b/Trigger/TrigAlgorithms/TrigMuonEF/python/TrigMuonEFConfig.py @@ -538,7 +538,9 @@ class TrigMuonEFStandaloneTrackToolConfig (TrigMuonEFConf.TrigMuonEFStandaloneTr from MuonCSC_CnvTools.MuonCSC_CnvToolsConf import Muon__CscRdoToCscPrepDataTool from MuonTGC_CnvTools.MuonTGC_CnvToolsConf import Muon__TgcRdoToPrepDataTool from MuonRPC_CnvTools.MuonRPC_CnvToolsConf import Muon__RpcRdoToPrepDataTool - MdtRdoToMdtPrepDataTool = Muon__MdtRdoToPrepDataTool(name = "TrigEFMdtRdoToPrepDataTool") + from MuonCnvExample import MuonCalibConfig + + MdtRdoToMdtPrepDataTool = Muon__MdtRdoToPrepDataTool(name = "TrigEFMdtRdoToPrepDataTool", CalibrationTool=MuonCalibConfig.MdtCalibrationTool()) CscRdoToCscPrepDataTool = Muon__CscRdoToCscPrepDataTool(name = "TrigEFCscRdoToPrepDataTool") TgcRdoToTgcPrepDataTool = Muon__TgcRdoToPrepDataTool(name = "TrigEFTgcRdoToPrepDataTool") RpcRdoToRpcPrepDataTool = Muon__RpcRdoToPrepDataTool(name = "TrigEFRpcRdoToPrepDataTool") diff --git a/Trigger/TrigAlgorithms/TrigT2CaloCommon/python/CaloDef.py b/Trigger/TrigAlgorithms/TrigT2CaloCommon/python/CaloDef.py index 6093811ed349e5ea95b4ed5cc83fbdbec0888d46..b606da07f6fe43bde71ed3c175a97d35222d1091 100644 --- a/Trigger/TrigAlgorithms/TrigT2CaloCommon/python/CaloDef.py +++ b/Trigger/TrigAlgorithms/TrigT2CaloCommon/python/CaloDef.py @@ -3,6 +3,7 @@ from AthenaCommon.Constants import ERROR from AthenaCommon.CFElements import seqAND, parOR from AthenaConfiguration.ComponentFactory import CompFactory +from TriggerMenuMT.HLTMenuConfig.CommonSequences.FullScanDefs import caloFSRoI def setMinimalCaloSetup() : from AthenaCommon.AppMgr import ServiceMgr as svcMgr @@ -114,7 +115,7 @@ def createFastCaloSequence(EMRoIDecisions, doRinger=False, ClustersName="HLT_Fas def clusterFSInputMaker( ): """Creates the inputMaker for FS in menu""" - RoIs = 'HLT_FSJETRoI' + RoIs = caloFSRoI from AthenaConfiguration.ComponentFactory import CompFactory InputMakerAlg = CompFactory.InputMakerForRoI("IMclusterFS", RoIsLink="initialRoI") InputMakerAlg.RoITool = CompFactory.ViewCreatorInitialROITool() @@ -122,11 +123,11 @@ def clusterFSInputMaker( ): return InputMakerAlg -def HLTCellMaker(RoIs='HLT_FSJETRoI', outputName="CaloCells", algSuffix=""): +def HLTCellMaker(RoIs=caloFSRoI, outputName="CaloCells", algSuffix=""): cellMakerAlgo = _algoHLTCaloCell(name="HLTCaloCellMaker"+algSuffix, inputEDM=RoIs, outputEDM=outputName, RoIMode=True) return cellMakerAlgo -def HLTFSCellMakerRecoSequence(RoIs='HLT_FSJETRoI'): +def HLTFSCellMakerRecoSequence(RoIs=caloFSRoI): cellMaker = HLTCellMaker(RoIs, outputName="CaloCellsFS", algSuffix="FS") RecoSequence = parOR("ClusterRecoSequenceFS", [cellMaker]) return (RecoSequence, cellMaker.CellsName) diff --git a/Trigger/TrigAnalysis/TrigDecisionTool/Root/CacheGlobalMemory.cxx b/Trigger/TrigAnalysis/TrigDecisionTool/Root/CacheGlobalMemory.cxx index 8dbd32782f2ca1f8d73dfb80e9556bc3376cf52f..6ab34b2b6a4bf3195c97c4d6a462fb118d4c2bcb 100644 --- a/Trigger/TrigAnalysis/TrigDecisionTool/Root/CacheGlobalMemory.cxx +++ b/Trigger/TrigAnalysis/TrigDecisionTool/Root/CacheGlobalMemory.cxx @@ -61,7 +61,8 @@ Trig::CacheGlobalMemory::CacheGlobalMemory() : m_oldDecisionKeyPtr(nullptr), m_oldEventInfoKeyPtr(nullptr), #endif - m_navigationKeyPtr(nullptr), + m_run2NavigationKeyPtr(nullptr), + m_run3NavigationKeyPtr(nullptr), m_bgCode(0) {} @@ -378,7 +379,7 @@ bool Trig::CacheGlobalMemory::assert_decision() { // over DecisionUnpackerAthena if ( contains_xAOD_decision ){ ATH_MSG_INFO("SG contains xAOD decision, use DecisionUnpackerStandalone"); - setUnpacker(new DecisionUnpackerStandalone(m_decisionKeyPtr, m_navigationKeyPtr)); + setUnpacker(new DecisionUnpackerStandalone(m_decisionKeyPtr, m_run2NavigationKeyPtr)); } else if( is_l1result_configured ){ ATH_MSG_INFO("SG contains AOD decision, use DecisionUnpackerAthena"); @@ -391,7 +392,7 @@ bool Trig::CacheGlobalMemory::assert_decision() { #else if ( contains_xAOD_decision ){ ATH_MSG_INFO("SG contains xAOD decision, use DecisionUnpackerStandalone"); - setUnpacker(new DecisionUnpackerStandalone(m_decisionKeyPtr, m_navigationKeyPtr)); + setUnpacker(new DecisionUnpackerStandalone(m_decisionKeyPtr, m_run2NavigationKeyPtr)); } #endif diff --git a/Trigger/TrigAnalysis/TrigDecisionTool/Root/TrigDecisionTool.cxx b/Trigger/TrigAnalysis/TrigDecisionTool/Root/TrigDecisionTool.cxx index 932d4278c117e36d605e42ada978c43a335e87d4..b3c598ceebec75a60e2facd7d8881a75bb094b3b 100644 --- a/Trigger/TrigAnalysis/TrigDecisionTool/Root/TrigDecisionTool.cxx +++ b/Trigger/TrigAnalysis/TrigDecisionTool/Root/TrigDecisionTool.cxx @@ -143,6 +143,7 @@ Trig::TrigDecisionTool::initialize() { #endif cgm()->navigation(&*m_navigation); + cgm()->setStore(&*evtStore()); // Use of this is deprecated, and should be phased out. #ifndef XAOD_STANDALONE @@ -188,7 +189,8 @@ StatusCode Trig::TrigDecisionTool::beginEvent() { CacheGlobalMemory* cgmPtr = cgm(); cgmPtr->setDecisionKeyPtr( &m_decisionKey ); - cgmPtr->setNavigationKeyPtr( &m_navigationKey ); + cgmPtr->setRun2NavigationKeyPtr( &m_navigationKey ); + cgmPtr->setRun3NavigationKeyPtr( &m_HLTSummaryKeyIn ); size_t slot = 0; #if !defined(XAOD_STANDALONE) && !defined(XAOD_ANALYSIS) // Full athena diff --git a/Trigger/TrigAnalysis/TrigDecisionTool/TrigDecisionTool/CacheGlobalMemory.h b/Trigger/TrigAnalysis/TrigDecisionTool/TrigDecisionTool/CacheGlobalMemory.h index 6722804588566321a4c4cc300f4db7075d0754d2..9220505554ff14bdba7e84618ce0d4ce2f128cf4 100644 --- a/Trigger/TrigAnalysis/TrigDecisionTool/TrigDecisionTool/CacheGlobalMemory.h +++ b/Trigger/TrigAnalysis/TrigDecisionTool/TrigDecisionTool/CacheGlobalMemory.h @@ -144,7 +144,9 @@ namespace Trig { EventPtr_t store() const { return m_store; } void setDecisionKeyPtr(SG::ReadHandleKey<xAOD::TrigDecision>* k) { m_decisionKeyPtr = k; } - void setNavigationKeyPtr(SG::ReadHandleKey<xAOD::TrigNavigation>* k) { m_navigationKeyPtr = k; } + void setRun2NavigationKeyPtr(SG::ReadHandleKey<xAOD::TrigNavigation>* k) { m_run2NavigationKeyPtr = k; } + void setRun3NavigationKeyPtr(SG::ReadHandleKey<TrigCompositeUtils::DecisionContainer>* k) { m_run3NavigationKeyPtr = k; } + SG::ReadHandleKey<TrigCompositeUtils::DecisionContainer>& getRun3NavigationKeyPtr() { return *m_run3NavigationKeyPtr; } #if !defined(XAOD_STANDALONE) && !defined(XAOD_ANALYSIS) // Full Athena void setOldDecisionKeyPtr(SG::ReadHandleKey<TrigDec::TrigDecision>* k) { m_oldDecisionKeyPtr = k; } @@ -223,7 +225,8 @@ namespace Trig { SG::ReadHandleKey<EventInfo>* m_oldEventInfoKeyPtr; //!< Parent TDT's read handle key #endif - SG::ReadHandleKey<xAOD::TrigNavigation>* m_navigationKeyPtr; //!< Parent TDT's read handle key + SG::ReadHandleKey<xAOD::TrigNavigation>* m_run2NavigationKeyPtr; //!< Parent TDT's read handle key + SG::ReadHandleKey<TrigCompositeUtils::DecisionContainer>* m_run3NavigationKeyPtr; //!< Parent TDT's read handle key typedef std::unordered_map<std::string, const TrigConf::HLTChain*> ChainHashMap_t; ChainHashMap_t m_mConfChains; //!< map of conf chains diff --git a/Trigger/TrigAnalysis/TrigDecisionTool/TrigDecisionTool/ChainGroup.h b/Trigger/TrigAnalysis/TrigDecisionTool/TrigDecisionTool/ChainGroup.h index 127f492b3f5f85cd35418596cddbc60487412155..37ea788fad2bf46636dedbe5ddbd153090fa6e25 100644 --- a/Trigger/TrigAnalysis/TrigDecisionTool/TrigDecisionTool/ChainGroup.h +++ b/Trigger/TrigAnalysis/TrigDecisionTool/TrigDecisionTool/ChainGroup.h @@ -119,6 +119,7 @@ namespace Trig { * @brief returns typed features related to given chain group of HLT chains or L1 items * Note: This is a RUN 3 (and on) function. * @param[in] eventStore Event store pointer. To migrate to readHandles with the rest of the TDT soon + * @param[in] HLTSummaryKeyIn SG Key to the navigation summary container * @param[in] condition Condition requirement. Only TrigDefs::Physics and TrigDefs::includeFailedDecisions are supported. * @param[in] containerSGKey Optional requirement to return only features within the specified container name. Not checked if not specified. * @param[in] featureCollectionMode For lastFeatureOfType, stop exploring each route through the navigation once one matching feature has been found. @@ -127,6 +128,7 @@ namespace Trig { **/ template<class CONTAINER> std::vector< TrigCompositeUtils::LinkInfo<CONTAINER> > features(EventPtr_t eventStore, + SG::ReadHandleKey<TrigCompositeUtils::DecisionContainer>& HLTSummaryKeyIn, unsigned int condition = TrigDefs::Physics, const std::string& containerSGKey = "", const unsigned int featureCollectionMode = TrigDefs::lastFeatureOfType, diff --git a/Trigger/TrigAnalysis/TrigDecisionTool/TrigDecisionTool/ChainGroup.icc b/Trigger/TrigAnalysis/TrigDecisionTool/TrigDecisionTool/ChainGroup.icc index 880d797b4781b528692210eeaf661355902da34b..4985288a161216ea2ed14aadf77e8ce8db7b51b9 100644 --- a/Trigger/TrigAnalysis/TrigDecisionTool/TrigDecisionTool/ChainGroup.icc +++ b/Trigger/TrigAnalysis/TrigDecisionTool/TrigDecisionTool/ChainGroup.icc @@ -1,5 +1,13 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ + +#include "AsgDataHandles/ReadHandle.h" +#include "AsgDataHandles/ReadHandleKey.h" + template<class CONTAINER> std::vector< TrigCompositeUtils::LinkInfo<CONTAINER> > Trig::ChainGroup::features(EventPtr_t eventStore, + SG::ReadHandleKey<TrigCompositeUtils::DecisionContainer>& HLTSummaryKeyIn, unsigned int condition, const std::string& containerSGKey, const unsigned int featureCollectionMode, const std::string& navElementLinkKey) const { @@ -19,8 +27,8 @@ std::vector< TrigCompositeUtils::LinkInfo<CONTAINER> > Trig::ChainGroup::feature } // TODO when we decide what happens to CacheGlobalMemory - this needs to be updated to use a ReadHandle - const TrigCompositeUtils::DecisionContainer* navigationSummaryContainer = nullptr; - if (eventStore->retrieve(navigationSummaryContainer, "HLTNav_Summary").isFailure() || navigationSummaryContainer == nullptr) { + SG::ReadHandle<TrigCompositeUtils::DecisionContainer> navigationSummaryRH = SG::ReadHandle(HLTSummaryKeyIn); + if (!navigationSummaryRH.isValid()) { ATH_MSG_ERROR("Unable to read Run 3 trigger navigation. Cannot retrieve features."); errState = true; } @@ -28,7 +36,7 @@ std::vector< TrigCompositeUtils::LinkInfo<CONTAINER> > Trig::ChainGroup::feature // We always want to search from the passed raw terminus node to find features for passed chains. const TrigCompositeUtils::Decision* terminusNode = nullptr; if (!errState) { - for (const TrigCompositeUtils::Decision* decision : *navigationSummaryContainer) { + for (const TrigCompositeUtils::Decision* decision : *navigationSummaryRH) { if (decision->name() == "HLTPassRaw") { terminusNode = decision; break; diff --git a/Trigger/TrigAnalysis/TrigDecisionTool/TrigDecisionTool/DecisionAccess.icc b/Trigger/TrigAnalysis/TrigDecisionTool/TrigDecisionTool/DecisionAccess.icc index 56c02e8abc6f10032f6b83640aa6533f178e3292..57bfddb4848192c2a7de452ac0c016f9b4394a08 100644 --- a/Trigger/TrigAnalysis/TrigDecisionTool/TrigDecisionTool/DecisionAccess.icc +++ b/Trigger/TrigAnalysis/TrigDecisionTool/TrigDecisionTool/DecisionAccess.icc @@ -49,8 +49,7 @@ std::vector< TrigCompositeUtils::LinkInfo<CONTAINER> > Trig::DecisionAccess::fea const std::string& containerSGKey, const unsigned int featureCollectionMode, const std::string& navElementLinkKey) const { - // const TrigCompositeUtils::DecisionContainer* terminusNode = SG::get(m_HLTSummaryKeyIn/*, context*/); - return group->features<CONTAINER>(cgm()->store(), condition, containerSGKey, featureCollectionMode, navElementLinkKey); + return group->features<CONTAINER>(cgm()->store(), cgm()->getRun3NavigationKeyPtr(), condition, containerSGKey, featureCollectionMode, navElementLinkKey); } template<class CONTAINER> diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/CMakeLists.txt b/Trigger/TrigHypothesis/TrigHLTJetHypo/CMakeLists.txt index 4cfbd3d6ba741417c7ecc4b36cb780ba7e41d7a0..ba89603b84bc405c515badb7e89ec1ce3157ca1c 100644 --- a/Trigger/TrigHypothesis/TrigHLTJetHypo/CMakeLists.txt +++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/CMakeLists.txt @@ -13,7 +13,7 @@ atlas_add_library( TrigHLTJetHypoLib PUBLIC_HEADERS TrigHLTJetHypo PRIVATE_INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} LINK_LIBRARIES AsgTools AthenaBaseComps DecisionHandlingLib GaudiKernel TrigCompositeUtilsLib TrigInterfacesLib TrigParticle TrigTimeAlgsLib xAODJet - PRIVATE_LINK_LIBRARIES ${ROOT_LIBRARIES} AthenaMonitoringKernelLib CaloGeoHelpers TrigMissingEtEvent xAODEventInfo xAODTrigger ) + PRIVATE_LINK_LIBRARIES ${ROOT_LIBRARIES} AthenaMonitoringKernelLib CaloGeoHelpers TrigMissingEtEvent xAODEventInfo xAODTrigger TrigSteeringEvent ) atlas_add_component( TrigHLTJetHypo src/components/*.cxx diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoAlgMT.cxx b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoAlgMT.cxx index f7f95d76a10aea8259b1af4c9ecb4049b001d43a..12e20c532fcad7afaa9e795f4bd75d2bb629e287 100644 --- a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoAlgMT.cxx +++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoAlgMT.cxx @@ -7,7 +7,7 @@ #include "TrigJetHypoAlgMT.h" #include "TrigCompositeUtils/HLTIdentifier.h" #include "TrigCompositeUtils/TrigCompositeUtils.h" - +#include "TrigSteeringEvent/TrigRoiDescriptorCollection.h" using namespace TrigCompositeUtils; @@ -19,8 +19,8 @@ TrigJetHypoAlgMT::TrigJetHypoAlgMT( const std::string& name, StatusCode TrigJetHypoAlgMT::initialize() { + CHECK( m_hypoTools.retrieve() ); - CHECK( m_jetsKey.initialize() ); return StatusCode::SUCCESS; } @@ -31,7 +31,7 @@ StatusCode TrigJetHypoAlgMT::execute( const EventContext& context ) const { // read in the previous Decisions made before running this hypo Alg. - // The container should have only one such Decision (for L1) as deding + // The container should have only one such Decision (for L1) as deciding // on jets is a one step process. ATH_MSG_DEBUG("Retrieving L1 decision \"" << decisionInput().key() << "\""); @@ -43,8 +43,8 @@ StatusCode TrigJetHypoAlgMT::execute( const EventContext& context ) const { } if(h_prevDecisions->size() != 1){ - ATH_MSG_ERROR(" Expected one previous decisions (L1 RoIs not used), found " - << h_prevDecisions->size()); + ATH_MSG_ERROR(" Expected one previous decisions in " << decisionInput().key() + << " (L1 RoIs not used), found " << h_prevDecisions->size()); return StatusCode::FAILURE; } @@ -66,7 +66,7 @@ StatusCode TrigJetHypoAlgMT::execute( const EventContext& context ) const { auto h_jets = SG::makeHandle(m_jetsKey, context ); ATH_MSG_DEBUG("Retrieving jets from: " << h_jets.key()); ATH_CHECK(h_jets.isValid()); - + const JetContainer* jets = h_jets.get(); CHECK(decide(jets, previousDecision, outputDecisions)); @@ -87,19 +87,41 @@ TrigJetHypoAlgMT::decide(const xAOD::JetContainer* jets, std::vector<std::pair<const xAOD::Jet*,Decision*>> jetHypoInputs; - for (const xAOD::Jet* jet : *jets) { - - // Create a new Decision object to mirror this Jet. - // Link it to its parent Decision object and attach the jet as a "feature" - - Decision* newDecision = - TrigCompositeUtils::newDecisionIn(outputDecisions, previousDecision); + if(m_doPresel) { + // In the preselection case, we create only one DecisionObject, which links + // all jets -- this is so as to avoid making spurious DecisionObject + // chains where the objects in one step have no unambiguous relationship + // with those in the preceding step. + Decision* newDecision = nullptr; + newDecision = TrigCompositeUtils::newDecisionIn(outputDecisions, previousDecision); + // Needs a dummy feature link -- we will specify the input RoI + if(!newDecision->hasObjectLink(featureString())) { + newDecision->setObjectLink<TrigRoiDescriptorCollection>(TrigCompositeUtils::featureString(), + TrigCompositeUtils::findLink<TrigRoiDescriptorCollection>(newDecision, TrigCompositeUtils::initialRoIString()).link); + } + // We need to fill the jetHypoInputs vector, pairing each jet with + // the same newDecision object, such that it is updated if the hypo + // tool passes the jet. + for (const xAOD::Jet* jet : *jets) { + jetHypoInputs.push_back( std::make_pair(jet, newDecision) ); + } + } else { + // When operating as a terminal hypo selection, we create one DecisionObject + // per jet, which is later used to identify which jets contributed to an + // event passing. + for (const xAOD::Jet* jet : *jets) { + + Decision* newDecision = nullptr; + // Create a new Decision object to mirror this Jet. + // Link it to its parent Decision object and attach the jet as a "feature" + newDecision = TrigCompositeUtils::newDecisionIn(outputDecisions, previousDecision); - ElementLink<xAOD::JetContainer> jetLink = - ElementLink<xAOD::JetContainer>(*jets, jet->index()); + ElementLink<xAOD::JetContainer> jetLink = + ElementLink<xAOD::JetContainer>(*jets, jet->index()); - newDecision->setObjectLink<xAOD::JetContainer>(featureString(), jetLink); - jetHypoInputs.push_back( std::make_pair(jet, newDecision) ); + newDecision->setObjectLink<xAOD::JetContainer>(featureString(), jetLink); + jetHypoInputs.push_back( std::make_pair(jet, newDecision) ); + } } // Extract the IDs of the jet chains which are active. diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoAlgMT.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoAlgMT.h index bd572eb449137436a834c52b94dc2f41608f170e..d55aa045e98bf7621141f56fb07a6d392b5c1873 100644 --- a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoAlgMT.h +++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoAlgMT.h @@ -51,6 +51,11 @@ class TrigJetHypoAlgMT : public ::HypoBase { SG::ReadHandleKey< xAOD::JetContainer > m_jetsKey { this, "Jets", "Jets", "jet container key, full scan"}; + + // For preselection, we want to only generate one decision object + // a la L1, rather than one per jet + Gaudi::Property<bool> m_doPresel { + this, "DoPresel", false, "is this preselection rather than main decision?"}; }; diff --git a/Trigger/TrigHypothesis/TrigStreamerHypo/CMakeLists.txt b/Trigger/TrigHypothesis/TrigStreamerHypo/CMakeLists.txt index 5725d3f4a13e4e4683dd248e94561ee9d271be4e..e03cfc613a17d014a26eb2336fcf7ad7d4d37dd2 100644 --- a/Trigger/TrigHypothesis/TrigStreamerHypo/CMakeLists.txt +++ b/Trigger/TrigHypothesis/TrigStreamerHypo/CMakeLists.txt @@ -6,7 +6,7 @@ atlas_subdir( TrigStreamerHypo ) # Component(s) in the package: atlas_add_component( TrigStreamerHypo src/*.cxx src/components/*.cxx - LINK_LIBRARIES AsgTools AthenaBaseComps DecisionHandlingLib GaudiKernel TrigCompositeUtilsLib ) + LINK_LIBRARIES AsgTools AthenaBaseComps DecisionHandlingLib GaudiKernel TrigCompositeUtilsLib TrigSteeringEvent ) # Install files from the package: atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} --extend-extensions=ATL900,ATL901 ) diff --git a/Trigger/TrigHypothesis/TrigStreamerHypo/src/TrigStreamerHypoAlgMT.cxx b/Trigger/TrigHypothesis/TrigStreamerHypo/src/TrigStreamerHypoAlgMT.cxx index a488662a22abf7c778ad16641c951fd7030d14b7..b686b1debbcfa9c2a120ec05ba6d72d1ccaae327 100644 --- a/Trigger/TrigHypothesis/TrigStreamerHypo/src/TrigStreamerHypoAlgMT.cxx +++ b/Trigger/TrigHypothesis/TrigStreamerHypo/src/TrigStreamerHypoAlgMT.cxx @@ -6,6 +6,7 @@ #include "Gaudi/Property.h" #include "TrigCompositeUtils/HLTIdentifier.h" #include "TrigCompositeUtils/TrigCompositeUtils.h" +#include "TrigSteeringEvent/TrigRoiDescriptorCollection.h" using namespace TrigCompositeUtils; @@ -46,6 +47,13 @@ StatusCode TrigStreamerHypoAlgMT::execute( const EventContext& context ) const { // Create output Decision object, link it to prevDecision & its "feature" auto newDecision = TrigCompositeUtils::newDecisionIn(newDecisions, previousDecision, "", context); + + // We may want to use this as a 1st step PassThrough hypo + // In this case, we need to be more explicit about setting a feature on the Decision object + if(m_setInitialRoiAsFeature && !newDecision->hasObjectLink(featureString())) { + newDecision->setObjectLink<TrigRoiDescriptorCollection>(TrigCompositeUtils::featureString(), + TrigCompositeUtils::findLink<TrigRoiDescriptorCollection>(newDecision, TrigCompositeUtils::initialRoIString()).link); + } // Get set of active chains const TrigCompositeUtils::DecisionIDContainer previousDecisionIDs{ diff --git a/Trigger/TrigHypothesis/TrigStreamerHypo/src/TrigStreamerHypoAlgMT.h b/Trigger/TrigHypothesis/TrigStreamerHypo/src/TrigStreamerHypoAlgMT.h index da9af58845ae92b563e914450dd80bcf4e5b1928..b4b0801b6b2f5128a90bb224836e0dad523ae5f4 100644 --- a/Trigger/TrigHypothesis/TrigStreamerHypo/src/TrigStreamerHypoAlgMT.h +++ b/Trigger/TrigHypothesis/TrigStreamerHypo/src/TrigStreamerHypoAlgMT.h @@ -27,6 +27,9 @@ class TrigStreamerHypoAlgMT : public ::HypoBase { ToolHandleArray<ITrigStreamerHypoToolMT> m_hypoTools { this, "HypoTools", {}, "Hypo tools"}; + + Gaudi::Property<bool> m_setInitialRoiAsFeature { + this, "SetInitialRoIAsFeature", false, "For use in a passthrough step 1"}; }; diff --git a/Trigger/TrigSteer/DecisionHandling/python/jetMenuHelper.py b/Trigger/TrigSteer/DecisionHandling/python/jetMenuHelper.py deleted file mode 100644 index 818527083c4b4ca4cab367b9ab3ac5ac9151b8ff..0000000000000000000000000000000000000000 --- a/Trigger/TrigSteer/DecisionHandling/python/jetMenuHelper.py +++ /dev/null @@ -1,46 +0,0 @@ -# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration -# - -from TriggerMenuMT.HLTMenuConfig.Jet.JetMenuSequences import jetMenuSequence, jetCFSequence -from AthenaConfiguration.AllConfigFlags import ConfigFlags - -def jetDictFromString(jet_def_string): - """ Function to retrieve the jet dictionaory from string""" - - # Translate the definition string into an approximation - # of the "recoParts" in the jet chainParts. - jetRecoDict = {} - # Insert values from string - # Python names are more descriptive. May want to sync - # these names with the SignatureDict, needs coordination with - # menu group when they start to implement this - trkopt = "notrk" - if "_ftf" in jet_def_string: - jetalg, inputtype, clusterscale, jetcalib, trkopt = jet_def_string.split('_') - else: - jetalg, inputtype, clusterscale, jetcalib = jet_def_string.split('_') - - jetRecoDict = { - "recoAlg": jetalg, - "dataType": inputtype, - "calib": clusterscale, - "jetCalib": jetcalib, - # Default to this for now pending further development. - # Ideally it'd be better to deprecate this and instead - # take the defaults from SignatureDicts for most - # purposes, but this can wait until the needs of clients - # are more clear. - "trkopt" : trkopt - } - return jetRecoDict - -def jetCFSequenceFromString(jet_def_string): - """ Function to retrieve jet Reco sequence from string""" - jetRecoDict=jetDictFromString(jet_def_string) - return jetCFSequence(ConfigFlags,**jetRecoDict) - - -def jetMenuSequenceFromString(jet_def_string): - """ Function to retrieve jet menu sequence from string""" - jetRecoDict=jetDictFromString(jet_def_string) - return jetMenuSequence(ConfigFlags,**jetRecoDict) # First arg dummy flags for RecoFragmentsPool diff --git a/Trigger/TrigSteer/TrigCompositeUtils/Root/TrigCompositeUtilsRoot.cxx b/Trigger/TrigSteer/TrigCompositeUtils/Root/TrigCompositeUtilsRoot.cxx index 8b3529bf22f0765a894073adf1acc65d0c008814..7a579b52e2d866d4f66a6458c964e55168f7208b 100644 --- a/Trigger/TrigSteer/TrigCompositeUtils/Root/TrigCompositeUtilsRoot.cxx +++ b/Trigger/TrigSteer/TrigCompositeUtils/Root/TrigCompositeUtilsRoot.cxx @@ -18,6 +18,7 @@ CLASS_DEF( xAOD::IParticleContainer, 1241842700, 1 ) #include <unordered_map> #include <regex> #include <iomanip> // std::setfill +#include <mutex> static const SG::AuxElement::Accessor< std::vector<TrigCompositeUtils::DecisionID> > readWriteAccessor("decisions"); static const SG::AuxElement::ConstAccessor< std::vector<TrigCompositeUtils::DecisionID> > readOnlyAccessor("decisions"); @@ -220,28 +221,37 @@ namespace TrigCompositeUtils { // The list of containers we need to read can change on a file-by-file basis (it depends on the SMK) // Hence we query SG for all collections rather than maintain a large and ever changing ReadHandleKeyArray - std::vector<std::string> keys; + static std::vector<std::string> keys ATLAS_THREAD_SAFE; + static std::mutex keysMutex; // TODO TODO TODO NEED TO REPLACE THIS WITH A STANDALONE-FRIENDLY VERSION #ifndef XAOD_STANDALONE - eventStore->keys(static_cast<CLID>( ClassID_traits< DecisionContainer >::ID() ), keys); + { + std::lock_guard<std::mutex> lock(keysMutex); + if (keys.size() == 0) { + // In theory this can change from file to file, + // the use case for this function is monitoring, and this is typically over a single run. + eventStore->keys(static_cast<CLID>( ClassID_traits< DecisionContainer >::ID() ), keys); + } + } #else + eventStore->event(); // Avoid unused warning throw std::runtime_error("Cannot yet obtain rejected HLT features in AnalysisBase"); #endif // Loop over each DecisionContainer, for (const std::string& key : keys) { // Get and check this container - if ( key.find("HLTNav") != 0 ) { + if ( key.find("HLTNav_") != 0 ) { continue; // Only concerned about the decision containers which make up the navigation, they have name prefix of HLTNav } if ( key == "HLTNav_Summary" ) { continue; // This is where accepted paths start. We are looking for rejected ones } - const DecisionContainer* container = nullptr; - if ( eventStore->retrieve( container, key ).isFailure() ) { + SG::ReadHandle<DecisionContainer> containerRH(key); + if (!containerRH.isValid()) { throw std::runtime_error("Unable to retrieve " + key + " from event store."); } - for (const Decision* d : *container) { + for (const Decision* d : *containerRH) { if (!d->hasObjectLink(featureString())) { // TODO add logic for ComboHypo where this is expected continue; // Only want Decision objects created by HypoAlgs diff --git a/Trigger/TrigT1/TrigT1CaloCalibConditions/TrigT1CaloCalibConditions/ATLAS_CHECK_THREAD_SAFETY b/Trigger/TrigT1/TrigT1CaloCalibConditions/TrigT1CaloCalibConditions/ATLAS_CHECK_THREAD_SAFETY new file mode 100644 index 0000000000000000000000000000000000000000..1d276eb953f3f1f2841c87df29985854ce16743a --- /dev/null +++ b/Trigger/TrigT1/TrigT1CaloCalibConditions/TrigT1CaloCalibConditions/ATLAS_CHECK_THREAD_SAFETY @@ -0,0 +1 @@ +Trigger/TrigT1/TrigT1CaloCalibConditions diff --git a/Trigger/TrigValidation/TrigAnalysisTest/share/ref_RDOtoRDOTrig_v1Dev_build.ref b/Trigger/TrigValidation/TrigAnalysisTest/share/ref_RDOtoRDOTrig_v1Dev_build.ref index 919cfc6341500652c7a1528cfd136e97a40ed999..09a3180c974292b2cce35af8c23cbcad24ebb62e 100644 --- a/Trigger/TrigValidation/TrigAnalysisTest/share/ref_RDOtoRDOTrig_v1Dev_build.ref +++ b/Trigger/TrigValidation/TrigAnalysisTest/share/ref_RDOtoRDOTrig_v1Dev_build.ref @@ -1,12 +1,12 @@ TrigSignatureMoniMT INFO HLT_10j40_pf_subresjesgscIS_ftf_L14J15 #3575805394 -TrigSignatureMoniMT INFO -- #3575805394 Events 9 9 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #3575805394 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #3575805394 Events 9 9 0 0 0 0 0 0 0 0 0 0 9 0 - - 0 +TrigSignatureMoniMT INFO -- #3575805394 Features 0 0 0 0 0 0 0 0 0 0 9 0 - - TrigSignatureMoniMT INFO HLT_10j40_subjesIS_L14J15 #2760204981 TrigSignatureMoniMT INFO -- #2760204981 Events 9 9 0 0 0 0 0 0 0 0 0 0 0 - - - 0 TrigSignatureMoniMT INFO -- #2760204981 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_10j40_subresjesgscIS_ftf_L14J15 #3568675904 -TrigSignatureMoniMT INFO -- #3568675904 Events 9 9 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #3568675904 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #3568675904 Events 9 9 0 0 0 0 0 0 0 0 0 0 9 0 - - 0 +TrigSignatureMoniMT INFO -- #3568675904 Features 0 0 0 0 0 0 0 0 0 0 9 0 - - TrigSignatureMoniMT INFO HLT_2e12_lhloose_mu10_L12EM8VH_MU10 #2518246928 TrigSignatureMoniMT INFO -- #2518246928 Events 1 1 0 0 0 0 0 0 0 0 0 - - - - - 0 TrigSignatureMoniMT INFO -- #2518246928 Features 0 0 0 0 0 0 0 0 0 - - - - - @@ -56,11 +56,11 @@ TrigSignatureMoniMT INFO HLT_2g50_loose_L12EM20V TrigSignatureMoniMT INFO -- #3590373854 Events 2 2 2 0 0 0 - - - - - - - - - - 0 TrigSignatureMoniMT INFO -- #3590373854 Features 2 0 0 0 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_2j330_a10sd_csskpf_jes_ftf_35smcINF_L1J100 #3495282139 -TrigSignatureMoniMT INFO -- #3495282139 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #3495282139 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #3495282139 Events 3 3 0 0 0 0 0 0 0 0 0 0 3 0 - - 0 +TrigSignatureMoniMT INFO -- #3495282139 Features 0 0 0 0 0 0 0 0 0 0 3 0 - - TrigSignatureMoniMT INFO HLT_2j330_a10sd_csskpf_nojcalib_ftf_35smcINF_L1J100 #2680976232 -TrigSignatureMoniMT INFO -- #2680976232 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2680976232 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2680976232 Events 3 3 0 0 0 0 0 0 0 0 0 0 3 0 - - 0 +TrigSignatureMoniMT INFO -- #2680976232 Features 0 0 0 0 0 0 0 0 0 0 3 0 - - TrigSignatureMoniMT INFO HLT_2j330_a10t_lcw_jes_35smcINF_L1J100 #1295975955 TrigSignatureMoniMT INFO -- #1295975955 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 TrigSignatureMoniMT INFO -- #1295975955 Features 0 0 0 0 0 0 0 0 0 0 0 - - - @@ -119,11 +119,11 @@ TrigSignatureMoniMT INFO HLT_3j200_L1J100 #21994 TrigSignatureMoniMT INFO -- #2199422919 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 TrigSignatureMoniMT INFO -- #2199422919 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_3j200_pf_subresjesgscIS_ftf_L1J100 #794428037 -TrigSignatureMoniMT INFO -- #794428037 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #794428037 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #794428037 Events 3 3 0 0 0 0 0 0 0 0 0 0 3 0 - - 0 +TrigSignatureMoniMT INFO -- #794428037 Features 0 0 0 0 0 0 0 0 0 0 3 0 - - TrigSignatureMoniMT INFO HLT_3j200_subresjesgscIS_ftf_L1J100 #1801834652 -TrigSignatureMoniMT INFO -- #1801834652 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #1801834652 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #1801834652 Events 3 3 0 0 0 0 0 0 0 0 0 0 3 0 - - 0 +TrigSignatureMoniMT INFO -- #1801834652 Features 0 0 0 0 0 0 0 0 0 0 3 0 - - TrigSignatureMoniMT INFO HLT_3mu6_L13MU6 #1832399408 TrigSignatureMoniMT INFO -- #1832399408 Events 0 0 0 0 0 0 0 0 0 0 0 - - - - - 0 TrigSignatureMoniMT INFO -- #1832399408 Features 0 0 0 0 0 0 0 0 0 - - - - - @@ -134,14 +134,14 @@ TrigSignatureMoniMT INFO HLT_3mu8_msonly_L13MU6 TrigSignatureMoniMT INFO -- #424835335 Events 0 0 0 0 0 0 0 0 0 0 - - - - - - 0 TrigSignatureMoniMT INFO -- #424835335 Features 0 0 0 0 0 0 0 0 - - - - - - TrigSignatureMoniMT INFO HLT_4j120_pf_subresjesgscIS_ftf_L13J50 #1755129033 -TrigSignatureMoniMT INFO -- #1755129033 Events 1 1 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #1755129033 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #1755129033 Events 1 1 0 0 0 0 0 0 0 0 0 0 1 0 - - 0 +TrigSignatureMoniMT INFO -- #1755129033 Features 0 0 0 0 0 0 0 0 0 0 1 0 - - TrigSignatureMoniMT INFO HLT_4j120_subjesIS_L13J50 #3722303680 TrigSignatureMoniMT INFO -- #3722303680 Events 1 1 0 0 0 0 0 0 0 0 0 0 0 - - - 0 TrigSignatureMoniMT INFO -- #3722303680 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_4j120_subresjesgscIS_ftf_L13J50 #91006165 -TrigSignatureMoniMT INFO -- #91006165 Events 1 1 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #91006165 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #91006165 Events 1 1 0 0 0 0 0 0 0 0 0 0 1 0 - - 0 +TrigSignatureMoniMT INFO -- #91006165 Features 0 0 0 0 0 0 0 0 0 0 1 0 - - TrigSignatureMoniMT INFO HLT_4mu4_L14MU4 #1834383636 TrigSignatureMoniMT INFO -- #1834383636 Events 0 0 0 0 0 0 0 0 0 0 0 - - - - - 0 TrigSignatureMoniMT INFO -- #1834383636 Features 0 0 0 0 0 0 0 0 0 - - - - - @@ -149,47 +149,47 @@ TrigSignatureMoniMT INFO HLT_5j70_0eta240_L14J20 TrigSignatureMoniMT INFO -- #1175391812 Events 7 7 0 0 0 0 0 0 0 0 0 0 1 - - - 1 TrigSignatureMoniMT INFO -- #1175391812 Features 0 0 0 0 0 0 0 0 0 0 5 - - - TrigSignatureMoniMT INFO HLT_5j70_pf_subresjesgscIS_ftf_0eta240_L14J15 #4189027854 -TrigSignatureMoniMT INFO -- #4189027854 Events 9 9 0 0 0 0 0 0 0 0 0 0 1 - - - 1 -TrigSignatureMoniMT INFO -- #4189027854 Features 0 0 0 0 0 0 0 0 0 0 5 - - - +TrigSignatureMoniMT INFO -- #4189027854 Events 9 9 0 0 0 0 0 0 0 0 0 0 9 1 - - 1 +TrigSignatureMoniMT INFO -- #4189027854 Features 0 0 0 0 0 0 0 0 0 0 9 5 - - TrigSignatureMoniMT INFO HLT_5j70_subresjesgscIS_ftf_0eta240_L14J15 #819918597 -TrigSignatureMoniMT INFO -- #819918597 Events 9 9 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #819918597 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #819918597 Events 9 9 0 0 0 0 0 0 0 0 0 0 9 0 - - 0 +TrigSignatureMoniMT INFO -- #819918597 Features 0 0 0 0 0 0 0 0 0 0 9 0 - - TrigSignatureMoniMT INFO HLT_5j85_pf_subresjesgscIS_ftf_L14J15 #4208121018 -TrigSignatureMoniMT INFO -- #4208121018 Events 9 9 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #4208121018 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #4208121018 Events 9 9 0 0 0 0 0 0 0 0 0 0 9 0 - - 0 +TrigSignatureMoniMT INFO -- #4208121018 Features 0 0 0 0 0 0 0 0 0 0 9 0 - - TrigSignatureMoniMT INFO HLT_5j85_subjesIS_L14J15 #2745094401 TrigSignatureMoniMT INFO -- #2745094401 Events 9 9 0 0 0 0 0 0 0 0 0 0 0 - - - 0 TrigSignatureMoniMT INFO -- #2745094401 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_5j85_subresjesgscIS_ftf_L14J15 #1148892499 -TrigSignatureMoniMT INFO -- #1148892499 Events 9 9 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #1148892499 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #1148892499 Events 9 9 0 0 0 0 0 0 0 0 0 0 9 0 - - 0 +TrigSignatureMoniMT INFO -- #1148892499 Features 0 0 0 0 0 0 0 0 0 0 9 0 - - TrigSignatureMoniMT INFO HLT_6j55_pf_subresjesgscIS_ftf_0eta240_L14J15 #1526259867 -TrigSignatureMoniMT INFO -- #1526259867 Events 9 9 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #1526259867 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #1526259867 Events 9 9 0 0 0 0 0 0 0 0 0 0 9 0 - - 0 +TrigSignatureMoniMT INFO -- #1526259867 Features 0 0 0 0 0 0 0 0 0 0 9 0 - - TrigSignatureMoniMT INFO HLT_6j55_subjesIS_0eta240_L14J15 #68179418 TrigSignatureMoniMT INFO -- #68179418 Events 9 9 0 0 0 0 0 0 0 0 0 0 0 - - - 0 TrigSignatureMoniMT INFO -- #68179418 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_6j55_subresjesgscIS_ftf_0eta240_L14J15 #1068073241 -TrigSignatureMoniMT INFO -- #1068073241 Events 9 9 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #1068073241 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #1068073241 Events 9 9 0 0 0 0 0 0 0 0 0 0 9 0 - - 0 +TrigSignatureMoniMT INFO -- #1068073241 Features 0 0 0 0 0 0 0 0 0 0 9 0 - - TrigSignatureMoniMT INFO HLT_6j70_pf_subresjesgscIS_ftf_L14J15 #1755772565 -TrigSignatureMoniMT INFO -- #1755772565 Events 9 9 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #1755772565 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #1755772565 Events 9 9 0 0 0 0 0 0 0 0 0 0 9 0 - - 0 +TrigSignatureMoniMT INFO -- #1755772565 Features 0 0 0 0 0 0 0 0 0 0 9 0 - - TrigSignatureMoniMT INFO HLT_6j70_subjesIS_L14J15 #1003115860 TrigSignatureMoniMT INFO -- #1003115860 Events 9 9 0 0 0 0 0 0 0 0 0 0 0 - - - 0 TrigSignatureMoniMT INFO -- #1003115860 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_6j70_subresjesgscIS_ftf_L14J15 #59957514 -TrigSignatureMoniMT INFO -- #59957514 Events 9 9 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #59957514 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #59957514 Events 9 9 0 0 0 0 0 0 0 0 0 0 9 0 - - 0 +TrigSignatureMoniMT INFO -- #59957514 Features 0 0 0 0 0 0 0 0 0 0 9 0 - - TrigSignatureMoniMT INFO HLT_7j45_pf_subresjesgscIS_ftf_L14J15 #2701381398 -TrigSignatureMoniMT INFO -- #2701381398 Events 9 9 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2701381398 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2701381398 Events 9 9 0 0 0 0 0 0 0 0 0 0 9 0 - - 0 +TrigSignatureMoniMT INFO -- #2701381398 Features 0 0 0 0 0 0 0 0 0 0 9 0 - - TrigSignatureMoniMT INFO HLT_7j45_subjesIS_L14J15 #2617173782 TrigSignatureMoniMT INFO -- #2617173782 Events 9 9 0 0 0 0 0 0 0 0 0 0 0 - - - 0 TrigSignatureMoniMT INFO -- #2617173782 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_7j45_subresjesgscIS_ftf_L14J15 #2928962349 -TrigSignatureMoniMT INFO -- #2928962349 Events 9 9 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2928962349 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2928962349 Events 9 9 0 0 0 0 0 0 0 0 0 0 9 0 - - 0 +TrigSignatureMoniMT INFO -- #2928962349 Features 0 0 0 0 0 0 0 0 0 0 9 0 - - TrigSignatureMoniMT INFO HLT_JetDS_j0_L1J100 #3302698716 TrigSignatureMoniMT INFO -- #3302698716 Events 3 3 0 0 0 0 0 0 0 0 0 0 3 3 3 - 3 TrigSignatureMoniMT INFO -- #3302698716 Features 0 0 0 0 0 0 0 0 0 0 81 32 3 - @@ -413,8 +413,8 @@ TrigSignatureMoniMT INFO HLT_j0_vbenfSEP30etSEP3 TrigSignatureMoniMT INFO -- #4034799151 Events 19 19 0 0 0 0 0 0 0 0 0 0 15 - - - 15 TrigSignatureMoniMT INFO -- #4034799151 Features 0 0 0 0 0 0 0 0 0 0 402 - - - TrigSignatureMoniMT INFO HLT_j225_subjesgscIS_ftf_bmv2c1040_split_L1J100 #219711753 -TrigSignatureMoniMT INFO -- #219711753 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 0 - - 0 -TrigSignatureMoniMT INFO -- #219711753 Features 0 0 0 0 0 0 0 0 0 0 0 0 - - +TrigSignatureMoniMT INFO -- #219711753 Events 3 3 0 0 0 0 0 0 0 0 0 0 3 0 0 - 0 +TrigSignatureMoniMT INFO -- #219711753 Features 0 0 0 0 0 0 0 0 0 0 3 0 0 - TrigSignatureMoniMT INFO HLT_j260_320eta490_L1J20 #3084792704 TrigSignatureMoniMT INFO -- #3084792704 Events 19 19 0 0 0 0 0 0 0 0 0 0 0 - - - 0 TrigSignatureMoniMT INFO -- #3084792704 Features 0 0 0 0 0 0 0 0 0 0 0 - - - @@ -422,104 +422,113 @@ TrigSignatureMoniMT INFO HLT_j260_320eta490_L1J7 TrigSignatureMoniMT INFO -- #3769257182 Events 2 2 0 0 0 0 0 0 0 0 0 0 0 - - - 0 TrigSignatureMoniMT INFO -- #3769257182 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j275_pf_subjesgscIS_ftf_bdl1r60_split_L1J100 #2912155644 -TrigSignatureMoniMT INFO -- #2912155644 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2912155644 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2912155644 Events 3 3 0 0 0 0 0 0 0 0 0 0 3 0 - - 0 +TrigSignatureMoniMT INFO -- #2912155644 Features 0 0 0 0 0 0 0 0 0 0 3 0 - - TrigSignatureMoniMT INFO HLT_j275_pf_subjesgscIS_ftf_boffperf_split_L1J100 #9543810 -TrigSignatureMoniMT INFO -- #9543810 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 0 - - 0 -TrigSignatureMoniMT INFO -- #9543810 Features 0 0 0 0 0 0 0 0 0 0 0 0 - - +TrigSignatureMoniMT INFO -- #9543810 Events 3 3 0 0 0 0 0 0 0 0 0 0 3 0 0 - 0 +TrigSignatureMoniMT INFO -- #9543810 Features 0 0 0 0 0 0 0 0 0 0 3 0 0 - TrigSignatureMoniMT INFO HLT_j275_subjesgscIS_ftf_bdl1r60_split_L1J100 #2807668578 -TrigSignatureMoniMT INFO -- #2807668578 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2807668578 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2807668578 Events 3 3 0 0 0 0 0 0 0 0 0 0 3 0 - - 0 +TrigSignatureMoniMT INFO -- #2807668578 Features 0 0 0 0 0 0 0 0 0 0 3 0 - - TrigSignatureMoniMT INFO HLT_j275_subjesgscIS_ftf_bmv2c1060_split_L1J100 #710546402 -TrigSignatureMoniMT INFO -- #710546402 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 0 - - 0 -TrigSignatureMoniMT INFO -- #710546402 Features 0 0 0 0 0 0 0 0 0 0 0 0 - - +TrigSignatureMoniMT INFO -- #710546402 Events 3 3 0 0 0 0 0 0 0 0 0 0 3 0 0 - 0 +TrigSignatureMoniMT INFO -- #710546402 Features 0 0 0 0 0 0 0 0 0 0 3 0 0 - TrigSignatureMoniMT INFO HLT_j275_subjesgscIS_ftf_boffperf_split_L1J100 #540369970 -TrigSignatureMoniMT INFO -- #540369970 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 0 - - 0 -TrigSignatureMoniMT INFO -- #540369970 Features 0 0 0 0 0 0 0 0 0 0 0 0 - - +TrigSignatureMoniMT INFO -- #540369970 Events 3 3 0 0 0 0 0 0 0 0 0 0 3 0 0 - 0 +TrigSignatureMoniMT INFO -- #540369970 Features 0 0 0 0 0 0 0 0 0 0 3 0 0 - TrigSignatureMoniMT INFO HLT_j300_pf_subjesgscIS_ftf_bdl1r70_split_L1J100 #2576796343 -TrigSignatureMoniMT INFO -- #2576796343 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2576796343 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2576796343 Events 3 3 0 0 0 0 0 0 0 0 0 0 3 0 - - 0 +TrigSignatureMoniMT INFO -- #2576796343 Features 0 0 0 0 0 0 0 0 0 0 3 0 - - TrigSignatureMoniMT INFO HLT_j300_subjesgscIS_ftf_bdl1r70_split_L1J100 #2952175162 -TrigSignatureMoniMT INFO -- #2952175162 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2952175162 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2952175162 Events 3 3 0 0 0 0 0 0 0 0 0 0 3 0 - - 0 +TrigSignatureMoniMT INFO -- #2952175162 Features 0 0 0 0 0 0 0 0 0 0 3 0 - - TrigSignatureMoniMT INFO HLT_j300_subjesgscIS_ftf_bmv2c1070_split_L1J100 #2074989613 -TrigSignatureMoniMT INFO -- #2074989613 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 0 - - 0 -TrigSignatureMoniMT INFO -- #2074989613 Features 0 0 0 0 0 0 0 0 0 0 0 0 - - +TrigSignatureMoniMT INFO -- #2074989613 Events 3 3 0 0 0 0 0 0 0 0 0 0 3 0 0 - 0 +TrigSignatureMoniMT INFO -- #2074989613 Features 0 0 0 0 0 0 0 0 0 0 3 0 0 - TrigSignatureMoniMT INFO HLT_j360_pf_subjesgscIS_ftf_bdl1r77_split_L1J100 #3049708671 -TrigSignatureMoniMT INFO -- #3049708671 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #3049708671 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #3049708671 Events 3 3 0 0 0 0 0 0 0 0 0 0 3 0 - - 0 +TrigSignatureMoniMT INFO -- #3049708671 Features 0 0 0 0 0 0 0 0 0 0 3 0 - - TrigSignatureMoniMT INFO HLT_j360_subjesgscIS_ftf_bdl1r77_split_L1J100 #1563453863 -TrigSignatureMoniMT INFO -- #1563453863 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #1563453863 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #1563453863 Events 3 3 0 0 0 0 0 0 0 0 0 0 3 0 - - 0 +TrigSignatureMoniMT INFO -- #1563453863 Features 0 0 0 0 0 0 0 0 0 0 3 0 - - TrigSignatureMoniMT INFO HLT_j360_subjesgscIS_ftf_bmv2c1077_split_L1J100 #4176355792 -TrigSignatureMoniMT INFO -- #4176355792 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 0 - - 0 -TrigSignatureMoniMT INFO -- #4176355792 Features 0 0 0 0 0 0 0 0 0 0 0 0 - - +TrigSignatureMoniMT INFO -- #4176355792 Events 3 3 0 0 0 0 0 0 0 0 0 0 3 0 0 - 0 +TrigSignatureMoniMT INFO -- #4176355792 Features 0 0 0 0 0 0 0 0 0 0 3 0 0 - TrigSignatureMoniMT INFO HLT_j420_L1J100 #2659902019 TrigSignatureMoniMT INFO -- #2659902019 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 TrigSignatureMoniMT INFO -- #2659902019 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j420_pf_subresjesgscIS_ftf_L1J100 #3936932891 -TrigSignatureMoniMT INFO -- #3936932891 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #3936932891 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #3936932891 Events 3 3 0 0 0 0 0 0 0 0 0 0 3 0 - - 0 +TrigSignatureMoniMT INFO -- #3936932891 Features 0 0 0 0 0 0 0 0 0 0 3 0 - - TrigSignatureMoniMT INFO HLT_j420_subresjesgscIS_ftf_L1J100 #2477128298 -TrigSignatureMoniMT INFO -- #2477128298 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2477128298 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2477128298 Events 3 3 0 0 0 0 0 0 0 0 0 0 3 0 - - 0 +TrigSignatureMoniMT INFO -- #2477128298 Features 0 0 0 0 0 0 0 0 0 0 3 0 - - TrigSignatureMoniMT INFO HLT_j45_L1J15 #1364976160 TrigSignatureMoniMT INFO -- #1364976160 Events 20 20 0 0 0 0 0 0 0 0 0 0 19 - - - 19 TrigSignatureMoniMT INFO -- #1364976160 Features 0 0 0 0 0 0 0 0 0 0 49 - - - TrigSignatureMoniMT INFO HLT_j45_csskpf_nojcalib_ftf_L1J20 #2528888897 -TrigSignatureMoniMT INFO -- #2528888897 Events 19 19 0 0 0 0 0 0 0 0 0 0 15 - - - 15 -TrigSignatureMoniMT INFO -- #2528888897 Features 0 0 0 0 0 0 0 0 0 0 30 - - - +TrigSignatureMoniMT INFO -- #2528888897 Events 19 19 0 0 0 0 0 0 0 0 0 0 19 15 - - 15 +TrigSignatureMoniMT INFO -- #2528888897 Features 0 0 0 0 0 0 0 0 0 0 19 30 - - TrigSignatureMoniMT INFO HLT_j45_cssktc_nojcalib_L1J20 #3295122398 TrigSignatureMoniMT INFO -- #3295122398 Events 19 19 0 0 0 0 0 0 0 0 0 0 15 - - - 15 TrigSignatureMoniMT INFO -- #3295122398 Features 0 0 0 0 0 0 0 0 0 0 27 - - - TrigSignatureMoniMT INFO HLT_j45_ftf_L1J15 #868405538 -TrigSignatureMoniMT INFO -- #868405538 Events 20 20 0 0 0 0 0 0 0 0 0 0 18 - - - 18 -TrigSignatureMoniMT INFO -- #868405538 Features 0 0 0 0 0 0 0 0 0 0 44 - - - +TrigSignatureMoniMT INFO -- #868405538 Events 20 20 0 0 0 0 0 0 0 0 0 0 20 18 - - 18 +TrigSignatureMoniMT INFO -- #868405538 Features 0 0 0 0 0 0 0 0 0 0 20 44 - - +TrigSignatureMoniMT INFO HLT_j45_ftf_preselj45_L1J20 #526860976 +TrigSignatureMoniMT INFO -- #526860976 Events 19 19 0 0 0 0 0 0 0 0 0 0 19 18 - - 18 +TrigSignatureMoniMT INFO -- #526860976 Features 0 0 0 0 0 0 0 0 0 0 19 44 - - TrigSignatureMoniMT INFO HLT_j45_nojcalib_L1J20 #2042444294 TrigSignatureMoniMT INFO -- #2042444294 Events 19 19 0 0 0 0 0 0 0 0 0 0 17 - - - 17 TrigSignatureMoniMT INFO -- #2042444294 Features 0 0 0 0 0 0 0 0 0 0 39 - - - TrigSignatureMoniMT INFO HLT_j45_pf_ftf_L1J20 #3679554988 -TrigSignatureMoniMT INFO -- #3679554988 Events 19 19 0 0 0 0 0 0 0 0 0 0 16 - - - 16 -TrigSignatureMoniMT INFO -- #3679554988 Features 0 0 0 0 0 0 0 0 0 0 35 - - - +TrigSignatureMoniMT INFO -- #3679554988 Events 19 19 0 0 0 0 0 0 0 0 0 0 19 16 - - 16 +TrigSignatureMoniMT INFO -- #3679554988 Features 0 0 0 0 0 0 0 0 0 0 19 35 - - +TrigSignatureMoniMT INFO HLT_j45_pf_ftf_preselj45_L1J20 #650158432 +TrigSignatureMoniMT INFO -- #650158432 Events 19 19 0 0 0 0 0 0 0 0 0 0 19 16 - - 16 +TrigSignatureMoniMT INFO -- #650158432 Features 0 0 0 0 0 0 0 0 0 0 19 35 - - TrigSignatureMoniMT INFO HLT_j45_pf_nojcalib_ftf_L1J20 #4202219904 -TrigSignatureMoniMT INFO -- #4202219904 Events 19 19 0 0 0 0 0 0 0 0 0 0 16 - - - 16 -TrigSignatureMoniMT INFO -- #4202219904 Features 0 0 0 0 0 0 0 0 0 0 36 - - - +TrigSignatureMoniMT INFO -- #4202219904 Events 19 19 0 0 0 0 0 0 0 0 0 0 19 16 - - 16 +TrigSignatureMoniMT INFO -- #4202219904 Features 0 0 0 0 0 0 0 0 0 0 19 36 - - TrigSignatureMoniMT INFO HLT_j45_pf_subjesgscIS_ftf_L1J20 #2187173741 -TrigSignatureMoniMT INFO -- #2187173741 Events 19 19 0 0 0 0 0 0 0 0 0 0 18 - - - 18 -TrigSignatureMoniMT INFO -- #2187173741 Features 0 0 0 0 0 0 0 0 0 0 39 - - - +TrigSignatureMoniMT INFO -- #2187173741 Events 19 19 0 0 0 0 0 0 0 0 0 0 19 18 - - 18 +TrigSignatureMoniMT INFO -- #2187173741 Features 0 0 0 0 0 0 0 0 0 0 19 39 - - TrigSignatureMoniMT INFO HLT_j45_pf_subjesgscIS_ftf_bdl1r70_split_L1J20 #4239752847 -TrigSignatureMoniMT INFO -- #4239752847 Events 19 19 0 0 0 0 0 0 0 0 0 0 18 - - - 18 -TrigSignatureMoniMT INFO -- #4239752847 Features 0 0 0 0 0 0 0 0 0 0 39 - - - +TrigSignatureMoniMT INFO -- #4239752847 Events 19 19 0 0 0 0 0 0 0 0 0 0 19 18 - - 18 +TrigSignatureMoniMT INFO -- #4239752847 Features 0 0 0 0 0 0 0 0 0 0 19 39 - - TrigSignatureMoniMT INFO HLT_j45_pf_subjesgscIS_ftf_boffperf_split_L1J20 #2546763674 -TrigSignatureMoniMT INFO -- #2546763674 Events 19 19 0 0 0 0 0 0 0 0 0 0 16 16 - - 16 -TrigSignatureMoniMT INFO -- #2546763674 Features 0 0 0 0 0 0 0 0 0 0 36 36 - - +TrigSignatureMoniMT INFO -- #2546763674 Events 19 19 0 0 0 0 0 0 0 0 0 0 19 16 16 - 16 +TrigSignatureMoniMT INFO -- #2546763674 Features 0 0 0 0 0 0 0 0 0 0 19 36 36 - TrigSignatureMoniMT INFO HLT_j45_sktc_nojcalib_L1J20 #1542468090 TrigSignatureMoniMT INFO -- #1542468090 Events 19 19 0 0 0 0 0 0 0 0 0 0 15 - - - 15 TrigSignatureMoniMT INFO -- #1542468090 Features 0 0 0 0 0 0 0 0 0 0 26 - - - +TrigSignatureMoniMT INFO HLT_j45_subjesIS_ftf_preselj45_L1J20 #3647626880 +TrigSignatureMoniMT INFO -- #3647626880 Events 19 19 0 0 0 0 0 0 0 0 0 0 19 19 - - 19 +TrigSignatureMoniMT INFO -- #3647626880 Features 0 0 0 0 0 0 0 0 0 0 19 49 - - TrigSignatureMoniMT INFO HLT_j45_subjesgscIS_ftf_011jvt_L1J15 #266323220 -TrigSignatureMoniMT INFO -- #266323220 Events 20 20 0 0 0 0 0 0 0 0 0 0 13 - - - 13 -TrigSignatureMoniMT INFO -- #266323220 Features 0 0 0 0 0 0 0 0 0 0 29 - - - +TrigSignatureMoniMT INFO -- #266323220 Events 20 20 0 0 0 0 0 0 0 0 0 0 20 13 - - 13 +TrigSignatureMoniMT INFO -- #266323220 Features 0 0 0 0 0 0 0 0 0 0 20 29 - - TrigSignatureMoniMT INFO HLT_j45_subjesgscIS_ftf_015jvt_L1J15 #3102941497 -TrigSignatureMoniMT INFO -- #3102941497 Events 20 20 0 0 0 0 0 0 0 0 0 0 13 - - - 13 -TrigSignatureMoniMT INFO -- #3102941497 Features 0 0 0 0 0 0 0 0 0 0 29 - - - +TrigSignatureMoniMT INFO -- #3102941497 Events 20 20 0 0 0 0 0 0 0 0 0 0 20 13 - - 13 +TrigSignatureMoniMT INFO -- #3102941497 Features 0 0 0 0 0 0 0 0 0 0 20 29 - - TrigSignatureMoniMT INFO HLT_j45_subjesgscIS_ftf_059jvt_L1J15 #2237035634 -TrigSignatureMoniMT INFO -- #2237035634 Events 20 20 0 0 0 0 0 0 0 0 0 0 13 - - - 13 -TrigSignatureMoniMT INFO -- #2237035634 Features 0 0 0 0 0 0 0 0 0 0 28 - - - +TrigSignatureMoniMT INFO -- #2237035634 Events 20 20 0 0 0 0 0 0 0 0 0 0 20 13 - - 13 +TrigSignatureMoniMT INFO -- #2237035634 Features 0 0 0 0 0 0 0 0 0 0 20 28 - - TrigSignatureMoniMT INFO HLT_j45_subjesgscIS_ftf_L1J15 #1960278431 -TrigSignatureMoniMT INFO -- #1960278431 Events 20 20 0 0 0 0 0 0 0 0 0 0 19 - - - 19 -TrigSignatureMoniMT INFO -- #1960278431 Features 0 0 0 0 0 0 0 0 0 0 50 - - - +TrigSignatureMoniMT INFO -- #1960278431 Events 20 20 0 0 0 0 0 0 0 0 0 0 20 19 - - 19 +TrigSignatureMoniMT INFO -- #1960278431 Features 0 0 0 0 0 0 0 0 0 0 20 50 - - TrigSignatureMoniMT INFO HLT_j45_subjesgscIS_ftf_bdl1r70_split_L1J20 #2947439578 -TrigSignatureMoniMT INFO -- #2947439578 Events 19 19 0 0 0 0 0 0 0 0 0 0 19 - - - 19 -TrigSignatureMoniMT INFO -- #2947439578 Features 0 0 0 0 0 0 0 0 0 0 50 - - - +TrigSignatureMoniMT INFO -- #2947439578 Events 19 19 0 0 0 0 0 0 0 0 0 0 19 19 - - 19 +TrigSignatureMoniMT INFO -- #2947439578 Features 0 0 0 0 0 0 0 0 0 0 19 50 - - TrigSignatureMoniMT INFO HLT_j45_subjesgscIS_ftf_bmv2c1070_split_L1J20 #980453000 -TrigSignatureMoniMT INFO -- #980453000 Events 19 19 0 0 0 0 0 0 0 0 0 0 19 10 - - 10 -TrigSignatureMoniMT INFO -- #980453000 Features 0 0 0 0 0 0 0 0 0 0 49 19 - - +TrigSignatureMoniMT INFO -- #980453000 Events 19 19 0 0 0 0 0 0 0 0 0 0 19 19 10 - 10 +TrigSignatureMoniMT INFO -- #980453000 Features 0 0 0 0 0 0 0 0 0 0 19 49 19 - TrigSignatureMoniMT INFO HLT_j45_subjesgscIS_ftf_boffperf_split_L1J20 #3374916154 -TrigSignatureMoniMT INFO -- #3374916154 Events 19 19 0 0 0 0 0 0 0 0 0 0 19 19 - - 19 -TrigSignatureMoniMT INFO -- #3374916154 Features 0 0 0 0 0 0 0 0 0 0 49 49 - - +TrigSignatureMoniMT INFO -- #3374916154 Events 19 19 0 0 0 0 0 0 0 0 0 0 19 19 19 - 19 +TrigSignatureMoniMT INFO -- #3374916154 Features 0 0 0 0 0 0 0 0 0 0 19 49 49 - TrigSignatureMoniMT INFO HLT_j45_subresjesgscIS_ftf_L1J15 #1213239619 -TrigSignatureMoniMT INFO -- #1213239619 Events 20 20 0 0 0 0 0 0 0 0 0 0 18 - - - 18 -TrigSignatureMoniMT INFO -- #1213239619 Features 0 0 0 0 0 0 0 0 0 0 44 - - - +TrigSignatureMoniMT INFO -- #1213239619 Events 20 20 0 0 0 0 0 0 0 0 0 0 20 18 - - 18 +TrigSignatureMoniMT INFO -- #1213239619 Features 0 0 0 0 0 0 0 0 0 0 20 44 - - TrigSignatureMoniMT INFO HLT_j460_a10_lcw_subjes_L1J100 #3327656707 TrigSignatureMoniMT INFO -- #3327656707 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 TrigSignatureMoniMT INFO -- #3327656707 Features 0 0 0 0 0 0 0 0 0 0 0 - - - @@ -533,23 +542,23 @@ TrigSignatureMoniMT INFO HLT_j460_a10r_L1J20 #38 TrigSignatureMoniMT INFO -- #3875082669 Events 19 19 0 0 0 0 0 0 0 0 0 0 0 - - - 0 TrigSignatureMoniMT INFO -- #3875082669 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j460_a10sd_csskpf_jes_ftf_35smcINF_L1J100 #3781128663 -TrigSignatureMoniMT INFO -- #3781128663 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #3781128663 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #3781128663 Events 3 3 0 0 0 0 0 0 0 0 0 0 3 0 - - 0 +TrigSignatureMoniMT INFO -- #3781128663 Features 0 0 0 0 0 0 0 0 0 0 3 0 - - TrigSignatureMoniMT INFO HLT_j460_a10sd_csskpf_jes_ftf_L1J100 #1509950051 -TrigSignatureMoniMT INFO -- #1509950051 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #1509950051 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #1509950051 Events 3 3 0 0 0 0 0 0 0 0 0 0 3 0 - - 0 +TrigSignatureMoniMT INFO -- #1509950051 Features 0 0 0 0 0 0 0 0 0 0 3 0 - - TrigSignatureMoniMT INFO HLT_j460_a10sd_csskpf_nojcalib_ftf_35smcINF_L1J100 #249842682 -TrigSignatureMoniMT INFO -- #249842682 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #249842682 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #249842682 Events 3 3 0 0 0 0 0 0 0 0 0 0 3 0 - - 0 +TrigSignatureMoniMT INFO -- #249842682 Features 0 0 0 0 0 0 0 0 0 0 3 0 - - TrigSignatureMoniMT INFO HLT_j460_a10sd_csskpf_nojcalib_ftf_L1J100 #3452032818 -TrigSignatureMoniMT INFO -- #3452032818 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #3452032818 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #3452032818 Events 3 3 0 0 0 0 0 0 0 0 0 0 3 0 - - 0 +TrigSignatureMoniMT INFO -- #3452032818 Features 0 0 0 0 0 0 0 0 0 0 3 0 - - TrigSignatureMoniMT INFO HLT_j460_a10sd_lcw_nojcalib_L1J100 #3093997295 TrigSignatureMoniMT INFO -- #3093997295 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 TrigSignatureMoniMT INFO -- #3093997295 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j460_a10sd_pf_nojcalib_ftf_L1J100 #2138269254 -TrigSignatureMoniMT INFO -- #2138269254 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2138269254 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2138269254 Events 3 3 0 0 0 0 0 0 0 0 0 0 3 0 - - 0 +TrigSignatureMoniMT INFO -- #2138269254 Features 0 0 0 0 0 0 0 0 0 0 3 0 - - TrigSignatureMoniMT INFO HLT_j460_a10t_lcw_jes_30smcINF_L1J100 #2296827117 TrigSignatureMoniMT INFO -- #2296827117 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 TrigSignatureMoniMT INFO -- #2296827117 Features 0 0 0 0 0 0 0 0 0 0 0 - - - @@ -575,11 +584,11 @@ TrigSignatureMoniMT INFO HLT_j85_L1J20 #51047553 TrigSignatureMoniMT INFO -- #510475538 Events 19 19 0 0 0 0 0 0 0 0 0 0 13 - - - 13 TrigSignatureMoniMT INFO -- #510475538 Features 0 0 0 0 0 0 0 0 0 0 21 - - - TrigSignatureMoniMT INFO HLT_j85_ftf_L1J20 #877042532 -TrigSignatureMoniMT INFO -- #877042532 Events 19 19 0 0 0 0 0 0 0 0 0 0 12 - - - 12 -TrigSignatureMoniMT INFO -- #877042532 Features 0 0 0 0 0 0 0 0 0 0 18 - - - +TrigSignatureMoniMT INFO -- #877042532 Events 19 19 0 0 0 0 0 0 0 0 0 0 19 12 - - 12 +TrigSignatureMoniMT INFO -- #877042532 Features 0 0 0 0 0 0 0 0 0 0 19 18 - - TrigSignatureMoniMT INFO HLT_j85_pf_ftf_L1J20 #789444389 -TrigSignatureMoniMT INFO -- #789444389 Events 19 19 0 0 0 0 0 0 0 0 0 0 11 - - - 11 -TrigSignatureMoniMT INFO -- #789444389 Features 0 0 0 0 0 0 0 0 0 0 17 - - - +TrigSignatureMoniMT INFO -- #789444389 Events 19 19 0 0 0 0 0 0 0 0 0 0 19 11 - - 11 +TrigSignatureMoniMT INFO -- #789444389 Features 0 0 0 0 0 0 0 0 0 0 19 17 - - TrigSignatureMoniMT INFO HLT_mb_sptrk_L1RD0_FILLED #4097312640 TrigSignatureMoniMT INFO -- #4097312640 Events 20 0 0 0 - - - - - - - - - - - - 0 TrigSignatureMoniMT INFO -- #4097312640 Features 0 0 - - - - - - - - - - - - @@ -1046,32 +1055,32 @@ TrigSignatureMoniMT INFO HLT_unconvtrk120_isohpt TrigSignatureMoniMT INFO -- #3425113791 Events 10 10 0 0 0 0 0 0 0 0 0 0 6 - - - 6 TrigSignatureMoniMT INFO -- #3425113791 Features 0 0 0 0 0 0 0 0 0 0 6 - - - TrigSignatureMoniMT INFO HLT_xe100_cvfpufit_L1XE50 #2729083465 -TrigSignatureMoniMT INFO -- #2729083465 Events 10 10 0 0 0 0 0 0 0 0 0 0 6 - - - 6 -TrigSignatureMoniMT INFO -- #2729083465 Features 0 0 0 0 0 0 0 0 0 0 6 - - - +TrigSignatureMoniMT INFO -- #2729083465 Events 10 10 0 0 0 0 0 0 0 0 0 0 10 6 - - 6 +TrigSignatureMoniMT INFO -- #2729083465 Features 0 0 0 0 0 0 0 0 0 0 10 6 - - TrigSignatureMoniMT INFO HLT_xe100_mht_L1XE50 #532175988 TrigSignatureMoniMT INFO -- #532175988 Events 10 10 0 0 0 0 0 0 0 0 0 0 9 - - - 9 TrigSignatureMoniMT INFO -- #532175988 Features 0 0 0 0 0 0 0 0 0 0 9 - - - TrigSignatureMoniMT INFO HLT_xe100_mhtpufit_em_subjesgscIS_L1XE50 #3054195458 -TrigSignatureMoniMT INFO -- #3054195458 Events 10 10 0 0 0 0 0 0 0 0 0 0 5 - - - 5 -TrigSignatureMoniMT INFO -- #3054195458 Features 0 0 0 0 0 0 0 0 0 0 5 - - - +TrigSignatureMoniMT INFO -- #3054195458 Events 10 10 0 0 0 0 0 0 0 0 0 0 10 5 - - 5 +TrigSignatureMoniMT INFO -- #3054195458 Features 0 0 0 0 0 0 0 0 0 0 10 5 - - TrigSignatureMoniMT INFO HLT_xe100_mhtpufit_pf_subjesgscIS_L1XE50 #2614685150 -TrigSignatureMoniMT INFO -- #2614685150 Events 10 10 0 0 0 0 0 0 0 0 0 0 4 - - - 4 -TrigSignatureMoniMT INFO -- #2614685150 Features 0 0 0 0 0 0 0 0 0 0 4 - - - +TrigSignatureMoniMT INFO -- #2614685150 Events 10 10 0 0 0 0 0 0 0 0 0 0 10 4 - - 4 +TrigSignatureMoniMT INFO -- #2614685150 Features 0 0 0 0 0 0 0 0 0 0 10 4 - - TrigSignatureMoniMT INFO HLT_xe100_pfopufit_L1XE50 #2909333517 -TrigSignatureMoniMT INFO -- #2909333517 Events 10 10 0 0 0 0 0 0 0 0 0 0 3 - - - 3 -TrigSignatureMoniMT INFO -- #2909333517 Features 0 0 0 0 0 0 0 0 0 0 3 - - - +TrigSignatureMoniMT INFO -- #2909333517 Events 10 10 0 0 0 0 0 0 0 0 0 0 10 3 - - 3 +TrigSignatureMoniMT INFO -- #2909333517 Features 0 0 0 0 0 0 0 0 0 0 10 3 - - TrigSignatureMoniMT INFO HLT_xe100_pfsum_L1XE50 #1890237897 -TrigSignatureMoniMT INFO -- #1890237897 Events 10 10 0 0 0 0 0 0 0 0 0 0 3 - - - 3 -TrigSignatureMoniMT INFO -- #1890237897 Features 0 0 0 0 0 0 0 0 0 0 3 - - - +TrigSignatureMoniMT INFO -- #1890237897 Events 10 10 0 0 0 0 0 0 0 0 0 0 10 3 - - 3 +TrigSignatureMoniMT INFO -- #1890237897 Features 0 0 0 0 0 0 0 0 0 0 10 3 - - TrigSignatureMoniMT INFO HLT_xe100_tcpufit_L1XE50 #2803198799 TrigSignatureMoniMT INFO -- #2803198799 Events 10 10 0 0 0 0 0 0 0 0 0 0 6 - - - 6 TrigSignatureMoniMT INFO -- #2803198799 Features 0 0 0 0 0 0 0 0 0 0 6 - - - TrigSignatureMoniMT INFO HLT_xe100_trkmht_L1XE50 #1055916731 -TrigSignatureMoniMT INFO -- #1055916731 Events 10 10 0 0 0 0 0 0 0 0 0 0 7 - - - 7 -TrigSignatureMoniMT INFO -- #1055916731 Features 0 0 0 0 0 0 0 0 0 0 7 - - - +TrigSignatureMoniMT INFO -- #1055916731 Events 10 10 0 0 0 0 0 0 0 0 0 0 10 7 - - 7 +TrigSignatureMoniMT INFO -- #1055916731 Features 0 0 0 0 0 0 0 0 0 0 10 7 - - TrigSignatureMoniMT INFO HLT_xe100_trkmht_xe85_tcpufit_xe65_cell_L1XE50 #451622546 -TrigSignatureMoniMT INFO -- #451622546 Events 10 10 0 0 0 0 0 0 0 0 0 0 5 - - - 5 -TrigSignatureMoniMT INFO -- #451622546 Features 0 0 0 0 0 0 0 0 0 0 5 - - - +TrigSignatureMoniMT INFO -- #451622546 Events 10 10 0 0 0 0 0 0 0 0 0 0 6 5 - - 5 +TrigSignatureMoniMT INFO -- #451622546 Features 0 0 0 0 0 0 0 0 0 0 6 5 - - TrigSignatureMoniMT INFO HLT_xe110_mht_L1XE50 #3030733259 TrigSignatureMoniMT INFO -- #3030733259 Events 10 10 0 0 0 0 0 0 0 0 0 0 7 - - - 7 TrigSignatureMoniMT INFO -- #3030733259 Features 0 0 0 0 0 0 0 0 0 0 7 - - - @@ -1088,29 +1097,29 @@ TrigSignatureMoniMT INFO HLT_xe30_cell_xe30_tcpu TrigSignatureMoniMT INFO -- #3768353779 Events 19 19 0 0 0 0 0 0 0 0 0 0 14 - - - 14 TrigSignatureMoniMT INFO -- #3768353779 Features 0 0 0 0 0 0 0 0 0 0 14 - - - TrigSignatureMoniMT INFO HLT_xe30_cvfpufit_L1XE10 #3860749499 -TrigSignatureMoniMT INFO -- #3860749499 Events 19 19 0 0 0 0 0 0 0 0 0 0 14 - - - 14 -TrigSignatureMoniMT INFO -- #3860749499 Features 0 0 0 0 0 0 0 0 0 0 14 - - - +TrigSignatureMoniMT INFO -- #3860749499 Events 19 19 0 0 0 0 0 0 0 0 0 0 19 14 - - 14 +TrigSignatureMoniMT INFO -- #3860749499 Features 0 0 0 0 0 0 0 0 0 0 19 14 - - TrigSignatureMoniMT INFO HLT_xe30_mht_L1XE10 #3626903018 TrigSignatureMoniMT INFO -- #3626903018 Events 19 19 0 0 0 0 0 0 0 0 0 0 19 - - - 19 TrigSignatureMoniMT INFO -- #3626903018 Features 0 0 0 0 0 0 0 0 0 0 19 - - - TrigSignatureMoniMT INFO HLT_xe30_mhtpufit_em_subjesgscIS_L1XE10 #689201557 -TrigSignatureMoniMT INFO -- #689201557 Events 19 19 0 0 0 0 0 0 0 0 0 0 12 - - - 12 -TrigSignatureMoniMT INFO -- #689201557 Features 0 0 0 0 0 0 0 0 0 0 12 - - - +TrigSignatureMoniMT INFO -- #689201557 Events 19 19 0 0 0 0 0 0 0 0 0 0 19 12 - - 12 +TrigSignatureMoniMT INFO -- #689201557 Features 0 0 0 0 0 0 0 0 0 0 19 12 - - TrigSignatureMoniMT INFO HLT_xe30_mhtpufit_pf_subjesgscIS_L1XE10 #1886909707 -TrigSignatureMoniMT INFO -- #1886909707 Events 19 19 0 0 0 0 0 0 0 0 0 0 15 - - - 15 -TrigSignatureMoniMT INFO -- #1886909707 Features 0 0 0 0 0 0 0 0 0 0 15 - - - +TrigSignatureMoniMT INFO -- #1886909707 Events 19 19 0 0 0 0 0 0 0 0 0 0 19 14 - - 14 +TrigSignatureMoniMT INFO -- #1886909707 Features 0 0 0 0 0 0 0 0 0 0 19 14 - - TrigSignatureMoniMT INFO HLT_xe30_pfopufit_L1XE10 #2252641537 -TrigSignatureMoniMT INFO -- #2252641537 Events 19 19 0 0 0 0 0 0 0 0 0 0 15 - - - 15 -TrigSignatureMoniMT INFO -- #2252641537 Features 0 0 0 0 0 0 0 0 0 0 15 - - - +TrigSignatureMoniMT INFO -- #2252641537 Events 19 19 0 0 0 0 0 0 0 0 0 0 19 15 - - 15 +TrigSignatureMoniMT INFO -- #2252641537 Features 0 0 0 0 0 0 0 0 0 0 19 15 - - TrigSignatureMoniMT INFO HLT_xe30_pfsum_L1XE10 #998713382 -TrigSignatureMoniMT INFO -- #998713382 Events 19 19 0 0 0 0 0 0 0 0 0 0 16 - - - 16 -TrigSignatureMoniMT INFO -- #998713382 Features 0 0 0 0 0 0 0 0 0 0 16 - - - +TrigSignatureMoniMT INFO -- #998713382 Events 19 19 0 0 0 0 0 0 0 0 0 0 19 16 - - 16 +TrigSignatureMoniMT INFO -- #998713382 Features 0 0 0 0 0 0 0 0 0 0 19 16 - - TrigSignatureMoniMT INFO HLT_xe30_tcpufit_L1XE10 #1583719916 TrigSignatureMoniMT INFO -- #1583719916 Events 19 19 0 0 0 0 0 0 0 0 0 0 14 - - - 14 TrigSignatureMoniMT INFO -- #1583719916 Features 0 0 0 0 0 0 0 0 0 0 14 - - - TrigSignatureMoniMT INFO HLT_xe30_trkmht_L1XE10 #2468872349 -TrigSignatureMoniMT INFO -- #2468872349 Events 19 19 0 0 0 0 0 0 0 0 0 0 15 - - - 15 -TrigSignatureMoniMT INFO -- #2468872349 Features 0 0 0 0 0 0 0 0 0 0 15 - - - +TrigSignatureMoniMT INFO -- #2468872349 Events 19 19 0 0 0 0 0 0 0 0 0 0 19 15 - - 15 +TrigSignatureMoniMT INFO -- #2468872349 Features 0 0 0 0 0 0 0 0 0 0 19 15 - - TrigSignatureMoniMT INFO HLT_xe65_cell_L1XE50 #531141817 TrigSignatureMoniMT INFO -- #531141817 Events 10 10 0 0 0 0 0 0 0 0 0 0 7 - - - 7 TrigSignatureMoniMT INFO -- #531141817 Features 0 0 0 0 0 0 0 0 0 0 7 - - - @@ -1127,5 +1136,5 @@ TrigSignatureMoniMT INFO HLT_xe80_tcpufit_unconv TrigSignatureMoniMT INFO -- #153760048 Events 10 10 0 0 0 0 0 0 0 0 0 0 6 - - - 6 TrigSignatureMoniMT INFO -- #153760048 Features 0 0 0 0 0 0 0 0 0 0 6 - - - TrigSignatureMoniMT INFO HLT_xe95_trkmht_xe90_tcpufit_xe75_cell_L1XE50 #302256132 -TrigSignatureMoniMT INFO -- #302256132 Events 10 10 0 0 0 0 0 0 0 0 0 0 4 - - - 4 -TrigSignatureMoniMT INFO -- #302256132 Features 0 0 0 0 0 0 0 0 0 0 4 - - - +TrigSignatureMoniMT INFO -- #302256132 Events 10 10 0 0 0 0 0 0 0 0 0 0 4 4 - - 4 +TrigSignatureMoniMT INFO -- #302256132 Features 0 0 0 0 0 0 0 0 0 0 4 4 - - diff --git a/Trigger/TrigValidation/TrigInDetValidation/test/test_trigID_all_ttbar_pu80_new.py b/Trigger/TrigValidation/TrigInDetValidation/test/test_trigID_all_ttbar_pu80_new.py new file mode 100755 index 0000000000000000000000000000000000000000..615a89d9e066b71c92427043231b2fd3d0e36768 --- /dev/null +++ b/Trigger/TrigValidation/TrigInDetValidation/test/test_trigID_all_ttbar_pu80_new.py @@ -0,0 +1,127 @@ +#!/usr/bin/env python + +# art-description: art job for all_ttbar_pu80_new +# art-type: grid +# art-include: master/Athena +# art-input-nfiles: 3 +# art-athena-mt: 8 +# art-memory: 4096 +# art-html: https://idtrigger-val.web.cern.ch/idtrigger-val/TIDAWeb/TIDAart/?jobdir= +# art-output: *.txt +# art-output: *.log +# art-output: log.* +# art-output: *.out +# art-output: *.err +# art-output: *.log.tar.gz +# art-output: *.new +# art-output: *.json +# art-output: *.root +# art-output: *.check* +# art-output: HLT* +# art-output: times* +# art-output: cost-perCall +# art-output: cost-perEvent +# art-output: cost-perCall-chain +# art-output: cost-perEvent-chain +# art-output: *.dat + + +from TrigValTools.TrigValSteering import Test, CheckSteps +from TrigInDetValidation.TrigInDetArtSteps import TrigInDetReco, TrigInDetAna, TrigInDetdictStep, TrigInDetCompStep, TrigInDetCpuCostStep + + +import sys,getopt + +try: + opts, args = getopt.getopt(sys.argv[1:],"lxp",["local"]) +except getopt.GetoptError: + print("Usage: ") + print("-l(--local) run locally with input file from art eos grid-input") + print("-x don't run athena or post post-processing, only plotting") + print("-p run post-processing, even if -x is set") + + +local=False +exclude=False +postproc=False +for opt,arg in opts: + if opt in ("-l", "--local"): + local=True + if opt=="-x": + exclude=True + if opt=="-p": + postproc=True + + +rdo2aod = TrigInDetReco() +rdo2aod.slices = ['muon','electron','tau','bjet'] +rdo2aod.max_events = 4000 +rdo2aod.threads = 8 +rdo2aod.concurrent_events = 8 +rdo2aod.perfmon = False +rdo2aod.timeout = 18*3600 +rdo2aod.input = 'ttbar_pu80_mc15' # defined in TrigValTools/share/TrigValInputs.json + + +test = Test.Test() +test.art_type = 'grid' +if (not exclude): + test.exec_steps = [rdo2aod] + test.exec_steps.append(TrigInDetAna()) # Run analysis to produce TrkNtuple + test.check_steps = CheckSteps.default_check_steps(test) + +# Run Tidardict +if ((not exclude) or postproc ): + rdict = TrigInDetdictStep() + rdict.args='TIDAdata-run3-offline.dat -r Offline -f data-hists.root -b Test_bin.dat ' + test.check_steps.append(rdict) + + +# Now the comparitor steps +comp=TrigInDetCompStep('Comp_L2muon','L2','muon') +comp.test='ttbar' +test.check_steps.append(comp) + + +comp2=TrigInDetCompStep('Comp_EFmuon','EF','muon') +comp2.test='ttbar' +test.check_steps.append(comp2) + + +comp3=TrigInDetCompStep('Comp_L2bjet','L2','bjet') +comp3.test='ttbar' +test.check_steps.append(comp3) + +comp4=TrigInDetCompStep('Comp_EFbjet','EF','bjet') +comp4.test='ttbar' +test.check_steps.append(comp4) + +comp5=TrigInDetCompStep('Comp_L2tau','L2','tau') +comp5.test='ttbar' +test.check_steps.append(comp5) + +comp6=TrigInDetCompStep('Comp_EFtau','EF','tau') +comp6.test='ttbar' +test.check_steps.append(comp6) + +comp7=TrigInDetCompStep('Comp_L2ele','L2','electron') +comp7.test='ttbar' +test.check_steps.append(comp7) + +comp8=TrigInDetCompStep('Comp_EFele','EF','electron') +comp8.test='ttbar' +test.check_steps.append(comp8) + +comp9=TrigInDetCompStep('Comp_L2FS','L2','FS') +comp9.test='ttbar' +test.check_steps.append(comp9) + +# CPU cost steps +cpucost=TrigInDetCpuCostStep('CpuCostStep1', ftf_times=False) +test.check_steps.append(cpucost) + +cpucost2=TrigInDetCpuCostStep('CpuCostStep2') +test.check_steps.append(cpucost2) + +import sys +sys.exit(test.run()) diff --git a/Trigger/TrigValidation/TrigValTools/share/TrigValInputs.json b/Trigger/TrigValidation/TrigValTools/share/TrigValInputs.json index e4a705f1de379637c1630a2730c31a4df8a3b003..9cd4528a0e8d1decc6d3c9ffef72843e5b6ac2ad 100644 --- a/Trigger/TrigValidation/TrigValTools/share/TrigValInputs.json +++ b/Trigger/TrigValidation/TrigValTools/share/TrigValInputs.json @@ -84,6 +84,15 @@ "/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TriggerTest/mc16_13TeV.410470.PhPy8EG_A14_ttbar_hdamp258p75_nonallhad.recon.RDO.e6337_e5984_s3126_r10201/RDO.13232200._000020.pool.root.1" ] }, + "ttbar_pu80_mc15": { + "source": "mc", + "format": "RDO", + "paths": [ + "/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigInDetValidation/samples/mc15_13TeV.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.recon.RDO.e3698_s2608_s2183_r7195/RDO.06752780._000001.pool.root.1", + "/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigInDetValidation/samples/mc15_13TeV.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.recon.RDO.e3698_s2608_s2183_r7195/RDO.06752780._000002.pool.root.1", + "/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigInDetValidation/samples/mc15_13TeV.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.recon.RDO.e3698_s2608_s2183_r7195/RDO.06752780._000003.pool.root.1" + ] + }, "ttbar_rel21": { "source": "mc", "format": "RDO", diff --git a/Trigger/TrigValidation/TriggerTest/share/ref_data_v1Dev_build.ref b/Trigger/TrigValidation/TriggerTest/share/ref_data_v1Dev_build.ref index ae0282f4a81f034c08dc2aaea694ef744af42661..9dde7711ff7414d562b3ef6f23858361a7ad9dc1 100644 --- a/Trigger/TrigValidation/TriggerTest/share/ref_data_v1Dev_build.ref +++ b/Trigger/TrigValidation/TriggerTest/share/ref_data_v1Dev_build.ref @@ -1,12 +1,12 @@ TrigSignatureMoniMT INFO HLT_10j40_pf_subresjesgscIS_ftf_L14J15 #3575805394 -TrigSignatureMoniMT INFO -- #3575805394 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #3575805394 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #3575805394 Events 20 20 0 0 0 0 0 0 0 0 0 0 7 0 - - 0 +TrigSignatureMoniMT INFO -- #3575805394 Features 0 0 0 0 0 0 0 0 0 0 7 0 - - TrigSignatureMoniMT INFO HLT_10j40_subjesIS_L14J15 #2760204981 TrigSignatureMoniMT INFO -- #2760204981 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 TrigSignatureMoniMT INFO -- #2760204981 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_10j40_subresjesgscIS_ftf_L14J15 #3568675904 -TrigSignatureMoniMT INFO -- #3568675904 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #3568675904 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #3568675904 Events 20 20 0 0 0 0 0 0 0 0 0 0 7 0 - - 0 +TrigSignatureMoniMT INFO -- #3568675904 Features 0 0 0 0 0 0 0 0 0 0 7 0 - - TrigSignatureMoniMT INFO HLT_2e12_lhloose_mu10_L12EM8VH_MU10 #2518246928 TrigSignatureMoniMT INFO -- #2518246928 Events 20 20 0 0 0 0 0 0 0 0 0 - - - - - 0 TrigSignatureMoniMT INFO -- #2518246928 Features 0 0 0 0 0 0 0 0 0 - - - - - @@ -56,11 +56,11 @@ TrigSignatureMoniMT INFO HLT_2g50_loose_L12EM20V TrigSignatureMoniMT INFO -- #3590373854 Events 20 20 0 0 0 0 - - - - - - - - - - 0 TrigSignatureMoniMT INFO -- #3590373854 Features 0 0 0 0 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_2j330_a10sd_csskpf_jes_ftf_35smcINF_L1J100 #3495282139 -TrigSignatureMoniMT INFO -- #3495282139 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #3495282139 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #3495282139 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 0 - - 0 +TrigSignatureMoniMT INFO -- #3495282139 Features 0 0 0 0 0 0 0 0 0 0 0 0 - - TrigSignatureMoniMT INFO HLT_2j330_a10sd_csskpf_nojcalib_ftf_35smcINF_L1J100 #2680976232 -TrigSignatureMoniMT INFO -- #2680976232 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2680976232 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2680976232 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 0 - - 0 +TrigSignatureMoniMT INFO -- #2680976232 Features 0 0 0 0 0 0 0 0 0 0 0 0 - - TrigSignatureMoniMT INFO HLT_2j330_a10t_lcw_jes_35smcINF_L1J100 #1295975955 TrigSignatureMoniMT INFO -- #1295975955 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 TrigSignatureMoniMT INFO -- #1295975955 Features 0 0 0 0 0 0 0 0 0 0 0 - - - @@ -119,11 +119,11 @@ TrigSignatureMoniMT INFO HLT_3j200_L1J100 #21994 TrigSignatureMoniMT INFO -- #2199422919 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 TrigSignatureMoniMT INFO -- #2199422919 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_3j200_pf_subresjesgscIS_ftf_L1J100 #794428037 -TrigSignatureMoniMT INFO -- #794428037 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #794428037 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #794428037 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 0 - - 0 +TrigSignatureMoniMT INFO -- #794428037 Features 0 0 0 0 0 0 0 0 0 0 0 0 - - TrigSignatureMoniMT INFO HLT_3j200_subresjesgscIS_ftf_L1J100 #1801834652 -TrigSignatureMoniMT INFO -- #1801834652 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #1801834652 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #1801834652 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 0 - - 0 +TrigSignatureMoniMT INFO -- #1801834652 Features 0 0 0 0 0 0 0 0 0 0 0 0 - - TrigSignatureMoniMT INFO HLT_3mu6_L13MU6 #1832399408 TrigSignatureMoniMT INFO -- #1832399408 Events 20 20 0 0 0 0 0 0 0 0 0 - - - - - 0 TrigSignatureMoniMT INFO -- #1832399408 Features 0 0 0 0 0 0 0 0 0 - - - - - @@ -134,14 +134,14 @@ TrigSignatureMoniMT INFO HLT_3mu8_msonly_L13MU6 TrigSignatureMoniMT INFO -- #424835335 Events 20 20 0 0 0 0 0 0 0 0 - - - - - - 0 TrigSignatureMoniMT INFO -- #424835335 Features 0 0 0 0 0 0 0 0 - - - - - - TrigSignatureMoniMT INFO HLT_4j120_pf_subresjesgscIS_ftf_L13J50 #1755129033 -TrigSignatureMoniMT INFO -- #1755129033 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #1755129033 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #1755129033 Events 20 20 0 0 0 0 0 0 0 0 0 0 2 0 - - 0 +TrigSignatureMoniMT INFO -- #1755129033 Features 0 0 0 0 0 0 0 0 0 0 2 0 - - TrigSignatureMoniMT INFO HLT_4j120_subjesIS_L13J50 #3722303680 TrigSignatureMoniMT INFO -- #3722303680 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 TrigSignatureMoniMT INFO -- #3722303680 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_4j120_subresjesgscIS_ftf_L13J50 #91006165 -TrigSignatureMoniMT INFO -- #91006165 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #91006165 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #91006165 Events 20 20 0 0 0 0 0 0 0 0 0 0 2 0 - - 0 +TrigSignatureMoniMT INFO -- #91006165 Features 0 0 0 0 0 0 0 0 0 0 2 0 - - TrigSignatureMoniMT INFO HLT_4mu4_L14MU4 #1834383636 TrigSignatureMoniMT INFO -- #1834383636 Events 20 20 0 0 0 0 0 0 0 0 0 - - - - - 0 TrigSignatureMoniMT INFO -- #1834383636 Features 0 0 0 0 0 0 0 0 0 - - - - - @@ -149,47 +149,47 @@ TrigSignatureMoniMT INFO HLT_5j70_0eta240_L14J20 TrigSignatureMoniMT INFO -- #1175391812 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 TrigSignatureMoniMT INFO -- #1175391812 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_5j70_pf_subresjesgscIS_ftf_0eta240_L14J15 #4189027854 -TrigSignatureMoniMT INFO -- #4189027854 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #4189027854 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #4189027854 Events 20 20 0 0 0 0 0 0 0 0 0 0 7 0 - - 0 +TrigSignatureMoniMT INFO -- #4189027854 Features 0 0 0 0 0 0 0 0 0 0 7 0 - - TrigSignatureMoniMT INFO HLT_5j70_subresjesgscIS_ftf_0eta240_L14J15 #819918597 -TrigSignatureMoniMT INFO -- #819918597 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #819918597 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #819918597 Events 20 20 0 0 0 0 0 0 0 0 0 0 7 0 - - 0 +TrigSignatureMoniMT INFO -- #819918597 Features 0 0 0 0 0 0 0 0 0 0 7 0 - - TrigSignatureMoniMT INFO HLT_5j85_pf_subresjesgscIS_ftf_L14J15 #4208121018 -TrigSignatureMoniMT INFO -- #4208121018 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #4208121018 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #4208121018 Events 20 20 0 0 0 0 0 0 0 0 0 0 7 0 - - 0 +TrigSignatureMoniMT INFO -- #4208121018 Features 0 0 0 0 0 0 0 0 0 0 7 0 - - TrigSignatureMoniMT INFO HLT_5j85_subjesIS_L14J15 #2745094401 TrigSignatureMoniMT INFO -- #2745094401 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 TrigSignatureMoniMT INFO -- #2745094401 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_5j85_subresjesgscIS_ftf_L14J15 #1148892499 -TrigSignatureMoniMT INFO -- #1148892499 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #1148892499 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #1148892499 Events 20 20 0 0 0 0 0 0 0 0 0 0 7 0 - - 0 +TrigSignatureMoniMT INFO -- #1148892499 Features 0 0 0 0 0 0 0 0 0 0 7 0 - - TrigSignatureMoniMT INFO HLT_6j55_pf_subresjesgscIS_ftf_0eta240_L14J15 #1526259867 -TrigSignatureMoniMT INFO -- #1526259867 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #1526259867 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #1526259867 Events 20 20 0 0 0 0 0 0 0 0 0 0 7 0 - - 0 +TrigSignatureMoniMT INFO -- #1526259867 Features 0 0 0 0 0 0 0 0 0 0 7 0 - - TrigSignatureMoniMT INFO HLT_6j55_subjesIS_0eta240_L14J15 #68179418 TrigSignatureMoniMT INFO -- #68179418 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 TrigSignatureMoniMT INFO -- #68179418 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_6j55_subresjesgscIS_ftf_0eta240_L14J15 #1068073241 -TrigSignatureMoniMT INFO -- #1068073241 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #1068073241 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #1068073241 Events 20 20 0 0 0 0 0 0 0 0 0 0 7 0 - - 0 +TrigSignatureMoniMT INFO -- #1068073241 Features 0 0 0 0 0 0 0 0 0 0 7 0 - - TrigSignatureMoniMT INFO HLT_6j70_pf_subresjesgscIS_ftf_L14J15 #1755772565 -TrigSignatureMoniMT INFO -- #1755772565 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #1755772565 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #1755772565 Events 20 20 0 0 0 0 0 0 0 0 0 0 7 0 - - 0 +TrigSignatureMoniMT INFO -- #1755772565 Features 0 0 0 0 0 0 0 0 0 0 7 0 - - TrigSignatureMoniMT INFO HLT_6j70_subjesIS_L14J15 #1003115860 TrigSignatureMoniMT INFO -- #1003115860 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 TrigSignatureMoniMT INFO -- #1003115860 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_6j70_subresjesgscIS_ftf_L14J15 #59957514 -TrigSignatureMoniMT INFO -- #59957514 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #59957514 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #59957514 Events 20 20 0 0 0 0 0 0 0 0 0 0 7 0 - - 0 +TrigSignatureMoniMT INFO -- #59957514 Features 0 0 0 0 0 0 0 0 0 0 7 0 - - TrigSignatureMoniMT INFO HLT_7j45_pf_subresjesgscIS_ftf_L14J15 #2701381398 -TrigSignatureMoniMT INFO -- #2701381398 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2701381398 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2701381398 Events 20 20 0 0 0 0 0 0 0 0 0 0 7 0 - - 0 +TrigSignatureMoniMT INFO -- #2701381398 Features 0 0 0 0 0 0 0 0 0 0 7 0 - - TrigSignatureMoniMT INFO HLT_7j45_subjesIS_L14J15 #2617173782 TrigSignatureMoniMT INFO -- #2617173782 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 TrigSignatureMoniMT INFO -- #2617173782 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_7j45_subresjesgscIS_ftf_L14J15 #2928962349 -TrigSignatureMoniMT INFO -- #2928962349 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2928962349 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2928962349 Events 20 20 0 0 0 0 0 0 0 0 0 0 7 0 - - 0 +TrigSignatureMoniMT INFO -- #2928962349 Features 0 0 0 0 0 0 0 0 0 0 7 0 - - TrigSignatureMoniMT INFO HLT_JetDS_j0_L1J100 #3302698716 TrigSignatureMoniMT INFO -- #3302698716 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 TrigSignatureMoniMT INFO -- #3302698716 Features 0 0 0 0 0 0 0 0 0 0 0 0 0 - @@ -413,8 +413,8 @@ TrigSignatureMoniMT INFO HLT_j0_vbenfSEP30etSEP3 TrigSignatureMoniMT INFO -- #4034799151 Events 20 20 0 0 0 0 0 0 0 0 0 0 2 - - - 2 TrigSignatureMoniMT INFO -- #4034799151 Features 0 0 0 0 0 0 0 0 0 0 24 - - - TrigSignatureMoniMT INFO HLT_j225_subjesgscIS_ftf_bmv2c1040_split_L1J100 #219711753 -TrigSignatureMoniMT INFO -- #219711753 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 0 - - 0 -TrigSignatureMoniMT INFO -- #219711753 Features 0 0 0 0 0 0 0 0 0 0 0 0 - - +TrigSignatureMoniMT INFO -- #219711753 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 +TrigSignatureMoniMT INFO -- #219711753 Features 0 0 0 0 0 0 0 0 0 0 0 0 0 - TrigSignatureMoniMT INFO HLT_j260_320eta490_L1J20 #3084792704 TrigSignatureMoniMT INFO -- #3084792704 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 TrigSignatureMoniMT INFO -- #3084792704 Features 0 0 0 0 0 0 0 0 0 0 0 - - - @@ -422,104 +422,113 @@ TrigSignatureMoniMT INFO HLT_j260_320eta490_L1J7 TrigSignatureMoniMT INFO -- #3769257182 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 TrigSignatureMoniMT INFO -- #3769257182 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j275_pf_subjesgscIS_ftf_bdl1r60_split_L1J100 #2912155644 -TrigSignatureMoniMT INFO -- #2912155644 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2912155644 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2912155644 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 0 - - 0 +TrigSignatureMoniMT INFO -- #2912155644 Features 0 0 0 0 0 0 0 0 0 0 0 0 - - TrigSignatureMoniMT INFO HLT_j275_pf_subjesgscIS_ftf_boffperf_split_L1J100 #9543810 -TrigSignatureMoniMT INFO -- #9543810 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 0 - - 0 -TrigSignatureMoniMT INFO -- #9543810 Features 0 0 0 0 0 0 0 0 0 0 0 0 - - +TrigSignatureMoniMT INFO -- #9543810 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 +TrigSignatureMoniMT INFO -- #9543810 Features 0 0 0 0 0 0 0 0 0 0 0 0 0 - TrigSignatureMoniMT INFO HLT_j275_subjesgscIS_ftf_bdl1r60_split_L1J100 #2807668578 -TrigSignatureMoniMT INFO -- #2807668578 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2807668578 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2807668578 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 0 - - 0 +TrigSignatureMoniMT INFO -- #2807668578 Features 0 0 0 0 0 0 0 0 0 0 0 0 - - TrigSignatureMoniMT INFO HLT_j275_subjesgscIS_ftf_bmv2c1060_split_L1J100 #710546402 -TrigSignatureMoniMT INFO -- #710546402 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 0 - - 0 -TrigSignatureMoniMT INFO -- #710546402 Features 0 0 0 0 0 0 0 0 0 0 0 0 - - +TrigSignatureMoniMT INFO -- #710546402 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 +TrigSignatureMoniMT INFO -- #710546402 Features 0 0 0 0 0 0 0 0 0 0 0 0 0 - TrigSignatureMoniMT INFO HLT_j275_subjesgscIS_ftf_boffperf_split_L1J100 #540369970 -TrigSignatureMoniMT INFO -- #540369970 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 0 - - 0 -TrigSignatureMoniMT INFO -- #540369970 Features 0 0 0 0 0 0 0 0 0 0 0 0 - - +TrigSignatureMoniMT INFO -- #540369970 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 +TrigSignatureMoniMT INFO -- #540369970 Features 0 0 0 0 0 0 0 0 0 0 0 0 0 - TrigSignatureMoniMT INFO HLT_j300_pf_subjesgscIS_ftf_bdl1r70_split_L1J100 #2576796343 -TrigSignatureMoniMT INFO -- #2576796343 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2576796343 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2576796343 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 0 - - 0 +TrigSignatureMoniMT INFO -- #2576796343 Features 0 0 0 0 0 0 0 0 0 0 0 0 - - TrigSignatureMoniMT INFO HLT_j300_subjesgscIS_ftf_bdl1r70_split_L1J100 #2952175162 -TrigSignatureMoniMT INFO -- #2952175162 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2952175162 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2952175162 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 0 - - 0 +TrigSignatureMoniMT INFO -- #2952175162 Features 0 0 0 0 0 0 0 0 0 0 0 0 - - TrigSignatureMoniMT INFO HLT_j300_subjesgscIS_ftf_bmv2c1070_split_L1J100 #2074989613 -TrigSignatureMoniMT INFO -- #2074989613 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 0 - - 0 -TrigSignatureMoniMT INFO -- #2074989613 Features 0 0 0 0 0 0 0 0 0 0 0 0 - - +TrigSignatureMoniMT INFO -- #2074989613 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 +TrigSignatureMoniMT INFO -- #2074989613 Features 0 0 0 0 0 0 0 0 0 0 0 0 0 - TrigSignatureMoniMT INFO HLT_j360_pf_subjesgscIS_ftf_bdl1r77_split_L1J100 #3049708671 -TrigSignatureMoniMT INFO -- #3049708671 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #3049708671 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #3049708671 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 0 - - 0 +TrigSignatureMoniMT INFO -- #3049708671 Features 0 0 0 0 0 0 0 0 0 0 0 0 - - TrigSignatureMoniMT INFO HLT_j360_subjesgscIS_ftf_bdl1r77_split_L1J100 #1563453863 -TrigSignatureMoniMT INFO -- #1563453863 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #1563453863 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #1563453863 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 0 - - 0 +TrigSignatureMoniMT INFO -- #1563453863 Features 0 0 0 0 0 0 0 0 0 0 0 0 - - TrigSignatureMoniMT INFO HLT_j360_subjesgscIS_ftf_bmv2c1077_split_L1J100 #4176355792 -TrigSignatureMoniMT INFO -- #4176355792 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 0 - - 0 -TrigSignatureMoniMT INFO -- #4176355792 Features 0 0 0 0 0 0 0 0 0 0 0 0 - - +TrigSignatureMoniMT INFO -- #4176355792 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 +TrigSignatureMoniMT INFO -- #4176355792 Features 0 0 0 0 0 0 0 0 0 0 0 0 0 - TrigSignatureMoniMT INFO HLT_j420_L1J100 #2659902019 TrigSignatureMoniMT INFO -- #2659902019 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 TrigSignatureMoniMT INFO -- #2659902019 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j420_pf_subresjesgscIS_ftf_L1J100 #3936932891 -TrigSignatureMoniMT INFO -- #3936932891 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #3936932891 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #3936932891 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 0 - - 0 +TrigSignatureMoniMT INFO -- #3936932891 Features 0 0 0 0 0 0 0 0 0 0 0 0 - - TrigSignatureMoniMT INFO HLT_j420_subresjesgscIS_ftf_L1J100 #2477128298 -TrigSignatureMoniMT INFO -- #2477128298 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2477128298 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2477128298 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 0 - - 0 +TrigSignatureMoniMT INFO -- #2477128298 Features 0 0 0 0 0 0 0 0 0 0 0 0 - - TrigSignatureMoniMT INFO HLT_j45_L1J15 #1364976160 TrigSignatureMoniMT INFO -- #1364976160 Events 20 20 0 0 0 0 0 0 0 0 0 0 6 - - - 6 TrigSignatureMoniMT INFO -- #1364976160 Features 0 0 0 0 0 0 0 0 0 0 6 - - - TrigSignatureMoniMT INFO HLT_j45_csskpf_nojcalib_ftf_L1J20 #2528888897 -TrigSignatureMoniMT INFO -- #2528888897 Events 20 20 0 0 0 0 0 0 0 0 0 0 3 - - - 3 -TrigSignatureMoniMT INFO -- #2528888897 Features 0 0 0 0 0 0 0 0 0 0 3 - - - +TrigSignatureMoniMT INFO -- #2528888897 Events 20 20 0 0 0 0 0 0 0 0 0 0 5 3 - - 3 +TrigSignatureMoniMT INFO -- #2528888897 Features 0 0 0 0 0 0 0 0 0 0 5 3 - - TrigSignatureMoniMT INFO HLT_j45_cssktc_nojcalib_L1J20 #3295122398 TrigSignatureMoniMT INFO -- #3295122398 Events 20 20 0 0 0 0 0 0 0 0 0 0 3 - - - 3 TrigSignatureMoniMT INFO -- #3295122398 Features 0 0 0 0 0 0 0 0 0 0 3 - - - TrigSignatureMoniMT INFO HLT_j45_ftf_L1J15 #868405538 -TrigSignatureMoniMT INFO -- #868405538 Events 20 20 0 0 0 0 0 0 0 0 0 0 7 - - - 7 -TrigSignatureMoniMT INFO -- #868405538 Features 0 0 0 0 0 0 0 0 0 0 7 - - - +TrigSignatureMoniMT INFO -- #868405538 Events 20 20 0 0 0 0 0 0 0 0 0 0 7 7 - - 7 +TrigSignatureMoniMT INFO -- #868405538 Features 0 0 0 0 0 0 0 0 0 0 7 7 - - +TrigSignatureMoniMT INFO HLT_j45_ftf_preselj45_L1J20 #526860976 +TrigSignatureMoniMT INFO -- #526860976 Events 20 20 0 0 0 0 0 0 0 0 0 0 5 5 - - 5 +TrigSignatureMoniMT INFO -- #526860976 Features 0 0 0 0 0 0 0 0 0 0 5 5 - - TrigSignatureMoniMT INFO HLT_j45_nojcalib_L1J20 #2042444294 TrigSignatureMoniMT INFO -- #2042444294 Events 20 20 0 0 0 0 0 0 0 0 0 0 3 - - - 3 TrigSignatureMoniMT INFO -- #2042444294 Features 0 0 0 0 0 0 0 0 0 0 3 - - - TrigSignatureMoniMT INFO HLT_j45_pf_ftf_L1J20 #3679554988 -TrigSignatureMoniMT INFO -- #3679554988 Events 20 20 0 0 0 0 0 0 0 0 0 0 5 - - - 5 -TrigSignatureMoniMT INFO -- #3679554988 Features 0 0 0 0 0 0 0 0 0 0 5 - - - +TrigSignatureMoniMT INFO -- #3679554988 Events 20 20 0 0 0 0 0 0 0 0 0 0 5 5 - - 5 +TrigSignatureMoniMT INFO -- #3679554988 Features 0 0 0 0 0 0 0 0 0 0 5 5 - - +TrigSignatureMoniMT INFO HLT_j45_pf_ftf_preselj45_L1J20 #650158432 +TrigSignatureMoniMT INFO -- #650158432 Events 20 20 0 0 0 0 0 0 0 0 0 0 5 5 - - 5 +TrigSignatureMoniMT INFO -- #650158432 Features 0 0 0 0 0 0 0 0 0 0 5 5 - - TrigSignatureMoniMT INFO HLT_j45_pf_nojcalib_ftf_L1J20 #4202219904 -TrigSignatureMoniMT INFO -- #4202219904 Events 20 20 0 0 0 0 0 0 0 0 0 0 3 - - - 3 -TrigSignatureMoniMT INFO -- #4202219904 Features 0 0 0 0 0 0 0 0 0 0 3 - - - +TrigSignatureMoniMT INFO -- #4202219904 Events 20 20 0 0 0 0 0 0 0 0 0 0 5 3 - - 3 +TrigSignatureMoniMT INFO -- #4202219904 Features 0 0 0 0 0 0 0 0 0 0 5 3 - - TrigSignatureMoniMT INFO HLT_j45_pf_subjesgscIS_ftf_L1J20 #2187173741 -TrigSignatureMoniMT INFO -- #2187173741 Events 20 20 0 0 0 0 0 0 0 0 0 0 5 - - - 5 -TrigSignatureMoniMT INFO -- #2187173741 Features 0 0 0 0 0 0 0 0 0 0 5 - - - +TrigSignatureMoniMT INFO -- #2187173741 Events 20 20 0 0 0 0 0 0 0 0 0 0 5 5 - - 5 +TrigSignatureMoniMT INFO -- #2187173741 Features 0 0 0 0 0 0 0 0 0 0 5 5 - - TrigSignatureMoniMT INFO HLT_j45_pf_subjesgscIS_ftf_bdl1r70_split_L1J20 #4239752847 -TrigSignatureMoniMT INFO -- #4239752847 Events 20 20 0 0 0 0 0 0 0 0 0 0 5 - - - 5 -TrigSignatureMoniMT INFO -- #4239752847 Features 0 0 0 0 0 0 0 0 0 0 5 - - - +TrigSignatureMoniMT INFO -- #4239752847 Events 20 20 0 0 0 0 0 0 0 0 0 0 5 5 - - 5 +TrigSignatureMoniMT INFO -- #4239752847 Features 0 0 0 0 0 0 0 0 0 0 5 5 - - TrigSignatureMoniMT INFO HLT_j45_pf_subjesgscIS_ftf_boffperf_split_L1J20 #2546763674 -TrigSignatureMoniMT INFO -- #2546763674 Events 20 20 0 0 0 0 0 0 0 0 0 0 5 5 - - 5 -TrigSignatureMoniMT INFO -- #2546763674 Features 0 0 0 0 0 0 0 0 0 0 5 5 - - +TrigSignatureMoniMT INFO -- #2546763674 Events 20 20 0 0 0 0 0 0 0 0 0 0 5 5 5 - 5 +TrigSignatureMoniMT INFO -- #2546763674 Features 0 0 0 0 0 0 0 0 0 0 5 5 5 - TrigSignatureMoniMT INFO HLT_j45_sktc_nojcalib_L1J20 #1542468090 TrigSignatureMoniMT INFO -- #1542468090 Events 20 20 0 0 0 0 0 0 0 0 0 0 3 - - - 3 TrigSignatureMoniMT INFO -- #1542468090 Features 0 0 0 0 0 0 0 0 0 0 3 - - - +TrigSignatureMoniMT INFO HLT_j45_subjesIS_ftf_preselj45_L1J20 #3647626880 +TrigSignatureMoniMT INFO -- #3647626880 Events 20 20 0 0 0 0 0 0 0 0 0 0 5 5 - - 5 +TrigSignatureMoniMT INFO -- #3647626880 Features 0 0 0 0 0 0 0 0 0 0 5 5 - - TrigSignatureMoniMT INFO HLT_j45_subjesgscIS_ftf_011jvt_L1J15 #266323220 -TrigSignatureMoniMT INFO -- #266323220 Events 20 20 0 0 0 0 0 0 0 0 0 0 5 - - - 5 -TrigSignatureMoniMT INFO -- #266323220 Features 0 0 0 0 0 0 0 0 0 0 5 - - - +TrigSignatureMoniMT INFO -- #266323220 Events 20 20 0 0 0 0 0 0 0 0 0 0 7 5 - - 5 +TrigSignatureMoniMT INFO -- #266323220 Features 0 0 0 0 0 0 0 0 0 0 7 5 - - TrigSignatureMoniMT INFO HLT_j45_subjesgscIS_ftf_015jvt_L1J15 #3102941497 -TrigSignatureMoniMT INFO -- #3102941497 Events 20 20 0 0 0 0 0 0 0 0 0 0 5 - - - 5 -TrigSignatureMoniMT INFO -- #3102941497 Features 0 0 0 0 0 0 0 0 0 0 5 - - - +TrigSignatureMoniMT INFO -- #3102941497 Events 20 20 0 0 0 0 0 0 0 0 0 0 7 5 - - 5 +TrigSignatureMoniMT INFO -- #3102941497 Features 0 0 0 0 0 0 0 0 0 0 7 5 - - TrigSignatureMoniMT INFO HLT_j45_subjesgscIS_ftf_059jvt_L1J15 #2237035634 -TrigSignatureMoniMT INFO -- #2237035634 Events 20 20 0 0 0 0 0 0 0 0 0 0 5 - - - 5 -TrigSignatureMoniMT INFO -- #2237035634 Features 0 0 0 0 0 0 0 0 0 0 5 - - - +TrigSignatureMoniMT INFO -- #2237035634 Events 20 20 0 0 0 0 0 0 0 0 0 0 7 5 - - 5 +TrigSignatureMoniMT INFO -- #2237035634 Features 0 0 0 0 0 0 0 0 0 0 7 5 - - TrigSignatureMoniMT INFO HLT_j45_subjesgscIS_ftf_L1J15 #1960278431 -TrigSignatureMoniMT INFO -- #1960278431 Events 20 20 0 0 0 0 0 0 0 0 0 0 7 - - - 7 -TrigSignatureMoniMT INFO -- #1960278431 Features 0 0 0 0 0 0 0 0 0 0 7 - - - +TrigSignatureMoniMT INFO -- #1960278431 Events 20 20 0 0 0 0 0 0 0 0 0 0 7 7 - - 7 +TrigSignatureMoniMT INFO -- #1960278431 Features 0 0 0 0 0 0 0 0 0 0 7 7 - - TrigSignatureMoniMT INFO HLT_j45_subjesgscIS_ftf_bdl1r70_split_L1J20 #2947439578 -TrigSignatureMoniMT INFO -- #2947439578 Events 20 20 0 0 0 0 0 0 0 0 0 0 5 - - - 5 -TrigSignatureMoniMT INFO -- #2947439578 Features 0 0 0 0 0 0 0 0 0 0 5 - - - +TrigSignatureMoniMT INFO -- #2947439578 Events 20 20 0 0 0 0 0 0 0 0 0 0 5 5 - - 5 +TrigSignatureMoniMT INFO -- #2947439578 Features 0 0 0 0 0 0 0 0 0 0 5 5 - - TrigSignatureMoniMT INFO HLT_j45_subjesgscIS_ftf_bmv2c1070_split_L1J20 #980453000 -TrigSignatureMoniMT INFO -- #980453000 Events 20 20 0 0 0 0 0 0 0 0 0 0 5 1 - - 1 -TrigSignatureMoniMT INFO -- #980453000 Features 0 0 0 0 0 0 0 0 0 0 5 1 - - +TrigSignatureMoniMT INFO -- #980453000 Events 20 20 0 0 0 0 0 0 0 0 0 0 5 5 1 - 1 +TrigSignatureMoniMT INFO -- #980453000 Features 0 0 0 0 0 0 0 0 0 0 5 5 1 - TrigSignatureMoniMT INFO HLT_j45_subjesgscIS_ftf_boffperf_split_L1J20 #3374916154 -TrigSignatureMoniMT INFO -- #3374916154 Events 20 20 0 0 0 0 0 0 0 0 0 0 5 5 - - 5 -TrigSignatureMoniMT INFO -- #3374916154 Features 0 0 0 0 0 0 0 0 0 0 5 5 - - +TrigSignatureMoniMT INFO -- #3374916154 Events 20 20 0 0 0 0 0 0 0 0 0 0 5 5 5 - 5 +TrigSignatureMoniMT INFO -- #3374916154 Features 0 0 0 0 0 0 0 0 0 0 5 5 5 - TrigSignatureMoniMT INFO HLT_j45_subresjesgscIS_ftf_L1J15 #1213239619 -TrigSignatureMoniMT INFO -- #1213239619 Events 20 20 0 0 0 0 0 0 0 0 0 0 7 - - - 7 -TrigSignatureMoniMT INFO -- #1213239619 Features 0 0 0 0 0 0 0 0 0 0 7 - - - +TrigSignatureMoniMT INFO -- #1213239619 Events 20 20 0 0 0 0 0 0 0 0 0 0 7 7 - - 7 +TrigSignatureMoniMT INFO -- #1213239619 Features 0 0 0 0 0 0 0 0 0 0 7 7 - - TrigSignatureMoniMT INFO HLT_j460_a10_lcw_subjes_L1J100 #3327656707 TrigSignatureMoniMT INFO -- #3327656707 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 TrigSignatureMoniMT INFO -- #3327656707 Features 0 0 0 0 0 0 0 0 0 0 0 - - - @@ -533,23 +542,23 @@ TrigSignatureMoniMT INFO HLT_j460_a10r_L1J20 #38 TrigSignatureMoniMT INFO -- #3875082669 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 TrigSignatureMoniMT INFO -- #3875082669 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j460_a10sd_csskpf_jes_ftf_35smcINF_L1J100 #3781128663 -TrigSignatureMoniMT INFO -- #3781128663 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #3781128663 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #3781128663 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 0 - - 0 +TrigSignatureMoniMT INFO -- #3781128663 Features 0 0 0 0 0 0 0 0 0 0 0 0 - - TrigSignatureMoniMT INFO HLT_j460_a10sd_csskpf_jes_ftf_L1J100 #1509950051 -TrigSignatureMoniMT INFO -- #1509950051 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #1509950051 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #1509950051 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 0 - - 0 +TrigSignatureMoniMT INFO -- #1509950051 Features 0 0 0 0 0 0 0 0 0 0 0 0 - - TrigSignatureMoniMT INFO HLT_j460_a10sd_csskpf_nojcalib_ftf_35smcINF_L1J100 #249842682 -TrigSignatureMoniMT INFO -- #249842682 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #249842682 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #249842682 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 0 - - 0 +TrigSignatureMoniMT INFO -- #249842682 Features 0 0 0 0 0 0 0 0 0 0 0 0 - - TrigSignatureMoniMT INFO HLT_j460_a10sd_csskpf_nojcalib_ftf_L1J100 #3452032818 -TrigSignatureMoniMT INFO -- #3452032818 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #3452032818 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #3452032818 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 0 - - 0 +TrigSignatureMoniMT INFO -- #3452032818 Features 0 0 0 0 0 0 0 0 0 0 0 0 - - TrigSignatureMoniMT INFO HLT_j460_a10sd_lcw_nojcalib_L1J100 #3093997295 TrigSignatureMoniMT INFO -- #3093997295 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 TrigSignatureMoniMT INFO -- #3093997295 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j460_a10sd_pf_nojcalib_ftf_L1J100 #2138269254 -TrigSignatureMoniMT INFO -- #2138269254 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2138269254 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2138269254 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 0 - - 0 +TrigSignatureMoniMT INFO -- #2138269254 Features 0 0 0 0 0 0 0 0 0 0 0 0 - - TrigSignatureMoniMT INFO HLT_j460_a10t_lcw_jes_30smcINF_L1J100 #2296827117 TrigSignatureMoniMT INFO -- #2296827117 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 TrigSignatureMoniMT INFO -- #2296827117 Features 0 0 0 0 0 0 0 0 0 0 0 - - - @@ -575,11 +584,11 @@ TrigSignatureMoniMT INFO HLT_j85_L1J20 #51047553 TrigSignatureMoniMT INFO -- #510475538 Events 20 20 0 0 0 0 0 0 0 0 0 0 3 - - - 3 TrigSignatureMoniMT INFO -- #510475538 Features 0 0 0 0 0 0 0 0 0 0 3 - - - TrigSignatureMoniMT INFO HLT_j85_ftf_L1J20 #877042532 -TrigSignatureMoniMT INFO -- #877042532 Events 20 20 0 0 0 0 0 0 0 0 0 0 3 - - - 3 -TrigSignatureMoniMT INFO -- #877042532 Features 0 0 0 0 0 0 0 0 0 0 3 - - - +TrigSignatureMoniMT INFO -- #877042532 Events 20 20 0 0 0 0 0 0 0 0 0 0 5 3 - - 3 +TrigSignatureMoniMT INFO -- #877042532 Features 0 0 0 0 0 0 0 0 0 0 5 3 - - TrigSignatureMoniMT INFO HLT_j85_pf_ftf_L1J20 #789444389 -TrigSignatureMoniMT INFO -- #789444389 Events 20 20 0 0 0 0 0 0 0 0 0 0 2 - - - 2 -TrigSignatureMoniMT INFO -- #789444389 Features 0 0 0 0 0 0 0 0 0 0 2 - - - +TrigSignatureMoniMT INFO -- #789444389 Events 20 20 0 0 0 0 0 0 0 0 0 0 5 2 - - 2 +TrigSignatureMoniMT INFO -- #789444389 Features 0 0 0 0 0 0 0 0 0 0 5 2 - - TrigSignatureMoniMT INFO HLT_mb_sptrk_L1RD0_FILLED #4097312640 TrigSignatureMoniMT INFO -- #4097312640 Events 20 20 20 19 - - - - - - - - - - - - 19 TrigSignatureMoniMT INFO -- #4097312640 Features 20 19 - - - - - - - - - - - - @@ -1046,32 +1055,32 @@ TrigSignatureMoniMT INFO HLT_unconvtrk120_isohpt TrigSignatureMoniMT INFO -- #3425113791 Events 20 20 0 0 0 0 0 0 0 0 0 0 9 - - - 9 TrigSignatureMoniMT INFO -- #3425113791 Features 0 0 0 0 0 0 0 0 0 0 13 - - - TrigSignatureMoniMT INFO HLT_xe100_cvfpufit_L1XE50 #2729083465 -TrigSignatureMoniMT INFO -- #2729083465 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2729083465 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2729083465 Events 20 20 0 0 0 0 0 0 0 0 0 0 20 0 - - 0 +TrigSignatureMoniMT INFO -- #2729083465 Features 0 0 0 0 0 0 0 0 0 0 20 0 - - TrigSignatureMoniMT INFO HLT_xe100_mht_L1XE50 #532175988 TrigSignatureMoniMT INFO -- #532175988 Events 20 20 0 0 0 0 0 0 0 0 0 0 1 - - - 1 TrigSignatureMoniMT INFO -- #532175988 Features 0 0 0 0 0 0 0 0 0 0 1 - - - TrigSignatureMoniMT INFO HLT_xe100_mhtpufit_em_subjesgscIS_L1XE50 #3054195458 -TrigSignatureMoniMT INFO -- #3054195458 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #3054195458 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #3054195458 Events 20 20 0 0 0 0 0 0 0 0 0 0 20 0 - - 0 +TrigSignatureMoniMT INFO -- #3054195458 Features 0 0 0 0 0 0 0 0 0 0 20 0 - - TrigSignatureMoniMT INFO HLT_xe100_mhtpufit_pf_subjesgscIS_L1XE50 #2614685150 -TrigSignatureMoniMT INFO -- #2614685150 Events 20 20 0 0 0 0 0 0 0 0 0 0 1 - - - 1 -TrigSignatureMoniMT INFO -- #2614685150 Features 0 0 0 0 0 0 0 0 0 0 1 - - - +TrigSignatureMoniMT INFO -- #2614685150 Events 20 20 0 0 0 0 0 0 0 0 0 0 20 1 - - 1 +TrigSignatureMoniMT INFO -- #2614685150 Features 0 0 0 0 0 0 0 0 0 0 20 1 - - TrigSignatureMoniMT INFO HLT_xe100_pfopufit_L1XE50 #2909333517 -TrigSignatureMoniMT INFO -- #2909333517 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2909333517 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2909333517 Events 20 20 0 0 0 0 0 0 0 0 0 0 20 0 - - 0 +TrigSignatureMoniMT INFO -- #2909333517 Features 0 0 0 0 0 0 0 0 0 0 20 0 - - TrigSignatureMoniMT INFO HLT_xe100_pfsum_L1XE50 #1890237897 -TrigSignatureMoniMT INFO -- #1890237897 Events 20 20 0 0 0 0 0 0 0 0 0 0 1 - - - 1 -TrigSignatureMoniMT INFO -- #1890237897 Features 0 0 0 0 0 0 0 0 0 0 1 - - - +TrigSignatureMoniMT INFO -- #1890237897 Events 20 20 0 0 0 0 0 0 0 0 0 0 20 1 - - 1 +TrigSignatureMoniMT INFO -- #1890237897 Features 0 0 0 0 0 0 0 0 0 0 20 1 - - TrigSignatureMoniMT INFO HLT_xe100_tcpufit_L1XE50 #2803198799 TrigSignatureMoniMT INFO -- #2803198799 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 TrigSignatureMoniMT INFO -- #2803198799 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_xe100_trkmht_L1XE50 #1055916731 -TrigSignatureMoniMT INFO -- #1055916731 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #1055916731 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #1055916731 Events 20 20 0 0 0 0 0 0 0 0 0 0 20 0 - - 0 +TrigSignatureMoniMT INFO -- #1055916731 Features 0 0 0 0 0 0 0 0 0 0 20 0 - - TrigSignatureMoniMT INFO HLT_xe100_trkmht_xe85_tcpufit_xe65_cell_L1XE50 #451622546 -TrigSignatureMoniMT INFO -- #451622546 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #451622546 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #451622546 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 0 - - 0 +TrigSignatureMoniMT INFO -- #451622546 Features 0 0 0 0 0 0 0 0 0 0 0 0 - - TrigSignatureMoniMT INFO HLT_xe110_mht_L1XE50 #3030733259 TrigSignatureMoniMT INFO -- #3030733259 Events 20 20 0 0 0 0 0 0 0 0 0 0 1 - - - 1 TrigSignatureMoniMT INFO -- #3030733259 Features 0 0 0 0 0 0 0 0 0 0 1 - - - @@ -1088,29 +1097,29 @@ TrigSignatureMoniMT INFO HLT_xe30_cell_xe30_tcpu TrigSignatureMoniMT INFO -- #3768353779 Events 20 20 0 0 0 0 0 0 0 0 0 0 3 - - - 3 TrigSignatureMoniMT INFO -- #3768353779 Features 0 0 0 0 0 0 0 0 0 0 3 - - - TrigSignatureMoniMT INFO HLT_xe30_cvfpufit_L1XE10 #3860749499 -TrigSignatureMoniMT INFO -- #3860749499 Events 20 20 0 0 0 0 0 0 0 0 0 0 6 - - - 6 -TrigSignatureMoniMT INFO -- #3860749499 Features 0 0 0 0 0 0 0 0 0 0 6 - - - +TrigSignatureMoniMT INFO -- #3860749499 Events 20 20 0 0 0 0 0 0 0 0 0 0 20 6 - - 6 +TrigSignatureMoniMT INFO -- #3860749499 Features 0 0 0 0 0 0 0 0 0 0 20 6 - - TrigSignatureMoniMT INFO HLT_xe30_mht_L1XE10 #3626903018 TrigSignatureMoniMT INFO -- #3626903018 Events 20 20 0 0 0 0 0 0 0 0 0 0 14 - - - 14 TrigSignatureMoniMT INFO -- #3626903018 Features 0 0 0 0 0 0 0 0 0 0 14 - - - TrigSignatureMoniMT INFO HLT_xe30_mhtpufit_em_subjesgscIS_L1XE10 #689201557 -TrigSignatureMoniMT INFO -- #689201557 Events 20 20 0 0 0 0 0 0 0 0 0 0 7 - - - 7 -TrigSignatureMoniMT INFO -- #689201557 Features 0 0 0 0 0 0 0 0 0 0 7 - - - +TrigSignatureMoniMT INFO -- #689201557 Events 20 20 0 0 0 0 0 0 0 0 0 0 20 5 - - 5 +TrigSignatureMoniMT INFO -- #689201557 Features 0 0 0 0 0 0 0 0 0 0 20 5 - - TrigSignatureMoniMT INFO HLT_xe30_mhtpufit_pf_subjesgscIS_L1XE10 #1886909707 -TrigSignatureMoniMT INFO -- #1886909707 Events 20 20 0 0 0 0 0 0 0 0 0 0 5 - - - 5 -TrigSignatureMoniMT INFO -- #1886909707 Features 0 0 0 0 0 0 0 0 0 0 5 - - - +TrigSignatureMoniMT INFO -- #1886909707 Events 20 20 0 0 0 0 0 0 0 0 0 0 20 5 - - 5 +TrigSignatureMoniMT INFO -- #1886909707 Features 0 0 0 0 0 0 0 0 0 0 20 5 - - TrigSignatureMoniMT INFO HLT_xe30_pfopufit_L1XE10 #2252641537 -TrigSignatureMoniMT INFO -- #2252641537 Events 20 20 0 0 0 0 0 0 0 0 0 0 4 - - - 4 -TrigSignatureMoniMT INFO -- #2252641537 Features 0 0 0 0 0 0 0 0 0 0 4 - - - +TrigSignatureMoniMT INFO -- #2252641537 Events 20 20 0 0 0 0 0 0 0 0 0 0 20 4 - - 4 +TrigSignatureMoniMT INFO -- #2252641537 Features 0 0 0 0 0 0 0 0 0 0 20 4 - - TrigSignatureMoniMT INFO HLT_xe30_pfsum_L1XE10 #998713382 -TrigSignatureMoniMT INFO -- #998713382 Events 20 20 0 0 0 0 0 0 0 0 0 0 7 - - - 7 -TrigSignatureMoniMT INFO -- #998713382 Features 0 0 0 0 0 0 0 0 0 0 7 - - - +TrigSignatureMoniMT INFO -- #998713382 Events 20 20 0 0 0 0 0 0 0 0 0 0 20 7 - - 7 +TrigSignatureMoniMT INFO -- #998713382 Features 0 0 0 0 0 0 0 0 0 0 20 7 - - TrigSignatureMoniMT INFO HLT_xe30_tcpufit_L1XE10 #1583719916 TrigSignatureMoniMT INFO -- #1583719916 Events 20 20 0 0 0 0 0 0 0 0 0 0 6 - - - 6 TrigSignatureMoniMT INFO -- #1583719916 Features 0 0 0 0 0 0 0 0 0 0 6 - - - TrigSignatureMoniMT INFO HLT_xe30_trkmht_L1XE10 #2468872349 -TrigSignatureMoniMT INFO -- #2468872349 Events 20 20 0 0 0 0 0 0 0 0 0 0 6 - - - 6 -TrigSignatureMoniMT INFO -- #2468872349 Features 0 0 0 0 0 0 0 0 0 0 6 - - - +TrigSignatureMoniMT INFO -- #2468872349 Events 20 20 0 0 0 0 0 0 0 0 0 0 20 6 - - 6 +TrigSignatureMoniMT INFO -- #2468872349 Features 0 0 0 0 0 0 0 0 0 0 20 6 - - TrigSignatureMoniMT INFO HLT_xe65_cell_L1XE50 #531141817 TrigSignatureMoniMT INFO -- #531141817 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 TrigSignatureMoniMT INFO -- #531141817 Features 0 0 0 0 0 0 0 0 0 0 0 - - - @@ -1127,5 +1136,5 @@ TrigSignatureMoniMT INFO HLT_xe80_tcpufit_unconv TrigSignatureMoniMT INFO -- #153760048 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 TrigSignatureMoniMT INFO -- #153760048 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_xe95_trkmht_xe90_tcpufit_xe75_cell_L1XE50 #302256132 -TrigSignatureMoniMT INFO -- #302256132 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #302256132 Features 0 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #302256132 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 0 - - 0 +TrigSignatureMoniMT INFO -- #302256132 Features 0 0 0 0 0 0 0 0 0 0 0 0 - - diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/CommonSequences/CaloSequenceSetup.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/CommonSequences/CaloSequenceSetup.py index 1243169090a2f42ab179437411a5017ae46c536b..e1d37d311f7fe293e090c0cf7117f6010605aec9 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/CommonSequences/CaloSequenceSetup.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/CommonSequences/CaloSequenceSetup.py @@ -4,6 +4,7 @@ from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import RecoFragmentsPool, MenuSequence from AthenaCommon.CFElements import seqAND, parOR from TrigEDMConfig.TriggerEDMRun3 import recordable +from .FullScanDefs import caloFSRoI class CaloMenuDefs(object): """Static Class to collect all string manipulations in Calo sequences """ @@ -48,7 +49,7 @@ def fastCaloMenuSequence(name, doRinger): HypoToolGen = TrigEgammaFastCaloHypoToolFromDict ) -def cellRecoSequence(flags, name="HLTCaloCellMakerFS", RoIs="HLT_FSJETRoI", outputName="CaloCellsFS"): +def cellRecoSequence(flags, name="HLTCaloCellMakerFS", RoIs=caloFSRoI, outputName="CaloCellsFS"): """ Produce the full scan cell collection """ if not RoIs: from L1Decoder.L1DecoderConfig import mapThresholdToL1RoICollection @@ -64,7 +65,7 @@ def cellRecoSequence(flags, name="HLTCaloCellMakerFS", RoIs="HLT_FSJETRoI", outp return parOR(name+"RecoSequence", [alg]), alg.CellsName def caloClusterRecoSequence( - flags, name="HLTCaloClusterMakerFS", RoIs="HLT_FSJETRoI", + flags, name="HLTCaloClusterMakerFS", RoIs=caloFSRoI, outputName="HLT_TopoCaloClustersFS"): """ Create the EM-level fullscan clusters """ cell_sequence, cells_name = RecoFragmentsPool.retrieve(cellRecoSequence, flags=None, RoIs=RoIs) @@ -78,7 +79,7 @@ def caloClusterRecoSequence( return parOR(name+"RecoSequence", [cell_sequence, alg]), alg.CaloClusters def LCCaloClusterRecoSequence( - flags, name="HLTCaloClusterCalibratorLCFS", RoIs="HLT_FSJETRoI", + flags, name="HLTCaloClusterCalibratorLCFS", RoIs=caloFSRoI, outputName="HLT_TopoCaloClustersLCFS"): """ Create the LC calibrated fullscan clusters diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/CommonSequences/FullScanDefs.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/CommonSequences/FullScanDefs.py new file mode 100644 index 0000000000000000000000000000000000000000..321d44889f9b6dc1848371210e696d3211b34959 --- /dev/null +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/CommonSequences/FullScanDefs.py @@ -0,0 +1,8 @@ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration + +""" Provide a place for definitions required by all fullscan signatures """ + +# RoI used for the full-scan calorimeter step +caloFSRoI = "FSJETMETCaloRoI" +# RoI used for the full-scan tracking step +trkFSRoI = "FSJETMETTrkRoI" diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Jet/JetChainConfiguration.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Jet/JetChainConfiguration.py index 5b54d52c4abb4062c21c7d99f5365ea531db1767..feef2d17126acd1e046da1dac8ed1ea10d20918c 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Jet/JetChainConfiguration.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Jet/JetChainConfiguration.py @@ -2,10 +2,11 @@ from AthenaCommon.Logging import logging logging.getLogger().info("Importing %s",__name__) -log = logging.getLogger("TriggerMenuMT.HLTMenuConfig.Jet.JetDef") +log = logging.getLogger("TriggerMenuMT.HLTMenuConfig.Jet.JetChainConfiguration") from TriggerMenuMT.HLTMenuConfig.Menu.ChainConfigurationBase import ChainConfigurationBase from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import ChainStep, RecoFragmentsPool +from .JetRecoConfiguration import jetRecoDictToString import copy @@ -62,17 +63,22 @@ class JetChainConfiguration(ChainConfigurationBase): # -------------------- # Only one step for now, but we might consider adding steps for # reclustering and trimming workflows - - step1_jetCollectionName, step1= self.getJetChainStep() - steps=[step1] - chainSteps = [] - for step in steps: - chainSteps+=[step] - - + if self.recoDict["trkopt"]=="ftf": + if self.recoDict["trkpresel"]=="nopresel": + clustersKey, caloRecoStep = self.getJetCaloRecoChainStep() + chainSteps.append( caloRecoStep ) + elif self.recoDict["trkpresel"]=="preselj45": + clustersKey, jetPreselStep = self.getJetCaloPreselChainStep() + chainSteps.append( jetPreselStep ) + jetCollectionName, jetTrackingHypoStep = self.getJetTrackingHypoChainStep(clustersKey) + chainSteps.append( jetTrackingHypoStep ) + else: + jetCollectionName, jetCaloHypoStep = self.getJetCaloHypoChainStep() + chainSteps.append( jetCaloHypoStep ) + if "JetDS" in self.chainName: - TLAStep = self.getJetTLAChainStep(step1_jetCollectionName) + TLAStep = self.getJetTLAChainStep(jetCollectionName) chainSteps+= [TLAStep] myChain = self.buildChain(chainSteps) @@ -83,27 +89,93 @@ class JetChainConfiguration(ChainConfigurationBase): # -------------------- # Configuration of steps # -------------------- - def getJetChainStep(self): - from TriggerMenuMT.HLTMenuConfig.Jet.JetMenuSequences import jetMenuSequence - from TriggerMenuMT.HLTMenuConfig.Jet.JetRecoSequences import jetRecoDictToString + def getJetCaloHypoChainStep(self): + jetDefStr = jetRecoDictToString(self.recoDict) + + stepName = "MainStep_jet_"+jetDefStr + from AthenaConfiguration.AllConfigFlags import ConfigFlags + from TriggerMenuMT.HLTMenuConfig.Jet.JetMenuSequences import jetCaloHypoMenuSequence + jetSeq = RecoFragmentsPool.retrieve( jetCaloHypoMenuSequence, + ConfigFlags, **self.recoDict ) + jetCollectionName = jetSeq.hypo.Alg.Jets + + return jetCollectionName, ChainStep(stepName, [jetSeq], multiplicity=[1], chainDicts=[self.dict]) + def getJetTrackingHypoChainStep(self, clustersKey): jetDefStr = jetRecoDictToString(self.recoDict) - stepName = "Step1_jet_"+jetDefStr + stepName = "MainStep_jet_"+jetDefStr from AthenaConfiguration.AllConfigFlags import ConfigFlags - jetSeq1 = RecoFragmentsPool.retrieve( jetMenuSequence, ConfigFlags, **self.recoDict ) # the None will be used for flags in future - step1_jetCollectionName = jetSeq1.hypo.Alg.Jets - chainStep1 = ChainStep(stepName, [jetSeq1], multiplicity=[1], chainDicts=[self.dict]) - - return step1_jetCollectionName, chainStep1 + from TriggerMenuMT.HLTMenuConfig.Jet.JetMenuSequences import jetTrackingHypoMenuSequence + jetSeq = RecoFragmentsPool.retrieve( jetTrackingHypoMenuSequence, + ConfigFlags, clustersKey=clustersKey, **self.recoDict ) + jetCollectionName = jetSeq.hypo.Alg.Jets + + return jetCollectionName, ChainStep(stepName, [jetSeq], multiplicity=[1], chainDicts=[self.dict]) + + def getJetCaloRecoChainStep(self): + stepName = "CaloRecoPTStep_jet_"+self.recoDict["calib"] + from AthenaConfiguration.AllConfigFlags import ConfigFlags + from TriggerMenuMT.HLTMenuConfig.Jet.JetMenuSequences import jetCaloRecoMenuSequence + jetSeq, clustersKey = RecoFragmentsPool.retrieve( jetCaloRecoMenuSequence, + ConfigFlags, clusterCalib=self.recoDict["calib"] ) + + return clustersKey, ChainStep(stepName, [jetSeq], multiplicity=[1], chainDicts=[self.dict]) + + def getJetCaloPreselChainStep(self): + # Define a fixed preselection dictionary for prototyping -- we may expand the options + preselRecoDict = { + 'recoAlg':'a4', + 'dataType':'tc', + 'calib':'em', + 'jetCalib':'subjesIS', + 'trkopt':'notrk', + 'trkpresel': 'nopresel' + } + preselJetParts = dict(preselRecoDict) + preselJetParts.update( + {'L1threshold': 'NOL1SEED', + 'TLA': '', + 'addInfo': [], + 'bConfig': [], + 'bMatching': [], + 'bTag': '', + 'bTracking': '', + 'chainPartName': 'j45', + 'cleaning': 'noCleaning', + 'dataScouting': '', + 'etaRange': '0eta320', + 'extra': '', + 'hypoScenario': 'simple', + 'jvt': '', + 'momCuts': '', + 'multiplicity': '1', + 'scan': 'FS', + 'signature': 'Jet', + 'smc': 'nosmc', + 'threshold': '20', + 'topo': [], + 'trigType': 'j'} + ) + preselChainDict = dict(self.dict) + preselChainDict['chainParts'] = [preselJetParts] + + jetDefStr = jetRecoDictToString(preselRecoDict) + + stepName = "PreselStep_jet_"+jetDefStr + from AthenaConfiguration.AllConfigFlags import ConfigFlags + from TriggerMenuMT.HLTMenuConfig.Jet.JetMenuSequences import jetCaloPreselMenuSequence + jetSeq, clustersKey = RecoFragmentsPool.retrieve( jetCaloPreselMenuSequence, + ConfigFlags, **preselRecoDict ) + + return clustersKey, ChainStep(stepName, [jetSeq], multiplicity=[1], chainDicts=[preselChainDict]) def getJetTLAChainStep(self, jetCollectionName): - #maybe not needed - from TriggerMenuMT.HLTMenuConfig.Jet.JetTLAConfiguration import jetTLAMenuSequence + from TriggerMenuMT.HLTMenuConfig.Jet.JetTLASequences import jetTLAMenuSequence - stepName = "Step2_jetTLA_"+jetCollectionName - jetSeq2 = RecoFragmentsPool.retrieve( jetTLAMenuSequence, jetCollectionName ) # the None will be used for flags in future - chainStep2 = ChainStep(stepName, [jetSeq2], multiplicity=[1], chainDicts=[self.dict]) + stepName = "TLAStep_"+jetCollectionName + jetSeq = RecoFragmentsPool.retrieve( jetTLAMenuSequence, jetCollectionName ) + chainStep = ChainStep(stepName, [jetSeq], multiplicity=[1], chainDicts=[self.dict]) - return chainStep2 + return chainStep diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Jet/JetMenuSequences.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Jet/JetMenuSequences.py index ec486493dcbb9a4fe254ce0d72109a9fd430bc45..2215c5846f49b01355baaab8d62a042f0d70e9f9 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Jet/JetMenuSequences.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Jet/JetMenuSequences.py @@ -1,25 +1,157 @@ -# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import RecoFragmentsPool, MenuSequence -from TriggerMenuMT.HLTMenuConfig.Jet.JetRecoSequences import jetAthSequence, jetRecoDictToString - -def jetCFSequence(configFlags,**recoDict): - """ Function to create the jet Menu Sequence""" - - #reco sequence - (JetAthSequence, InputMakerAlg, sequenceOut) = RecoFragmentsPool.retrieve(jetAthSequence,configFlags,**recoDict) - return (JetAthSequence, InputMakerAlg, sequenceOut) - -def jetMenuSequence(configFlags,**recoDict): - (JetAthSequence, InputMakerAlg, sequenceOut)= jetCFSequence(configFlags,**recoDict) +from AthenaCommon.CFElements import seqAND +from AthenaConfiguration.ComponentAccumulator import conf2toConfigurable +from .JetRecoConfiguration import jetRecoDictToString +from AthenaConfiguration.ComponentFactory import CompFactory +from ..CommonSequences.FullScanDefs import caloFSRoI, trkFSRoI + +# For step 1, starting from the basic calo reco and topoclustering +# Used for calo-only chains and preselection for tracking +def getInitialInputMaker(): + from TrigT2CaloCommon.CaloDef import clusterFSInputMaker + InputMakerAlg = conf2toConfigurable(clusterFSInputMaker()) + return InputMakerAlg + +# For later steps, where calo reco should not be run +# The same instance of an algorithm cannot be run in different steps +# Used for chains that use tracking +def getTrackingInputMaker(): + InputMakerAlg = conf2toConfigurable(CompFactory.InputMakerForRoI( "IM_Jet_TrackingStep" )) + InputMakerAlg.RoITool = conf2toConfigurable(CompFactory.ViewCreatorInitialROITool()) + InputMakerAlg.RoIs = trkFSRoI + return InputMakerAlg + + +############################################################################################### +# Complete sequences that set up or specify the inputs to jet finding + +# This sets up the reconstruction starting from topoclusters. +# No tracking is permitted. +def jetCaloRecoSequences( configFlags, RoIs, **jetRecoDict ): + if jetRecoDict["trkopt"] != "notrk": + raise ValueError("Calorimeter jet reco called with a tracking option!") + + # Get the topocluster reconstruction sequence + from .JetRecoSequences import jetClusterSequence, jetRecoSequence + topoClusterSequence, clustersKey = RecoFragmentsPool.retrieve( + jetClusterSequence, configFlags, RoIs=RoIs, clusterCalib=jetRecoDict["calib"]) + + # Get the jet reconstruction sequence including the jet definition and output collection + jetRecoSeq, jetsOut, jetDef = RecoFragmentsPool.retrieve( + jetRecoSequence, configFlags, clustersKey=clustersKey, **jetRecoDict ) + + return [topoClusterSequence,jetRecoSeq], jetsOut, clustersKey + +# This sets up the reconstruction where tracks are required. +# Topoclustering will not be scheduled, we just pass in the name of the cluster collection. +def jetTrackingRecoSequences(configFlags, RoIs, clustersKey, **jetRecoDict): + if jetRecoDict["trkopt"] == "notrk": + raise ValueError("Jet reco with tracks called without a tracking option!") + + # Get the track reconstruction sequence + from .JetTrackingConfig import JetTrackingSequence + (jetTrkSeq, trkcolls) = RecoFragmentsPool.retrieve( + JetTrackingSequence, configFlags, trkopt=jetRecoDict["trkopt"], RoIs=RoIs) + + # Get the jet reconstruction sequence including the jet definition and output collection + # Pass in the cluster and track collection names + from .JetRecoSequences import jetRecoSequence + jetRecoSeq, jetsOut, jetDef = RecoFragmentsPool.retrieve( + jetRecoSequence, + configFlags, clustersKey=clustersKey, **trkcolls, **jetRecoDict ) + + return [jetTrkSeq,jetRecoSeq], jetsOut + +############################################################################################### +# Functions defining the MenuSequence that will be placed into ChainSteps + +# Generate a menu sequence given a set of jet sequences to schedule. +# The hypo may be set up as a preselection hypo, in which case it will +# record a single DecisionObject, instead of one per jet. +# A hypo may alternatively be configured to passThrough, such that +# the hypo will not retrieve any jets and simply pass. + +from enum import Enum +class JetHypoAlgType(Enum): + STANDARD = 0 + PRESEL = 1 + PASSTHROUGH = 2 + +def makeMenuSequence(jetSeq,IMAlg,jetsIn,jetDefString,hypoType=JetHypoAlgType.STANDARD): + #hypo - from TrigHLTJetHypo.TrigHLTJetHypoConf import TrigJetHypoAlgMT from TrigHLTJetHypo.TrigJetHypoToolConfig import trigJetHypoToolFromDict - hypo = TrigJetHypoAlgMT("TrigJetHypoAlgMT_"+jetRecoDictToString(recoDict)) - hypo.Jets = sequenceOut + def trigStreamerHypoTool(chain_dict): + return conf2toConfigurable(CompFactory.TrigStreamerHypoToolMT(chain_dict["chainName"])) - return MenuSequence( Sequence = JetAthSequence, - Maker = InputMakerAlg, + hyponame = "TrigJetHypoAlgMT_"+jetDefString + trigHypoToolGen = trigJetHypoToolFromDict + if hypoType==JetHypoAlgType.PASSTHROUGH: + hyponame = "TrigStreamerHypoAlgMT_caloReco" + hypo = conf2toConfigurable(CompFactory.TrigStreamerHypoAlgMT(hyponame,SetInitialRoIAsFeature=True)) + trigHypoToolGen = trigStreamerHypoTool + elif hypoType==JetHypoAlgType.PRESEL: + hyponame += "_presel" + hypo = conf2toConfigurable(CompFactory.TrigJetHypoAlgMT(hyponame, Jets=jetsIn, DoPresel=True)) + else: + hypo = conf2toConfigurable(CompFactory.TrigJetHypoAlgMT(hyponame, Jets=jetsIn)) + + return MenuSequence( Sequence = jetSeq, + Maker = IMAlg, Hypo = hypo, - HypoToolGen = trigJetHypoToolFromDict ) + HypoToolGen = trigHypoToolGen ) + +# For the preselection step before running tracking (step 1) +def jetCaloPreselMenuSequence(configFlags, **jetRecoDict): + InputMakerAlg = getInitialInputMaker() + jetSequences, jetsIn, clustersKey = RecoFragmentsPool.retrieve( + jetCaloRecoSequences, + configFlags, RoIs=caloFSRoI, **jetRecoDict) + + jetDefString = jetRecoDictToString(jetRecoDict) + jetAthSeq = seqAND("jetSeqCaloPresel_"+jetDefString,[InputMakerAlg]+jetSequences) + + return makeMenuSequence(jetAthSeq,InputMakerAlg,jetsIn,jetDefString, + hypoType=JetHypoAlgType.PRESEL), clustersKey + +# A null preselection, which will only run the cluster making (step 1) +def jetCaloRecoMenuSequence(configFlags, clusterCalib): + InputMakerAlg = getInitialInputMaker() + jetsIn = "" + from .JetRecoSequences import jetClusterSequence + topoClusterSequence, clustersKey = RecoFragmentsPool.retrieve( + jetClusterSequence, configFlags, RoIs=caloFSRoI, clusterCalib=clusterCalib) + + jetAthSeq = seqAND("jetSeqCaloRecoPassThrough_"+clusterCalib,[InputMakerAlg,topoClusterSequence]) + + return makeMenuSequence(jetAthSeq,InputMakerAlg,jetsIn,"caloreco", + hypoType=JetHypoAlgType.PASSTHROUGH), clustersKey + +# A full hypo selecting only on calo jets (step 1) +def jetCaloHypoMenuSequence(configFlags, **jetRecoDict): + InputMakerAlg = getInitialInputMaker() + jetSequences, jetsIn, clustersKey = RecoFragmentsPool.retrieve( + jetCaloRecoSequences, + configFlags, RoIs=caloFSRoI, **jetRecoDict) + jetDefString = jetRecoDictToString(jetRecoDict) + jetAthSeq = seqAND("jetSeqCaloHypo_"+jetDefString,[InputMakerAlg]+jetSequences) + + return makeMenuSequence(jetAthSeq,InputMakerAlg,jetsIn,jetDefString) + +# A full hypo selecting on jets with track reco (step 2) +# To combine either with a presel or a passthrough sequence +# As this does not run topoclustering, the cluster collection +# name needs to be passed in +def jetTrackingHypoMenuSequence(configFlags, clustersKey, **jetRecoDict): + InputMakerAlg = getTrackingInputMaker() + jetSequences, jetsIn = RecoFragmentsPool.retrieve( + jetTrackingRecoSequences, + configFlags, RoIs=trkFSRoI, clustersKey=clustersKey, **jetRecoDict) + + jetDefString = jetRecoDictToString(jetRecoDict) + jetAthSeq = seqAND("jetSeqTrkHypo_"+jetDefString,[InputMakerAlg]+jetSequences) + + return makeMenuSequence(jetAthSeq,InputMakerAlg,jetsIn,jetDefString) diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Jet/JetRecoConfiguration.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Jet/JetRecoConfiguration.py index 7adb1f6efa51c3908339e4fb862788cad68aef58..1d6109a0dcc4485c00877e343afc7ef59f49f0bc 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Jet/JetRecoConfiguration.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Jet/JetRecoConfiguration.py @@ -19,11 +19,12 @@ def interpretJetCalibDefault(recoDict): elif recoDict['dataType'].endswith('pf'): return 'subresjesgscIS' +recoKeys = ['recoAlg','dataType','calib','jetCalib','trkopt','trkpresel'] + # Extract the jet reco dict from the chainDict def extractRecoDict(chainParts): # interpret the reco configuration only # eventually should just be a subdict in the chainDict - recoKeys = ['recoAlg','dataType','calib','jetCalib','trkopt','cleaning'] recoDict = {} for p in chainParts: for k in recoKeys: @@ -43,6 +44,40 @@ def extractRecoDict(chainParts): return recoDict +# Translate the reco dict to a string for suffixing etc +def jetRecoDictToString(jetRecoDict): + strtemp = "{recoAlg}_{dataType}_{calib}_{jetCalib}" + if jetRecoDict["trkopt"] != "notrk": + strtemp += "_{trkopt}_{trkpresel}" + return strtemp.format(**jetRecoDict) + +# Inverse of the above, essentially only for CF tests +def jetRecoDictFromString(jet_def_string): + + # Translate the definition string into an approximation + # of the "recoParts" in the jet chainParts. + jetRecoDict = {} + # Insert values from string + # Python names are more descriptive. May want to sync + # these names with the SignatureDict, needs coordination with + # menu group when they start to implement this + trkopt = "notrk" + trkpresel = "nopresel" + if "_ftf" in jet_def_string: + jetalg, inputtype, clusterscale, jetcalib, trkopt = jet_def_string.split('_') + else: + jetalg, inputtype, clusterscale, jetcalib = jet_def_string.split('_') + + jetRecoDict = { + "recoAlg": jetalg, + "dataType": inputtype, + "calib": clusterscale, + "jetCalib": jetcalib, + "trkopt" : trkopt, + "trkpresel": trkpresel + } + return jetRecoDict + # Define the jet constituents to be interpreted by JetRecConfig # When actually specifying the reco, clustersKey should be # set, but default to None to allow certain checks, in particular diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Jet/JetRecoSequences.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Jet/JetRecoSequences.py index 9189cd93342c2a3d9e5a3ae02cd04302bba7a2d6..9f8e18736c812458a36a66dac278b66e69c6a5b0 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Jet/JetRecoSequences.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Jet/JetRecoSequences.py @@ -2,41 +2,55 @@ # Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # -from AthenaCommon.CFElements import parOR, seqAND +from AthenaCommon.CFElements import parOR from TriggerMenuMT.HLTMenuConfig.Menu.ChainConfigurationBase import RecoFragmentsPool from AthenaConfiguration.ComponentAccumulator import conf2toConfigurable -from TriggerMenuMT.HLTMenuConfig.Jet import JetRecoConfiguration from JetRecConfig.JetRecConfig import getConstitPJGAlg, getJetAlgorithm from JetRecConfig import JetInputConfig from JetRecConfig import JetRecConfig from TrigEDMConfig.TriggerEDMRun3 import recordable -# Translate the reco dict to a string for suffixing etc -def jetRecoDictToString(jetRecoDict): - strtemp = "{recoAlg}_{dataType}_{calib}_{jetCalib}" - if jetRecoDict["trkopt"] != "notrk": - strtemp += "_{trkopt}" - return strtemp.format(**jetRecoDict) +from . import JetRecoConfiguration +from .JetRecoConfiguration import jetRecoDictToString -# Configure reco from a dict of options -# Start from a FullScan inputs maker -def jetAthSequence(configFlags, **jetRecoDict): - from TrigT2CaloCommon.CaloDef import clusterFSInputMaker - InputMakerAlg= conf2toConfigurable(clusterFSInputMaker()) +############################################################################################### +# Sequences for input information - (recoSequence, sequenceOut, jetDef) = RecoFragmentsPool.retrieve( jetRecoSequence, configFlags, **jetRecoDict ) +# Calo cell unpacking and topocluster reconstruction +def jetClusterSequence(configFlags, RoIs, clusterCalib): + + # Start by adding the topocluster reco sequence + from TriggerMenuMT.HLTMenuConfig.CommonSequences.CaloSequenceSetup import ( + caloClusterRecoSequence, LCCaloClusterRecoSequence) + if clusterCalib == "em": + topoClusterSequence, clustersKey = RecoFragmentsPool.retrieve( + caloClusterRecoSequence, flags=None, RoIs=RoIs) + elif clusterCalib == "lcw": + topoClusterSequence, clustersKey = RecoFragmentsPool.retrieve( + LCCaloClusterRecoSequence, flags=None, RoIs=RoIs) + else: + raise ValueError("Invalid value for calib: '{}'".format(clusterCalib)) + + return topoClusterSequence, clustersKey - jetDefString = jetRecoDictToString(jetRecoDict) - JetAthSequence = seqAND("jetAthSequence_"+jetDefString,[InputMakerAlg, recoSequence ]) - return (JetAthSequence, InputMakerAlg, sequenceOut) +############################################################################################### +# Sequences that set up the concrete jet finding job jetNamePrefix = "HLT_" -# Dummy flag arg needed so that each reco sequence is held separately -# in the RecoFragmentsPool -- only the kwargs are used to distinguish -# different sequences. New convention is just to pass "None" for flags -def jetRecoSequence( configFlags, RoIs = 'HLT_FSJETRoI', **jetRecoDict ): +# Need to do this hacky extraction to get around the inability +# to hash dicts as input to RecoFragmentsPool.retrieve +from .JetTrackingConfig import trkcollskeys +def getTrkColls(jetRecoDict): + trkcolls = {key:jetRecoDict[key] for key in trkcollskeys} + return trkcolls + +# The top-level sequence, forwards arguments as appropriate to +# standard jet reco, grooming or reclustering sequences +# If tracking is required, then the trkcolls dict (returned by the +# JetTrackingSequence) must also be passed as kwargs +def jetRecoSequence( configFlags, clustersKey, **jetRecoDict ): jetalg, jetradius, extra = JetRecoConfiguration.interpretRecoAlg(jetRecoDict["recoAlg"]) doGrooming = extra in ["t","sd"] @@ -44,55 +58,44 @@ def jetRecoSequence( configFlags, RoIs = 'HLT_FSJETRoI', **jetRecoDict ): dataSource = "mc" if configFlags.Input.isMC else "data" if doRecluster: - return RecoFragmentsPool.retrieve( reclusteredJetRecoSequence, configFlags, dataSource=dataSource, RoIs=RoIs, **jetRecoDict) + return RecoFragmentsPool.retrieve( + reclusteredJetRecoSequence, + configFlags, dataSource=dataSource, + clustersKey=clustersKey, **jetRecoDict) elif doGrooming: - return RecoFragmentsPool.retrieve( groomedJetRecoSequence, configFlags, dataSource=dataSource, RoIs=RoIs, **jetRecoDict) + return RecoFragmentsPool.retrieve( + groomedJetRecoSequence, + configFlags, dataSource=dataSource, + clustersKey=clustersKey, **jetRecoDict) else: - return RecoFragmentsPool.retrieve( standardJetRecoSequence, configFlags, dataSource=dataSource, RoIs=RoIs, **jetRecoDict) + return RecoFragmentsPool.retrieve( + standardJetRecoSequence, + configFlags, dataSource=dataSource, + clustersKey=clustersKey, **jetRecoDict) # Normal jet reconstruction, no reclustering or grooming -def standardJetRecoSequence( configFlags, dataSource, RoIs, **jetRecoDict ): +def standardJetRecoSequence( configFlags, dataSource, clustersKey, **jetRecoDict ): jetDefString = jetRecoDictToString(jetRecoDict) recoSeq = parOR( "JetRecSeq_"+jetDefString, []) + trkcolls = getTrkColls(jetRecoDict) if jetRecoDict["trkopt"]!="notrk" else {} - # Start by adding the topocluster reco sequence - from TriggerMenuMT.HLTMenuConfig.CommonSequences.CaloSequenceSetup import ( - caloClusterRecoSequence, LCCaloClusterRecoSequence) - if jetRecoDict["calib"] == "em": - topoClusterSequence, clustersKey = RecoFragmentsPool.retrieve( - caloClusterRecoSequence, flags=None, RoIs=RoIs) - elif jetRecoDict["calib"] == "lcw": - topoClusterSequence, clustersKey = RecoFragmentsPool.retrieve( - LCCaloClusterRecoSequence, flags=None, RoIs=RoIs) - else: - raise ValueError("Invalid value for calib: '{}'".format(jetRecoDict["calib"])) - recoSeq += topoClusterSequence - - # Set up tracking sequence -- may need to reorganise or relocate - # depending on how we want to handle HLT preselection - trkcolls = None - if jetRecoDict["trkopt"] != "notrk": - from .JetTrackingConfig import JetTrackingSequence - (jettrkseq, trkcolls) = RecoFragmentsPool.retrieve( JetTrackingSequence, configFlags, trkopt=jetRecoDict["trkopt"], RoIs=RoIs) - recoSeq += jettrkseq - - # Potentially add particle flow reconstruction - # Work in progress + # Add particle flow reconstruction if needed if "pf" in jetRecoDict["dataType"]: - if jetRecoDict["trkopt"] == "notrk": + if not trkcolls: raise RuntimeError("PFlow jet chain requested with no tracking option!") from eflowRec.PFHLTSequence import PFHLTSequence - (pfseq, pfoPrefix) = RecoFragmentsPool.retrieve(PFHLTSequence, configFlags, clustersin=clustersKey, tracktype=jetRecoDict["trkopt"]) + (pfseq, pfoPrefix) = RecoFragmentsPool.retrieve( + PFHLTSequence, + configFlags, clustersin=clustersKey, tracktype=jetRecoDict["trkopt"]) recoSeq += pfseq jetDef = JetRecoConfiguration.defineJets(jetRecoDict,pfoPrefix=pfoPrefix, prefix=jetNamePrefix) else: jetDef = JetRecoConfiguration.defineJets(jetRecoDict,clustersKey=clustersKey, prefix=jetNamePrefix) - doConstitMods = jetRecoDict["dataType"] in ["sktc","cssktc", "pf", "csskpf"] - + # chosen jet collection jetsFullName = jetDef.fullname() - sequenceOut = recordable(jetsFullName) - + jetsOut = recordable(jetsFullName) + doConstitMods = jetRecoDict["dataType"] in ["sktc","cssktc", "pf", "csskpf"] JetRecConfig.instantiateAliases(jetDef) if doConstitMods: # Get online monitoring jet rec tool @@ -115,7 +118,7 @@ def standardJetRecoSequence( configFlags, dataSource, RoIs, **jetRecoDict ): pjs.append(trkcolls["GhostTracks"]) jetModList = [] - if jetRecoDict["trkopt"] != "notrk": + if trkcolls: trkMods = JetRecoConfiguration.defineTrackMods(jetRecoDict["trkopt"]) jetModList += trkMods @@ -151,25 +154,29 @@ def standardJetRecoSequence( configFlags, dataSource, RoIs, **jetRecoDict ): # (via a JetRecTool instance). jetRecAlg = JetRecConfig.getJetAlgorithm(jetsFullName, jetDef, pjs, monTool) recoSeq += conf2toConfigurable( jetRecAlg ) + # End of basic jet reco - return recoSeq, sequenceOut, jetDef + return recoSeq, jetsOut, jetDef # Grooming needs the ungroomed jets to be built first, # so call the basic jet reco seq, then add a grooming alg -def groomedJetRecoSequence( configFlags, dataSource, RoIs, **jetRecoDict ): +def groomedJetRecoSequence( configFlags, dataSource, clustersKey, **jetRecoDict ): jetDefString = jetRecoDictToString(jetRecoDict) recoSeq = parOR( "JetGroomSeq_"+jetDefString, []) + ungroomedJetRecoDict = dict(jetRecoDict) ungroomedJetRecoDict["recoAlg"] = ungroomedJetRecoDict["recoAlg"].rstrip("tsd") # Drop grooming spec ungroomedJetRecoDict["jetCalib"] = "nojcalib" # No need to calibrate - (ungroomedJetRecoSequence,ungroomedJetsName, ungroomedDef) = RecoFragmentsPool.retrieve(standardJetRecoSequence,configFlags,dataSource=dataSource,RoIs=RoIs,**ungroomedJetRecoDict) + (ungroomedJetRecoSequence,ungroomedJetsName, ungroomedDef) = RecoFragmentsPool.retrieve( + standardJetRecoSequence, + configFlags, dataSource=dataSource, clustersKey=clustersKey, + **ungroomedJetRecoDict) recoSeq += conf2toConfigurable( ungroomedJetRecoSequence ) # Need to forward the pseudojets of the parents to the groomer parentpjs = getattr(ungroomedJetRecoSequence,"jetalg_{}".format(ungroomedJetsName)).Tools[0].InputPseudoJets - - groomDef = JetRecoConfiguration.defineGroomedJets(jetRecoDict,ungroomedDef)#,ungroomedJetsName) + groomDef = JetRecoConfiguration.defineGroomedJets(jetRecoDict,ungroomedDef) groomedJetsFullName = groomDef.fullname()+"_"+jetRecoDict["jetCalib"] if jetRecoDict["trkopt"]!="notrk": groomedJetsFullName += "_"+jetRecoDict["trkopt"] @@ -186,19 +193,23 @@ def groomedJetRecoSequence( configFlags, dataSource, RoIs, **jetRecoDict ): groomalg = getJetGroomAlg(groomedJetsFullName,groomDef,parentpjs,monTool) recoSeq += conf2toConfigurable( groomalg ) - sequenceOut = recordable(groomedJetsFullName) - return recoSeq, sequenceOut, groomDef + jetsOut = recordable(groomedJetsFullName) + jetDef = groomDef + return recoSeq, jetsOut, jetDef # Reclustering -- call the basic jet reco and add this to the sequence, # then add another jet algorithm to run the reclustering step -def reclusteredJetRecoSequence( configFlags, dataSource, RoIs, **jetRecoDict ): +def reclusteredJetRecoSequence( configFlags, dataSource, clustersKey, **jetRecoDict ): jetDefString = jetRecoDictToString(jetRecoDict) recoSeq = parOR( "JetReclusterSeq_"+jetDefString, []) basicJetRecoDict = dict(jetRecoDict) basicJetRecoDict["recoAlg"] = "a4" # Standard size for reclustered - (basicJetRecoSequence,basicJetsName, basicJetDef) = RecoFragmentsPool.retrieve(standardJetRecoSequence,configFlags,dataSource=dataSource,RoIs=RoIs,**basicJetRecoDict) + (basicJetRecoSequence,basicJetsName, basicJetDef) = RecoFragmentsPool.retrieve( + standardJetRecoSequence, + configFlags, dataSource=dataSource, clustersKey=clustersKey, + **basicJetRecoDict) recoSeq += basicJetRecoSequence rcJetPtMin = 15e3 # 15 GeV minimum pt for jets to be reclustered @@ -227,6 +238,6 @@ def reclusteredJetRecoSequence( configFlags, dataSource, RoIs, **jetRecoDict ): recoSeq += conf2toConfigurable( rcJetRecAlg ) - sequenceOut = recordable(rcJetsFullName) + jetsOut = recordable(rcJetsFullName) jetDef = rcJetDef - return recoSeq, sequenceOut, jetDef + return recoSeq, jetsOut, jetDef diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Jet/JetTLAConfiguration.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Jet/JetTLASequences.py similarity index 72% rename from Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Jet/JetTLAConfiguration.py rename to Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Jet/JetTLASequences.py index fe25509c75d54d1d0439acb81aedbb7504618aad..8ecf1caf2f8b66acb0f5992cac5b4a00b8622cb8 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Jet/JetTLAConfiguration.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Jet/JetTLASequences.py @@ -7,42 +7,41 @@ from AthenaCommon.CFElements import parOR, seqAND from GaudiKernel.Constants import WARNING #this can eventually become a TLA/PEB sequence, but let's start with TLA only -def jetTLASequence(jetDefString): +def jetTLASequence(jetsin): #make a new reco sequence, empty at this point now - recoSeq = parOR("JetTLASeq_"+jetDefString, []) + recoSeq = parOR("JetTLASeq_"+jetsin, []) #import the TLA algorithm that selects jets and makes a new collection to pass to [what used to be the ScoutingStreamWriter] from TrigHLTJetRec import TrigHLTJetTLASelector - tempInputCollection = jetDefString - sequenceOut=jetDefString+"_TLA" - TLAAlg=TrigHLTJetTLASelector.getConfiguredTLASelector(inputJetsKey=tempInputCollection, outputJetsKey=sequenceOut, outputLevel=WARNING) + sequenceOut=jetsin+"_TLA" + TLAAlg=TrigHLTJetTLASelector.getConfiguredTLASelector(inputJetsKey=jetsin, outputJetsKey=sequenceOut, outputLevel=WARNING) recoSeq+=TLAAlg return (recoSeq, sequenceOut) #Configure an AthSequence for jet TLA - will eventually also include PEB -def jetTLAAthSequence(jetDefString): +def jetTLAAthSequence(jetsin): from AthenaConfiguration.ComponentFactory import CompFactory - InputMakerAlg = CompFactory.InputMakerForRoI( "IM_TLAJet_step2" ) + InputMakerAlg = CompFactory.InputMakerForRoI( "IM_Jet_TLAStep" ) InputMakerAlg.RoITool = CompFactory.ViewCreatorInitialROITool() InputMakerAlg.mergeUsingFeature = True - (JetTLASequence, sequenceOut) = RecoFragmentsPool.retrieve( jetTLASequence, jetDefString ) - JetTLAAthSequence = seqAND("jetTLAAthSequence_"+jetDefString,[InputMakerAlg, JetTLASequence ]) + (JetTLASequence, sequenceOut) = RecoFragmentsPool.retrieve( jetTLASequence, jetsin ) + JetTLAAthSequence = seqAND("jetTLAAthSequence_"+jetsin,[InputMakerAlg, JetTLASequence ]) return (JetTLAAthSequence, InputMakerAlg, sequenceOut) -def jetTLAMenuSequence(jetDefString): +def jetTLAMenuSequence(jetsin): from TrigHLTJetHypo.TrigHLTJetHypoConf import TrigJetTLAHypoAlgMT from TrigHLTJetHypo.TrigJetHypoToolConfig import trigJetTLAHypoToolFromDict - (JetTLAAthSequence, InputMakerAlg, sequenceOut) = RecoFragmentsPool.retrieve(jetTLAAthSequence,jetDefString) + (JetTLAAthSequence, InputMakerAlg, sequenceOut) = RecoFragmentsPool.retrieve(jetTLAAthSequence,jetsin) - hypo = TrigJetTLAHypoAlgMT("TrigJetTLAHypoAlgMT_"+jetDefString) + hypo = TrigJetTLAHypoAlgMT("TrigJetTLAHypoAlgMT_"+jetsin) hypo.Jets = sequenceOut return MenuSequence( Sequence = JetTLAAthSequence, diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Jet/JetTrackingConfig.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Jet/JetTrackingConfig.py index 9ee6e53d6ef4bc5ef192e5aebe181402348ee2b4..60b249ecd7cd5cb2856c292ca692d5c7ca1fa24a 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Jet/JetTrackingConfig.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Jet/JetTrackingConfig.py @@ -9,6 +9,8 @@ from JetRecTools.JetRecToolsConfig import getTrackSelTool, getTrackVertexAssocTo from AthenaConfiguration.ComponentFactory import CompFactory from AthenaConfiguration.ComponentAccumulator import conf2toConfigurable +trkcollskeys = ["Tracks", "Vertices", "TVA", "GhostTracks", "GhostTracksLabel", "JetTracks"] + def JetTrackingSequence(dummyFlags,trkopt,RoIs): jetTrkSeq = parOR( "JetTrackingSeq_"+trkopt, []) tracksname = "" @@ -19,7 +21,7 @@ def JetTrackingSequence(dummyFlags,trkopt,RoIs): if trkopt=="ftf": from TrigInDetConfig.InDetSetup import makeInDetAlgsNoView - viewAlgs = makeInDetAlgsNoView( config = IDTrigConfig, rois=recordable(RoIs)) + viewAlgs = makeInDetAlgsNoView( config = IDTrigConfig, rois=RoIs) jetTrkSeq += viewAlgs tracksname = IDTrigConfig.FT.tracksFTF( doRecord = IDTrigConfig.isRecordable ) verticesname = recordable("HLT_IDVertex_FS") @@ -30,10 +32,14 @@ def JetTrackingSequence(dummyFlags,trkopt,RoIs): jetTrkSeq += prmVtx tvaname = "JetTrackVtxAssoc_"+trkopt + label = "GhostTrack_{}".format(trkopt) + ghosttracksname = "PseudoJet{}".format(label) trkcolls = { "Tracks": tracksname, "Vertices": verticesname, "TVA": tvaname, + "GhostTracks" : ghosttracksname, + "GhostTracksLabel": label, } from JetRecTools.JetRecToolsConfig import trackcollectionmap @@ -46,18 +52,11 @@ def JetTrackingSequence(dummyFlags,trkopt,RoIs): jettvassoc = getTrackVertexAssocTool(trkopt) trackcollectionmap[trkopt]["JetTracks"] = jettracksname - trackcollectionmap[trkopt]["TVA"] = tvaname jettrkprepalg = CompFactory.JetAlgorithm("jetalg_TrackPrep") jettrkprepalg.Tools = [ jettrackselloose, jettvassoc ] jetTrkSeq += conf2toConfigurable( jettrkprepalg ) - label = "GhostTrack_{}".format(trkopt) - ghosttracksname = "PseudoJet{}".format(label) - - trackcollectionmap[trkopt]["GhostTracks"] = ghosttracksname - trackcollectionmap[trkopt]["GhostTracksLabel"] = label - pjgalg = CompFactory.PseudoJetAlgorithm( "pjgalg_"+label, InputContainer=tracksname, @@ -67,4 +66,4 @@ def JetTrackingSequence(dummyFlags,trkopt,RoIs): ) jetTrkSeq += conf2toConfigurable( pjgalg ) - return jetTrkSeq, trkcolls + return jetTrkSeq, trackcollectionmap[trkopt] diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Jet/generateJet.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Jet/generateJet.py index 87f6f0587975394a6b92c814524aa5347dfdb15e..e84e9cf305a4fdd4c50150b37ce2beb9240ffc4f 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Jet/generateJet.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Jet/generateJet.py @@ -5,16 +5,17 @@ from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator from AthenaConfiguration.ComponentFactory import CompFactory import pprint from AthenaCommon.Logging import logging +from ..CommonSequences.FullScanDefs import caloFSRoI log = logging.getLogger( 'TriggerMenuMT.HLTMenuConfig.Jet.generateJet' ) def HLTCaloCellMakerCfg( cellsname, cdaSvc ): result = ComponentAccumulator() verifier = CompFactory.AthViews.ViewDataVerifier( name = 'VDVFSCaloJet', - DataObjects = [('TrigRoiDescriptorCollection', 'StoreGateSvc+HLT_FSJETRoI'), + DataObjects = [('TrigRoiDescriptorCollection', f"StoreGateSvc+{caloFSRoI}"), ('CaloBCIDAverage', 'StoreGateSvc+CaloBCIDAverage') ]) result.addEventAlgo( verifier ) cellmaker = CompFactory.HLTCaloCellMaker("HLTCaloCellMaker_FS") - cellmaker.RoIs = "HLT_FSJETRoI" + cellmaker.RoIs = caloFSRoI cellmaker.TrigDataAccessMT = cdaSvc cellmaker.CellsName = cellsname diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/MET/AlgConfigs.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/MET/AlgConfigs.py index 91b456ed7964e603e47594ae71b630e7ae542d5e..042a5f7c7dbc0172784048108b00e35ea27b5ce1 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/MET/AlgConfigs.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/MET/AlgConfigs.py @@ -2,13 +2,21 @@ # Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # -from .ConfigHelpers import AlgConfig, jetRecoDictForMET -from ..Menu.MenuComponents import RecoFragmentsPool +from .ConfigHelpers import AlgConfig from ..Menu.SignatureDicts import METChainParts import GaudiKernel.SystemOfUnits as Units import TrigEFMissingET.PUClassification as PUClassification +from TrigEFMissingET.TrigEFMissingETConf import ( + HLT__MET__CellFex, + HLT__MET__TCFex, + HLT__MET__TCPufitFex, + HLT__MET__MHTFex, + HLT__MET__TrkMHTFex, + HLT__MET__PFSumFex, + HLT__MET__MHTPufitFex, + HLT__MET__PUSplitPufitFex, +) -from AthenaConfiguration.AllConfigFlags import ConfigFlags from AthenaCommon.Logging import logging @@ -41,18 +49,10 @@ class CellConfig(AlgConfig): return "cell" def __init__(self, **recoDict): - super(CellConfig, self).__init__(**recoDict) - from TriggerMenuMT.HLTMenuConfig.CommonSequences.CaloSequenceSetup import ( - cellRecoSequence, - ) - from TrigEFMissingET.TrigEFMissingETConf import HLT__MET__CellFex - - cellMakerSeq, cellName = RecoFragmentsPool.retrieve( - cellRecoSequence, flags=None, RoIs=self.inputMaker.RoIs - ) + super(CellConfig, self).__init__(inputs=["Cells"], **recoDict) - self.inputs = [cellMakerSeq] - self.fexAlg = self._make_fex_alg(HLT__MET__CellFex, CellName=cellName) + def make_fex(self, name, inputs): + return HLT__MET__CellFex(name, CellName=inputs["Cells"]) class TCConfig(AlgConfig): @@ -61,25 +61,10 @@ class TCConfig(AlgConfig): return "tc" def __init__(self, calib, **recoDict): - super(TCConfig, self).__init__(calib=calib, **recoDict) - from TriggerMenuMT.HLTMenuConfig.CommonSequences.CaloSequenceSetup import ( - caloClusterRecoSequence, - LCCaloClusterRecoSequence, - ) - from TrigEFMissingET.TrigEFMissingETConf import HLT__MET__TCFex + super(TCConfig, self).__init__(inputs=["Clusters"], calib=calib, **recoDict) - RoIs = self.inputMaker.RoIs - if calib == "em": - tcSeq, clusterName = RecoFragmentsPool.retrieve( - caloClusterRecoSequence, flags=None, RoIs=RoIs - ) - elif calib == "lcw": - tcSeq, clusterName = RecoFragmentsPool.retrieve( - LCCaloClusterRecoSequence, flag=None, RoIs=RoIs - ) - - self.inputs = [tcSeq] - self.fexAlg = self._make_fex_alg(HLT__MET__TCFex, ClusterName=clusterName) + def make_fex(self, name, inputs): + return HLT__MET__TCFex(name, ClusterName=inputs["Clusters"]) class TCPufitConfig(AlgConfig): @@ -88,25 +73,12 @@ class TCPufitConfig(AlgConfig): return "tcpufit" def __init__(self, calib, **recoDict): - super(TCPufitConfig, self).__init__(calib=calib, **recoDict) - from TriggerMenuMT.HLTMenuConfig.CommonSequences.CaloSequenceSetup import ( - caloClusterRecoSequence, - LCCaloClusterRecoSequence, + super(TCPufitConfig, self).__init__( + inputs=["Clusters"], calib=calib, **recoDict ) - from TrigEFMissingET.TrigEFMissingETConf import HLT__MET__TCPufitFex - - RoIs = self.inputMaker.RoIs - if calib == "em": - tcSeq, clusterName = RecoFragmentsPool.retrieve( - caloClusterRecoSequence, flags=None, RoIs=RoIs - ) - elif calib == "lcw": - tcSeq, clusterName = RecoFragmentsPool.retrieve( - LCCaloClusterRecoSequence, flags=None, RoIs=RoIs - ) - self.inputs = [tcSeq] - self.fexAlg = self._make_fex_alg(HLT__MET__TCPufitFex, ClusterName=clusterName) + def make_fex(self, name, inputs): + return HLT__MET__TCPufitFex(name, ClusterName=inputs["Clusters"]) class MHTConfig(AlgConfig): @@ -115,61 +87,41 @@ class MHTConfig(AlgConfig): return "mht" def __init__(self, **recoDict): - super(MHTConfig, self).__init__(**recoDict) - from ..Jet.JetRecoSequences import jetRecoSequence - from TrigEFMissingET.TrigEFMissingETConf import HLT__MET__MHTFex - - jetRecoDict = jetRecoDictForMET(**recoDict) - # TODO - right now jet calibration is hardcoded to EM - jetRecoDict["calib"] = "em" - jetRecoDict["jetCalib"] = "subjes" - jetSeq, jetName, jetDef = RecoFragmentsPool.retrieve( - jetRecoSequence, ConfigFlags, **jetRecoDict - ) + super(MHTConfig, self).__init__(inputs=["Jets"], **recoDict) - self.inputs = [jetSeq] - self.fexAlg = self._make_fex_alg(HLT__MET__MHTFex, JetName=jetName) + def make_fex(self, name, inputs): + return HLT__MET__MHTFex(name, JetName=inputs["Jets"]) +# NB: TrkMHT isn't ready to run with PF jets yet - for that we need to add an +# option for cPFOs class TrkMHTConfig(AlgConfig): @classmethod def algType(cls): return "trkmht" def __init__(self, **recoDict): - super(TrkMHTConfig, self).__init__(**recoDict) - from ..Jet.JetRecoSequences import jetRecoSequence - from TrigEFMissingET.TrigEFMissingETConf import HLT__MET__TrkMHTFex - - jetRecoDict = jetRecoDictForMET(trkopt="ftf", **recoDict) - # TODO - right now jet calibration is hardcoded to EM - jetRecoDict["calib"] = "em" - - jetSeq, jetName, jetDef = RecoFragmentsPool.retrieve( - jetRecoSequence, ConfigFlags, **jetRecoDict + super(TrkMHTConfig, self).__init__( + inputs=["Jets", "Tracks", "Vertices", "TVA", "GhostTracksLabel"], + forceTracks=True, + **recoDict ) - # These are the names set by the upstream algorithms. Unfortunately - # these aren't passed to us - we just have to 'know' them - tracks = "HLT_IDTrack_FS_FTF" - vertices = "HLT_IDVertex_FS" - tva = "JetTrackVtxAssoc_{trkopt}".format(**jetRecoDict) - track_links = "GhostTrack_{trkopt}".format(**jetRecoDict) - - self.inputs = [jetSeq] - self.fexAlg = self._make_fex_alg( - HLT__MET__TrkMHTFex, - JetName=jetName, - TrackName=tracks, - VertexName=vertices, - TVAName=tva, - TrackLinkName=track_links, + def make_fex(self, name, inputs): + fex = HLT__MET__TrkMHTFex( + name, + JetName=inputs["Jets"], + TrackName=inputs["Tracks"], + VertexName=inputs["Vertices"], + TVAName=inputs["TVA"], + TrackLinkName=inputs["GhostTracksLabel"], ) - self.fexAlg.TrackSelTool.CutLevel = "Loose" - self.fexAlg.TrackSelTool.maxZ0SinTheta = 1.5 - self.fexAlg.TrackSelTool.maxD0overSigmaD0 = 3 - self.fexAlg.TrackSelTool.minPt = 1 * Units.GeV - + fex.TrackSelTool.CutLevel = "Loose" + fex.TrackSelTool.maxZ0SinTheta = 1.5 + fex.TrackSelTool.maxD0overSigmaD0 = 3 + fex.TrackSelTool.minPt = 1 * Units.GeV + return fex + class PFSumConfig(AlgConfig): @classmethod @@ -177,18 +129,11 @@ class PFSumConfig(AlgConfig): return "pfsum" def __init__(self, **recoDict): - super(PFSumConfig, self).__init__(**recoDict) - - from TrigEFMissingET.TrigEFMissingETConf import HLT__MET__PFSumFex - from .METRecoSequences import pfoRecoSequence + super(PFSumConfig, self).__init__(inputs=["cPFOs", "nPFOs"], **recoDict) - self.inputs, pfoPrefix = RecoFragmentsPool.retrieve( - pfoRecoSequence, flags=None, RoIs=self.inputMaker.RoIs - ) - self.fexAlg = self._make_fex_alg( - HLT__MET__PFSumFex, - NeutralPFOName=pfoPrefix + "CHSNeutralParticleFlowObjects", - ChargedPFOName=pfoPrefix + "CHSChargedParticleFlowObjects", + def make_fex(self, name, inputs): + return HLT__MET__PFSumFex( + name, NeutralPFOName=inputs["nPFOs"], ChargedPFOName=inputs["cPFOs"], ) @@ -198,34 +143,15 @@ class PFOPufitConfig(AlgConfig): return "pfopufit" def __init__(self, **recoDict): - super(PFOPufitConfig, self).__init__(**recoDict) - - from TrigEFMissingET.TrigEFMissingETConf import ( - HLT__MET__PUSplitPufitFex, - HLT__MET__PFOPrepAlg, + super(PFOPufitConfig, self).__init__( + inputs=["MergedPFOs", "PFOPUCategory"], **recoDict ) - from .METRecoSequences import pfoRecoSequence - pfoInputs, pfoPrefix = RecoFragmentsPool.retrieve( - pfoRecoSequence, flags=None, RoIs=self.inputMaker.RoIs - ) - # NB for this, we might be slightly misusing the 'flags' parameter in - # the reco fragments pool. Here, we let it just pass the name parameter - # through to the underlying alg config class parameter - prepAlg = RecoFragmentsPool.retrieve( - HLT__MET__PFOPrepAlg, - "{}PFOPufitPrepAlg".format(pfoPrefix), - InputNeutralKey="{}CHSNeutralParticleFlowObjects".format(pfoPrefix), - InputChargedKey="{}CHSChargedParticleFlowObjects".format(pfoPrefix), - OutputKey="{}METTrigCombinedParticleFlowObjects".format(pfoPrefix), - OutputCategoryKey="PUClassification", - ) - self.inputs = pfoInputs + [prepAlg] - # TODO - make the neutral threshold mode settable in the chain name? - self.fexAlg = self._make_fex_alg( - HLT__MET__PUSplitPufitFex, - InputName=prepAlg.OutputKey, - InputCategoryName=prepAlg.OutputCategoryKey, + def make_fex(self, name, inputs): + return HLT__MET__PUSplitPufitFex( + name, + InputName=inputs["MergedPFOs"], + InputCategoryName=inputs["PFOPUCategory"], NeutralThresholdMode=PUClassification.NeutralForward, ) @@ -236,32 +162,15 @@ class CVFPufitConfig(AlgConfig): return "cvfpufit" def __init__(self, **recoDict): - super(CVFPufitConfig, self).__init__(**recoDict) - from .METRecoSequences import cvfClusterSequence - from TrigEFMissingET.TrigEFMissingETConf import ( - HLT__MET__CVFPrepAlg, - HLT__MET__PUSplitPufitFex, + super(CVFPufitConfig, self).__init__( + inputs=["Clusters", "CVFPUCategory"], **recoDict ) - RoIs = self.inputMaker.RoIs - calib = recoDict["calib"] - inputs, clusterName, cvfName = RecoFragmentsPool.retrieve( - cvfClusterSequence, flags=None, RoIs=RoIs, **recoDict - ) - - prepAlg = RecoFragmentsPool.retrieve( - HLT__MET__CVFPrepAlg, - "{}ClusterCVFPrepAlg".format(calib), - InputClusterKey=clusterName, - InputCVFKey=cvfName, - OutputCategoryKey="PUClassification", - ) - - self.inputs = inputs + [prepAlg] - self.fexAlg = self._make_fex_alg( - HLT__MET__PUSplitPufitFex, - InputName=clusterName, - InputCategoryName=prepAlg.OutputCategoryKey, + def make_fex(self, name, inputs): + return HLT__MET__PUSplitPufitFex( + name, + InputName=inputs["Clusters"], + InputCategoryName=inputs["CVFPUCategory"], NeutralThresholdMode=PUClassification.All, ) @@ -272,60 +181,35 @@ class MHTPufitConfig(AlgConfig): return "mhtpufit" def __init__(self, **recoDict): - super(MHTPufitConfig, self).__init__(**recoDict) - from ..Jet.JetRecoSequences import jetRecoSequence - from TriggerMenuMT.HLTMenuConfig.CommonSequences.CaloSequenceSetup import ( - caloClusterRecoSequence, - ) - from TrigEFMissingET.TrigEFMissingETConf import HLT__MET__MHTPufitFex - - jetRecoDict = jetRecoDictForMET(trkopt="ftf", **recoDict) - # If this is PFlow then set the calib type to "em" - if recoDict["jetDataType"] == "pf": - jetRecoDict["calib"] = "em" - jetSeq, jetName, jetDef = RecoFragmentsPool.retrieve( - jetRecoSequence, flags=ConfigFlags, **jetRecoDict + inputs = ["Jets", "JetDef"] + if "pf" in recoDict["jetDataType"]: + inputs += ["MergedPFOs"] + else: + inputs += ["Clusters"] + super(MHTPufitConfig, self).__init__( + inputs=inputs, forceTracks=True, **recoDict ) - # We need to get the input name that the jet sequence used - _, clusterName = RecoFragmentsPool.retrieve( - caloClusterRecoSequence, flags=None, RoIs=self.inputMaker.RoIs - ) - if jetRecoDict["dataType"] == "pf": - from eflowRec.PFHLTSequence import PFHLTSequence - - _, pfoPrefix = RecoFragmentsPool.retrieve( - PFHLTSequence, - flags=None, - clustersin=clusterName, - tracktype=jetRecoDict["trkopt"], - ) - #jetDef = defineJets(jetRecoDict, pfoPrefix=pfoPrefix) - elif jetRecoDict["dataType"] == "tc": - pass - #jetDef = defineJets(jetRecoDict, clustersKey=clusterName) - else: - raise ValueError( - "Unexpected jetDataType {}".format(jetRecoDict["dataType"]) - ) - inputName = jetDef.inputdef.containername - calibHasAreaSub = "sub" in jetRecoDict["jetCalib"] + def make_fex(self, name, inputs): + calibHasAreaSub = "sub" in self.recoDict if calibHasAreaSub: from JetRecConfig.JetRecConfig import instantiateAliases from JetRecConfig.JetInputConfig import buildEventShapeAlg - instantiateAliases(jetDef) - evtShapeAlg = buildEventShapeAlg( jetDef, "HLT_" ) - + + instantiateAliases(inputs["JetDef"]) + evtShapeAlg = buildEventShapeAlg(inputs["JetDef"], "HLT_") + rhoKey = evtShapeAlg.EventDensityTool.OutputContainer else: rhoKey = "" - - self.inputs = [jetSeq] - self.fexAlg = self._make_fex_alg( - HLT__MET__MHTPufitFex, - InputJetsName=jetName, + if "pf" in self.recoDict["jetDataType"]: + inputName = inputs["MergedPFOs"] + else: + inputName = inputs["Clusters"] + return HLT__MET__MHTPufitFex( + name, + InputJetsName=inputs["Jets"], InputName=inputName, JetCalibIncludesAreaSub=calibHasAreaSub, JetEventShapeName=rhoKey, ) - diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/MET/AlgInputConfig.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/MET/AlgInputConfig.py new file mode 100644 index 0000000000000000000000000000000000000000..56482c0ec8c2fe846bb5f6c5a18b61559c29e4a0 --- /dev/null +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/MET/AlgInputConfig.py @@ -0,0 +1,201 @@ +# +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +# + +""" Helpers for creating input reco sequences + +Classes: + AlgInputConfig - base class for individual input configs + InputConfigRegistry - class to gather input configurations together + +Together, these classes implement a rudimentary dependency resolution method. +The main unit in this are the inputs being created. These are referred to by +nicknames rather than the container names directly as these can vary depending +on the reconstruction parameters provided. + +This file just provides the underlying mechanisms. For the concrete example see +METRecoSequences, which will be referenced in the following explanation. + +Each config declares the inputs it will produce and on what inputs it depends. +The dependencies are allowed to be different for different reco configurations +but for simplicity's sake the inputs produced are always the same. For example +the jet input config in METRecoSequences produces ["Jets", "JetDef"] and its +dependencies are ["Clusters"] if no tracks are needed and ["Clusters", "Tracks" +"Vertices"] otherwise. + +Each config also has a create_sequence method which builds the actual reco +sequence. This method returns a two-tuple. The first element is the reco +sequence which makes the inputs, the second is a dictionary mapping the produced +input's nicknames to their values. These values are usually storegate keys but +can be any object. For example, the jet input config (with the correct reco +configuration) would produce +{ + "Jets" : "HLT_AntiKt4EMTopoJets_subjesIS", + "JetDef" : jetdef +} +for this mapping, where jetdef is a python object produced by the jet reco +sequence. + +The dependency resolution is done by the InputConfigRegistry class. This +maintains a list of known input configs where no two can claim to produce the +same input. The main one used here is the default_inputs object created in +METRecoSequences. The 'build_steps' method is then used to create the necessary +sequences in the correct order, split into their steps and also to collate and +return the mapping of input nicknames to values. +""" + +from abc import ABC, abstractmethod +from collections import defaultdict + + +class AlgInputConfig(ABC): + """ Base class for building up inputs for the FEXes """ + + def __init__(self, produces, step=None): + """ Initialise the class + + ========= + Arguments + ========= + produces: The nicknames of the inputs this config produces + step: The step in which the input sequences should run + + step can be None, in which case it will be calculated as the maximum + of all the steps of the input's dependencies. This means that an input + with no dependencies must have its step set explicitly + """ + self._produces = produces + self._step = step + + @property + def step(self): + """ The reconstruction step this input runs in """ + return self._step + + @property + def produces(self): + """ Which (nicknamed) inputs does this config produce """ + return self._produces + + @abstractmethod + def dependencies(self, recoDict): + """ Given the reco parameters, which inputs does this config depend on """ + pass + + @abstractmethod + def create_sequence(self, inputs, RoIs, recoDict): + """ Create the sequence and return it along with a dictionary of the objects that it produces """ + pass + + +class InputConfigRegistry: + def __init__(self): + self._configs = {} + + def add_input(self, config): + overlap = [x for x in config.produces if x in self._configs] + if overlap: + raise ValueError( + f"Attempting to add an input config that produces {overlap} but these are already present" + ) + for x in config.produces: + self._configs[x] = config + + def build_steps(self, requested, RoIs, recoDict): + """ Build the necessary input sequence, separated by steps + + ========= + Arguments + ========= + requested: The nicknames of the requested inputs + RoIs: The input RoIs, one must be provided for each step + recoDict: The recoDict extracted from the chain + + ======= + Returns + ======= + (steps, inputs) + where steps is a list of input sequences, one for each step and inputs + is a dictionary mapping input nickname to storegate key + """ + # The input sequences, keyed by step + steps = defaultdict(list) + # The mapping of input nickname to storegate key + inputs = {} + # Internal mapping of input nickname to step + input_steps = {} + for name in requested: + this_steps = self._create_input( + name, RoIs, recoDict, input_steps=input_steps, inputs=inputs + ) + for step, seq_list in this_steps.items(): + steps[step] += seq_list + # Now convert the steps into a list + steps = [steps[idx] for idx in range(max(steps.keys()) + 1)] + return steps, inputs + + def _create_input(self, name, RoIs, recoDict, input_steps, inputs, _seen=None): + """ Create an input and its dependencies + + ========= + Arguments + ========= + name: The name of the input to create + RoIs: The input RoIs, one for each step + recoDict: The recoDict extracted from the chain + input_steps: Mapping of encountered inputs to the steps they happen in + inputs: The names of any inputs already created + _seen: internal parameter for catching circular dependencies + + ======= + Returns + ======= + steps + where steps is a list of input sequences, one for each step + The provided input_steps and inputs parameters are also updated with + the new inputs that have been produced + """ + if _seen is None: + _seen = [] + elif name in _seen: + raise RuntimeError( + "Circular dependency: {}".format(" -> ".join(_seen + [name])) + ) + if name in input_steps: + # We've already seen this step so return dummies + return {} + steps = defaultdict(list) + + try: + config = self._configs[name] + except KeyError: + raise KeyError(f"Requested input {name} not defined") + # If config.step is None, use this to record the max step among + # config's dependencies + step = config.step if config.step is not None else -1 + for dep_name in config.dependencies(recoDict): + dep_steps = self._create_input( + dep_name, RoIs, recoDict, input_steps, inputs, _seen + [name] + ) + dep_step = input_steps[dep_name] + if config.step is not None and dep_step > config.step: + raise ValueError( + f"Dependency {dep_name} is in a later step '{dep_step}' than {name} which requires it (step = {config.step})" + ) + else: + step = max(step, dep_step) + # Add these reco sequences to our output lists + for step, seq_list in dep_steps.items(): + steps[step] += seq_list + # Finally, add *our* info + if step < 0: + raise ValueError(f"Unable to work out step for input config {name}!") + if step > len(RoIs): + raise ValueError(f"Step {step} is greater than the number of RoIs ({RoIs})") + sequences, this_inputs = config.create_sequence(inputs, RoIs[step], recoDict) + steps[step] += sequences + inputs.update(this_inputs) + # Add this to the list of things we've already seen, along with everything else it's made + for made in this_inputs.keys(): + input_steps[made] = step + return steps diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/MET/ConfigHelpers.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/MET/ConfigHelpers.py index 418791db019e1d8206f12af9089ce8b25aa263e8..683dbad2d431c8af3c0201246c2b866f4b9c9a74 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/MET/ConfigHelpers.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/MET/ConfigHelpers.py @@ -4,26 +4,21 @@ """ from AthenaCommon.CFElements import seqAND -from ..Menu.SignatureDicts import METChainParts_Default, JetChainParts_Default -from ..Menu.MenuComponents import RecoFragmentsPool +from ..Menu.SignatureDicts import METChainParts_Default +from ..Menu.MenuComponents import RecoFragmentsPool, ChainStep, MenuSequence from copy import copy -import six +from ..CommonSequences.FullScanDefs import caloFSRoI, trkFSRoI +from AthenaCommon.Logging import logging +from TrigEFMissingET.TrigEFMissingETMTConfig import getMETMonTool +from abc import ABC, abstractmethod +from string import ascii_uppercase + +log = logging.getLogger(__name__) # The keys from the MET chain dict that directly affect reconstruction # The order here is important as it also controls the dict -> string conversion recoKeys = ["EFrecoAlg", "calib", "jetDataType", "jetCalib", "addInfo"] - -def extractMETRecoDict(chainDict, fillDefaults=True): - """ Extract the keys relevant to reconstruction from a provided dictionary - - If fillDefaults is True then any missing keys will be taken from the - METChainParts_Default dictionary. - """ - if fillDefaults: - return {k: chainDict.get(k, METChainParts_Default[k]) - for k in recoKeys} - else: - return {k: chainDict[k] for k in recoKeys if k in chainDict} +metFSRoIs = [caloFSRoI, trkFSRoI] def metRecoDictToString(recoDict, skipDefaults=True): """ Convert a dictionary containing reconstruction keys to a string @@ -33,39 +28,23 @@ def metRecoDictToString(recoDict, skipDefaults=True): also be skipped. """ return "_".join( - recoDict[k] for k in recoKeys if - k in recoDict and - (not skipDefaults or recoDict[k] != METChainParts_Default[k]) ) + recoDict[k] + for k in recoKeys + if k in recoDict + and (not skipDefaults or recoDict[k] != METChainParts_Default[k]) + ) -def jetRecoDictForMET(**recoDict): - """ Get a jet reco dict that's usable for the MET slice """ - keys = ["recoAlg", "dataType", "calib", "jetCalib", "trkopt", "cleaning"] - jrd = {k: recoDict.get(k, JetChainParts_Default[k]) for k in keys} - if "jetDataType" in recoDict: - # Allow for the renaming dataType -> jetDataType - jrd["dataType"] = recoDict["jetDataType"] - from TriggerMenuMT.HLTMenuConfig.Jet import JetRecoConfiguration - if jrd["jetCalib"] == "default": - jrd["jetCalib"] = JetRecoConfiguration.interpretJetCalibDefault(jrd) - return jrd - - -class AlgConfig(object): +class AlgConfig(ABC): """ Base class to describe algorithm configurations Each individual 'EFrecoAlg' should be described by *one* AlgConfig subclass. - That subclass must set two data members from its __init__ method: - - - self.inputs should be a *list* of all sequences required to make inputs - for the algorithm that calculates the MET value - - self.fexAlg should the FEX that calculates the MET value - - Alternatively the recoSequence property can be overwritten to not require - these. + It must provide its list of required inputs to the constructor and override + the make_fex method The name of fexAlg *must* be self.fexName and the METContainerKey property - *must* be set to self.outputKey + *must* be set to self.outputKey (but this class usually should take care of + this). The subclass must also implement the @classmethod 'algType' which returns the EFrecoAlg string that it describes. @@ -81,116 +60,162 @@ class AlgConfig(object): """ raise NotImplementedError("algType not implemented by subclass!") - def __init__(self, **recoDict): + def __init__(self, inputs=[], inputRegistry=None, **recoDict): + """ Initialise the base class + + ========= + Arguments + ========= + inputs: The nicknames of the inputs that this FEX uses + inputRegistry: + The InputConfigRegistry instance to use. Usually this can be left + as None and then METRecoSequences.default_inputs will be used. + However, this parameter is provided in case a FEX requires a vastly + different set of input objects + recoDict: Pass *all* the keys required for the recoDict + """ + # Make sure that we got *all* the keys (i.e. the subclass didn't # inadvertently steal one of them from us) - assert set(recoKeys) == set(six.iterkeys(recoDict) ), ( - "AlgConfig.__init__ did not receive all the recoKeys - this " - "suggests a problem in the subclass __init__ method!") + alg_type = self.algType() + assert all(k in recoDict for k in recoKeys), ( + f"AlgConfig.__init__ for {alg_type} did not receive all the recoKeys" + " - this suggests a problem in the subclass __init__ method!" + ) self.recoDict = copy(recoDict) self._suffix = metRecoDictToString(recoDict) + if inputRegistry is None: + from .METRecoSequences import default_inputs + + inputRegistry = default_inputs + self._registry = inputRegistry + self._inputs = inputs + + @abstractmethod + def make_fex(self, name, inputs): + """ Create the fex from its name and the inputs dict """ + pass + + @property + def inputRegistry(self): + """ The InputConfigRegistry object used to build the input sequences """ + return self._registry @property def outputKey(self): """ The MET container object produced by this algorithm """ from TrigEDMConfig.TriggerEDMRun3 import recordable - return recordable("HLT_MET_{}".format(self._suffix) ) + + return recordable("HLT_MET_{}".format(self._suffix)) @property def fexName(self): """ The name of the algorithm made by this configuration """ return "EFMET_{}".format(self._suffix) - @property - def hypoAlg(self): + def getMonTool(self): + """ Create the monitoring tool """ + return getMETMonTool() + + def athSequences(self): + """ Get the reco sequences (split by step) """ + if hasattr(self, "_athSequences"): + return self._athSequences + + inputMakers = self.inputMakers() + # Retrieve the inputss + log.verbose(f"Create inputs for {self._suffix}") + steps, inputs = self.inputRegistry.build_steps( + self._inputs, metFSRoIs, self.recoDict + ) + fex = self.make_fex(self.fexName, inputs) + fex.MonTool = self.getMonTool() + fex.METContainerKey = self.outputKey + sequences = [] + + for idx, algList in enumerate(steps): + # Put the input makers at the start + algList.insert(0, inputMakers[idx]) + if idx == len(steps) - 1: + algList += [fex] + sequences.append(seqAND(f"METAthSeq_step{idx}_{self._suffix}", algList)) + self._athSequences = sequences + return self._athSequences + + def menuSequences(self): + """ Get the menu sequences (split by step) """ + if hasattr(self, "_menuSequences"): + return self._menuSequences + + from TrigMissingETHypo.TrigMissingETHypoConfigMT import ( + TrigMETCellHypoToolFromDict, + ) + from TrigStreamerHypo.TrigStreamerHypoConfigMT import ( + StreamerHypoToolMTgenerator, + ) + + sequences = [] + inputMakers = self.inputMakers() + ath_sequences = self.athSequences() + for idx, seq in enumerate(ath_sequences): + if idx == len(ath_sequences) - 1: + hypo = self.make_hypo_alg() + hypo_tool = TrigMETCellHypoToolFromDict + else: + hypo = self.make_passthrough_hypo_alg(idx) + hypo_tool = StreamerHypoToolMTgenerator + sequences.append( + MenuSequence( + Sequence=seq, + Maker=inputMakers[idx], + Hypo=hypo, + HypoToolGen=hypo_tool, + ) + ) + self._menuSequences = sequences + return self._menuSequences + + def make_steps(self, chainDict): + """ Create the actual chain steps """ + # NB - we index the steps using uppercase letters 'A', 'B', etc + # This technically means that there is an upper limit of 26 on the + # number of different steps that can be provided this way, but it seems + # unlikely that we'll actually run into this limit. If we do, it + # shouldn't be a problem to change it + return [ + ChainStep( + f"step{ascii_uppercase[idx]}_{self._suffix}", + [seq], + multiplicity=[1], + chainDicts=[chainDict], + ) + for idx, seq in enumerate(self.menuSequences()) + ] + + def make_hypo_alg(self): """ The hypo alg used for this configuration """ - if hasattr(self, "_hypoAlg"): - return self._hypoAlg from TrigMissingETHypo.TrigMissingETHypoConf import TrigMissingETHypoAlgMT - self._hypoAlg = TrigMissingETHypoAlgMT( - name = "METHypoAlg_{}".format(self._suffix), - METContainerKey = self.outputKey) - return self._hypoAlg - @property - def menuSequence(self): - """ The menu sequence for this configuration """ - if hasattr(self, "_menuSequence"): - return self._menuSequence - - from ..Menu.MenuComponents import MenuSequence - from TrigMissingETHypo.TrigMissingETHypoConfigMT import TrigMETCellHypoToolFromDict - self._menuSequence = MenuSequence( - Sequence = self.athSequence, - Maker = self.inputMaker, - Hypo = self.hypoAlg, - # TODO - this shouldn't be called 'cell' something - HypoToolGen = TrigMETCellHypoToolFromDict) - return self._menuSequence - @property - def inputMaker(self): - """ The input maker for this configuration """ - if hasattr(self, "_inputMaker"): - return self._inputMaker - from TrigT2CaloCommon.CaloDef import clusterFSInputMaker - self._inputMaker = clusterFSInputMaker() - return self._inputMaker + return TrigMissingETHypoAlgMT( + name="METHypoAlg_{}".format(self._suffix), METContainerKey=self.outputKey + ) - @property - def athSequence(self): - """ Create the 'ath' sequence - - The return value is cached so only one instance is ever created - """ - if hasattr(self, "_athSequence"): - return self._athSequence - self._athSequence = seqAND("METAthSeq_{}".format(self._suffix), - [self.inputMaker, self.recoSequence]) - return self._athSequence + def make_passthrough_hypo_alg(self, step): + from TrigStreamerHypo.TrigStreamerHypoConf import TrigStreamerHypoAlgMT - @property - def recoSequence(self): - """ Create the full reco sequence - - The return value is cached so only one instance is ever created - """ - if hasattr(self, "_recoSequence"): - # Cache the result so we only ever create this once - return self._recoSequence - # First, verify that everything was done right - assert self.fexAlg.name() == self.fexName, ( - "Incorrect algorithm name '{}' set (should be '{}')".format( - self.fexAlg.name(), self.fexName) ) - assert self.fexAlg.METContainerKey == self.outputKey, ( - "Incorrect output key '{}' set (should be '{}')".format( - self.fexAlg.METContainerKey, self.outputKey) ) - - self._recoSequence = seqAND("METRecoSeq_{}".format(self._suffix), - self.inputs + [self.fexAlg]) - return self._recoSequence - - def _make_fex_alg(self, alg_cls, name=None, METContainerKey=None, - MonTool=None, **kwargs): - """ Helper function to make Fex algs - - Ensures that (unless overridden) the default name, output key and - monitoring tool are used. - """ - from TrigEFMissingET.TrigEFMissingETMTConfig import getMETMonTool - # Set the defaults - if name is None: - name = self.fexName - if METContainerKey is None: - METContainerKey = self.outputKey - if MonTool is None: - MonTool = getMETMonTool() - return alg_cls( - name = name, - METContainerKey = METContainerKey, - MonTool = MonTool, - **kwargs) + return TrigStreamerHypoAlgMT( + f"METPassThroughHypo_{self._suffix}_step{step}", SetInitialRoIAsFeature=True + ) + def inputMakers(self): + """ The input makers for each step """ + if hasattr(self, "_inputMakers"): + return self._inputMakers + from ..Jet.JetMenuSequences import getInitialInputMaker, getTrackingInputMaker + + self._inputMakers = [getInitialInputMaker(), getTrackingInputMaker()] + return self._inputMakers @classmethod def _get_subclasses(cls): @@ -216,11 +241,14 @@ class AlgConfig(object): for subcls in cls._get_subclasses(): if subcls.algType() == EFrecoAlg: return RecoFragmentsPool.retrieve( - subcls._makeCls, None, EFrecoAlg=EFrecoAlg, **recoDict) + subcls._makeCls, None, EFrecoAlg=EFrecoAlg, **recoDict + ) + + raise ValueError("Unknown EFrecoAlg '{}' requested".format(EFrecoAlg)) - raise ValueError("Unknown EFrecoAlg '{}' requested".format(EFrecoAlg) ) # Load all the defined configurations from . import AlgConfigs + # Make sure that there is an AlgConfig for every EFrecoAlg AlgConfigs.test_configs() diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/MET/METChainConfiguration.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/MET/METChainConfiguration.py index e0382a387115b1e8982e52c171deb8e0b5553441..1f8d05ba344bee160e820febda14cf12f2c90881 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/MET/METChainConfiguration.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/MET/METChainConfiguration.py @@ -1,42 +1,43 @@ # Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration from AthenaCommon.Logging import logging -logging.getLogger().info("Importing %s",__name__) + +logging.getLogger().info("Importing %s", __name__) log = logging.getLogger("TriggerMenuMT.HLTMenuConfig.MET.METChainConfiguration") from ..Menu.ChainConfigurationBase import ChainConfigurationBase -from .ConfigHelpers import extractMETRecoDict, metRecoDictToString, AlgConfig -from ..Menu.MenuComponents import ChainStep +from .ConfigHelpers import recoKeys, AlgConfig +from ..Menu.SignatureDicts import METChainParts_Default + + +def extractMETRecoDict(chainDict, fillDefaults=True): + """ Extract the keys relevant to reconstruction from a provided dictionary + If fillDefaults is True then any missing keys will be taken from the + METChainParts_Default dictionary. + """ + if fillDefaults: + return {k: chainDict.get(k, METChainParts_Default[k]) for k in recoKeys} + else: + return {k: chainDict[k] for k in recoKeys if k in chainDict} -#---------------------------------------------------------------- + +# ---------------------------------------------------------------- # Class to configure chain -#---------------------------------------------------------------- +# ---------------------------------------------------------------- class METChainConfiguration(ChainConfigurationBase): - def __init__(self, chainDict): - ChainConfigurationBase.__init__(self,chainDict) + ChainConfigurationBase.__init__(self, chainDict) # Only some subset of keys in the METChainParts dictionary describe # reconstruction details - only these keys are passed down into the menu # sequence (the actual hypo tool is created later) self.recoDict = extractMETRecoDict(self.chainPart) - + # ---------------------- # Assemble the chain depending on information from chainName # ---------------------- - def assembleChain(self): + def assembleChain(self): log.debug("Assembling chain for " + self.chainName) - - # Right now we only ever have one step, however we may want to - # reintroduce the automatic cell > 50 preselection - # this function interpretst the reco dict extracted in __init__ - mainStep = self.getMETStep() - return self.buildChain([mainStep]) - - def getMETStep(self): - """ Use the reco-dict to construct a single MET step """ - stepName = "Step1_met_{}".format(metRecoDictToString(self.recoDict) ) conf = AlgConfig.fromRecoDict(**self.recoDict) - seq = conf.menuSequence - return ChainStep(stepName, [seq], multiplicity=[1], chainDicts=[self.dict]) + return self.buildChain(conf.make_steps(self.dict)) diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/MET/METRecoSequences.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/MET/METRecoSequences.py index ce5aedd1244a59e4b94fb4deeeca6801e491e474..3ba1a92a7675d735ca55614c345d3def0fe8c3b1 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/MET/METRecoSequences.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/MET/METRecoSequences.py @@ -3,113 +3,313 @@ # -from .ConfigHelpers import AlgConfig, jetRecoDictForMET +from .AlgInputConfig import AlgInputConfig, InputConfigRegistry from AthenaCommon.Logging import logging from TriggerMenuMT.HLTMenuConfig.CommonSequences.CaloSequenceSetup import ( + cellRecoSequence, caloClusterRecoSequence, LCCaloClusterRecoSequence, ) from eflowRec.PFHLTSequence import PFHLTSequence -from ..Jet.JetRecoConfiguration import defineJetConstit -from ..Jet.JetTrackingConfig import JetTrackingSequence -from JetRecConfig.ConstModHelpers import getConstitModAlg +from ..Jet.JetRecoConfiguration import defineJetConstit, interpretJetCalibDefault +from ..Jet.JetRecoConfiguration import recoKeys as jetRecoKeys +from ..Jet.JetTrackingConfig import JetTrackingSequence, trkcollskeys +from ..Jet.JetRecoSequences import jetRecoSequence, getTrkColls +from JetRecConfig.ConstModHelpers import getConstitModAlg, aliasToInputDef from ..Menu.MenuComponents import RecoFragmentsPool from TrigEFMissingET.TrigEFMissingETConf import ( HLT__MET__CVFAlg, + HLT__MET__CVFPrepAlg, + HLT__MET__PFOPrepAlg, ApproximateTrackToLayerTool, ) +from AthenaConfiguration.AllConfigFlags import ConfigFlags +from ..Menu.SignatureDicts import JetChainParts_Default from InDetTrackSelectionTool.InDetTrackSelectionToolConf import ( InDet__InDetTrackSelectionTool, ) from TrackVertexAssociationTool.TrackVertexAssociationToolConf import ( CP__TrackVertexAssociationTool, ) - +import copy log = logging.getLogger(__name__) -def metAthSequence(dummyFlags, **recoDict): - conf = AlgConfig.fromRecoDict(**recoDict) - return conf.athSequence, conf.inputMaker, conf.outputKey +def jetRecoDictForMET(**recoDict): + """ Get a jet reco dict that's usable for the MET slice """ + jrd = {k: recoDict.get(k, JetChainParts_Default[k]) for k in jetRecoKeys} + if "jetDataType" in recoDict: + # Allow for the renaming dataType -> jetDataType + jrd["dataType"] = recoDict["jetDataType"] + if jrd["dataType"] == "pf": + # We only use em calibration for PFOs + jrd["calib"] = "em" + if jrd["jetCalib"] == "default": + jrd["jetCalib"] = interpretJetCalibDefault(jrd) + return jrd + + +default_inputs = InputConfigRegistry() + + +class CellInputConfig(AlgInputConfig): + def __init__(self): + super().__init__(produces=["Cells"], step=0) + + def dependencies(self, recoDict): + # Cells have no input dependencies + return [] + + def create_sequence(self, inputs, RoIs, recoDict): + cellSeq, cellName = RecoFragmentsPool.retrieve( + cellRecoSequence, flags=None, RoIs=RoIs + ) + return cellSeq, {"Cells": cellName} + + +default_inputs.add_input(CellInputConfig()) + + +class ClusterInputConfig(AlgInputConfig): + def __init__(self): + super().__init__(produces=["Clusters"], step=0) + + def dependencies(self, recoDict): + # Clusters have no input dependencies + return [] + + def create_sequence(self, inputs, RoIs, recoDict): + calib = recoDict["calib"] + if calib == "em": + tcSeq, clusterName = RecoFragmentsPool.retrieve( + caloClusterRecoSequence, flags=None, RoIs=RoIs + ) + elif calib == "lcw": + tcSeq, clusterName = RecoFragmentsPool.retrieve( + LCCaloClusterRecoSequence, flags=None, RoIs=RoIs + ) + else: + raise ValueError(f"Invalid value for cluster calibration: {calib}") + return [tcSeq], {"Clusters": clusterName} -def metRecoSequence(dummyFlags, **recoDict): - conf = AlgConfig.fromRecoDict(**recoDict) - return conf.recoSequence, conf.outputKey +default_inputs.add_input(ClusterInputConfig()) -def pfoRecoSequence(dummyFlags, RoIs, **recoDict): - """ Get PFOs as inputs for the MET algorithms +class EMClusterInputConfig(AlgInputConfig): + """ Input config that forces the clusters produced to be at the EM scale - Returns the list of input sequences and the pfo prefix + We have this so that we can force PFOs to be produced at the EM scale, + however a better solution would probably be to add 'em' to the trigger name + or to change the 'calib' default to be "default" and then have the algorithm + choose. """ - tcSeq, clusterName = RecoFragmentsPool.retrieve( - caloClusterRecoSequence, flags=None, RoIs=RoIs - ) - pfSeq, pfoPrefix = RecoFragmentsPool.retrieve( - PFHLTSequence, flags=None, clustersin=clusterName, tracktype="ftf" - ) - # The jet constituent modifier sequence here is to apply the correct weights - # and decorate the PV matching decoration - jetRecoDict = jetRecoDictForMET(trkopt="ftf", **recoDict) - jetRecoDict["calib"] = "em" - jetRecoDict["dataType"] = "pf" - constit = defineJetConstit(jetRecoDict, pfoPrefix=pfoPrefix) - from JetRecConfig.ConstModHelpers import aliasToInputDef - constit = aliasToInputDef(constit) - constit_mod_seq = getConstitModAlg( - constit, - # "HLT", - # tvaKey="JetTrackVtxAssoc_{trkopt}".format(**jetRecoDict), - # vtxKey="HLT_IDVertex_FS", - ) - allSeqs = [tcSeq, pfSeq] - if constit_mod_seq : - allSeqs.append(constit_mod_seq) - return allSeqs, pfoPrefix - - -def cvfClusterSequence(dummyFlags, RoIs, **recoDict): - """ Get the clusters with the CVF calculated - - Returns the list of input sequences, the cluster container name and the CVF - decoration name - """ - calib = recoDict["calib"] - if calib == "em": + def __init__(self): + super().__init__(produces=["EMClusters"], step=0) + + def dependencies(self, recoDict): + # Clusters have no input dependencies + return [] + + def create_sequence(self, inputs, RoIs, recoDict): tcSeq, clusterName = RecoFragmentsPool.retrieve( caloClusterRecoSequence, flags=None, RoIs=RoIs ) - elif calib == "lcw": - tcSeq, clusterName = RecoFragmentsPool.retrieve( - LCCaloClusterRecoSequence, flags=None, RoIs=RoIs + return [tcSeq], {"EMClusters": clusterName} + + +default_inputs.add_input(EMClusterInputConfig()) + + +class TrackingInputConfig(AlgInputConfig): + def __init__(self): + super().__init__( + produces=copy.copy(trkcollskeys), + step=1, + ) + + def dependencies(self, recoDict): + # Tracks have no input dependencies + return [] + + def create_sequence(self, inputs, RoIs, recoDict): + trkSeq, trkColls = RecoFragmentsPool.retrieve( + JetTrackingSequence, flags=None, trkopt="ftf", RoIs=RoIs + ) + return [trkSeq], trkColls + + +default_inputs.add_input(TrackingInputConfig()) + + +class PFOInputConfig(AlgInputConfig): + def __init__(self): + super().__init__(produces=["PFOPrefix", "cPFOs", "nPFOs"]) + + def _input_clusters(self, recoDict): + # Only take the config that forces 'EMClusters' if the calibration + # isn't set to 'em'. If it's set to em then we want to make sure that + # we only create those sequences once + return "Clusters" if recoDict["calib"] == "em" else "EMClusters" + + def dependencies(self, recoDict): + return [self._input_clusters(recoDict), "Tracks", "Vertices", "TVA"] + + def create_sequence(self, inputs, RoIs, recoDict): + pfSeq, pfoPrefix = RecoFragmentsPool.retrieve( + PFHLTSequence, + flags=None, + clustersin=inputs[self._input_clusters(recoDict)], + tracktype="ftf", + ) + # The jet constituent modifier sequence here is to apply the correct weights + # and decorate the PV matching decoration + jetRecoDict = jetRecoDictForMET(trkopt="ftf", **recoDict) + jetRecoDict["calib"] = "em" + jetRecoDict["dataType"] = "pf" + constit_mod_seq = getConstitModAlg( + aliasToInputDef(defineJetConstit(jetRecoDict, pfoPrefix=pfoPrefix)) + ) + allSeqs = [pfSeq] + if constit_mod_seq: + allSeqs.append(constit_mod_seq) + return ( + allSeqs, + { + "PFOPrefix": pfoPrefix, + "cPFOs": pfoPrefix + "CHSChargedParticleFlowObjects", + "nPFOs": pfoPrefix + "CHSNeutralParticleFlowObjects", + }, ) - else: - raise ValueError("Unsupported calib state {} requested!".format(calib)) - - trkopt = "ftf" - trackSeq, trackColls = RecoFragmentsPool.retrieve( - JetTrackingSequence, flags=None, trkopt=trkopt, RoIs=RoIs - ) - - # These are the names set by the upstream algorithms. Unfortunately - # these aren't passed to us - we just have to 'know' them - tracks = "HLT_IDTrack_FS_FTF" - vertices = "HLT_IDVertex_FS" - - cvfAlg = RecoFragmentsPool.retrieve( - HLT__MET__CVFAlg, - "{}{}ClusterCVFAlg".format(calib, trkopt), - InputClusterKey=clusterName, - InputTrackKey=tracks, - InputVertexKey=vertices, - OutputCVFKey="CVF", - TrackSelectionTool=InDet__InDetTrackSelectionTool(CutLevel="TightPrimary"), - TVATool=CP__TrackVertexAssociationTool( - WorkingPoint="Loose", VertexContainer=vertices - ), - ExtensionTool=ApproximateTrackToLayerTool(), - ) - return [tcSeq, trackSeq, cvfAlg], clusterName, "CVF" + + +default_inputs.add_input(PFOInputConfig()) + + +class MergedPFOInputConfig(AlgInputConfig): + """ Input config for the PFOs merged into a single container """ + + def __init__(self): + super().__init__(produces=["MergedPFOs", "PFOPUCategory"]) + + def dependencies(self, recoDict): + return ["PFOPrefix", "cPFOs", "nPFOs"] + + def create_sequence(self, inputs, RoIs, recoDict): + prepAlg = RecoFragmentsPool.retrieve( + HLT__MET__PFOPrepAlg, + f"{inputs['PFOPrefix']}METTrigPFOPrepAlg", + InputNeutralKey=inputs["nPFOs"], + InputChargedKey=inputs["cPFOs"], + OutputKey=f"{inputs['PFOPrefix']}METTrigCombinedParticleFlowObjects", + OutputCategoryKey="PUClassification", + ) + return ( + [prepAlg], + { + "MergedPFOs": prepAlg.OutputKey, + "PFOPUCategory": prepAlg.OutputCategoryKey, + }, + ) + + +default_inputs.add_input(MergedPFOInputConfig()) + + +class CVFClusterInputConfig(AlgInputConfig): + def __init__(self): + super().__init__(produces=["CVF", "CVFPUCategory"]) + + def dependencies(self, recoDict): + return ["Clusters", "Tracks", "Vertices"] + + def create_sequence(self, inputs, RoIs, recoDict): + trkopt = "ftf" + cvfAlg = RecoFragmentsPool.retrieve( + HLT__MET__CVFAlg, + f"{recoDict['calib']}{trkopt}ClusterCVFAlg", + InputClusterKey=inputs["Clusters"], + InputTrackKey=inputs["Tracks"], + InputVertexKey=inputs["Vertices"], + OutputCVFKey="CVF", + TrackSelectionTool=InDet__InDetTrackSelectionTool(CutLevel="TightPrimary"), + TVATool=CP__TrackVertexAssociationTool( + WorkingPoint="Loose", VertexContainer=inputs["Vertices"] + ), + ExtensionTool=ApproximateTrackToLayerTool(), + ) + prepAlg = RecoFragmentsPool.retrieve( + HLT__MET__CVFPrepAlg, + f"{recoDict['calib']}{trkopt}ClusterCVFPrepAlg", + InputClusterKey=inputs["Clusters"], + InputCVFKey=cvfAlg.OutputCVFKey, + OutputCategoryKey="PUClassification", + ) + return ( + [cvfAlg, prepAlg], + {"CVF": cvfAlg.OutputCVFKey, "CVFPUCategory": prepAlg.OutputCategoryKey}, + ) + + +default_inputs.add_input(CVFClusterInputConfig()) + + +class JetInputConfig(AlgInputConfig): + """ Helper input config for jets + + Note that if the jets require JVT but are topo jets there is nothing in the + recoDict (unless the calibration is gsc) to force tracking to run. Therefore + for this config, you can add an extra key 'forceTracks' to the recoDict + """ + + def __init__(self): + super().__init__(produces=["Jets", "JetDef"]) + + def _input_clusters(self, recoDict): + # Only take the config that forces 'EMClusters' if the calibration + # isn't set to 'em'. If it's set to em then we want to make sure that + # we only create those sequences once + # NB: for the jets here this is hopefully temporary - we're only forcing + # the clusters to be EM as we haven't added the lcw jets to the EDM + return "Clusters" if recoDict["calib"] == "em" else "EMClusters" + + def _use_tracks(self, recoDict): + """ Whether or not this reco configuration requires tracks """ + if recoDict.get("forceTracks", False): + return True + if recoDict["jetDataType"] in ["pf", "csskpf"]: + return True + elif recoDict["jetDataType"] in ["tc", "sktc", "cssktc"]: + return "gsc" in recoDict["jetCalib"] + else: + raise ValueError(f"Unexpected jetDataType {recoDict['jetDataType']}") + + def dependencies(self, recoDict): + deps = [self._input_clusters(recoDict)] + if self._use_tracks(recoDict): + deps += ["Tracks", "Vertices"] + return deps + + def create_sequence(self, inputs, RoIs, recoDict): + trkopt = "ftf" if self._use_tracks(recoDict) else "notrk" + recoDict = {k: v for k, v in recoDict.items() if k != "forceTracks"} + jetRecoDict = jetRecoDictForMET(trkopt=trkopt, **recoDict) + # hard code to em (for now) - there are no LC jets in EDM + jetRecoDict["calib"] = "em" + + # Extract the track collections part from our input dict + trkcolls = {} if trkopt == "notrk" else getTrkColls(inputs) + + jetSeq, jetName, jetDef = RecoFragmentsPool.retrieve( + jetRecoSequence, + ConfigFlags, + clustersKey=inputs[self._input_clusters(recoDict)], + **trkcolls, + **jetRecoDict, + ) + return [jetSeq], {"Jets": jetName, "JetDef": jetDef} + + +default_inputs.add_input(JetInputConfig()) diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_v1.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_v1.py index eb2542b957fad431fae6b10f4ff05e8a5d4a7292..929dfc215d8a596a42fd227fde795cd49d73c22e 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_v1.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_v1.py @@ -222,6 +222,9 @@ def setupMenu(): ChainProp(name='HLT_j85_ftf_L1J20', groups=SingleJetGroup), ChainProp(name='HLT_j45_pf_ftf_L1J20', groups=SingleJetGroup), + ChainProp(name='HLT_j45_pf_ftf_preselj45_L1J20', groups=SingleJetGroup), + ChainProp(name='HLT_j45_ftf_preselj45_L1J20', groups=SingleJetGroup), + ChainProp(name='HLT_j45_subjesIS_ftf_preselj45_L1J20', groups=SingleJetGroup), ChainProp(name='HLT_j45_pf_subjesgscIS_ftf_L1J20', groups=SingleJetGroup), ChainProp(name='HLT_j85_pf_ftf_L1J20', groups=SingleJetGroup), diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/SignatureDicts.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/SignatureDicts.py index bbe5aa7ead2982b59b55f9e7a7c0312481e567ea..dad431596e854b456fe150af542e72ec3305e063 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/SignatureDicts.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/SignatureDicts.py @@ -134,6 +134,7 @@ JetChainParts = { 'bConfig' : ['split',], 'bMatching' : ['antimatchdr05mu'], 'trkopt' : ['notrk','ftk','ftkrefit','ftf'], + 'trkpresel' : ['nopresel','preselj45'], 'hypoScenario' : ['simple', 'vbenf', 'vbenfSEP30etSEP34mass35SEP50fbet', 'dijetSEP80j1etSEP0j1eta240SEP80j2etSEP0j2eta240SEP700djmass', @@ -172,6 +173,7 @@ JetChainParts_Default = { 'bMatching' : [], 'dataScouting' : '', 'trkopt' : 'notrk', + 'trkpresel' : 'nopresel', 'hypoScenario' : 'simple', 'smc' : 'nosmc', 'sigFolder' : 'Jet', diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Muon/MuonSetup.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Muon/MuonSetup.py index a4e2acacb564f197c17ac2c24ccd6a05136166f9..0934aaaf8fdd3322fd16b3745924314dec237d68 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Muon/MuonSetup.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Muon/MuonSetup.py @@ -198,8 +198,11 @@ def makeMuonPrepDataAlgs(RoIs="MURoIs", forFullScan=False): ToolSvc += MuonMdtRawDataProviderTool from MuonMDT_CnvTools.MuonMDT_CnvToolsConf import Muon__MdtRdoToPrepDataToolMT + from MuonCnvExample import MuonCalibConfig + MdtRdoToMdtPrepDataTool = Muon__MdtRdoToPrepDataToolMT(name = "MdtRdoToPrepDataTool", - MdtPrdContainerCacheKey = MuonPrdCacheNames.MdtCache) + MdtPrdContainerCacheKey = MuonPrdCacheNames.MdtCache, + CalibrationTool=MuonCalibConfig.MdtCalibrationTool()) ToolSvc += MdtRdoToMdtPrepDataTool diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/UnconventionalTracking/UnconventionalTrackingChainConfiguration.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/UnconventionalTracking/UnconventionalTrackingChainConfiguration.py index 94f52e37600dc43a43b8b7b0a94a5bd1f6c562f0..bb83906a355eb50d2769129232fad814e3fb6f46 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/UnconventionalTracking/UnconventionalTrackingChainConfiguration.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/UnconventionalTracking/UnconventionalTrackingChainConfiguration.py @@ -7,6 +7,7 @@ log = logging.getLogger("TriggerMenuMT.HLTMenuConfig.UnconventionalTracking.Unco from TriggerMenuMT.HLTMenuConfig.Menu.ChainConfigurationBase import ChainConfigurationBase from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import MenuSequence, RecoFragmentsPool from AthenaCommon.CFElements import seqAND +from ..CommonSequences.FullScanDefs import caloFSRoI def unconventionalTrackingChainParts(chainParts): unconvtrkChainParts = [] @@ -89,8 +90,7 @@ def IsoHPtTrackTriggerSequence(ConfigFlags): from TrigEDMConfig.TriggerEDMRun3 import recordable from TrigInDetConfig.InDetSetup import makeInDetAlgsNoView - RoIs = 'HLT_FSJETRoI' - TrkInputNoViewAlg = makeInDetAlgsNoView( config = IDTrigConfig, rois=recordable(RoIs)) + TrkInputNoViewAlg = makeInDetAlgsNoView( config = IDTrigConfig, rois=caloFSRoI) diff --git a/Trigger/TriggerCommon/TriggerMenuMT/share/full_menu_cf.py b/Trigger/TriggerCommon/TriggerMenuMT/share/full_menu_cf.py index 78cbf0474981eb672ad672ee60e5ee33a85bc6c1..67529e23aa56629f39f4fdabcfb3347b42778615 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/share/full_menu_cf.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/share/full_menu_cf.py @@ -117,40 +117,58 @@ def generateChains(): ################################################################## # jet chains ################################################################## + + from TriggerMenuMT.HLTMenuConfig.Jet.JetRecoConfiguration import jetRecoDictFromString + from AthenaConfiguration.AllConfigFlags import ConfigFlags + def jetCaloHypoMenuSequenceFromString(jet_def_str): + jetRecoDict = jetRecoDictFromString(jet_def_str) + from TriggerMenuMT.HLTMenuConfig.Jet.JetMenuSequences import jetCaloHypoMenuSequence + return jetCaloHypoMenuSequence(ConfigFlags, **jetRecoDict) + + def jetCaloPreselMenuSequenceFromString(jet_def_str): + jetRecoDict = jetRecoDictFromString(jet_def_str) + from TriggerMenuMT.HLTMenuConfig.Jet.JetMenuSequences import jetCaloPreselMenuSequence + return jetCaloPreselMenuSequence(ConfigFlags, **jetRecoDict) + + def jetTrackingHypoMenuSequenceFromString(jet_def_str,clustersKey): + jetRecoDict = jetRecoDictFromString(jet_def_str) + from TriggerMenuMT.HLTMenuConfig.Jet.JetMenuSequences import jetTrackingHypoMenuSequence + return jetTrackingHypoMenuSequence(ConfigFlags, clustersKey=clustersKey, **jetRecoDict) + if opt.doJetSlice == True: - from DecisionHandling.jetMenuHelper import jetMenuSequenceFromString - # small-R jets, different calibrations HLT_AntiKt4EMTopoJets_subjesIS - jetSeq_a4_tc_em = jetMenuSequenceFromString("a4_tc_em_subjesIS") - step_a4_tc_em =makeChainStep("Step_jet_a4_tc_em", [jetSeq_a4_tc_em]) - - jetSeq_a4_tc_em_subjes = jetMenuSequenceFromString("a4_tc_em_subjes") - step_a4_tc_em_subjes = makeChainStep("Step_jet_a4_subjes_tc_em", [jetSeq_a4_tc_em_subjes]) + # small-R jets + jetSeq_a4_tc_em = jetCaloHypoMenuSequenceFromString("a4_tc_em_subjesIS") + step_a4_tc_em = makeChainStep("Step_jet_a4_tc_em", [jetSeq_a4_tc_em]) - jetSeq_a4_tc_em_nocalib = jetMenuSequenceFromString("a4_tc_em_nojcalib") - step_a4_tc_em_nocalib=makeChainStep("Step_jet_a4_nojcalib_tc_em", [jetSeq_a4_tc_em_nocalib]) - - # jetSeq_a4_tc_lcw = jetMenuSequenceFromString("a10_tc_lcw_subjesIS") - # step_a4_tc_lcw=ChainStep("Step_jet_a10_tc_lcw", [jetSeq_a4_tc_lcw]) - # large-R jets - jetSeq_a10_tc_lcw_subjes = jetMenuSequenceFromString("a10_tc_lcw_subjes") - step_a10_tc_lcw_subjes=makeChainStep("Step_jet_a10_subjes_tc_lcw", [jetSeq_a10_tc_lcw_subjes]) + jetSeq_a10_tc_lcw_subjes = jetCaloHypoMenuSequenceFromString("a10_tc_lcw_subjes") + step_a10_tc_lcw_subjes = makeChainStep("Step_jet_a10_subjes_tc_lcw", [jetSeq_a10_tc_lcw_subjes]) - jetSeq_a10r = jetMenuSequenceFromString("a10r_tc_em_subjesIS") - step_a10r=makeChainStep("Step_jet_a10r", [jetSeq_a10r]) + jetSeq_a10r = jetCaloHypoMenuSequenceFromString("a10r_tc_em_subjesIS") + step_a10r = makeChainStep("Step_jet_a10r", [jetSeq_a10r]) + + jetSeq_a10t = jetCaloHypoMenuSequenceFromString("a10t_tc_lcw_jes") + step_a10t = makeChainStep("Step_jet_a10t", [jetSeq_a10t]) + # Jet chains with tracking + jetSeq_a4_tc_em_presel, emclusters = jetCaloPreselMenuSequenceFromString("a4_tc_em_subjesIS") + step_a4_tc_em_presel = makeChainStep("Step_jet_a4_tc_em_presel", [jetSeq_a4_tc_em_presel]) + jetSeq_a4_pf_em_ftf = jetTrackingHypoMenuSequenceFromString("a4_tc_em_subresjesgscIS_ftf",emclusters) + step_a4_pf_em_ftf = makeChainStep("Step_jet_a4_pf_em_ftf", [jetSeq_a4_pf_em_ftf]) + jetChains = [ makeChain(name='HLT_j45_L1J20', L1Thresholds=["J20"], ChainSteps=[step_a4_tc_em] ), makeChain(name='HLT_j85_L1J20', L1Thresholds=["J20"], ChainSteps=[step_a4_tc_em] ), makeChain(name='HLT_j420_L1J20', L1Thresholds=["J20"], ChainSteps=[step_a4_tc_em] ), makeChain(name='HLT_j260_320eta490_L1J20', L1Thresholds=["J20"], ChainSteps=[step_a4_tc_em] ), - # makeChain(name='HLT_j225_gsc420_boffperf_split', ChainSteps=[step_a4_tc_em] ), makeChain(name='HLT_j0_vbenfSEP30etSEP34mass35SEP50fbet_L1J20', L1Thresholds=["J20"], ChainSteps=[step_a4_tc_em] ), makeChain(name='HLT_j460_a10_lcw_subjes_L1J20', L1Thresholds=["J20"], ChainSteps=[step_a10_tc_lcw_subjes] ), makeChain(name='HLT_j460_a10r_L1J20', L1Thresholds=["J20"], ChainSteps=[step_a10r] ), + makeChain(name='HLT_j460_a10t_L1J20', L1Thresholds=["J20"], ChainSteps=[step_a10t] ), makeChain(name='HLT_3j200_L1J20', L1Thresholds=["J20"], ChainSteps=[step_a4_tc_em] ), makeChain(name='HLT_5j70_0eta240_L1J20', L1Thresholds=["J20"], ChainSteps=[step_a4_tc_em] ), # 5j70_0eta240_L14J15 (J20 until multi-object L1 seeds supported) + makeChain(name='HLT_j45_pf_subresjesgscIS_ftf_L1J20', L1Thresholds=["J20"], ChainSteps=[step_a4_tc_em_presel,step_a4_pf_em_ftf] ), ] testChains += jetChains @@ -160,18 +178,19 @@ def generateChains(): # bjet chains ################################################################## if opt.doBjetSlice == True: - from DecisionHandling.jetMenuHelper import jetMenuSequenceFromString from TriggerMenuMT.HLTMenuConfig.Bjet.BjetSequenceSetup import getBJetSequence - jetSequence = jetMenuSequenceFromString("a4_tc_em_subjesgscIS_ftf") + jetSeq_a4_tc_em_presel, emclusters = jetCaloPreselMenuSequenceFromString("a4_tc_em_subjesIS") + jetSeq_a4_tc_em_gsc_ftf = jetTrackingHypoMenuSequenceFromString("a4_tc_em_subjesgscIS_ftf",emclusters) - step1 = makeChainStep("Step1_bjet", [jetSequence] ) - step2 = makeChainStep("Step2_bjet", [getBJetSequence()]) + step1 = makeChainStep("Step_jet_a4_tc_em_presel", [jetSeq_a4_tc_em_presel]) + step2 = makeChainStep("Step_jet_a4_tc_em_gsc_ftf", [jetSeq_a4_tc_em_gsc_ftf]) + step3 = makeChainStep("Step3_bjet", [getBJetSequence()]) bjetChains = [ - makeChain(name='HLT_j45_ftf_subjesgscIS_boffperf_split_L1J20' , L1Thresholds=["J20"], ChainSteps=[step1,step2] ), - makeChain(name='HLT_j45_ftf_subjesgscIS_bmv2c1070_split_L1J20', L1Thresholds=["J20"], ChainSteps=[step1,step2] ), - makeChain(name='HLT_j45_ftf_subjesgscIS_bmv2c1070_L1J20' , L1Thresholds=["J20"], ChainSteps=[step1,step2] ) + makeChain(name='HLT_j45_ftf_subjesgscIS_boffperf_split_L1J20' , L1Thresholds=["J20"], ChainSteps=[step1,step2,step3] ), + makeChain(name='HLT_j45_ftf_subjesgscIS_bmv2c1070_split_L1J20', L1Thresholds=["J20"], ChainSteps=[step1,step2,step3] ), + makeChain(name='HLT_j45_ftf_subjesgscIS_bmv2c1070_L1J20' , L1Thresholds=["J20"], ChainSteps=[step1,step2,step3] ) ] testChains += bjetChains @@ -204,17 +223,20 @@ def generateChains(): ################################################################## if opt.doMETSlice == True: from TriggerMenuMT.HLTMenuConfig.MET.METMenuSequences import metMenuSequence - from TriggerMenuMT.HLTMenuConfig.MET.ConfigHelpers import extractMETRecoDict + from TriggerMenuMT.HLTMenuConfig.MET.METChainConfiguration import extractMETRecoDict + from TriggerMenuMT.HLTMenuConfig.MET.ConfigHelpers import AlgConfig cellRecoDict = extractMETRecoDict({'EFrecoAlg': "cell"}) - metCellSeq = metMenuSequence(None, **cellRecoDict) + metCellConf = AlgConfig.fromRecoDict(**cellRecoDict) + metCellSeqs = metCellConf.menuSequences() pufitRecoDict = extractMETRecoDict({'EFrecoAlg': "tcpufit"}) - metClusterPufitSeq = metMenuSequence(None, **pufitRecoDict) + metClusterPufitConf = AlgConfig.fromRecoDict(**pufitRecoDict) + metClusterPufitSeqs = metClusterPufitConf.menuSequences() - metCellStep = makeChainStep("Step1_met_cell", [metCellSeq]) - metClusterPufitStep = makeChainStep("Step1_met_clusterpufit", [metClusterPufitSeq]) - comboStep_cell_clusterpufit = makeChainStep("Step1_combo_cell_clusterpufit", [metCellSeq, metClusterPufitSeq], multiplicity=[1,1]) + metCellStep = makeChainStep("Step1_met_cell", metCellSeqs) + metClusterPufitStep = makeChainStep("Step1_met_clusterpufit", metClusterPufitSeqs) + comboStep_cell_clusterpufit = makeChainStep("Step1_combo_cell_clusterpufit", metCellSeqs + metClusterPufitSeqs, multiplicity=[1,1]) metChains = [ makeChain(name="HLT_xe65_L1XE50", L1Thresholds=["XE50"], ChainSteps=[metCellStep]),