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

L2 tracks. More...

#include <TrigTrackSelector.h>

Inheritance diagram for TrigTrackSelector:
Collaboration diagram for TrigTrackSelector:

Public Types

typedef std::vector< ElementLink< xAOD::TrackParticleContainer > > TrackParticleLinks_t
 

Public Member Functions

 TrigTrackSelector (TrackFilter *selector)
 use a radius of 47 mm corresponding to the Run 1 pixel inner radius For the IBL it should be 32 mm, but this was kept as 47 mm for consistency of the definition. More...
 
 TrigTrackSelector (TrackFilter *selector, double radius)
 
 TrigTrackSelector (TrackFilter *selector, int selectPdgId, int selectParentPdgId)
 
 TrigTrackSelector (TrackFilter *selector, double radius, int selectPdgId, int selectParentPdgId)
 
template<typename T >
 TrigTrackSelector (T &tm, TrackFilter *selector, double radius=default_radius(), int selectPdgId=0, int selectParentPdgId=0)
 
template<typename T >
 TrigTrackSelector (T tbegin, T tend, TrackFilter *selector, double radius=default_radius(), int selectPdgId=0, int selectParentPdgId=0)
 
 ~TrigTrackSelector ()
 
virtual TrackSelectorclone () override
 
void setBeamline (double x, double y, double z=0)
 
double getBeamX () const
 
double getBeamY () const
 
double getBeamZ () const
 
void correctTracks (bool b=true)
 
virtual void clear () override
 
bool selectTrack (const TrigInDetTrack *track, const TrigInDetTrackTruthMap *truthMap=0)
 neater code to make use of vector function also for a single ancestor pdgid, instead of the full code duplication, but less efficienct as it then needs to create a single element vector for each particle, to avoid the code duplication. More...
 
void selectTracks (const TrigInDetTrackCollection *trigtracks, const TrigInDetTrackTruthMap *truthMap=0)
 
bool selectTrack (const Rec::TrackParticle *track)
 
void selectTracks (const Rec::TrackParticleContainer *trigtracks)
 
void selectTracks (const TruthParticleContainer *truthtracks)
 
void selectTracks (const xAOD::TruthParticleContainer *truthtracks)
 
void truthBeamline (const xAOD::TruthParticleContainer *truthtracks, double &x0, double &y0)
 extract all the tracks from a xAOD::TruthParticle collection and histogram the x and y production coordinates to determine the event "beamline" position More...
 
bool selectTrack (HepMC::ConstGenParticlePtr track)
 
bool selectTrack (const TruthParticle &track)
 
bool selectTrack (const TruthParticle *track)
 
bool selectTrack (const xAOD::TruthParticle *track, double x0=0, double y0=0)
 
TIDA::TrackmakeTrack (HepMC::ConstGenParticlePtr track)
 
TIDA::TrackmakeTrack (const TruthParticle *track, unsigned long tid=0)
 
bool selectTrack (const Trk::Track *track)
 
void selectTracks (const TrackCollection *trigtracks)
 
bool selectTrack (const xAOD::TrackParticle *track, void *=0)
 legacy run 2 selector access More...
 
void selectTracks (const xAOD::TrackParticleContainer *tracks, void *=0)
 
void selectTracks (xAOD::TrackParticleContainer::const_iterator trackitr, xAOD::TrackParticleContainer::const_iterator trackend, void *=0)
 MT selector access. More...
 
void selectTracks (const TrackParticleLinks_t &tracks)
 
void correctToBeamline (double &z0, double &dz0, double &d0, double &dd0, double theta, double phi)
 
virtual bool addTrack (TIDA::Track *t, bool(*f)(const TIDA::Track *)=0)
 
virtual void addTracks (std::vector< TIDA::Track * > &t, bool(*f)(const TIDA::Track *)=0)
 
const std::vector< TIDA::Track * > & tracks () const
 
std::vector< TIDA::Track * > tracks (TrackFilter *selector) const
 
unsigned size () const
 
void delete_track (TIDA::Track *t)
 

Static Public Member Functions

static double default_radius ()
 

Protected Member Functions

const xAOD::TruthParticlefromAncestor (const int pdg_id, const xAOD::TruthParticle *p) const
 recursive functions to identify whether a particle comes from some particle of a specific PDG ID, or some numb er of specified PDG IDs. More...
 
const xAOD::TruthParticlefromAncestor (const std::vector< int > &ids, const xAOD::TruthParticle *p) const
 recursive function to identify whether a particle comes from some other number of ancestor particles, with the pdgids passed in as a vector. More...
 
virtual void cleanup (TIDA::Track *)
 

Protected Attributes

std::vector< TIDA::Track * > m_tracks
 
TrackFilterm_selector
 

Private Attributes

unsigned long m_id
 
double m_xBeam
 
double m_yBeam
 
double m_zBeam
 
bool m_correctTrkTracks
 
double m_radius
 
int m_selectPdgId
 
int m_selectParentPdgId
 

Static Private Attributes

static const double s_default_radius = 47
 NB: This was 47 for Run 2, but with the addition of the IBL it should be 32 It was kept at 47 for all Run 2 and migration to MT, but for Run 3 we really want it changed to be 32
More...
 

Detailed Description

L2 tracks.

TruthMap offline and EF MC truth FrameWork includes #include "GaudiKernel/ServiceHandle.h" #include "GaudiKernel/IPartPropSvc.h" absolutely pathetic!! write my own class TrigInDetAnalysis classes

Definition at line 58 of file TrigTrackSelector.h.

Member Typedef Documentation

◆ TrackParticleLinks_t

Definition at line 62 of file TrigTrackSelector.h.

Constructor & Destructor Documentation

◆ TrigTrackSelector() [1/6]

TrigTrackSelector::TrigTrackSelector ( TrackFilter selector)
inline

use a radius of 47 mm corresponding to the Run 1 pixel inner radius For the IBL it should be 32 mm, but this was kept as 47 mm for consistency of the definition.

this should be changed to 32 mm for Run 3

Definition at line 70 of file TrigTrackSelector.h.

70 : TrigTrackSelector( selector, default_radius(), 0, 0 ) { }

◆ TrigTrackSelector() [2/6]

TrigTrackSelector::TrigTrackSelector ( TrackFilter selector,
double  radius 
)
inline

Definition at line 72 of file TrigTrackSelector.h.

72 : TrigTrackSelector( selector, radius, 0, 0 ) { }

◆ TrigTrackSelector() [3/6]

TrigTrackSelector::TrigTrackSelector ( TrackFilter selector,
int  selectPdgId,
int  selectParentPdgId 
)
inline

Definition at line 74 of file TrigTrackSelector.h.

74 : TrigTrackSelector( selector, default_radius(), selectPdgId, selectParentPdgId ) { }

◆ TrigTrackSelector() [4/6]

TrigTrackSelector::TrigTrackSelector ( TrackFilter selector,
double  radius,
int  selectPdgId,
int  selectParentPdgId 
)

Definition at line 24 of file TrigTrackSelector.cxx.

24  :
26  m_correctTrkTracks(false),
27  m_radius(radius), m_selectPdgId(selectPdgId), m_selectParentPdgId(selectParentPdgId) {
28 }

◆ TrigTrackSelector() [5/6]

template<typename T >
TrigTrackSelector::TrigTrackSelector ( T &  tm,
TrackFilter selector,
double  radius = default_radius(),
int  selectPdgId = 0,
int  selectParentPdgId = 0 
)
inline

Definition at line 79 of file TrigTrackSelector.h.

79  :
80  TrigTrackSelector( tm.begin(), tm.end(), selector, radius, selectPdgId, selectParentPdgId ) {
81  }

◆ TrigTrackSelector() [6/6]

template<typename T >
TrigTrackSelector::TrigTrackSelector ( tbegin,
tend,
TrackFilter selector,
double  radius = default_radius(),
int  selectPdgId = 0,
int  selectParentPdgId = 0 
)
inline

Definition at line 84 of file TrigTrackSelector.h.

84  :
85  TrigTrackSelector( selector, radius, selectPdgId, selectParentPdgId ) {
86  selectTracks( tbegin, tend );
87  }

◆ ~TrigTrackSelector()

TrigTrackSelector::~TrigTrackSelector ( )
inline

Definition at line 90 of file TrigTrackSelector.h.

90 { clear(); }

Member Function Documentation

◆ addTrack()

virtual bool TrackSelector::addTrack ( TIDA::Track t,
bool(*)(const TIDA::Track *)  f = 0 
)
inlinevirtualinherited

Definition at line 35 of file Trigger/TrigAnalysis/TrigInDetAnalysis/TrigInDetAnalysis/TrackSelector.h.

35  {
36  //std::cout << "addtrack() before f: t " << *t << " " << size() << "\t f " << f << std::endl;
37  if ( f==0 ) {
38  if ( m_selector && m_selector->select(t) ) { m_tracks.push_back(t); return true; }
39  else { cleanup(t); }
40  }
41  else {
42  if ( f(t) ) { m_tracks.push_back(t); return true; }
43  else { cleanup(t); }
44  }
45  return false;
46  }

◆ addTracks()

virtual void TrackSelector::addTracks ( std::vector< TIDA::Track * > &  t,
bool(*)(const TIDA::Track *)  f = 0 
)
inlinevirtualinherited

Definition at line 48 of file Trigger/TrigAnalysis/TrigInDetAnalysis/TrigInDetAnalysis/TrackSelector.h.

48  {
49  for ( size_t i=0 ; i<t.size() ; i++ ) addTrack( t[i], f );
50  }

◆ cleanup()

virtual void TrackSelector::cleanup ( TIDA::Track )
inlineprotectedvirtualinherited

◆ clear()

virtual void TrigTrackSelector::clear ( )
inlineoverridevirtual

Reimplemented from TrackSelector.

Definition at line 102 of file TrigTrackSelector.h.

102 { for ( size_t i=m_tracks.size() ; i-- ; ) delete m_tracks[i]; m_tracks.clear(); }

◆ clone()

virtual TrackSelector* TrigTrackSelector::clone ( )
inlineoverridevirtual

Implements TrackSelector.

Definition at line 92 of file TrigTrackSelector.h.

92 { return new TrigTrackSelector(*this); }

◆ correctToBeamline()

void TrigTrackSelector::correctToBeamline ( double &  z0,
double &  dz0,
double &  d0,
double &  dd0,
double  theta,
double  phi 
)

make sure that users have set the beamline parameters

error estimates

Definition at line 1276 of file TrigTrackSelector.cxx.

1278  {
1279 
1281 
1282  // if ( m_first ) {
1283  // if ( m_xBeam==0 && m_yBeam==0 ) {
1284  // std::cerr << "TrigTrackSelector::correctToBeamline() WARNING -- Beamline set to (0,0) -- WARNING" << std::endl;
1285  // }
1286  // else {
1287  // std::cout << "TrigTrackSelector::correctToBeamline() Beamline set to " << m_xBeam << " " << m_yBeam << std::endl;
1288  // }
1289  // m_first = false;
1290  // }
1291 
1292 
1293  // double theta = 2*std::atan( exp( (-1)*eta ) );
1294  double z0t = z0 + ((std::cos(phi)*m_xBeam + std::sin(phi)*m_yBeam)/std::tan(theta));
1295  double a0t = d0 + std::sin(phi)*m_xBeam - std::cos(phi)*m_yBeam;
1296 
1298  double dz0t = dz0 + ((std::cos(phi)*m_xBeam + std::sin(phi)*m_yBeam)/std::tan(theta));
1299  double da0t = dd0 + std::sin(phi)*m_xBeam - std::cos(phi)*m_yBeam;
1300 
1301  z0 = z0t;
1302  d0 = a0t;
1303 
1304  dz0 = dz0t;
1305  dd0 = da0t;
1306 }

◆ correctTracks()

void TrigTrackSelector::correctTracks ( bool  b = true)
inline

Definition at line 100 of file TrigTrackSelector.h.

100 { m_correctTrkTracks = b; }

◆ default_radius()

static double TrigTrackSelector::default_radius ( )
inlinestatic

Definition at line 188 of file TrigTrackSelector.h.

188 { return s_default_radius; }

◆ delete_track()

void TrackSelector::delete_track ( TIDA::Track t)
inlineinherited

Definition at line 69 of file Trigger/TrigAnalysis/TrigInDetAnalysis/TrigInDetAnalysis/TrackSelector.h.

69  {
70  m_tracks.erase( std::remove( m_tracks.begin(), m_tracks.end(), t ), m_tracks.end() );
71  }

◆ fromAncestor() [1/2]

const xAOD::TruthParticle * TrigTrackSelector::fromAncestor ( const int  pdg_id,
const xAOD::TruthParticle p 
) const
protected

recursive functions to identify whether a particle comes from some particle of a specific PDG ID, or some numb er of specified PDG IDs.

recursive function to identify whether a particle comes from some other ancestor particle at any point in its history - checks its parents and then function calls itself to check their parents etc., until it either finds the pdgid it is looking for, or it has no more ancestors if it finds an appropriate ancestor it returns the pointer to it, otherwise it returns a nullptr

finds an appropriate ancestor and returns the pointer to it, otherwise it just returns a nullptr

Definition at line 39 of file TrigTrackSelector.cxx.

39  {
40  if ( p==nullptr ) return nullptr;
41  if ( MC::isElectron(p) || MC::isMuon(p) ) return nullptr; //don't want light leptons from eg tau decays - they are found directly
42  if ( p->absPdgId()==pdg_id ) {
43  return p; // recursive stopping conditions
44  }
45  auto vertex = p->prodVtx();
46  if ( vertex == nullptr ) {
47  return nullptr; // has no production vertex !!!
48  }
49  if ( vertex->nIncomingParticles() < 1 ) {
50  return nullptr; // recursive stopping conditions
51  }
52  for( unsigned ip = 0; ip < vertex->nIncomingParticles(); ip++ ) {
53  auto* in = vertex->incomingParticle(ip);
54  auto parent = fromAncestor( pdg_id, in);
55  if ( parent!=nullptr ) {
56  if (parent->absPdgId()==pdg_id) return parent;
57  }
58  }
59 
60  return nullptr;
61 }

◆ fromAncestor() [2/2]

const xAOD::TruthParticle * TrigTrackSelector::fromAncestor ( const std::vector< int > &  ids,
const xAOD::TruthParticle p 
) const
protected

recursive function to identify whether a particle comes from some other number of ancestor particles, with the pdgids passed in as a vector.

Any such ancestors at point in it's history will do - checks it's parents and then calls the function calls itself to check the parent's parents etc, until it either finds one of the pdgids it is looking for, or it has no more ancestors if it finds an appropriate ancestor it returns the pointer to it, otherwise it returns a nullptr

Definition at line 73 of file TrigTrackSelector.cxx.

73  {
74  if ( p==nullptr ) return nullptr;
75  if (MC::isElectron(p) || MC::isMuon(p)) return nullptr; //don't want light leptons from eg tau decays - they are found directly
76  for ( size_t i=ids.size() ; i-- ; ) {
77  if ( p->absPdgId()==ids[i] ) return p; // recursive stopping conditions
78  }
79 
80  auto vertex = p->prodVtx();
81  if ( vertex == nullptr ) return nullptr; // has no production vertex !!!
82 
83  if ( vertex->nIncomingParticles()<1 ) return nullptr; // recursive stopping conditions
84 
85  for( unsigned ip = 0; ip < vertex->nIncomingParticles(); ip++ ) {
86  auto* in = vertex->incomingParticle(ip);
87  auto parent = fromAncestor( ids, in);
88  if ( parent!=nullptr ) {
89  for ( size_t i=ids.size() ; i-- ; ) {
90  if ( parent->absPdgId()==ids[i] ) return parent;
91  }
92  }
93  }
94 
95  return nullptr;
96 }

◆ getBeamX()

double TrigTrackSelector::getBeamX ( ) const
inline

Definition at line 96 of file TrigTrackSelector.h.

96 { return m_xBeam; }

◆ getBeamY()

double TrigTrackSelector::getBeamY ( ) const
inline

Definition at line 97 of file TrigTrackSelector.h.

97 { return m_yBeam; }

◆ getBeamZ()

double TrigTrackSelector::getBeamZ ( ) const
inline

Definition at line 98 of file TrigTrackSelector.h.

98 { return m_zBeam; }

◆ makeTrack() [1/2]

TIDA::Track * TrigTrackSelector::makeTrack ( const TruthParticle track,
unsigned long  tid = 0 
)

check for final state

the is our new "final state" requirement the inner and outer radii are in some sense arbitrary - these correspond to an envelope around the pixel detector, so the track must pass through the entire pixel detector NB: In order to ensure you don't miss any tracks they really need to be the same ie if a track brems in your "volume" then you will miss that track, and also the resulting track, even if it is a high et track

keep anything over 10 GeV with the old requirement

avoid default (unset) TruthParticle charge

only use charged tracks

what a faff - refuse to mess about with the classes to swim tracks etc - why can't they just encode this sort of information in the class!! It's not as if it doesn't actually have members for anything else useless!! Classes should be designed for ease of use !!!!

is there a sign issue here ?

correct back to the beamline

static HepPDT::ParticleDataTable* m_pdt = new ParticleDataTable();

// Get the Particle Properties Service if ( m_pdt==0 ) {
ServiceHandle<IPartPropSvc> partPropSvc("PartPropSvc", "TrigTestMonToolAC"); // , name()); if ( !partPropSvc.retrieve().isSuccess() ) { m_pdt = partPropSvc->PDT(); } else { std::cerr << " Could not initialize Particle Properties Service" << std::endl; return; // StatusCode::FAILURE; } }

how about storing barcode/status/pidg info?

this isn't good!! but it will do for testing

probably won't work either // FIXME barode-based

get the production vertex for the z0 and d0 but should we store the z0 of the production vertex? or swim the track to the perigee point with respect to 0,0 and use the parameters there?

what to do with these???

Definition at line 700 of file TrigTrackSelector.cxx.

700  {
701 
702  if ( track==0 ) return 0;
703  if ( !MC::isStable(track)) return 0;
704 
705 
706  double phi = track->phi();
707  double eta = track->eta();
708 
712  double xp[3] = { 0, 0, 0 };
713 
714  if ( track->genParticle()->production_vertex() ) {
715  xp[0] = track->genParticle()->production_vertex()->position().x();
716  xp[1] = track->genParticle()->production_vertex()->position().y();
717  xp[2] = track->genParticle()->production_vertex()->position().z();
718  }
719 
720  // CHANGED BY JK - z0 with respect to (0,0)
721  // double z0 = xp[2];
722  double theta = 2*std::atan( exp( (-1)*eta ) );
723  double z0 = xp[2] - (xp[0]*std::cos(phi) + xp[1]*std::sin(phi))/std::tan(theta);
724 
725  double xd[3] = { 0, 0, 0 };
726 
727  if ( track->genParticle()->end_vertex() ) {
728  xd[0] = track->genParticle()->end_vertex()->position().x();
729  xd[1] = track->genParticle()->end_vertex()->position().y();
730  xd[2] = track->genParticle()->end_vertex()->position().z();
731  }
732 
733  double rp = std::sqrt( xp[0]*xp[0] + xp[1]*xp[1] );
734  double rd = std::sqrt( xd[0]*xd[0] + xd[1]*xd[1] );
735 
736 
737  bool final_state = false;
738 
750  const double inner_radius = m_radius;
751  const double outer_radius = m_radius;
752  if ( ( track->genParticle()->production_vertex() && rp<=inner_radius ) &&
753  ( track->genParticle()->end_vertex()==0 || rd>outer_radius ) ) final_state = true;
754 
755 
756  if ( !final_state ) return 0;
757 
768 
769  double q = track->charge();
770 
771  static const particleType ptype;
772 
774  if ( q==-999 ) q = ptype.charge( track->pdgId() );
775 
777  if ( q==0 ) return 0;
778 
779  double pT = q*track->pt();
780 
781 
782  double d0 = 0;
783 
788 
790 
791 
792  // CHANGED BY JK - d0 with respect to (0,0)
793  // d0 = q*rp*std::sin(phi);
794  d0 = xp[1]*std::cos(phi) - xp[0]*std::sin(phi);
795 
796 
798 
799  double dz0 = 0;
800  double dd0 = 0;
801 
802  correctToBeamline( z0, dz0, d0, dd0, theta, phi );
803 
804 
805 
807 
821 
823  int author = track->pdgId();
824  int barcode = HepMC::barcode(track);
825 
826 
827  unsigned long id = (unsigned long)track;
828  if ( tid!=0 ) id = tid;
829 
833 
834 
836 
837  // std::cout << "\t\t\tSUTT Truth track"
838  // << "\teta=" << eta // << " +- " << (*trackitr)->params()->deta()
839  // << "\tphi=" << phi // << " +- " << (*trackitr)->params()->dphi()
840  // << "\tz0=" << z0
841  // << "\tpT=" << pT // << "\t( " << 1/qoverp << ")"
842  // << "\td0=" << d0
843  // << "\tauthor=" << author
844  // << std::endl;
845 
846 
847 
848  TIDA::Track* t = new TIDA::Track(eta, phi, z0, d0, pT, 0, 0,
849  0, 0, 0, 0, 0,
850  0, 0, 0, 0,
851  0, 0, 0, 0,
852  author, false, barcode, -1,
853  false,
854  id ) ;
855 
856  return t;
857 
858 }

◆ makeTrack() [2/2]

TIDA::Track * TrigTrackSelector::makeTrack ( HepMC::ConstGenParticlePtr  track)

Definition at line 688 of file TrigTrackSelector.cxx.

688  {
689 //AV Using memory to get some value is not a good idea. This is not a repruducible/portable way, but I leave it as is.
690 #ifdef HEPMC3
691  unsigned long id = (unsigned long)(track.get());
692 #else
693  unsigned long id = (unsigned long)track;
694 #endif
696  return makeTrack( &t, id );
697 }

◆ selectTrack() [1/8]

bool TrigTrackSelector::selectTrack ( const Rec::TrackParticle track)

temporarily remove interaction mean z position

<< check this <<–

check this !!!

now some ridiculous code to get the author of the TrackParticle (offline) tracks

Definition at line 200 of file TrigTrackSelector.cxx.

200  {
201 
202  // do the track extraction stuff here....
203 
204  static const int hpmap[20] = { 0, 1, 2, 7, 8, 9, 3, 4, 5, 6, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 };
205 
206  if ( track ) {
207 
208 #ifdef TRKPARAMETERS_MEASUREDPERIGEE_H
209  const Trk::MeasuredPerigee* measPer = track->measuredPerigee();
210 #else
211  const Trk::Perigee* measPer = track->measuredPerigee();
212 #endif
213  // CLHEP::HepVector perigeeParams = measPer->parameters();
214 
215  double pT = measPer->pT();
216  double eta = measPer->eta();
217  double phi = measPer->parameters()[Trk::phi0];
218  double z0 = measPer->parameters()[Trk::z0] + m_zBeam;
219  double d0 = measPer->parameters()[Trk::d0];
220 
221  double theta = measPer->parameters()[Trk::theta];
222  double p = 1/measPer->parameters()[Trk::qOverP];
223 
224  // AAARCH!!!!! the TrackParticle pT is NOT SIGNED!!!! ( I ask you! )
225  if ( measPer->parameters()[Trk::qOverP]<0 && pT>0 ) pT *= -1;
226 
227 #ifdef TRKPARAMETERS_MEASUREDPERIGEE_H
228  const Trk::ErrorMatrix err = measPer->localErrorMatrix();
229  double dtheta = err.error(Trk::theta);
230  double dqovp = err.error(Trk::qOverP);
231  double covthetaOvP = err.covValue(Trk::qOverP,Trk::theta);
232 #else
233  double dtheta = std::sqrt((*measPer->covariance())(Trk::theta,Trk::theta));
234  double dqovp = std::sqrt((*measPer->covariance())(Trk::qOverP,Trk::qOverP));
235  double covthetaOvP = (*measPer->covariance())(Trk::qOverP,Trk::theta);
236 #endif
237 
238 
239  double deta = 0.5*dtheta/(std::cos(0.5*theta)*std::cos(0.5*theta)*std::tan(0.5*theta));
240 
241 #ifdef TRKPARAMETERS_MEASUREDPERIGEE_H
242  double dphi = err.error(Trk::phi0);
243  double dz0 = err.error(Trk::z0);
244  double dd0 = err.error(Trk::d0);
245 #else
246  double dphi = std::sqrt((*measPer->covariance())(Trk::phi0,Trk::phi0));
247  double dz0 = std::sqrt((*measPer->covariance())(Trk::z0,Trk::z0));
248  double dd0 = std::sqrt((*measPer->covariance())(Trk::d0,Trk::d0));
249 #endif
250 
251  double dpT = 0;
252 
253 
254  double sintheta = std::sin(theta);
255  double costheta = std::cos(theta);
256  double dpt2 = (p*p*sintheta)*(p*p*sintheta)*dqovp*dqovp + (p*costheta)*(p*costheta)*dtheta*dtheta - 2*(p*p*sintheta)*(p*costheta)*covthetaOvP;
257 
258  if ( dpt2>0 ) dpT = std::sqrt( dpt2 );
259 
260  // Check number of hits
261  // NB: a spacepoint is two offline "hits", so a pixel spacepoint is really
262  // 2 "hits" and an offline SCT "hit" is really a 1D cluster, so two intersecting
263  // stereo clusters making a spacepoint are two "hits"
264  const Trk::TrackSummary *summary = track->trackSummary();
265  int nBlayerHits = 2*summary->get(Trk::numberOfBLayerHits);
267  int nSctHits = summary->get(Trk::numberOfSCTHits);
268  int nStrawHits = summary->get(Trk::numberOfTRTHits);
269  int nTrHits = summary->get(Trk::numberOfTRTHighThresholdHits);
270 
271  int nSiHits = nPixelHits + nSctHits;
272  bool expectBL = false; // Not stored for Rec::TrackParticle
273 
274  const Trk::FitQuality *quality = track->fitQuality();
275  double chi2 = quality->chiSquared();
276  double dof = quality->numberDoF();
277 
278  unsigned bitmap = 0;
279 
280 
281  unsigned long id = (unsigned long)track;
282 
283  for ( int ih=0 ; ih<20 ; ih++ ) {
284  if ( summary->isHit(Trk::DetectorType(ih)) ) bitmap |= ( 1<<hpmap[ih] );
285  }
286 
289 
290  // std::cout << "fetching author info :" << track->info().trackFitter() << ":"
291  // << track->info().dumpInfo() << ": bm 0x" << std::hex << bitmap << std::dec << std::endl;
292 
293  int fitter = track->info().trackFitter();
294  std::string dumpinfo = track->info().dumpInfo();
295 
296  int trackAuthor = -1;
298  if ( dumpinfo.find("TRTStandalone")!=std::string::npos) trackAuthor = 2;
299  else if ( dumpinfo.find("TRTSeededTrackFinder")!=std::string::npos) trackAuthor = 1;
300  else trackAuthor = 0;
301  }
302 
303 #if 0
304  std::cout << "\t\t\tSUTT TP track"
305  << "\teta=" << eta // << " +- " << (*trackitr)->params()->deta()
306  << "\tphi=" << phi // << " +- " << (*trackitr)->params()->dphi()
307  << "\tz0=" << z0
308  << "\tpT=" << pT // << "\t( " << 1/qoverp << ")"
309  << "\td0=" << d0
310  << "\tNsi=" << nSiHits
311  << "\tNtrt=" << nTrHits
312  << "\tNstr=" << nStrawHits
313  << "\tauthor=" << trackAuthor
314  << std::endl;
315 #endif
316 
317  // Create and save Track
318 
319  TIDA::Track* t = new TIDA::Track(eta, phi, z0, d0, pT, chi2, dof,
320  deta, dphi, dz0, dd0, dpT,
321  nBlayerHits, nPixelHits, nSctHits, nSiHits,
322  nStrawHits, nTrHits, bitmap, 0,
323  trackAuthor, false, -1, -1,
324  expectBL, id) ;
325 
326  // std::cout << "SUTT TP track " << *t << "\t0x" << std::hex << bitmap << std::dec << std::endl;
327 
328  if ( !addTrack( t ) ){
329  delete t;
330  return false;
331  }
332  return true;
333 
334  }
335  return false;
336 }

◆ selectTrack() [2/8]

bool TrigTrackSelector::selectTrack ( const TrigInDetTrack track,
const TrigInDetTrackTruthMap truthMap = 0 
)

neater code to make use of vector function also for a single ancestor pdgid, instead of the full code duplication, but less efficienct as it then needs to create a single element vector for each particle, to avoid the code duplication.

Perhaps something can be done for the compiler optimisation to realise this and somehow
reduce the opverhead of creating the single int vector - need to investiogate this more thoroghly before including this, as it would be a much neater solution

not definied ofr TrigInDetTracks

Definition at line 116 of file TrigTrackSelector.cxx.

116  {
117  // do the track extraction stuff here....
118  if ( track ) {
119 
120  double eta = track->param()->eta();
121  double phi = track->param()->phi0();
122  double z0 = track->param()->z0();
123  double pT = track->param()->pT();
124  double d0 = track->param()->a0();
125 
126  double deta = track->param()->eeta();
127  double dphi = track->param()->ephi0();
128  double dz0 = track->param()->ez0();
129  double dpT = track->param()->epT();
130  double dd0 = track->param()->ea0();
131 
132  double theta = 2*std::atan( exp( (-1)*eta ) );
133  correctToBeamline( z0, dz0, d0, dd0, theta, phi );
134 
135  int algoid = track->algorithmId();
136 
137  int nBlayerHits = (track->HitPattern() & 0x1);
138  int nPixelHits = 2 * track->NPixelSpacePoints(); // NB: for comparison with offline
139  int nSctHits = 2 * track->NSCT_SpacePoints(); // a spacepoint is 2 "hits"
140  int nStrawHits = track->NStrawHits();
141  int nTrHits = track->NTRHits();
142 
143  int nSiHits = nPixelHits + nSctHits;
144 
145  bool expectBL = false; //not filled in
146 
147  unsigned long id = (unsigned long)track;
148 
149  unsigned hitPattern = track->HitPattern();
150  unsigned multiPattern = 0;
151 
152  double chi2 = track->chi2();
153  double dof = 0;
154 
155  bool truth = false;
156  int match_barcode = -1;
157 
158  if ( truthMap ) {
159  const TrigInDetTrackTruth* trackTruth = truthMap->truth(track);
160  if (trackTruth!=0 && trackTruth->nrMatches() > 0) {
161  match_barcode = HepMC::barcode(trackTruth->bestSiMatch()); // FIXME barcode-based
162  truth = true;
163  }
164  }
165 
166 
167  TIDA::Track* t = new TIDA::Track( eta, phi, z0, d0, pT, chi2, dof,
168  deta, dphi, dz0, dd0, dpT,
169  nBlayerHits, nPixelHits, nSctHits, nSiHits,
170  nStrawHits, nTrHits,
171  hitPattern, multiPattern,
172  algoid, truth, -1, match_barcode,
173  expectBL, id) ;
174 
175  // std::cout << "SUTT ID track " << *t << "\t0x" << std::hex << track->HitPattern() << std::dec << std::endl;
176 
177  if ( !addTrack( t ) ){
178  delete t;
179  return false;
180  }
181  return true;
182  }
183  return false;
184 }

◆ selectTrack() [3/8]

bool TrigTrackSelector::selectTrack ( const Trk::Track track)

a covariance!

check this <<–

now some ridiculous code to get the author of the TrackParticle (offline) tracks

Definition at line 863 of file TrigTrackSelector.cxx.

863  {
864 
865  // do the track extraction stuff here....
866 
867  static const int hpmap[20] = { 0, 1, 2, 7, 8, 9, 3, 4, 5, 6, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 };
868  // std::cout << __FILE__<< " " <<__LINE__<<std::endl;
869 
870  if ( track ) {
871 
872  // const Trk::Perigee* startPerigee = track->perigeeParameters();
873 
874 #ifdef TRKPARAMETERS_MEASUREDPERIGEE_H
875  const Trk::MeasuredPerigee* startPerigee = dynamic_cast<const Trk::MeasuredPerigee*>(track->perigeeParameters());
876  // const Trk::MeasuredPerigee* measPer = startPerigee; // just out of laziness
877 #else
878  const Trk::Perigee* startPerigee = track->perigeeParameters();
879  const Trk::Perigee* measPer = startPerigee; // just out of laziness
880 #endif
881 
882 
883  // CLHEP::HepVector perigeeParams = measPer->parameters();
884  // double pT = measPer->pT();
885  // double eta = measPer->eta();
886  // double phi = perigeeParams[Trk::phi0];
887  // double z0 = perigeeParams[Trk::z0];
888  // double d0 = perigeeParams[Trk::d0];
889  // // AAARCH!!!!! the TrackParticle pT is NOT SIGNED!!!! ( I ask you! )
890  // if ( perigeeParams[Trk::qOverP]<0 ) pT *= -1;
891  // std::cout <<pT1<<" pt1vspT "<<pT<<std::endl;
892 
893  if (startPerigee){
894 
895  double theta = startPerigee->parameters()[Trk::theta];
896  double p = 1/startPerigee->parameters()[Trk::qOverP];
897  double qOverPt = startPerigee->parameters()[Trk::qOverP]/std::sin(theta);
898  double charge = startPerigee->charge();
899  double eta = startPerigee->eta();
900  double phi = startPerigee->parameters()[Trk::phi0];
901  double z0 = startPerigee->parameters()[Trk::z0];
902  double d0 = startPerigee->parameters()[Trk::d0];
903  // double pT = (1./qOverPt)*(charge);
904  double pT = (1./qOverPt); // always use signed PT
905 
906  if ( charge<0 && pT>0 ) pT *= -1;
907  if ( charge<0 && p>0 ) p *= -1;
908 
909 
910 
911 #ifdef TRKPARAMETERS_MEASUREDPERIGEE_H
912  const Trk::ErrorMatrix err = startPerigee->localErrorMatrix();
913  double dtheta = err.error(Trk::theta);
914  double dqovp = err.error(Trk::qOverP);
915  double covthetaOvP = err.covValue(Trk::qOverP,Trk::theta);
916 
917  double dphi = err.error(Trk::phi0);
918  double dz0 = err.error(Trk::z0);
919  double dd0 = err.error(Trk::d0);
920 #else
921  double dtheta = std::sqrt((*measPer->covariance())(Trk::theta,Trk::theta));
922  double dqovp = std::sqrt((*measPer->covariance())(Trk::qOverP,Trk::qOverP));
923  double covthetaOvP = (*measPer->covariance())(Trk::qOverP,Trk::theta);
924 
925  double dphi = std::sqrt((*measPer->covariance())(Trk::phi0,Trk::phi0));
926  double dz0 = std::sqrt((*measPer->covariance())(Trk::z0,Trk::z0));
927  double dd0 = std::sqrt((*measPer->covariance())(Trk::d0,Trk::d0));
928 #endif
929 
930  double deta = 0.5*dtheta/(std::cos(0.5*theta)*std::cos(0.5*theta)*std::tan(0.5*theta));
931 
932 
933  if ( m_correctTrkTracks ) correctToBeamline( z0, dz0, d0, dd0, theta, phi );
934 
935  double dpT = 0;
936 
937 
938  double sintheta = std::sin(theta);
939  double costheta = std::cos(theta);
940  double dpT2 = (p*p*sintheta)*(p*p*sintheta)*dqovp*dqovp + (p*costheta)*(p*costheta)*dtheta*dtheta - 2*(p*p*sintheta)*(p*costheta)*covthetaOvP;
941 
942  if ( dpT2>0 ) dpT = std::sqrt( dpT2 );
943 
944  // Check number of hits
945  // NB: a spacepoint is two offline "hits", so a pixel spacepoint is really
946  // 2 "hits" and an offline SCT "hit" is really a 1D cluster, so two intersetcting
947  // stereo clusters making a spacepoint are two "hits"
948  // const Trk::TrackSummary *summary = dynamic_cast<const Trk::TrackSummary*>(track->trackSummary());
949  //ToolHandle< Trk::ITrackSummaryTool > m_trackSumTool;
950  //m_trackSumTool = ToolHandle<Trk::ITrackSummaryTool>("Trk::TrackSummaryTool/InDetTrackSummaryTool");
951  //const Trk::TrackSummary* summary = NULL;
952  //summary = m_trackSumTool->createSummary(*track);
953 
954  const Trk::TrackSummary * summary = track->trackSummary();
955  int nBlayerHits = 0;
956  int nPixelHits = 0;
957  int nSctHits = 0;
958  int nStrawHits = 0;
959  int nTrHits = 0;
960  int nSiHits = 0;
961  bool expectBL = false; // Not stored for Trk::Track
962  unsigned bitmap = 0;
963 
964  if(summary==0){
965  std::cerr << "Could not create TrackSummary - Track will likely fail hits requirements" << std::endl;
966  }
967  else{
968  nBlayerHits = 2*summary->get(Trk::numberOfBLayerHits);
970  nSctHits = summary->get(Trk::numberOfSCTHits);
971  nStrawHits = summary->get(Trk::numberOfTRTHits);
973  nSiHits = nPixelHits + nSctHits;
974 
975  for ( int ih=0 ; ih<20 ; ih++ ) {
976  if ( summary->isHit(Trk::DetectorType(ih)) ) bitmap |= ( 1<<hpmap[ih] );
977  }
978  }
979 
980  unsigned long id = (unsigned long)track;
981  double chi2 = 0;
982  double dof = 0;
983  //const Trk::FitQuality *quality = dynamic_cast<const Trk::FitQuality*>(track->fitQuality());
984  const Trk::FitQuality *quality = (track->fitQuality());
985  if(quality==0) std::cerr << "Could not create FitQuality - Track will likely fail hits requirements" << std::endl;
986  else{
987  chi2 = quality->chiSquared();
988  dof = quality->numberDoF();
989  }
990 
991  int trackAuthor = -1;
992 
995 
996  // std::cout << "fetching author info :" << track->info().trackFitter() << ":"
997  // << track->info().dumpInfo() << ": bm 0x" << std::hex << bitmap << std::dec << std::endl;
998 
999  int fitter = track->info().trackFitter();
1000  // std::string dumpinfo = track->info().dumpInfo();
1001 
1003  if ((track->info().dumpInfo()).find("TRTStandalone") != std::string::npos) trackAuthor = 2;
1004  else if ((track->info().dumpInfo()).find("TRTSeededTrackFinder") != std::string::npos) trackAuthor = 1;
1005  else trackAuthor = 0;
1006  }
1007 
1008  #if 0
1009  std::cout << "\t\t\tSUTT TP track"
1010  << "\teta=" << eta // << " +- " << (*trackitr)->params()->deta()
1011  << "\tphi=" << phi // << " +- " << (*trackitr)->params()->dphi()
1012  << "\tz0=" << z0
1013  << "\tpT=" << pT // << "\t( " << 1/qoverp << ")"
1014  << "\td0=" << d0
1015  << "\tNsi=" << nSiHits
1016  << "\tNtrt=" << nTrHits
1017  << "\tNstr=" << nStrawHits
1018  << "\tauthor=" << trackAuthor
1019  << std::endl;
1020  #endif
1021  // Create and save Track
1022  TIDA::Track* t = new TIDA::Track(eta, phi, z0, d0, pT, chi2, dof,
1023  deta, dphi, dz0, dd0, dpT,
1024  nBlayerHits, nPixelHits, nSctHits, nSiHits,
1025  nStrawHits, nTrHits, bitmap, 0,
1026  trackAuthor, false, -1, -1,
1027  expectBL, id) ;
1028 
1029  if ( !addTrack( t ) ){
1030  delete t;
1031  return false;
1032  }
1033  return true;
1034 
1035  //std::cout << "SUTT TP track " << *t << "\t0x" << std::hex << bitmap << std::dec << std::endl;
1036  }
1037  }
1038 
1039  return false;
1040 }

◆ selectTrack() [4/8]

bool TrigTrackSelector::selectTrack ( const TruthParticle track)

Definition at line 522 of file TrigTrackSelector.cxx.

522  {
523 
524  return selectTrack( &track );
525 
526 }

◆ selectTrack() [5/8]

bool TrigTrackSelector::selectTrack ( const TruthParticle track)

Definition at line 530 of file TrigTrackSelector.cxx.

530  {
532  if ( t == 0 ) return false;
533  if ( !addTrack(t) ) {
534  delete t;
535  return false;
536  }
537  return true;
538 }

◆ selectTrack() [6/8]

bool TrigTrackSelector::selectTrack ( const xAOD::TrackParticle track,
void *  = 0 
)

legacy run 2 selector access

lazy just to avoid a find-replace of measPer to track

Grrrrr remove interaction mean z position!!!

protect against spurious qOverP = 0 BUT !!! this should NEVER happen !!! so shouldn't really have this failing silently, but not allowed to put in std::cerr output leave the original code in as this is mostly for a test

a covariance not an error

don't correct xaod tracks to the beamline

??? <<– check this

holes

cheat !! pack the holes into the hits so that eg int pixelholes() { return npix/1000; } int pixelhits() { return npix%1000; }

get the total number of holes as well

fit quality

Definition at line 1059 of file TrigTrackSelector.cxx.

1059  {
1060  // do the track extraction stuff here....
1061 
1062  // static int hpmap[20] = { 0, 1, 2, 7, 8, 9, 3, 4, 5, 6, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 };
1063 
1064  if ( track ) {
1065 
1067  const xAOD::TrackParticle* measPer = track;
1068 
1069  // CLHEP::HepVector perigeeParams = measPer->parameters();
1070 
1071  double pT = measPer->pt();
1072  double eta = measPer->eta();
1073  double phi = measPer->phi0();
1074  double z0 = measPer->z0() + measPer->vz();
1075  double d0 = measPer->d0();
1076 
1077  double theta = measPer->theta();
1078 
1083  // if ( measPer->qOverP()==0 ) return false;
1084  if ( measPer->qOverP()==0 ) throw std::runtime_error( "probable corrupted track - this should never happen" );
1085  double p = 1/measPer->qOverP();
1086 
1087  // AAARCH!!!!! the TrackParticle pT is NOT SIGNED!!!! ( I ask you! )
1088  if ( measPer->qOverP()<0 && pT>0 ) pT *= -1;
1089 
1090  double dtheta = std::sqrt(measPer->definingParametersCovMatrix()(Trk::theta,Trk::theta));
1091  double dqovp = std::sqrt(measPer->definingParametersCovMatrix()(Trk::qOverP,Trk::qOverP));
1092  double covthetaOvP = measPer->definingParametersCovMatrix()(Trk::qOverP,Trk::theta);
1093 
1094  double deta = 0.5*dtheta/(std::cos(0.5*theta)*std::cos(0.5*theta)*std::tan(0.5*theta)); // ???? CHECK THIS <<--
1095 
1096  double dphi = std::sqrt(measPer->definingParametersCovMatrix()(Trk::phi0,Trk::phi0));
1097  double dz0 = std::sqrt(measPer->definingParametersCovMatrix()(Trk::z0,Trk::z0));
1098  double dd0 = std::sqrt(measPer->definingParametersCovMatrix()(Trk::d0,Trk::d0));
1099 
1100  double dpT = 0;
1101 
1102 
1104  // if ( m_xBeam!=0 || m_yBeam!=0 ) correctToBeamline( z0, dz0, d0, dd0, theta, phi );
1105 
1106 
1107  double sintheta = std::sin(theta);
1108  double costheta = std::cos(theta);
1109  double dpt2 = (p*p*sintheta)*(p*p*sintheta)*dqovp*dqovp + (p*costheta)*(p*costheta)*dtheta*dtheta - 2*(p*p*sintheta)*(p*costheta)*covthetaOvP;
1110 
1111  if ( dpt2>0 ) dpT = std::sqrt( dpt2 );
1112 
1113  // Check number of hits
1114  // NB: a spacepoint is two offline "hits", so a pixel spacepoint is really
1115  // 2 "hits" and an offline SCT "hit" is really a 1D cluster, so two intersetcting
1116  // stereo clusters making a spacepoint are two "hits"
1117 
1118  uint8_t sum_nBlayerHits = 0;
1119  track->summaryValue( sum_nBlayerHits, xAOD::numberOfInnermostPixelLayerHits);
1120  int nBlayerHits = 2*sum_nBlayerHits;
1121 
1122  uint8_t sum_nPixelHits = 0;
1123  track->summaryValue( sum_nPixelHits, xAOD::numberOfPixelHits);
1124  int nPixelHits = 2*sum_nPixelHits;
1125 
1126  uint8_t sum_nSctHits = 0;
1127  track->summaryValue( sum_nSctHits, xAOD::numberOfSCTHits);
1128  int nSctHits = sum_nSctHits;
1129 
1130  uint8_t sum_nStrawHits = 0;
1131  track->summaryValue( sum_nStrawHits, xAOD::numberOfTRTHits);
1132  int nStrawHits = sum_nStrawHits;
1133 
1134  uint8_t sum_nTrtHits = 0;
1135  track->summaryValue( sum_nTrtHits, xAOD::numberOfTRTHighThresholdHits);
1136  int nTrtHits = sum_nTrtHits;
1137 
1138 
1139  uint8_t sum_expectBL = 0;
1140  track->summaryValue( sum_expectBL, xAOD::expectInnermostPixelLayerHit);
1141  bool expectBL = ( sum_expectBL ? true : false );
1142 
1144 
1145  uint8_t sum_sctholes = 0;
1146  track->summaryValue( sum_sctholes, xAOD::numberOfSCTHoles);
1147 
1148  uint8_t sum_pixholes = 0;
1149  track->summaryValue( sum_pixholes, xAOD::numberOfPixelHoles);
1150 
1154 
1155  nSctHits += 1000*sum_sctholes;
1156  nPixelHits += 1000*sum_pixholes;
1157 
1159  int nSiHits = nPixelHits + nSctHits;
1160 
1162 
1163  double chi2 = track->chiSquared();
1164  double dof = track->numberDoF();
1165 
1166  unsigned long id = (unsigned long)track;
1167 
1168  unsigned bitmap = track->hitPattern();
1169 
1170 
1171 
1172  double xbeam = track->vx();
1173  double ybeam = track->vy();
1174  double zbeam = track->vz();
1175 
1176  if ( xbeam!=getBeamX() || ybeam!=getBeamY() || zbeam!=getBeamZ() ) setBeamline( xbeam, ybeam, zbeam );
1177 
1178  int trackAuthor = 0;
1179 
1180  int fitter = track->trackFitter();
1181  std::bitset<xAOD::NumberOfTrackRecoInfo> patternrec = track->patternRecoInfo();
1182 
1183  //int icount = 0;<- never used if section below is commented
1184  for ( unsigned ipr=patternrec.size() ; ipr-- ; ) {
1185  if ( patternrec[ipr] ) {
1186  //icount++; <- never used if section below is commented
1187  trackAuthor |= (ipr >> 16);
1188  // static bool first = true;
1189  // if ( first && icount>1 ) {
1190  // std::cerr << "more than one pattern rec strategy " << ipr << "\t(suppressing further output)" << std::endl;
1191  // first = false;
1192  // }
1193  }
1194  }
1195 
1196  trackAuthor |= fitter;
1197 
1198  // if ( fitter>0 && fitter<Trk::TrackInfo::NumberOfTrackFitters ) {
1199  // if ( dumpinfo.find("TRTStandalone")!=std::string::npos) trackAuthor = 2;
1200  // else if ( dumpinfo.find("TRTSeededTrackFinder")!=std::string::npos) trackAuthor = 1;
1201  // else trackAuthor = 0;
1202  // }
1203 
1204 #if 0
1205  std::cout << "\t\t\tSUTT TP track"
1206  << "\teta=" << eta // << " +- " << (*trackitr)->params()->deta()
1207  << "\tphi=" << phi // << " +- " << (*trackitr)->params()->dphi()
1208  << "\tz0=" << z0
1209  << "\tpT=" << pT // << "\t( " << 1/qoverp << ")"
1210  << "\td0=" << d0
1211  << "\tNsi=" << nSiHits
1212  // << "\tNtrt=" << nTrtHits
1213  // << "\tNstr=" << nStrawHits
1214  << "\tfitter=" << fitter
1215  << "\tauthor=" << trackAuthor
1216  << "\tVTX x " << track->vx() << "\ty " << track->vy() << "\tz " << track->vz()
1217  << std::endl;
1218 #endif
1219 
1220  // Create and save Track
1221 
1222  TIDA::Track* t = new TIDA::Track( eta, phi, z0, d0, pT, chi2, dof,
1223  deta, dphi, dz0, dd0, dpT,
1224  nBlayerHits, nPixelHits, nSctHits, nSiHits,
1225  nStrawHits, nTrtHits, bitmap, 0,
1226  trackAuthor, false, -1, -1,
1227  expectBL, id) ;
1228 
1229  // std::cout << "SUTT TP track " << *t << "\t0x" << std::hex << bitmap << std::dec << std::endl;
1230 
1231  if ( !addTrack( t ) ){
1232  delete t;
1233  return false;
1234  }
1235  return true;
1236 
1237  }
1238  return false;
1239 
1240 
1241 }

◆ selectTrack() [7/8]

bool TrigTrackSelector::selectTrack ( const xAOD::TruthParticle track,
double  x0 = 0,
double  y0 = 0 
)

lazy just to avoid a find-replace of measPer to track

avoid default (unset) TruthParticle charge

only use charged tracks

need to calculate the origin, and the beamline, and the d0 and z0 with respect to the beamline leave this in until we have checked whether everything is implemented correctly

need to calculate d0 and z0 correctly.

these are the d0 and z at the point of closest approach to x0, y0, the event "beamline", which is the best that we can do for the moment

the is our new "final state" requirement the inner and outer radii are in some sense arbitrary - these correspond to an envelope around the pixel detector, so the track must pass through the entire pixel detector NB: In order to ensure you don't miss any tracks they really need to be the same ie if a track brems in your "volume" then you will miss that track, and also the resulting track, even if it is a high et track

was hardcoded as 47 - now is set from the constructor

get the total number of holes as well

useful debug info - leave in

Definition at line 544 of file TrigTrackSelector.cxx.

544  {
545  if ( track ) {
546 
547  if (!MC::isStable(track) ) return false;
548 
550  const xAOD::TruthParticle* measPer = track;
551 
552  double pT = measPer->pt();
553  double eta = measPer->eta();
554  double phi = measPer->phi();
555 
556  // AAARCH!!!!! the TrackParticle pT is NOT SIGNED!!!! ( I ask you! )
557  if ( measPer->charge()<0 && pT>0 ) pT *= -1;
558  double q = track->charge();
559 
560  static const particleType ptype;
561 
563  if ( q==-999 ) q = ptype.charge( track->pdgId() );
564 
566  if ( q==0 ) return 0;
567 
571  // double xbeam = getBeamX(); // track->vx();
572  // double ybeam = getBeamY(); // track->vy();
573  // double zbeam = getBeamZ(); // track->vz();
574 
575  if ( !track->hasProdVtx() ) return false;
576 
578 
579  double xp[3] = { measPer->prodVtx()->x(), measPer->prodVtx()->y(), measPer->prodVtx()->z() };
580  double xb[3] = { xp[0]-x0, xp[1]-y0, measPer->prodVtx()->z() };
581  double xd[3] = { 0, 0, 0 };
582 
583  if ( track->hasDecayVtx() ) {
584  xd[0] = track->decayVtx()->x();
585  xd[1] = track->decayVtx()->y();
586  xd[2] = track->decayVtx()->z();
587  }
588 
589  double rp = std::sqrt( xp[0]*xp[0] + xp[1]*xp[1] );
590  double rd = std::sqrt( xd[0]*xd[0] + xd[1]*xd[1] );
591 
594  double theta = 2*std::atan( std::exp( -eta ) );
595  double z0 = xb[2] - (xb[0]*std::cos(phi) + xb[1]*std::sin(phi))/std::tan(theta);
596  double d0 = xb[1]*std::cos(phi) - xb[0]*std::sin(phi);
597 
598  bool final_state = false;
599 
611  const double inner_radius = m_radius;
612  const double outer_radius = m_radius;
613 
614  if ( ( track->hasProdVtx() && rp<=inner_radius ) &&
615  ( !track->hasDecayVtx() || rd>outer_radius ) ) final_state = true;
616 
617  if ( !final_state ) return false;
618 
619  double deta = 0;
620  double dphi = 0;
621  double dz0 = 0;
622  double dd0 = 0;
623 
624  double dpT = 0;
625 
626  int nBlayerHits = 0;
627  int nPixelHits = 0;
628  int nSctHits = 0;
629  int nStrawHits = 0;
630  int nTrtHits = 0;
631 
632  double chi2 = 0;
633  double dof = 0;
634 
635  bool expectBL = false;
636 
637  nSctHits += 0;
638  nPixelHits += 0;
639 
641  int nSiHits = 0;
642 
643  unsigned long id = (unsigned long)track;
644 
645  unsigned bitmap = 0;
646 
647  int trackAuthor = track->pdgId();
648  int barcode = HepMC::barcode(track); // FIXME barcode-based
649 
650 #if 0
651  std::cout << "\t\t\tSUTT TP track"
652  << "\teta=" << eta
653  << "\tphi=" << phi
654  << "\tz0=" << z0
655  << "\tpT=" << pT
656  << "\td0=" << d0
657  << "\tauthor=" << trackAuthor
658  << "\tVTX x " << xp[0]<< "\ty " << xp[1] << "\tz " << xp[2]
659  << std::endl;
660 #endif
661 
662  // Create and save Track
663 
664  TIDA::Track* t = new TIDA::Track( eta, phi, z0, d0, pT, chi2, dof,
665  deta, dphi, dz0, dd0, dpT,
666  nBlayerHits, nPixelHits, nSctHits, nSiHits,
667  nStrawHits, nTrtHits, bitmap, 0,
668  trackAuthor, false, barcode, -1,
669  expectBL, id) ;
670 
672  // std::cout << "SUTT TP track " << *t << "\t0x" << std::hex << bitmap << std::dec << std::endl;
673 
674  // addTrack applies additional cuts using the Filter
675  if ( !addTrack( t ) ){
676  delete t;
677  return false;
678  }
679  }
680  return false;
681 
682 }

◆ selectTrack() [8/8]

bool TrigTrackSelector::selectTrack ( HepMC::ConstGenParticlePtr  track)

not a "final state" particle

set this so can use it as the identifier - don't forget to reset!!

Definition at line 500 of file TrigTrackSelector.cxx.

500  {
501 
503  if ( !MC::isStable(track) ) return false;
504 
506 //AV Using memory to get some value is not a good idea. This is not a repruducible/portable way, but I leave it as is.
507 #ifdef HEPMC3
508  m_id = (unsigned long)(track.get());
509 #else
510  m_id = (unsigned long)track;
511 #endif
512  bool sel;
514  m_id = 0;
515 
516  return sel;
517 
518 }

◆ selectTracks() [1/8]

void TrigTrackSelector::selectTracks ( const Rec::TrackParticleContainer trigtracks)

Definition at line 340 of file TrigTrackSelector.cxx.

340  {
341 
342  // std::cout << "\t\t\tSUTT \tTrackParticleContainer->size() = " << trigtracks->size() << std::endl;
343 
344  Rec::TrackParticleContainer::const_iterator trackitr = trigtracks->begin();
345  Rec::TrackParticleContainer::const_iterator trackend = trigtracks->end();
346 
347  while ( trackitr!=trackend ) {
348 
349  selectTrack( *trackitr );
350 
351  ++trackitr;
352 
353  } // loop over tracks
354 
355 }

◆ selectTracks() [2/8]

void TrigTrackSelector::selectTracks ( const TrackCollection trigtracks)

Definition at line 1043 of file TrigTrackSelector.cxx.

1043  {
1044 
1045  // std::cout << "\t\t\tSUTT \tTrackContainer->size() = " << trigtracks->size() << std::endl;
1046 
1047  TrackCollection::const_iterator trackitr = trigtracks->begin();
1048  TrackCollection::const_iterator trackend = trigtracks->end();
1049 
1050  while ( trackitr!=trackend ) {
1051  selectTrack( *trackitr );
1052  ++trackitr;
1053  } // loop over tracks
1054 
1055 }

◆ selectTracks() [3/8]

void TrigTrackSelector::selectTracks ( const TrackParticleLinks_t tracks)

Definition at line 1268 of file TrigTrackSelector.cxx.

1268  {
1269  for( const auto& track : tracks ) selectTrack( *track );
1270 }

◆ selectTracks() [4/8]

void TrigTrackSelector::selectTracks ( const TrigInDetTrackCollection trigtracks,
const TrigInDetTrackTruthMap truthMap = 0 
)

Definition at line 188 of file TrigTrackSelector.cxx.

188  {
189  // do the track extraction stuff here....
190  TrigInDetTrackCollection::const_iterator trackitr = trigtracks->begin();
191  TrigInDetTrackCollection::const_iterator trackend = trigtracks->end();
192  while ( trackitr!=trackend ) {
193  selectTrack( *trackitr, truthMap );
194  ++trackitr;
195  }
196 }

◆ selectTracks() [5/8]

void TrigTrackSelector::selectTracks ( const TruthParticleContainer truthtracks)

Definition at line 360 of file TrigTrackSelector.cxx.

360  {
361  // std::cout << "\t\t\tSUTT \tTrackParticleContainer->size() = " << trigtracks->size() << std::endl;
362 
363  TruthParticleContainer::const_iterator trackitr = truthtracks->begin();
364  TruthParticleContainer::const_iterator trackend = truthtracks->end();
365 
366  while ( trackitr!=trackend ) {
367 
368  selectTrack( *trackitr );
369 
370  ++trackitr;
371 
372  } // loop over tracks
373 
374 }

◆ selectTracks() [6/8]

void TrigTrackSelector::selectTracks ( const xAOD::TrackParticleContainer tracks,
void *  = 0 
)

Definition at line 1244 of file TrigTrackSelector.cxx.

1244  {
1245  // std::cout << "\t\t\tSUTT \tTrackContainer->size() = " << trigtracks->size() << std::endl;
1248  while ( trackitr!=trackend ) {
1249  selectTrack( *trackitr );
1250  ++trackitr;
1251  } // loop over tracks
1252 }

◆ selectTracks() [7/8]

void TrigTrackSelector::selectTracks ( const xAOD::TruthParticleContainer truthtracks)

get truth beamline

fix default (unset) TruthParticle charge

not just yet - save for later ... else ( gotPdgId && m_selectParentPdgIds.size()!=0 ) gotParentPdgId = fromAncestor(m_selectParentPdgIds, (*trackitr))!=nullptr;

Definition at line 455 of file TrigTrackSelector.cxx.

455  {
456 
457  xAOD::TruthParticleContainer::const_iterator trackitr = truthtracks->begin();
458  xAOD::TruthParticleContainer::const_iterator trackend = truthtracks->end();
459 
461  double x0 = 0;
462  double y0 = 0;
463 
464  truthBeamline( truthtracks, x0, y0 );
465 
466 
467  for ( ; trackitr!=trackend; ++trackitr) {
468 
469 
470  // Only select charged final state particles
471  double q = (*trackitr)->charge();
472 
474  static const particleType ptype;
475  if ( q==-999 ) q = ptype.charge( (*trackitr)->pdgId() );
476 
477  if (q == 0 || !MC::isStable(*trackitr) ) continue;
478 
479  // If looking for tau parents, don't select mu or e children
480 
481  // select based on the pdg of final state particle
482  bool gotPdgId = true;
483  if (m_selectPdgId!=0) gotPdgId = (*trackitr)->absPdgId()==m_selectPdgId;
484 
485  // select based on the pdg of the parent or ancestor
486  bool gotParentPdgId = true;
487  if ( gotPdgId && m_selectParentPdgId!=0 ) gotParentPdgId = fromAncestor(m_selectParentPdgId, (*trackitr))!=nullptr;
490 
491  if ( gotParentPdgId && gotPdgId ) selectTrack( *trackitr, x0, y0);
492 
493  } // loop over tracks
494 
495 }

◆ selectTracks() [8/8]

void TrigTrackSelector::selectTracks ( xAOD::TrackParticleContainer::const_iterator  trackitr,
xAOD::TrackParticleContainer::const_iterator  trackend,
void *  = 0 
)

MT selector access.

will need this printout during debugging, so leave commented until all the feature access has been properly debugged

Definition at line 1256 of file TrigTrackSelector.cxx.

1257  {
1260  // std::cout << "\t\t\tSUTT \tTrackContainer->size() = " << trigtracks->size() << std::endl;
1261  while ( trackitr!=trackend ) {
1262  selectTrack( *trackitr );
1263  ++trackitr;
1264  } // loop over tracks
1265 }

◆ setBeamline()

void TrigTrackSelector::setBeamline ( double  x,
double  y,
double  z = 0 
)
inline

Definition at line 94 of file TrigTrackSelector.h.

94 { m_xBeam = x; m_yBeam = y; m_zBeam=z; }

◆ size()

unsigned TrackSelector::size ( ) const
inlineinherited

Definition at line 63 of file Trigger/TrigAnalysis/TrigInDetAnalysis/TrigInDetAnalysis/TrackSelector.h.

63 { return m_tracks.size(); }

◆ tracks() [1/2]

const std::vector<TIDA::Track*>& TrackSelector::tracks ( ) const
inlineinherited

◆ tracks() [2/2]

std::vector<TIDA::Track*> TrackSelector::tracks ( TrackFilter selector) const
inlineinherited

Definition at line 55 of file Trigger/TrigAnalysis/TrigInDetAnalysis/TrigInDetAnalysis/TrackSelector.h.

55  {
56  if ( selector==0 ) return m_tracks;
57  std::vector<TIDA::Track*> t;
58  for ( int i=m_tracks.size() ; i-- ; ) if ( selector->select(m_tracks[i]) ) t.push_back(m_tracks[i]);
59  return t;
60  }

◆ truthBeamline()

void TrigTrackSelector::truthBeamline ( const xAOD::TruthParticleContainer truthtracks,
double &  x0,
double &  y0 
)

extract all the tracks from a xAOD::TruthParticle collection and histogram the x and y production coordinates to determine the event "beamline" position

histograms and book keeoing

positions

numbers of tracks

fill histograms ...

get track production vertex

add to the correct bins

calculate the most populous bin in x and y

require more than 1 particle for it to be classed a "vertex" therefore, for single particle Monte Carlo, this will not be updated and (0,0) will still be correctly used

Definition at line 381 of file TrigTrackSelector.cxx.

381  {
382 
383  x0 = 0;
384  y0 = 0;
385 
387 
388  int Nx = 300;
389  int Ny = 300;
390 
392  std::vector<double> xpos(Nx,0);
393  std::vector<double> ypos(Ny,0);
394 
396  std::vector<int> xn(Nx,0);
397  std::vector<int> yn(Ny,0);
398 
399  int xoffset = Nx/2;;
400  int yoffset = Ny/2;
401 
402  double deltax = 3.0/Nx;
403  double deltay = 3.0/Ny;
404 
406 
407  xAOD::TruthParticleContainer::const_iterator trackitr = truthtracks->begin();
408  xAOD::TruthParticleContainer::const_iterator trackend = truthtracks->end();
409 
410  for ( ; trackitr!=trackend ; ++trackitr ) {
411 
412  const xAOD::TruthParticle* track = (*trackitr);
413 
414  if ( !MC::isStable(track) || !track->hasProdVtx() ) continue;
415 
417 
418  double xp[3] = { track->prodVtx()->x(), track->prodVtx()->y(), track->prodVtx()->z() };
419 
421 
422  int ix = xp[0]/deltax + xoffset;
423  int iy = xp[1]/deltay + yoffset;
424 
425  if ( ix<0 || ix>=Nx || iy<0 || iy>=Nx ) continue;
426 
427  xpos[ix] += xp[0];
428  ypos[iy] += xp[1];
429 
430  xn[ix]++;
431  yn[iy]++;
432 
433  } // loop over tracks
434 
436 
437  int imx = 0;
438  int imy = 0;
439 
440  for ( size_t i=0 ; i<xpos.size() ; i++ ) {
441  if ( xn[i]>xn[imx] ) imx = i;
442  if ( yn[i]>yn[imy] ) imy = i;
443  }
444 
448  if ( xn[imx]>1 ) x0 = xpos[imx]/xn[imx];
449  if ( yn[imy]>1 ) y0 = ypos[imy]/yn[imy];
450 
451 }

Member Data Documentation

◆ m_correctTrkTracks

bool TrigTrackSelector::m_correctTrkTracks
private

Definition at line 198 of file TrigTrackSelector.h.

◆ m_id

unsigned long TrigTrackSelector::m_id
private

Definition at line 192 of file TrigTrackSelector.h.

◆ m_radius

double TrigTrackSelector::m_radius
private

Definition at line 200 of file TrigTrackSelector.h.

◆ m_selector

TrackFilter* TrackSelector::m_selector
protectedinherited

◆ m_selectParentPdgId

int TrigTrackSelector::m_selectParentPdgId
private

Definition at line 203 of file TrigTrackSelector.h.

◆ m_selectPdgId

int TrigTrackSelector::m_selectPdgId
private

Definition at line 202 of file TrigTrackSelector.h.

◆ m_tracks

std::vector<TIDA::Track*> TrackSelector::m_tracks
protectedinherited

◆ m_xBeam

double TrigTrackSelector::m_xBeam
private

Definition at line 194 of file TrigTrackSelector.h.

◆ m_yBeam

double TrigTrackSelector::m_yBeam
private

Definition at line 195 of file TrigTrackSelector.h.

◆ m_zBeam

double TrigTrackSelector::m_zBeam
private

Definition at line 196 of file TrigTrackSelector.h.

◆ s_default_radius

const double TrigTrackSelector::s_default_radius = 47
staticprivate

NB: This was 47 for Run 2, but with the addition of the IBL it should be 32 It was kept at 47 for all Run 2 and migration to MT, but for Run 3 we really want it changed to be 32

Definition at line 205 of file TrigTrackSelector.h.


The documentation for this class was generated from the following files:
particleType::charge
double charge(int id) const
Definition: particleType.h:121
TrigTrackSelector::m_radius
double m_radius
Definition: TrigTrackSelector.h:200
Trk::numberOfPixelHits
@ numberOfPixelHits
number of pixel layers on track with absence of hits
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:57
xAOD::TrackParticle_v1::pt
virtual double pt() const override final
The transverse momentum ( ) of the particle.
Definition: TrackParticle_v1.cxx:73
xAOD::numberOfPixelHoles
@ numberOfPixelHoles
number of pixel layers on track with absence of hits [unit8_t].
Definition: TrackingPrimitives.h:261
LArSamples::FitterData::fitter
const ShapeFitter * fitter
Definition: ShapeFitter.cxx:23
CalculateHighPtTerm.pT
pT
Definition: ICHEP2016/CalculateHighPtTerm.py:57
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
TrigTrackSelector::m_id
unsigned long m_id
Definition: TrigTrackSelector.h:192
Trk::numberOfTRTHighThresholdHits
@ numberOfTRTHighThresholdHits
total number of TRT hits which pass the high threshold
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:87
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:67
TrigTrackSelector::clear
virtual void clear() override
Definition: TrigTrackSelector.h:102
xAOD::uint8_t
uint8_t
Definition: Muon_v1.cxx:557
find
std::string find(const std::string &s)
return a remapped string
Definition: hcg.cxx:135
TrackSelector::TrackSelector
TrackSelector(TrackFilter *selector=0)
Definition: Trigger/TrigAnalysis/TrigInDetAnalysis/TrigInDetAnalysis/TrackSelector.h:28
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:83
Trk::ParametersT
Dummy class used to allow special convertors to be called for surfaces owned by a detector element.
Definition: EMErrorDetail.h:25
xAOD::TrackParticle_v1::eta
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
Definition: TrackParticle_v1.cxx:77
TrackSelector::addTrack
virtual bool addTrack(TIDA::Track *t, bool(*f)(const TIDA::Track *)=0)
Definition: Trigger/TrigAnalysis/TrigInDetAnalysis/TrigInDetAnalysis/TrackSelector.h:35
xAOD::TrackParticle_v1::vz
float vz() const
The z origin for the parameters.
theta
Scalar theta() const
theta method
Definition: AmgMatrixBasePlugin.h:75
xAOD::JetInput::Track
@ Track
Definition: JetContainerInfo.h:61
TruthParticle
Definition: PhysicsAnalysis/TruthParticleID/McParticleEvent/McParticleEvent/TruthParticle.h:58
TrigInDetTrackTruth::bestSiMatch
const HepMcParticleLink * bestSiMatch() const
returns best match according to the number of hits
Definition: TrigInDetTrackTruth.cxx:190
xAOD::TrackParticle_v1::z0
float z0() const
Returns the parameter.
Trk::z0
@ z0
Definition: ParamDefs.h:64
xAOD::numberOfPixelHits
@ numberOfPixelHits
these are the pixel hits, including the b-layer [unit8_t].
Definition: TrackingPrimitives.h:259
xAOD::expectInnermostPixelLayerHit
@ expectInnermostPixelLayerHit
Do we expect a 0th-layer barrel hit for this track?
Definition: TrackingPrimitives.h:236
xAOD::numberOfTRTHits
@ numberOfTRTHits
number of TRT hits [unit8_t].
Definition: TrackingPrimitives.h:275
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
drawFromPickle.cos
cos
Definition: drawFromPickle.py:36
drawFromPickle.exp
exp
Definition: drawFromPickle.py:36
x
#define x
TrigTrackSelector::TrigTrackSelector
TrigTrackSelector(TrackFilter *selector)
use a radius of 47 mm corresponding to the Run 1 pixel inner radius For the IBL it should be 32 mm,...
Definition: TrigTrackSelector.h:70
TrackFilter::select
virtual bool select(const TIDA::Track *t, const TIDARoiDescriptor *r=0)=0
particleType
Definition: particleType.h:29
IDTPM::nPixelHits
float nPixelHits(const U &p)
Definition: TrackParametersHelper.h:326
TrackSelector::cleanup
virtual void cleanup(TIDA::Track *)
Definition: Trigger/TrigAnalysis/TrigInDetAnalysis/TrigInDetAnalysis/TrackSelector.h:77
xAOD::TruthVertex_v1::y
float y() const
Vertex y displacement.
xAOD::TrackParticle_v1::d0
float d0() const
Returns the parameter.
drawFromPickle.atan
atan
Definition: drawFromPickle.py:36
TrigTrackSelector::correctToBeamline
void correctToBeamline(double &z0, double &dz0, double &d0, double &dd0, double theta, double phi)
Definition: TrigTrackSelector.cxx:1276
xAOD::numberOfTRTHighThresholdHits
@ numberOfTRTHighThresholdHits
number of TRT hits which pass the high threshold (only xenon counted) [unit8_t].
Definition: TrackingPrimitives.h:278
Trk::numberOfBLayerHits
@ numberOfBLayerHits
these are the hits in the 0th pixel layer?
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:51
Trk::ErrorMatrix
Definition: ErrorMatrixCnv_p1.h:25
TrigTrackSelector::getBeamX
double getBeamX() const
Definition: TrigTrackSelector.h:96
PixelModuleFeMask_create_db.remove
string remove
Definition: PixelModuleFeMask_create_db.py:83
TrackSelector::m_tracks
std::vector< TIDA::Track * > m_tracks
Definition: Trigger/TrigAnalysis/TrigInDetAnalysis/TrigInDetAnalysis/TrackSelector.h:82
python.TriggerHandler.tend
string tend
Definition: TriggerHandler.py:300
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:210
dqt_zlumi_pandas.err
err
Definition: dqt_zlumi_pandas.py:182
lumiFormat.i
int i
Definition: lumiFormat.py:85
z
#define z
Trk::theta
@ theta
Definition: ParamDefs.h:66
Trk::numberOfSCTHits
@ numberOfSCTHits
number of SCT holes
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:71
xAOD::EgammaHelpers::isElectron
bool isElectron(const xAOD::Egamma *eg)
is the object an electron (not Fwd)
Definition: EgammaxAODHelpers.cxx:12
HepMC::barcode
int barcode(const T *p)
Definition: Barcode.h:16
xAOD::TruthParticle_v1
Class describing a truth particle in the MC record.
Definition: TruthParticle_v1.h:37
sel
sel
Definition: SUSYToolsTester.cxx:97
xAOD::TruthParticle
TruthParticle_v1 TruthParticle
Typedef to implementation.
Definition: Event/xAOD/xAODTruth/xAODTruth/TruthParticle.h:15
chi2
double chi2(TH1 *h0, TH1 *h1)
Definition: comparitor.cxx:522
TRT::Track::d0
@ d0
Definition: InnerDetector/InDetCalibEvent/TRT_CalibData/TRT_CalibData/TrackInfo.h:62
test_pyathena.parent
parent
Definition: test_pyathena.py:15
find_tgc_unfilled_channelids.ip
ip
Definition: find_tgc_unfilled_channelids.py:3
hist_file_dump.f
f
Definition: hist_file_dump.py:135
drawFromPickle.tan
tan
Definition: drawFromPickle.py:36
Trk::FitQuality
Class to represent and store fit qualities from track reconstruction in terms of and number of degre...
Definition: FitQuality.h:97
TRT::Track::z0
@ z0
Definition: InnerDetector/InDetCalibEvent/TRT_CalibData/TRT_CalibData/TrackInfo.h:63
TrackSelector::m_selector
TrackFilter * m_selector
Definition: Trigger/TrigAnalysis/TrigInDetAnalysis/TrigInDetAnalysis/TrackSelector.h:85
xAOD::numberOfSCTHoles
@ numberOfSCTHoles
number of SCT holes [unit8_t].
Definition: TrackingPrimitives.h:270
MuonR4::SegmentFit::ParamDefs::x0
@ x0
plotBeamSpotCompare.xd
xd
Definition: plotBeamSpotCompare.py:220
TrigTrackSelector::m_zBeam
double m_zBeam
Definition: TrigTrackSelector.h:196
TrigTrackSelector::m_xBeam
double m_xBeam
Definition: TrigTrackSelector.h:194
TrigTrackSelector::selectTrack
bool selectTrack(const TrigInDetTrack *track, const TrigInDetTrackTruthMap *truthMap=0)
neater code to make use of vector function also for a single ancestor pdgid, instead of the full code...
Definition: TrigTrackSelector.cxx:116
TrigInDetTrackTruth
Definition: TrigInDetTrackTruth.h:36
xAOD::TruthParticle_v1::prodVtx
const TruthVertex_v1 * prodVtx() const
The production vertex of this particle.
Definition: TruthParticle_v1.cxx:80
MuonR4::SegmentFit::ParamDefs::y0
@ y0
Trk::numberOfTRTHits
@ numberOfTRTHits
number of TRT outliers
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:79
xAOD::TrackParticle_v1::phi0
float phi0() const
Returns the parameter, which has range to .
Definition: TrackParticle_v1.cxx:158
TrigTrackSelector::default_radius
static double default_radius()
Definition: TrigTrackSelector.h:188
TrigTrackSelector::fromAncestor
const xAOD::TruthParticle * fromAncestor(const int pdg_id, const xAOD::TruthParticle *p) const
recursive functions to identify whether a particle comes from some particle of a specific PDG ID,...
Definition: TrigTrackSelector.cxx:39
xAOD::TrackParticle_v1::qOverP
float qOverP() const
Returns the parameter.
xAOD::TrackParticle_v1::definingParametersCovMatrix
const ParametersCovMatrix_t definingParametersCovMatrix() const
Returns the 5x5 symmetric matrix containing the defining parameters covariance matrix.
Definition: TrackParticle_v1.cxx:246
TrackSelector::tracks
const std::vector< TIDA::Track * > & tracks() const
Definition: Trigger/TrigAnalysis/TrigInDetAnalysis/TrigInDetAnalysis/TrackSelector.h:53
Trk::TrackSummary
A summary of the information contained by a track.
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:287
Trk::d0
@ d0
Definition: ParamDefs.h:63
python.subdetectors.mmg.ids
ids
Definition: mmg.py:8
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:77
charge
double charge(const T &p)
Definition: AtlasPID.h:538
TrigTrackSelector::m_selectParentPdgId
int m_selectParentPdgId
Definition: TrigTrackSelector.h:203
xAOD::TruthParticle_v1::eta
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
Definition: TruthParticle_v1.cxx:174
TrigTrackSelector::selectTracks
void selectTracks(const TrigInDetTrackCollection *trigtracks, const TrigInDetTrackTruthMap *truthMap=0)
Definition: TrigTrackSelector.cxx:188
ParticleGun_SamplingFraction.radius
radius
Definition: ParticleGun_SamplingFraction.py:96
DataModelTestDataCommonDict::xb
DMTest::CView::Pers_t xb
Definition: DataModelTestDataCommonDict.h:55
xAOD::TruthVertex_v1::x
float x() const
Vertex x displacement.
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
Trk::DetectorType
DetectorType
enumerates the various detector types currently accessible from the isHit() method.
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:231
Trk::vertex
@ vertex
Definition: MeasurementType.h:21
MC::isStable
bool isStable(const T &p)
Identify if the particle is stable, i.e. has not decayed.
Definition: HepMCHelpers.h:45
TrigTrackSelector::m_correctTrkTracks
bool m_correctTrkTracks
Definition: TrigTrackSelector.h:198
python.selector.AtlRunQuerySelectorLhcOlc.selector
selector
Definition: AtlRunQuerySelectorLhcOlc.py:611
y
#define y
xAOD::TruthParticle_v1::phi
virtual double phi() const override final
The azimuthal angle ( ) of the particle.
Definition: TruthParticle_v1.cxx:181
xAOD::TruthVertex_v1::z
float z() const
Vertex longitudinal distance along the beam line form the origin.
CaloCondBlobAlgs_fillNoiseFromASCII.author
string author
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:26
TrigTrackSelector::setBeamline
void setBeamline(double x, double y, double z=0)
Definition: TrigTrackSelector.h:94
Trk::qOverP
@ qOverP
perigee
Definition: ParamDefs.h:67
TIDA::Track
Definition: Trigger/TrigAnalysis/TrigInDetAnalysis/TrigInDetAnalysis/Track.h:26
extractSporadic.q
list q
Definition: extractSporadic.py:98
TrigTrackSelector::getBeamZ
double getBeamZ() const
Definition: TrigTrackSelector.h:98
xAOD::TruthParticle_v1::pt
virtual double pt() const override final
The transverse momentum ( ) of the particle.
Definition: TruthParticle_v1.cxx:166
TrigInDetTrackTruthMap::truth
const TrigInDetTrackTruth * truth(const TrigInDetTrack *p_trig_trk) const
Definition: TrigInDetTrackTruthMap.cxx:82
xAOD::numberOfSCTHits
@ numberOfSCTHits
number of hits in SCT [unit8_t].
Definition: TrackingPrimitives.h:268
Trk::FitQuality::chiSquared
double chiSquared() const
returns the of the overall track fit
Definition: FitQuality.h:56
TrigTrackSelector::getBeamY
double getBeamY() const
Definition: TrigTrackSelector.h:97
TrigTrackSelector::truthBeamline
void truthBeamline(const xAOD::TruthParticleContainer *truthtracks, double &x0, double &y0)
extract all the tracks from a xAOD::TruthParticle collection and histogram the x and y production coo...
Definition: TrigTrackSelector.cxx:381
Trk::FitQuality::numberDoF
int numberDoF() const
returns the number of degrees of freedom of the overall track or vertex fit as integer
Definition: FitQuality.h:60
xAOD::track
@ track
Definition: TrackingPrimitives.h:512
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
TrigTrackSelector::m_yBeam
double m_yBeam
Definition: TrigTrackSelector.h:195
TrigInDetTrackTruth::nrMatches
unsigned int nrMatches() const
returns number of matching particles
Definition: TrigInDetTrackTruth.cxx:244
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
rp
ReadCards * rp
Definition: IReadCards.cxx:26
TrigTrackSelector::m_selectPdgId
int m_selectPdgId
Definition: TrigTrackSelector.h:202
Trk::TrackInfo::NumberOfTrackFitters
@ NumberOfTrackFitters
maximum number of enums
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/TrackInfo.h:71
TrigTrackSelector::makeTrack
TIDA::Track * makeTrack(HepMC::ConstGenParticlePtr track)
Definition: TrigTrackSelector.cxx:688
xAOD::TrackParticle_v1::theta
float theta() const
Returns the parameter, which has range 0 to .
Trk::phi0
@ phi0
Definition: ParamDefs.h:65
TrigTrackSelector::s_default_radius
static const double s_default_radius
NB: This was 47 for Run 2, but with the addition of the IBL it should be 32 It was kept at 47 for all...
Definition: TrigTrackSelector.h:205
xAOD::TruthParticle_v1::charge
double charge() const
Physical charge.
IDTPM::nSiHits
float nSiHits(const U &p)
Definition: TrackParametersHelper.h:399
zbeam
Definition: zbeam.h:24
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
xAOD::numberOfInnermostPixelLayerHits
@ numberOfInnermostPixelLayerHits
these are the hits in the 0th pixel barrel layer
Definition: TrackingPrimitives.h:237
isMuon
bool isMuon(const T &p)
Definition: AtlasPID.h:154
SCT_Monitoring::summary
@ summary
Definition: SCT_MonitoringNumbers.h:65