27 ATH_MSG_INFO(
"TrigEgammaMonitorTopoAlgorithm::initialize()...");
34 return StatusCode::SUCCESS;
46 return StatusCode::SUCCESS;
56 return StatusCode::SUCCESS;
62 return StatusCode::SUCCESS;
65 const std::string numeratorStr{
"trigger_num"};
66 const std::string denominatorStr{
"trigger_den"};
67 const std::string key0Str{
"leg0_key"};
68 const std::string key1Str{
"leg1_key"};
71 std::string trigger_num = d.at(numeratorStr);
72 std::string trigger_den = d.at(denominatorStr);
74 const auto & monGroup_online =
getGroup( trigger_num +
"_Efficiency_HLT" );
75 const auto & monGroup_offline =
getGroup( trigger_num +
"_Efficiency_Offline" );
77 std::vector<float> mass_vec, mass_off_vec, match_mass_vec, match_mass_off_vec;
78 std::vector<float> dphi_vec, dphi_off_vec, match_dphi_vec, match_dphi_off_vec;
90 std::vector<Legs> legs_den_vec, legs_num_vec;
91 const auto & k0 = d.at(key0Str);
92 const auto & k1 = d.at(key1Str);
93 make_legs( trigger_num , k0, k1, legs_num_vec);
94 make_legs( trigger_den , k0, k1, legs_den_vec);
98 for (
auto &legs : legs_den_vec){
100 if( legs.leg0 && legs.leg1 ){
101 mass_vec.push_back( (legs.leg0->p4() + legs.leg1->p4()).M() );
102 dphi_vec.push_back( legs.leg0->p4().DeltaPhi(legs.leg1->p4()) );
105 if(
match( *offElectrons, legs.leg0, leg0_off) &&
106 match( *offElectrons, legs.leg1, leg1_off))
108 if (! (leg0_off == leg1_off)){
109 mass_off_vec.push_back( (leg0_off->
p4() + leg1_off->
p4()).M() );
110 dphi_off_vec.push_back( leg0_off->
p4().DeltaPhi(leg1_off->
p4()) );
118 for (
auto &legs : legs_num_vec){
121 if( legs.leg0 && legs.leg1 ){
122 match_mass_vec.push_back( (legs.leg0->p4() + legs.leg1->p4()).M() );
123 match_dphi_vec.push_back( legs.leg0->p4().DeltaPhi(legs.leg1->p4()) );
126 if(
match( *offElectrons, legs.leg0, leg0_off) &&
127 match( *offElectrons, legs.leg1, leg1_off))
129 if (! (leg0_off == leg1_off)){
130 match_mass_off_vec.push_back( (leg0_off->
p4() + leg1_off->
p4()).M() );
131 match_dphi_off_vec.push_back( leg0_off->
p4().DeltaPhi(leg1_off->
p4()) );
138 fill(monGroup_online, mass_col, match_mass_col, dphi_col, match_dphi_col);
139 fill(monGroup_offline, mass_off_col, match_mass_off_col, dphi_off_col, match_dphi_off_col);
143 return StatusCode::SUCCESS;
153 float min_deltaR = 999;
154 for (
auto part : container){
155 float dR = part_on->
p4().DeltaR(part->p4());
156 if (
dR < min_deltaR ){
161 return ( (min_deltaR <
m_dR) && part_off);
167 std::string key_leg0,
168 std::string key_leg1,
169 std::vector<Legs> &legs_vec )
const
191 ATH_MSG_DEBUG(
"We have " << vec_leg0.size() <<
" combinations for leg0 from " << trigger);
192 ATH_MSG_DEBUG(
"We have " << vec_leg1.
size() <<
" combinations for leg1 from " << trigger);
194 for (
auto & leg0_feat : vec_leg0){
196 for (
auto & leg1_feat : vec_leg1){
198 if ( !leg0_feat.isValid() || !leg1_feat.isValid() )
202 auto leg0 = (*leg0_feat.link);
203 auto leg1 = (*leg1_feat.link);
205 if (leg0 == leg1)
continue;
207 legs_vec.push_back(
Legs{leg0 , leg1} );
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_DEBUG(x,...)
#define ATH_MSG_INFO(x,...)
const ToolHandle< GenericMonitoringTool > & getGroup(std::string_view name) const
Get a specific monitoring tool from the tool handle array.
size_type size() const noexcept
Returns the number of elements in the collection.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
TrigEgammaMonitorBaseAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
const ToolHandle< TrigEgammaMatchingToolMT > & match() const
Get the e/g match tool.
float dR(const float, const float, const float, const float) const
Get delta R.
bool isHLTTruncated() const
const ToolHandle< Trig::TrigDecisionTool > & tdt() const
Get the TDT.
virtual StatusCode initialize() override
initialize
virtual StatusCode fillHistograms(const EventContext &ctx) const override
=========================================================================
TrigEgammaMonitorTopoAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Gaudi::Property< float > m_dR
Min Delta R between online and offline.
bool match(const xAOD::IParticleContainer &container, const xAOD::IParticle *part_on, const xAOD::IParticle *&part_off) const
=========================================================================
virtual ~TrigEgammaMonitorTopoAlgorithm() override
=========================================================================
SG::ReadHandleKey< xAOD::PhotonContainer > m_offPhotonKey
void make_legs(const std::string &trigger, std::string key_leg0, std::string key_leg1, std::vector< Legs > &) const
Get all combinations.
Gaudi::Property< std::vector< std::map< std::string, std::string > > > m_trigListConfig
List of configurations.
SG::ReadHandleKey< xAOD::ElectronContainer > m_offElectronKey
Event Wise offline ElectronContainer Access and end iterator.
virtual StatusCode initialize() override
=========================================================================
FeatureRequestDescriptor & setCondition(const unsigned int condition)
Set the Condition: TrigDefs::Physics - (default), only returns features from paths through the naviga...
void reset()
Reset the FeatureRequestDescriptor to its default configuration.
FeatureRequestDescriptor & setChainGroup(const std::string &chainGroupName)
Set the desired Chain or Chain Group.
FeatureRequestDescriptor & setRestrictRequestToLeg(const int restrictToLegIndex)
Set to -1 by default, indicating that all legs of multi-leg chains are searched.
FeatureRequestDescriptor & setRequireSGKey(const std::string &containerSGKey)
Set the StoreGate key filter.
Class providing the definition of the 4-vector interface.
virtual FourMom_t p4() const =0
The full 4-momentum of the particle.
void fill(const ToolHandle< GenericMonitoringTool > &groupHandle, std::vector< std::reference_wrapper< Monitored::IMonitoredVariable > > &&variables) const
Fills a vector of variables to a group by reference.
ValuesCollection< T > Collection(std::string name, const T &collection)
Declare a monitored (double-convertible) collection.
static const unsigned int Physics
The common trigger namespace for trigger analysis tools.
DataVector< IParticle > IParticleContainer
Simple convenience declaration of IParticleContainer.