Skip to content

Commit

Permalink
Merge pull request #30965 from MilanoBicocca-pix/BSESProducer_11_2_X
Browse files Browse the repository at this point in the history
Online BeamSpot ESProducer for Run3 workflow
  • Loading branch information
cmsbuild committed Aug 5, 2020
2 parents 62541ce + 851cd62 commit 78d9777
Show file tree
Hide file tree
Showing 6 changed files with 272 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,11 @@
#include "FWCore/Framework/interface/DependentRecordImplementation.h"
#include "CondFormats/DataRecord/interface/BeamSpotOnlineHLTObjectsRcd.h"
#include "CondFormats/DataRecord/interface/BeamSpotOnlineLegacyObjectsRcd.h"
#include "CondFormats/DataRecord/interface/BeamSpotObjectsRcd.h"

class BeamSpotTransientObjectsRcd
: public edm::eventsetup::DependentRecordImplementation<
BeamSpotTransientObjectsRcd,
edm::mpl::Vector<BeamSpotOnlineHLTObjectsRcd, BeamSpotOnlineLegacyObjectsRcd> > {};
edm::mpl::Vector<BeamSpotOnlineHLTObjectsRcd, BeamSpotOnlineLegacyObjectsRcd, BeamSpotObjectsRcd> > {};

#endif
17 changes: 12 additions & 5 deletions RecoVertex/BeamSpotProducer/plugins/BuildFile.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,32 +5,39 @@
<use name="CondFormats/BeamSpotObjects"/>
<use name="CondFormats/DataRecord"/>
<use name="CondCore/DBOutputService"/>

<use name="root"/>
<use name="rootminuit"/>
<use name="RecoVertex/BeamSpotProducer"/>

<library file="BeamSpotProducer.cc" name="BeamSpotProducer">
<flags EDM_PLUGIN="1"/>
</library>

<library file="BeamSpotOnlineProducer.cc" name="BeamSpotOnlineProducer">
<flags EDM_PLUGIN="1"/>
<use name="DataFormats/L1GlobalTrigger"/>
<use name="DataFormats/Scalers"/>
</library>

<library file="BeamSpotAnalyzer.cc" name="BeamSpotAnalyzer">
<use name="clhep"/>
<flags EDM_PLUGIN="1"/>
</library>

<library file="BeamSpotWrite2DB.cc" name="BeamSpotWrite2DB">
<flags EDM_PLUGIN="1"/>
</library>

<library file="BeamSpotFakeConditions.cc" name="BeamSpotFakeConditions">
<flags EDM_PLUGIN="1"/>
</library>

<library file="BeamSpotFromDB.cc" name="BeamSpotFromDB">
<flags EDM_PLUGIN="1"/>
</library>
<library file="OnlineBeamSpotFromDB.cc" name="OnlineBeamSpotFromDB">
<flags EDM_PLUGIN="1"/>
</library>
<library file="OnlineBeamSpotESProducer.cc" name="OnlineBeamSpotESProducer">
<flags EDM_PLUGIN="1"/>
</library>
<library file="OfflineToTransientBeamSpotESProducer.cc" name="OfflineToTransientBeamSpotESProducer">
<flags EDM_PLUGIN="1"/>
</library>

Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
#include "CondFormats/DataRecord/interface/BeamSpotObjectsRcd.h"
#include "CondFormats/BeamSpotObjects/interface/BeamSpotObjects.h"
#include "CondFormats/DataRecord/interface/BeamSpotTransientObjectsRcd.h"
#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
#include "FWCore/Framework/interface/ESProductHost.h"
#include "FWCore/Utilities/interface/ReusableObjectHolder.h"
#include "FWCore/Framework/interface/ESProducer.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"

#include "FWCore/Framework/interface/EventSetup.h"
#include "FWCore/Framework/interface/ESHandle.h"
#include "FWCore/Framework/interface/ModuleFactory.h"
#include "FWCore/Framework/interface/ESProducer.h"
#include "FWCore/Utilities/interface/do_nothing_deleter.h"
#include "FWCore/ParameterSet/interface/ParameterSetDescription.h"

#include <iostream>
#include <memory>
#include <string>

using namespace edm;
class OfflineToTransientBeamSpotESProducer : public edm::ESProducer {
public:
OfflineToTransientBeamSpotESProducer(const edm::ParameterSet& p);
std::shared_ptr<const BeamSpotObjects> produce(const BeamSpotTransientObjectsRcd&);
static void fillDescriptions(edm::ConfigurationDescriptions& desc);

private:
const BeamSpotObjects dummyBS_;
edm::ESGetToken<BeamSpotObjects, BeamSpotTransientObjectsRcd> const bsToken_;
edm::ESGetToken<BeamSpotObjects, BeamSpotObjectsRcd> bsOfflineToken_;
};

OfflineToTransientBeamSpotESProducer::OfflineToTransientBeamSpotESProducer(const edm::ParameterSet& p) {
auto cc = setWhatProduced(this);

bsOfflineToken_ = cc.consumesFrom<BeamSpotObjects, BeamSpotObjectsRcd>();
}

void OfflineToTransientBeamSpotESProducer::fillDescriptions(edm::ConfigurationDescriptions& desc) {
edm::ParameterSetDescription dsc;
desc.addWithDefaultLabel(dsc);
}
std::shared_ptr<const BeamSpotObjects> OfflineToTransientBeamSpotESProducer::produce(
const BeamSpotTransientObjectsRcd& iRecord) {
auto optionalRec = iRecord.tryToGetRecord<BeamSpotObjectsRcd>();
if (not optionalRec) {
return std::shared_ptr<const BeamSpotObjects>(&dummyBS_, edm::do_nothing_deleter());
}
return std::shared_ptr<const BeamSpotObjects>(&optionalRec->get(bsOfflineToken_), edm::do_nothing_deleter());
};

DEFINE_FWK_EVENTSETUP_MODULE(OfflineToTransientBeamSpotESProducer);
94 changes: 94 additions & 0 deletions RecoVertex/BeamSpotProducer/plugins/OnlineBeamSpotESProducer.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
#include "FWCore/Framework/interface/EventSetup.h"
#include "FWCore/Framework/interface/ESHandle.h"
#include "FWCore/Framework/interface/ModuleFactory.h"
#include "FWCore/Framework/interface/ESProducer.h"
#include "FWCore/Utilities/interface/do_nothing_deleter.h"
#include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
#include "DataFormats/BeamSpot/interface/BeamSpot.h"
#include "CondFormats/DataRecord/interface/BeamSpotObjectsRcd.h"
#include "CondFormats/BeamSpotObjects/interface/BeamSpotOnlineObjects.h"
#include "CondFormats/DataRecord/interface/BeamSpotOnlineLegacyObjectsRcd.h"
#include "CondFormats/DataRecord/interface/BeamSpotOnlineHLTObjectsRcd.h"
#include "CondFormats/DataRecord/interface/BeamSpotTransientObjectsRcd.h"
#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"

#include "FWCore/Framework/interface/ESProductHost.h"
#include "FWCore/Utilities/interface/ReusableObjectHolder.h"
#include "FWCore/Framework/interface/ESProducer.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include <memory>
#include <iostream>
#include <string>

using namespace edm;

class OnlineBeamSpotESProducer : public edm::ESProducer {
public:
OnlineBeamSpotESProducer(const edm::ParameterSet& p);
std::shared_ptr<const BeamSpotObjects> produce(const BeamSpotTransientObjectsRcd&);
static void fillDescriptions(edm::ConfigurationDescriptions& desc);

private:
const BeamSpotOnlineObjects* compareBS(const BeamSpotOnlineObjects* bs1, const BeamSpotOnlineObjects* bs2);
BeamSpotObjects fakeBS_;

edm::ESGetToken<BeamSpotObjects, BeamSpotTransientObjectsRcd> const bsToken_;
edm::ESGetToken<BeamSpotOnlineObjects, BeamSpotOnlineHLTObjectsRcd> bsHLTToken_;
edm::ESGetToken<BeamSpotOnlineObjects, BeamSpotOnlineLegacyObjectsRcd> bsLegacyToken_;
};
OnlineBeamSpotESProducer::OnlineBeamSpotESProducer(const edm::ParameterSet& p) {
auto cc = setWhatProduced(this);

fakeBS_.SetBeamWidthX(0.1);
fakeBS_.SetBeamWidthY(0.1);
fakeBS_.SetSigmaZ(15.);
fakeBS_.SetPosition(0., 0., 0.);
fakeBS_.SetType(-1);

bsHLTToken_ = cc.consumesFrom<BeamSpotOnlineObjects, BeamSpotOnlineHLTObjectsRcd>();
bsLegacyToken_ = cc.consumesFrom<BeamSpotOnlineObjects, BeamSpotOnlineLegacyObjectsRcd>();
}

void OnlineBeamSpotESProducer::fillDescriptions(edm::ConfigurationDescriptions& desc) {
edm::ParameterSetDescription dsc;
desc.addWithDefaultLabel(dsc);
}

const BeamSpotOnlineObjects* OnlineBeamSpotESProducer::compareBS(const BeamSpotOnlineObjects* bs1,
const BeamSpotOnlineObjects* bs2) {
//Random logic so far ...
if (bs1->GetSigmaZ() - 0.0001 < bs2->GetSigmaZ()) { //just temporary for debugging
if (bs1->GetSigmaZ() > 5.) {
return bs1;
} else {
return bs2;
}

} else {
if (bs2->GetSigmaZ() > 5.) {
return bs2;
} else {
return bs1;
}
}
}

std::shared_ptr<const BeamSpotObjects> OnlineBeamSpotESProducer::produce(const BeamSpotTransientObjectsRcd& iRecord) {
auto legacyRec = iRecord.tryToGetRecord<BeamSpotOnlineLegacyObjectsRcd>();
auto hltRec = iRecord.tryToGetRecord<BeamSpotOnlineHLTObjectsRcd>();
if (not legacyRec and not hltRec) {
return std::shared_ptr<const BeamSpotObjects>(&fakeBS_, edm::do_nothing_deleter());
}

const BeamSpotOnlineObjects* best;
if (legacyRec and hltRec) {
best = compareBS(&legacyRec->get(bsLegacyToken_), &hltRec->get(bsHLTToken_));
} else if (legacyRec) {
best = &legacyRec->get(bsLegacyToken_);
} else {
best = &hltRec->get(bsHLTToken_);
}
return std::shared_ptr<const BeamSpotObjects>(best, edm::do_nothing_deleter());
};

DEFINE_FWK_EVENTSETUP_MODULE(OnlineBeamSpotESProducer);
56 changes: 56 additions & 0 deletions RecoVertex/BeamSpotProducer/plugins/OnlineBeamSpotFromDB.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
/**_________________________________________________________________
class: OnlineBeamSpotFromDB.cc
package: RecoVertex/BeamSpotProducer
author: Francisco Yumiceva, Fermilab (yumiceva@fnal.gov)
________________________________________________________________**/

#include "DataFormats/BeamSpot/interface/BeamSpot.h"
#include "FWCore/MessageLogger/interface/MessageLogger.h"
#include "FWCore/Framework/interface/MakerMacros.h"
#include "FWCore/ServiceRegistry/interface/Service.h"
#include "FWCore/Framework/interface/ESHandle.h"
#include "FWCore/Framework/interface/EventSetup.h"
#include "FWCore/Framework/interface/IOVSyncValue.h"
#include "CondFormats/DataRecord/interface/BeamSpotTransientObjectsRcd.h"
#include "CondFormats/BeamSpotObjects/interface/BeamSpotOnlineObjects.h"
#include "CondFormats/BeamSpotObjects/interface/BeamSpotObjects.h"
#include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
#include "FWCore/Framework/interface/Frameworkfwd.h"
#include "FWCore/Framework/interface/ConsumesCollector.h"
#include "FWCore/Framework/interface/one/EDAnalyzer.h"
#include "FWCore/Framework/interface/Event.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
#include <string>

class OnlineBeamSpotFromDB : public edm::one::EDAnalyzer<> {
public:
explicit OnlineBeamSpotFromDB(const edm::ParameterSet& iConfig);
static void fillDescriptions(edm::ConfigurationDescriptions& desc);
edm::ESGetToken<BeamSpotObjects, BeamSpotTransientObjectsRcd> bsToken_;

private:
void analyze(const edm::Event&, const edm::EventSetup&) override;
};

OnlineBeamSpotFromDB::OnlineBeamSpotFromDB(const edm::ParameterSet& iConfig)
: bsToken_(esConsumes<BeamSpotObjects, BeamSpotTransientObjectsRcd>()) {}

void OnlineBeamSpotFromDB::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) {
auto const& mybeamspot = iSetup.getData(bsToken_);

edm::LogInfo("Run numver: ") << iEvent.id().run();
edm::LogInfo("beamspot from HLT ") << mybeamspot;
}
void OnlineBeamSpotFromDB::fillDescriptions(edm::ConfigurationDescriptions& desc) {
edm::ParameterSetDescription dsc;
desc.addWithDefaultLabel(dsc);
}

//define this as a plug-in
DEFINE_FWK_MODULE(OnlineBeamSpotFromDB);
55 changes: 55 additions & 0 deletions RecoVertex/BeamSpotProducer/test/readOnlineBeamSpotFromDB.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
import FWCore.ParameterSet.Config as cms

process = cms.Process("readDB")
process.load("FWCore.MessageLogger.MessageLogger_cfi")


process.load("CondCore.DBCommon.CondDBSetup_cfi")


tesOnLineESProducer = True

if tesOnLineESProducer:
process.BeamSpotDBSource = cms.ESSource("PoolDBESSource",
process.CondDBSetup,
toGet = cms.VPSet(
cms.PSet(
record = cms.string('BeamSpotOnlineLegacyObjectsRcd'),
tag = cms.string("BeamSpotOnlineTestLegacy"),
refreshTime = cms.uint64(1)

),
#cms.PSet(
# record = cms.string('BeamSpotOnlineHLTObjectsRcd'),
# tag = cms.string('BSOnLineHLT_tag'),
# refreshTime = cms.uint64(1)
# )

),
connect = cms.string('oracle://cms_orcon_prod/CMS_CONDITIONS')

)
process.BeamSpotESProducer = cms.ESProducer("OnlineBeamSpotESProducer")

else:
from Configuration.AlCa.GlobalTag import GlobalTag as customiseGlobalTag
process.GlobalTag = customiseGlobalTag(globaltag = "auto:run3_hlt_GRun")
process.BeamSpotESProducer = cms.ESProducer("OfflineToTransientBeamSpotESProducer")


process.MessageLogger.destinations = cms.untracked.vstring('detailedInfo')
process.MessageLogger.detailedInfo = cms.untracked.PSet(threshold = cms.untracked.string('INFO'))

process.source = cms.Source("EmptySource")
process.source.numberEventsInRun=cms.untracked.uint32(2)
process.source.firstRun = cms.untracked.uint32(336365)
process.source.firstLuminosityBlock = cms.untracked.uint32(13)
process.source.numberEventsInLuminosityBlock = cms.untracked.uint32(1)
process.maxEvents = cms.untracked.PSet(
input = cms.untracked.int32(5)
)
process.beamspot = cms.EDAnalyzer("OnlineBeamSpotFromDB")


process.p = cms.Path(process.beamspot)

0 comments on commit 78d9777

Please sign in to comment.