12 #include "CLHEP/Units/SystemOfUnits.h"
25 const IInterface*
p) :
27 m_trigDecisionTool(
"Trig::TrigDecisionTool/TrigDecisionTool"),
41 declareProperty(
"JetContainer",
m_jetSGKey =
"AntiKt4LCTopoJets");
43 declareProperty(
"RequireGRL",
m_reqGRL =
true);
47 declareProperty(
"RequireJetPts",
m_reqJetPts =
true);
55 declareProperty(
"Triggers",
m_triggers = std::vector<std::string>());
58 declareProperty(
"MaxEta",
m_maxEta = 4.8);
67 declareProperty(
"DiJetDPhi",
m_jetDPhi = 2.5);
82 if(m_trigDecisionTool.retrieve(DisableTool{!m_reqTrigger}).isFailure()) {
83 ATH_MSG_FATAL(
"Failed to retrieve tool: " << m_trigDecisionTool);
84 return StatusCode::FAILURE;
86 if (!m_triggers.size()) m_triggers.push_back(m_defaultTrigger);
93 m_JESTool.setTypeAndName(
"JetCalibrationTool/m_JESTool");
94 CHECK( m_JESTool.retrieve() );
99 return StatusCode::SUCCESS;
105 ATH_MSG_INFO(
"Processed " << m_n_tot <<
" events, " << m_n_pass <<
" events passed filter ");
116 return StatusCode::SUCCESS;
126 bool writeEvent(
false);
131 if (!SubcutGoodRunList() && m_reqGRL )
return false;
132 if (!SubcutLArError() && m_reqLArError )
return false;
133 if (!SubcutTrigger() && m_reqTrigger )
return false;
135 const auto jets = SubcutPreselect();
136 if (!m_reqPreselection) writeEvent =
true;
142 bool passDiJets(
true);
143 if (!SubcutJetPts(
jets.value()) && m_reqJetPts ) passDiJets =
false;
144 if (!SubcutJetDEta(
jets.value()) && m_reqJetsDEta ) passDiJets =
false;
145 if (!SubcutDijetMass(
jets.value()) && m_reqDiJetMass) passDiJets =
false;
146 if (!SubcutJetDPhi(
jets.value()) && m_reqJetsDPhi ) passDiJets =
false;
147 if (passDiJets) writeEvent =
true;
150 if (!writeEvent)
return false;
174 if (passLArError) m_n_passLArError++;
185 bool passTrigger =
false;
187 for (
unsigned int i = 0;
i < m_triggers.size();
i++) {
188 bool thisTrig = m_trigDecisionTool->isPassed(m_triggers.at(
i));
190 acc(*eventInfo) = thisTrig;
192 passTrigger |= thisTrig;
198 if (passTrigger) m_n_passTrigger++;
203 std::optional<DerivationFramework::SkimmingToolEXOT14::LeadingJets_t>
215 TLorentzVector j1TLV, j2TLV;
218 while(jet_itr != jet_end) {
226 if(m_JESTool->applyCalibration(calibJets).isFailure())
229 jet_itr = calibJets.
begin();
230 jet_end = calibJets.
end();
231 while(jet_itr != jet_end) {
233 if (abs((*jet_itr)->eta()) > m_maxEta)
continue;
235 if ((*jet_itr)->pt() > j1TLV.Pt()) {
238 j1TLV.SetPtEtaPhiE((*jet_itr)->pt(), (*jet_itr)->eta(), (*jet_itr)->phi(), (*jet_itr)->e());
240 }
else if ((*jet_itr)->pt() > j2TLV.Pt()) {
242 j2TLV.SetPtEtaPhiE((*jet_itr)->pt(), (*jet_itr)->eta(), (*jet_itr)->phi(), (*jet_itr)->e());
249 if (j2TLV.Pt() > m_minJetPt) {
261 bool passJetPts = (!m_leadingJetPt ||
jets[0].Pt() > m_leadingJetPt);
262 passJetPts &= (!m_subleadingJetPt ||
jets[1].Pt() > m_subleadingJetPt);
264 if (passJetPts) m_n_passJetPts++;
272 const bool passJetsDEta = JetsDEta > m_etaSeparation;
274 if (passJetsDEta) m_n_passJetsDEta++;
282 const double DiJetMass = (
jets[0] +
jets[1]).M();
283 const bool passDiJetMass = DiJetMass > m_dijetMass;
285 if (passDiJetMass) m_n_passDiJetMass++;
286 return passDiJetMass;
292 const double JetsDPhi = fabs(
jets[0].DeltaPhi(
jets[1]));
293 const bool passJetsDPhi = JetsDPhi < m_jetDPhi;
295 if (passJetsDPhi) m_n_passJetsDPhi++;