29 {
"IsoCloseByCorr_assocClustEta",
"IsoCloseByCorr_assocClustPhi",
"IsoCloseByCorr_assocClustEnergy",
30 "IsoCloseByCorr_assocClustDecor"};
35 {
"IsoCloseByCorr_assocPflowEta",
"IsoCloseByCorr_assocPflowPhi",
"IsoCloseByCorr_assocPflowEnergy",
36 "IsoCloseByCorr_assocPflowDecor"};
67 ATH_MSG_WARNING(
"The ParticleCaloExtensionTool was not configured. Pleease include it!!!");
77 asg::AsgToolConfig config{
"InDet::InDetTrackSelectionTool/TrackParticleSelectionTool"};
78 ATH_MSG_INFO(
"No TrackSelectionTool provided, so I will create and configure my own, called: " << config.name());
81 ATH_CHECK(config.setProperty(
"maxZ0SinTheta", 3.));
85 ATH_CHECK(config.setProperty(
"minPt", 500.));
86 ATH_CHECK(config.setProperty(
"CutLevel",
"Loose"));
92 ATH_CHECK(config.setProperty(
"WorkingPoint",
"Nonprompt_All_MaxWeight"));
102 return StatusCode::SUCCESS;
106 for (
const std::unique_ptr<IsolationWP>&
W : WPs) {
107 for (
const std::unique_ptr<IsolationCondition>&
C :
W->conditions()) {
108 for (
unsigned int t = 0; t <
C->num_types(); ++t) {
109 const IsoType iso_type =
C->type(t);
110 if (std::find(
types.begin(),
types.end(), iso_type) ==
types.end())
types.emplace_back(iso_type);
111 if (m_isohelpers.find(iso_type) == m_isohelpers.end()) {
118 [](
const IsolationType& t) { return isTrackIso(t) && !isTrackIsoTTVA(t); }) !=
types.end();
126 for (
const std::string& cont : containers) {
144 if (!container)
return;
148 if (iso_types.empty()) {
ATH_MSG_DEBUG(
"No isolation types have been defined for particle type " <<
particleName(particle)); }
150 std::lock_guard<std::mutex> guard{m_isoHelpersMutex};
151 IsoHelperMap::const_iterator Itr = m_isohelpers.find(
type);
153 ATH_MSG_WARNING(
"Failed to properly access the vanilla isolation variable "
155 << particle->pt() *
MeVtoGeV <<
" GeV, eta: " << particle->eta() <<
", phi: " << particle->phi());
162 cache.not_sel_parts.insert(particle);
165 cache.prim_parts.insert(particle);
177 if (!isLRT.isAvailable(*prim) || !isLRT(*prim) ) {
179 cache.tracks.insert(tracks.begin(), tracks.end());
182 cache.clusters.insert(clusters.begin(), clusters.end());
188 cache.prim_parts = {particle};
196 if (!readHandle.
isValid())
return;
197 std::set<const xAOD::IParticle*> tombola{};
199 for (
const TrackPtr& p : cache.tracks) tombola.insert(p);
204 for (
size_t ch = 0; ch < flow->nChargedObjects(); ++ch) {
206 if (tombola.count(obj)) {
207 const std::vector<float>&
weights = flow->chargedObjectWeights();
208 cache.flows.emplace(flow, ch <
weights.size() ?
weights[ch] : 1.f);
211 for (
size_t ne = 0; ne < flow->nOtherObjects(); ++ne) {
213 if (tombola.count(obj)) {
214 const std::vector<float>&
weights = flow->otherObjectWeights();
215 cache.flows.emplace(flow, ne <
weights.size() ?
weights[ne] : 1.f);
216 ATH_MSG_VERBOSE(
"getAssocFlowElements: neflow " << ne <<
", " << obj->type() <<
", " << obj->pt() <<
", " << obj->eta() <<
", " << obj->phi() <<
", " << flow->pt() <<
", " << flow->eta() <<
", " << flow->phi());
222 #ifndef XAOD_ANALYSIS
228 std::unique_ptr<Trk::CaloExtension> caloExtension;
235 const std::vector<Trk::CurvilinearParameters>& intersections = caloExtension->caloLayerIntersections();
236 if(!intersections.empty()){
238 for (
unsigned int i = 0; i < intersections.size(); ++i){
242 avePoint = (1./intersections.size())*avePoint;
243 eta = avePoint.eta();
244 phi = avePoint.phi();
256 const EventContext& ctx,
261 ATH_MSG_ERROR(
"The IsolationCloseByCorrectionTool was not initialised!!!");
278 if (cache.prim_vtx) {
282 <<
" eta: " << particle->eta()
283 <<
" phi: " << particle->phi());
286 ATH_MSG_ERROR(
"Failed to correct the isolation of particle with pt: " << particle->pt() *
MeVtoGeV <<
" GeV"
287 <<
" eta: " << particle->eta()
288 <<
" phi: " << particle->phi());
293 <<
" eta: " << particle->eta()
294 <<
" phi: " << particle->phi());
302 <<
" eta: " << particle->eta()
303 <<
" phi: " << particle->phi());
305 ATH_MSG_ERROR(
"Failed to copy the isolation of particle with pt: " << particle->pt() *
MeVtoGeV <<
" GeV"
306 <<
" eta: " << particle->eta()
307 <<
" phi: " << particle->phi());
315 <<
" eta: " << particle->eta()
316 <<
" phi: " << particle->phi());
318 ATH_MSG_ERROR(
"Failed to copy the isolation of particle with pt: " << particle->pt() *
MeVtoGeV <<
" GeV"
319 <<
" eta: " << particle->eta()
320 <<
" phi: " << particle->phi());
334 std::lock_guard<std::mutex> guard{m_isoHelpersMutex};
340 if (conts.insert(c).second) {
341 for (
const IsoType t : isoTypes) {
342 auto it = m_isohelpers.find (t);
343 if (it != m_isohelpers.end())
344 it->second->lockDecorations(*part->container());
349 c_nc->lockDecoration (dec_assocPhi.auxid());
350 c_nc->lockDecoration (dec_isDecor.auxid());
356 for (
const IsoType t : isoTypes) {
357 auto it = m_isohelpers.find (t);
358 if (it != m_isohelpers.end())
359 it->second->lockDecorations(*parts);
363 c_nc->lockDecoration (dec_assocEta.auxid());
364 c_nc->lockDecoration (dec_assocPhi.auxid());
365 c_nc->lockDecoration (dec_isDecor.auxid());
370 if (!particle)
return dummy;
389 float iso_variable{0.f};
406 ATH_MSG_DEBUG(
"subtractCloseByContribution: Set pt, eta, phi " << par->pt() <<
", " << par->eta() <<
", " << par->phi() <<
" for " <<
toString(iso_type) <<
" to " << iso_variable);
407 std::lock_guard<std::mutex> guard{m_isoHelpersMutex};
419 ATH_MSG_DEBUG(
"copyIsoValuesForPartsNotSelected " << part->type() <<
" " << part->pt() *
MeVtoGeV <<
" GeV" <<
" eta: " << part->eta() <<
" phi: " << part->phi());
426 float iso_variable{0.f};
427 std::lock_guard<std::mutex> guard{m_isoHelpersMutex};
432 ATH_MSG_DEBUG(
"copyIsoValuesForPartsNotSelected: Set pt, eta " << part->pt() <<
", " << part->eta() <<
", " << part->phi() <<
" for " <<
toString(iso_type) <<
" to " << iso_variable);
433 if (!std::isfinite(iso_variable)) {
434 ATH_MSG_WARNING(
"Copying non-finite " <<
toString(iso_type) <<
" = " << iso_variable <<
" of particle with pt: " << part->pt() *
MeVtoGeV <<
" GeV eta: " << part->eta() <<
" phi: " << part->phi());
446 const std::vector<IsolationType>&
types,
450 ATH_MSG_ERROR(
"The IsolationCloseByCorrectionTool was not initialised!!!");
455 std::lock_guard<std::mutex> guard{m_isoHelpersMutex};
457 IsoHelperMap::const_iterator Itr = m_isohelpers.find(t);
458 if (Itr != m_isohelpers.end()) {
continue; }
462 corrections.assign(
types.size(), 0);
465 const EventContext& ctx = Gaudi::Hive::currentContext();
467 std::vector<float>::iterator
Cone = corrections.begin();
470 std::lock_guard<std::mutex> guard{m_isoHelpersMutex};
471 IsoHelperMap::const_iterator Itr = m_isohelpers.find(iso_type);
508 if (mu->muonType() != xAOD::Muon::MuonType::SiliconAssociatedForwardMuon)
509 to_return.emplace(mu->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle));
512 to_return.emplace(trk);
518 << trk->pt() *
MeVtoGeV <<
" GeV, eta: " << trk->eta() <<
", phi: " << trk->phi());
519 to_return.emplace(trk);
527 for (
const TrackPtr trk : assoc_tracks) {
550 for (
size_t calo = 0; calo < egamm->
nCaloClusters(); ++calo) {
552 if (!clust)
continue;
555 if (cluster && std::abs(cluster->eta()) < 7. && cluster->e() >
MinClusterEnergy) {
556 clusters.emplace(cluster);
557 cache.eg_associated_clusters.insert(cluster);
558 ATH_MSG_VERBOSE(
"getAssociatedClusters: " <<
P->type() <<
" has topo cluster with pt: " << cluster->pt() *
MeVtoGeV <<
" GeV, eta: "
559 << cluster->eta() <<
", phi: " << cluster->phi());
563 if (clusters.size())
return clusters;
567 if (!topoClusters.
isValid())
return clusters;
572 bool foundMuonTopo =
false;
575 << cl->eta() <<
", phi: " << cl->phi());
578 if (cluster && std::abs(cluster->eta()) < 7. && cluster->e() >
MinClusterEnergy) {
580 if (!cache.eg_associated_clusters.contains(cluster)) {
581 clusters.emplace(cluster);
582 foundMuonTopo =
true;
583 ATH_MSG_VERBOSE(
"getAssociatedClusters: muon has topo cluster with pt: " << cluster->pt() *
MeVtoGeV <<
" GeV, eta: "
584 << cluster->eta() <<
", phi: " << cluster->phi());
587 ATH_MSG_VERBOSE(
"getAssociatedClusters: muon topo cluster already associated with an EG objet - cluster with pt: "
588 << cluster->pt() *
MeVtoGeV <<
" GeV, eta: " << cluster->eta() <<
", phi: " << cluster->phi());
593 if (!foundMuonTopo) {
602 ATH_MSG_VERBOSE(
"getAssociatedClusters: tp extrapolated - tpEtaAtCalo " << tpEtaAtCalo <<
", tpPhiAtCalo " << tpPhiAtCalo);
604 if (cluster && std::abs(cluster->eta()) < 7. && cluster->e() >
MinClusterEnergy &&
606 clusters.emplace(cluster);
607 ATH_MSG_VERBOSE(
"getAssociatedClusters: for mu trkPart save clus " <<
" with pt: " << cluster->pt() *
MeVtoGeV <<
" GeV, eta: " << cluster->eta() <<
", phi: " << cluster->phi() <<
", tpEtaAtCalo " << tpEtaAtCalo <<
", tpPhiAtCalo " << tpPhiAtCalo);
619 if (!
P)
return false;
631 std::lock_guard<std::mutex> guard{m_isoHelpersMutex};
632 IsoHelperMap::const_iterator Itr = m_isohelpers.find(
type);
633 if (Itr == m_isohelpers.end() || Itr->second->getOriginalIsolation(par, isoValue) ==
CorrectionCode::Error) {
636 }
else if (cache.tracks.empty())
645 <<
", phi: " << par->phi() <<
" before correction: " << isoValue *
MeVtoGeV <<
" GeV. "
646 << ToExclude.size() <<
" tracks will be excluded.");
648 for (
const TrackPtr& poluting_trk : cache.tracks) {
654 if (
overlap(Ref, poluting_trk, MaxDR) && !ToExclude.count(poluting_trk)) {
656 << poluting_trk->
pt() *
MeVtoGeV <<
" GeV, eta: " << poluting_trk->
eta() <<
", phi: " << poluting_trk->
phi()
657 <<
" with dR: " << std::sqrt(
deltaR2(Ref, poluting_trk)) <<
" from the isolation cone " <<
toString(
type)
658 <<
" " << (isoValue *
MeVtoGeV) <<
" GeV.");
659 isoValue -= poluting_trk->
pt();
662 isoValue = std::max(0.f, isoValue);
664 <<
", phi: " << par->phi() <<
" after correction: " << isoValue *
MeVtoGeV <<
" GeV");
669 float& isoValue)
const {
675 ATH_MSG_ERROR(
"getCloseByCorrectionPflowIso() -- Could not retrieve the isolation variable.");
679 if (isoValue <= 0.) {
680 ATH_MSG_DEBUG(
"Pflow varible is already sufficiently isolated ");
684 float ref_eta{0.f}, ref_phi{0.f};
689 << primary->pt() *
MeVtoGeV <<
" GeV, eta: " << primary->eta()
690 <<
", phi: " << primary->phi() <<
" before correction: " << isoValue *
MeVtoGeV <<
" GeV. ");
693 ATH_MSG_VERBOSE(
"Loop over pflow element: " << flow->pt() <<
" GeV, eta: " << flow->eta() <<
" phi: " << flow->phi());
700 if (assoc_coll.count(flow)) {
701 ATH_MSG_VERBOSE(
"Flow element is directly associated with the object");
705 ATH_MSG_VERBOSE(
"Found overlapping pflow element: " << flow->pt() <<
" GeV, eta: " << flow->eta()
706 <<
" phi: " << flow->phi() <<
" dR: " << dR);
707 isoValue -= flow->pt() * flow.weight;
711 << primary->pt() *
MeVtoGeV <<
" GeV, eta: " << primary->eta()
712 <<
", phi: " << primary->phi() <<
" after correction: " << isoValue *
MeVtoGeV <<
" GeV. ");
719 if (others == primary)
continue;
720 if (!acc_isDecor.
isAvailable(*others) || !acc_isDecor(*others)) {
721 ATH_MSG_ERROR(
"The variable energy averaged pflow decorations are not available for "<<
particleName(others)<<
". Please check");
724 const float other_eta = acc_eta(*others);
725 const float other_phi = acc_phi(*others);
727 if (dR > coneDR)
continue;
729 isoValue -= acc_ene(*others);
735 isoValue = std::max(0.f, isoValue);
741 float& isoValue)
const {
748 std::lock_guard<std::mutex> guard{m_isoHelpersMutex};
755 if (isoValue <= 0.) {
756 ATH_MSG_DEBUG(
"Topo et cone variable is already sufficiently isolated");
759 float ref_eta{0.f}, ref_phi{0.f};
766 << primary->pt() *
MeVtoGeV <<
" GeV, eta: " << primary->eta()
767 <<
", phi: " << primary->phi() <<
" before correction: " << isoValue *
MeVtoGeV <<
" GeV. ");
771 ATH_MSG_VERBOSE(
"getCloseByCorrectionTopoIso: Loop over cluster: " << calo->
pt() *
MeVtoGeV <<
" GeV, eta: " << calo->
eta() <<
" phi: " << calo->
phi() <<
" dR: " << dR);
772 if (dR > MaxDR)
continue;
774 if (assoc.count(calo)) {
775 ATH_MSG_VERBOSE(
"getCloseByCorrectionTopoIso: skip due to assoc " << assoc.count(calo));
784 <<
" phi: " << calo->
phi() <<
" dR: " << dR);
788 << primary->pt() *
MeVtoGeV <<
" GeV, eta: " << primary->eta()
789 <<
", phi: " << primary->phi() <<
" after correction: " << isoValue *
MeVtoGeV <<
" GeV. ");
796 if (others == primary)
continue;
797 if (!acc_isDecor.
isAvailable(*others) || !acc_isDecor(*others)) {
801 const float other_eta = acc_eta(*others);
802 const float other_phi = acc_phi(*others);
804 if (dR > MaxDR)
continue;
806 isoValue -= acc_ene(*others);
809 isoValue = std::max(0.f, isoValue);
826 }
else if (acc_isDecor.
isAvailable(*par) && acc_isDecor(*par)) {
827 eta = acc_assocEta(*par);
828 phi = acc_assocPhi(*par);
830 float assoc_ene{0.f};
835 dec_assocEta(*par) =
eta;
836 dec_assocPhi(*par) =
phi;
837 dec_isDecor(*par) =
true;
841 float&
phi,
float& energy)
const {
844 if (flowCollection.empty()) {
845 phi = particle->phi();
846 eta = particle->eta();
850 const float flow_energy = ele->e() * ele.weight;
852 phi += ele->phi() * flow_energy;
853 eta += ele->eta() * flow_energy;
854 energy += flow_energy;
857 phi = particle->phi();
858 eta = particle->eta();
865 phi = particle->phi();
866 eta = particle->eta();
871 if (!cluster)
return;
872 energy = cluster->
e();
875 float etaT{0.f}, phiT{0.f}, dphiT{0.f};
877 for (
unsigned int i = 0; i < CaloSampling::Unknown; ++i) {
889 if (!nSample)
return;
890 ATH_MSG_DEBUG(
"Eta, phi before sampling: " <<
eta <<
", " <<
phi <<
" and after sampling: " << etaT / nSample <<
", "
893 eta = etaT / nSample;
895 << mu->eta() <<
", phi: " << mu->phi() <<
" energy, eta, phi " << energy <<
", " <<
eta <<
", " <<
phi
896 <<
", et " << energy * mu->pt() / mu->e());
901 for (
unsigned int cl = 0; cl < egamm->
nCaloClusters(); ++cl) {
904 ATH_MSG_DEBUG(
"Cluster " << cl <<
" is not defined " << egamm);
909 if (!cluster)
continue;
913 eta += cluster->eta() * clus_e;
914 phi += cluster->phi() * clus_e;
917 << cluster->eta() <<
", phi: " << cluster->phi());
924 << egamm->
eta() <<
", phi: " << egamm->
phi() <<
" energy, eta, phi " << energy <<
", " <<
eta <<
", " <<
phi );
926 ATH_MSG_DEBUG(
"Average energy from the clusters is too low " << energy <<
" copy particle properties");
937 if (iso_types.empty()) {
940 ATH_MSG_WARNING(
"Could not cast particle for acceptCorrected. Will return false.");
943 info.addCut(
"castCut",
"whether we managed to cast to a known type");
954 strPar.
eta =
x.eta();
955 strPar.
type =
x.type();
956 std::vector<float> corrections;
958 ATH_MSG_WARNING(
"Could not calculate the corrections. acceptCorrected(x) is done without the corrections.");
962 for (
unsigned int i = 0; i < iso_types.size(); ++i) {
966 float old = (*acc)(
x);
967 ATH_MSG_DEBUG(
"Correcting " <<
toString(iso_types[i]) <<
" from " << old <<
" to " << corrections[i]);
976 if (!Verticies.
isValid() || !Verticies->size()) {
996 if (MiniIso < ConeDR)
return MiniIso;
1021 const xAOD::TrackParticle* idTrk =
muon->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle);
1022 return idTrk ? idTrk :
muon->trackParticle(xAOD::Muon::TrackParticleType::Primary);
1037 if (AvgCalo || (
P->type() != P1->
type() &&
1039 float phi1{0.f},
eta1{0.f}, eta2{0.f}, phi2{0.f};
1045 float dEta =
P->eta() - P1->
eta();
1046 return dEta * dEta + dPhi * dPhi;
1052 std::lock_guard<std::mutex> guard{m_isoHelpersMutex};
1053 IsoHelperMap::const_iterator itr = m_isohelpers.find(isoVariable);
1055 if (itr == m_isohelpers.end() || itr->second->getOriginalIsolation(particle, isovalue) ==
CorrectionCode::Error) {
1056 ATH_MSG_ERROR(
"Failed to retrieve the original isolation cone ");
1069 Et = Et - cluster->
eSample(xAOD::CaloCluster::CaloSample::TileGap3) /
1071 }
catch (...) { Et = cluster->
p4().Et(); }
1073 return std::max(Et, 0.f);
1096 return ttvaFlavours.count(flavour);
1104 return ttvaFlavours.count(flavour);
1118 if (Pt1000_Flavours.count(flavour))
return 1000;
Scalar eta() const
pseudorapidity method
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_DEBUG(x,...)
#define ATH_MSG_ERROR(x,...)
#define ATH_MSG_WARNING(x,...)
#define ATH_MSG_VERBOSE(x,...)
#define ATH_MSG_INFO(x,...)
Define macros for attributes used to control the static checker.
Return value from object correction CP tools.
@ Error
Some error happened during the object correction.
@ OutOfValidityRange
Input object is out of validity range.
@ Ok
The correction was done successfully.
bool empty() const noexcept
Returns true if the collection is empty.
Helper class to provide type-safe access to aux data.
Manage lookup of vectors of auxiliary data.
void lockDecoration(SG::auxid_t auxid)
Explicitly lock a decoration.
bool isAvailable(const ELT &e) const
Test to see if this variable exists in the store.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
virtual double pt() const
The transverse momentum ( ) of the particle (negative for negative-energy clusters).
float phiSample(const CaloSample sampling) const
Retrieve barycenter in a given sample.
virtual double eta() const
The pseudorapidity ( ) of the particle.
virtual double e() const
The total energy of the particle.
float eSample(const CaloSample sampling) const
virtual double phi() const
The azimuthal angle ( ) of the particle.
float etaSample(const CaloSample sampling) const
Retrieve barycenter in a given sample.
virtual FourMom_t p4() const
The full 4-momentum of the particle.
bool hasSampling(const CaloSample s) const
Checks if certain smapling contributes to cluster.
virtual double pt() const override final
The transverse momentum ( ) of the particle.
virtual double e() const override
The total energy of the particle.
size_t nCaloClusters() const
Return the number of xAOD::CaloClusters that define the electron candidate.
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
virtual double phi() const override final
The azimuthal angle ( ) of the particle.
const xAOD::CaloCluster * caloCluster(size_t index=0) const
Pointer to the xAOD::CaloCluster/s that define the electron candidate.
Class providing the definition of the 4-vector interface.
virtual double eta() const =0
The pseudorapidity ( ) of the particle.
virtual Type::ObjectType type() const =0
The type of the object as a simple enumeration.
virtual double phi() const override final
The azimuthal angle ( ) of the particle (has range to .).
virtual double pt() const override final
The transverse momentum ( ) of the particle.
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
Eigen::Matrix< double, 3, 1 > Vector3D
Select isolated Photons, Electrons and Muons.
std::vector< IsoType > IsoVector
SG::ConstAccessor< float > FloatAccessor
xAOD::Iso::IsolationType IsoType
SG::Decorator< float > FloatDecorator
SG::ConstAccessor< char > CharAccessor
std::set< FlowElementPtr > PflowSet
std::set< TrackPtr > TrackSet
constexpr float MinClusterEnergy
IsolationCloseByCorrectionTool::caloDecorNames caloDecorNames
std::unordered_set< const SG::AuxVectorData * > UnorderedContainerSet
SG::Decorator< char > CharDecorator
std::set< CaloClusterPtr > ClusterSet
SortedObjPtr< xAOD::CaloCluster > CaloClusterPtr
SortedObjPtr< xAOD::TrackParticle > TrackPtr
@ VIEW_ELEMENTS
this data object is a view, it does not own its elmts
ObjectType
Type of objects that have a representation in the xAOD EDM.
@ TrackParticle
The object is a charged track particle.
@ Photon
The object is a photon.
@ CaloCluster
The object is a calorimeter cluster.
@ Muon
The object is a muon.
@ Electron
The object is an electron.
std::set< const xAOD::TrackParticle * > getTrackParticles(const xAOD::Egamma *eg, bool useBremAssoc=true, bool allParticles=true)
Return a list of all or only the best TrackParticle associated to the object.
std::vector< const xAOD::CaloCluster * > getAssociatedTopoClusters(const xAOD::CaloCluster *cluster)
Return a vector of all the topo clusters associated with the egamma cluster.
Namespace holding the IsolationType enumeration.
IsolationFlavour isolationFlavour(IsolationType type)
convert Isolation Type into Isolation Flavour
IsolationType
Overall enumeration for isolation types in xAOD files.
IsolationFlavour
Enumeration for different ways of calculating isolation in xAOD files.
@ topoetcone
Topo-cluster ET-sum.
@ ptvarcone_Nonprompt_All_MaxWeightTTVALooseCone_pt1000
@ ptcone_Nonprompt_All_MaxWeightTTVALooseCone_pt1000
@ ptvarcone_Nonprompt_All_MaxWeightTTVA_pt500
ptvarcone for high mu
@ neflowisol
neutral eflow
@ ptvarcone
mini isolation
@ ptvarcone_Nonprompt_All_MaxWeightTTVALooseCone_pt500
@ ptcone_Nonprompt_All_MaxWeightTTVA_pt1000
@ ptcone_Nonprompt_All_MaxWeightTTVALooseCone_pt500
ptcone for high mu
@ ptvarcone_Nonprompt_All_MaxWeightTTVA_pt1000
@ ptcone_Nonprompt_All_MaxWeightTTVA_pt500
ptcone for high mu
float coneSize(IsolationConeSize type)
convert Isolation Size into cone size
double deltaPhi(double phiA, double phiB)
delta Phi in range [-pi,pi[
double deltaR(double rapidity1, double phi1, double rapidity2, double phi2)
from bare bare rapidity,phi
double deltaR2(double rapidity1, double phi1, double rapidity2, double phi2)
from bare rapidity,phi
PhotonContainer_v1 PhotonContainer
Definition of the current "photon container version".
const SG::Accessor< float > * getIsolationAccessor(Iso::IsolationType type)
Get the Accessor object for a given isolation type.
ElectronContainer_v1 ElectronContainer
Definition of the current "electron container version".
setEt setPhi setE277 setWeta2 eta1
CaloCluster_v1 CaloCluster
Define the latest version of the calorimeter cluster class.
FlowElement_v1 FlowElement
Definition of the current "pfo version".
TrackParticle_v1 TrackParticle
Reference the current persistent version:
const IParticle * getOriginalObject(const IParticle ©)
This function can be used to conveniently get a pointer back to the original object from which a copy...
static const SG::Accessor< std::vector< std::string > > names("thrNames")
Accessor for the names of the passed thresholds.
Vertex_v1 Vertex
Define the latest version of the vertex class.
Egamma_v1 Egamma
Definition of the current "egamma version".
static const EventInfo_v1::Accessor< std::vector< std::string > > types("streamTagTypes")
Muon_v1 Muon
Reference the current persistent version:
setBGCode setTAP setLVL2ErrorBits bool
MuonContainer_v1 MuonContainer
Definition of the current "Muon container version".
std::string toString(const SG::AuxElement &obj)
DataVector< IParticle > IParticleContainer
Simple convenience declaration of IParticleContainer.
static const SG::Accessor< ElementLink< IParticleContainer > > acc("originalObjectLink")
Object used for setting/getting the dynamic decoration in question.
For the flow elements we need a special derivate which also contains the weights.
std::vector< float > isolationValues
xAOD::Type::ObjectType type