ATLAS Offline Software
Public Member Functions | Static Public Member Functions | Protected Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
Analysis::JpsiFinder_ee Class Reference

#include <JpsiFinder_ee.h>

Inheritance diagram for Analysis::JpsiFinder_ee:
Collaboration diagram for Analysis::JpsiFinder_ee:

Public Member Functions

 JpsiFinder_ee (const std::string &t, const std::string &n, const IInterface *p)
 
 ~JpsiFinder_ee ()
 
virtual StatusCode initialize () override
 
virtual StatusCode performSearch (const EventContext &ctx, xAOD::VertexContainer &vxContainer) const override
 
std::vector< JpsiEECandidategetPairs (const std::vector< const xAOD::TrackParticle * > &) const
 
std::vector< JpsiEECandidategetPairs (const std::vector< const xAOD::Electron * > &) const
 
std::vector< JpsiEECandidategetPairs2Colls (const std::vector< const xAOD::TrackParticle * > &, const std::vector< const xAOD::Electron * > &, bool) const
 
double getInvariantMass (const JpsiEECandidate &, const std::vector< double > &) const
 
std::vector< JpsiEECandidateselectCharges (const std::vector< JpsiEECandidate > &, const std::string &) const
 
xAOD::Vertexfit (const std::vector< const xAOD::TrackParticle * > &, const xAOD::TrackParticleContainer *importedTrackCollection) const
 
bool passesEgammaCuts (const xAOD::Electron *) const
 
bool isContainedIn (const xAOD::TrackParticle *, const xAOD::TrackParticleContainer *) const
 
TVector3 trackMomentum (const xAOD::Vertex *vxCandidate, int trkIndex) const
 
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
 

Static Public Member Functions

static const InterfaceID & interfaceID ()
 

Protected Member Functions

void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution More...
 
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
 
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed. More...
 

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t
 

Private Member Functions

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...
 

Private Attributes

bool m_elel
 
bool m_eltrk
 
bool m_trktrk
 
bool m_allElectrons
 
bool m_useTrackMeasurement
 
bool m_useV0Fitter
 
bool m_diElectrons
 
double m_trk1M
 
double m_trk2M
 
double m_thresholdPt
 
double m_higherPt
 
double m_trkThresholdPt
 
double m_invMassUpper
 
double m_invMassLower
 
double m_collAngleTheta
 
double m_collAnglePhi
 
double m_Chi2Cut
 
bool m_oppChOnly
 
bool m_sameChOnly
 
bool m_allChCombs
 
SG::ReadHandleKey< xAOD::ElectronContainerm_electronCollectionKey
 
SG::ReadHandleKey< xAOD::TrackParticleContainerm_TrkParticleCollection
 
SG::ReadDecorHandleKey< xAOD::ElectronContainerm_gsfCaloLinkKey
 
ToolHandle< Trk::IVertexFitterm_iVertexFitter
 
ToolHandle< Trk::IVertexFitterm_iV0VertexFitter
 
ToolHandle< Trk::ITrackSelectorToolm_trkSelector
 
ToolHandle< InDet::VertexPointEstimatorm_vertexEstimator
 
ServiceHandle< IPartPropSvc > m_partPropSvc {this, "PartPropSvc", "PartPropSvc"}
 
bool m_egammaCuts
 
std::string m_elSelection
 
bool m_doTagAndProbe
 
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default) More...
 
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default) More...
 
std::vector< SG::VarHandleKeyArray * > m_vhka
 
bool m_varHandleArraysDeclared
 

Detailed Description

Definition at line 58 of file JpsiFinder_ee.h.

Member Typedef Documentation

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< AlgTool > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Constructor & Destructor Documentation

◆ JpsiFinder_ee()

Analysis::JpsiFinder_ee::JpsiFinder_ee ( const std::string &  t,
const std::string &  n,
const IInterface *  p 
)

Definition at line 95 of file JpsiFinder_ee.cxx.

95  : AthAlgTool(t,n,p),
96  m_elel(true),
97  m_eltrk(false),
98  m_trktrk(false),
99  m_allElectrons(false),
100  m_useTrackMeasurement(true),
101  m_useV0Fitter(false),
102  m_diElectrons(true),
105  m_thresholdPt(0.0),
106  m_higherPt(0.0),
107  m_trkThresholdPt(0.0),
108  m_invMassUpper(100000.0),
109  m_invMassLower(0.0),
110  m_collAngleTheta(0.0),
111  m_collAnglePhi(0.0),
112  m_Chi2Cut(50.),
113  m_oppChOnly(true),
114  m_sameChOnly(false),
115  m_allChCombs(false),
116  m_electronCollectionKey("Electrons"),
117  m_TrkParticleCollection("InDetTrackParticles"),
118  m_iVertexFitter("Trk::TrkVKalVrtFitter"),
119  m_iV0VertexFitter("Trk::V0VertexFitter"),
120  m_trkSelector("InDet::TrackSelectorTool"),
121  m_vertexEstimator("InDet::VertexPointEstimator"),
122  m_egammaCuts(true),
123  m_elSelection("d0_or_nod0"),
124  m_doTagAndProbe(false)
125 
126  {
127  declareInterface<JpsiFinder_ee>(this);
128  declareProperty("elAndEl",m_elel);
129  declareProperty("elAndTrack",m_eltrk);
130  declareProperty("TrackAndTrack",m_trktrk);
131  declareProperty("allElectrons",m_allElectrons);
132  declareProperty("useElectronTrackMeasurement",m_useTrackMeasurement);
133  declareProperty("useV0Fitter",m_useV0Fitter);
134  declareProperty("assumeDiElectrons",m_diElectrons);
135 // declareProperty("electronLHValue",m_electronLHValue);
136  declareProperty("track1Mass",m_trk1M);
137  declareProperty("track2Mass",m_trk2M);
138  declareProperty("elThresholdPt",m_thresholdPt);
139  declareProperty("higherPt",m_higherPt);
140  declareProperty("trackThresholdPt",m_trkThresholdPt);
141  declareProperty("invMassUpper",m_invMassUpper);
142  declareProperty("invMassLower",m_invMassLower);
143  declareProperty("collAngleTheta",m_collAngleTheta);
144  declareProperty("collAnglePhi",m_collAnglePhi);
145  declareProperty("Chi2Cut",m_Chi2Cut);
146  declareProperty("oppChargesOnly",m_oppChOnly);
147  declareProperty("sameChargesOnly",m_sameChOnly);
148  declareProperty("allChargeCombinations",m_allChCombs);
149  declareProperty("electronCollectionKey",m_electronCollectionKey);
150  declareProperty("TrackParticleCollection",m_TrkParticleCollection);
151  declareProperty("TrkVertexFitterTool",m_iVertexFitter);
152  declareProperty("V0VertexFitterTool",m_iV0VertexFitter);
153  declareProperty("TrackSelectorTool",m_trkSelector);
154  declareProperty("VertexPointEstimator",m_vertexEstimator);
155  declareProperty("useEgammaCuts",m_egammaCuts);
156  declareProperty("doTagAndProbe",m_doTagAndProbe);
157  declareProperty("ElectronSelection",m_elSelection);
158  }

◆ ~JpsiFinder_ee()

Analysis::JpsiFinder_ee::~JpsiFinder_ee ( )

Definition at line 160 of file JpsiFinder_ee.cxx.

160 { }

Member Function Documentation

◆ declareGaudiProperty() [1/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T, V, H > &  hndl,
const SG::VarHandleKeyArrayType  
)
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKeyArray>

Definition at line 170 of file AthCommonDataStore.h.

172  {
173  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
174  hndl.value(),
175  hndl.documentation());
176 
177  }

◆ declareGaudiProperty() [2/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T, V, H > &  hndl,
const SG::VarHandleKeyType  
)
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158  {
159  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
160  hndl.value(),
161  hndl.documentation());
162 
163  }

◆ declareGaudiProperty() [3/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T, V, H > &  hndl,
const SG::VarHandleType  
)
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleBase>

Definition at line 184 of file AthCommonDataStore.h.

186  {
187  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
188  hndl.value(),
189  hndl.documentation());
190  }

◆ declareGaudiProperty() [4/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T, V, H > &  t,
const SG::NotHandleType  
)
inlineprivateinherited

specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray>

Definition at line 199 of file AthCommonDataStore.h.

200  {
201  return PBASE::declareProperty(t);
202  }

◆ declareProperty() [1/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
SG::VarHandleBase hndl,
const std::string &  doc,
const SG::VarHandleType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
hndlObject holding the property value.
docDocumentation 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.

249  {
250  this->declare(hndl.vhKey());
251  hndl.vhKey().setOwner(this);
252 
253  return PBASE::declareProperty(name,hndl,doc);
254  }

◆ declareProperty() [2/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
SG::VarHandleKey hndl,
const std::string &  doc,
const SG::VarHandleKeyType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
hndlObject holding the property value.
docDocumentation 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.

225  {
226  this->declare(hndl);
227  hndl.setOwner(this);
228 
229  return PBASE::declareProperty(name,hndl,doc);
230  }

◆ declareProperty() [3/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
SG::VarHandleKeyArray hndArr,
const std::string &  doc,
const SG::VarHandleKeyArrayType  
)
inlineinherited

Definition at line 259 of file AthCommonDataStore.h.

263  {
264 
265  // std::ostringstream ost;
266  // ost << Algorithm::name() << " VHKA declareProp: " << name
267  // << " size: " << hndArr.keys().size()
268  // << " mode: " << hndArr.mode()
269  // << " vhka size: " << m_vhka.size()
270  // << "\n";
271  // debug() << ost.str() << endmsg;
272 
273  hndArr.setOwner(this);
274  m_vhka.push_back(&hndArr);
275 
276  Gaudi::Details::PropertyBase* p = PBASE::declareProperty(name, hndArr, doc);
277  if (p != 0) {
278  p->declareUpdateHandler(&AthCommonDataStore<PBASE>::updateVHKA, this);
279  } else {
280  ATH_MSG_ERROR("unable to call declareProperty on VarHandleKeyArray "
281  << name);
282  }
283 
284  return p;
285 
286  }

◆ declareProperty() [4/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
T &  property,
const std::string &  doc,
const SG::NotHandleType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
propertyObject holding the property value.
docDocumentation 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.

337  {
338  return PBASE::declareProperty(name, property, doc);
339  }

◆ declareProperty() [5/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
T &  property,
const std::string &  doc = "none" 
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
propertyObject holding the property value.
docDocumentation 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.

355  {
356  typedef typename SG::HandleClassifier<T>::type htype;
357  return declareProperty (name, property, doc, htype());
358  }

◆ declareProperty() [6/6]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( Gaudi::Property< T, V, H > &  t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145  {
146  typedef typename SG::HandleClassifier<T>::type htype;
148  }

◆ detStore()

const ServiceHandle<StoreGateSvc>& AthCommonDataStore< AthCommonMsg< AlgTool > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

95 { return m_detStore; }

◆ evtStore() [1/2]

ServiceHandle<StoreGateSvc>& AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

85 { return m_evtStore; }

◆ evtStore() [2/2]

const ServiceHandle<StoreGateSvc>& AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore ( ) const
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 90 of file AthCommonDataStore.h.

90 { return m_evtStore; }

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase &  ExtraDeps)
protectedinherited

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

◆ fit()

xAOD::Vertex * Analysis::JpsiFinder_ee::fit ( const std::vector< const xAOD::TrackParticle * > &  inputTracks,
const xAOD::TrackParticleContainer importedTrackCollection 
) const

Definition at line 396 of file JpsiFinder_ee.cxx.

396  {
397  ATH_MSG_DEBUG("inside JpsiFinder_ee::fit");
398  const Trk::TrkV0VertexFitter* concreteVertexFitter=0;
399  if (m_useV0Fitter) {
400  ATH_MSG_DEBUG("using v0 fitter");
401  // making a concrete fitter for the V0Fitter
402  concreteVertexFitter = dynamic_cast<const Trk::TrkV0VertexFitter * >(m_iV0VertexFitter.get());
403  if(concreteVertexFitter == 0) {
404  ATH_MSG_FATAL("The vertex fitter passed is not a V0 Vertex Fitter");
405  return NULL;
406  }
407  }
408 
409  const Trk::Perigee& aPerigee1 = inputTracks[0]->perigeeParameters();
410  const Trk::Perigee& aPerigee2 = inputTracks[1]->perigeeParameters();
411  int sflag = 0;
412  int errorcode = 0;
413  Amg::Vector3D startingPoint = m_vertexEstimator->getCirclesIntersectionPoint(&aPerigee1,&aPerigee2,sflag,errorcode);
414  if (errorcode != 0) {startingPoint(0) = 0.0; startingPoint(1) = 0.0; startingPoint(2) = 0.0;}
415  if (m_useV0Fitter) {
416  xAOD::Vertex* myVxCandidate = concreteVertexFitter->fit(inputTracks, startingPoint);
417  ATH_MSG_DEBUG("Initial fit was a success!");
418  // Added by ASC
419  if(myVxCandidate != 0){
420  std::vector<ElementLink<DataVector<xAOD::TrackParticle> > > newLinkVector;
421  for(unsigned int i=0; i< myVxCandidate->trackParticleLinks().size(); i++)
422  { ElementLink<DataVector<xAOD::TrackParticle> > mylink=myVxCandidate->trackParticleLinks()[i]; //makes a copy (non-const)
423  mylink.setStorableObject(*importedTrackCollection, true);
424  newLinkVector.push_back( mylink ); }
425 
426  myVxCandidate->clearTracks();
427  myVxCandidate->setTrackParticleLinks( newLinkVector );
428  }
429 
430 
431 
432  return myVxCandidate;
433  } else {
434  xAOD::Vertex* myVxCandidate = m_iVertexFitter->fit(inputTracks, startingPoint);
435  ATH_MSG_DEBUG("Initial fit was a success! " << myVxCandidate);
436  // Added by ASC
437  if(myVxCandidate != 0){
438  std::vector<ElementLink<DataVector<xAOD::TrackParticle> > > newLinkVector;
439  for(unsigned int i=0; i< myVxCandidate->trackParticleLinks().size(); i++){
440  ElementLink<DataVector<xAOD::TrackParticle> > mylink=myVxCandidate->trackParticleLinks()[i]; //makes a copy (non-const)
441  mylink.setStorableObject(*importedTrackCollection, true);
442  newLinkVector.push_back( mylink );
443  ATH_MSG_DEBUG("Set a link!");
444  }
445  myVxCandidate->clearTracks();
446  myVxCandidate->setTrackParticleLinks( newLinkVector );
447  ATH_MSG_DEBUG("Set all links");
448  }
449 
450  return myVxCandidate;
451  }
452 
453 
454 
455  return NULL;
456 
457  } // End of fit method

◆ getInvariantMass()

double Analysis::JpsiFinder_ee::getInvariantMass ( const JpsiEECandidate jpsiIn,
const std::vector< double > &  massHypotheses 
) const

Definition at line 570 of file JpsiFinder_ee.cxx.

570  {
571  double mass1 = massHypotheses.at(0);
572  double mass2 = massHypotheses.at(1);
573 
574  // construct 4-vectors from track perigee parameters using given mass hypotheses.
575  // NOTE: in new data model (xAOD) the defining parameters are expressed as perigee parameters w.r.t. the beamspot
576  // NOTE2: TrackParticle::p4() method already returns TLorentzVector, however, we want to enforce our own mass hypothesis
577  TLorentzVector mu1;
578  TLorentzVector mu2;
579  mu1.SetVectM(jpsiIn.trackParticle1->p4().Vect(), mass1);
580  mu2.SetVectM(jpsiIn.trackParticle2->p4().Vect(), mass2);
581 
582  return (mu1+mu2).M();
583 
584  }

◆ getPairs() [1/2]

std::vector< JpsiEECandidate > Analysis::JpsiFinder_ee::getPairs ( const std::vector< const xAOD::Electron * > &  electronsIn) const

Definition at line 493 of file JpsiFinder_ee.cxx.

493  {
494 
495  std::vector<JpsiEECandidate> myPairs;
496  JpsiEECandidate pair;
497  std::vector<const xAOD::Electron*>::const_iterator outerItr;
498  std::vector<const xAOD::Electron*>::const_iterator innerItr;
499 
500  if(electronsIn.size()>=2){
501  for(outerItr=electronsIn.begin();outerItr<electronsIn.end();++outerItr){
502  for(innerItr=(outerItr+1);innerItr!=electronsIn.end();++innerItr){
503  pair.el1 = *innerItr;
504  pair.el2 = *outerItr;
505  pair.pairType = ELEL;
506  myPairs.push_back(pair);
507  }
508  }
509  }
510 
511  return(myPairs);
512  }

◆ getPairs() [2/2]

std::vector< JpsiEECandidate > Analysis::JpsiFinder_ee::getPairs ( const std::vector< const xAOD::TrackParticle * > &  TracksIn) const

Definition at line 466 of file JpsiFinder_ee.cxx.

466  {
467 
468  std::vector<JpsiEECandidate> myPairs;
469  JpsiEECandidate pair;
470  std::vector<const xAOD::TrackParticle*>::const_iterator outerItr;
471  std::vector<const xAOD::TrackParticle*>::const_iterator innerItr;
472 
473  if(TracksIn.size()>=2){
474  for(outerItr=TracksIn.begin();outerItr<TracksIn.end();++outerItr){
475  for(innerItr=(outerItr+1);innerItr!=TracksIn.end();++innerItr){
476  pair.trackParticle1 = *innerItr;
477  pair.trackParticle2 = *outerItr;
478  pair.pairType = TRK2;
479  myPairs.push_back(pair);
480  }
481  }
482  }
483 
484  return(myPairs);
485  }

◆ getPairs2Colls()

std::vector< JpsiEECandidate > Analysis::JpsiFinder_ee::getPairs2Colls ( const std::vector< const xAOD::TrackParticle * > &  tracks,
const std::vector< const xAOD::Electron * > &  electrons,
bool  tagAndProbe 
) const

Definition at line 520 of file JpsiFinder_ee.cxx.

520  {
521 
522  std::vector<JpsiEECandidate> myPairs;
523  if (m_TrkParticleCollection.key() == "GSFCaloContainer") {
524  ATH_MSG_FATAL("GSFCaloContainer mode not implemented in getPairs2Colls.");
525  return myPairs;
526  }
527  JpsiEECandidate pair;
528 
529  // Unless user is running in tag and probe mode, remove tracks which are also identified as muons
530  std::vector<const xAOD::TrackParticle*> tracksToKeep;
531  if (!tagAndProbe) {
532  if(tracks.size()>=1 && electrons.size()>=1){
533  for (const xAOD::TrackParticle* trk : tracks) {
534  bool trackIsElectron(false);
535  for (const xAOD::Electron* ele : electrons) {
536  if ( ele->trackParticleLink().cachedElement() == trk ) {
537  trackIsElectron=true;
538  break;
539  }
540  }
541  if (!trackIsElectron) tracksToKeep.push_back(trk);
542  }
543  }
544  } else {tracksToKeep = tracks;}
545 
546  if(tracksToKeep.size()>=1 && electrons.size()>=1){
547  for (const xAOD::TrackParticle* trk : tracks) {
548  for (const xAOD::Electron* ele : electrons) {
549  pair.el1 = ele;
550  // Muon track 1st
551  pair.trackParticle1 = ele->trackParticleLink().cachedElement();
552  pair.trackParticle2 = trk;
553  pair.pairType = ELTRK;
554  myPairs.push_back(pair);
555  }
556  }
557  }
558 
559  return(myPairs);
560  }

◆ initialize()

StatusCode Analysis::JpsiFinder_ee::initialize ( )
overridevirtual

Definition at line 32 of file JpsiFinder_ee.cxx.

32  {
33 
34  // Initialize the ReadHandles
37 
38  // Initialize ReadDecorHandles
39  ATH_CHECK(m_gsfCaloLinkKey.initialize());
40 
41  // retrieving vertex Fitter
42  ATH_CHECK(m_iVertexFitter.retrieve());
43 
44  // retrieving V0 Fitter
45  ATH_CHECK(m_iV0VertexFitter.retrieve(DisableTool{!m_useV0Fitter }));
46  // Get the track selector tool from ToolSvc
47  ATH_CHECK(m_trkSelector.retrieve());
48 
49 
50  // Get the vertex point estimator tool from ToolSvc
51  ATH_CHECK(m_vertexEstimator.retrieve());
52 
53 
54  if (m_diElectrons) {
55  // Get the Particle Properties Service
56  ATH_CHECK(m_partPropSvc.retrieve());
57  auto particleDataTable = m_partPropSvc->PDT();
58  const HepPDT::ParticleData* pd_el = particleDataTable->particle(MC::ELECTRON);
59  m_trk1M = pd_el->mass();
60  m_trk2M = pd_el->mass();
61  }
62 
63  if (m_doTagAndProbe) ATH_MSG_WARNING("You have requested tag and probe mode. Duplicate mu+trk pairs WILL be allowed, charge ordering WILL NOT be done. Tag track will be first in each candidate");
64 
65 
66 // // Check that the user's settings are sensible
67  bool illogicalOptions(false);
68  if ( (m_elel && m_eltrk) || (m_elel && m_trktrk) || (m_eltrk && m_trktrk) ) {
69  ATH_MSG_WARNING("You are requesting incompatible combinations of muons and tracks in the pairs. JpsiEECandidates will be EMPTY!");
70  illogicalOptions=true;
71  };
72  if ( (m_doTagAndProbe && m_elel) || (m_doTagAndProbe && m_trktrk) ) {
73  ATH_MSG_WARNING("You are requesting Tag and Probe analysis but have not requested mu+trk mode. This is impossible. JpsiEECandidates will be EMPTY!");
74  illogicalOptions=true;
75  };
77  ATH_MSG_WARNING("You are requesting incompatible combinations of charges in the pairs. JpsiEECandidates will be EMPTY!");
78  illogicalOptions=true;
79  };
81  ATH_MSG_WARNING("You are requesting same-sign or all-sign combinations in a tag and probe analysis. This doesn't make sense. JpsiEECandidates will be EMPTY!");
82  illogicalOptions=true;
83  }
84  if (illogicalOptions) return StatusCode::FAILURE;
85 
86 
87 
88  ATH_MSG_DEBUG("Initialize successful");
89 
90  return StatusCode::SUCCESS;
91 
92  }

◆ inputHandles()

virtual std::vector<Gaudi::DataHandle*> AthCommonDataStore< AthCommonMsg< AlgTool > >::inputHandles ( ) const
overridevirtualinherited

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()

static const InterfaceID& Analysis::JpsiFinder_ee::interfaceID ( )
inlinestatic

Definition at line 65 of file JpsiFinder_ee.h.

65 { return IID_JpsiFinder_ee;}

◆ isContainedIn()

bool Analysis::JpsiFinder_ee::isContainedIn ( const xAOD::TrackParticle theTrack,
const xAOD::TrackParticleContainer theCollection 
) const

Definition at line 656 of file JpsiFinder_ee.cxx.

656  {
657  return std::find(theCollection->begin(), theCollection->end(), theTrack) != theCollection->end();
658  }

◆ msg() [1/2]

MsgStream& AthCommonMsg< AlgTool >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24  {
25  return this->msgStream();
26  }

◆ msg() [2/2]

MsgStream& AthCommonMsg< AlgTool >::msg ( const MSG::Level  lvl) const
inlineinherited

Definition at line 27 of file AthCommonMsg.h.

27  {
28  return this->msgStream(lvl);
29  }

◆ msgLvl()

bool AthCommonMsg< AlgTool >::msgLvl ( const MSG::Level  lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30  {
31  return this->msgLevel(lvl);
32  }

◆ outputHandles()

virtual std::vector<Gaudi::DataHandle*> AthCommonDataStore< AthCommonMsg< AlgTool > >::outputHandles ( ) const
overridevirtualinherited

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.

◆ passesEgammaCuts()

bool Analysis::JpsiFinder_ee::passesEgammaCuts ( const xAOD::Electron electron) const

Definition at line 632 of file JpsiFinder_ee.cxx.

632  {
633 
634  static const SG::AuxElement::ConstAccessor<char> isLHVeryLoosenod0("DFCommonElectronsLHVeryLoosenod0");
635  static const SG::AuxElement::ConstAccessor<char> isLHVeryLoose("DFCommonElectronsLHVeryLoose");
636 
637  bool passesSelection = false;
638  bool passesLHVLoose = isLHVeryLoose(*electron);
639  bool passesLHVLoosenod0 = isLHVeryLoosenod0(*electron);
640 
641  if(m_elSelection == "d0") passesSelection = passesLHVLoose;
642  else if(m_elSelection == "nod0") passesSelection = passesLHVLoosenod0;
643  else if(m_elSelection == "d0_or_nod0") passesSelection = passesLHVLoose || passesLHVLoosenod0;
644  else ATH_MSG_ERROR("Invalid electron selection " << m_elSelection);
645 
646  ATH_MSG_DEBUG("Electron with pT, eta: " << electron->pt() << " " << electron->eta() << " passes " << m_elSelection << " " << passesSelection);
647  return passesSelection;
648 
649  }

◆ performSearch()

StatusCode Analysis::JpsiFinder_ee::performSearch ( const EventContext &  ctx,
xAOD::VertexContainer vxContainer 
) const
overridevirtual

Implements Analysis::ICandidateSearch.

Definition at line 167 of file JpsiFinder_ee.cxx.

168  {
169  ATH_MSG_DEBUG( "JpsiFinder_ee::performSearch" );
170 
171 
172  // Get the electrons from StoreGate
173  const xAOD::ElectronContainer* importedElectronCollection=nullptr;
175  if(!ehandle.isValid()){
176  ATH_MSG_WARNING("No electron collection with key " << m_electronCollectionKey.key() << " found in StoreGate. JpsiEECandidates will be EMPTY!");
177  return StatusCode::SUCCESS;;
178  }else{
179  importedElectronCollection = ehandle.cptr();
180  ATH_MSG_DEBUG("Found electron collections with key "<<m_electronCollectionKey.key());
181  }
182  ATH_MSG_DEBUG("Electron container size "<<importedElectronCollection->size());
183 
184  // Get ID tracks
186  const xAOD::TrackParticleContainer* importedTrackCollection(0);
187  if(!thandle.isValid()){
188  ATH_MSG_WARNING("No TrackParticle collection with name " << m_TrkParticleCollection << " found in StoreGate!");
189  return StatusCode::SUCCESS;;
190  } else {
191  importedTrackCollection = thandle.cptr();
192  }
193 
194  // Typedef for vectors of tracks and muons
195  typedef std::vector<const xAOD::TrackParticle*> TrackBag;
196  typedef std::vector<const xAOD::Electron*> ElectronBag;
197 
198  // Select the inner detector tracks
199  const xAOD::Vertex* vx = 0;
200  TrackBag theIDTracksAfterSelection;
201  if (m_trktrk || m_eltrk) {
203  for (trkCItr=importedTrackCollection->begin(); trkCItr!=importedTrackCollection->end(); ++trkCItr) {
204  const xAOD::TrackParticle* TP = (*trkCItr);
205  if ( fabs(TP->pt())<m_trkThresholdPt ) continue;
206  if ( !m_trkSelector->decision(*TP, vx) ) continue;
207  theIDTracksAfterSelection.push_back(TP);
208  }
209  if (theIDTracksAfterSelection.size() == 0) return StatusCode::SUCCESS;;
210  ATH_MSG_DEBUG("Number of tracks after ID track selection: " << theIDTracksAfterSelection.size());
211  }
212 
213  // Select the muons
214  ElectronBag theElectronsAfterSelection;
216  if (m_elel || m_eltrk) {
217  for (elItr=importedElectronCollection->begin(); elItr!=importedElectronCollection->end(); ++elItr) {
218  if ( *elItr == NULL ) continue;
219  if (!(*elItr)->trackParticleLink().isValid()) continue; // No electrons without ID tracks
220  const xAOD::TrackParticle* elTrk(0);
221  if (m_TrkParticleCollection.key() == "GSFCaloContainer") {
223  refittedTrackParticleLink(m_gsfCaloLinkKey, ctx);
224  const ElementLink<xAOD::TrackParticleContainer>& refittedTrackLink = refittedTrackParticleLink(*(*elItr));
225  if (!refittedTrackLink.isValid()) continue;
226  elTrk = *refittedTrackLink;
227  } else {
228  if (!(*elItr)->trackParticleLink().isValid()) continue;
229  elTrk = (*elItr)->trackParticleLink().cachedElement();
230  }
231 
232  if ( elTrk==NULL) continue;
233  if ( !m_trkSelector->decision(*elTrk, vx) ) continue; // all ID tracks must pass basic tracking cuts
234  if ( fabs(elTrk->pt())<m_thresholdPt ) continue; // higher pt cut if needed
235 
236  if ( m_egammaCuts && !passesEgammaCuts(*elItr)) continue; // egamma cuts
237  theElectronsAfterSelection.push_back(*elItr);
238  }
239  if (theElectronsAfterSelection.size() == 0) return StatusCode::SUCCESS;;
240  ATH_MSG_DEBUG("Number of electrons after selection: " << theElectronsAfterSelection.size());
241  }
242 
243  // Sort into pairs - end result will be a vector of JpsiEECandidate structs
244  std::vector<JpsiEECandidate> jpsiCandidates;
245  if (m_elel) jpsiCandidates = getPairs(theElectronsAfterSelection);
246  if (m_trktrk) jpsiCandidates = getPairs(theIDTracksAfterSelection);
247  if (m_eltrk) jpsiCandidates = getPairs2Colls(theIDTracksAfterSelection,theElectronsAfterSelection,m_doTagAndProbe);
248 
249  ATH_MSG_DEBUG("Number of pairs with ee from a B decay: " << jpsiCandidates.size() );
250 
251  // Pair-wise selections
253 
254  // (1) Enforce one combined muon [deleted, no electron equivalent]
255 
256  // (2) Establish track content for candidates
257  // and set the appropriate track collections for the combined muon tracks where appropriate (for saving to persistency later)
258 
259  // el+trk or trk+trk - always ID track collection
260  if (m_eltrk || m_trktrk) {
261  for (jpsiItr=jpsiCandidates.begin(); jpsiItr!=jpsiCandidates.end(); ++jpsiItr) {
262  (*jpsiItr).collection1 = importedTrackCollection;
263  (*jpsiItr).collection2 = importedTrackCollection;
264  }
265  }
266 
267  if (m_elel) {
268  for (jpsiItr=jpsiCandidates.begin(); jpsiItr!=jpsiCandidates.end(); ++jpsiItr) {
269  if ( m_useTrackMeasurement ) {
270  if (m_TrkParticleCollection.key() == "GSFCaloContainer") {
272  refittedTrackParticleLink(m_gsfCaloLinkKey, ctx);
273  const ElementLink<xAOD::TrackParticleContainer>& refittedTrackLink1 = refittedTrackParticleLink(*((*jpsiItr).el1));
274  const ElementLink<xAOD::TrackParticleContainer>& refittedTrackLink2 = refittedTrackParticleLink(*((*jpsiItr).el2));
275  (*jpsiItr).trackParticle1 = *refittedTrackLink1;
276  (*jpsiItr).trackParticle2 = *refittedTrackLink2;
277  } else {
278  (*jpsiItr).trackParticle1 = (*jpsiItr).el1->trackParticleLink().cachedElement();
279  (*jpsiItr).trackParticle2 = (*jpsiItr).el2->trackParticleLink().cachedElement();
280  }
281  (*jpsiItr).collection1 = importedTrackCollection;
282  (*jpsiItr).collection2 = importedTrackCollection;
283  } else {
284  ATH_MSG_WARNING("Not setup for non-track electron measurements yet....");
285  }
286  } // iteration over candidates
287  }
288 
289 
290  // (3) Enforce higher track pt if requested
291  if (m_higherPt>0.0) {
292  int index(0);
293  std::vector<int> listToDelete;
294  std::vector<int>::reverse_iterator ii;
295  for(jpsiItr=jpsiCandidates.begin(); jpsiItr!=jpsiCandidates.end();++jpsiItr,++index) {
296  if( (fabs((*jpsiItr).trackParticle1->pt()) < m_higherPt) && (fabs((*jpsiItr).trackParticle2->pt()) < m_higherPt) ) listToDelete.push_back(index);
297  }
298  for (ii=listToDelete.rbegin(); ii!=listToDelete.rend(); ++ii) {
299  jpsiCandidates.erase(jpsiCandidates.begin() + (*ii) );
300  }
301  ATH_MSG_DEBUG("Number of candidates after higherPt cut: " << jpsiCandidates.size() );
302  }
303 
304  // (4) Select all opp/same charged track pairs
305  std::vector<JpsiEECandidate> sortedJpsiEECandidates;
306  if (m_oppChOnly) sortedJpsiEECandidates = selectCharges(jpsiCandidates,"OPPOSITE");
307  if (m_sameChOnly) sortedJpsiEECandidates = selectCharges(jpsiCandidates,"SAME");
308  if (m_allChCombs) sortedJpsiEECandidates = selectCharges(jpsiCandidates,"ALL");
309  ATH_MSG_DEBUG("Number of candidates after charge selection: " << sortedJpsiEECandidates.size() );
310 
311  // (5) Select for decay angle, if requested
312  if (m_collAnglePhi>0.0 && m_collAngleTheta>0.0) {
313  int index(0);
314  std::vector<int> listToDelete;
315  std::vector<int>::reverse_iterator ii;
316  for(jpsiItr=sortedJpsiEECandidates.begin(); jpsiItr!=sortedJpsiEECandidates.end();++jpsiItr,++index) {
317  double deltatheta = fabs( (*jpsiItr).trackParticle1->theta() - (*jpsiItr).trackParticle2->theta() );
318  // -3.14 < phi < +3.14 ==> correction
319  double deltaphi = std::abs(xAOD::P4Helpers::deltaPhi((*jpsiItr).trackParticle1->phi0() , (*jpsiItr).trackParticle2->phi0()));
320  // perform the angle cuts
321  if ((deltatheta > m_collAngleTheta) || (deltaphi > m_collAnglePhi)) listToDelete.push_back(index);
322  }
323  for (ii=listToDelete.rbegin(); ii!=listToDelete.rend(); ++ii) {
324  sortedJpsiEECandidates.erase(sortedJpsiEECandidates.begin() + (*ii) );
325  }
326  ATH_MSG_DEBUG("Number of collimated candidates: " << sortedJpsiEECandidates.size() );
327  }
328 
329  // (6) Select for invariant mass, if requested
330  std::vector<double> trkMasses;
331  trkMasses.push_back(m_trk1M);
332  trkMasses.push_back(m_trk2M);
333  if ( (m_invMassLower > 0.0) || (m_invMassUpper > 0.0) ) {
334  int index(0);
335  std::vector<int> listToDelete;
336  std::vector<int>::reverse_iterator ii;
337  for(jpsiItr=sortedJpsiEECandidates.begin(); jpsiItr!=sortedJpsiEECandidates.end(); ++jpsiItr,++index) {
338  double invMass = getInvariantMass(*jpsiItr,trkMasses);
339  // std::cout << "inv. mass: " << invMass << std::endl;
340  if ( invMass < m_invMassLower || invMass > m_invMassUpper ) {
341  listToDelete.push_back(index);
342  }
343  }
344  for (ii=listToDelete.rbegin(); ii!=listToDelete.rend(); ++ii) {
345  sortedJpsiEECandidates.erase(sortedJpsiEECandidates.begin() + (*ii) );
346  }
347  ATH_MSG_DEBUG("Number of candidates passing invariant mass selection: " << sortedJpsiEECandidates.size() );
348  }
349 
350  if (sortedJpsiEECandidates.size() == 0) return StatusCode::SUCCESS;;
351 
352  // Fit each pair of tracks to a vertex
353  int itritn = 0;
354  for(jpsiItr=sortedJpsiEECandidates.begin(); jpsiItr!=sortedJpsiEECandidates.end(); ++jpsiItr) {
355  ATH_MSG_DEBUG("jpsiItr: " << itritn); itritn++;
356  std::vector<const xAOD::TrackParticle*> theTracks; theTracks.clear();
357  theTracks.push_back((*jpsiItr).trackParticle1);
358  theTracks.push_back((*jpsiItr).trackParticle2);
359  ATH_MSG_DEBUG("theTracks size (should be two!) " << theTracks.size() << " being vertexed with tracks " << importedTrackCollection);
360  std::unique_ptr<xAOD::Vertex> myVxCandidate{fit(theTracks,importedTrackCollection)}; // This line actually does the fitting and object making
361  if (myVxCandidate != 0) {
362  // Chi2 cut if requested
363  double chi2 = myVxCandidate->chiSquared();
364  ATH_MSG_DEBUG("chi2 is: " << chi2);
365  if (m_Chi2Cut == 0.0 || chi2 <= m_Chi2Cut) {
366  // decorate the candidate with refitted tracks and muons via the BPhysHelper
367  xAOD::BPhysHelper jpsiHelper(myVxCandidate.get());
368  jpsiHelper.setRefTrks();
369  if (m_elel || m_eltrk) {
370  std::vector<const xAOD::Electron*> theStoredElectrons;
371  theStoredElectrons.push_back((*jpsiItr).el1);
372  if (m_elel) theStoredElectrons.push_back((*jpsiItr).el2);
373  jpsiHelper.setElectrons(theStoredElectrons,importedElectronCollection);
374  }
375  // Retain the vertex
376  vxContainer.push_back(std::move(myVxCandidate));
377  }
378  } else { // fit failed
379  ATH_MSG_DEBUG("Fitter failed!");
380  // Don't try to delete the object, since we arrived here,
381  // because this pointer is null...
382  //delete myVxCandidate;
383  }
384  }
385  ATH_MSG_DEBUG("vxContainer size " << vxContainer.size());
386 
387  return StatusCode::SUCCESS;;
388  }

◆ renounce()

std::enable_if_t<std::is_void_v<std::result_of_t<decltype(&T::renounce)(T)> > && !std::is_base_of_v<SG::VarHandleKeyArray, T> && std::is_base_of_v<Gaudi::DataHandle, T>, void> AthCommonDataStore< AthCommonMsg< AlgTool > >::renounce ( T &  h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381  {
382  h.renounce();
383  PBASE::renounce (h);
384  }

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::renounceArray ( SG::VarHandleKeyArray handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364  {
365  handlesArray.renounce();
366  }

◆ selectCharges()

std::vector< JpsiEECandidate > Analysis::JpsiFinder_ee::selectCharges ( const std::vector< JpsiEECandidate > &  jpsisIn,
const std::string &  selection 
) const

Definition at line 592 of file JpsiFinder_ee.cxx.

592  {
593 
594  bool opposite(false),same(false),all(false);
595  if (selection=="OPPOSITE") opposite=true;
596  if (selection=="SAME") same=true;
597  if (selection=="ALL") all=true;
598 
599  JpsiEECandidate tmpJpsi;
600  std::vector<JpsiEECandidate> jpsis;
601  double qOverP1=0.;
602  double qOverP2=0.;
603  for(auto jpsiItr=jpsisIn.cbegin();jpsiItr!=jpsisIn.cend();jpsiItr++){
604  bool oppCh(false),sameCh(false);
605  tmpJpsi = *jpsiItr;
606  qOverP1=(*jpsiItr).trackParticle1->qOverP();
607  qOverP2=(*jpsiItr).trackParticle2->qOverP();
608  if(qOverP1*qOverP2<0.0) oppCh=true; // product charge < 0
609  if(qOverP1*qOverP2>0.0) sameCh=true; // product charge > 0
610  // +ve should be first so swap
611  // Don't do it for tag and probe analyses (because tag muon must not change position)
612  if (oppCh && qOverP1<0.0 && !m_doTagAndProbe) {
613  tmpJpsi.trackParticle1 = (*jpsiItr).trackParticle2;
614  tmpJpsi.trackParticle2 = (*jpsiItr).trackParticle1;
615  tmpJpsi.el1 = (*jpsiItr).el2;
616  tmpJpsi.el2 = (*jpsiItr).el1;
617  tmpJpsi.collection1 = (*jpsiItr).collection2;
618  tmpJpsi.collection2 = (*jpsiItr).collection1;
619  }
620  if (oppCh && (opposite || all) ) jpsis.push_back(tmpJpsi);
621  if (sameCh && (same || all) ) jpsis.push_back(tmpJpsi);
622 
623  } // end of for loop
624 
625  return(jpsis);
626  }

◆ sysInitialize()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysInitialize ( )
overridevirtualinherited

Perform system initialization for an algorithm.

We override this to declare all the elements of handle key arrays at the end of initialization. See comments on updateVHKA.

Reimplemented in DerivationFramework::CfAthAlgTool, AthCheckedComponent< AthAlgTool >, AthCheckedComponent<::AthAlgTool >, and asg::AsgMetadataTool.

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ trackMomentum()

TVector3 Analysis::JpsiFinder_ee::trackMomentum ( const xAOD::Vertex vxCandidate,
int  trkIndex 
) const

Definition at line 664 of file JpsiFinder_ee.cxx.

665  {
666  double px = 0., py = 0., pz = 0.;
667  if (0 != vxCandidate) {
668  const Trk::TrackParameters* aPerigee = vxCandidate->vxTrackAtVertex()[trkIndex].perigeeAtVertex();
669  px = aPerigee->momentum()[Trk::px];
670  py = aPerigee->momentum()[Trk::py];
671  pz = aPerigee->momentum()[Trk::pz];
672  }
673  TVector3 mom(px,py,pz);
674  return mom;
675  }

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::updateVHKA ( Gaudi::Details::PropertyBase &  )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308  {
309  // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310  // << " size: " << m_vhka.size() << endmsg;
311  for (auto &a : m_vhka) {
312  std::vector<SG::VarHandleKey*> keys = a->keys();
313  for (auto k : keys) {
314  k->setOwner(this);
315  }
316  }
317  }

Member Data Documentation

◆ m_allChCombs

bool Analysis::JpsiFinder_ee::m_allChCombs
private

Definition at line 101 of file JpsiFinder_ee.h.

◆ m_allElectrons

bool Analysis::JpsiFinder_ee::m_allElectrons
private

Definition at line 85 of file JpsiFinder_ee.h.

◆ m_Chi2Cut

double Analysis::JpsiFinder_ee::m_Chi2Cut
private

Definition at line 98 of file JpsiFinder_ee.h.

◆ m_collAnglePhi

double Analysis::JpsiFinder_ee::m_collAnglePhi
private

Definition at line 97 of file JpsiFinder_ee.h.

◆ m_collAngleTheta

double Analysis::JpsiFinder_ee::m_collAngleTheta
private

Definition at line 96 of file JpsiFinder_ee.h.

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_diElectrons

bool Analysis::JpsiFinder_ee::m_diElectrons
private

Definition at line 88 of file JpsiFinder_ee.h.

◆ m_doTagAndProbe

bool Analysis::JpsiFinder_ee::m_doTagAndProbe
private

Definition at line 116 of file JpsiFinder_ee.h.

◆ m_egammaCuts

bool Analysis::JpsiFinder_ee::m_egammaCuts
private

Definition at line 114 of file JpsiFinder_ee.h.

◆ m_electronCollectionKey

SG::ReadHandleKey<xAOD::ElectronContainer> Analysis::JpsiFinder_ee::m_electronCollectionKey
private

Definition at line 102 of file JpsiFinder_ee.h.

◆ m_elel

bool Analysis::JpsiFinder_ee::m_elel
private

Definition at line 82 of file JpsiFinder_ee.h.

◆ m_elSelection

std::string Analysis::JpsiFinder_ee::m_elSelection
private

Definition at line 115 of file JpsiFinder_ee.h.

◆ m_eltrk

bool Analysis::JpsiFinder_ee::m_eltrk
private

Definition at line 83 of file JpsiFinder_ee.h.

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_gsfCaloLinkKey

SG::ReadDecorHandleKey<xAOD::ElectronContainer> Analysis::JpsiFinder_ee::m_gsfCaloLinkKey
private
Initial value:
{
this, "GSFCaloLink", "Electrons.gsfCaloTrackParticleLink",
"ReadHandleKey for electron link to GSFCalo refitted TrackParticle"
}

Definition at line 104 of file JpsiFinder_ee.h.

◆ m_higherPt

double Analysis::JpsiFinder_ee::m_higherPt
private

Definition at line 92 of file JpsiFinder_ee.h.

◆ m_invMassLower

double Analysis::JpsiFinder_ee::m_invMassLower
private

Definition at line 95 of file JpsiFinder_ee.h.

◆ m_invMassUpper

double Analysis::JpsiFinder_ee::m_invMassUpper
private

Definition at line 94 of file JpsiFinder_ee.h.

◆ m_iV0VertexFitter

ToolHandle< Trk::IVertexFitter > Analysis::JpsiFinder_ee::m_iV0VertexFitter
private

Definition at line 110 of file JpsiFinder_ee.h.

◆ m_iVertexFitter

ToolHandle< Trk::IVertexFitter > Analysis::JpsiFinder_ee::m_iVertexFitter
private

Definition at line 109 of file JpsiFinder_ee.h.

◆ m_oppChOnly

bool Analysis::JpsiFinder_ee::m_oppChOnly
private

Definition at line 99 of file JpsiFinder_ee.h.

◆ m_partPropSvc

ServiceHandle<IPartPropSvc> Analysis::JpsiFinder_ee::m_partPropSvc {this, "PartPropSvc", "PartPropSvc"}
private

Definition at line 113 of file JpsiFinder_ee.h.

◆ m_sameChOnly

bool Analysis::JpsiFinder_ee::m_sameChOnly
private

Definition at line 100 of file JpsiFinder_ee.h.

◆ m_thresholdPt

double Analysis::JpsiFinder_ee::m_thresholdPt
private

Definition at line 91 of file JpsiFinder_ee.h.

◆ m_trk1M

double Analysis::JpsiFinder_ee::m_trk1M
private

Definition at line 89 of file JpsiFinder_ee.h.

◆ m_trk2M

double Analysis::JpsiFinder_ee::m_trk2M
private

Definition at line 90 of file JpsiFinder_ee.h.

◆ m_TrkParticleCollection

SG::ReadHandleKey<xAOD::TrackParticleContainer> Analysis::JpsiFinder_ee::m_TrkParticleCollection
private

Definition at line 103 of file JpsiFinder_ee.h.

◆ m_trkSelector

ToolHandle< Trk::ITrackSelectorTool > Analysis::JpsiFinder_ee::m_trkSelector
private

Definition at line 111 of file JpsiFinder_ee.h.

◆ m_trkThresholdPt

double Analysis::JpsiFinder_ee::m_trkThresholdPt
private

Definition at line 93 of file JpsiFinder_ee.h.

◆ m_trktrk

bool Analysis::JpsiFinder_ee::m_trktrk
private

Definition at line 84 of file JpsiFinder_ee.h.

◆ m_useTrackMeasurement

bool Analysis::JpsiFinder_ee::m_useTrackMeasurement
private

Definition at line 86 of file JpsiFinder_ee.h.

◆ m_useV0Fitter

bool Analysis::JpsiFinder_ee::m_useV0Fitter
private

Definition at line 87 of file JpsiFinder_ee.h.

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< AlgTool > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vertexEstimator

ToolHandle< InDet::VertexPointEstimator > Analysis::JpsiFinder_ee::m_vertexEstimator
private

Definition at line 112 of file JpsiFinder_ee.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< AlgTool > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.


The documentation for this class was generated from the following files:
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
xAOD::TrackParticle_v1::pt
virtual double pt() const override final
The transverse momentum ( ) of the particle.
Definition: TrackParticle_v1.cxx:74
Analysis::JpsiFinder_ee::m_invMassUpper
double m_invMassUpper
Definition: JpsiFinder_ee.h:94
Trk::py
@ py
Definition: ParamDefs.h:60
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
xAOD::BPhysHelper
Definition: BPhysHelper.h:71
test_pyathena.px
px
Definition: test_pyathena.py:18
Analysis::JpsiFinder_ee::m_trkSelector
ToolHandle< Trk::ITrackSelectorTool > m_trkSelector
Definition: JpsiFinder_ee.h:111
P4Helpers::invMass
double invMass(const I4Momentum &pA, const I4Momentum &pB)
invariant mass from two I4momentum references
Definition: P4Helpers.h:252
find
std::string find(const std::string &s)
return a remapped string
Definition: hcg.cxx:135
Analysis::JpsiFinder_ee::getPairs2Colls
std::vector< JpsiEECandidate > getPairs2Colls(const std::vector< const xAOD::TrackParticle * > &, const std::vector< const xAOD::Electron * > &, bool) const
Definition: JpsiFinder_ee.cxx:520
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:67
index
Definition: index.py:1
Trk::ParametersT
Dummy class used to allow special convertors to be called for surfaces owned by a detector element.
Definition: EMErrorDetail.h:25
xAOD::Vertex_v1::trackParticleLinks
const TrackParticleLinks_t & trackParticleLinks() const
Get all the particles associated with the vertex.
Analysis::JpsiFinder_ee::m_TrkParticleCollection
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_TrkParticleCollection
Definition: JpsiFinder_ee.h:103
Analysis::JpsiFinder_ee::m_useTrackMeasurement
bool m_useTrackMeasurement
Definition: JpsiFinder_ee.h:86
AthCommonDataStore< AthCommonMsg< AlgTool > >::m_evtStore
StoreGateSvc_t m_evtStore
Pointer to StoreGate (event store by default)
Definition: AthCommonDataStore.h:390
AthCommonDataStore< AthCommonMsg< AlgTool > >::m_vhka
std::vector< SG::VarHandleKeyArray * > m_vhka
Definition: AthCommonDataStore.h:398
xAOD::P4Helpers::deltaPhi
double deltaPhi(double phiA, double phiB)
delta Phi in range [-pi,pi[
Definition: xAODP4Helpers.h:69
Analysis::JpsiFinder_ee::m_sameChOnly
bool m_sameChOnly
Definition: JpsiFinder_ee.h:100
SG::ConstAccessor
Helper class to provide constant type-safe access to aux data.
Definition: ConstAccessor.h:55
Analysis::JpsiFinder_ee::m_collAnglePhi
double m_collAnglePhi
Definition: JpsiFinder_ee.h:97
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
Analysis::JpsiFinder_ee::m_elSelection
std::string m_elSelection
Definition: JpsiFinder_ee.h:115
Analysis::JpsiFinder_ee::m_electronCollectionKey
SG::ReadHandleKey< xAOD::ElectronContainer > m_electronCollectionKey
Definition: JpsiFinder_ee.h:102
Trk::pz
@ pz
global momentum (cartesian)
Definition: ParamDefs.h:61
python.TrigEgammaFastCaloHypoTool.same
def same(val, tool)
Definition: TrigEgammaFastCaloHypoTool.py:10
Analysis::JpsiFinder_ee::m_doTagAndProbe
bool m_doTagAndProbe
Definition: JpsiFinder_ee.h:116
SG::VarHandleKeyArray::setOwner
virtual void setOwner(IDataHandleHolder *o)=0
Analysis::JpsiFinder_ee::passesEgammaCuts
bool passesEgammaCuts(const xAOD::Electron *) const
Definition: JpsiFinder_ee.cxx:632
Analysis::JpsiFinder_ee::m_trk2M
double m_trk2M
Definition: JpsiFinder_ee.h:90
Analysis::JpsiFinder_ee::getPairs
std::vector< JpsiEECandidate > getPairs(const std::vector< const xAOD::TrackParticle * > &) const
Definition: JpsiFinder_ee.cxx:466
IDTPMcnv.htype
htype
Definition: IDTPMcnv.py:29
Analysis::JpsiFinder_ee::m_trkThresholdPt
double m_trkThresholdPt
Definition: JpsiFinder_ee.h:93
Analysis::JpsiFinder_ee::fit
xAOD::Vertex * fit(const std::vector< const xAOD::TrackParticle * > &, const xAOD::TrackParticleContainer *importedTrackCollection) const
Definition: JpsiFinder_ee.cxx:396
Analysis::ELEL
@ ELEL
Definition: JpsiFinder_ee.h:46
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
AthCommonDataStore::declareGaudiProperty
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
Definition: AthCommonDataStore.h:156
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:209
ParticleGun_EoverP_Config.mom
mom
Definition: ParticleGun_EoverP_Config.py:63
AthCommonDataStore
Definition: AthCommonDataStore.h:52
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
Analysis::JpsiFinder_ee::m_invMassLower
double m_invMassLower
Definition: JpsiFinder_ee.h:95
SG::ReadDecorHandle
Handle class for reading a decoration on an object.
Definition: StoreGate/StoreGate/ReadDecorHandle.h:94
python.TrigInDetConfig.inputTracks
inputTracks
Definition: TrigInDetConfig.py:191
Analysis::JpsiFinder_ee::m_thresholdPt
double m_thresholdPt
Definition: JpsiFinder_ee.h:91
lumiFormat.i
int i
Definition: lumiFormat.py:85
Analysis::JpsiFinder_ee::m_allChCombs
bool m_allChCombs
Definition: JpsiFinder_ee.h:101
beamspotman.n
n
Definition: beamspotman.py:727
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
Definition: AthCommonDataStore.h:145
Analysis::JpsiFinder_ee::m_partPropSvc
ServiceHandle< IPartPropSvc > m_partPropSvc
Definition: JpsiFinder_ee.h:113
Analysis::JpsiFinder_ee::m_Chi2Cut
double m_Chi2Cut
Definition: JpsiFinder_ee.h:98
xAOD::Vertex_v1::setTrackParticleLinks
void setTrackParticleLinks(const TrackParticleLinks_t &trackParticles)
Set all track particle links at once.
chi2
double chi2(TH1 *h0, TH1 *h1)
Definition: comparitor.cxx:525
Analysis::JpsiFinder_ee::m_diElectrons
bool m_diElectrons
Definition: JpsiFinder_ee.h:88
Trk::px
@ px
Definition: ParamDefs.h:59
Amg::pz
@ pz
Definition: GeoPrimitives.h:40
Analysis::JpsiFinder_ee::m_trktrk
bool m_trktrk
Definition: JpsiFinder_ee.h:84
PlotRamps.passesSelection
def passesSelection(gain, offset)
Definition: PlotRamps.py:8
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
AthCommonDataStore< AthCommonMsg< AlgTool > >::m_detStore
StoreGateSvc_t m_detStore
Pointer to StoreGate (detector store by default)
Definition: AthCommonDataStore.h:393
DerivationFramework::TrackBag
std::vector< const xAOD::TrackParticle * > TrackBag
Definition: JpsiPlusDpstCascade.cxx:25
xAOD::Vertex_v1::clearTracks
void clearTracks()
Remove all tracks from the vertex.
Definition: Vertex_v1.cxx:331
Trk::ParametersBase
Definition: ParametersBase.h:55
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
Analysis::JpsiFinder_ee::selectCharges
std::vector< JpsiEECandidate > selectCharges(const std::vector< JpsiEECandidate > &, const std::string &) const
Definition: JpsiFinder_ee.cxx:592
Analysis::JpsiFinder_ee::m_vertexEstimator
ToolHandle< InDet::VertexPointEstimator > m_vertexEstimator
Definition: JpsiFinder_ee.h:112
DataVector
Derived DataVector<T>.
Definition: DataVector.h:795
Analysis::JpsiFinder_ee::m_iVertexFitter
ToolHandle< Trk::IVertexFitter > m_iVertexFitter
Definition: JpsiFinder_ee.h:109
Analysis::JpsiFinder_ee::m_egammaCuts
bool m_egammaCuts
Definition: JpsiFinder_ee.h:114
AthAlgTool::AthAlgTool
AthAlgTool()
Default constructor:
SG::VarHandleKeyArray::renounce
virtual void renounce()=0
SG::HandleClassifier::type
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
Definition: HandleClassifier.h:54
Analysis::JpsiFinder_ee::m_higherPt
double m_higherPt
Definition: JpsiFinder_ee.h:92
Analysis::JpsiFinder_ee::m_oppChOnly
bool m_oppChOnly
Definition: JpsiFinder_ee.h:99
Amg::py
@ py
Definition: GeoPrimitives.h:39
selection
const std::string selection
Definition: fbtTestBasics.cxx:75
merge_scale_histograms.doc
string doc
Definition: merge_scale_histograms.py:9
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
Analysis::JpsiFinder_ee::m_trk1M
double m_trk1M
Definition: JpsiFinder_ee.h:89
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
xAOD::Electron_v1
Definition: Electron_v1.h:34
Cut::all
@ all
Definition: SUSYToolsAlg.cxx:67
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
Trk::ParametersBase::momentum
const Amg::Vector3D & momentum() const
Access method for the momentum.
DeMoScan.index
string index
Definition: DeMoScan.py:362
Trk::TrkV0VertexFitter::fit
virtual xAOD::Vertex * fit(const std::vector< const xAOD::TrackParticle * > &vectorTrk, const Amg::Vector3D &startingPoint) const override
Interface for xAOD::TrackParticle with Amg::Vector3D starting point.
Definition: TrkV0VertexFitter.cxx:83
a
TList * a
Definition: liststreamerinfos.cxx:10
h
Analysis::JpsiFinder_ee::getInvariantMass
double getInvariantMass(const JpsiEECandidate &, const std::vector< double > &) const
Definition: JpsiFinder_ee.cxx:570
xAOD::Vertex_v1
Class describing a Vertex.
Definition: Vertex_v1.h:42
Analysis::JpsiFinder_ee::m_collAngleTheta
double m_collAngleTheta
Definition: JpsiFinder_ee.h:96
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
Analysis::JpsiFinder_ee::m_elel
bool m_elel
Definition: JpsiFinder_ee.h:82
xAOD::EgammaParameters::electron
@ electron
Definition: EgammaEnums.h:18
SG::VarHandleBase::vhKey
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
Definition: StoreGate/src/VarHandleBase.cxx:629
Analysis::ELTRK
@ ELTRK
Definition: JpsiFinder_ee.h:46
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:801
Trk::TrkV0VertexFitter
This class implements a vertex fitting algorithm optimised for V0 finding.
Definition: TrkV0VertexFitter.h:40
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
Analysis::JpsiFinder_ee::m_eltrk
bool m_eltrk
Definition: JpsiFinder_ee.h:83
xAOD::Vertex_v1::vxTrackAtVertex
std::vector< Trk::VxTrackAtVertex > & vxTrackAtVertex()
Non-const access to the VxTrackAtVertex vector.
Definition: Vertex_v1.cxx:181
Analysis::JpsiFinder_ee::m_allElectrons
bool m_allElectrons
Definition: JpsiFinder_ee.h:85
Analysis::TRK2
@ TRK2
Definition: JpsiFinder_ee.h:46
Analysis::JpsiFinder_ee::m_iV0VertexFitter
ToolHandle< Trk::IVertexFitter > m_iV0VertexFitter
Definition: JpsiFinder_ee.h:110
Analysis::JpsiFinder_ee::m_gsfCaloLinkKey
SG::ReadDecorHandleKey< xAOD::ElectronContainer > m_gsfCaloLinkKey
Definition: JpsiFinder_ee.h:104
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
Analysis::JpsiFinder_ee::m_useV0Fitter
bool m_useV0Fitter
Definition: JpsiFinder_ee.h:87
InDetDD::electrons
@ electrons
Definition: InDetDD_Defs.h:17
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
fitman.k
k
Definition: fitman.py:528
ParticleConstants::PDG2011::electronMassInMeV
constexpr double electronMassInMeV
the mass of the electron (in MeV)
Definition: ParticleConstants.h:26