diff --git a/LumiBlock/LumiBlockComps/share/LuminosityCondAlg_test.ref b/LumiBlock/LumiBlockComps/share/LuminosityCondAlg_test.ref index 7508f297f3fbb0407431dd3fe670103d80bc58f5..931600aeebe632be5cb8558b31cc9c39464ff067 100644 --- a/LumiBlock/LumiBlockComps/share/LuminosityCondAlg_test.ref +++ b/LumiBlock/LumiBlockComps/share/LuminosityCondAlg_test.ref @@ -1,8 +1,8 @@ LumiBlockComps/LuminosityCondAlg_test -Initializing Gaudi ApplicationMgr using job opts ../share/LuminosityCondAlg_test.txt -JobOptionsSvc INFO # =======> /home/sss/nobackup/atlas/build/../tests/../share/LuminosityCondAlg_test.txt +Initializing Gaudi ApplicationMgr using job opts /afs/cern.ch/user/s/ssnyder/atlas-work3g/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/LumiBlockComps/LuminosityCondAlg_test.txt +JobOptionsSvc INFO # =======> /afs/cern.ch/user/s/ssnyder/atlas-work3g/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/LumiBlockComps/LuminosityCondAlg_test.txt JobOptionsSvc INFO # (1,1): ApplicationMgr.ExtSvc = ["StoreGateSvc/ConditionStore"] JobOptionsSvc INFO # (3,1): LuminosityCondAlg.LuminosityFolderInputKey = "testLumi" JobOptionsSvc INFO # (4,1): LuminosityCondAlg.OnlineLumiCalibrationInputKey = "testCalib" @@ -16,14 +16,17 @@ JobOptionsSvc INFO # (12,1): LuminosityCondAlgRun1.LuminosityOutputKey = JobOptionsSvc INFO # (14,1): LuminosityCondAlgMC.LuminosityFolderInputKey = "" JobOptionsSvc INFO # (15,1): LuminosityCondAlgMC.OnlineLumiCalibrationInputKey = "" JobOptionsSvc INFO # (16,1): LuminosityCondAlgMC.LuminosityOutputKey = "LuminosityCondDataMC" -JobOptionsSvc INFO Job options successfully read in from ../share/LuminosityCondAlg_test.txt +JobOptionsSvc INFO # (18,1): LuminosityCondAlgMiss.LuminosityFolderInputKey = "testLumiMiss" +JobOptionsSvc INFO # (19,1): LuminosityCondAlgMiss.OnlineLumiCalibrationInputKey = "testCalibMiss" +JobOptionsSvc INFO # (20,1): LuminosityCondAlgMiss.LuminosityOutputKey = "LuminosityCondDataMiss" +JobOptionsSvc INFO Job options successfully read in from /afs/cern.ch/user/s/ssnyder/atlas-work3g/build-x86_64-centos7-gcc8-opt/x86_64-centos7-gcc8-opt/jobOptions/LumiBlockComps/LuminosityCondAlg_test.txt ApplicationMgr SUCCESS ==================================================================================================================================== - Welcome to ApplicationMgr (GaudiCoreSvc v27r1p99) - running on karma on Wed May 22 16:49:43 2019 + Welcome to ApplicationMgr (GaudiCoreSvc v32r2) + running on lxplus750.cern.ch on Thu Oct 10 17:26:05 2019 ==================================================================================================================================== ApplicationMgr INFO Application Manager Configured successfully -ClassIDSvc INFO getRegistryEntries: read 2871 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 2603 CLIDRegistry entries for module ALL EventLoopMgr WARNING Unable to locate service "EventSelector" EventLoopMgr WARNING No events will be processed from external input. HistogramPersis...WARNING Histograms saving not required. @@ -32,5 +35,7 @@ ApplicationMgr Ready test1 ClassIDSvc INFO getRegistryEntries: read 372 CLIDRegistry entries for module ALL test2 -ClassIDSvc INFO getRegistryEntries: read 1932 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 1997 CLIDRegistry entries for module ALL test3 +test4 +LuminosityCondA...WARNING LBAvInstLumi is zero or negative in updatePerBunchLumi():0 diff --git a/LumiBlock/LumiBlockComps/share/LuminosityCondAlg_test.txt b/LumiBlock/LumiBlockComps/share/LuminosityCondAlg_test.txt index fc33742ab8ec148e5375f9a53b68e5e8de0f2a95..f0bf9ca251e376476f20196141c2b9f326f3201e 100644 --- a/LumiBlock/LumiBlockComps/share/LuminosityCondAlg_test.txt +++ b/LumiBlock/LumiBlockComps/share/LuminosityCondAlg_test.txt @@ -14,3 +14,7 @@ LuminosityCondAlgRun1.LuminosityOutputKey = "LuminosityCondDataRun1"; LuminosityCondAlgMC.LuminosityFolderInputKey = ""; LuminosityCondAlgMC.OnlineLumiCalibrationInputKey = ""; LuminosityCondAlgMC.LuminosityOutputKey = "LuminosityCondDataMC"; + +LuminosityCondAlgMiss.LuminosityFolderInputKey = "testLumiMiss"; +LuminosityCondAlgMiss.OnlineLumiCalibrationInputKey = "testCalibMiss"; +LuminosityCondAlgMiss.LuminosityOutputKey = "LuminosityCondDataMiss"; diff --git a/LumiBlock/LumiBlockComps/src/LuminosityCondAlg.cxx b/LumiBlock/LumiBlockComps/src/LuminosityCondAlg.cxx index 25b6091a91f9ad4d3dac0dbef246948da5268121..a94516595239177a604b48d928c0decfe01a56a2 100644 --- a/LumiBlock/LumiBlockComps/src/LuminosityCondAlg.cxx +++ b/LumiBlock/LumiBlockComps/src/LuminosityCondAlg.cxx @@ -18,6 +18,16 @@ #include <sstream> +namespace { + +const EventIDBase::number_type UNDEFNUM = EventIDBase::UNDEFNUM; +const EventIDBase::event_number_t UNDEFEVT = EventIDBase::UNDEFEVT; +const EventIDRange fullrange (EventIDBase (0, UNDEFEVT, 0, 0, 0), + EventIDBase (UNDEFNUM-1, UNDEFEVT, UNDEFNUM-1, 0, 0)); + +} // anonymous namespace + + /** * @brief Gaudi initialize method. */ @@ -50,10 +60,6 @@ LuminosityCondAlg::execute (const EventContext& ctx) const if (m_luminosityFolderInputKey.empty()) { // MC case. - const EventIDBase::number_type UNDEFNUM = EventIDBase::UNDEFNUM; - const EventIDBase::event_number_t UNDEFEVT = EventIDBase::UNDEFEVT; - EventIDRange fullrange (EventIDBase (0, UNDEFEVT, UNDEFNUM, 0, 0), - EventIDBase (UNDEFNUM-1, UNDEFEVT, UNDEFNUM, 0, 0)); range = fullrange; } else { @@ -231,6 +237,7 @@ LuminosityCondAlg::updatePerBunchLumi (const EventContext& ctx, if (lumi.lbAverageLuminosity() <= 0.) { ATH_MSG_WARNING( "LBAvInstLumi is zero or negative in updatePerBunchLumi():" << lumi.lbAverageLuminosity()); + range = EventIDRange::intersect (range, fullrange); return StatusCode::SUCCESS; } diff --git a/LumiBlock/LumiBlockComps/test/LuminosityCondAlg_test.cxx b/LumiBlock/LumiBlockComps/test/LuminosityCondAlg_test.cxx index dd4dbeb1f022b9edb93dc459bd3f92cf1ef2569b..5792bce82973365b4494f604bb9de7cf6a0311e3 100644 --- a/LumiBlock/LumiBlockComps/test/LuminosityCondAlg_test.cxx +++ b/LumiBlock/LumiBlockComps/test/LuminosityCondAlg_test.cxx @@ -58,6 +58,17 @@ EventIDBase timestamp (int t) } +EventIDBase runlbn (int run, + int lbn) +{ + return EventIDBase (run, // run + EventIDBase::UNDEFEVT, // event + EventIDBase::UNDEFNUM, // timestamp + 0, // ns offset + lbn); +} + + void push_float (float x, std::vector<uint8_t>& data) { union { @@ -98,7 +109,7 @@ coral::Blob makeBlob (float offs) } -std::unique_ptr<CondAttrListCollection> make_run2_attrlist() +std::unique_ptr<CondAttrListCollection> make_run2_attrlist (float instLumi = 1.5) { auto attrs = std::make_unique<CondAttrListCollection> (false); coral::AttributeList al; @@ -108,7 +119,7 @@ std::unique_ptr<CondAttrListCollection> make_run2_attrlist() al.extend ("Valid", "unsigned int"); al.extend ("AlgorithmID", "unsigned int"); al.extend ("BunchInstLumi", "blob"); - al["LBAvInstLumi"].setValue (1.5f); + al["LBAvInstLumi"].setValue (instLumi); al["LBAvEvtsPerBX"].setValue (10.5f); al["Valid"].setValue (0u); al["AlgorithmID"].setValue (42u); @@ -217,7 +228,7 @@ void test1 (ISvcLocator* svcloc) EventContext ctx; ctx.setExtension (Atlas::ExtendedEventContext()); - EventIDBase eid (0, 0, 0, 0); + EventIDBase eid (1, 0, 0, 0, 20); ctx.setEventID (eid); LuminosityCondAlg alg ("LuminosityCondAlg", svcloc); @@ -228,7 +239,7 @@ void test1 (ISvcLocator* svcloc) DataObjID id1 ("testLumi"); auto cc1 = std::make_unique<CondCont<CondAttrListCollection> > (rcu, id1); - const EventIDRange range1 (timestamp (0), timestamp (100)); + const EventIDRange range1 (runlbn (1, 10), runlbn (1, 100)); assert( cc1->insert (range1, make_run2_attrlist(), ctx).isSuccess() ); DataObjID id2 ("testCalib"); @@ -247,8 +258,12 @@ void test1 (ISvcLocator* svcloc) const LuminosityCondData* data = 0; const EventIDRange* rangeout = nullptr; assert (ccout->find (eid, data, &rangeout)); - assert (rangeout->start().time_stamp() == timestamp(0).time_stamp()); - assert (rangeout->stop().time_stamp() == timestamp(90).time_stamp()); + assert (rangeout->start().time_stamp() == 0); + assert (rangeout->start().run_number() == 1); + assert (rangeout->start().lumi_block() == 10); + assert (rangeout->stop().time_stamp() == 90); + assert (rangeout->stop().run_number() == 1); + assert (rangeout->stop().lumi_block() == 100); assert( data->lbAverageLuminosity() == 1.5 ); assert( data->lbAverageInteractionsPerCrossing() == 10.5 ); @@ -275,7 +290,7 @@ void test2 (ISvcLocator* svcloc) EventContext ctx; ctx.setExtension (Atlas::ExtendedEventContext()); - EventIDBase eid (0, 0, 0, 0); + EventIDBase eid (1, 0, 0, 0, 20); ctx.setEventID (eid); LuminosityCondAlg alg ("LuminosityCondAlgRun1", svcloc); @@ -286,7 +301,7 @@ void test2 (ISvcLocator* svcloc) DataObjID id1 ("testLumiRun1"); auto cc1 = std::make_unique<CondCont<CondAttrListCollection> > (rcu, id1); - const EventIDRange range1 (timestamp (0), timestamp (100)); + const EventIDRange range1 (runlbn (1, 10), runlbn (1, 100)); assert( cc1->insert (range1, make_run1_attrlist(), ctx).isSuccess() ); DataObjID id2 ("testCalibRun1"); @@ -323,8 +338,12 @@ void test2 (ISvcLocator* svcloc) const LuminosityCondData* data = 0; const EventIDRange* rangeout = nullptr; assert (ccout->find (eid, data, &rangeout)); - assert (rangeout->start().time_stamp() == timestamp(0).time_stamp()); - assert (rangeout->stop().time_stamp() == timestamp(80).time_stamp()); + assert (rangeout->start().time_stamp() == 0); + assert (rangeout->start().run_number() == 1); + assert (rangeout->start().lumi_block() == 10); + assert (rangeout->stop().time_stamp() == 80); + assert (rangeout->stop().run_number() == 1); + assert (rangeout->stop().lumi_block() == 100); assert( data->lbAverageLuminosity() == 1.5 ); assert( data->lbAverageInteractionsPerCrossing() == 10.5 ); @@ -352,7 +371,7 @@ void test3 (ISvcLocator* svcloc) EventContext ctx; ctx.setExtension (Atlas::ExtendedEventContext()); - EventIDBase eid (0, 0, 0, 0, 0, 0); + EventIDBase eid (1, 0, 0, 0, 20, 0); ctx.setEventID (eid); LuminosityCondAlg alg ("LuminosityCondAlgMC", svcloc); @@ -382,6 +401,67 @@ void test3 (ISvcLocator* svcloc) } +// Missing lumi +void test4 (ISvcLocator* svcloc) +{ + std::cout << "test4\n"; + + EventContext ctx; + ctx.setExtension (Atlas::ExtendedEventContext()); + EventIDBase eid (1, 0, 0, 0, 20); + ctx.setEventID (eid); + + LuminosityCondAlg alg ("LuminosityCondAlgMiss", svcloc); + alg.addRef(); + assert( alg.sysInitialize().isSuccess() ); + + Athena_test::DummyRCUSvc rcu; + + DataObjID id1 ("testLumiMiss"); + auto cc1 = std::make_unique<CondCont<CondAttrListCollection> > (rcu, id1); + const EventIDRange range1 (runlbn (1, 10), runlbn (1, 100)); + assert( cc1->insert (range1, make_run2_attrlist(0), ctx).isSuccess() ); + + DataObjID id2 ("testCalibMiss"); + auto cc2 = std::make_unique<CondCont<OnlineLumiCalibrationCondData> > (rcu, id2); + const EventIDRange range2 (timestamp (0), timestamp (90)); + assert( cc2->insert (range2, make_onlineLumiCalib(), ctx).isSuccess() ); + + ServiceHandle<StoreGateSvc> conditionStore ("ConditionStore", "test"); + assert( conditionStore->record (std::move (cc1), "testLumiMiss") ); + assert( conditionStore->record (std::move (cc2), "testCalibMiss") ); + + assert( alg.execute (ctx).isSuccess() ); + + CondCont<LuminosityCondData>* ccout = nullptr; + assert( conditionStore->retrieve (ccout, "LuminosityCondDataMiss").isSuccess() ); + const LuminosityCondData* data = 0; + const EventIDRange* rangeout = nullptr; + assert (ccout->find (eid, data, &rangeout)); + assert (rangeout->start().time_stamp() == 0); + assert (rangeout->start().run_number() == 1); + assert (rangeout->start().lumi_block() == 10); + assert (rangeout->stop().time_stamp() == EventIDBase::UNDEFNUM-1); + assert (rangeout->stop().run_number() == 1); + assert (rangeout->stop().lumi_block() == 100); + + assert( data->lbAverageLuminosity() == 0 ); + assert( data->lbAverageInteractionsPerCrossing() == 10.5 ); + assert( data->lbAverageValid() == 0 ); + assert( data->muToLumi() == 0 ); + + std::vector<float> vec = data->lbLuminosityPerBCIDVector(); + assert (vec.size() == LuminosityCondData::TOTAL_LHC_BCIDS); + for (const auto& p : lumiData) { + assert (vec[p.first] == 0); + } + + for (float f : vec) { + assert (f == 0); + } +} + + int main() { std::cout << "LumiBlockComps/LuminosityCondAlg_test\n"; @@ -394,5 +474,6 @@ int main() test1 (svcloc); test2 (svcloc); test3 (svcloc); + test4 (svcloc); return 0; } diff --git a/LumiBlock/LumiBlockComps/test/TrigLiveFractionCondAlg_test.cxx b/LumiBlock/LumiBlockComps/test/TrigLiveFractionCondAlg_test.cxx index bba06e7c5c020fce53bdbb775b7a174d9657ca59..7452f3bedad6ee336ed781d077df0974d92988e0 100644 --- a/LumiBlock/LumiBlockComps/test/TrigLiveFractionCondAlg_test.cxx +++ b/LumiBlock/LumiBlockComps/test/TrigLiveFractionCondAlg_test.cxx @@ -57,6 +57,16 @@ EventIDBase timestamp (int t) } +EventIDBase mixed (int run, int lbn, int t) +{ + return EventIDBase (run, // run + EventIDBase::UNDEFEVT, // event + t, + 0, // ns offset + lbn); +} + + template <class ITERATOR> coral::Blob make_busyblob (ITERATOR beg, ITERATOR end) { @@ -157,7 +167,7 @@ void test1 (ISvcLocator* svcloc) EventContext ctx; ctx.setExtension (Atlas::ExtendedEventContext()); - EventIDBase eid (0, 0, 0, 0); + EventIDBase eid (1, 0, 0, 0, 20); ctx.setEventID (eid); TrigLiveFractionCondAlg alg ("TrigLiveFractionCondAlg", svcloc); @@ -173,7 +183,7 @@ void test1 (ISvcLocator* svcloc) DataObjID id2 ("testLumi"); auto cc2 = std::make_unique<CondCont<LuminosityCondData> > (rcu, id2); - const EventIDRange range2 (timestamp (0), timestamp (90)); + const EventIDRange range2 (mixed (1, 10, 0), mixed (1, 100, 90)); float totW = 0; assert( cc2->insert (range2, make_lumi(totW), ctx).isSuccess() ); diff --git a/LumiBlock/LumiBlockData/LumiBlockData/LuminosityCondData.h b/LumiBlock/LumiBlockData/LumiBlockData/LuminosityCondData.h index eacbd0cf83046c6829f44f4aca7d8ad8ebc4b353..b365fa69bf888363a3cba77aafea8a91d00168b4 100644 --- a/LumiBlock/LumiBlockData/LumiBlockData/LuminosityCondData.h +++ b/LumiBlock/LumiBlockData/LumiBlockData/LuminosityCondData.h @@ -65,7 +65,7 @@ private: CLASS_DEF (LuminosityCondData, 222148049, 0) -CONDCONT_DEF (LuminosityCondData, 180584023); +CONDCONT_MIXED_DEF (LuminosityCondData, 180584023); #endif // not LUMIBLOCKDATA_LUMINOSITYCONDDATA_H