ATLAS Offline Software
Loading...
Searching...
No Matches
IParticleHandle_TrackParticle Class Reference

#include <IParticleHandle_TrackParticle.h>

Inheritance diagram for IParticleHandle_TrackParticle:
Collaboration diagram for IParticleHandle_TrackParticle:

Classes

class  Imp

Public Member Functions

 IParticleHandle_TrackParticle (IParticleCollHandleBase *, const xAOD::TrackParticle *)
virtual ~IParticleHandle_TrackParticle ()
virtual bool has3DObjects ()
 Returns true if the 3D objects have been created.
virtual void clear3DObjects ()
 Delete objects.
virtual SoNode * nodes ()
 Returns the 3Dobjects.
void addParameterShapes ()
void addLine_FromTrackParticle ()
 Make the line, but only using information on the track (a spline fit will be done from the parameters)
void addLine_Extrapolated ()
 Extrapolate the initial track parameters to get the line (a spline fit is done between the extrapolated parameters)
void fillLineFromSplineFit (const std::vector< Amg::Vector3D > &positions, const std::vector< Amg::Vector3D > &momenta)
 Fill d->line with a SoLineSet made from a spline fit between the information in positions and momenta.
void linear (Amg::Vector3D &output, Amg::Vector3D &a, Amg::Vector3D &b, float t)
void bezier (Amg::Vector3D &output, Amg::Vector3D &a, Amg::Vector3D &b, Amg::Vector3D &c, Amg::Vector3D &d, float t)
virtual QStringList clicked () const
 Called when user selects the node (stringlist is displayed in messagebox).
virtual Amg::Vector3D momentum () const
virtual Amg::Vector3D position () const
const xAOD::IParticleiParticle () const
virtual double charge () const
 Returns unknown() in case of trouble.
virtual unsigned summaryValue (xAOD::SummaryType type) const
virtual unsigned getNPixelHits () const
virtual unsigned getNSCTHits () const
virtual unsigned getNTRTHits () const
virtual unsigned getNMuonPrecisionLayers () const
virtual unsigned getNMuonPrecisionHoleLayers () const
virtual unsigned getNMuonPhiLayers () const
virtual unsigned getNMuonPhiHoleLayers () const
virtual QString type () const
 return very short word with type (maybe link with collection type?)
QString shortInfo () const
 This returns the information shown about the object in the object browser.
void fillObjectBrowser (QList< QTreeWidgetItem * > &listOfItems)
 Create and fill the object browser QTreeWidgetItem.
const QList< std::pair< xAOD::ParameterPosition, Amg::Vector3D > > & parametersAndPositions () const
virtual void dumpToJSON (std::ofstream &) const
SoMaterial * determineMaterial ()
 Should be implemented by children, in order to change the material depending on the interface etc.
virtual QStringList baseInfo () const
virtual double mass () const
 Returns unknown() in case of trouble.
bool hasCharge () const
bool hasMass () const
const AODSysCommonDatacommon () const
void setVisible (bool)
 use by the collection handle.
bool visible () const
const AODCollHandleBasecollHandle () const
virtual void update3DObjects ()
 Called after some configuration changes, or when the object is first created. Must be overloaded by children.
virtual void rebuild3DObjects ()
virtual void attach3DObjects ()
 Connect to the scene graph.
virtual void detach3DObjects ()
 Remove from the scene graph.
void updateMaterial ()
 Called after some configuration related to material changes.
SoMaterial * currentMaterial () const
 Returns the current material of the handle.
void updateObjectBrowser ()
 Update object browser QTreeWidgetItem.
QTreeWidgetItem * browserTreeItem () const
 Return the QTreeWidgetItem;.

Static Public Member Functions

static int numberOfInstances ()
static double unknown ()

Protected Member Functions

virtual void visibleStateChanged ()
 Dummy implementation does nothing.
virtual void currentMaterialChanged ()

Private Member Functions

void ensureInitSubSysHitInfo () const

Private Attributes

Impm_d
bool m_visible
AODCollHandleBasem_collhandle
SoMaterial * m_currentmaterial

Detailed Description

Definition at line 27 of file IParticleHandle_TrackParticle.h.

Constructor & Destructor Documentation

◆ IParticleHandle_TrackParticle()

IParticleHandle_TrackParticle::IParticleHandle_TrackParticle ( IParticleCollHandleBase * ch,
const xAOD::TrackParticle * tp )

Definition at line 62 of file IParticleHandle_TrackParticle.cxx.

63 : IParticleHandleBase(ch), m_d(new Imp)
64{
65 m_d->theclass = this;
66 m_d->trackparticle = tp;
67 m_d->collHandle = dynamic_cast<IParticleCollHandle_TrackParticle*>(ch);
68 m_d->sep=0;
69 m_d->line=0;
70}
IParticleHandleBase(IParticleCollHandleBase *)

◆ ~IParticleHandle_TrackParticle()

IParticleHandle_TrackParticle::~IParticleHandle_TrackParticle ( )
virtual

Definition at line 73 of file IParticleHandle_TrackParticle.cxx.

74{
75 if (m_d->line) m_d->line->unref();
76 if (m_d->sep) m_d->sep->unref();
77 delete m_d;
78}

Member Function Documentation

◆ addLine_Extrapolated()

void IParticleHandle_TrackParticle::addLine_Extrapolated ( )

Extrapolate the initial track parameters to get the line (a spline fit is done between the extrapolated parameters)

Definition at line 295 of file IParticleHandle_TrackParticle.cxx.

295 {
296 VP1Msg::messageVerbose("IParticleHandle_TrackParticle::addLine_Extrapolated().");
297
298 const Trk::Perigee& peri = m_d->trackparticle->perigeeParameters (); // FIXME - I'd quite like not to use anything which requires Athena ...
299
300 Trk::CurvilinearParameters startParameters(peri.position(),peri.momentum(),peri.charge());
301 Trk::ExtrapolationCell<Trk::TrackParameters> ecc(startParameters);
302 // ecc.addConfigurationMode(Trk::ExtrapolationMode::StopAtBoundary);
303 ecc.addConfigurationMode(Trk::ExtrapolationMode::CollectPassive);
304 ecc.addConfigurationMode(Trk::ExtrapolationMode::CollectSensitive);
305
306 // we want to extrapolate outwards only for muon tracks
308 ecc.addConfigurationMode(Trk::ExtrapolationMode::StopAtBoundary);
309
310 // call the extrapolation engine
311 const Trk::IExtrapolationEngine * engine = collHandle()->common()->extrapolator();
312 if (!engine) {
313 VP1Msg::messageVerbose("No extrapolator engine available. Aborting.");
314 return;
315 }
316
317 std::vector<Amg::Vector3D> positions;
318 std::vector<Amg::Vector3D> momenta;
319
320 // Add start positions
321 positions.push_back(Amg::Vector3D(peri.position().x(),peri.position().y(),peri.position().z()));
322 momenta. push_back(Amg::Vector3D(peri.momentum().x(),peri.momentum().y(),peri.momentum().z()));
323
324
325 Trk::ExtrapolationCode eCode = engine->extrapolate(ecc);
326
327 // end the parameters if there
328 if (eCode.isSuccess()){
329 // loop over the collected information
330 for (auto& es : ecc.extrapolationSteps){
331
332 // continue if we have parameters
333 const Trk::TrackParameters* parameters = es.parameters;
334 if (parameters){
335 // take what you need -> position etc
336
337 // finally delete the parameters
338 Amg::Vector3D pos = parameters->position();
339 Amg::Vector3D mom = parameters->momentum();
340 positions.push_back(pos);
341 momenta.push_back(mom);
342
343 delete parameters;
344 }
345 }//
346
347 Amg::Vector3D pos = ecc.endParameters->position();
348 Amg::Vector3D mom = ecc.endParameters->momentum();
349 positions.push_back(pos);
350 momenta.push_back(mom);
351 // and delete the final parameter
352 delete ecc.endParameters;
353 } else {
354 VP1Msg::messageVerbose("IParticleHandle_TrackParticle::addLine_Extrapolated() - extrapolation failed.");
355 }
356 fillLineFromSplineFit(positions, momenta);
357 // std::cout<<"About to add "<<collHandleTrk->material()<<std::endl;
358 m_d->sep->addChild(m_d->collHandle->material());
359 // ^^ FIXME - should rearrange so we don't need to reset material
360
361
362 m_d->sep->addChild(m_d->line);
363}
const AODSysCommonData * common() const
const AODCollHandleBase * collHandle() const
const Trk::IExtrapolationEngine * extrapolator() const
void fillLineFromSplineFit(const std::vector< Amg::Vector3D > &positions, const std::vector< Amg::Vector3D > &momenta)
Fill d->line with a SoLineSet made from a spline fit between the information in positions and momenta...
bool isSuccess() const
return success
const Amg::Vector3D & momentum() const
Access method for the momentum.
const Amg::Vector3D & position() const
Access method for the position.
double charge() const
Returns the charge.
static void messageVerbose(const QString &)
Definition VP1Msg.cxx:84
Eigen::Matrix< double, 3, 1 > Vector3D
ParametersT< TrackParametersDim, Charged, PerigeeSurface > Perigee
CurvilinearParametersT< TrackParametersDim, Charged, PlaneSurface > CurvilinearParameters
ParametersBase< TrackParametersDim, Charged > TrackParameters

◆ addLine_FromTrackParticle()

void IParticleHandle_TrackParticle::addLine_FromTrackParticle ( )

Make the line, but only using information on the track (a spline fit will be done from the parameters)

Definition at line 173 of file IParticleHandle_TrackParticle.cxx.

173 {
174
175 std::vector<Amg::Vector3D> positions, momenta;
176
177#if defined BUILDVP1LIGHT
178 positions.push_back(position());
179 momenta. push_back(momentum());
180#else
181 const Trk::Perigee& peri = m_d->trackparticle->perigeeParameters (); // FIXME - I'd quite like not to use anything which requires Athena ...
182
183 positions.push_back(Amg::Vector3D(peri.position().x(),peri.position().y(),peri.position().z()));
184 momenta. push_back(Amg::Vector3D(peri.momentum().x(),peri.momentum().y(),peri.momentum().z()));
185 // std::cout<<"i:"<<0<<"/"<<m_d->trackparticle->numberOfParameters()+1<<": ("<<peri.position().x()<<","<<peri.position().y()<<","<<peri.position().z()<<")"<<std::endl;
186#endif // BUILDVP1LIGHT
187
188
189 VP1Msg::messageVerbose("IParticleHandle_TrackParticle::addLine_FromTrackParticle - has "+QString::number(m_d->trackparticle->numberOfParameters())+" extra parameters.");
190 for (unsigned int i=0; i<m_d->trackparticle->numberOfParameters() ; ++i){
191 // std::cout<<"i:"<<i+1<<"/"<<m_d->trackparticle->numberOfParameters()+1<<": ("<<m_d->trackparticle->parameterX(i)<<","<<m_d->trackparticle->parameterY(i)<<","<<m_d->trackparticle->parameterZ(i)<<")"<<std::endl;
192
193 positions.push_back(Amg::Vector3D(m_d->trackparticle->parameterX(i),
194 m_d->trackparticle->parameterY(i),
195 m_d->trackparticle->parameterZ(i)));
196 momenta.push_back(Amg::Vector3D( m_d->trackparticle->parameterPX(i),
197 m_d->trackparticle->parameterPY(i),
198 m_d->trackparticle->parameterPZ(i)));
199
200 } // end of loop.
201
202 // if ( positions.size()<2 ) VP1Msg::messageVerbose("IParticleHandle_TrackParticle::addLine_FromTrackParticle - WARNING - not enough points to make a line.");
203
204 fillLineFromSplineFit(positions, momenta);
205
206 // std::cout<<"About to add "<<collHandleTrk->material()<<std::endl;
207 m_d->sep->addChild(m_d->collHandle->material());
208 // ^^ FIXME - should rearrange so we don't need to reset material
209
210 m_d->sep->addChild(m_d->line);
211}

◆ addParameterShapes()

void IParticleHandle_TrackParticle::addParameterShapes ( )

Definition at line 128 of file IParticleHandle_TrackParticle.cxx.

128 {
129 // Points:
130 SoPointSet* parameterPoints = 0;
131 SoVertexProperty * vertices2 = 0;
132
133 // std::cout<<"showing parameters... have "<<m_d->trackparticle->numberOfParameters()+1<<" to draw"<<std::endl;
134
135 // Okay. so let's make the containers to hold them...
136 parameterPoints = new SoPointSet;
137 vertices2 = new SoVertexProperty;
138
139 int i = 0;
140 bool colourByParamType = m_d->collHandle->collSettingsButton().colourParametersByType();
141 QList<std::pair<xAOD::ParameterPosition, Amg::Vector3D> > parAndPoses = parametersAndPositions();
142
143 for (std::pair<xAOD::ParameterPosition, Amg::Vector3D> parpos : parAndPoses ) {
144 Amg::Vector3D pos = parpos.second;
145
146 if (colourByParamType) {
147 // Okay, so we treat each point separately & add materials as we go...
148 m_d->sep->addChild(m_d->collHandle->collSettingsButton().parameterMaterial(parpos.first));
149 vertices2->vertex.set1Value(0,pos.x(),pos.y(),pos.z());
150 parameterPoints->numPoints=1;
151 parameterPoints->vertexProperty = vertices2;
152 m_d->sep->addChild(parameterPoints);
153 parameterPoints = new SoPointSet; // reset for next point
154 vertices2 = new SoVertexProperty;
155 } else { // Not colouring by type
156 vertices2->vertex.set1Value(i++,pos.x(),pos.y(),pos.z());
157 }
158 }
159
160 if (colourByParamType) {
161 // In this case, we don't need the last Nodes created in the loop.
162 parameterPoints->unref();
163 vertices2->unref();
164
165 } else {
166 parameterPoints->numPoints=i;
167 parameterPoints->vertexProperty = vertices2;
168 m_d->sep->addChild(static_cast<const IParticleCollHandle_TrackParticle*>(collHandle())->collSettingsButton().defaultParameterMaterial());
169 m_d->sep->addChild(parameterPoints);
170 }
171}
const QList< std::pair< xAOD::ParameterPosition, Amg::Vector3D > > & parametersAndPositions() const

◆ attach3DObjects()

void AODHandleBase::attach3DObjects ( )
virtualinherited

Connect to the scene graph.

Definition at line 157 of file AODHandleBase.cxx.

158{
159 VP1Msg::messageVerbose("AODHandleBase::attach3DObjects");
160
161 if (!m_currentmaterial) {
163 m_currentmaterial->ref();
165 }
166 if (has3DObjects() && m_collhandle->sepHelper()) {
167 VP1Msg::messageVerbose("Adding nodes to sep helper...");
168
169 m_collhandle->common()->registerHandle(this);
170
171 // debug
172 // std::cout<<"m_collhandle->sepHelper() = " << m_collhandle->sepHelper()<<std::endl;
173 SoNode* tmp = nodes();
174 // std::cout << "tmp nodes = "<< tmp << std::endl;
175
176 // m_collhandle->sepHelper()->addNodeUnderMaterial( nodes(), m_currentmaterial );
177 m_collhandle->sepHelper()->addNodeUnderMaterial( tmp, m_currentmaterial );
178
179 } else {
180 if (!has3DObjects()) {
181 VP1Msg::message("AODHandleBase::attach3DObjects() - No 3D objects to attach!");
182 }
183 if (!m_collhandle->sepHelper()) VP1Msg::message("AODHandleBase::attach3DObjects() - No sep helper!");
184 }
185 // if (label_sep && theclass->common()->textSep() && theclass->common()->controller()->doTrackLabels())
186 // theclass->common()->textSep()->addChild(label_sep);
187 //
188}
virtual void currentMaterialChanged()
SoMaterial * m_currentmaterial
virtual SoNode * nodes()=0
Returns the 3Dobjects.
virtual bool has3DObjects()
Returns true if the 3D objects have been created.
virtual SoMaterial * determineMaterial()=0
Should be implemented by children, in order to change the material depending on the interface etc.
AODCollHandleBase * m_collhandle
static void message(const QString &, IVP1System *sys=0)
Definition VP1Msg.cxx:30

◆ baseInfo()

QStringList IParticleHandleBase::baseInfo ( ) const
virtualinherited

Reimplemented from AODHandleBase.

Definition at line 85 of file IParticleHandleBase.cxx.

86{
87 QStringList l;
88 Amg::Vector3D mom = momentum()/1000;
89 if (mom.mag2()==0.0) {
90 l << "Momentum : 0 (undefined)";
91 } else {
92 l << "Momentum [GeV]: "+VP1Msg::str(mom);
93 l << "|Pt|/|P| [GeV]: "+VP1Msg::str(mom.perp())+" / " + VP1Msg::str(mom.mag());
94 l << VP1Msg::str("(")+QChar(0x03B7)+","+QChar(0x03D5)+VP1Msg::str(")=(")
96
97 l << "Eta: "+VP1Msg::str(mom.eta());
98 l << "Phi: "+VP1Msg::str(VP1LinAlgUtils::phiFromXY(mom.x(), mom.y() ));
99 }
100 // l<<"Hit summary: Pix["+VP1Msg::str(getNPixelHits())+"], SCT["+VP1Msg::str(getNSCTHits())+"], TRT["+VP1Msg::str(getNTRTHits())
101 // +"], MDT["+QString::number(getNMDTHits())+"], RPC["+QString::number(getNRPCHits())+"], TGC["+QString::number(getNTGCHits())+"], CSC["+QString::number(getNCSCHits())+"].";
102 //
103 // return l;
104 // int pdg = pdgCode();
105 // if (pdg) {
106 // bool ok;
107 // QString name = VP1ParticleData::particleName(pdg,ok);
108 // if (ok)
109 // l << "pdg: "+QString::number(pdg)+" ["+name+"]";
110 // else
111 // l << "pdg: "+QString::number(pdg);
112 // }
113
114 return l;
115}
virtual Amg::Vector3D momentum() const
static double phiFromXY(const double &x, const double &y)
static QString str(const QString &s)
Definition VP1String.h:49
l
Printing final latex table to .tex output file.

◆ bezier()

void IParticleHandle_TrackParticle::bezier ( Amg::Vector3D & output,
Amg::Vector3D & a,
Amg::Vector3D & b,
Amg::Vector3D & c,
Amg::Vector3D & d,
float t )

Definition at line 220 of file IParticleHandle_TrackParticle.cxx.

220 {
221 // DeCasteljau subdivision
222 Amg::Vector3D ab,bc,cd,abbc,bccd;
223 linear(ab, a,b,t); // point between a and b (green)
224 linear(bc, b,c,t); // point between b and c (green)
225 linear(cd, c,d,t); // point between c and d (green)
226 linear(abbc, ab,bc,t); // point between ab and bc (blue)
227 linear(bccd, bc,cd,t); // point between bc and cd (blue)
228 linear(output, abbc,bccd,t); // point on the bezier-curve (black)
229}
static Double_t a
void linear(Amg::Vector3D &output, Amg::Vector3D &a, Amg::Vector3D &b, float t)

◆ browserTreeItem()

QTreeWidgetItem * AODHandleBase::browserTreeItem ( ) const
inherited

Return the QTreeWidgetItem;.

Definition at line 311 of file AODHandleBase.cxx.

311 {
312 return m_d->m_objBrowseTree;
313}

◆ charge()

double IParticleHandle_TrackParticle::charge ( ) const
virtual

Returns unknown() in case of trouble.

Implements IParticleHandleBase.

Definition at line 448 of file IParticleHandle_TrackParticle.cxx.

449{
450 return m_d->trackparticle->charge();
451}

◆ clear3DObjects()

void IParticleHandle_TrackParticle::clear3DObjects ( )
virtual

Delete objects.

Implements AODHandleBase.

Definition at line 83 of file IParticleHandle_TrackParticle.cxx.

83 {
84 VP1Msg::messageVerbose("IParticleHandle_TrackParticle::clear3DObjects()");
85
86 if (m_d->line) {
87 m_d->line->unref();
88 m_d->line=0;
89 }
90 if (m_d->sep) {
91 m_d->sep->unref();
92 m_d->sep=0;
93 }
94
95 // Wipe caches
96 m_d->positionsToWrite.clear();
97 m_d->parametersAndPositions.clear();
98}

◆ clicked()

QStringList IParticleHandle_TrackParticle::clicked ( ) const
virtual

Called when user selects the node (stringlist is displayed in messagebox).

Reimplementations should add info momInfo() to get momentum, eta, phi, pid,charge, mass printed.

Implements AODHandleBase.

Definition at line 367 of file IParticleHandle_TrackParticle.cxx.

368{
369 QStringList l;
370 l << "TrackParticle:";
372 return l;
373}
virtual QStringList baseInfo() const

◆ collHandle()

const AODCollHandleBase * AODHandleBase::collHandle ( ) const
inlineinherited

Definition at line 55 of file AODHandleBase.h.

55{ return m_collhandle; }

◆ common()

const AODSysCommonData * AODHandleBase::common ( ) const
inherited

Definition at line 93 of file AODHandleBase.cxx.

94{
95 return std::as_const(m_collhandle)->common();
96}

◆ currentMaterial()

SoMaterial * AODHandleBase::currentMaterial ( ) const
inlineinherited

Returns the current material of the handle.

Definition at line 76 of file AODHandleBase.h.

76{ return m_currentmaterial; }

◆ currentMaterialChanged()

virtual void AODHandleBase::currentMaterialChanged ( )
inlineprotectedvirtualinherited

Definition at line 111 of file AODHandleBase.h.

111{};

◆ detach3DObjects()

void AODHandleBase::detach3DObjects ( )
virtualinherited

Remove from the scene graph.

Definition at line 191 of file AODHandleBase.cxx.

192{
193 VP1Msg::messageVerbose("AODHandleBase::detach3DObjects");
194
196 return;//Can never have been attached!
197 if (has3DObjects() && m_collhandle->sepHelper()) {
198 m_collhandle->sepHelper()->removeNodeUnderMaterial(nodes(),m_currentmaterial);
199 }
200
201 m_collhandle->common()->deregisterHandle(this);
202
203 // if (label_sep && theclass->common()->textSep())
204 // theclass->common()->textSep()->removeChild(label_sep);
205}

◆ determineMaterial()

SoMaterial * IParticleHandleBase::determineMaterial ( )
virtualinherited

Should be implemented by children, in order to change the material depending on the interface etc.

This will (by default) return the collection material.

Implements AODHandleBase.

Definition at line 71 of file IParticleHandleBase.cxx.

71 {
72 // By default we use the collection material.
73 // std::cout<<"AODHandleBase::determineMaterial() - collHandle()->material()"<<collHandle()->material()<<std::endl;
74 return collHandle()->material();
75}
SoMaterial * material() const

◆ dumpToJSON()

void IParticleHandle_TrackParticle::dumpToJSON ( std::ofstream & str) const
virtual

Reimplemented from AODHandleBase.

Definition at line 597 of file IParticleHandle_TrackParticle.cxx.

597 {
598 str << "\"chi2\":"<<m_d->trackparticle->chiSquared () <<", ";
599 str << "\"dof\":" <<m_d->trackparticle->numberDoF () <<", ";
600 str << "\"dparams\": ["
601 << m_d->trackparticle->d0() <<", "
602 << m_d->trackparticle->z0() <<", "
603 << m_d->trackparticle->phi0() <<", "
604 << m_d->trackparticle->theta() <<", "
605 << m_d->trackparticle->qOverP()
606 << "], \"pos\": [";
607 bool first = true;
608 for (auto pos: m_d->positionsToWrite){
609 if (first){
610 first = false;
611 } else {
612 str <<",";
613 }
614 str << "["<<pos.x()<<","<<pos.y()<<","<<pos.z()<<"]";
615 }
616 str << "] ";
617}
bool first
Definition DeMoScan.py:534

◆ ensureInitSubSysHitInfo()

void IParticleHandle_TrackParticle::ensureInitSubSysHitInfo ( ) const
private

◆ fillLineFromSplineFit()

void IParticleHandle_TrackParticle::fillLineFromSplineFit ( const std::vector< Amg::Vector3D > & positions,
const std::vector< Amg::Vector3D > & momenta )

Fill d->line with a SoLineSet made from a spline fit between the information in positions and momenta.

Definition at line 231 of file IParticleHandle_TrackParticle.cxx.

231 {
232 int iver(0);
233 unsigned int npointsused(0);
234 // Create new lineset etc
235 m_d->line = new SoLineSet();
236 m_d->line->ref();
237
238 // For the moment, lets just draw the lines.
239 SoVertexProperty * vertices = new SoVertexProperty();
240
241 // std::cout<<"About to loop over "<<positions.size()<<" points to make line"<<std::endl;
242 // for (unsigned int i=0; i<positions.size(); ++i){
243 // std::cout<<"i: "<<i<<" at ("<<positions[i].x()<<","<<positions[i].y()<<","<<positions[i].z()<<")"<<" \tmom = ("<<momenta[i].x()<<","<<momenta[i].y()<<","<<momenta[i].z()<<")"<<std::endl;
244 // }
245
246 // std::cout<<"Now do interpolations."<<std::endl;
247
248 bool useExistingParams = m_d->collHandle->collSettingsButton().useExistingParameters();
249
250 for (unsigned int i=1; i<positions.size(); ++i){
251 // std::cout<<"i: "<<i<<" at ("<<positions[i].x()<<","<<positions[i].y()<<","<<positions[i].z()<<")"<<" \tmom = ("<<momenta[i].x()<<","<<momenta[i].y()<<","<<momenta[i].z()<<")"<<std::endl;
252
253 if (useExistingParams){
254 float scale = ( (positions[i]-positions[i-1]).mag() )/3.0; // want to split curve into three parts
255 Amg::Vector3D p0(positions[i-1]); // first position
256 Amg::Vector3D p1(positions[i-1]+(scale * momenta[i-1].unit() ) ); // move 1/3 or the way towards next point, but following momentum direction
257 Amg::Vector3D p2(positions[i] -(scale * momenta[i].unit() ) ); // back 1/3 from second point, but following momentum direction
258 Amg::Vector3D p3(positions[i]);
259 // std::cout<<"p0: ("<<p0[0]<<", "<<p0[1]<<", "<<p0[2]<<") "<<std::endl;
260 // std::cout<<"p1: ("<<p1[0]<<", "<<p1[1]<<", "<<p1[2]<<") "<<std::endl;
261 // std::cout<<"p2: ("<<p2[0]<<", "<<p2[1]<<", "<<p2[2]<<") "<<std::endl;
262 // std::cout<<"p3: ("<<p3[0]<<", "<<p3[1]<<", "<<p3[2]<<") "<<std::endl;
263
264 unsigned int maxCount=m_d->collHandle->collSettingsButton().numOfStepsForInterpolation();
265 for (unsigned int count=1; count<=maxCount;++count){
266 float t=static_cast<float>(count)/static_cast<float>(maxCount);
268 bezier(pos, p0, p1, p2, p3, t);
269 // std::cout<<"j: "<<count<<" \tat ("<<pos.x()<<","<<pos.y()<<","<<pos.z()<<")"<<std::endl;
270
271 // pos = pos + momdelta;
272 vertices->vertex.set1Value(iver++,pos.x(),pos.y(),pos.z());
273 m_d->positionsToWrite.append(pos);
274
275 npointsused++;
276 }
277 } else {
278 vertices->vertex.set1Value(iver++,positions[i].x(),positions[i].y(),positions[i].z());
279 m_d->positionsToWrite.append(positions[i]);
280 npointsused++;
281 }
282 }
283
284 // Add final point.
285
286
287
288 // Add to SoLine set
289 m_d->line->numVertices.set1Value(0,npointsused);
290 m_d->line->vertexProperty = vertices;
291
292}
const PlainObject unit() const
This is a plugin that makes Eigen look like CLHEP & defines some convenience methods.
#define y
#define x
#define z
void bezier(Amg::Vector3D &output, Amg::Vector3D &a, Amg::Vector3D &b, Amg::Vector3D &c, Amg::Vector3D &d, float t)
int count(std::string s, const std::string &regx)
count how many occurances of a regx are in a string
Definition hcg.cxx:146

◆ fillObjectBrowser()

void IParticleHandle_TrackParticle::fillObjectBrowser ( QList< QTreeWidgetItem * > & list)
virtual

Create and fill the object browser QTreeWidgetItem.

Reimplemented from AODHandleBase.

Definition at line 514 of file IParticleHandle_TrackParticle.cxx.

515{
516 IParticleHandleBase::fillObjectBrowser(listOfItems); // Obligatory!
517
518 QTreeWidgetItem* TSOSitem = new QTreeWidgetItem(browserTreeItem());
519 TSOSitem->setText(0, QString("Def. Parameters " ) );
520 QString dParameters("(");
521 dParameters+=QString::number(m_d->trackparticle->d0());
522 dParameters+=", ";
523 dParameters+=QString::number(m_d->trackparticle->z0());
524 dParameters+=", ";
525 dParameters+=QString::number(m_d->trackparticle->phi0());
526 dParameters+=", ";
527 dParameters+=QString::number(m_d->trackparticle->theta());
528 dParameters+=", ";
529 dParameters+=QString::number(m_d->trackparticle->qOverP());
530 dParameters+=")";
531 TSOSitem->setText(1, dParameters );
532
533 for (unsigned int i=0; i<m_d->trackparticle->numberOfParameters() ; ++i){
534 QTreeWidgetItem* TSOSitem = new QTreeWidgetItem(browserTreeItem());
535 TSOSitem->setText(0, QString("Parameter "+QString::number( i+1 ) ) );
536 QString pos(", Position = (");
537 pos+=QString::number(m_d->trackparticle->parameterX(i));
538 pos+=", ";
539 pos+=QString::number(m_d->trackparticle->parameterY(i));
540 pos+=", ";
541 pos+=QString::number(m_d->trackparticle->parameterZ(i));
542 pos+=")";
543
544 switch (m_d->trackparticle->parameterPosition(i)){
545 case xAOD::BeamLine:
546 TSOSitem->setText(1, QString("BeamLine" )+pos );
547 break;
549 TSOSitem->setText(1, QString("FirstMeasurement")+pos );
550 break;
552 TSOSitem->setText(1, QString("LastMeasurement" )+pos );
553 break;
555 TSOSitem->setText(1, QString("CalorimeterEntrance")+pos );
556 break;
558 TSOSitem->setText(1, QString("CalorimeterExit" )+pos );
559 break;
561 TSOSitem->setText(1, QString("MuonSpectrometerEntrance")+pos );
562 break;
563 default:
564 TSOSitem->setText(1, QString("Undefined")+pos );
565 }
566 }
567
568 // TODO - add more.
569}
QTreeWidgetItem * browserTreeItem() const
Return the QTreeWidgetItem;.
virtual void fillObjectBrowser(QList< QTreeWidgetItem * > &list)
Create and fill the object browser QTreeWidgetItem.
@ MuonSpectrometerEntrance
Parameter defined at the entrance to the Muon Spectrometer.
@ BeamLine
Parameter defined at the Vertex/Beamline.
@ CalorimeterExit
Parameter defined at the exit of the calorimeter.
@ CalorimeterEntrance
Parameter defined at the entrance to the calorimeter.
@ FirstMeasurement
Parameter defined at the position of the 1st measurement.
@ LastMeasurement
Parameter defined at the position of the last measurement.

◆ getNMuonPhiHoleLayers()

unsigned IParticleHandle_TrackParticle::getNMuonPhiHoleLayers ( ) const
virtual

Definition at line 497 of file IParticleHandle_TrackParticle.cxx.

498{
500}
virtual unsigned summaryValue(xAOD::SummaryType type) const
@ numberOfPhiHoleLayers
layers with trigger phi holes but no hits [unit8_t].

◆ getNMuonPhiLayers()

unsigned IParticleHandle_TrackParticle::getNMuonPhiLayers ( ) const
virtual

Definition at line 492 of file IParticleHandle_TrackParticle.cxx.

493{
495}
@ numberOfPhiLayers
layers with a trigger phi hit [unit8_t].

◆ getNMuonPrecisionHoleLayers()

unsigned IParticleHandle_TrackParticle::getNMuonPrecisionHoleLayers ( ) const
virtual

Definition at line 487 of file IParticleHandle_TrackParticle.cxx.

488{
490}
@ numberOfPrecisionHoleLayers
layers with holes AND no hits [unit8_t].

◆ getNMuonPrecisionLayers()

unsigned IParticleHandle_TrackParticle::getNMuonPrecisionLayers ( ) const
virtual

Definition at line 482 of file IParticleHandle_TrackParticle.cxx.

483{
485}
@ numberOfPrecisionLayers
layers with at least 3 hits [unit8_t].

◆ getNPixelHits()

unsigned IParticleHandle_TrackParticle::getNPixelHits ( ) const
virtual

Definition at line 466 of file IParticleHandle_TrackParticle.cxx.

467{
469}
@ numberOfPixelHits
these are the pixel hits, including the b-layer [unit8_t].

◆ getNSCTHits()

unsigned IParticleHandle_TrackParticle::getNSCTHits ( ) const
virtual

Definition at line 472 of file IParticleHandle_TrackParticle.cxx.

473{
475}
@ numberOfSCTHits
number of hits in SCT [unit8_t].

◆ getNTRTHits()

unsigned IParticleHandle_TrackParticle::getNTRTHits ( ) const
virtual

Definition at line 477 of file IParticleHandle_TrackParticle.cxx.

478{
480}
@ numberOfTRTHits
number of TRT hits [unit8_t].

◆ has3DObjects()

bool IParticleHandle_TrackParticle::has3DObjects ( )
virtual

Returns true if the 3D objects have been created.

Reimplemented from AODHandleBase.

Definition at line 80 of file IParticleHandle_TrackParticle.cxx.

80 {
81 return 0!=m_d->sep;
82}

◆ hasCharge()

bool IParticleHandleBase::hasCharge ( ) const
inlineinherited

Definition at line 59 of file IParticleHandleBase.h.

59{ return charge()!=unknown(); }
static double unknown()
virtual double charge() const =0

◆ hasMass()

bool IParticleHandleBase::hasMass ( ) const
inlineinherited

Definition at line 60 of file IParticleHandleBase.h.

60{ return mass()!=unknown(); }
virtual double mass() const
Returns unknown() in case of trouble.

◆ iParticle()

const xAOD::IParticle & IParticleHandle_TrackParticle::iParticle ( ) const
virtual

Implements IParticleHandleBase.

Definition at line 442 of file IParticleHandle_TrackParticle.cxx.

443{
444 return *(m_d->trackparticle);
445}

◆ linear()

void IParticleHandle_TrackParticle::linear ( Amg::Vector3D & output,
Amg::Vector3D & a,
Amg::Vector3D & b,
float t )

Definition at line 213 of file IParticleHandle_TrackParticle.cxx.

213 {
214 float x = a.x() + (b.x()-a.x())*t;
215 float y = a.y() + (b.y()-a.y())*t;
216 float z = a.z() + (b.z()-a.z())*t;
218}
output
Definition merge.py:16

◆ mass()

double IParticleHandleBase::mass ( ) const
virtualinherited

Returns unknown() in case of trouble.

Definition at line 78 of file IParticleHandleBase.cxx.

79{
80 return 0.0;
81}

◆ momentum()

Amg::Vector3D IParticleHandle_TrackParticle::momentum ( ) const
virtual

Reimplemented from IParticleHandleBase.

Definition at line 407 of file IParticleHandle_TrackParticle.cxx.

408 {
409 const Trk::Perigee& p = m_d->trackparticle->perigeeParameters();
410 return p.momentum();
411 }

◆ nodes()

SoNode * IParticleHandle_TrackParticle::nodes ( )
virtual

Returns the 3Dobjects.

Implements AODHandleBase.

Definition at line 100 of file IParticleHandle_TrackParticle.cxx.

100 {
101 VP1Msg::messageVerbose("IParticleHandle_TrackParticle::nodes with d->sep="+VP1Msg::str(m_d->sep));
102
103 if (m_d->sep) {
104 VP1Msg::messageVerbose("IParticleHandle_TrackParticle::nodes() - already have sep so not doing anything.");
105 return m_d->sep;
106 }
107 if (!m_d->sep) {
108 m_d->sep = new SoSeparator();
109 m_d->sep->ref();
110 }
111
112 bool fromTrack=m_d->collHandle->collSettingsButton().useExistingParameters();
113
114 if (fromTrack) {
116 } else {
117 #ifndef BUILDVP1LIGHT
119 #endif // BUILDVP1LIGHT
120 }
121
122 if (m_d->collHandle->collSettingsButton().showParameters())
124
125 return m_d->sep;
126}
void addLine_FromTrackParticle()
Make the line, but only using information on the track (a spline fit will be done from the parameters...
void addLine_Extrapolated()
Extrapolate the initial track parameters to get the line (a spline fit is done between the extrapolat...

◆ numberOfInstances()

int AODHandleBase::numberOfInstances ( )
staticinherited

Definition at line 87 of file AODHandleBase.cxx.

88{
89 return Imp::nobjhandles;
90}
static std::atomic< int > nobjhandles

◆ parametersAndPositions()

const QList< std::pair< xAOD::ParameterPosition, Amg::Vector3D > > & IParticleHandle_TrackParticle::parametersAndPositions ( ) const

Definition at line 571 of file IParticleHandle_TrackParticle.cxx.

571 {
572 // 1st position
573 if (!m_d->parametersAndPositions.isEmpty())
574 return m_d->parametersAndPositions;
575
576 typedef std::pair<xAOD::ParameterPosition, Amg::Vector3D> paramAndPos;
577
578#if defined BUILDVP1LIGHT
579 m_d->parametersAndPositions.append(paramAndPos(xAOD::BeamLine, position() ) );
580#else
581 const Trk::Perigee& peri = m_d->trackparticle->perigeeParameters (); // FIXME - I'd quite like not to use anything which requires Athena ...
582 m_d->parametersAndPositions.append(paramAndPos(xAOD::BeamLine, Amg::Vector3D(peri.position().x(),peri.position().y(),peri.position().z()) ) );
583#endif // BUILDVP1LIGHT
584
585 float x,y,z;
586 for (unsigned int i=0; i<m_d->trackparticle->numberOfParameters() ; ++i){
587 x = m_d->trackparticle->parameterX(i);
588 y = m_d->trackparticle->parameterY(i);
589 z = m_d->trackparticle->parameterZ(i);
590
591 m_d->parametersAndPositions.append(paramAndPos(m_d->trackparticle->parameterPosition(i), Amg::Vector3D(x,y,z)));
592 }
593 VP1Msg::messageVerbose("TrackParticle parametersAndPositions() - returning this many positions : "+VP1Msg::str(m_d->parametersAndPositions.size()) );
594 return m_d->parametersAndPositions;
595}

◆ position()

Amg::Vector3D IParticleHandle_TrackParticle::position ( ) const
virtual

Definition at line 433 of file IParticleHandle_TrackParticle.cxx.

434 {
435 const Trk::Perigee& p = m_d->trackparticle->perigeeParameters();
436 return p.position(); // TODO: check what this returns
437 }

◆ rebuild3DObjects()

void AODHandleBase::rebuild3DObjects ( )
virtualinherited

Definition at line 137 of file AODHandleBase.cxx.

138{
139 QString tmp2 = (m_visible==true)?"True":"False";
140 VP1Msg::messageDebug("AODHandleBase::rebuild3DObjects() - with m_visible="+tmp2 );
141
142 //Ensure we are always detached while updating.
143 if (m_visible) {
145 }
146
148 nodes(); // rebuilds the 3D shapes
149
150 //Attach if visible:
151 if (m_visible) {
153 }
154}
virtual void clear3DObjects()=0
Delete objects.
virtual void detach3DObjects()
Remove from the scene graph.
virtual void attach3DObjects()
Connect to the scene graph.
static void messageDebug(const QString &)
Definition VP1Msg.cxx:39

◆ setVisible()

void AODHandleBase::setVisible ( bool vis)
inherited

use by the collection handle.

Definition at line 99 of file AODHandleBase.cxx.

100{
101 QString tmp = (vis==true)?"True":"False";
102 QString tmp2 = (m_visible==true)?"True":"False";
103 VP1Msg::messageDebug(QString("AODHandleBase calling setVisible with vis=")+tmp+QString(", and m_visible=")+tmp2 );
104 if (vis==m_visible)
105 return;
106
107 m_visible=vis;
108 if (vis) {
109 m_collhandle->incrementNShownHandles();
110
111 if (!has3DObjects())
112 rebuild3DObjects();//The call to rebuild also fixes attached state.
113 else
115 } else {
116 m_collhandle->decrementNShownHandles();
118 }
119
121}
virtual void rebuild3DObjects()
virtual void visibleStateChanged()
Dummy implementation does nothing.

◆ shortInfo()

QString IParticleHandle_TrackParticle::shortInfo ( ) const
virtual

This returns the information shown about the object in the object browser.

Reimplemented from AODHandleBase.

Definition at line 502 of file IParticleHandle_TrackParticle.cxx.

503{
504 QString l("");
505 //l+= "|P|="+VP1Msg::str(momentum().mag()/SYSTEM_OF_UNITS::GeV)+" [GeV], ";
506 l+= "Pix["+QString::number(getNPixelHits())+"], ";
507 l+= "SCT["+QString::number(getNSCTHits())+"], " ;
508 l+= "TRT["+QString::number(getNTRTHits())+"], ";
509 l+= "Muon prec. layers/holes [";
510 l+= QString::number(getNMuonPrecisionLayers())+"/"+QString::number(getNMuonPrecisionHoleLayers())+"]";
511 return l;
512}

◆ summaryValue()

unsigned IParticleHandle_TrackParticle::summaryValue ( xAOD::SummaryType type) const
virtual

Definition at line 454 of file IParticleHandle_TrackParticle.cxx.

455{
456 uint8_t num = 0;
457 if (m_d->trackparticle->summaryValue(num,type)){
458 return num;
459 }
460 // else...
461 VP1Msg::message("IParticleHandle_TrackParticle::getSummaryValue - unable to retrieve the requested enum: "+VP1Msg::str(type));
462 return 999999;
463}
virtual QString type() const
return very short word with type (maybe link with collection type?)

◆ type()

virtual QString IParticleHandle_TrackParticle::type ( ) const
inlinevirtual

return very short word with type (maybe link with collection type?)

Reimplemented from AODHandleBase.

Definition at line 65 of file IParticleHandle_TrackParticle.h.

◆ unknown()

double AODHandleBase::unknown ( )
inlinestaticinherited

Definition at line 93 of file AODHandleBase.h.

93{ return -999.0; }

◆ update3DObjects()

void AODHandleBase::update3DObjects ( )
virtualinherited

Called after some configuration changes, or when the object is first created. Must be overloaded by children.

Definition at line 125 of file AODHandleBase.cxx.

126{
127 if (m_visible) {
129 } else {
130 //Simply clear the present 3D objects. They will only be recreated if/when the track/jet becomes visible again.
132 }
133}

◆ updateMaterial()

void AODHandleBase::updateMaterial ( )
inherited

Called after some configuration related to material changes.

Definition at line 208 of file AODHandleBase.cxx.

209{
210 VP1Msg::messageVerbose("AODHandleBase::updateMaterial()");
211
212 //We need to change the current material. This means we need to
213 //clear the cache. Only if we are visible do we need to do a
214 //detach->clear material->attach cycle to trigger attachment under new material.
215
217 return;//We have no material cached and is thus not attached either.
218 if (m_visible) {
219 //See if the material changed. If it did, detach, update the material, attach again.
220 SoMaterial * newmat = determineMaterial();
221 newmat->ref();
222 if (newmat!=m_currentmaterial) {
224 m_currentmaterial->unref();
225 m_currentmaterial = newmat;
228 } else {
229 newmat->unref();
230 }
231 } else {
232 //Just clear material.
233 m_currentmaterial->unref();
236 }
237}

◆ updateObjectBrowser()

void AODHandleBase::updateObjectBrowser ( )
inlineinherited

Update object browser QTreeWidgetItem.

Definition at line 102 of file AODHandleBase.h.

102{};

◆ visible()

bool AODHandleBase::visible ( ) const
inlineinherited

Definition at line 54 of file AODHandleBase.h.

54{ return m_visible; }

◆ visibleStateChanged()

void AODHandleBase::visibleStateChanged ( )
protectedvirtualinherited

Dummy implementation does nothing.

override if need to take action in this case.

Definition at line 316 of file AODHandleBase.cxx.

317{
318 if ( !browserTreeItem()) {
319 VP1Msg::messageVerbose("visibleStateChanged: No m_objBrowseTree!");
320 return;
321 }
322
323 if (!visible()) {
324 browserTreeItem()->setFlags(Qt::ItemFlags()); // not selectable, not enabled
325 } else {
326 browserTreeItem()->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); // selectable, enabled
327 }
328 QFont itemFont = browserTreeItem()->font(0);
329 itemFont.setStrikeOut(!visible());
330 browserTreeItem()->setFont(0, itemFont);
331 browserTreeItem()->setFont(1, itemFont);
332}
bool visible() const

Member Data Documentation

◆ m_collhandle

AODCollHandleBase* AODHandleBase::m_collhandle
privateinherited

Definition at line 126 of file AODHandleBase.h.

◆ m_currentmaterial

SoMaterial* AODHandleBase::m_currentmaterial
privateinherited

Definition at line 127 of file AODHandleBase.h.

◆ m_d

Imp* IParticleHandle_TrackParticle::m_d
private

Definition at line 80 of file IParticleHandle_TrackParticle.h.

◆ m_visible

bool AODHandleBase::m_visible
privateinherited

Definition at line 125 of file AODHandleBase.h.


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