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

#include <IParticleHandle_Electron.h>

Inheritance diagram for IParticleHandle_Electron:
Collaboration diagram for IParticleHandle_Electron:

Classes

class  Imp

Public Member Functions

 IParticleHandle_Electron (IParticleCollHandleBase *, const xAOD::Electron *)
virtual ~IParticleHandle_Electron ()
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_FromElectron ()
 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.
const xAOD::Electronelectron () const
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_Electron.h.

Constructor & Destructor Documentation

◆ IParticleHandle_Electron()

IParticleHandle_Electron::IParticleHandle_Electron ( IParticleCollHandleBase * ch,
const xAOD::Electron * tp )

Definition at line 57 of file IParticleHandle_Electron.cxx.

58 : IParticleHandleBase(ch), m_d(new Imp)
59{
60 m_d->theclass = this;
61 m_d->electron = tp;
62 m_d->collHandle = dynamic_cast<IParticleCollHandle_Electron*>(ch);
63 m_d->sep=0;
64 m_d->line=0;
65}
IParticleHandleBase(IParticleCollHandleBase *)

◆ ~IParticleHandle_Electron()

IParticleHandle_Electron::~IParticleHandle_Electron ( )
virtual

Definition at line 68 of file IParticleHandle_Electron.cxx.

69{
70 if (m_d->line) m_d->line->unref();
71 if (m_d->sep) m_d->sep->unref();
72 delete m_d;
73}

Member Function Documentation

◆ addLine_Extrapolated()

void IParticleHandle_Electron::addLine_Extrapolated ( )

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

Definition at line 299 of file IParticleHandle_Electron.cxx.

299 {
300 VP1Msg::messageVerbose("IParticleHandle_Electron::addLine_Extrapolated().");
301
302 const Trk::Perigee& peri = m_d->electron->trackParticle()->perigeeParameters(); // FIXME - I'd quite like not to use anything which requires Athena ...
303
304 Trk::CurvilinearParameters startParameters(peri.position(),peri.momentum(),peri.charge());
305 Trk::ExtrapolationCell<Trk::TrackParameters> ecc(startParameters);
306 // ecc.addConfigurationMode(Trk::ExtrapolationMode::StopAtBoundary);
307 ecc.addConfigurationMode(Trk::ExtrapolationMode::CollectPassive);
308 ecc.addConfigurationMode(Trk::ExtrapolationMode::CollectSensitive);
309
310 // we want to extrapolate outwards only for muon tracks
312 ecc.addConfigurationMode(Trk::ExtrapolationMode::StopAtBoundary);
313
314 // call the extrapolation engine
315 const Trk::IExtrapolationEngine * engine = collHandle()->common()->extrapolator();
316 if (!engine) {
317 VP1Msg::messageVerbose("No extrapolator engine available. Aborting.");
318 return;
319 }
320
321 std::vector<Amg::Vector3D> positions;
322 std::vector<Amg::Vector3D> momenta;
323
324 // Add start positions
325 positions.push_back(Amg::Vector3D(peri.position().x(),peri.position().y(),peri.position().z())); // TODO: move to position()?
326 momenta. push_back(Amg::Vector3D(peri.momentum().x(),peri.momentum().y(),peri.momentum().z()));
327
328
329 Trk::ExtrapolationCode eCode = engine->extrapolate(ecc);
330
331 // end the parameters if there
332 if (eCode.isSuccess()){
333 // loop over the collected information
334 for (auto& es : ecc.extrapolationSteps){
335
336 // continue if we have parameters
337 const Trk::TrackParameters* parameters = es.parameters;
338 if (parameters){
339 // take what you need -> position etc
340
341 // finally delete the parameters
342 Amg::Vector3D pos = parameters->position();
343 Amg::Vector3D mom = parameters->momentum();
344 positions.push_back(pos);
345 momenta.push_back(mom);
346
347 delete parameters;
348 }
349 }//
350
351 Amg::Vector3D pos = ecc.endParameters->position();
352 Amg::Vector3D mom = ecc.endParameters->momentum();
353 positions.push_back(pos);
354 momenta.push_back(mom);
355 // and delete the final parameter
356 delete ecc.endParameters;
357 } else {
358 VP1Msg::messageVerbose("IParticleHandle_Electron::addLine_Extrapolated() - extrapolation failed.");
359 }
360 fillLineFromSplineFit(positions, momenta);
361 // std::cout<<"About to add "<<collHandleTrk->material()<<std::endl;
362 m_d->sep->addChild(m_d->collHandle->material());
363 // ^^ FIXME - should rearrange so we don't need to reset material
364
365
366 m_d->sep->addChild(m_d->line);
367}
const AODSysCommonData * common() const
const AODCollHandleBase * collHandle() const
const Trk::IExtrapolationEngine * extrapolator() const
virtual unsigned getNMuonPrecisionLayers() 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...
virtual unsigned getNMuonPhiLayers() const
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_FromElectron()

void IParticleHandle_Electron::addLine_FromElectron ( )

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

173 {
174
175 std::vector<Amg::Vector3D> positions, momenta;
176
177 const xAOD::TrackParticle* trackparticle = m_d->electron->trackParticle();
178 if (!trackparticle) {
179 VP1Msg::message("ERROR : no primary track particle associated with this Electron. Can't visualise it.");
180 return;
181 }
182
183#if defined BUILDVP1LIGHT
184 positions.push_back(position());
185 momenta. push_back(momentum());
186#else
187 const Trk::Perigee& peri = trackparticle->perigeeParameters (); // FIXME - I'd quite like not to use anything which requires Athena ...
188
189 positions.push_back(Amg::Vector3D(peri.position().x(),peri.position().y(),peri.position().z())); // TODO: move to position()?
190 momenta. push_back(Amg::Vector3D(peri.momentum().x(),peri.momentum().y(),peri.momentum().z()));
191 // std::cout<<"i:"<<0<<"/"<<m_d->electron->numberOfParameters()+1<<": ("<<peri.position().x()<<","<<peri.position().y()<<","<<peri.position().z()<<")"<<std::endl;
192#endif // BUILDVP1LIGHT
193
194 VP1Msg::messageVerbose("IParticleHandle_Electron::addLine_FromElectron - has "+QString::number(trackparticle->numberOfParameters())+" extra parameters.");
195 for (unsigned int i=0; i<trackparticle->numberOfParameters() ; ++i){
196 // std::cout<<"i:"<<i+1<<"/"<<m_d->electron->numberOfParameters()+1<<": ("<<m_d->electron->parameterX(i)<<","<<m_d->electron->parameterY(i)<<","<<m_d->electron->parameterZ(i)<<")"<<std::endl;
197
198 positions.push_back(Amg::Vector3D(trackparticle->parameterX(i),
199 trackparticle->parameterY(i),
200 trackparticle->parameterZ(i)));
201 momenta.push_back(Amg::Vector3D( trackparticle->parameterPX(i),
202 trackparticle->parameterPY(i),
203 trackparticle->parameterPZ(i)));
204 } // end of loop.
205
206 // if ( positions.size()<2 ) VP1Msg::messageVerbose("IParticleHandle_Electron::addLine_FromElectron - WARNING - not enough points to make a line.");
207
208 fillLineFromSplineFit(positions, momenta);
209
210 // std::cout<<"About to add "<<collHandleTrk->material()<<std::endl;
211 m_d->sep->addChild(m_d->collHandle->material());
212 // ^^ FIXME - should rearrange so we don't need to reset material
213
214 m_d->sep->addChild(m_d->line);
215}
virtual Amg::Vector3D momentum() const
virtual Amg::Vector3D position() const
static void message(const QString &, IVP1System *sys=0)
Definition VP1Msg.cxx:30
const Trk::Perigee & perigeeParameters() const
Returns the Trk::MeasuredPerigee track parameters.
float parameterPX(unsigned int index) const
Returns the parameter x momentum component, for 'index'.
float parameterX(unsigned int index) const
Returns the parameter x position, for 'index'.
float parameterPY(unsigned int index) const
Returns the parameter y momentum component, for 'index'.
float parameterZ(unsigned int index) const
Returns the parameter z position, for 'index'.
size_t numberOfParameters() const
Returns the number of additional parameters stored in the TrackParticle.
float parameterY(unsigned int index) const
Returns the parameter y position, for 'index'.
float parameterPZ(unsigned int index) const
Returns the parameter z momentum component, for 'index'.
TrackParticle_v1 TrackParticle
Reference the current persistent version:

◆ addParameterShapes()

void IParticleHandle_Electron::addParameterShapes ( )

Definition at line 128 of file IParticleHandle_Electron.cxx.

128 {
129 // Points:
130 SoPointSet* parameterPoints = 0;
131 SoVertexProperty * vertices2 = 0;
132
133 // std::cout<<"showing parameters... have "<<m_d->electron->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_Electron*>(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

◆ 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_Electron::bezier ( Amg::Vector3D & output,
Amg::Vector3D & a,
Amg::Vector3D & b,
Amg::Vector3D & c,
Amg::Vector3D & d,
float t )

Definition at line 224 of file IParticleHandle_Electron.cxx.

224 {
225 // DeCasteljau subdivision
226 Amg::Vector3D ab,bc,cd,abbc,bccd;
227 linear(ab, a,b,t); // point between a and b (green)
228 linear(bc, b,c,t); // point between b and c (green)
229 linear(cd, c,d,t); // point between c and d (green)
230 linear(abbc, ab,bc,t); // point between ab and bc (blue)
231 linear(bccd, bc,cd,t); // point between bc and cd (blue)
232 linear(output, abbc,bccd,t); // point on the bezier-curve (black)
233}
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_Electron::charge ( ) const
virtual

Returns unknown() in case of trouble.

Implements IParticleHandleBase.

Definition at line 452 of file IParticleHandle_Electron.cxx.

453{
454 return m_d->electron->charge();
455}

◆ clear3DObjects()

void IParticleHandle_Electron::clear3DObjects ( )
virtual

Delete objects.

Implements AODHandleBase.

Definition at line 82 of file IParticleHandle_Electron.cxx.

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

◆ clicked()

QStringList IParticleHandle_Electron::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 371 of file IParticleHandle_Electron.cxx.

372{
373 QStringList l;
374 l << "Electron:";
376 return l;
377}
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_Electron::dumpToJSON ( std::ofstream & str) const
virtual

Reimplemented from AODHandleBase.

Definition at line 597 of file IParticleHandle_Electron.cxx.

597 {
598 str << "\"chi2\":"<<m_d->electron->trackParticle()->chiSquared () <<", ";
599 str << "\"dof\":" <<m_d->electron->trackParticle()->numberDoF () <<", ";
600 str << "\"dparams\": ["
601 << m_d->electron->trackParticle()->d0() <<", "
602 << m_d->electron->trackParticle()->z0() <<", "
603 << m_d->electron->trackParticle()->phi0() <<", "
604 << m_d->electron->trackParticle()->theta() <<", "
605 << m_d->electron->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

◆ electron()

const xAOD::Electron & IParticleHandle_Electron::electron ( ) const

Definition at line 75 of file IParticleHandle_Electron.cxx.

75 {
76 return *(m_d->electron);
77}

◆ ensureInitSubSysHitInfo()

void IParticleHandle_Electron::ensureInitSubSysHitInfo ( ) const
private

◆ fillLineFromSplineFit()

void IParticleHandle_Electron::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 235 of file IParticleHandle_Electron.cxx.

235 {
236 int iver(0);
237 unsigned int npointsused(0);
238 // Create new lineset etc
239 m_d->line = new SoLineSet();
240 m_d->line->ref();
241
242 // For the moment, lets just draw the lines.
243 SoVertexProperty * vertices = new SoVertexProperty();
244
245 // std::cout<<"About to loop over "<<positions.size()<<" points to make line"<<std::endl;
246 // for (unsigned int i=0; i<positions.size(); ++i){
247 // 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;
248 // }
249
250 // std::cout<<"Now do interpolations."<<std::endl;
251
252 bool useExistingParams = m_d->collHandle->collSettingsButton().useExistingParameters();
253
254 for (unsigned int i=1; i<positions.size(); ++i){
255 // 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;
256
257 if (useExistingParams){
258 float scale = ( (positions[i]-positions[i-1]).mag() )/3.0; // want to split curve into three parts
259 Amg::Vector3D p0(positions[i-1]); // first position
260 Amg::Vector3D p1(positions[i-1]+(scale * momenta[i-1].unit() ) ); // move 1/3 or the way towards next point, but following momentum direction
261 Amg::Vector3D p2(positions[i] -(scale * momenta[i].unit() ) ); // back 1/3 from second point, but following momentum direction
262 Amg::Vector3D p3(positions[i]);
263 // std::cout<<"p0: ("<<p0[0]<<", "<<p0[1]<<", "<<p0[2]<<") "<<std::endl;
264 // std::cout<<"p1: ("<<p1[0]<<", "<<p1[1]<<", "<<p1[2]<<") "<<std::endl;
265 // std::cout<<"p2: ("<<p2[0]<<", "<<p2[1]<<", "<<p2[2]<<") "<<std::endl;
266 // std::cout<<"p3: ("<<p3[0]<<", "<<p3[1]<<", "<<p3[2]<<") "<<std::endl;
267
268 unsigned int maxCount=m_d->collHandle->collSettingsButton().numOfStepsForInterpolation();
269 for (unsigned int count=1; count<=maxCount;++count){
270 float t=static_cast<float>(count)/static_cast<float>(maxCount);
272 bezier(pos, p0, p1, p2, p3, t);
273 // std::cout<<"j: "<<count<<" \tat ("<<pos.x()<<","<<pos.y()<<","<<pos.z()<<")"<<std::endl;
274
275 // pos = pos + momdelta;
276 vertices->vertex.set1Value(iver++,pos.x(),pos.y(),pos.z());
277 m_d->positionsToWrite.append(pos);
278
279 npointsused++;
280 }
281 } else {
282 vertices->vertex.set1Value(iver++,positions[i].x(),positions[i].y(),positions[i].z());
283 m_d->positionsToWrite.append(positions[i]);
284 npointsused++;
285 }
286 }
287
288 // Add final point.
289
290
291
292 // Add to SoLine set
293 m_d->line->numVertices.set1Value(0,npointsused);
294 m_d->line->vertexProperty = vertices;
295
296}
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_Electron::fillObjectBrowser ( QList< QTreeWidgetItem * > & list)
virtual

Create and fill the object browser QTreeWidgetItem.

Reimplemented from AODHandleBase.

Definition at line 514 of file IParticleHandle_Electron.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->electron->trackParticle()->d0());
522 dParameters+=", ";
523 dParameters+=QString::number(m_d->electron->trackParticle()->z0());
524 dParameters+=", ";
525 dParameters+=QString::number(m_d->electron->trackParticle()->phi0());
526 dParameters+=", ";
527 dParameters+=QString::number(m_d->electron->trackParticle()->theta());
528 dParameters+=", ";
529 dParameters+=QString::number(m_d->electron->trackParticle()->qOverP());
530 dParameters+=")";
531 TSOSitem->setText(1, dParameters );
532
533 for (unsigned int i=0; i<m_d->electron->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->electron->trackParticle()->parameterX(i));
538 pos+=", ";
539 pos+=QString::number(m_d->electron->trackParticle()->parameterY(i));
540 pos+=", ";
541 pos+=QString::number(m_d->electron->trackParticle()->parameterZ(i));
542 pos+=")";
543
544 switch (m_d->electron->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_Electron::getNMuonPhiHoleLayers ( ) const
virtual

Definition at line 501 of file IParticleHandle_Electron.cxx.

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

◆ getNMuonPhiLayers()

unsigned IParticleHandle_Electron::getNMuonPhiLayers ( ) const
virtual

Definition at line 496 of file IParticleHandle_Electron.cxx.

497{
499
500}//____________________________________________________________________
@ numberOfPhiLayers
layers with a trigger phi hit [unit8_t].

◆ getNMuonPrecisionHoleLayers()

unsigned IParticleHandle_Electron::getNMuonPrecisionHoleLayers ( ) const
virtual

Definition at line 491 of file IParticleHandle_Electron.cxx.

492{
494}
@ numberOfPrecisionHoleLayers
layers with holes AND no hits [unit8_t].

◆ getNMuonPrecisionLayers()

unsigned IParticleHandle_Electron::getNMuonPrecisionLayers ( ) const
virtual

Definition at line 486 of file IParticleHandle_Electron.cxx.

487{
489}
@ numberOfPrecisionLayers
layers with at least 3 hits [unit8_t].

◆ getNPixelHits()

unsigned IParticleHandle_Electron::getNPixelHits ( ) const
virtual

Definition at line 470 of file IParticleHandle_Electron.cxx.

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

◆ getNSCTHits()

unsigned IParticleHandle_Electron::getNSCTHits ( ) const
virtual

Definition at line 476 of file IParticleHandle_Electron.cxx.

477{
479}
@ numberOfSCTHits
number of hits in SCT [unit8_t].

◆ getNTRTHits()

unsigned IParticleHandle_Electron::getNTRTHits ( ) const
virtual

Definition at line 481 of file IParticleHandle_Electron.cxx.

482{
484}
@ numberOfTRTHits
number of TRT hits [unit8_t].

◆ has3DObjects()

bool IParticleHandle_Electron::has3DObjects ( )
virtual

Returns true if the 3D objects have been created.

Reimplemented from AODHandleBase.

Definition at line 79 of file IParticleHandle_Electron.cxx.

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

◆ 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_Electron::iParticle ( ) const
virtual

Implements IParticleHandleBase.

Definition at line 446 of file IParticleHandle_Electron.cxx.

447{
448 return *(m_d->electron);
449}

◆ linear()

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

Definition at line 217 of file IParticleHandle_Electron.cxx.

217 {
218 float x = a.x() + (b.x()-a.x())*t;
219 float y = a.y() + (b.y()-a.y())*t;
220 float z = a.z() + (b.z()-a.z())*t;
222}
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_Electron::momentum ( ) const
virtual

Reimplemented from IParticleHandleBase.

Definition at line 411 of file IParticleHandle_Electron.cxx.

412 {
413 const Trk::Perigee& p = m_d->electron->trackParticle()->perigeeParameters();
414 return p.momentum();
415 }

◆ nodes()

SoNode * IParticleHandle_Electron::nodes ( )
virtual

Returns the 3Dobjects.

Implements AODHandleBase.

Definition at line 99 of file IParticleHandle_Electron.cxx.

99 {
100 VP1Msg::messageVerbose("IParticleHandle_Electron::nodes with m_d->sep="+VP1Msg::str(m_d->sep));
101
102 if (m_d->sep) {
103 VP1Msg::messageVerbose("IParticleHandle_Electron::nodes() - already have sep so not doing anything.");
104 return m_d->sep;
105 }
106 if (!m_d->sep) {
107 m_d->sep = new SoSeparator();
108 m_d->sep->ref();
109 }
110
111 bool fromTrack=m_d->collHandle->collSettingsButton().useExistingParameters();
112
113 if (fromTrack) {
115 } else {
116 #ifndef BUILDVP1LIGHT
117 VP1Msg::messageVerbose( "addLine_Extrapolated()" );
119 #endif // BUILDVP1LIGHT
120 }
121
122 if (m_d->collHandle->collSettingsButton().showParameters())
124
125 return m_d->sep;
126}
void addLine_FromElectron()
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_Electron::parametersAndPositions ( ) const

Definition at line 571 of file IParticleHandle_Electron.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->electron->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()) ) ); // TODO: move to position()?
583#endif // BUILDVP1LIGHT
584
585 float x,y,z;
586 for (unsigned int i=0; i<m_d->electron->trackParticle()->numberOfParameters() ; ++i){
587 x = m_d->electron->trackParticle()->parameterX(i);
588 y = m_d->electron->trackParticle()->parameterY(i);
589 z = m_d->electron->trackParticle()->parameterZ(i);
590
591 m_d->parametersAndPositions.append(paramAndPos(m_d->electron->trackParticle()->parameterPosition(i), Amg::Vector3D(x,y,z)));
592 }
593 VP1Msg::messageVerbose("Electron parametersAndPositions() - returning this many positions : "+VP1Msg::str(m_d->parametersAndPositions.size()) );
594 return m_d->parametersAndPositions;
595}

◆ position()

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

Definition at line 436 of file IParticleHandle_Electron.cxx.

437 {
438 const Trk::Perigee& p = m_d->electron->trackParticle()->perigeeParameters();
439 return p.position(); // TODO: check what this returns
440 }

◆ 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_Electron::shortInfo ( ) const
virtual

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

Reimplemented from AODHandleBase.

Definition at line 506 of file IParticleHandle_Electron.cxx.

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

◆ summaryValue()

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

Definition at line 458 of file IParticleHandle_Electron.cxx.

459{
460 uint8_t num = 0;
461 if (m_d->electron->trackParticle()->summaryValue(num,type)){
462 return num;
463 }
464 // else...
465 VP1Msg::message("IParticleHandle_Electron::getSummaryValue - unable to retrieve the requested enum: "+VP1Msg::str(type));
466 return 999999;
467}
virtual QString type() const
return very short word with type (maybe link with collection type?)

◆ type()

virtual QString IParticleHandle_Electron::type ( ) const
inlinevirtual

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

Reimplemented from AODHandleBase.

Definition at line 66 of file IParticleHandle_Electron.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_Electron::m_d
private

Definition at line 81 of file IParticleHandle_Electron.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: