|
ATLAS Offline Software
|
#include <TrigAFPDijetComboHypoTool.h>
|
Gaudi::Property< std::string > | m_protonTransportParamFileNameA {this,"protonTransportParamFileName1","final_parameterization_b1.txt","Name of the file with proton transport parameterization for A side"} |
| Boolean corresponding to the decision to record the event based on the selection being met. More...
|
|
Gaudi::Property< std::string > | m_protonTransportParamFileNameC {this,"protonTransportParamFileName2","final_parameterization_b2.txt","Name of the file with proton transport parameterization C side"} |
|
ToolHandle< IAFPProtonTransportTool > | m_transportBeamA |
|
ToolHandle< IAFPProtonTransportTool > | m_transportBeamC |
| Proton transport parameterizaton object used in the proton position prediction for ATLAS C side. More...
|
|
Gaudi::Property< float > | m_maxProtonDist {this,"maxProtonDist",2.0,"Cut on distance between measured and extrapolated proton"} |
| Threshold for the radius distance between parameterization and measurements. More...
|
|
Gaudi::Property< float > | m_maxProtonDiff_x {this,"maxProtonDiff_x",2.5,"Cut on x difference between measured and extrapolated proton"} |
| Threshold for the x distance between parameterization and measurements. More...
|
|
Gaudi::Property< float > | m_maxProtonDiff_y {this,"maxProtonDiff_y",2.5,"Cut on y difference between measured and extrapolated proton"} |
| Threshold for the y distance between parameterization and measurements. More...
|
|
Gaudi::Property< float > | m_beamEnergy {this,"beamEnergy",6500.0,"Energy of one beam i.e. half of centre-of-mass energy"} |
| energy of one beam i.e. half of centre-of-mass energy More...
|
|
float | m_totalEnergy = 2*m_beamEnergy |
| beams centre-of-mass energy 2*m_beamEnergy More...
|
|
Gaudi::Property< float > | m_protonPosShift_x {this,"protonPosShift_x",0.0,"Expected difference in x position between measured and predicted proton"} |
| Shift in x position between parameterization and measurements. More...
|
|
Gaudi::Property< float > | m_protonPosShift_y {this,"protonPosShift_y",0.0,"Expected difference in y position between measured and predicted proton"} |
| Shif in y position between parameterization and measurements. More...
|
|
Gaudi::Property< float > | m_alignmentCorrection_nearA {this,"alignmentCorrection_nearA",0.0,"Shift due to alignment in x for protons in near station A"} |
| Beam alignment corrections in the x position of ATLAS A side. More...
|
|
Gaudi::Property< float > | m_alignmentCorrection_nearC {this,"alignmentCorrection_nearC",0.0,"Shift due to alignment in x for protons in near station C"} |
| Beam alignment corrections in the x position of ATLAS C side. More...
|
|
const float | m_GeV = 0.001 |
| Variable to convert from MeV to GeV. More...
|
|
SG::ReadHandleKey< xAOD::AFPTrackContainer > | m_AFPtrackCollectionReadKey {this, "AFPTrackContainer", "HLT_AFPTrackContainer", "xAOD AFP track collection"} |
|
ToolHandle< GenericMonitoringTool > | m_monTool { this, "MonTool", "", "Monitoring tool" } |
|
HLT::Identifier | m_decisionId |
| The DecisionID of the chain, obtained from the Tool's name. More...
|
|
std::vector< HLT::Identifier > | m_legDecisionIds |
| The DecisionIDs of the individual legs, derived from both m_decisionId and m_legMultiplicities. More...
|
|
std::vector< int > | m_legMultiplicities |
| The number of legs, and the required multiplicity on each leg. More...
|
|
Definition at line 21 of file TrigAFPDijetComboHypoTool.h.
◆ TrigAFPDijetComboHypoTool()
TrigAFPDijetComboHypoTool::TrigAFPDijetComboHypoTool |
( |
const std::string & |
type, |
|
|
const std::string & |
name, |
|
|
const IInterface * |
parent |
|
) |
| |
◆ ~TrigAFPDijetComboHypoTool()
TrigAFPDijetComboHypoTool::~TrigAFPDijetComboHypoTool |
( |
| ) |
|
|
virtual |
◆ decide()
retrieves the decisions associated to this decId, make their combinations and apply the algorithm
- Parameters
-
[in] | LegDecisionsMap | that lists all the passing decisions, to be updated by the tool depending on the outcome of executeAlg |
[in] | Event | Context, currently unused |
Reimplemented in DisplacedJetRankComboHypoTool.
Definition at line 48 of file ComboHypoToolBase.cxx.
50 ATH_MSG_ERROR(
"ComboHypoTool for " <<
m_decisionId <<
" has not been properly configured. setLegMultiplicity should be called by the parent alg in initalize");
51 return StatusCode::FAILURE;
55 if (passingLegs.size() == 0) {
56 return StatusCode::SUCCESS;
59 ATH_MSG_DEBUG(
"Looking for legs from " <<
decisionId() <<
" in the map. Map contains features for " << passingLegs.size() <<
" legs, which may be data for many chains.");
62 std::vector<std::vector<Combo::LegDecision>> legDecisions;
67 if (legDecisions.at(legIndex).size() <
static_cast<size_t>(
m_legMultiplicities.at(legIndex))) {
69 ATH_MSG_DEBUG(
"This ComboHypoTool cannot run in this event, this chain **REJECTS** this event.");
72 return StatusCode::SUCCESS;
80 const size_t out_of = legDecisions.at(legIndex).size();
81 nucg.
add({out_of, choose_any});
82 ATH_MSG_DEBUG(
"For leg " << legIndex <<
" we will be choosing any " << choose_any <<
" Decision Objects out of " << out_of);
85 std::vector<std::vector<Combo::LegDecision>> passingCombinations;
87 size_t warnings = 0, iterations = 0;
90 const std::vector<size_t> combination = nucg();
92 std::vector<Combo::LegDecision> combinationToCheck;
94 size_t location_in_combination = 0;
99 const size_t objectIndex = combination.at(location_in_combination++);
100 combinationToCheck.push_back( legDecisions.at(legIndex).at(objectIndex) );
108 ATH_MSG_DEBUG(
"Combination " << (iterations - 1) <<
" decided to be passing");
109 passingCombinations.push_back(combinationToCheck);
120 return StatusCode::FAILURE;
124 ATH_MSG_WARNING(
"Have so far processed " << iterations <<
" combinations for " <<
m_decisionId <<
" in this event, " << passingCombinations.size() <<
" passing.");
127 ATH_MSG_WARNING(
"Too many combinations! Breaking the loop at this point.");
137 ATH_MSG_DEBUG(
"Passing " << passingCombinations.size() <<
" combinations out of " << iterations <<
", "
138 <<
m_decisionId << (passingCombinations.size() ?
" **ACCEPTS**" :
" **REJECTS**") <<
" this event based on OR logic.");
141 ATH_MSG_DEBUG(
"Note: stopped after the first successful combination due to the EnableOverride flag.");
146 const bool passAll = (passingCombinations.size() == iterations);
148 ATH_MSG_DEBUG(
"Passing " << passingCombinations.size() <<
" combinations out of " << iterations <<
", "
149 <<
m_decisionId << (passAll ?
" **ACCEPTS**" :
" **REJECTS**") <<
" this event based on AND logic.");
152 ATH_MSG_DEBUG(
"Note: stopped after the first failed combination due to the EnableOverride flag.");
156 passingCombinations.clear();
161 if (not passingCombinations.empty()) {
168 return StatusCode::SUCCESS;
◆ decideOnSingleObject()
Alternate method called by BPhysics ComboHypoAlgs instead of the base method decide(...).
This function should be considered a specialist use-case only. It must be over-ridden to do anything useful.
Reimplemented in TrigMultiTrkComboHypoTool, and TrigBmumuxComboHypoTool.
Definition at line 284 of file ComboHypoToolBase.cxx.
285 ATH_MSG_ERROR(
"Do not use ComboHypoToolBase on its own, inherit this class and override decideOnSingleObject.");
286 ATH_MSG_ERROR(
"NOTE: Only if you are also supplying your own decide(...) implimentation, or similar.");
287 ATH_MSG_ERROR(
"NOTE: Most uses cases should only need to override executeAlg(...).");
288 return StatusCode::FAILURE;
◆ decisionId()
◆ eraseFromLegDecisionsMap()
For when the tool rejects all combinations.
Remove all Decision Objects from all the legs of this HypoTool's chain.
Definition at line 253 of file ComboHypoToolBase.cxx.
254 for (
auto&
it : passingLegs) {
257 const size_t nDecisionObjects =
it.second.size();
◆ executeAlg()
Only a dummy implementation exists in ComboHypoToolBase.
This should be over-ridden by a derived class. The derived class should return a boolean pass/fail for each possible combination in the event. param[in] combination A single combination of objects to be discriminated against. Vector contains the required number of objects over all legs. Use the pair.first to tell which leg a given pair.second decision object belongs to in the current combination.
Reimplemented from ComboHypoToolBase.
Definition at line 79 of file TrigAFPDijetComboHypoTool.cxx.
81 ATH_MSG_DEBUG(
"TrigAFPDijetComboHypoTool::executeAlg Executing algorithm");
83 std::vector<ElementLink<xAOD::JetContainer>> selected_jets;
86 if(combination.size() != 3)
ATH_MSG_ERROR(
"Number of leg decisions is not 3!");
90 for(
const auto& comb: combination){
91 const auto dec = comb.second;
93 if (jet_link.isValid()) {
94 selected_jets.push_back(jet_link);
98 if(selected_jets.size() != 2){
99 ATH_MSG_ERROR(
"Expecting to combine exactly two jets, but instead found "
100 << selected_jets.size() <<
". Will throw a runtime error");
101 throw std::runtime_error(
102 "Expecting to combine exactly two jets, but instead found " +
107 auto jetLink1 = selected_jets[0];
108 auto jetLink2 = selected_jets[1];
110 TLorentzVector jet1_vec = (*jetLink1)->p4();
111 TLorentzVector jet2_vec = (*jetLink2)->p4();
112 TLorentzVector dijet = jet1_vec + jet2_vec;
117 dijetMass = dijet.M() *
m_GeV;
119 dijetRapidity = dijet.Rapidity();
132 auto predictProtonAEnergy =
Monitored::Scalar(
"PredictProtonAEnergy" , -999.0 );
133 auto predictProtonCEnergy =
Monitored::Scalar(
"PredictProtonCEnergy" , -999.0 );
158 double sideA_minDist = 9e9;
159 double sideC_minDist = 9e9;
161 int nearestTrackSideAId = 999;
162 int nearestTrackSideCId = 999;
169 for(
auto track: (*tracksAFP)){
176 if(
track->stationID() == 1){
179 yDiff = sideA_predictY -
track->yLocal();
180 distance = sqrt(xDiff * xDiff + yDiff * yDiff);
184 nearestTrackSideAId =
track->index();
187 }
else if(
track->stationID() == 2){
190 yDiff = sideC_predictY -
track->yLocal();
191 distance = sqrt(xDiff * xDiff + yDiff * yDiff);
195 nearestTrackSideCId =
track->index();
205 bool passRCutA =
false;
206 bool passRCutC =
false;
208 bool passXYCutA =
false;
209 bool passXYCutC =
false;
222 if(nearestTrackSideAId != 999){
225 sideA_trackY = tracksAFP.get()->at(nearestTrackSideAId)->yLocal();
226 sideA_diffX = sideA_predictX - sideA_trackX;
227 sideA_diffY = sideA_predictY - sideA_trackY;
229 ATH_MSG_DEBUG(
"TrigAFPDijetComboHypoTool::execute sideA_diffX: " << sideA_diffX);
241 if(nearestTrackSideCId != 999){
244 sideC_trackY = tracksAFP.get()->at(nearestTrackSideCId)->yLocal();
245 sideC_diffX = sideC_predictX - sideC_trackX;
246 sideC_diffY = sideC_predictY - sideC_trackY;
269 if(passRCutA && passRCutC && passXYCutA && passXYCutC) pass =
true;
◆ initialize()
StatusCode TrigAFPDijetComboHypoTool::initialize |
( |
| ) |
|
|
overridevirtual |
Definition at line 30 of file TrigAFPDijetComboHypoTool.cxx.
31 ATH_MSG_INFO(
"Initialization. The correct configuration of this algorithm "
32 <<
"requires jets ordered in increasing energy");
70 return StatusCode::SUCCESS;
◆ legDecisionId()
Retrieves this ComboHypoTool's chain's decision ID for a given leg.
Only populated for chains with more than one leg. For chains with one leg, use decisionId()
Definition at line 60 of file ComboHypoToolBase.h.
◆ legDecisionIds()
Retrieves this ComboHypoTool's chain's decision IDs for all legs.
Only populated for chains with more than one leg. For chains with one leg, use decisionId()
Definition at line 66 of file ComboHypoToolBase.h.
◆ legMultiplicity()
const std::vector<int>& ComboHypoToolBase::legMultiplicity |
( |
| ) |
const |
|
inlineinherited |
Gets the number of legs and the multiplicity required on each leg.
Definition at line 54 of file ComboHypoToolBase.h.
◆ printDebugInformation()
Print the output of the tool, after having removed failed Decision Objects.
Restricted to the ComboHypoTool's chain's legs.
Definition at line 264 of file ComboHypoToolBase.cxx.
266 for (
const auto& [
id, ELV] : passingLegs) {
270 for (
const auto&
EL : ELV) {
275 return StatusCode::SUCCESS;
◆ selectLegs()
Creates the per-leg vectors of Decision objects starting from the initial LegDecision map, storing only those concerning this HypoTool's chain Pack the Decision objects in std::pair<DecisionID, ElementLink<Decision>> so the derived class' executeAlg function knows which leg each object is on.
Definition at line 172 of file ComboHypoToolBase.cxx.
189 std::vector<Combo::LegDecision> decisionObjectsOnLeg;
192 const Combo::LegDecisionsMap::const_iterator
it = IDCombMap.find(legIdentifier.
numeric());
194 if (
it != IDCombMap.end()) {
196 decisionObjectsOnLeg.emplace_back(legIdentifier,
el);
200 legDecisions.push_back(std::move(decisionObjectsOnLeg));
206 for (
const auto&
leg : legDecisions) {
208 for (
const auto& dEL :
leg) {
213 return StatusCode::SUCCESS;
◆ setLegMultiplicity()
Sets the number of legs and the multiplicity required on each leg.
This should be called when the Tool is retrieved by its parent ComboHypo alg. This also sets the leg Decision IDs at the same time param[in] multiplicityRequiredMap: Mapping of chains to required multiplicity per leg.
Definition at line 16 of file ComboHypoToolBase.cxx.
18 const Combo::MultiplicityReqMap::const_iterator
it = multiplicityRequiredMap.find(nameOfToolsChain);
20 if (
it == multiplicityRequiredMap.end()) {
21 ATH_MSG_ERROR(
"ComboHypoTool for " <<
m_decisionId <<
" could not find its required multiplcity data in the map supplied by its parent alg.");
22 return StatusCode::FAILURE;
27 ATH_MSG_ERROR(
"ComboHypoTool for " <<
m_decisionId <<
" was listed in the supplied multiplicityRequiredMap, but data was not supplied for any legs.");
28 return StatusCode::FAILURE;
35 return StatusCode::FAILURE;
45 return StatusCode::SUCCESS;
◆ updateLegDecisionsMap()
For when the tool accepts some/all combinations.
Remove Decision Objects from legs of this HypoTool's chain which participated in NONE of combinations which were flagged as accepting the event.
Definition at line 216 of file ComboHypoToolBase.cxx.
219 for (
const std::vector<Combo::LegDecision>& comb : passingComb) {
221 for (
const auto& [
id,
EL] : comb) {
228 for (
auto&
it : passingLegs) {
233 std::vector<ElementLink<DecisionContainer>> updatedDecisionObjectsOnLeg;
236 for (
const std::vector<Combo::LegDecision>& comb : passingComb) {
237 for (
const auto& [
id,
EL] : comb) {
239 if (
id == legId and
std::find(updatedDecisionObjectsOnLeg.begin(), updatedDecisionObjectsOnLeg.end(),
EL) == updatedDecisionObjectsOnLeg.end()) {
241 updatedDecisionObjectsOnLeg.push_back(
EL);
248 it.second = updatedDecisionObjectsOnLeg;
◆ m_AFPtrackCollectionReadKey
◆ m_alignmentCorrection_nearA
Gaudi::Property<float> TrigAFPDijetComboHypoTool::m_alignmentCorrection_nearA {this,"alignmentCorrection_nearA",0.0,"Shift due to alignment in x for protons in near station A"} |
|
private |
◆ m_alignmentCorrection_nearC
Gaudi::Property<float> TrigAFPDijetComboHypoTool::m_alignmentCorrection_nearC {this,"alignmentCorrection_nearC",0.0,"Shift due to alignment in x for protons in near station C"} |
|
private |
◆ m_beamEnergy
Gaudi::Property<float> TrigAFPDijetComboHypoTool::m_beamEnergy {this,"beamEnergy",6500.0,"Energy of one beam i.e. half of centre-of-mass energy"} |
|
private |
◆ m_combinationsThresholdBreak
Gaudi::Property<size_t> ComboHypoToolBase::m_combinationsThresholdBreak |
|
protectedinherited |
Initial value:{this, "CombinationsThresholdBreak", 10000,
"Events processing this many combinations will generate a second WARNING message, and the loop over combinations will be terminated at this point."}
Definition at line 109 of file ComboHypoToolBase.h.
◆ m_combinationsThresholdWarn
Gaudi::Property<size_t> ComboHypoToolBase::m_combinationsThresholdWarn |
|
protectedinherited |
Initial value:{this, "CombinationsThresholdWarn", 1000,
"Events processing this many combinations will generate a WARNING message."}
Definition at line 106 of file ComboHypoToolBase.h.
◆ m_decisionId
◆ m_enableOverride
Gaudi::Property<bool> ComboHypoToolBase::m_enableOverride |
|
protectedinherited |
Initial value:{this, "EnableOverride", false,
"Stops processing combinations as soon as a valid combination is found in OR mode, or as soon as an invalid combination is found in AND mode. This is to save CPU."}
Definition at line 115 of file ComboHypoToolBase.h.
◆ m_GeV
const float TrigAFPDijetComboHypoTool::m_GeV = 0.001 |
|
private |
◆ m_legDecisionIds
The DecisionIDs of the individual legs, derived from both m_decisionId and m_legMultiplicities.
Definition at line 123 of file ComboHypoToolBase.h.
◆ m_legMultiplicities
std::vector<int> ComboHypoToolBase::m_legMultiplicities |
|
privateinherited |
The number of legs, and the required multiplicity on each leg.
Definition at line 124 of file ComboHypoToolBase.h.
◆ m_maxProtonDiff_x
Gaudi::Property<float> TrigAFPDijetComboHypoTool::m_maxProtonDiff_x {this,"maxProtonDiff_x",2.5,"Cut on x difference between measured and extrapolated proton"} |
|
private |
◆ m_maxProtonDiff_y
Gaudi::Property<float> TrigAFPDijetComboHypoTool::m_maxProtonDiff_y {this,"maxProtonDiff_y",2.5,"Cut on y difference between measured and extrapolated proton"} |
|
private |
◆ m_maxProtonDist
Gaudi::Property<float> TrigAFPDijetComboHypoTool::m_maxProtonDist {this,"maxProtonDist",2.0,"Cut on distance between measured and extrapolated proton"} |
|
private |
◆ m_modeOR
Gaudi::Property<bool> ComboHypoToolBase::m_modeOR |
|
protectedinherited |
Initial value:{this, "ModeOR", true,
"Accepts based on the logical OR over all calls to executeAlg. If this flag is set to false then the logical AND is required instead."}
Definition at line 112 of file ComboHypoToolBase.h.
◆ m_monTool
◆ m_protonPosShift_x
Gaudi::Property<float> TrigAFPDijetComboHypoTool::m_protonPosShift_x {this,"protonPosShift_x",0.0,"Expected difference in x position between measured and predicted proton"} |
|
private |
◆ m_protonPosShift_y
Gaudi::Property<float> TrigAFPDijetComboHypoTool::m_protonPosShift_y {this,"protonPosShift_y",0.0,"Expected difference in y position between measured and predicted proton"} |
|
private |
◆ m_protonTransportParamFileNameA
Gaudi::Property<std::string> TrigAFPDijetComboHypoTool::m_protonTransportParamFileNameA {this,"protonTransportParamFileName1","final_parameterization_b1.txt","Name of the file with proton transport parameterization for A side"} |
|
private |
Boolean corresponding to the decision to record the event based on the selection being met.
Definition at line 38 of file TrigAFPDijetComboHypoTool.h.
◆ m_protonTransportParamFileNameC
Gaudi::Property<std::string> TrigAFPDijetComboHypoTool::m_protonTransportParamFileNameC {this,"protonTransportParamFileName2","final_parameterization_b2.txt","Name of the file with proton transport parameterization C side"} |
|
private |
◆ m_totalEnergy
float TrigAFPDijetComboHypoTool::m_totalEnergy = 2*m_beamEnergy |
|
private |
◆ m_transportBeamA
◆ m_transportBeamC
Proton transport parameterizaton object used in the proton position prediction for ATLAS C side.
Definition at line 45 of file TrigAFPDijetComboHypoTool.h.
The documentation for this class was generated from the following files:
std::string find(const std::string &s)
return a remapped string
static std::string find_file(const std::string &logical_file_name, const std::string &search_path, SearchType search_type=LocalSearch)
TrigCompositeUtils::DecisionID numeric() const
numeric ID
An ensemble of UniqueCombinationGenerator API description.
#define ATH_MSG_VERBOSE(x)
void add(const UniqueCombinationGenerator &gen)
This module defines the arguments passed from the BATCH driver to the BATCH worker.
void fill(const ToolHandle< GenericMonitoringTool > &tool, T &&... variables)
ElementLink implementation for ROOT usage.
const std::string & featureString()
std::string to_string(const DetectorType &type)
HLT::Identifier createLegName(const HLT::Identifier &chainIdentifier, size_t counter)
Generate the HLT::Identifier which corresponds to a specific leg of a given chain.
#define ATH_MSG_WARNING(x)
std::string name() const
reports human redable name if it is enabled or, empty string
HLT::Identifier getIDFromLeg(const HLT::Identifier &legIdentifier)
Generate the HLT::Identifier which corresponds to the chain name from the leg name.
Declare a monitored scalar variable.
float distance(const Amg::Vector3D &p1, const Amg::Vector3D &p2)
calculates the distance between two point in 3D space