ATLAS Offline Software
Loading...
Searching...
No Matches
DerivationFramework::JpsiUpsilonCommon Class Reference

#include <JpsiUpsilonCommon.h>

Collaboration diagram for DerivationFramework::JpsiUpsilonCommon:

Static Public Member Functions

static double getPt (const xAOD::TrackParticle *, const xAOD::TrackParticle *)
static double getPt (const xAOD::TrackParticle *trk1, const xAOD::TrackParticle *trk2, const xAOD::TrackParticle *trk3)
static double getPt (const xAOD::TrackParticle *, const xAOD::TrackParticle *, const xAOD::TrackParticle *, const xAOD::TrackParticle *)
static bool isContainedIn (const xAOD::TrackParticle *, const std::vector< const xAOD::TrackParticle * > &)
static bool isContainedIn (const xAOD::TrackParticle *, const xAOD::MuonContainer *)
template<size_t N>
static bool isContainedIn (const xAOD::TrackParticle *, const std::array< const xAOD::TrackParticle *, N > &)
static bool cutRangeOR (const std::vector< double > &values, double min, double max)
static bool cutRange (double value, double min, double max)
static bool cutAcceptGreaterOR (const std::vector< double > &values, double min)
static bool cutAcceptGreater (double value, double min)
static Analysis::CleanUpVertex ClosestRefPV (xAOD::BPhysHelper &, const xAOD::VertexContainer *, const Analysis::PrimaryVertexRefitter *)
static void RelinkVertexTracks (const std::vector< const xAOD::TrackParticleContainer * > &trkcols, xAOD::Vertex *vtx)
static void RelinkVertexMuons (const std::vector< const xAOD::MuonContainer * > &muoncols, xAOD::Vertex *vtx)

Detailed Description

Definition at line 39 of file JpsiUpsilonCommon.h.

Member Function Documentation

◆ ClosestRefPV()

Analysis::CleanUpVertex Analysis::JpsiUpsilonCommon::ClosestRefPV ( xAOD::BPhysHelper & bHelper,
const xAOD::VertexContainer * importedPVerticesCollection,
const Analysis::PrimaryVertexRefitter * pvRefitter )
static

Definition at line 94 of file JpsiUpsilonCommon.cxx.

96 {
97 const xAOD::Vertex* vtx_closest = nullptr; // vertex closest to bVertex track
98 if(importedPVerticesCollection->empty()) return Analysis::CleanUpVertex(nullptr, false);
99 double dc = 1e10;
100 std::vector<const xAOD::Vertex*> tocleanup;
101 if(pvRefitter) tocleanup.reserve(importedPVerticesCollection->size());
102 bool vertexrefitted = false;
103 for (const xAOD::Vertex* PV : *importedPVerticesCollection) {
104 const xAOD::Vertex* refPV = pvRefitter ? pvRefitter->refitVertex(PV, bHelper.vtx(), false) : nullptr;
105 const xAOD::Vertex* vtx = refPV ? refPV : PV;
106 if(refPV) tocleanup.push_back(refPV);
107 TVector3 posPV(vtx->position().x(),vtx->position().y(),vtx->position().z());
108 auto &helperpos = bHelper.vtx()->position();
109 TVector3 posV(helperpos.x(), helperpos.y(), helperpos.z());
110 TVector3 nV = bHelper.totalP().Unit();
111 TVector3 dposV = posPV-posV;
112 double dposVnV = dposV*nV;
113 double d = std::sqrt(std::abs(dposV.Mag2()-dposVnV*dposVnV));
114 if (d<dc) {
115 dc = d;
116 vtx_closest = vtx;
117 vertexrefitted = (vtx_closest == refPV);
118 }
119 }
120 for(auto ptr : tocleanup){
121 if(ptr != vtx_closest) delete ptr;
122 }
123 return Analysis::CleanUpVertex(vtx_closest, vertexrefitted);
124 }
xAOD::Vertex * refitVertex(const xAOD::Vertex *vertex, const xAOD::Vertex *excludeVertex, bool ReturnCopy=true, int *exitcode=nullptr) const
size_type size() const noexcept
Returns the number of elements in the collection.
bool empty() const noexcept
Returns true if the collection is empty.
const xAOD::Vertex * vtx() const
Getter method for the cached xAOD::Vertex.
TVector3 totalP()
: Returns total 3-momentum calculated from the refitted tracks
const Amg::Vector3D & position() const
Returns the 3-pos.
void * ptr(T *p)
Definition SGImplSvc.cxx:74
Vertex_v1 Vertex
Define the latest version of the vertex class.

◆ cutAcceptGreater()

bool Analysis::JpsiUpsilonCommon::cutAcceptGreater ( double value,
double min )
static

Definition at line 83 of file JpsiUpsilonCommon.cxx.

83 {
84 return (min <=0.0 || value >= min);
85 }
#define min(a, b)
Definition cfImp.cxx:40

◆ cutAcceptGreaterOR()

bool Analysis::JpsiUpsilonCommon::cutAcceptGreaterOR ( const std::vector< double > & values,
double min )
static

Definition at line 87 of file JpsiUpsilonCommon.cxx.

87 {
88 for(double m : values) {
89 if(min <=0.0 || m >= min) return true;
90 }
91 return false;
92 }

◆ cutRange()

bool Analysis::JpsiUpsilonCommon::cutRange ( double value,
double min,
double max )
static

Definition at line 72 of file JpsiUpsilonCommon.cxx.

72 {
73 return (min<=0.0 || value >= min) && (max <= 0.0 || value <= max);
74 }
#define max(a, b)
Definition cfImp.cxx:41

◆ cutRangeOR()

bool Analysis::JpsiUpsilonCommon::cutRangeOR ( const std::vector< double > & values,
double min,
double max )
static

Definition at line 76 of file JpsiUpsilonCommon.cxx.

76 {
77 for(double m : values) {
78 if( (min<=0.0 || m >= min) && (max <= 0.0 || m <= max)) return true;
79 }
80 return false;
81 }

◆ getPt() [1/3]

double Analysis::JpsiUpsilonCommon::getPt ( const xAOD::TrackParticle * trk1,
const xAOD::TrackParticle * trk2 )
static

Definition at line 17 of file JpsiUpsilonCommon.cxx.

17 {
18
19 TLorentzVector momentum(trk1->p4() + trk2->p4() );
20 return momentum.Perp();
21
22 }
virtual FourMom_t p4() const override final
The full 4-momentum of the particle.

◆ getPt() [2/3]

double Analysis::JpsiUpsilonCommon::getPt ( const xAOD::TrackParticle * trk1,
const xAOD::TrackParticle * trk2,
const xAOD::TrackParticle * trk3,
const xAOD::TrackParticle * trk4 )
static

Definition at line 40 of file JpsiUpsilonCommon.cxx.

44 {
45 TLorentzVector momentum( trk1->p4() );
46 momentum += trk2->p4();
47 momentum += trk3->p4();
48 momentum += trk4->p4();
49 return momentum.Perp();
50 }

◆ getPt() [3/3]

double Analysis::JpsiUpsilonCommon::getPt ( const xAOD::TrackParticle * trk1,
const xAOD::TrackParticle * trk2,
const xAOD::TrackParticle * trk3 )
static

Definition at line 26 of file JpsiUpsilonCommon.cxx.

29 {
30 TLorentzVector momentum( trk1->p4() );
31 momentum+= trk2->p4();
32 momentum+= trk3->p4();
33 return momentum.Perp();
34 }

◆ isContainedIn() [1/3]

template<size_t N>
bool Analysis::JpsiUpsilonCommon::isContainedIn ( const xAOD::TrackParticle * t,
const std::array< const xAOD::TrackParticle *, N > & cont )
static

Definition at line 60 of file JpsiUpsilonCommon.h.

61 {
62 return std::find(cont.begin(), cont.end(), t) != cont.end();
63 }

◆ isContainedIn() [2/3]

bool Analysis::JpsiUpsilonCommon::isContainedIn ( const xAOD::TrackParticle * theTrack,
const std::vector< const xAOD::TrackParticle * > & theColl )
static

Definition at line 58 of file JpsiUpsilonCommon.cxx.

58 {
59 return std::find(theColl.cbegin(), theColl.cend(), theTrack) != theColl.cend();
60 }

◆ isContainedIn() [3/3]

bool Analysis::JpsiUpsilonCommon::isContainedIn ( const xAOD::TrackParticle * theTrack,
const xAOD::MuonContainer * theColl )
static

Definition at line 62 of file JpsiUpsilonCommon.cxx.

62 {
63 bool isContained(false);
65 for (muItr=theColl->begin(); muItr!=theColl->end(); ++muItr) {
66 auto& link = ( *muItr )->inDetTrackParticleLink();
67 if ( link.isValid() && ( *link == theTrack ) ) {isContained=true; break;}
68 }
69 return isContained;
70 }
DataModel_detail::const_iterator< DataVector > const_iterator
Definition DataVector.h:838
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.

◆ RelinkVertexMuons()

void Analysis::JpsiUpsilonCommon::RelinkVertexMuons ( const std::vector< const xAOD::MuonContainer * > & muoncols,
xAOD::Vertex * vtx )
static

Definition at line 148 of file JpsiUpsilonCommon.cxx.

148 {
149 using MuonLink = ElementLink<xAOD::MuonContainer>;
150 using MuonLinkVector = std::vector<MuonLink>;
151 static const SG::AuxElement::Decorator<MuonLinkVector> muonLinksDecor("MuonLinks");
152 const MuonLinkVector &mlinksold = muonLinksDecor(*vtx);
153 auto size = mlinksold.size();
154 MuonLinkVector newmulinks;
155 for(size_t i = 0; i<size; i++){
156 const xAOD::Muon* mylink= *(mlinksold[i]);
157 for(const xAOD::MuonContainer* mucol : muoncols){
158 auto itr = std::find(mucol->begin(), mucol->end(), mylink);
159 if(itr != mucol->end()){
160 auto mylink=mlinksold[i];
161 mylink.setStorableObject(*mucol, true);
162 newmulinks.push_back( mylink );
163 break;
164 }
165 }
166 }
167 if(size != newmulinks.size()){
168 throw std::runtime_error("JpsiUpsilonCommon::RelinkVertexMuons: Could not relink all tracks");
169 }
170 muonLinksDecor(*vtx) = std::move(newmulinks);
171 }
std::vector< MuonLink > MuonLinkVector
ElementLink< xAOD::MuonContainer > MuonLink
SG::Decorator< T, ALLOC > Decorator
Definition AuxElement.h:575
Muon_v1 Muon
Reference the current persistent version:
MuonContainer_v1 MuonContainer
Definition of the current "Muon container version".

◆ RelinkVertexTracks()

void Analysis::JpsiUpsilonCommon::RelinkVertexTracks ( const std::vector< const xAOD::TrackParticleContainer * > & trkcols,
xAOD::Vertex * vtx )
static

Definition at line 126 of file JpsiUpsilonCommon.cxx.

126 {
127 std::vector<ElementLink<DataVector<xAOD::TrackParticle> > > newLinkVector;
128 auto size = vtx->trackParticleLinks().size();
129 for(size_t i = 0; i<size; i++){
130 const xAOD::TrackParticle* mylink= *(vtx->trackParticleLinks()[i]);
131 for(const xAOD::TrackParticleContainer* trkcol : trkcols){
132 auto itr = std::find(trkcol->begin(), trkcol->end(), mylink);
133 if(itr != trkcol->end()){
134 auto mylink=vtx->trackParticleLinks()[i];
135 mylink.setStorableObject(*trkcol, true);
136 newLinkVector.push_back( mylink );
137 break;
138 }
139 }
140 }
141 if(size != newLinkVector.size()){
142 throw std::runtime_error("JpsiUpsilonCommon::RelinkVertexTracks: Could not relink all tracks");
143 }
144 vtx->clearTracks();
145 vtx->setTrackParticleLinks( newLinkVector );
146 }
void setTrackParticleLinks(const TrackParticleLinks_t &trackParticles)
Set all track particle links at once.
void clearTracks()
Remove all tracks from the vertex.
const TrackParticleLinks_t & trackParticleLinks() const
Get all the particles associated with the vertex.
TrackParticle_v1 TrackParticle
Reference the current persistent version:
TrackParticleContainer_v1 TrackParticleContainer
Definition of the current "TrackParticle container version".

The documentation for this class was generated from the following files: