 |
ATLAS Offline Software
|
#include <DiTauOnnxDiscriminantTool.h>
|
| DiTauOnnxDiscriminantTool (const std::string &type, const std::string &name, const IInterface *parent) |
|
virtual | ~DiTauOnnxDiscriminantTool () |
|
virtual StatusCode | initialize () override |
| Tool initializer. More...
|
|
virtual StatusCode | finalize () override |
| Finalizer. More...
|
|
virtual StatusCode | execute (DiTauCandidateData *data, const EventContext &ctx) const override |
| Execute - called for each Ditau candidate. More...
|
|
virtual StatusCode | executeObj (xAOD::DiTauJet &xDiTau, const EventContext &ctx) const override |
| Execute - called for each Ditau jet. More...
|
|
float | GetDiTauObjOnnxScore (const xAOD::DiTauJet &ditau) const |
|
virtual StatusCode | eventInitialize (DiTauCandidateData *data) |
| Event initializer - called at the beginning of each event. More...
|
|
template<class T > |
bool | retrieveTool (T &tool) |
| Convenience functions to handle storegate objects. More...
|
|
ServiceHandle< StoreGateSvc > & | evtStore () |
| The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc . More...
|
|
const ServiceHandle< StoreGateSvc > & | evtStore () const |
| The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc . More...
|
|
const ServiceHandle< StoreGateSvc > & | detStore () const |
| The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc . More...
|
|
virtual StatusCode | sysInitialize () override |
| Perform system initialization for an algorithm. More...
|
|
virtual StatusCode | sysStart () override |
| Handle START transition. More...
|
|
virtual std::vector< Gaudi::DataHandle * > | inputHandles () const override |
| Return this algorithm's input handles. More...
|
|
virtual std::vector< Gaudi::DataHandle * > | outputHandles () const override |
| Return this algorithm's output handles. More...
|
|
Gaudi::Details::PropertyBase & | declareProperty (Gaudi::Property< T, V, H > &t) |
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleKey &hndl, const std::string &doc, const SG::VarHandleKeyType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleBase &hndl, const std::string &doc, const SG::VarHandleType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleKeyArray &hndArr, const std::string &doc, const SG::VarHandleKeyArrayType &) |
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, T &property, const std::string &doc, const SG::NotHandleType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, T &property, const std::string &doc="none") |
| Declare a new Gaudi property. More...
|
|
void | updateVHKA (Gaudi::Details::PropertyBase &) |
|
MsgStream & | msg () const |
|
MsgStream & | msg (const MSG::Level lvl) const |
|
bool | msgLvl (const MSG::Level lvl) const |
|
|
int | n_subjets (const xAOD::DiTauJet &xDiTau) const |
|
float | ditau_pt (const xAOD::DiTauJet &xDiTau) const |
|
float | f_core (const xAOD::DiTauJet &xDiTau, int iSubjet) const |
|
float | f_subjet (const xAOD::DiTauJet &xDiTau, int iSubjet) const |
|
float | f_subjets (const xAOD::DiTauJet &xDiTau) const |
|
float | R_max (const xAOD::DiTauJet &xDiTau, const DitauTrackingInfo &ditauInfo, int iSubjet) const |
|
int | n_track (const xAOD::DiTauJet &xDiTau) const |
|
float | R_isotrack (const xAOD::DiTauJet &xDiTau, const DitauTrackingInfo &ditauInfo) const |
|
float | R_tracks (const xAOD::DiTauJet &xDiTau, const DitauTrackingInfo &ditauInfo, int iSubjet) const |
|
float | mass_core (const xAOD::DiTauJet &xDiTau, const DitauTrackingInfo &ditauInfo, int iSubjet) const |
|
float | mass_tracks (const xAOD::DiTauJet &xDiTau, const DitauTrackingInfo &ditauInfo, int iSubjet) const |
|
float | d0_leadtrack (const xAOD::DiTauJet &xDiTau, const DitauTrackingInfo &ditauInfo, int iSubjet) const |
|
float | f_isotracks (const xAOD::DiTauJet &xDiTau, const DitauTrackingInfo &ditauInfo) const |
|
StatusCode | getTrackingInfo (const xAOD::DiTauJet &xDiTau, DitauTrackingInfo &trackingInfo) const |
|
Ort::Value | create_tensor (std::vector< float > &data, const std::vector< int64_t > &shape) const |
|
InferenceOutput | run_inference (OnnxInputs &inputs) const |
|
std::vector< float > | flatten (const std::vector< std::vector< float >> &vec_2d) const |
|
std::vector< float > | extract_points (const std::vector< std::vector< float >> &track_features) const |
|
std::vector< float > | create_mask (const std::vector< std::vector< float >> &track_features) const |
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &) |
| specialization for handling Gaudi::Property<SG::VarHandleKey> More...
|
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyArrayType &) |
| specialization for handling Gaudi::Property<SG::VarHandleKeyArray> More...
|
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleType &) |
| specialization for handling Gaudi::Property<SG::VarHandleBase> More...
|
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T, V, H > &t, const SG::NotHandleType &) |
| specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray> More...
|
|
◆ StoreGateSvc_t
◆ DiTauOnnxDiscriminantTool()
DiTauOnnxDiscriminantTool::DiTauOnnxDiscriminantTool |
( |
const std::string & |
type, |
|
|
const std::string & |
name, |
|
|
const IInterface * |
parent |
|
) |
| |
◆ ~DiTauOnnxDiscriminantTool()
DiTauOnnxDiscriminantTool::~DiTauOnnxDiscriminantTool |
( |
| ) |
|
|
virtualdefault |
◆ create_mask()
std::vector< float > DiTauOnnxDiscriminantTool::create_mask |
( |
const std::vector< std::vector< float >> & |
track_features | ) |
const |
|
private |
◆ create_tensor()
Ort::Value DiTauOnnxDiscriminantTool::create_tensor |
( |
std::vector< float > & |
data, |
|
|
const std::vector< int64_t > & |
shape |
|
) |
| const |
|
private |
Definition at line 106 of file src/DiTauOnnxDiscriminantTool.cxx.
107 Ort::MemoryInfo memory_info = Ort::MemoryInfo::CreateCpu(OrtArenaAllocator, OrtMemTypeDefault);
108 return Ort::Value::CreateTensor<float>(memory_info,
data.data(),
data.size(),shape.data(), shape.size());
◆ d0_leadtrack()
Definition at line 336 of file src/DiTauOnnxDiscriminantTool.cxx.
337 SubjetTrackingInfo subjetInfo = ditauInfo.vSubjetInfo.at(iSubjet);
338 if (!subjetInfo.leadTrack) {
341 return subjetInfo.leadTrack->d0();
◆ declareGaudiProperty() [1/4]
specialization for handling Gaudi::Property<SG::VarHandleKeyArray>
Definition at line 170 of file AthCommonDataStore.h.
175 hndl.documentation());
◆ declareGaudiProperty() [2/4]
specialization for handling Gaudi::Property<SG::VarHandleKey>
Definition at line 156 of file AthCommonDataStore.h.
161 hndl.documentation());
◆ declareGaudiProperty() [3/4]
specialization for handling Gaudi::Property<SG::VarHandleBase>
Definition at line 184 of file AthCommonDataStore.h.
189 hndl.documentation());
◆ declareGaudiProperty() [4/4]
◆ declareProperty() [1/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
hndl | Object holding the property value. |
doc | Documentation string for the property. |
This is the version for types that derive from SG::VarHandleBase
. The property value object is put on the input and output lists as appropriate; then we forward to the base class.
Definition at line 245 of file AthCommonDataStore.h.
250 this->declare(hndl.
vhKey());
251 hndl.
vhKey().setOwner(
this);
253 return PBASE::declareProperty(
name,hndl,
doc);
◆ declareProperty() [2/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
hndl | Object holding the property value. |
doc | Documentation string for the property. |
This is the version for types that derive from SG::VarHandleKey
. The property value object is put on the input and output lists as appropriate; then we forward to the base class.
Definition at line 221 of file AthCommonDataStore.h.
229 return PBASE::declareProperty(
name,hndl,
doc);
◆ declareProperty() [3/6]
◆ declareProperty() [4/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
property | Object holding the property value. |
doc | Documentation string for the property. |
This is the generic version, for types that do not derive from SG::VarHandleKey
. It just forwards to the base class version of declareProperty
.
Definition at line 333 of file AthCommonDataStore.h.
338 return PBASE::declareProperty(
name, property,
doc);
◆ declareProperty() [5/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
property | Object holding the property value. |
doc | Documentation string for the property. |
This dispatches to either the generic declareProperty
or the one for VarHandle/Key/KeyArray.
Definition at line 352 of file AthCommonDataStore.h.
◆ declareProperty() [6/6]
◆ detStore()
◆ ditau_pt()
◆ eventInitialize()
Event initializer - called at the beginning of each event.
Definition at line 32 of file DiTauToolBase.cxx.
34 return StatusCode::SUCCESS;
◆ evtStore() [1/2]
◆ evtStore() [2/2]
◆ execute()
◆ executeObj()
StatusCode DiTauOnnxDiscriminantTool::executeObj |
( |
xAOD::DiTauJet & |
xDiTau, |
|
|
const EventContext & |
ctx |
|
) |
| const |
|
overridevirtual |
◆ extract_points()
std::vector< float > DiTauOnnxDiscriminantTool::extract_points |
( |
const std::vector< std::vector< float >> & |
track_features | ) |
const |
|
private |
◆ extraDeps_update_handler()
Add StoreName to extra input/output deps as needed.
use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given
◆ f_core()
◆ f_isotracks()
◆ f_subjet()
◆ f_subjets()
◆ finalize()
StatusCode DiTauOnnxDiscriminantTool::finalize |
( |
| ) |
|
|
overridevirtual |
◆ flatten()
std::vector< float > DiTauOnnxDiscriminantTool::flatten |
( |
const std::vector< std::vector< float >> & |
vec_2d | ) |
const |
|
private |
◆ GetDiTauObjOnnxScore()
Definition at line 140 of file src/DiTauOnnxDiscriminantTool.cxx.
147 DitauTrackingInfo ditauTrackingInfo;
159 std::vector<float> jet_vars = {
160 R_max(ditau, ditauTrackingInfo, 0),
161 R_max(ditau, ditauTrackingInfo, 1),
162 R_tracks(ditau, ditauTrackingInfo, 1),
174 static_cast<float>(
n_track(ditau)),
176 std::vector<int64_t> jet_shape = {1,
static_cast<int64_t
>(jet_vars.size())};
179 std::vector<std::vector<float>> track_features(
m_maxTracks, std::vector<float>(11, 0.0
f));
181 float jet_eta = ditau.
eta();
185 for (
size_t i = 0;
i < num_tracks; ++
i) {
187 if (!trackLink.
isValid())
continue;
189 float track_eta = xTrack->
eta();
190 float track_phi = xTrack->
phi();
191 float delta_eta = track_eta - jet_eta;
194 float track_pt =
static_cast<float>(xTrack->
pt());
197 float pt_ratio = track_pt / jet_pt;
198 float pt_ratio_log = (pt_ratio <= 1.0f) ?
std::log(1.0
f - pt_ratio + 1
e-8
f) : 0.0f;
199 float track_charge = xTrack->
charge();
201 track_features[
i] = {
209 static_cast<float>(numberOfInrmstPxlLyrHitsAcc(*xTrack)),
210 static_cast<float>(numberOfPixelHitsAcc(*xTrack)),
211 static_cast<float>(numberOfSCTHitsAcc(*xTrack)),
215 std::vector<int64_t> track_shape = {1,
static_cast<int64_t
>(
m_maxTracks), 11};
222 {1, track_shape[1], 2},
226 std::move(jet_shape),
231 return output.output_1[1];
◆ getTrackingInfo()
Definition at line 356 of file src/DiTauOnnxDiscriminantTool.cxx.
363 if (!trackLinksAcc.isAvailable(xDiTau) || !isoTrackLinksAcc.isAvailable(xDiTau)) {
364 ATH_MSG_WARNING(
"Track " << (!trackLinksAcc.isAvailable(xDiTau) ?
"DiTauJet.trackLinks" :
"DiTauJet.isoTrackLinks") <<
" links not available.");
365 return StatusCode::FAILURE;
369 float Rsubjet = R_subjetAcc(xDiTau);
370 float RCore = R_coreAcc(xDiTau);
372 trackingInfo.nSubjets = nSubjets;
373 trackingInfo.vSubjetInfo.clear();
374 trackingInfo.vIsoTracks.clear();
375 trackingInfo.vTracks.clear();
378 std::vector<ElementLink<xAOD::TrackParticleContainer>> isoTrackLinks = xDiTau.
isoTrackLinks();
379 for (
const auto &trackLink: isoTrackLinks) {
380 if (!trackLink.isValid()) {
385 trackingInfo.vIsoTracks.push_back(xTrack);
387 std::vector<ElementLink<xAOD::TrackParticleContainer>> trackLinks = xDiTau.
trackLinks();
388 for (
const auto &trackLink : trackLinks) {
389 if (!trackLink.isValid()) {
394 trackingInfo.vTracks.push_back(xTrack);
397 for (
int i=0;
i<nSubjets; ++
i){
398 SubjetTrackingInfo subjetTrackingInfo;
399 TLorentzVector subjet_p4 = TLorentzVector();
401 subjetTrackingInfo.subjet_p4 = subjet_p4;
402 trackingInfo.vSubjetInfo.push_back(subjetTrackingInfo);
404 for (
const auto track : trackingInfo.vTracks) {
407 for (
int i=0;
i<nSubjets; ++
i){
408 float dRTrackSubjet = trackingInfo.vSubjetInfo[
i].subjet_p4.DeltaR(
track->p4());
409 if (dRTrackSubjet < Rsubjet && dRTrackSubjet < dRMin){
410 dRMin = dRTrackSubjet;
415 trackingInfo.vSubjetInfo[inSubjet].vTracks.push_back(
track);
419 for (
int i=0;
i<nSubjets; ++
i){
420 float ptLeadTrack = 0;
421 for (
const auto track : trackingInfo.vSubjetInfo[
i].vTracks){
422 if (
track->pt() > ptLeadTrack){
423 ptLeadTrack =
track->pt();
424 trackingInfo.vSubjetInfo[
i].leadTrack =
track;
429 for (
int i=0;
i<nSubjets; ++
i){
430 for (
const auto track : trackingInfo.vSubjetInfo[
i].vTracks){
431 auto subjetTrackingInfo = trackingInfo.vSubjetInfo[
i];
432 if (subjetTrackingInfo.subjet_p4.DeltaR(
track->p4()) < RCore){
433 trackingInfo.vSubjetInfo[
i].vCoreTracks.push_back(
track);
438 for (
const auto track : trackingInfo.vIsoTracks){
442 for (
int i=0;
i<nSubjets; ++
i){
443 float dRTrackSubjet = trackingInfo.vSubjetInfo[
i].subjet_p4.DeltaR(
track->p4());
444 if (dRTrackSubjet > Rsubjet && dRTrackSubjet < RIso && dRTrackSubjet < dRMin){
445 dRMin = dRTrackSubjet;
450 trackingInfo.vSubjetInfo[inSubjet].vIsoTracks.push_back(
track);
453 return StatusCode::SUCCESS;
◆ initialize()
StatusCode DiTauOnnxDiscriminantTool::initialize |
( |
| ) |
|
|
overridevirtual |
Tool initializer.
Reimplemented from DiTauToolBase.
Definition at line 30 of file src/DiTauOnnxDiscriminantTool.cxx.
32 ATH_MSG_INFO(
"Initializing DiTauOnnxDiscriminantTool" );
36 if (model_path.empty()) {
38 return StatusCode::FAILURE;
40 m_ort_env = std::make_unique<Ort::Env>(ORT_LOGGING_LEVEL_WARNING,
"OnnxUtil");
41 Ort::SessionOptions session_options;
42 session_options.SetIntraOpNumThreads(1);
43 session_options.SetGraphOptimizationLevel(GraphOptimizationLevel::ORT_ENABLE_EXTENDED);
44 session_options.DisableCpuMemArena();
46 return StatusCode::SUCCESS;
◆ inputHandles()
Return this algorithm's input handles.
We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.
◆ interfaceID()
const InterfaceID & DiTauToolBase::interfaceID |
( |
| ) |
|
|
staticinherited |
InterfaceID implementation needed for ToolHandle.
Definition at line 9 of file DiTauToolBase.cxx.
10 return DiTauToolBaseID;
◆ mass_core()
Definition at line 310 of file src/DiTauOnnxDiscriminantTool.cxx.
311 TLorentzVector allCoreTracks_p4;
312 SubjetTrackingInfo subjetInfo = ditauInfo.vSubjetInfo.at(iSubjet);
314 allCoreTracks_p4 += xTrack->
p4();
316 float mass = allCoreTracks_p4.M();
◆ mass_tracks()
Definition at line 323 of file src/DiTauOnnxDiscriminantTool.cxx.
324 TLorentzVector allTracks_p4;
325 SubjetTrackingInfo subjetInfo = ditauInfo.vSubjetInfo.at(iSubjet);
327 allTracks_p4 += xTrack->
p4();
329 float mass = allTracks_p4.M();
◆ msg() [1/2]
◆ msg() [2/2]
◆ msgLvl()
◆ n_subjets()
◆ n_track()
◆ outputHandles()
Return this algorithm's output handles.
We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.
◆ R_isotrack()
Definition at line 278 of file src/DiTauOnnxDiscriminantTool.cxx.
282 for (
int i = 0;
i < 2;
i++) {
283 SubjetTrackingInfo subjetInfo = ditauInfo.vSubjetInfo.at(
i);
285 R_sum += subjetInfo.subjet_p4.DeltaR(xTrack->
p4()) * xTrack->
pt();
◆ R_max()
Definition at line 262 of file src/DiTauOnnxDiscriminantTool.cxx.
264 const SubjetTrackingInfo subjetInfo = ditauInfo.vSubjetInfo.at(iSubjet);
267 if (subjetInfo.subjet_p4.DeltaR(xTrack->
p4()) > Rmax) {
268 Rmax = subjetInfo.subjet_p4.DeltaR(xTrack->
p4());
◆ R_tracks()
Definition at line 295 of file src/DiTauOnnxDiscriminantTool.cxx.
299 SubjetTrackingInfo subjetInfo = ditauInfo.vSubjetInfo.at(iSubjet);
301 R_sum += subjetInfo.subjet_p4.DeltaR(xTrack->
p4()) * xTrack->
pt();
◆ renounce()
◆ renounceArray()
◆ retrieveTool()
template<class T >
bool DiTauToolBase::retrieveTool |
( |
T & |
tool | ) |
|
|
inherited |
Convenience functions to handle storegate objects.
Definition at line 59 of file DiTauToolBase.cxx.
60 if (
tool.retrieve().isFailure()) {
◆ run_inference()
Definition at line 111 of file src/DiTauOnnxDiscriminantTool.cxx.
112 std::vector<Ort::Value> input_tensors;
120 std::vector<const char *> input_node_names;
124 std::vector<const char *> output_node_names;
128 auto output_tensors =
m_ort_session->Run(Ort::RunOptions{
nullptr}, input_node_names.data(), input_tensors.data(), input_node_names.size(), output_node_names.data(), output_node_names.size());
131 for (
size_t i = 0;
i < output_tensors.size(); ++
i) {
132 const auto &tensor = output_tensors[
i];
133 const size_t length = tensor.GetTensorTypeAndShapeInfo().GetElementCount();
134 const float *
data = tensor.GetTensorData<
float>();
◆ sysInitialize()
◆ sysStart()
Handle START transition.
We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.
◆ updateVHKA()
◆ m_dDefault
float DiTauOnnxDiscriminantTool::m_dDefault = -1234 |
|
private |
◆ m_detStore
◆ m_evtStore
◆ m_input_node_names
const std::vector<std::string> DiTauOnnxDiscriminantTool::m_input_node_names = {"input_features", "input_points", "input_mask", "input_jet", "input_time"} |
|
private |
◆ m_maxTracks
Gaudi::Property<size_t> DiTauOnnxDiscriminantTool::m_maxTracks {this, "maxTracks", 10} |
|
private |
◆ m_onnxModelPath
Gaudi::Property<std::string> DiTauOnnxDiscriminantTool::m_onnxModelPath {this, "onnxModelPath", "TrigTauRec/00-11-02/dev/boosted_ditau_omni_model.onnx"} |
|
private |
◆ m_ort_env
std::unique_ptr<Ort::Env> DiTauOnnxDiscriminantTool::m_ort_env |
|
private |
◆ m_ort_session
std::unique_ptr<Ort::Session> DiTauOnnxDiscriminantTool::m_ort_session |
|
private |
◆ m_output_node_names
const std::vector<std::string> DiTauOnnxDiscriminantTool::m_output_node_names = {"output_1", "output_2"} |
|
private |
◆ m_varHandleArraysDeclared
◆ m_vhka
The documentation for this class was generated from the following files:
virtual double pt() const override final
The transverse momentum ( ) of the particle.
virtual double pt() const
The transverse momentum ( ) of the particle.
char data[hepevt_bytes_allocation_ATLAS]
float fCore(unsigned int numSubjet) const
float charge() const
Returns the charge.
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
def delta_R(eta1, phi1, eta2, phi2)
float subjetPhi(unsigned int numSubjet) const
StoreGateSvc_t m_evtStore
Pointer to StoreGate (event store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
virtual double eta() const
The pseudorapidity ( ) of the particle.
#define ATH_MSG_VERBOSE(x)
bool isValid() const
Test to see if the link can be dereferenced.
float subjetE(unsigned int numSubjet) const
virtual void setOwner(IDataHandleHolder *o)=0
virtual FourMom_t p4() const override final
The full 4-momentum of the particle.
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
virtual double phi() const
The azimuthal angle ( ) of the particle.
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
Amg::Vector3D transform(Amg::Vector3D &v, Amg::Transform3D &tr)
Transform a point from a Trasformation3D.
StoreGateSvc_t m_detStore
Pointer to StoreGate (detector store by default)
float subjetEta(unsigned int numSubjet) const
virtual void renounce()=0
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
std::vector< std::string > remainder(const std::vector< std::string > &v1, const std::vector< std::string > &v2)
bool pt_log(const xAOD::TauJet &, const xAOD::TauTrack &track, float &out)
std::string PathResolverFindCalibFile(const std::string &logical_file_name)
#define ATH_MSG_WARNING(x)
def delta_phi(phi1, phi2)
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
const TrackParticleLinks_t & isoTrackLinks() const
float subjetPt(unsigned int numSubjet) const
Class describing a TrackParticle.
const TrackParticleLinks_t & trackLinks() const
virtual double phi() const override final
The azimuthal angle ( ) of the particle (has range to .)