diff --git a/Control/PileUpComps/CMakeLists.txt b/Control/PileUpComps/CMakeLists.txt index 18d80ceba95eac0a698a3a1ff458fe904cb988ac..01e7273ab197eab005d3b580d14cc158a3383b00 100644 --- a/Control/PileUpComps/CMakeLists.txt +++ b/Control/PileUpComps/CMakeLists.txt @@ -20,6 +20,7 @@ atlas_depends_on_subdirs( PRIVATE # External dependencies: find_package( Boost COMPONENTS filesystem thread system ) find_package( CLHEP ) +find_package( GTest ) # Component(s) in the package: atlas_add_component( PileUpComps @@ -32,3 +33,7 @@ atlas_add_component( PileUpComps EventInfoUtils xAODEventInfo GaudiKernel ) +atlas_add_test( PileUpHashHelper_test + SOURCES src/PileUpHashHelper.cxx test/PileUpHashHelper_test.cxx + INCLUDE_DIRS src ${GTEST_INCLUDE_DIRS} + LINK_LIBRARIES xAODEventInfo ${GTEST_LIBRARIES} ) diff --git a/Control/PileUpComps/src/PileUpEventLoopMgr.cxx b/Control/PileUpComps/src/PileUpEventLoopMgr.cxx index f1c4dad262bb8a7f217c4e6f28324be17a1964bf..b89ee186d7f2e3cc2e61b6fa2728ba0a763ef84a 100644 --- a/Control/PileUpComps/src/PileUpEventLoopMgr.cxx +++ b/Control/PileUpComps/src/PileUpEventLoopMgr.cxx @@ -5,6 +5,8 @@ // Class header #include "PileUpEventLoopMgr.h" +// Helper header +#include "PileUpHashHelper.h" // Athena includes #include "AthenaBaseComps/AthMsgStreamMacros.h" @@ -497,6 +499,34 @@ StatusCode PileUpEventLoopMgr::nextEvent(int maxevt) } } //loop over xings + // Calculate/copy pile-up hash + xAOD::EventInfo::PileUpMixtureID pileUpMixtureID; + if (m_isEventOverlayJob && m_isEventOverlayJobMC) { + // Just copy over the background PileUpMixtureID + pileUpMixtureID = pEvent->pileUpMixtureID(); + if ( pileUpMixtureID.lowBits != 0 || pileUpMixtureID.highBits != 0 ) { + pOverEvent->setPileUpMixtureID( pileUpMixtureID ); + } + } else { + PileUpHashHelper pileUpHashHelper; + + if (m_isEventOverlayJob) { + pileUpHashHelper.addToHashSource(std::to_string(pEvent->eventNumber())); + } else { + pileUpHashHelper.addToHashSource(pOverEvent); + } + + ATH_MSG_VERBOSE("Pile-up hash source:" << pileUpHashHelper.hashSource()); + + // Calculate and set hash + uuid_t pileUpHash; + pileUpHashHelper.calculateHash(pileUpHash); + + pOverEvent->setPileUpMixtureID( PileUpHashHelper::uuidToPileUpMixtureId(pileUpHash) ); + } + + ATH_MSG_DEBUG("PileUpMixtureID = " << pOverEvent->pileUpMixtureID()); + //set active store back to the overlaid one pActiveStore->setStore(&(*m_evtStore)); diff --git a/Control/PileUpComps/src/PileUpHashHelper.cxx b/Control/PileUpComps/src/PileUpHashHelper.cxx new file mode 100644 index 0000000000000000000000000000000000000000..d9e4c090123c3b420ce43cfdbbe1de9b85fc8f34 --- /dev/null +++ b/Control/PileUpComps/src/PileUpHashHelper.cxx @@ -0,0 +1,76 @@ +/* + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +*/ + +/// @author Tadej Novak + +#include <CxxUtils/MD5.h> + +#include "PileUpHashHelper.h" + +void PileUpHashHelper::addToHashSource(const std::string &string) +{ + m_stream << string; +} + +void PileUpHashHelper::addToHashSource(const xAOD::EventInfo *eventInfo) +{ + const std::vector<xAOD::EventInfo::SubEvent> &subEventsSource = eventInfo->subEvents(); + std::vector<std::reference_wrapper<const xAOD::EventInfo::SubEvent>> subEvents(subEventsSource.begin(), subEventsSource.end()); + + std::stable_sort(subEvents.begin(), subEvents.end(), [](const xAOD::EventInfo::SubEvent &a, const xAOD::EventInfo::SubEvent &b) { + return (a.ptr()->bcid() < b.ptr()->bcid()) || + ((a.ptr()->bcid() == b.ptr()->bcid()) && (a.type() < b.type())) || + ((a.ptr()->bcid() == b.ptr()->bcid()) && (a.type() == b.type()) && (a.ptr()->eventNumber() < b.ptr()->eventNumber())); + }); + + // Generate subevents info string + bool first = true; + for (const xAOD::EventInfo::SubEvent &subevent : subEvents) { + if (subevent.type() == xAOD::EventInfo::Signal) { + continue; + } + + if (first) { + first = false; + } else { + m_stream << ";"; + } + + m_stream << (static_cast<int32_t>(subevent.ptr()->bcid()) - static_cast<int32_t>(eventInfo->bcid())) << "_" << subevent.type() << "_" << subevent.ptr()->eventNumber(); + } +} + +void PileUpHashHelper::clearHashSource() +{ + m_stream.str(std::string()); +} + +void PileUpHashHelper::calculateHash(uuid_t &hash) const +{ + std::string sourceStr = m_stream.str(); + + MD5 md5Hash(sourceStr); + md5Hash.uuid_digest(hash); +} + +xAOD::EventInfo::PileUpMixtureID PileUpHashHelper::uuidToPileUpMixtureId(const uuid_t &hash) +{ + xAOD::EventInfo::PileUpMixtureID mixture{}; + + for (uint16_t i = 0; i < PILEUP_SIZE_BYTES; i++) { + mixture.lowBits |= (static_cast<unsigned long long>(hash[i]) << (i * sizeof(unsigned char) * CHAR_BIT)); + mixture.highBits |= (static_cast<unsigned long long>(hash[i + PILEUP_SIZE_BYTES]) << (i * sizeof(unsigned char) * CHAR_BIT)); + } + + return mixture; +} + +void PileUpHashHelper::pileUpMixtureIdToUuid(const xAOD::EventInfo::PileUpMixtureID &mixture, + uuid_t &hash) +{ + for (uint16_t i = 0; i < PILEUP_SIZE_BYTES; i++) { + hash[i] |= (mixture.lowBits >> (i * sizeof(unsigned char) * CHAR_BIT)); + hash[i + PILEUP_SIZE_BYTES] |= (mixture.highBits >> (i * sizeof(unsigned char) * CHAR_BIT)); + } +} diff --git a/Control/PileUpComps/src/PileUpHashHelper.h b/Control/PileUpComps/src/PileUpHashHelper.h new file mode 100644 index 0000000000000000000000000000000000000000..f20476ae84154ec5015847ffe068efdea280201f --- /dev/null +++ b/Control/PileUpComps/src/PileUpHashHelper.h @@ -0,0 +1,54 @@ +/* + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef PILEUPCOMPS_PILEUPHASHHELPER_H +#define PILEUPCOMPS_PILEUPHASHHELPER_H + +/** + @file PileUpHashHelper.h + @brief A helper class to compute a hash of pile-up events + @author Tadej Novak +*/ + +#include <sstream> + +#include <uuid/uuid.h> + +#include <xAODEventInfo/EventInfo.h> + +class PileUpHashHelper +{ +public: + PileUpHashHelper() {} + + /// Add a plain string to the stream + void addToHashSource(const std::string &string); + + /// Add subevents to the stream + void addToHashSource(const xAOD::EventInfo *eventInfo); + + /// Clear the stream + void clearHashSource(); + + /// Get the current hash base + std::string hashSource() const { return m_stream.str(); } + + /// Calculate the hash + void calculateHash(uuid_t &hash) const; + + /// Convert uuid_t to xAOD::EventInfo::PileUpMixtureID + static xAOD::EventInfo::PileUpMixtureID uuidToPileUpMixtureId(const uuid_t &hash); + + /// xAOD::EventInfo::PileUpMixtureID to uuid_t + static void pileUpMixtureIdToUuid(const xAOD::EventInfo::PileUpMixtureID &mixture, + uuid_t &hash); + + /// Size of individual low/high bits in bytes + static const uint16_t PILEUP_SIZE_BYTES = 8; + +private: + std::stringstream m_stream; +}; + +#endif // PILEUPCOMPS_PILEUPHASHHELPER_H diff --git a/Control/PileUpComps/test/PileUpHashHelper_test.cxx b/Control/PileUpComps/test/PileUpHashHelper_test.cxx new file mode 100644 index 0000000000000000000000000000000000000000..ec7b819a1b1f070b73fbfa7077f3f57502d513be --- /dev/null +++ b/Control/PileUpComps/test/PileUpHashHelper_test.cxx @@ -0,0 +1,59 @@ +/* + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +*/ + +/// @author Tadej Novak + +// Google Test +#include <gtest/gtest.h> + +// The class to test +#include "PileUpHashHelper.h" + +namespace PileUpTesting +{ + +class PileUpHashHelper_test : public ::testing::Test {}; + +TEST_F(PileUpHashHelper_test, empty_mixture) { + unsigned long long reference = 0; + xAOD::EventInfo::PileUpMixtureID test{}; + + ASSERT_EQ(reference, test.lowBits); + ASSERT_EQ(reference, test.highBits); +} + +TEST_F(PileUpHashHelper_test, uuid_to_long) { + uuid_t source{'a','a','a','a','a','a','a','b','1','0','0','0','0','0','0','0'}; + + xAOD::EventInfo::PileUpMixtureID reference; + reference.lowBits = 7089054359331365217; + reference.highBits = 3472328296227680305; + + xAOD::EventInfo::PileUpMixtureID test = PileUpHashHelper::uuidToPileUpMixtureId(source); + + ASSERT_EQ(reference, test); + ASSERT_EQ(reference.lowBits, test.lowBits); + ASSERT_EQ(reference.highBits, test.highBits); +} + +TEST_F(PileUpHashHelper_test, long_to_uuid) { + uuid_t reference{'a','a','a','a','a','a','a','b','1','0','0','0','0','0','0','0'}; + uuid_t test{}; + + xAOD::EventInfo::PileUpMixtureID source; + source.lowBits = 7089054359331365217; + source.highBits = 3472328296227680305; + + PileUpHashHelper::pileUpMixtureIdToUuid(source, test); + + ASSERT_EQ(uuid_compare(reference, test), 0); +} + +} // namespace PileUpTesting + +int main(int argc, char *argv[]) { + ::testing::InitGoogleTest(&argc, argv); + + return RUN_ALL_TESTS(); +} diff --git a/Event/xAOD/xAODEventInfo/Root/EventInfoAuxContainer_v1.cxx b/Event/xAOD/xAODEventInfo/Root/EventInfoAuxContainer_v1.cxx index 22f8bbcbcbf8b22ad2d9d83ea36834a206aade26..095d6e07a61a469b21cca0ed58cfd47640d841ae 100644 --- a/Event/xAOD/xAODEventInfo/Root/EventInfoAuxContainer_v1.cxx +++ b/Event/xAOD/xAODEventInfo/Root/EventInfoAuxContainer_v1.cxx @@ -49,6 +49,10 @@ namespace xAOD { AUX_VARIABLE( mcChannelNumber ); AUX_VARIABLE( mcEventNumber ); AUX_VARIABLE( mcEventWeights ); + + // Pileup information: + AUX_VARIABLE( pileUpMixtureIDLowBits ); + AUX_VARIABLE( pileUpMixtureIDHighBits ); } /** diff --git a/Event/xAOD/xAODEventInfo/Root/EventInfo_v1.cxx b/Event/xAOD/xAODEventInfo/Root/EventInfo_v1.cxx index dcf950f390e2c2dcf997da62d6b088c2f63875e0..9fabf1a9c85a18a112a54110aa6511289f32563a 100644 --- a/Event/xAOD/xAODEventInfo/Root/EventInfo_v1.cxx +++ b/Event/xAOD/xAODEventInfo/Root/EventInfo_v1.cxx @@ -350,6 +350,37 @@ namespace xAOD { AUXSTORE_PRIMITIVE_SETTER_AND_GETTER( EventInfo_v1, float, averageInteractionsPerCrossing, setAverageInteractionsPerCrossing ) + + AUXSTORE_PRIMITIVE_SETTER_AND_GETTER( EventInfo_v1, unsigned long long, + pileUpMixtureIDLowBits, + setPileUpMixtureIDLowBits ) + AUXSTORE_PRIMITIVE_SETTER_AND_GETTER( EventInfo_v1, unsigned long long, + pileUpMixtureIDHighBits, + setPileUpMixtureIDHighBits ) + + EventInfo_v1::PileUpMixtureID EventInfo_v1::pileUpMixtureID() const { + + static const Accessor< unsigned long long > accLow( "pileUpMixtureIDLowBits" ); + static const Accessor< unsigned long long > accHigh( "pileUpMixtureIDHighBits" ); + + PileUpMixtureID id{}; + + // We need to check if the values are actually stored + if ( accLow.isAvailable( *this ) && accHigh.isAvailable( *this ) ) { + id.lowBits = pileUpMixtureIDLowBits(); + id.highBits = pileUpMixtureIDHighBits(); + } + + return id; + + } + + void EventInfo_v1::setPileUpMixtureID( const PileUpMixtureID& value ) { + + setPileUpMixtureIDLowBits( value.lowBits ); + setPileUpMixtureIDHighBits( value.highBits ); + + } EventInfo_v1::SubEvent:: SubEvent( int16_t time, uint16_t index, PileUpType type, @@ -966,4 +997,48 @@ namespace xAOD { return out; } + /// This operator is provided to make it convenient to print debug messages + /// including information about the PileUpMixtureID in hex. + /// + /// @param out The output stream to write PileUpMixtureID information to + /// @param id The PileUpMixtureID object to print information about + /// @returns The same output stream that the operator received + /// + std::ostream& operator<<( std::ostream &out, + const xAOD::EventInfo_v1::PileUpMixtureID& id ) { + + // Get the current state of the stream: + const char fillChar = out.fill(); + const std::ios_base::fmtflags flags = out.flags(); + const std::streamsize width = out.width(); + + // Do the printout: + out << std::hex << std::setw( 16 ) << std::setfill( '0' ); + out << id.lowBits; + out << id.highBits; + + // Restore the original state of the stream: + out.fill( fillChar ); + out.flags( flags ); + out.width( width ); + + + // Return the stream: + return out; + } + + /// This operator is provided to make it convenient to compare two + /// instances of PileUpMixtureID directly. + /// + /// @param a The PileUpMixtureID object to compare + /// @param b The PileUpMixtureID object to compare + /// @returns Comparison result + /// + bool operator== ( const xAOD::EventInfo_v1::PileUpMixtureID& a, + const xAOD::EventInfo_v1::PileUpMixtureID& b ) { + + return a.lowBits == b.lowBits && a.highBits == b.highBits; + + } + } // namespace xAOD diff --git a/Event/xAOD/xAODEventInfo/xAODEventInfo/versions/EventInfoAuxContainer_v1.h b/Event/xAOD/xAODEventInfo/xAODEventInfo/versions/EventInfoAuxContainer_v1.h index d26545d105c7de9b167b87d3c2db68c3f999d846..cbae095f29c357c1103555d169d9081dad19f752 100644 --- a/Event/xAOD/xAODEventInfo/xAODEventInfo/versions/EventInfoAuxContainer_v1.h +++ b/Event/xAOD/xAODEventInfo/xAODEventInfo/versions/EventInfoAuxContainer_v1.h @@ -115,7 +115,11 @@ namespace xAOD { std::vector< std::vector< float > > mcEventWeights; /// @} - + /// @name Pileup information + /// @{ + std::vector< unsigned long long > pileUpMixtureIDLowBits; + std::vector< unsigned long long > pileUpMixtureIDHighBits; + /// @} /// Keep track of the event status flags. /// The set bits here correspond to the auxids of all unlocked diff --git a/Event/xAOD/xAODEventInfo/xAODEventInfo/versions/EventInfo_v1.h b/Event/xAOD/xAODEventInfo/xAODEventInfo/versions/EventInfo_v1.h index fde9e62af7e9dbe7a554360e15b78f3fc6cf2721..dbc7ee3fa74304ae1eaa36ee130ec11b2d30f183 100644 --- a/Event/xAOD/xAODEventInfo/xAODEventInfo/versions/EventInfo_v1.h +++ b/Event/xAOD/xAODEventInfo/xAODEventInfo/versions/EventInfo_v1.h @@ -245,6 +245,27 @@ namespace xAOD { /// Set average interactions per crossing for all BCIDs void setAverageInteractionsPerCrossing( float value ); + /// Unique pile-up mixture identifier definition + struct PileUpMixtureID { + unsigned long long lowBits{}; + unsigned long long highBits{}; + }; + + /// Unique pile-up mixture identifier + PileUpMixtureID pileUpMixtureID() const; + /// Set unique pile-up mixture identifier + void setPileUpMixtureID( const PileUpMixtureID &value ); + + /// Unique pile-up mixture identifier low bits + unsigned long long pileUpMixtureIDLowBits() const; + /// Set unique pile-up mixture identifier low bits + void setPileUpMixtureIDLowBits( unsigned long long value ); + + /// Unique pile-up mixture identifier high bits + unsigned long long pileUpMixtureIDHighBits() const; + /// Set unique pile-up mixture identifier high bits + void setPileUpMixtureIDHighBits( unsigned long long value ); + /// Enumerator describing the types of pileup events enum PileUpType { Unknown = 99, ///< Type not known/specified @@ -498,8 +519,11 @@ namespace xAOD { }; // class EventInfo_v1 - /// A helper operator to be able to print debug messages easily + /// A helper operators to be able to print debug messages easily std::ostream& operator<< ( std::ostream& out, const xAOD::EventInfo_v1& ei ); + std::ostream& operator<< ( std::ostream& out, const xAOD::EventInfo_v1::PileUpMixtureID& id ); + /// PileUpMixtureID comparison helper operator + bool operator== ( const xAOD::EventInfo_v1::PileUpMixtureID& a, const xAOD::EventInfo_v1::PileUpMixtureID& b ); } // namespace xAOD diff --git a/Tools/PROCTools/python/RunTier0Tests.py b/Tools/PROCTools/python/RunTier0Tests.py index 9909377f77b0e443ecb552efdde15104584dbd37..4e461c9b5878626ca6ea2ec050135d88f76aeaf0 100755 --- a/Tools/PROCTools/python/RunTier0Tests.py +++ b/Tools/PROCTools/python/RunTier0Tests.py @@ -12,7 +12,9 @@ import time import uuid import logging import glob -from PROCTools.RunTier0TestsTools import ciRefFileMap + +from PROCTools.RunTier0TestsTools import ciRefFileMap, \ + SimInput, OverlayInputHits, OverlayInputBkg ### Setup global logging logging.basicConfig(level=logging.INFO, @@ -709,9 +711,8 @@ def main(): # mysetup=mysetup+",builds" logging.info("------------------ Run Athena q-test jobs---------------" ) - sim_input_file = "/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/SimCoreTests/ttbar_muplusjets-pythia6-7000.evgen.pool.root" # For sim test - overlay_hit_f = "/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/mc16_13TeV.424000.ParticleGun_single_mu_Pt100.simul.HITS.e3580_s3126/HITS.11330296._000376.pool.root.1" # For overlay test - overlay_bkg_f = "/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/PileupPremixing/RDO.merged-pileup.100events.pool.root" # For overlay test + release = os.environ['AtlasVersion'][0:4] + OverlayInputBkgFormatted = OverlayInputBkg.format(release, ciRefFileMap['overlay-bkg-' + release]) if RunFast: for qtest in qTestsToRun: @@ -719,18 +720,18 @@ def main(): def mycleanqtest(q=q): if RunSim: - RunCleanSTest(q,sim_input_file,mypwd,cleanSetup,extraArg,CleanRunHeadDir,UniqName) + RunCleanSTest(q,SimInput,mypwd,cleanSetup,extraArg,CleanRunHeadDir,UniqName) elif RunOverlay: - RunCleanOTest(q,overlay_hit_f,overlay_bkg_f,mypwd,cleanSetup,extraArg,CleanRunHeadDir,UniqName) + RunCleanOTest(q,OverlayInputHits,OverlayInputBkgFormatted,mypwd,cleanSetup,extraArg,CleanRunHeadDir,UniqName) else: RunCleanQTest(q,mypwd,cleanSetup,extraArg,CleanRunHeadDir,UniqName,doR2A=r2aMode,trigConfig=trigRun2Config) pass def mypatchedqtest(q=q): if RunSim: - RunPatchedSTest(q,sim_input_file,mypwd,cleanSetup,extraArg) + RunPatchedSTest(q,SimInput,mypwd,cleanSetup,extraArg) elif RunOverlay: - RunPatchedOTest(q,overlay_hit_f,overlay_bkg_f,mypwd,cleanSetup,extraArg) + RunPatchedOTest(q,OverlayInputHits,OverlayInputBkgFormatted,mypwd,cleanSetup,extraArg) else: RunPatchedQTest(q,mypwd,mysetup,extraArg, doR2A=r2aMode, trigConfig=trigRun2Config) pass @@ -750,9 +751,9 @@ def main(): def mypatchedqtest(q=q): if RunSim: - RunPatchedSTest(q,sim_input_file,mypwd,cleanSetup,extraArg, nosetup=ciMode) + RunPatchedSTest(q,SimInput,mypwd,cleanSetup,extraArg, nosetup=ciMode) elif RunOverlay: - RunPatchedOTest(q,overlay_hit_f,overlay_bkg_f,mypwd,cleanSetup,extraArg, nosetup=ciMode) + RunPatchedOTest(q,OverlayInputHits,OverlayInputBkgFormatted,mypwd,cleanSetup,extraArg, nosetup=ciMode) else: RunPatchedQTest(q,mypwd,mysetup,extraArg, doR2A=r2aMode, trigConfig=trigRun2Config, nosetup=ciMode) pass @@ -771,18 +772,18 @@ def main(): def mycleanqtest(q=q): if RunSim: - RunCleanSTest(q,sim_input_file,mypwd,cleanSetup,extraArg,CleanRunHeadDir,UniqName) + RunCleanSTest(q,SimInput,mypwd,cleanSetup,extraArg,CleanRunHeadDir,UniqName) elif RunOverlay: - RunCleanOTest(q,overlay_hit_f,overlay_bkg_f,mypwd,cleanSetup,extraArg,CleanRunHeadDir,UniqName) + RunCleanOTest(q,OverlayInputHits,OverlayInputBkgFormatted,mypwd,cleanSetup,extraArg,CleanRunHeadDir,UniqName) else: RunCleanQTest(q,mypwd,cleanSetup,extraArg,CleanRunHeadDir,UniqName,doR2A=r2aMode,trigConfig=trigRun2Config) pass def mypatchedqtest(q=q): if RunSim: - RunPatchedSTest(q,sim_input_file,mypwd,cleanSetup,extraArg) + RunPatchedSTest(q,SimInput,mypwd,cleanSetup,extraArg) elif RunOverlay: - RunPatchedOTest(q,overlay_hit_f,overlay_bkg_f,mypwd,cleanSetup,extraArg) + RunPatchedOTest(q,OverlayInputHits,OverlayInputBkgFormatted,mypwd,cleanSetup,extraArg) else: RunPatchedQTest(q,mypwd,mysetup,extraArg,doR2A=r2aMode,trigConfig=trigRun2Config) pass diff --git a/Tools/PROCTools/python/RunTier0TestsTools.py b/Tools/PROCTools/python/RunTier0TestsTools.py index 467e7d7e23b2e6f6c06d869fef2a42d6c609be6a..7a5b1b65d86483837871672bbd4560fea7924c36 100644 --- a/Tools/PROCTools/python/RunTier0TestsTools.py +++ b/Tools/PROCTools/python/RunTier0TestsTools.py @@ -23,6 +23,19 @@ ciRefFileMap = { 's3126-21.9' : 'v1', 's3126-22.0' : 'v3', # OverlayTier0Test_required-test - 'overlay-d1498-21.0' : 'v1', - 'overlay-d1498-22.0' : 'v11', + 'overlay-d1498-21.0' : 'v2', + 'overlay-d1498-22.0' : 'v12', + 'overlay-bkg-21.0' : 'v1', + 'overlay-bkg-22.0' : 'v1', } + + +##### +# CI special input files +##### +# Simulation tests +SimInput = "/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/SimCoreTests/ttbar_muplusjets-pythia6-7000.evgen.pool.root" + +# Overlay tests +OverlayInputHits = "/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/mc16_13TeV.424000.ParticleGun_single_mu_Pt100.simul.HITS.e3580_s3126/HITS.11330296._000376.pool.root.1" +OverlayInputBkg = "/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/PileupPremixing/{}/{}/RDO.merged-pileup.100events.pool.root"