ATLAS Offline Software
Loading...
Searching...
No Matches
TrackCollHandleBase.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4
5
7// //
8// Implementation of class TrackCollHandleBase //
9// //
10// Author: Thomas H. Kittelmann (Thomas.Kittelmann@cern.ch) //
11// Initial version: February 2008 //
12// //
14
22
30#include "VP1Base/VP1Msg.h"
31
32
33#include <Inventor/nodes/SoSeparator.h>
34#include <Inventor/nodes/SoMaterial.h>
35#include <Inventor/nodes/SoSwitch.h>
36#include "Inventor/nodes/SoDrawStyle.h"
37#include "Inventor/nodes/SoLightModel.h"
38
41
42#include <QComboBox>
43#include <QTreeWidgetItem>
44#include <QElapsedTimer>
45
46#include <qdatetime.h>
47#include <vector>
48
49// #include "VP1TrackSystems/TrackObjectBrowserController.h"
50
51
52//____________________________________________________________________
54public:
56 QString name;
57
58 //Vector of track handles:
59 std::vector<TrackHandleBase*> trackhandles;
60 //For iteration:
61 std::vector<TrackHandleBase*>::iterator itTrackHandles;
62 std::vector<TrackHandleBase*>::iterator itTrackHandlesEnd;
63
65 bool notifystatesave = false;
66
67 TrackCommonFlags::TSOSPartsFlags shownTSOSParts;
68 TrackCommonFlags::TSOSPartsFlags customColouredTSOSParts;
77
78 //Extra widgets:
79 QComboBox * comboBox_colourby = nullptr;
80
81 static QString comboBoxEntry_ColourByCollection() { return "Uniform"; }
82 static QString comboBoxEntry_ColourByRandom() { return "Random"; }
83 static QString comboBoxEntry_ColourByMomentum() { return "Mom."; }
84 static QString comboBoxEntry_ColourByCharge() { return "Charge"; }
85 static QString comboBoxEntry_ColourByPID() { return "PID"; }
86 static QString comboBoxEntry_ColourByDistanceFromSelectedTrack() { return "Dist. Sel."; }
87 static QString comboBoxEntry_ColourByVertex() { return "Vertex"; }
88
89 QTreeWidgetItem* objBrowseTree = nullptr;
91 bool last_useDefaultCuts = false;
92};
93
94
95
96//____________________________________________________________________
98 const QString& name,
100 : VP1StdCollection(cd->system(),"TrackCollHandle_"+TrackType::typeToString(type)+"_"+name), m_d(new Imp),
102 m_commonData(cd),
103 m_sephelper(nullptr),
104 m_propagator(nullptr),
106 m_propMaxRadius(0.0),
107 m_parts(TrackCommonFlags::NoParts),
114 m_cut_requiredNHits(QList<unsigned>()),
116 m_cut_pt_allowall(false),
117 m_cut_eta_allowall(false),
118 m_cut_phi_allowall(false),
120{
121 m_d->theclass = this;
122 m_d->name = name;
123 m_d->lastUsedPropagator = nullptr;
124 m_d->notifystatesave = false;
125 m_d->shownTSOSParts = TrackCommonFlags::TSOS_NoObjects;
126 m_d->customColouredTSOSParts = TrackCommonFlags::TSOS_NoObjects;
127 //Fixme: to avoid double work on startup, these should have the same
128 //values here as the controller defaults:
129 m_d->tsos_useShortTRTMeasurements = true;
130 m_d->tsos_useShortMDTMeasurements = true;
131 m_d->tsos_drawMeasGlobalPositions = false;
132 m_d->tsos_measurementsShorttubesScale = 2.0;
133 m_d->tsos_nStdDevForParamErrors = false;
134 m_d->tsos_numberOfPointsOnCircles = 12;
135 m_d->tsos_materialEffectsOnTrackScale = 2.0;
136 m_d->tsos_parTubeErrorsDrawCylinders = false;
137
138 m_d->comboBox_colourby = new QComboBox;
139 m_d->objBrowseTree = nullptr;
140 m_d->matButton=nullptr;
141}
142
143//____________________________________________________________________
145{
146 m_d->matButton = new TrackCollectionSettingsButton;
147 m_d->matButton->setText(text());
148 VP1StdCollection::init(m_d->matButton);//this call is required. Passing in TrackCollectionSettingsButton means we have the more complex button.
149
150 setupSettingsFromController(common()->controller());
151
152 //Setup colour by:
153 m_d->comboBox_colourby->setToolTip("Determine how tracks from this collection are coloured.\n The 'Dist. Sel.' option means the tracks will be coloured by distance from the last selected track. ");
154 QStringList l;
157 if (allowColourByPID())
165 if (allowColourByVertex()) {
166 // messageVerbose("Allow colour by vertex!");
168 }
169 m_d->comboBox_colourby->addItems(l);
170 m_d->comboBox_colourby->setCurrentIndex(0);//corresponds to per collection.
171 connect(m_d->comboBox_colourby,SIGNAL(currentIndexChanged(int)),
172 this,SLOT(colourByComboBoxItemChanged()));
173
174 connect(this,SIGNAL(visibilityChanged(bool)),this,SLOT(collVisibilityChanged(bool)));
176
177 // add stuff to control per collection settings.
178 collSwitch()->addChild(m_d->matButton->trackLightModel());
179 collSwitch()->addChild(m_d->matButton->trackDrawStyle());
180}
181
182//____________________________________________________________________
184{
185 messageVerbose("destructor start");
186 cleanupPtrContainer(m_d->trackhandles);
187 if (m_sephelper) {
188 SoSeparator * sep = m_sephelper->topSeparator();
189 sep->ref();
190 delete m_sephelper;
191 sep->unref();
192 }
193 delete m_d;
194 messageVerbose("destructor end");
195}
196
197//____________________________________________________________________
199{
200 messageVerbose("setupSettingsFromController start");
201
202 assert(controller);
204
205 connect(TrackSystemController::customTourEditor(),SIGNAL(clipVolumeRadiusChanged(double)),this,SLOT(clipVolumeChanged(double)));
206
207 connect(controller,SIGNAL(propagatorChanged(Trk::IExtrapolator *)),this,SLOT(setPropagator(Trk::IExtrapolator *)));
208 setPropagator(controller->propagator());
209
210 connect(controller,SIGNAL(propagationOptionsChanged(TrackSystemController::PropagationOptionFlags)),this,SLOT(setPropagationOptions(TrackSystemController::PropagationOptionFlags)));
212
213 connect(controller,SIGNAL(propMaxRadiusChanged(float)),this,SLOT(setPropMaxRadius(float)));
214 setPropMaxRadius(controller->propMaxRadius());
215
216 // Doing this in a slightly different way to avoid making lots of new stuff in controller.
217 connect(controller,SIGNAL(extrapolateToThisVolumeChanged(void)),this,SLOT(extrapolateToThisVolumeChanged(void)));
218
219 connect(controller,SIGNAL(shownTrackPartsChanged(TrackCommonFlags::TrackPartsFlags)),this,SLOT(setParts(TrackCommonFlags::TrackPartsFlags)));
220 connect(m_d->matButton,SIGNAL(hideActualTrackPathChanged(bool)),this,SLOT(setActualPathShown(bool)));
221 setParts(controller->shownTrackParts());
222
223 connect(controller,SIGNAL(vertexProjectionAngleChanged(int)),this,SLOT(setParts(int)));
224 setParts(controller->vertexProjectionAngle());
225
226 // connect(controller,SIGNAL(trackTubeRadiusChanged(const double&)),this,SLOT(setTrackTubeRadius(const double&)));
227 connect(m_d->matButton,SIGNAL(trackTubeRadiusChanged(const double&)),this,SLOT(setTrackTubeRadius(const double&)));
228 setTrackTubeRadius(m_d->matButton->trackTubeRadius());
229
230 connect(controller,SIGNAL(rerandomise()),this,SLOT(rerandomiseRandomTrackColours()));
231
232 connect(common()->system(),SIGNAL(newTrackSelected( const TrackHandleBase&)),this,SLOT(trackSelectionChanged()));
233
234 //cuts
235 connect(m_d->matButton,SIGNAL(useDefaultCutsChanged(bool)),this,SLOT(setUseDefaultCuts(bool)));
236 setUseDefaultCuts(m_d->matButton->useDefaultCuts());
237
238 connect(controller,SIGNAL(cutAllowedPtChanged(const VP1Interval&)),this,SLOT(setCutAllowedPt(const VP1Interval&)));
239 connect(m_d->matButton,SIGNAL(cutAllowedPtChanged(const VP1Interval&)),this,SLOT(setCutAllowedPt(const VP1Interval&)));
240 setCutAllowedPt(useDefaultCuts()?controller->cutAllowedPt():m_d->matButton->cutAllowedPt());
241
242 connect(controller,SIGNAL(cutAllowedEtaChanged(const VP1Interval&)),this,SLOT(setCutAllowedEta(const VP1Interval&)));
243 connect(m_d->matButton,SIGNAL(cutAllowedEtaChanged(const VP1Interval&)),this,SLOT(setCutAllowedEta(const VP1Interval&)));
244 setCutAllowedEta(useDefaultCuts()?controller->cutAllowedEta():m_d->matButton->cutAllowedEta());
245
246 connect(controller,SIGNAL(cutAllowedPhiChanged(const QList<VP1Interval>&)),this,SLOT(setCutAllowedPhi(const QList<VP1Interval>&)));
247 connect(m_d->matButton,SIGNAL(cutAllowedPhiChanged(const QList<VP1Interval>&)),this,SLOT(setCutAllowedPhi(const QList<VP1Interval>&)));
248 setCutAllowedPhi(useDefaultCuts()?controller->cutAllowedPhi():m_d->matButton->cutAllowedPhi());
249
250 connect(controller,SIGNAL(cutRequiredNHitsChanged(const QList<unsigned>&)),this,SLOT(setRequiredNHits(const QList<unsigned>&)));
251 connect(m_d->matButton,SIGNAL(cutRequiredNHitsChanged(const QList<unsigned>&)),this,SLOT(setRequiredNHits(const QList<unsigned>&)));
252 setRequiredNHits(useDefaultCuts()?controller->cutRequiredNHits():m_d->matButton->cutRequiredNHits());
253
254 connect(controller,SIGNAL(cutRequiredDetectorElementChanged(const QString&)),this,SLOT(setRequiredDetectorElement(const QString&)));
255 connect(m_d->matButton,SIGNAL(cutRequiredDetectorElementChanged(const QString&)),this,SLOT(setRequiredDetectorElement(const QString&)));
256
257 connect(controller,SIGNAL(cutOnlyVertexAssocTracksChanged(bool)),this,SLOT(setOnlyVertexAssocTracks(bool)));
258 connect(m_d->matButton,SIGNAL(cutOnlyVertexAssocTracksChanged(bool)),this,SLOT(setOnlyVertexAssocTracks(bool)));
259 setOnlyVertexAssocTracks(useDefaultCuts()?controller->cutOnlyVertexAssocTracks():m_d->matButton->cutOnlyVertexAssocTracks());
260
261 connect(controller,SIGNAL(customColouredTSOSPartsChanged(TrackCommonFlags::TSOSPartsFlags)),
262 this,SLOT(setCustomColouredTSOSParts(TrackCommonFlags::TSOSPartsFlags)));
264
265 connect(controller,SIGNAL(useShortTRTMeasurementsChanged(bool)),this,SLOT(setUseShortTRTMeasurements(bool)));
267
268 connect(controller,SIGNAL(useShortMDTMeasurementsChanged(bool)),this,SLOT(setUseShortMDTMeasurements(bool)));
270
271 connect(controller,SIGNAL(drawMeasGlobalPositionsChanged(bool)),this,SLOT(setDrawMeasGlobalPositions(bool)));
273
274 connect(controller,SIGNAL(measurementsShorttubesScaleChanged(double)),this,SLOT(setMeasurementsShorttubesScale(double)));
276
277 connect(controller,SIGNAL(nStdDevForParamErrorsChanged(const double&)),this,SLOT(setNStdDevForParamErrors(const double&)));
279
280 connect(controller,SIGNAL(numberOfPointsOnCirclesChanged(int)),this,SLOT(setNumberOfPointsOnCircles(int)));
282
283 connect(controller,SIGNAL(materialEffectsOnTrackScaleChanged(double)),this,SLOT(setMaterialEffectsOnTrackScale(double)));
285
286 connect(controller,SIGNAL(parTubeErrorsDrawCylindersChanged(bool)),this,SLOT(setParTubeErrorsDrawCylinders(bool)));
288
289 connect(controller,SIGNAL(shownTSOSPartsChanged(TrackCommonFlags::TSOSPartsFlags)),
290 this,SLOT(setShownTSOSParts(TrackCommonFlags::TSOSPartsFlags)));
291 setShownTSOSParts(controller->shownTSOSParts());
292
293 connect(controller,SIGNAL(customColouredTSOSPartsChanged(TrackCommonFlags::TSOSPartsFlags)),
294 this,SLOT(setCustomColouredTSOSParts(TrackCommonFlags::TSOSPartsFlags)));
296
297 connect(controller,SIGNAL(trackLabelsChanged(TrackSystemController::TrackLabelModes)),this,SLOT(setLabels(TrackSystemController::TrackLabelModes)));
298 connect(controller,SIGNAL(trackLabelTrkOffsetChanged(float)),this,SLOT(setLabelTrkOffset(float)));
299 connect(controller,SIGNAL(trackLabelPosOffsetChanged(QList<int>)),this,SLOT(setLabelPosOffsets(QList<int>)));
300 setLabels(controller->trackLabels());
301
303
305 messageVerbose("setupSettingsFromController end");
306
307}
308
309//____________________________________________________________________
310const QString& TrackCollHandleBase::name() const
311{
312 return m_d->name;
313}
314
315//____________________________________________________________________
317{
319 return false;
320
322 //assert(m_cut_requiredNHits.count()==4); // for old code
323 assert(m_cut_requiredNHits.count()==5);
324 // Only apply ID cuts to tracks which have ID hits (so ID only and combined muons)
325 if (handle->isIDTrack()){
326 if (handle->getNPixelHits()<m_cut_requiredNHits[0]) return false;
327 if (handle->getNSCTHits()<m_cut_requiredNHits[1]) return false;
328 if (handle->getNTRTHits()<m_cut_requiredNHits[2]) return false;
329 } else {
330 messageVerbose("Not an ID track, so not applying ID cuts.");
331 }
332 if (handle->getNMuonHits()<m_cut_requiredNHits[3]) return false;
333 if (handle->getNMuonPrecisionHits()<m_cut_requiredNHits[4]) return false;
334 }
335
337 {
338 Amg::Vector3D mom(handle->momentum());
339
340 // convention is that if interval is real and negative, then P cut rather than pT
341 bool isPCut = (!m_cut_allowedPtSq.noLowerBound() && m_cut_allowedPtSq.lower()<=0)
342 || (!m_cut_allowedPtSq.noUpperBound() && m_cut_allowedPtSq.upper()<=0);
343
344 if (mom.mag2()!=0.0) {
345 if (!m_cut_pt_allowall&&!isPCut && !m_cut_allowedPtSq.contains(mom.perp2()))
346 return false;
347 if (!m_cut_pt_allowall&& isPCut && !m_cut_allowedPtSq.contains(-mom.mag2()))
348 return false;
349
350 if (!m_cut_eta_allowall&&!m_cut_allowedEta.contains(mom.eta())){
351 return false;
352 }
353 if (!m_cut_phi_allowall) {
354 double phi = VP1LinAlgUtils::phiFromXY(mom.x(), mom.y() );
355 bool ok(false);
356 for (const VP1Interval& phirange : m_cut_allowedPhi) {
357 if (phirange.contains(phi)||phirange.contains(phi+2*M_PI)||phirange.contains(phi-2*M_PI)) {
358 ok = true;
359 break;
360 }
361 }
362 if (!ok)
363 return false;
364 }
365 }
366 }
367
368 // Cut on specific det element identifier
369 if (!m_requiredDetectorElement.isEmpty())
371
373 return common()->system()->materialFromVertex(handle)!=nullptr; // return false if no vertex material associated to this track
374 }
375
376 return true;
377}
378
379//____________________________________________________________________
381{
382 handle->setVisible( visible() && cut(handle));
383}
384
385//____________________________________________________________________
387{
388 if (!isLoaded())
389 return;
390
391 //This method is called when a cut is tightened - thus we better start by deselectAll to avoid weird highlighting issues.
392 common()->system()->deselectAll();
393
395 std::vector<TrackHandleBase*>::iterator it(m_d->trackhandles.begin()),itE(m_d->trackhandles.end());
396 for (;it!=itE;++it) {
397 if ((*it)->visible())
398 recheckCutStatus(*it);
399 }
402
403 message("recheckCutStatusOfAllVisibleHandles: "+str(nShownHandles())+"/"+str(m_d->trackhandles.size())+" pass cuts");
404}
405
406//____________________________________________________________________
408{
409 if (!isLoaded())
410 return;
411
413 std::vector<TrackHandleBase*>::iterator it(m_d->trackhandles.begin()),itE(m_d->trackhandles.end());
414 for (;it!=itE;++it) {
415 if (!(*it)->visible())
416 recheckCutStatus(*it);
417 }
420
421 message("recheckCutStatusOfAllNotVisibleHandles: "+str(nShownHandles())+"/"+str(m_d->trackhandles.size())+" pass cuts");
422}
423
424//____________________________________________________________________
426{
427 if (!isLoaded())
428 return;
430 std::vector<TrackHandleBase*>::iterator it(m_d->trackhandles.begin()),itE(m_d->trackhandles.end());
431 for (;it!=itE;++it)
432 recheckCutStatus(*it);
435
436 message("recheckCutStatusOfAllHandles: "+str(nShownHandles())+"/"+str(m_d->trackhandles.size())+" pass cuts");
437}
438
439//____________________________________________________________________
440void TrackCollHandleBase::update3DObjectsOfAllHandles(bool onlythosetouchingmuonchambers, bool invalidatePropagatedPoints, float maxR )
441{
442 if (!isLoaded())
443 return;
444 if (VP1Msg::verbose())
445 messageVerbose("update3DObjectsOfAllHandles start (onlythosetouchingmuonchambers = "
446 +str(onlythosetouchingmuonchambers)+", invalidatePropagatedPoints = "
447 +str(invalidatePropagatedPoints)+")");
449 std::vector<TrackHandleBase*>::iterator it(m_d->trackhandles.begin()),itE(m_d->trackhandles.end());
450 if (onlythosetouchingmuonchambers) {
451 for (;it!=itE;++it)
452 if (!(*it)->touchedMuonChambers().empty())
453 (*it)->update3DObjects(invalidatePropagatedPoints, maxR);
454 } else {
455 for (;it!=itE;++it)
456 (*it)->update3DObjects(invalidatePropagatedPoints, maxR);
457 }
459 messageVerbose("update3DObjectsOfAllHandles end");
460}
461
462
463
464//____________________________________________________________________
466{
467 if (!isLoaded())
468 return;
469 messageVerbose("updateInDetProjectionsOfAllHandles start");
471 std::vector<TrackHandleBase*>::iterator it(m_d->trackhandles.begin()),itE(m_d->trackhandles.end());
472 for (;it!=itE;++it)
473 (*it)->updateInDetProjections();
475 messageVerbose("updateInDetProjectionsOfAllHandles end");
476
477}
478
479//____________________________________________________________________
481{
482 if (!isLoaded())
483 return;
484 messageVerbose("updateMuonProjectionsOfAllHandles start");
486 std::vector<TrackHandleBase*>::iterator it(m_d->trackhandles.begin()),itE(m_d->trackhandles.end());
487 for (;it!=itE;++it)
488 (*it)->updateMuonProjections();
490 messageVerbose("updateMuonProjectionsOfAllHandles end");
491
492}
493
494//____________________________________________________________________
496{
497 if (!isLoaded())
498 return;
499 messageVerbose("updateMaterialOfAllHandles start");
501 std::vector<TrackHandleBase*>::iterator it(m_d->trackhandles.begin()),itE(m_d->trackhandles.end());
502 for (;it!=itE;++it)
503 (*it)->updateMaterial();
505 messageVerbose("updateMaterialOfAllHandles end");
506}
507
508//____________________________________________________________________
510{
511 m_d->trackhandles.reserve(n);
512}
513
514//____________________________________________________________________
516{
517 m_d->trackhandles.push_back(handle);
518}
519
520//____________________________________________________________________
522{
524 messageVerbose("setPropagator ("+str(p)+") "+ (ignoreMEOT?str("ignoring MEOT"):str("using MEOT")) );
525 if (m_propagator==p)
526 return;
527 messageVerbose("setPropagator ==> Changed");
528 m_propagator=p;
529 bool mustUpdatePropagatedPoints = (p && m_d->lastUsedPropagator!=p);
530 update3DObjectsOfAllHandles(false,mustUpdatePropagatedPoints);
531 if (p)
532 m_d->lastUsedPropagator = p;
533}
534
535void TrackCollHandleBase::setPropagationOptions( TrackSystemController::PropagationOptionFlags options){
536 messageVerbose("setPropagationOptions ==> Changed");
537 m_propagationOptions=options;
538 update3DObjectsOfAllHandles(false,true);
539}
540
542 messageVerbose("setPropMaxRadius ==> Changed to "+str(radius));
543 m_propMaxRadius=radius;
544 update3DObjectsOfAllHandles(false,true);
545}
546
548 messageVerbose("extrapolateToThisVolume ==> Changed");
549 update3DObjectsOfAllHandles(false,true);
550}
551
553 messageVerbose("clipVolumeChanged ==> Changed");
554 update3DObjectsOfAllHandles(false, false, radius);
555}
556
557//____________________________________________________________________
558void TrackCollHandleBase::setParts( TrackCommonFlags::TrackPartsFlags parts )
559{
560 messageVerbose("setParts called");
561 if (m_parts==parts)
562 return;
563 messageVerbose("setParts ==> Changed");
564 bool onlymuonprojflagchanged = ( (parts^m_parts) == TrackCommonFlags::MuonProjections );
565 m_parts = parts;
566 update3DObjectsOfAllHandles(onlymuonprojflagchanged);
567}
568
569//____________________________________________________________________
571{
572 messageVerbose("setParts(int) called with angle="+str(angle));
573 //bit of a hack this- didn't want to make entire new machinery just to track angle.
574 // FIXME
575 update3DObjectsOfAllHandles(false,true);
576}
577
578//____________________________________________________________________
580{
581 messageVerbose("setActualPathShown(bool) called with hide="+str(hide));
582
583 TrackCommonFlags::TrackPartsFlags parts = m_parts;
584 if (hide) parts &= ~TrackCommonFlags::ActualPath;
587}
588
589//____________________________________________________________________
590void TrackCollHandleBase::setLabels( TrackSystemController::TrackLabelModes labels )
591{
592 messageVerbose("setLabels called");
593 if (m_labels==labels)
594 return;
595 messageVerbose("setLabels ==> Changed");
596 m_labels = labels;
598}
599
600//____________________________________________________________________
602{
603 messageVerbose("setLabelTrkOffset called");
604 if (m_labelsTrkOffset==offset)
605 return;
606 messageVerbose("setLabelTrkOffset ==> Changed to "+QString::number(offset));
607 m_labelsTrkOffset = offset;
609}
610
611//____________________________________________________________________
612void TrackCollHandleBase::setLabelPosOffsets( const QList<int>& offsets)
613{
614 messageVerbose("setLabelPosOffsets called");
615 if (m_labelsPosOffsets==offsets)
616 return;
617 messageVerbose("setLabelPosOffsets ==> Changed");
618 m_labelsPosOffsets = offsets;
620}
621
622//____________________________________________________________________
624{
625 messageVerbose("setTrackTubeRadius called");
626 if (m_trackTubeRadius==r)
627 return;
629 messageVerbose("setTrackTubeRadius ==> Changed");
631}
632
633//____________________________________________________________________
635{
636 messageVerbose("setColourBy called");
637 if (m_colourby==cb)
638 return;
639 messageVerbose("setColourBy ==> Changed");
640 m_colourby=cb;
641
642 //Update gui combobox:
643 QString targetText;
644 switch(cb) {
645 case COLOUR_BYPID:
646 targetText = Imp::comboBoxEntry_ColourByPID();
647 break;
648 case COLOUR_RANDOM:
650 break;
651 case COLOUR_MOMENTUM:
653 break;
654 case COLOUR_CHARGE:
656 break;
657 case COLOUR_DISTANCE:
659 break;
660 case COLOUR_VERTEX:
662 break;
663 default:
666 break;
667 }
668 if (targetText!=m_d->comboBox_colourby->currentText()) {
669 int i = m_d->comboBox_colourby->findText(targetText);
670 if (i>=0&&i<m_d->comboBox_colourby->count()) {
671 bool save = m_d->comboBox_colourby->blockSignals(true);
672 m_d->comboBox_colourby->setCurrentIndex(i);
673 m_d->comboBox_colourby->blockSignals(save);
674 } else {
675 message("ERROR: Problems finding correct text in combo box");
676 }
677 }
678
679 //Actual material updates:
681 m_commonData->system()->deselectAll();//Todo: Reselect the selected track handles
682 //afterwards (collhandles should know selected handles)
685
686}
687
688//____________________________________________________________________
690{
691 if (!isLoaded())
692 return;
693 messageVerbose("rerandomiseRandomTrackColours start");
695 std::vector<TrackHandleBase*>::iterator it(m_d->trackhandles.begin()),itE(m_d->trackhandles.end());
696 for (;it!=itE;++it)
697 (*it)->rerandomiseRandomMaterial();
699 messageVerbose("rerandomiseRandomTrackColours end");
700}
701
702//____________________________________________________________________
704{
705 if (!isLoaded() || colourBy()!= COLOUR_DISTANCE)
706 return;
707 messageVerbose("trackSelectionChanged start");
709 std::vector<TrackHandleBase*>::iterator it(m_d->trackhandles.begin()),itE(m_d->trackhandles.end());
710 for (;it!=itE;++it)
711 (*it)->updateMaterial();
713 messageVerbose("trackSelectionChanged end");
714}
715
716//____________________________________________________________________
718{
719 m_d->itTrackHandles = m_d->trackhandles.begin();
720 m_d->itTrackHandlesEnd = m_d->trackhandles.end();
721}
722
723//____________________________________________________________________
725 if (m_d->itTrackHandles==m_d->itTrackHandlesEnd)
726 return nullptr;
727 else
728 return *(m_d->itTrackHandles++);
729}
730
731
733 if ( (m_d->last_useDefaultCuts) == useDefaults) return;
734 messageVerbose("setUseDefaultCuts changed to "+str(useDefaults)+"- rechecking all handles");
735 // recheckCutStatusOfAllHandles();
736
737 setCutAllowedPt(useDefaultCuts()? common()->controller()->cutAllowedPt():m_d->matButton->cutAllowedPt());
738 setCutAllowedEta(useDefaultCuts()?common()->controller()->cutAllowedEta():m_d->matButton->cutAllowedEta());
739 setCutAllowedPhi(useDefaultCuts()?common()->controller()->cutAllowedPhi():m_d->matButton->cutAllowedPhi());
740 setRequiredNHits(useDefaultCuts()?common()->controller()->cutRequiredNHits():m_d->matButton->cutRequiredNHits());
741 setOnlyVertexAssocTracks(useDefaultCuts()?common()->controller()->cutOnlyVertexAssocTracks():m_d->matButton->cutOnlyVertexAssocTracks());
742}
743
744//____________________________________________________________________
746{
747 if (!allowedpt.isSane())
748 return;
749
750 //why do we need to do this? Why does it matter if it's negative?
751 //double minptsq = allowedpt.lower() <= 0.0 ? -std::numeric_limits<double>::infinity() : allowedpt.lower()*allowedpt.lower();
752 //VP1Interval allowedptsq(minptsq,allowedpt.upper()*allowedpt.upper());
753
754 //Modified code from EJWM
755 double signMin = allowedpt.lower()<0.0 ? -1.0 : 1.0;
756 double signMax = allowedpt.upper()<0.0 ? -1.0 : 1.0;
757 double minptsq = allowedpt.lower() == -std::numeric_limits<double>::infinity() ? -std::numeric_limits<double>::infinity() : signMin*(allowedpt.lower()*allowedpt.lower());
758 double maxptsq = allowedpt.upper() == std::numeric_limits<double>::infinity() ? std::numeric_limits<double>::infinity() : signMax*(allowedpt.upper()*allowedpt.upper());
759
760 VP1Interval allowedptsq(minptsq,maxptsq);
761 // std::cout<<"allowedptsq:isAllR"<<allowedptsq.isAllR()<<std::endl;
762 // std::cout<<"allowedptsq.isEmpty()"<<allowedptsq.isEmpty()<<std::endl;
763
764
765 if (m_cut_allowedPtSq==allowedptsq)
766 return;
767 m_cut_pt_allowall = allowedptsq.isAllR();
768 m_cut_etaptphi_allwillfail = allowedptsq.isEmpty() || m_cut_allowedEta.isEmpty() || m_cut_allowedPhi.isEmpty();
769
770 if (!m_cut_allowedPtSq.contains(allowedptsq)&&!allowedptsq.contains(m_cut_allowedPtSq)) {
771 m_cut_allowedPtSq = allowedptsq;
773 return;
774 }
775 bool relaxcut = allowedptsq.contains(m_cut_allowedPtSq);
776 m_cut_allowedPtSq = allowedptsq;
777 if (relaxcut)
779 else
781}
782
783//____________________________________________________________________
785{
786 messageVerbose("signal received in setCutAllowedEta ("+allowedEta.toString()+")");
787 if (!allowedEta.isSane())
788 return;
789
790 if (m_cut_allowedEta==allowedEta)
791 return;
792 m_cut_eta_allowall = allowedEta.isAllR();
793 m_cut_etaptphi_allwillfail = allowedEta.isEmpty() || m_cut_allowedPtSq.isEmpty() || m_cut_allowedPhi.isEmpty();
794
795 if (!m_cut_allowedEta.contains(allowedEta)&&!allowedEta.contains(m_cut_allowedEta)) {
796 m_cut_allowedEta = allowedEta;
798 return;
799 }
800 bool relaxcut = allowedEta.contains(m_cut_allowedEta);
801 m_cut_allowedEta = allowedEta;
802 if (relaxcut)
804 else
806}
807
808//____________________________________________________________________
809void TrackCollHandleBase::setCutAllowedPhi(const QList<VP1Interval>& allowedPhi)
810{
811 messageVerbose("signal received in setCutAllowedPhi.");
812
813 if (m_cut_allowedPhi==allowedPhi)
814 return;
815 m_cut_allowedPhi = allowedPhi;
816
817 m_cut_phi_allowall = m_cut_allowedPhi.count()==1 && m_cut_allowedPhi.at(0).isAllR();
819
820 if (m_cut_phi_allowall) {
822 return;
823 }
826 return;
827 }
829}
830
831//____________________________________________________________________
832void TrackCollHandleBase::setRequiredNHits(const QList<unsigned>& l)
833{
835 return;//never deal with this...
836 if (m_cut_requiredNHits==l)
837 return;
838
839 //A bit complex to figure out if the cut change is pure relaxation or tightening:
840 bool relaxed(false),tightened(false);
841 if (m_cut_requiredNHits.isEmpty()) {
842 relaxed = false;
843 tightened = true;
844 } else {
845 if (l.isEmpty()) {
846 relaxed = true;
847 tightened = false;
848 } else {
849 assert(l.count()==m_cut_requiredNHits.count());
850 relaxed = false;
851 tightened = false;
852 for (int i=0;i<l.count();++i) {
853 if (m_cut_requiredNHits[i]>l[i])
854 relaxed=true;
855 else if (m_cut_requiredNHits[i]<l[i])
856 tightened = true;
857 }
858 }
859 }
860 assert(relaxed||tightened);
862 if (relaxed&&tightened) {
864 } else {
865 if (relaxed)
867 else
869 }
870}
871
876
877//____________________________________________________________________
879 messageVerbose("setOnlyVertexAssocTracks changed to "+str(b));
880
881 if (b)
883 else
885}
886
887//____________________________________________________________________
897
898//____________________________________________________________________
900{
903 TrackHandleBase* handle;
904 while ((handle=getNextTrackHandle()))
905 handle->setShownTSOSParts(m_d->shownTSOSParts);
907
908 fillObjectBrowser(); // FIXME! Probably not the right place to call this
909}
910
911//____________________________________________________________________
912void TrackCollHandleBase::setShownTSOSParts(TrackCommonFlags::TSOSPartsFlags f)
913{
914 if (m_d->shownTSOSParts==f)
915 return;
916 m_d->shownTSOSParts=f;
917 if (visible()) messageVerbose("shown TSOS parts changed to "+str(f));
919}
920
921
922//____________________________________________________________________
923void TrackCollHandleBase::setCustomColouredTSOSParts(TrackCommonFlags::TSOSPartsFlags f)
924{
925 if (m_d->customColouredTSOSParts==f)
926 return;
927 m_d->customColouredTSOSParts=f;
928 if (visible()) messageVerbose("custom coloured TSOS parts changed to "+str(f));
930}
931
932//____________________________________________________________________
934{
935 if (m_d->tsos_useShortTRTMeasurements==b)
936 return;
937 m_d->tsos_useShortTRTMeasurements=b;
940 TrackHandleBase* handle;
941 while ((handle=getNextTrackHandle()))
944}
945
946
947//____________________________________________________________________
949{
950 if (m_d->tsos_useShortMDTMeasurements==b)
951 return;
952 m_d->tsos_useShortMDTMeasurements=b;
955 TrackHandleBase* handle;
956 while ((handle=getNextTrackHandle()))
959}
960
961//____________________________________________________________________
963{
964 // if (visible()) messageVerbose("TrackCollHandleBase::setDrawMeasGlobalPositions => "+str(b));
965
966 if (m_d->tsos_drawMeasGlobalPositions==b)
967 return;
968 m_d->tsos_drawMeasGlobalPositions=b;
969
972 TrackHandleBase* handle;
973 while ((handle=getNextTrackHandle()))
976}
977
978//____________________________________________________________________
980{
981 if (m_d->tsos_measurementsShorttubesScale==n)
982 return;
983 m_d->tsos_useShortMDTMeasurements=n;
986 TrackHandleBase* handle;
987 while ((handle=getNextTrackHandle()))
990}
991
992//____________________________________________________________________
994{
995 if (m_d->tsos_nStdDevForParamErrors==nstddev)
996 return;
997 m_d->tsos_nStdDevForParamErrors=nstddev;
1000 TrackHandleBase* handle;
1001 while ((handle=getNextTrackHandle()))
1004}
1005
1006//____________________________________________________________________
1008{
1009 if (m_d->tsos_numberOfPointsOnCircles==n)
1010 return;
1011 m_d->tsos_numberOfPointsOnCircles=n;
1014 TrackHandleBase* handle;
1015 while ((handle=getNextTrackHandle()))
1018}
1019
1020//____________________________________________________________________
1022{
1023 if (m_d->tsos_materialEffectsOnTrackScale==n)
1024 return;
1025 m_d->tsos_materialEffectsOnTrackScale=n;
1028 TrackHandleBase* handle;
1029 while ((handle=getNextTrackHandle()))
1032}
1033
1034//____________________________________________________________________
1036{
1037 if (m_d->tsos_parTubeErrorsDrawCylinders==b)
1038 return;
1039 m_d->tsos_parTubeErrorsDrawCylinders=b;
1042 TrackHandleBase* handle;
1043 while ((handle=getNextTrackHandle()))
1046}
1047
1048//____________________________________________________________________
1053
1054//____________________________________________________________________
1056{
1057 if (!m_sephelper)
1059
1060 if (VP1Msg::verbose())
1061 messageVerbose("TrackCollHandleBase::collVisibilityChanged => "+str(vis));
1062 if (vis){
1063 recheckCutStatusOfAllNotVisibleHandles();//Fixme -> ofallhandles? All must be not visible anyway...
1065 if (m_d->objBrowseTree) m_d->objBrowseTree->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); // selectable, enabled
1066 }else{
1068// QTreeWidget* trkObjBrowser = common()->controller()->trackObjBrowser();
1069// if (m_d->objBrowseTree && trkObjBrowser) {
1070// trkObjBrowser->takeTopLevelItem(trkObjBrowser->indexOfTopLevelItem(m_d->objBrowseTree));
1071// delete m_d->objBrowseTree; m_d->objBrowseTree=0;
1072// }
1073 // FIXME - need to loop through handles setting pointers to deleted QTreeWidgetItems
1074 if (m_d->objBrowseTree) m_d->objBrowseTree->setFlags(Qt::ItemFlags()); // not selectable, not enabled
1075 }
1078}
1079
1081 messageVerbose("TrackCollHandleBase::updateObjectBrowserVisibilityCounts called for "+name());
1082 QTreeWidget* trkObjBrowser = common()->controller()->trackObjBrowser();
1083 if (!trkObjBrowser || !m_d->objBrowseTree) {
1084 messageVerbose("TrackCollHandleBase::updateObjectBrowserVisibilityCounts: no common()->controller()->trackObjBrowser() and/or m_d->objBrowseTree. Aborting");
1085 messageVerbose("trkObjBrowser: "+str(trkObjBrowser)+"\t m_d->objBrowseTree: "+str(m_d->objBrowseTree));
1086 return;
1087 }
1088 QString text(QString(": (")+QString::number(nShownHandles())+QString("/")+QString::number(m_d->trackhandles.size())+QString(") visible"));
1089 m_d->objBrowseTree->setText(1, text);
1090}
1091
1093{
1094 QElapsedTimer t;
1095 t.start();
1096
1097 QTreeWidget* trkObjBrowser = common()->controller()->trackObjBrowser();
1098 if (!trkObjBrowser) {
1099 messageVerbose("TrackCollHandleBase::fillObjectBrowser: no common()->controller()->trackObjBrowser(). Aborting");
1100 return;
1101 }
1102 if (!nShownHandles()) {
1103 //messageVerbose("TrackCollHandleBase::fillObjectBrowser: no shown handles, so leaving.");
1104 return; // don't bother with hidden collection
1105 }
1106 messageVerbose("TrackCollHandleBase::fillObjectBrowser called for "+name());
1107
1108 trkObjBrowser->setUpdatesEnabled(false);
1109
1110 bool firstTime=false;
1111 if (!m_d->objBrowseTree) {
1112 m_d->objBrowseTree = new QTreeWidgetItem(0);
1113 firstTime=true;
1114 messageVerbose("TrackCollHandleBase::fillObjectBrowser: First time so creating QTreeWidgetItem.");
1115 } else {
1116 int index = trkObjBrowser->indexOfTopLevelItem(m_d->objBrowseTree);
1117 if (index==-1 ) {
1118 messageVerbose("Missing from WidgetTree! Will continue but something must be wrong");
1119 }
1120 }
1121
1122 messageVerbose("TrackCollHandleBase::fillObjectBrowser about to start looping over tracks at "+QString::number(t.elapsed())+" ms");
1123
1124 QList<QTreeWidgetItem *> list;
1126 TrackHandleBase* trkHandle=nullptr;
1127 unsigned int i=0;
1128 unsigned int numVisible=0;
1129 while ((trkHandle=getNextTrackHandle()))
1130 {
1131 if (firstTime){
1132 trkHandle->fillObjectBrowser(list);
1133 } else {
1134 trkHandle->updateObjectBrowser();
1135 }
1136
1137 if (trkHandle->visible() ) numVisible++;
1138 i++;
1139 }
1140
1141 QString text(QString(": (")+QString::number(numVisible)+QString("/")+QString::number(i)+QString(") visible"));
1142
1143 m_d->objBrowseTree->setText(0, name());
1144 m_d->objBrowseTree->setText(1, text);
1145 m_d->objBrowseTree->addChildren(list);
1146 trkObjBrowser->addTopLevelItem(m_d->objBrowseTree);
1147 trkObjBrowser->setUpdatesEnabled(true);
1148
1149 messageVerbose("TrackCollHandleBase::fillObjectBrowser completed in "+QString::number(t.elapsed())+" ms");
1150
1151}
1152
1153//____________________________________________________________________
1155{
1156 VP1QtInventorUtils::setMatColor( m, defaultColor(), 0.18/*brightness*/ );
1157}
1158
1159//____________________________________________________________________
1161{
1162 switch (cb) {
1163 case COLOUR_PERCOLLECTION: return "COLOUR_PERCOLLECTION";
1164 case COLOUR_RANDOM: return "COLOUR_RANDOM";
1165 case COLOUR_MOMENTUM: return "COLOUR_MOMENTUM";
1166 case COLOUR_CHARGE: return "COLOUR_CHARGE";
1167 case COLOUR_BYPID: return "COLOUR_BYPID";
1168 case COLOUR_DISTANCE: return "COLOUR_DISTANCE";
1169 default: return "Unknown (ERROR)";
1170 }
1171}
1172//____________________________________________________________________
1174{
1175 return QList<QWidget*>() << m_d->comboBox_colourby;
1176
1177}
1178
1179//____________________________________________________________________
1181{
1182 VP1Serialise serialise(0/*version*/,systemBase());
1183 serialise.save(m_d->comboBox_colourby);
1184 serialise.disableUnsavedChecks();
1185 return serialise.result();
1186}
1187
1188//____________________________________________________________________
1190{
1191 VP1Deserialise state(ba, systemBase());
1192 if (state.version()!=0)
1193 return;//just ignore silently... i guess we ought to warn?
1194 state.restore(m_d->comboBox_colourby);
1197}
1198
1199//____________________________________________________________________
1201{
1202 messageVerbose("Collection detail level combo box changed index");
1203 if (m_d->comboBox_colourby->currentText()==Imp::comboBoxEntry_ColourByPID())
1205 else if (m_d->comboBox_colourby->currentText()==Imp::comboBoxEntry_ColourByRandom())
1207 else if (m_d->comboBox_colourby->currentText()==Imp::comboBoxEntry_ColourByMomentum())
1209 else if (m_d->comboBox_colourby->currentText()==Imp::comboBoxEntry_ColourByCharge())
1211 else if (m_d->comboBox_colourby->currentText()==Imp::comboBoxEntry_ColourByDistanceFromSelectedTrack())
1213 else if (m_d->comboBox_colourby->currentText()==Imp::comboBoxEntry_ColourByVertex())
1215 else
1217}
1218
1219//____________________________________________________________________
1221{
1222 messageVerbose("Collection colour changed");
1223
1224 if (m_d->comboBox_colourby->currentText()==Imp::comboBoxEntry_ColourByRandom()) {
1227 TrackHandleBase* handle;
1228 while ((handle=getNextTrackHandle()))
1231 } else {
1233 }
1234}
1235
1237{
1238 if (!m_d->matButton) {
1239 message("ERROR: useDefaultCuts(..) called before init()");
1240 return true;
1241 }
1242 return m_d->matButton->useDefaultCuts();
1243}
1244
1246{
1247 if (!m_d->matButton) {
1248 message("ERROR: cutOnlyVertexAssocTracks(..) called before init()");
1249 return false;
1250 }
1251 if (m_d->matButton->useDefaultCuts()) return common()->controller()->cutOnlyVertexAssocTracks();
1252 return m_d->matButton->cutOnlyVertexAssocTracks();
1253}
1254
1255
1256
1257
1258//____________________________________________________________________
1259void TrackCollHandleBase::setState(const QByteArray&state)
1260{
1261 if (!m_d->matButton) {
1262 message("ERROR: setState(..) called before init()");
1263 return;
1264 }
1265 VP1Deserialise des(state);
1267 if (des.version()!=0&&des.version()!=1) {
1268 messageDebug("Warning: Ignoring state with wrong version");
1269 return;
1270 }
1271 bool vis = des.restoreBool();
1272
1273 QByteArray matState = des.restoreByteArray();
1274 m_d->matButton->restoreFromState(matState);
1275 QByteArray extraWidgetState = des.version()>=1 ? des.restoreByteArray() : QByteArray();
1276 setVisible(vis);
1277
1278 if (extraWidgetState!=QByteArray())
1279 setExtraWidgetsState(extraWidgetState);
1280}
1281
1282//____________________________________________________________________
1284{
1285 if (!m_d->matButton) {
1286 message("ERROR: persistifiableState() called before init()");
1287 return {};
1288 }
1289 VP1Serialise serialise(1/*version*/);
1290 serialise.disableUnsavedChecks();
1291 serialise.save(visible());
1292 Q_ASSERT(m_d->matButton&&"Did you forget to call init() on this VP1StdCollection?");
1293 serialise.save(m_d->matButton->saveState());
1294 serialise.save(extraWidgetsState());//version 1+
1295 return serialise.result();
1296}
#define M_PI
Scalar phi() const
phi method
double angle(const GeoTrf::Vector2D &a, const GeoTrf::Vector2D &b)
virtual void deselectAll(SoCooperativeSelection *exception_sel=0)
std::vector< TrackHandleBase * > trackhandles
TrackCollHandleBase * theclass
TrackCommonFlags::TSOSPartsFlags shownTSOSParts
static QString comboBoxEntry_ColourByRandom()
static QString comboBoxEntry_ColourByDistanceFromSelectedTrack()
static QString comboBoxEntry_ColourByVertex()
static QString comboBoxEntry_ColourByMomentum()
Trk::IExtrapolator * lastUsedPropagator
static QString comboBoxEntry_ColourByCharge()
std::vector< TrackHandleBase * >::iterator itTrackHandlesEnd
TrackCommonFlags::TSOSPartsFlags customColouredTSOSParts
TrackCollectionSettingsButton * matButton
static QString comboBoxEntry_ColourByPID()
std::vector< TrackHandleBase * >::iterator itTrackHandles
static QString comboBoxEntry_ColourByCollection()
TrackSysCommonData * common() const
virtual void init(VP1MaterialButtonBase *matBut=0)
TrackSysCommonData * m_commonData
VP1ExtraSepLayerHelper * m_sephelper
virtual bool allowColourByDistanceFromSelectedTrack() const
void setNStdDevForParamErrors(const double &)
void recheckCutStatus(TrackHandleBase *)
TrackSystemController::TrackLabelModes m_labels
bool cutOnlyVertexAssocTracks() const
Return true if this collection should only should tracks associated to a vertex.
void setPropagator(Trk::IExtrapolator *)
void setCutAllowedPt(const VP1Interval &)
void extrapolateToThisVolumeChanged(void)
virtual bool mightHaveSubSystemHitInfo() const
void setLabelPosOffsets(const QList< int > &)
QList< QWidget * > provideExtraWidgetsForGuiRow() const
void setShownTSOSParts(TrackCommonFlags::TSOSPartsFlags)
void setupSettingsFromController(TrackSystemController *)
void update3DObjectsOfAllHandles(bool onlythosetouchingmuonchambers=false, bool invalidatePropagatedPoints=false, float maxR=0.0)
void hintNumberOfTracksInEvent(unsigned)
void setPropagationOptions(TrackSystemController::PropagationOptionFlags)
const QString & name() const
QList< unsigned > m_cut_requiredNHits
virtual void setState(const QByteArray &)
Provide specific implementation.
virtual void collMaterialTransparencyAndBrightnessChanged()
bool useDefaultCuts() const
Return true if this collection uses the default (i.e.
void setMeasurementsShorttubesScale(double)
void setCustomColouredTSOSParts(TrackCommonFlags::TSOSPartsFlags)
void setExtraWidgetsState(const QByteArray &)
QList< VP1Interval > m_cut_allowedPhi
virtual QColor defaultColor() const =0
void setLabels(TrackSystemController::TrackLabelModes)
VP1Interval cutAllowedEta() const
QByteArray extraWidgetsState() const
void setCutAllowedPhi(const QList< VP1Interval > &)
virtual void setupSettingsFromControllerSpecific(TrackSystemController *)
virtual bool cut(TrackHandleBase *)
void setTrackTubeRadius(const double &)
void setMaterialEffectsOnTrackScale(double)
VP1Interval cutAllowedPt() const
COLOURBY colourBy() const
void cleanupPtrContainer(T &) const
void setParts(TrackCommonFlags::TrackPartsFlags)
virtual bool allowColourByMomentum() const
static QString toString(const COLOURBY &)
virtual void assignDefaultMaterial(SoMaterial *) const
QList< unsigned > cutRequiredNHits() const
void setRequiredNHits(const QList< unsigned > &)
void addTrackHandle(TrackHandleBase *)
void setCutAllowedEta(const VP1Interval &)
TrackCollHandleBase(TrackSysCommonData *, const QString &name, TrackType::Type)
TrackSystemController::PropagationOptionFlags m_propagationOptions
TrackCommonFlags::TrackPartsFlags m_parts
virtual QByteArray persistifiableState() const
Provide specific implementation.
virtual COLOURBY defaultColourBy() const
TrackHandleBase * getNextTrackHandle()
QList< VP1Interval > cutAllowedPhi() const
virtual bool allowColourByVertex() const
Trk::IExtrapolator * m_propagator
virtual bool allowColourByCharge() const
void setRequiredDetectorElement(const QString &id)
virtual bool allowColourByPID() const
TrackCommonFlags::TrackPartsFlags parts() const
void setCustomColouredTSOSParts(TrackCommonFlags::TSOSPartsFlags f)
void updateShapes_TSOSWithMaterialEffects()
virtual void fillObjectBrowser(QList< QTreeWidgetItem * > &list)
Called in child classes.
virtual unsigned getNTRTHits() const
void setVisible(bool)
use by the collection handle.
virtual unsigned getNSCTHits() const
virtual bool containsDetElement(const QString &) const
void updateShapes_TSOSWithErrors()
virtual unsigned getNMuonPrecisionHits() const
void updateShapes_TSOSWithMeasurements()
virtual void updateObjectBrowser()
virtual bool hasSubSystemHitInfo() const
virtual Amg::Vector3D momentum() const
void setShownTSOSParts(TrackCommonFlags::TSOSPartsFlags f)
virtual bool isIDTrack() const
bool visible() const
virtual unsigned getNMuonHits() const
void updateRandomColourTransparencyAndBrightness()
virtual unsigned getNPixelHits() const
VP1TrackSystem * system() const
TrackSystemController * controller() const
VP1Interval cutAllowedEta() const
QList< unsigned > cutRequiredNHits() const
Trk::IExtrapolator * propagator() const
bool ignoreMeasurementEffectsOnTrackInProp()
If true (default) don't use TSOS with MEOT to draw track points.
QTreeWidget * trackObjBrowser() const
Returns a pointer to the Track Object Browser (if it exists)
TrackCommonFlags::TSOSPartsFlags customColouredTSOSParts() const
PropagationOptionFlags propagationOptions() const
TrackCommonFlags::TrackPartsFlags shownTrackParts() const
QList< VP1Interval > cutAllowedPhi() const
TrackCommonFlags::TSOSPartsFlags shownTSOSParts() const
static qint32 typeToInt(const Type &)
Definition TrackTypes.cxx:8
Interface class for the extrapolation AlgTool, it inherits from IAlgTool Detailed information about p...
static VP1CustomTourEditor * customTourEditor()
QByteArray restoreByteArray()
void disableUnrestoredChecks()
void restore(QCheckBox *sb)
qint32 version() const
void messageVerbose(const QString &) const
void message(const QString &) const
IVP1System * systemBase() const
void messageDebug(const QString &) const
double lower() const
bool isEmpty() const
QString toString() const
bool isSane() const
bool isAllR() const
bool contains(const double &x) const
double upper() const
static double phiFromXY(const double &x, const double &y)
static bool verbose()
Definition VP1Msg.h:31
static void setMatColor(SoMaterial *, const double &r, const double &g, const double &b, const double &brightness=0.0, const double &transp=0.0)
virtual void largeChangesEnd()
virtual void init(VP1MaterialButtonBase *button=0)
SoSeparator * collSep() const
All 3D objects from this coll.
SoSwitch * collSwitch() const
Add this somewhere in your scenegraph (do not add any children here!)
virtual void largeChangesBegin()
void visibilityChanged(bool)
QString text() const
VP1StdCollection(IVP1System *, const QString &helperClassName)
SoMaterial * materialFromVertex(const TrackHandleBase *trk) const
Returns the material for the vertex which knows this trackhandle (if known)
int r
Definition globals.cxx:22
Eigen::Matrix< double, 3, 1 > Vector3D
Definition index.py:1