diff --git a/LumiBlock/LumiBlockComps/src/LuminosityCondAlg.cxx b/LumiBlock/LumiBlockComps/src/LuminosityCondAlg.cxx index 7a1868e648126fabc288f7a050d94b9d2071cdb1..b72d4a96f35d6b6446a8fec0b3e6ed358477de1d 100644 --- a/LumiBlock/LumiBlockComps/src/LuminosityCondAlg.cxx +++ b/LumiBlock/LumiBlockComps/src/LuminosityCondAlg.cxx @@ -187,7 +187,7 @@ LuminosityCondAlg::updateAvgLumi (const CondAttrListCollection& lumiData, lumi.setLbAverageInteractionsPerCrossing (LBAvEvtsPerBX); // Check validity of per-BCID luminosity (will issue warning in recalcPerBCIDLumi - int perBcidValid = (valid/10) % 10; + int perBcidValid = ((valid&0x3ff)/10) % 10; if ((perBcidValid > 0) && m_skipInvalid) { return StatusCode::SUCCESS; } @@ -227,16 +227,20 @@ LuminosityCondAlg::updatePerBunchLumi (const EventContext& ctx, LuminosityCondData& lumi) const { if (lumi.lbAverageLuminosity() <= 0.) { - ATH_MSG_WARNING( "LBAvInstLumi is zero or negative in recalculatePerBCIDLumi():" + ATH_MSG_WARNING( "LBAvInstLumi is zero or negative in updatePerBunchLumi():" << lumi.lbAverageLuminosity()); return StatusCode::SUCCESS; } - ATH_CHECK( updateMuToLumi (ctx, calibChannel, range, lumi) ); + bool isValid = true; + ATH_CHECK( updateMuToLumi (ctx, calibChannel, range, lumi, isValid) ); // Check here if we want to do this the Run1 way (hard) or the Run2 way (easy) - if (bunchInstLumiBlob != nullptr) { // Run2 way, easy + if (!isValid) { + // Skip if not valid. + } + else if (bunchInstLumiBlob != nullptr) { // Run2 way, easy ATH_CHECK( updatePerBunchLumiRun2 (*bunchInstLumiBlob, preferredChannel, lumi) ); @@ -248,7 +252,7 @@ LuminosityCondAlg::updatePerBunchLumi (const EventContext& ctx, lumi) ); } - ATH_MSG_DEBUG( "finished recalculatePerBCIDLumi() for alg: " + ATH_MSG_DEBUG( "finished updatePerBunchLumi() for alg: " << preferredChannel ); return StatusCode::SUCCESS; } @@ -261,12 +265,14 @@ LuminosityCondAlg::updatePerBunchLumi (const EventContext& ctx, * @param range Validity range of the conditions data being filled. * Updated if needed. * @param lumi Output luminosity data being filled. + * @param isValid Set to false if data are not valid. */ StatusCode LuminosityCondAlg::updateMuToLumi (const EventContext& ctx, unsigned int calibChannel, EventIDRange& range, - LuminosityCondData& lumi) const + LuminosityCondData& lumi, + bool& isValid) const { SG::ReadCondHandle<OnlineLumiCalibrationCondData> onlineLumiCalibration ( m_onlineLumiCalibrationInputKey, ctx ); @@ -285,9 +291,11 @@ LuminosityCondAlg::updateMuToLumi (const EventContext& ctx, ATH_MSG_WARNING(" Found muToLumi = " << muToLumi << " for backup channel " << m_calibBackupChannel); } + lumi.setMuToLumi (muToLumi); + // Check validity - bool isValid = true; - int perBcidValid = (lumi.lbAverageValid()/10) % 10; + isValid = true; + int perBcidValid = ((lumi.lbAverageValid()&0x3ff)/10) % 10; if ((lumi.lbAverageValid() & 0x03) || (perBcidValid > 0)) { // Skip if either per-BCID or LBAv is invalid isValid = false; if (m_skipInvalid) { @@ -311,13 +319,12 @@ LuminosityCondAlg::updateMuToLumi (const EventContext& ctx, // Don't keep negative values muToLumi = 0.; + lumi.setMuToLumi (muToLumi); } ATH_MSG_DEBUG(" Found muToLumi = " << muToLumi << " for channel " << calibChannel ); - lumi.setMuToLumi (muToLumi); - return StatusCode::SUCCESS; } @@ -333,7 +340,7 @@ LuminosityCondAlg::updatePerBunchLumiRun2 (const coral::Blob& bunchInstLumiBlob, unsigned int preferredChannel, LuminosityCondData& lumi) const { - ATH_MSG_DEBUG( "starting Run2 recalculatePerBCIDLumi() for alg: " << preferredChannel ); + ATH_MSG_DEBUG( "starting updatePerBunchLumiRun2() for alg: " << preferredChannel ); // Check that the length isn't zero if (bunchInstLumiBlob.size() == 0) { @@ -402,7 +409,7 @@ LuminosityCondAlg::updatePerBunchLumiRun1 (const EventContext& ctx, EventIDRange& range, LuminosityCondData& lumi) const { - ATH_MSG_DEBUG( "starting Run1 recalculatePerBCIDLumi() for alg: " << preferredChannel ); + ATH_MSG_DEBUG( "starting updatePerBunchLumiRun1() for alg: " << preferredChannel ); if (preferredChannel == 0) { return StatusCode::SUCCESS; @@ -447,6 +454,10 @@ LuminosityCondAlg::updatePerBunchLumiRun1 (const EventContext& ctx, // Get the raw data for the preferred channel const std::vector<float>& rawLumiVec = bunchLumis->rawLuminosity(preferredChannel); + if (rawLumiVec.empty()) { + ATH_MSG_DEBUG( "Empty raw luminosity vector" ); + return StatusCode::SUCCESS; + } // // Calibration step @@ -469,9 +480,9 @@ LuminosityCondAlg::updatePerBunchLumiRun1 (const EventContext& ctx, double lumiSum = 0.; for (unsigned int bcid : luminousBunches) { // Don't waste time on zero lumi - if (rawLumiVec[bcid] <= 0.) { + if (rawLumiVec.at(bcid) <= 0.) { ATH_MSG_DEBUG( "Calibrate BCID " << bcid << " with raw " - << rawLumiVec[bcid] << " -> skipping" ); + << rawLumiVec.at(bcid) << " -> skipping" ); continue; } diff --git a/LumiBlock/LumiBlockComps/src/LuminosityCondAlg.h b/LumiBlock/LumiBlockComps/src/LuminosityCondAlg.h index b7c1b5fd7cfc765518f14dde3169062411ed44f3..affb126917feccad6f182d35111af78bccb84ecb 100644 --- a/LumiBlock/LumiBlockComps/src/LuminosityCondAlg.h +++ b/LumiBlock/LumiBlockComps/src/LuminosityCondAlg.h @@ -95,12 +95,14 @@ private: * @param range Validity range of the conditions data being filled. * Updated if needed. * @param lumi Output luminosity data being filled. + * @param isValid Set to false if data are not valid. */ StatusCode updateMuToLumi (const EventContext& ctx, unsigned int calibChannel, EventIDRange& range, - LuminosityCondData& lumi) const; + LuminosityCondData& lumi, + bool& isValid) const; /** diff --git a/LumiBlock/LumiBlockComps/test/LuminosityCondAlg_test.cxx b/LumiBlock/LumiBlockComps/test/LuminosityCondAlg_test.cxx index aaf9579c7d268b4ec3207982178078c00ca40ac2..d5ddb2760f932c083f63f1b2d17d1591c5f1fc6a 100644 --- a/LumiBlock/LumiBlockComps/test/LuminosityCondAlg_test.cxx +++ b/LumiBlock/LumiBlockComps/test/LuminosityCondAlg_test.cxx @@ -146,8 +146,6 @@ std::unique_ptr<CondAttrListCollection> make_run1_attrlist() al["LBAvInstLumi"].setValue (1.5f); al["LBAvEvtsPerBX"].setValue (10.5f); unsigned int valid = (42) << 22; - // Round up to next 100. - valid = ((valid+99)/100) * 100; al["Valid"].setValue (valid); attrs->add (0, al); return attrs; @@ -348,7 +346,7 @@ void test2 (ISvcLocator* svcloc) assert( data->lbAverageLuminosity() == 1.5 ); assert( data->lbAverageInteractionsPerCrossing() == 10.5 ); assert( (data->lbAverageValid() >> 22) == 42 ); - assert( (data->lbAverageValid() % 100) == 0 ); + assert( ((data->lbAverageValid()&0x3ff) % 100) == 0 ); assert( data->muToLumi() == 2.5 ); std::vector<float> vec = data->lbLuminosityPerBCIDVector();