20#include "CLHEP/Vector/LorentzVector.h"
45 std::vector<AscObj_TruthPoint*> *
ascObjs;
57 Amg::Vector3D mom(p->momentum().px(),p->momentum().py(),p->momentum().pz());
58 double absmom(mom.mag());
61 Amg::Vector3D pos(v->position().x(),v->position().y(),v->position().z());
72 Amg::Vector3D mom(p->momentum().px(),p->momentum().py(),p->momentum().pz());
76 Amg::Vector3D pos(v->position().x(),v->position().y(),v->position().z());
79 Amg::Transform3D amgTransf(amgtranslation * Amg::RotationMatrix3D::Identity());
88 std::unique_ptr<Trk::TrackParameters>(pars),
103 if (!trackStateOnSurfaces) {
104 VP1Msg::messageDebug(
"TrackHandle_TruthTrack WARNING: Could not create track due to null TSOS vector");
107 if (trackStateOnSurfaces->
empty()) {
108 VP1Msg::messageDebug(
"TrackHandle_TruthTrack WARNING: Could not create track due to empty TSOS vector");
109 delete trackStateOnSurfaces;
114 delete trackStateOnSurfaces;
119 std::unique_ptr<Trk::TrackStates> sink(trackStateOnSurfaces);
152 delete m_d->trkTrack;
166 bool decayedGenParticle = useGenParticle &&
genParticle->end_vertex();
167 bool useSimHits = !decayedGenParticle && !
simHitList.empty();
169 if (!useGenParticle&&!useSimHits) {
170 VP1Msg::message(
"TrackHandle_TruthTrack ERROR: Track has neither a genparticle or sim. hits!!");
175 VP1Msg::message(
"TrackHandle_TruthTrack ERROR: Could not determine particle charge (pdg="
176 +QString::number(
theclass->pdgCode())+
").");
183 if (useGenParticle) {
186 if (decayedGenParticle) {
195 SimHitList::const_iterator it, itE(
simHitList.end());
196 for ( it =
simHitList.begin(); it != itE; ++it ) {
199 addPars(trackStateOnSurfaces,it->second->createTrackParameters());
214 l <<
"Evt index = "+QString::number(
m_d->simBarCode.evtIndex());
215 l <<
"BarCode = "+QString::number(
m_d->simBarCode.barCode());
228 m_d->ensureInitTrkTracks();
229 return m_d->trkTrack;
236 return m_d->simBarCode.pdgCode();
242 return m_d->simBarCode.isNonUniqueSecondary();
248 if (
m_d->genParticle) {
249 return Amg::Vector3D(
m_d->genParticle->momentum().px(),
m_d->genParticle->momentum().py(),
m_d->genParticle->momentum().pz());
251 SimHitList::const_iterator it, itE(
m_d->simHitList.end());
252 for ( it =
m_d->simHitList.begin(); it != itE; ++it ) {
253 if (it->second->momentum()>=0) {
254 return (it->second->momentum()) * (it->second->momentumDirection());
264 if (!
m_d->genParticle)
270 double x(v->position().x()),
y(v->position().y());
273 return fabs(v->position().z())<=zmax;
280 m_d->ensureInitAscObjs();
286 if (
m_d->ascObjVis==b)
298 m_d->ensureInitAscObjs();
301 std::vector<AscObj_TruthPoint*>::iterator it(
m_d->ascObjs->begin()), itE(
m_d->ascObjs->end());
303 (*it)->setVisible(b);
311 ascObjs =
new std::vector<AscObj_TruthPoint*>;
325 SimHitList::const_iterator it, itE(
simHitList.end());
326 for ( it =
simHitList.begin(); it != itE; ++it )
329 std::vector<AscObj_TruthPoint*>::iterator it, itE(
ascObjs->end());
330 for (it=
ascObjs->begin();it!=itE;++it)
332 for (it=
ascObjs->begin();it!=itE;++it)
339 if (!
m_d->simHitList.empty()) {
340 if (
m_d->simHitList.at(0).second->hasCharge())
341 return m_d->simHitList.at(0).second->charge();
An STL vector of pointers that by default owns its pointed-to elements.
std::vector< std::pair< double, SimHitHandleBase * > > SimHitList
bool empty() const noexcept
Returns true if the collection is empty.
virtual double calculateCharge() const
friend class TrackCollHandleBase
TrackHandleBase(TrackCollHandleBase *)
QStringList baseInfo() const
virtual Amg::Vector3D momentum() const
std::vector< AscObj_TruthPoint * > * ascObjs
const Trk::Track * trkTrack
static Trk::TrackStateOnSurface * createTSOS(Trk::TrackParameters *pars)
static Trk::Perigee * createTrkPerigeeFromProdVertex(HepMC::ConstGenParticlePtr p, const double &charge)
void createTrack(Trk::TrackStates *trackStateOnSurfaces)
static void addPars(Trk::TrackStates *dv, Trk::TrackParameters *pars)
void ensureInitTrkTracks()
TrackHandle_TruthTrack * theclass
static Trk::TrackParameters * createTrkParamFromDecayVertex(HepMC::ConstGenParticlePtr p, const double &charge)
Imp(TrackHandle_TruthTrack *tc, const SimBarCode &sbc, const SimHitList &shl, HepMC::ConstGenParticlePtr p)
HepMC::ConstGenParticlePtr genParticle
virtual ~TrackHandle_TruthTrack()
virtual int pdgCode() const
0 means unknown
void ensureTouchedMuonChambersInitialised() const
void setAscObjsVisible(bool)
virtual double calculateCharge() const
TrackHandle_TruthTrack(TrackCollHandleBase *, const SimBarCode &, const SimHitList &, HepMC::ConstGenParticlePtr genPart=nullptr)
const Trk::Track * provide_pathInfoTrkTrack() const
virtual QStringList clicked() const
Called when user selects the node (stringlist is displayed in messagebox).
bool hasBarCodeZero() const
void visibleStateChanged()
override if need to take action in this case.
bool hasVertexAtIR(const double &rmaxsq, const double &zmax) const
virtual Amg::Vector3D momentum() const
Class for a planaer rectangular or trapezoidal surface in the ATLAS detector.
Contains information about the 'fitter' of this track.
@ Unknown
Track fitter not defined.
represents the track state (measurement, material, fit parameters and quality) at a surface.
static void messageVerbose(const QString &)
static void messageDebug(const QString &)
static void message(const QString &, IVP1System *sys=0)
Eigen::Affine3d Transform3D
Eigen::Matrix< double, 3, 1 > Vector3D
Eigen::Translation< double, 3 > Translation3D
const GenParticle * ConstGenParticlePtr
const HepMC::GenVertex * ConstGenVertexPtr
DataVector< const Trk::TrackStateOnSurface > TrackStates
ParametersT< TrackParametersDim, Charged, PerigeeSurface > Perigee
ParametersBase< TrackParametersDim, Charged > TrackParameters
ParametersT< TrackParametersDim, Charged, PlaneSurface > AtaPlane