@@ -28,13 +28,14 @@ using namespace reco;
2828// ----------------------------------------------------------------------------------------------------------------------
2929OnlineBeamMonitor::OnlineBeamMonitor (const ParameterSet& ps)
3030 : monitorName_(ps.getUntrackedParameter<string>(" MonitorName" )),
31- bsTransientToken_(esConsumes <edm::Transition::BeginLuminosityBlock>( )),
32- bsHLTToken_(esConsumes<edm::Transition::BeginLuminosityBlock> ()),
33- bsLegacyToken_(esConsumes<edm::Transition::BeginLuminosityBlock> ()),
31+ bsOnlineToken_(consumes(ps.getUntrackedParameter <edm::InputTag>( " OnlineBeamSpotLabel " ) )),
32+ bsHLTToken_(esConsumes()),
33+ bsLegacyToken_(esConsumes()),
3434 numberOfValuesToSave_(0 ),
3535 appendRunTxt_(ps.getUntrackedParameter<bool >(" AppendRunToFileName" )),
3636 writeDIPTxt_(ps.getUntrackedParameter<bool >(" WriteDIPAscii" )),
37- outputDIPTxt_(ps.getUntrackedParameter<std::string>(" DIPFileName" )) {
37+ outputDIPTxt_(ps.getUntrackedParameter<std::string>(" DIPFileName" )),
38+ shouldReadEvent_(true ) {
3839 if (!monitorName_.empty ())
3940 monitorName_ = monitorName_ + " /" ;
4041
@@ -57,7 +58,7 @@ OnlineBeamMonitor::OnlineBeamMonitor(const ParameterSet& ps)
5758
5859 histoByCategoryNames_.insert (pair<string, string>(" lumi" , " Lumibased BeamSpotHLT" ));
5960 histoByCategoryNames_.insert (pair<string, string>(" lumi" , " Lumibased BeamSpotLegacy" ));
60- histoByCategoryNames_.insert (pair<string, string>(" lumi" , " Lumibased BeamSpotTransient " ));
61+ histoByCategoryNames_.insert (pair<string, string>(" lumi" , " Lumibased BeamSpotOnline " ));
6162
6263 for (const auto & itV : varNamesV_) {
6364 for (const auto & itM : histoByCategoryNames_) {
@@ -69,6 +70,7 @@ OnlineBeamMonitor::OnlineBeamMonitor(const ParameterSet& ps)
6970void OnlineBeamMonitor::fillDescriptions (edm::ConfigurationDescriptions& iDesc) {
7071 edm::ParameterSetDescription ps;
7172 ps.addUntracked <std::string>(" MonitorName" , " YourSubsystemName" );
73+ ps.addUntracked <edm::InputTag>(" OnlineBeamSpotLabel" , edm::InputTag (" hltOnlineBeamSpot" ));
7274 ps.addUntracked <bool >(" AppendRunToFileName" , false );
7375 ps.addUntracked <bool >(" WriteDIPAscii" , true );
7476 ps.addUntracked <std::string>(" DIPFileName" , " BeamFitResultsForDIP.txt" );
@@ -175,13 +177,17 @@ std::function<std::string(BSparameters, BeamSpotOnlineObjects)> myStringFunctor
175177std::shared_ptr<onlinebeammonitor::BeamSpotInfo> OnlineBeamMonitor::globalBeginLuminosityBlock (
176178 const LuminosityBlock& iLumi, const EventSetup& iSetup) const {
177179 // Always create a beamspot group for each lumi weather we have results or not! Each Beamspot will be of unknown type!
178-
179180 auto beamSpotInfo = std::make_shared<onlinebeammonitor::BeamSpotInfo>();
181+ return beamSpotInfo;
182+ }
180183
184+ void OnlineBeamMonitor::fetchBeamSpotInformation (const Event& iEvent, const EventSetup& iSetup) {
185+ auto const & iLumi = iEvent.getLuminosityBlock ();
186+ auto beamSpotInfo = luminosityBlockCache (iLumi.index ());
181187 // Read BeamSpot from DB
182188 ESHandle<BeamSpotOnlineObjects> bsHLTHandle;
183189 ESHandle<BeamSpotOnlineObjects> bsLegacyHandle;
184- ESHandle<BeamSpotObjects> bsTransientHandle ;
190+ ESHandle<BeamSpotObjects> bsOnlineHandle ;
185191 // int lastLumiHLT_ = 0;
186192 // int lastLumiLegacy_ = 0;
187193 std::string startTimeStamp_ = " 0" ;
@@ -233,7 +239,8 @@ std::shared_ptr<onlinebeammonitor::BeamSpotInfo> OnlineBeamMonitor::globalBeginL
233239 // LogInfo("OnlineBeamMonitor")
234240 // << *aSpot << std::endl;
235241 } else {
236- LogInfo (" OnlineBeamMonitor" ) << " Database BeamSpot is not valid at lumi: " << iLumi.id ().luminosityBlock ();
242+ LogError (" OnlineBeamMonitor" ) << " The database BeamSpot (hlt record) is not valid at lumi: "
243+ << iLumi.id ().luminosityBlock ();
237244 }
238245 if (auto bsLegacyHandle = iSetup.getHandle (bsLegacyToken_)) {
239246 auto const & spotDB = *bsLegacyHandle;
@@ -274,36 +281,13 @@ std::shared_ptr<onlinebeammonitor::BeamSpotInfo> OnlineBeamMonitor::globalBeginL
274281 // LogInfo("OnlineBeamMonitor")
275282 // << *aSpot << std::endl;
276283 } else {
277- LogInfo (" OnlineBeamMonitor" ) << " Database BeamSpot is not valid at lumi: " << iLumi.id ().luminosityBlock ();
284+ LogError (" OnlineBeamMonitor" ) << " The database BeamSpot (legacy record) is not valid at lumi: "
285+ << iLumi.id ().luminosityBlock ();
278286 }
279- if (auto bsTransientHandle = iSetup.getHandle (bsTransientToken_)) {
280- auto const & spotDB = *bsTransientHandle;
281- // std::cout << " from the DB " << spotDB << std::endl;
282-
283- // translate from BeamSpotObjects to reco::BeamSpot
284- BeamSpot::Point apoint (spotDB.x (), spotDB.y (), spotDB.z ());
285-
286- BeamSpot::CovarianceMatrix matrix;
287- for (int i = 0 ; i < 7 ; ++i) {
288- for (int j = 0 ; j < 7 ; ++j) {
289- matrix (i, j) = spotDB.covariance (i, j);
290- }
291- }
292-
293- beamSpotInfo->beamSpotsMap_ [" Transient" ] =
294- BeamSpot (apoint, spotDB.sigmaZ (), spotDB.dxdz (), spotDB.dydz (), spotDB.beamWidthX (), matrix);
287+ if (auto bsOnlineHandle = iEvent.getHandle (bsOnlineToken_)) {
288+ auto const & spotOnline = *bsOnlineHandle;
295289
296- BeamSpot* aSpot = &(beamSpotInfo->beamSpotsMap_ [" Transient" ]);
297-
298- aSpot->setBeamWidthY (spotDB.beamWidthY ());
299- aSpot->setEmittanceX (spotDB.emittanceX ());
300- aSpot->setEmittanceY (spotDB.emittanceY ());
301- aSpot->setbetaStar (spotDB.betaStar ());
302- if (spotDB.beamType () == 2 ) {
303- aSpot->setType (reco::BeamSpot::Tracker);
304- } else {
305- aSpot->setType (reco::BeamSpot::Fake);
306- }
290+ beamSpotInfo->beamSpotsMap_ [" Online" ] = spotOnline;
307291
308292 if (writeDIPTxt_) {
309293 std::ofstream outFile;
@@ -318,16 +302,16 @@ std::shared_ptr<onlinebeammonitor::BeamSpotInfo> OnlineBeamMonitor::globalBeginL
318302 }
319303 // int lastLumiAnalyzed_ = iLumi.id().luminosityBlock();
320304
321- if (beamSpotInfo->beamSpotsMap_ .find (" Transient " ) != beamSpotInfo->beamSpotsMap_ .end ()) {
305+ if (beamSpotInfo->beamSpotsMap_ .find (" Online " ) != beamSpotInfo->beamSpotsMap_ .end ()) {
322306 if (beamSpotInfo->beamSpotsMap_ .find (" HLT" ) != beamSpotInfo->beamSpotsMap_ .end () &&
323- beamSpotInfo->beamSpotsMap_ [" Transient " ].x0 () == beamSpotInfo->beamSpotsMap_ [" HLT" ].x0 ()) {
307+ beamSpotInfo->beamSpotsMap_ [" Online " ].x0 () == beamSpotInfo->beamSpotsMap_ [" HLT" ].x0 ()) {
324308 // lastLumiAnalyzed_ = lastLumiHLT_;
325309 startTimeStamp_ = startTimeStampHLT_;
326310 stopTimeStamp_ = stopTimeStampHLT_;
327311 lumiRange_ = lumiRangeHLT_;
328312
329313 } else if (beamSpotInfo->beamSpotsMap_ .find (" Legacy" ) != beamSpotInfo->beamSpotsMap_ .end () &&
330- beamSpotInfo->beamSpotsMap_ [" Transient " ].x0 () == beamSpotInfo->beamSpotsMap_ [" Legacy" ].x0 ()) {
314+ beamSpotInfo->beamSpotsMap_ [" Online " ].x0 () == beamSpotInfo->beamSpotsMap_ [" Legacy" ].x0 ()) {
331315 // lastLumiAnalyzed_ = lastLumiLegacy_;
332316 startTimeStamp_ = startTimeStampLegacy_;
333317 stopTimeStamp_ = stopTimeStampLegacy_;
@@ -342,35 +326,35 @@ std::shared_ptr<onlinebeammonitor::BeamSpotInfo> OnlineBeamMonitor::globalBeginL
342326 outFile << " EndTimeOfFit " << stopTimeStamp_ << " " << 0 << std::endl;
343327 // outFile << "LumiRange " << lumiRange_ << " - " << lastLumiAnalyzed_ << std::endl;
344328 outFile << " LumiRange " << lumiRange_ << std::endl;
345- outFile << " Type " << aSpot-> type () << std::endl;
346- outFile << " X0 " << aSpot-> x0 () << std::endl;
347- outFile << " Y0 " << aSpot-> y0 () << std::endl;
348- outFile << " Z0 " << aSpot-> z0 () << std::endl;
349- outFile << " sigmaZ0 " << aSpot-> sigmaZ () << std::endl;
350- outFile << " dxdz " << aSpot-> dxdz () << std::endl;
351- outFile << " dydz " << aSpot-> dydz () << std::endl;
352- outFile << " BeamWidthX " << aSpot-> BeamWidthX () << std::endl;
353- outFile << " BeamWidthY " << aSpot-> BeamWidthY () << std::endl;
329+ outFile << " Type " << spotOnline. type () << std::endl;
330+ outFile << " X0 " << spotOnline. x0 () << std::endl;
331+ outFile << " Y0 " << spotOnline. y0 () << std::endl;
332+ outFile << " Z0 " << spotOnline. z0 () << std::endl;
333+ outFile << " sigmaZ0 " << spotOnline. sigmaZ () << std::endl;
334+ outFile << " dxdz " << spotOnline. dxdz () << std::endl;
335+ outFile << " dydz " << spotOnline. dydz () << std::endl;
336+ outFile << " BeamWidthX " << spotOnline. BeamWidthX () << std::endl;
337+ outFile << " BeamWidthY " << spotOnline. BeamWidthY () << std::endl;
354338 for (int i = 0 ; i < 6 ; ++i) {
355339 outFile << " Cov(" << i << " ,j) " ;
356340 for (int j = 0 ; j < 7 ; ++j) {
357- outFile << aSpot-> covariance (i, j) << " " ;
341+ outFile << spotOnline. covariance (i, j) << " " ;
358342 }
359343 outFile << std::endl;
360344 }
361- outFile << " Cov(6,j) 0 0 0 0 0 0 " << aSpot-> covariance (6 , 6 ) << std::endl;
362- outFile << " EmittanceX " << aSpot-> emittanceX () << std::endl;
363- outFile << " EmittanceY " << aSpot-> emittanceY () << std::endl;
364- outFile << " BetaStar " << aSpot-> betaStar () << std::endl;
345+ outFile << " Cov(6,j) 0 0 0 0 0 0 " << spotOnline. covariance (6 , 6 ) << std::endl;
346+ outFile << " EmittanceX " << spotOnline. emittanceX () << std::endl;
347+ outFile << " EmittanceY " << spotOnline. emittanceY () << std::endl;
348+ outFile << " BetaStar " << spotOnline. betaStar () << std::endl;
365349
366350 outFile.close ();
367351 }
368352 // LogInfo("OnlineBeamMonitor")
369- // << *aSpot << std::endl;
353+ // << *spotOnline << std::endl;
370354 } else {
371- LogInfo (" OnlineBeamMonitor" ) << " Database BeamSpot is not valid at lumi: " << iLumi.id ().luminosityBlock ();
355+ LogError (" OnlineBeamMonitor" ) << " The online BeamSpot collection is not valid at lumi: "
356+ << iLumi.id ().luminosityBlock ();
372357 }
373- return beamSpotInfo;
374358}
375359
376360// ----------------------------------------------------------------------------------------------------------------------
@@ -379,13 +363,13 @@ void OnlineBeamMonitor::globalEndLuminosityBlock(const LuminosityBlock& iLumi, c
379363 auto beamSpotInfo = luminosityBlockCache (iLumi.index ());
380364
381365 // Setting up the choice
382- if (beamSpotInfo->beamSpotsMap_ .find (" Transient " ) != beamSpotInfo->beamSpotsMap_ .end ()) {
366+ if (beamSpotInfo->beamSpotsMap_ .find (" Online " ) != beamSpotInfo->beamSpotsMap_ .end ()) {
383367 if (beamSpotInfo->beamSpotsMap_ .find (" HLT" ) != beamSpotInfo->beamSpotsMap_ .end () &&
384- beamSpotInfo->beamSpotsMap_ [" Transient " ].x0 () == beamSpotInfo->beamSpotsMap_ [" HLT" ].x0 ()) {
368+ beamSpotInfo->beamSpotsMap_ [" Online " ].x0 () == beamSpotInfo->beamSpotsMap_ [" HLT" ].x0 ()) {
385369 bsChoice_->Fill (iLumi.id ().luminosityBlock (), 1 );
386370 bsChoice_->setBinError (iLumi.id ().luminosityBlock (), 0.05 );
387371 } else if (beamSpotInfo->beamSpotsMap_ .find (" Legacy" ) != beamSpotInfo->beamSpotsMap_ .end () &&
388- beamSpotInfo->beamSpotsMap_ [" Transient " ].x0 () == beamSpotInfo->beamSpotsMap_ [" Legacy" ].x0 ()) {
372+ beamSpotInfo->beamSpotsMap_ [" Online " ].x0 () == beamSpotInfo->beamSpotsMap_ [" Legacy" ].x0 ()) {
389373 bsChoice_->Fill (iLumi.id ().luminosityBlock (), -1 );
390374 bsChoice_->setBinError (iLumi.id ().luminosityBlock (), 0.05 );
391375 } else {
@@ -437,17 +421,18 @@ void OnlineBeamMonitor::globalEndLuminosityBlock(const LuminosityBlock& iLumi, c
437421 histo->setBinContent (iLumi.id ().luminosityBlock (), resultsMap[" Legacy" ].first );
438422 histo->setBinError (iLumi.id ().luminosityBlock (), resultsMap[" Legacy" ].second );
439423 }
440- } else if (itM.second == " Lumibased BeamSpotTransient " ) {
441- if (resultsMap.find (" Transient " ) != resultsMap.end ()) {
442- histo->setBinContent (iLumi.id ().luminosityBlock (), resultsMap[" Transient " ].first );
443- histo->setBinError (iLumi.id ().luminosityBlock (), resultsMap[" Transient " ].second );
424+ } else if (itM.second == " Lumibased BeamSpotOnline " ) {
425+ if (resultsMap.find (" Online " ) != resultsMap.end ()) {
426+ histo->setBinContent (iLumi.id ().luminosityBlock (), resultsMap[" Online " ].first );
427+ histo->setBinError (iLumi.id ().luminosityBlock (), resultsMap[" Online " ].second );
444428 }
445429 } else {
446430 LogInfo (" OnlineBeamMonitor" ) << " The histosMap_ have a histogram named " << itM.second
447431 << " that I can't recognize in this loop!" ;
448432 }
449433 }
450434 }
435+ shouldReadEvent_ = true ;
451436}
452437
453438void OnlineBeamMonitor::dqmEndRun (edm::Run const &, edm::EventSetup const &) {
@@ -470,7 +455,7 @@ void OnlineBeamMonitor::dqmEndRun(edm::Run const&, edm::EventSetup const&) {
470455 for (int bin = 1 ; bin <= itHHH.second ->getTH1 ()->GetNbinsX (); bin++) {
471456 if (itHHH.second ->getTH1 ()->GetBinError (bin) != 0 || itHHH.second ->getTH1 ()->GetBinContent (bin) != 0 ) {
472457 if (itHHH.first == " Lumibased BeamSpotHLT" || itHHH.first == " Lumibased BeamSpotLegacy" ||
473- itHHH.first == " Lumibased BeamSpotTransient " ) {
458+ itHHH.first == " Lumibased BeamSpotOnline " ) {
474459 if (min > itHHH.second ->getTH1 ()->GetBinContent (bin)) {
475460 min = itHHH.second ->getTH1 ()->GetBinContent (bin);
476461 }
@@ -488,7 +473,7 @@ void OnlineBeamMonitor::dqmEndRun(edm::Run const&, edm::EventSetup const&) {
488473 for (auto & itHHH : itHH.second ) {
489474 if (itHHH.second != nullptr ) {
490475 if (itHHH.first == " Lumibased BeamSpotHLT" || itHHH.first == " Lumibased BeamSpotLegacy" ||
491- itHHH.first == " Lumibased BeamSpotTransient " ) {
476+ itHHH.first == " Lumibased BeamSpotOnline " ) {
492477 if ((max == -bigNumber && min == bigNumber) || max - min == 0 ) {
493478 itHHH.second ->getTH1 ()->SetMinimum (itHHH.second ->getTH1 ()->GetMinimum () - 0.01 );
494479 itHHH.second ->getTH1 ()->SetMaximum (itHHH.second ->getTH1 ()->GetMaximum () + 0.01 );
@@ -508,4 +493,11 @@ void OnlineBeamMonitor::dqmEndRun(edm::Run const&, edm::EventSetup const&) {
508493 }
509494}
510495
496+ void OnlineBeamMonitor::analyze (edm::Event const & iEvent, edm::EventSetup const & iSetup) {
497+ if (shouldReadEvent_) {
498+ fetchBeamSpotInformation (iEvent, iSetup);
499+ shouldReadEvent_ = false ;
500+ }
501+ }
502+
511503DEFINE_FWK_MODULE (OnlineBeamMonitor);
0 commit comments