9 edm::LogInfo(
"SUSY_HLT_Razor") <<
"Constructor SUSY_HLT_Razor::SUSY_HLT_Razor " << std::endl;
22 edm::LogInfo(
"SUSY_HLT_Razor") <<
"Destructor SUSY_HLT_Razor::~SUSY_HLT_Razor " << std::endl;
26 edm::LogInfo(
"SUSY_HLT_Razor") <<
"SUSY_HLT_Razor::beginRun" << std::endl;
30 edm::LogInfo(
"SUSY_HLT_Razor") <<
"SUSY_HLT_Razor::bookHistograms" << std::endl;
39 ->setComment(
"Calo HLT filter module used to save razor variable objects");
42 ->setComment(
"hemisphere jets used to compute razor variables");
43 desc.
add<
std::string>(
"TriggerPath",
"HLT_RsqMR300_Rsq0p09_MR200_v")->setComment(
"trigger path name");
45 ->setComment(
"PF HLT filter module used to save razor variable objects");
48 descriptions.
add(
"SUSY_HLT_Razor_Main", desc);
52 edm::LogInfo(
"SUSY_HLT_Razor") <<
"SUSY_HLT_Razor::analyze" << std::endl;
82 edm::LogError(
"SUSY_HLT_Razor") <<
"invalid collection: TriggerResults" 92 if (!triggerSummary.
isValid()) {
93 edm::LogError(
"SUSY_HLT_Razor") <<
"invalid collection: TriggerSummary" 100 double onlineMR = 0, onlineRsq = 0;
107 if (!(filterIndex >= triggerSummary->
sizeFilters())) {
109 for (
size_t j = 0; j < keys.size(); ++j) {
111 if (foundObject.
id() == 0) {
112 onlineMR = foundObject.
px();
113 onlineRsq = foundObject.
py();
119 if (!(caloFilterIndex >= triggerSummary->
sizeFilters())) {
121 for (
size_t j = 0; j < keys.size(); ++j) {
123 if (foundObject.
id() == 0) {
124 caloMR = foundObject.
px();
125 caloRsq = foundObject.
py();
130 bool hasFired =
false;
132 unsigned int numTriggers = trigNames.
size();
133 for (
unsigned int hltIndex = 0; hltIndex < numTriggers; ++hltIndex) {
135 hltresults->
accept(hltIndex)) {
142 for (
unsigned int i = 0;
i < jetCollection->size();
i++) {
143 if (
std::abs(jetCollection->at(
i).eta()) < 3.0 && jetCollection->at(
i).pt() >= 40.0) {
144 HT += jetCollection->at(
i).pt();
153 float MET = (inputMet->front()).
pt();
158 if (not hemispheres.
isValid()) {
166 if (hemispheres->empty()) {
169 edm::LogError(
"SUSY_HLT_Razor") <<
"Cannot calculate M_R and R^2 because there are too many jets! " 170 "(trigger passed automatically without forming the hemispheres)" 178 if (!hemispheres->empty() && hemispheres->size() != 2 && hemispheres->size() != 5 && hemispheres->size() != 10) {
179 edm::LogError(
"SUSY_HLT_Razor") <<
"Invalid hemisphere collection! hemispheres->size() = " << hemispheres->size()
184 TLorentzVector ja(hemispheres->at(0).x(), hemispheres->at(0).y(), hemispheres->at(0).z(), hemispheres->at(0).t());
185 TLorentzVector jb(hemispheres->at(1).x(), hemispheres->at(1).y(), hemispheres->at(1).z(), hemispheres->at(1).t());
188 std::vector<math::XYZTLorentzVector> muonVec;
190 double MR =
CalcMR(ja, jb);
191 double R =
CalcR(MR, ja, jb, inputMet, muonVec);
222 edm::LogInfo(
"SUSY_HLT_Razor") <<
"SUSY_HLT_Razor::endRun" << std::endl;
229 h_mr = ibooker_.
book1D(
"mr",
"M_{R} (R^{2} > 0.15) ; GeV", 100, 0.0, 4000);
230 h_rsq = ibooker_.
book1D(
"rsq",
"R^{2} (M_{R} > 300)", 100, 0.0, 1.5);
231 h_mrRsq = ibooker_.
book2D(
"mrRsq",
"R^{2} vs M_{R}; GeV; ", 100, 0.0, 4000.0, 100, 0.0, 1.5);
233 h_mr_tight = ibooker_.
book1D(
"mr_tight",
"M_{R} (R^{2} > 0.25) ; GeV", 100, 0.0, 4000);
234 h_rsq_tight = ibooker_.
book1D(
"rsq_tight",
"R^{2} (M_{R} > 400) ; ", 100, 0.0, 1.5);
236 h_rsq_loose = ibooker_.
book1D(
"rsq_loose",
"R^{2} (M_{R} > 0) ; ", 100, 0.0, 1.5);
238 h_ht = ibooker_.
book1D(
"ht",
"HT; GeV; ", 100, 0.0, 4000.0);
239 h_met = ibooker_.
book1D(
"met",
"MET; GeV; ", 100, 0.0, 1000);
240 h_htMet = ibooker_.
book2D(
"htMet",
"MET vs HT; GeV; ", 100, 0.0, 4000.0, 100, 0.0, 1000);
243 "Online M_{R} vs Offline M_{R} (events passing " 244 "trigger); Offline M_{R} (GeV); Online M_{R} (GeV); ",
252 "Calo M_{R} vs Offline M_{R} (events passing trigger); " 253 "Offline M_{R} (GeV); Calo M_{R} (GeV); ",
261 "Online R^{2} vs Offline R^{2} (events passing trigger); " 262 "Offline R^{2}; Online R^{2}; ",
270 "Calo R^{2} vs Offline R^{2} (events passing trigger); " 271 "Offline R^{2}; Calo R^{2}; ",
287 ja.SetPtEtaPhiM(ja.Pt(), ja.Eta(), ja.Phi(), 0.0);
288 jb.SetPtEtaPhiM(jb.Pt(), jb.Eta(), jb.Phi(), 0.0);
290 if (ja.Pt() > jb.Pt()) {
291 TLorentzVector
temp = ja;
301 jaT.SetXYZ(ja.Px(), ja.Py(), 0.0);
302 jbT.SetXYZ(jb.Px(), jb.Py(), 0.0);
303 double ATBT = (jaT + jbT).Mag2();
305 double MR =
sqrt((A + B) * (A + B) - (az + bz) * (az + bz) -
306 (jbT.Dot(jbT) - jaT.Dot(jaT)) * (jbT.Dot(jbT) - jaT.Dot(jaT)) / (jaT + jbT).Mag2());
308 double mybeta = (jbT.Dot(jbT) - jaT.Dot(jaT)) /
sqrt(ATBT * ((A + B) * (A + B) - (az + bz) * (az + bz)));
310 double mygamma = 1. /
sqrt(1. - mybeta * mybeta);
320 const std::vector<math::XYZTLorentzVector> &
muons) {
323 met.SetPtEtaPhi((inputMet->front()).
pt(), 0.0, (inputMet->front()).
phi());
325 std::vector<math::XYZTLorentzVector>::const_iterator muonIt;
326 for (muonIt = muons.begin(); muonIt != muons.end(); muonIt++) {
328 tmp.SetPtEtaPhi(muonIt->pt(), 0, muonIt->phi());
332 double MTR =
sqrt(0.5 * (met.Mag() * (ja.Pt() + jb.Pt()) - met.Dot(ja.Vect() + jb.Vect())));
void bookHistos(DQMStore::IBooker &)
T getParameter(std::string const &) const
bool wasrun() const
Was at least one path run?
MonitorElement * h_calo_rsq_vs_rsq
static double CalcR(double MR, TLorentzVector ja, TLorentzVector jb, edm::Handle< edm::View< reco::MET >> met, const std::vector< math::XYZTLorentzVector > &muons)
trigger::size_type sizeFilters() const
void dqmBeginRun(edm::Run const &, edm::EventSetup const &) override
bool getByToken(EDGetToken token, Handle< PROD > &result) const
edm::EDGetTokenT< trigger::TriggerEvent > theTrigSummary_
MonitorElement * h_rsq_tight
SUSY_HLT_Razor(const edm::ParameterSet &ps)
bool accept() const
Has at least one path accepted the event?
const Keys & filterKeys(trigger::size_type index) const
trigger::size_type filterIndex(const edm::InputTag &filterTag) const
find index of filter in data-member vector from filter tag
void endRun(edm::Run const &run, edm::EventSetup const &eSetup) override
Strings::size_type size() const
MonitorElement * h_online_mr_vs_mr
Single trigger physics object (e.g., an isolated muon)
#define DEFINE_FWK_MODULE(type)
edm::EDGetTokenT< edm::View< reco::MET > > theMETCollection_
void setCurrentFolder(std::string const &fullpath)
const TriggerObjectCollection & getObjects() const
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
MonitorElement * book1D(Args &&...args)
Abs< T >::type abs(const T &t)
void analyze(edm::Event const &e, edm::EventSetup const &eSetup) override
static const std::string B
ParameterDescriptionBase * add(U const &iLabel, T const &value)
edm::InputTag caloFilter_
MonitorElement * h_calo_mr_vs_mr
std::vector< TriggerObject > TriggerObjectCollection
collection of trigger physics objects (e.g., all isolated muons)
static const char *const trigNames[]
MonitorElement * book2D(Args &&...args)
std::string const & triggerName(unsigned int index) const
std::vector< size_type > Keys
void add(std::string const &label, ParameterSetDescription const &psetDescription)
edm::EDGetTokenT< std::vector< math::XYZTLorentzVector > > theHemispheres_
std::vector< std::vector< double > > tmp
MonitorElement * h_online_rsq_vs_rsq
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
edm::EDGetTokenT< edm::View< reco::Jet > > theJetCollection_
~SUSY_HLT_Razor() override
edm::InputTag triggerFilter_
MonitorElement * h_mr_tight
edm::TriggerNames const & triggerNames(edm::TriggerResults const &triggerResults) const override
edm::EDGetTokenT< edm::TriggerResults > triggerResults_
static double CalcMR(TLorentzVector ja, TLorentzVector jb)
MonitorElement * h_rsq_loose