Belle II Software  release-05-02-19
EVEVisualization.h
1 #ifndef EVEVISUALIZATION_H
2 #define EVEVISUALIZATION_H
3 
4 #include <mdst/dataobjects/MCParticle.h>
5 #include <mdst/dataobjects/ECLCluster.h>
6 #include <mdst/dataobjects/KLMCluster.h>
7 #include <mdst/dataobjects/Track.h>
8 #include <cdc/dataobjects/CDCSimHit.h>
9 #include <cdc/dataobjects/CDCHit.h>
10 #include <trg/cdc/dataobjects/CDCTriggerSegmentHit.h>
11 #include <trg/cdc/dataobjects/CDCTriggerTrack.h>
12 #include <pxd/dataobjects/PXDSimHit.h>
13 #include <svd/dataobjects/SVDSimHit.h>
14 #include <svd/dataobjects/SVDCluster.h>
15 #include <klm/dataobjects/bklm/BKLMSimHit.h>
16 #include <klm/dataobjects/bklm/BKLMHit2d.h>
17 #include <klm/dataobjects/eklm/EKLMSimHit.h>
18 #include <klm/dataobjects/eklm/EKLMHit2d.h>
19 #include <arich/dataobjects/ARICHHit.h>
20 #include <top/dataobjects/TOPDigit.h>
21 #include <vxd/geometry/GeoCache.h>
22 #include <tracking/dataobjects/ROIid.h>
23 
24 #include <framework/datastore/StoreArray.h>
25 
26 #include <tracking/dataobjects/RecoTrack.h>
27 #include <genfit/GFRaveVertex.h>
28 
29 #include <TEveStraightLineSet.h>
30 #include <TVector3.h>
31 #include <TEveTrack.h>
32 
33 #include <string>
34 
35 
36 class TEveBox;
37 class TEveCaloDataVec;
38 class TEveCalo3D;
39 class TEveElementList;
40 class TEvePointSet;
41 class TEveTrackList;
42 class TEveTrackPropagator;
43 
44 namespace Belle2 {
49  class DisplayData;
50  class EveVisBField;
51 
61  enum eFitterType {
62  SimpleKalman,
63  RefKalman,
64  DafSimple,
65  DafRef,
66  Gbl
67  };
68 
69 
71  struct MCTrack {
72  TEveTrack* track;
73  TEvePointSet* simhits;
75  };
76 
78  struct ElementGroup {
79  ElementGroup(): group(nullptr), visible(true) { }
80  TEveElementList* group;
81  bool visible;
82  };
83 
85  const static int c_recoHitColor;
87  const static int c_recoTrackColor;
89  const static int c_trackColor;
91  const static int c_trackMarkerColor;
93  const static int c_unassignedHitColor;
95  const static int c_klmClusterColor;
96 
97  public:
100  explicit EVEVisualization();
101 
103  EVEVisualization(const EVEVisualization&) = delete;
105  EVEVisualization& operator=(const EVEVisualization&) = delete;
108 
109  // === adding event data ===
110 
114  void addTrack(const Belle2::Track* belle2Track);
115 
117  void addTrackCandidate(const std::string& collectionName,
118  const RecoTrack& recoTrack);
119 
123  void addTrackCandidateImproved(const std::string& collectionName,
124  const RecoTrack& recoTrack);
125 
127  void addCDCTriggerTrack(const std::string& collectionName,
128  const CDCTriggerTrack& track);
129 
131  template <class T> void addSimHits(const StoreArray<T>& hits)
132  {
133  const int numHits = hits.getEntries();
134  for (int i = 0; i < numHits; i++) {
135  const RelationsObject* rel = hits[i];
136  const MCParticle* mcpart = rel->getRelatedFrom<MCParticle>();
137 
138  addSimHit(hits[i], mcpart);
139  }
140  }
141 
143  void addSimHit(const CDCSimHit* hit, const MCParticle* particle);
144 
146  void addSimHit(const PXDSimHit* hit, const MCParticle* particle);
147 
149  void addSimHit(const SVDSimHit* hit, const MCParticle* particle);
150 
152  void addSimHit(const BKLMSimHit* hit, const MCParticle* particle);
153 
155  void addSimHit(const EKLMSimHit* hit, const MCParticle* particle);
156 
158  void addSimHit(const TVector3& v, const MCParticle* particle);
159 
165  MCTrack* addMCParticle(const MCParticle* particle);
166 
168  void addVertex(const genfit::GFRaveVertex* vertex);
169 
171  void addECLCluster(const ECLCluster* cluster);
172 
174  void addKLMCluster(const KLMCluster* cluster);
175 
177  void addBKLMHit2d(const BKLMHit2d* bklm2dhit);
178 
180  void addEKLMHit2d(const EKLMHit2d* bklm2dhit);
181 
183  void addARICHHit(const ARICHHit* hit);
184 
186  void addROI(const ROIid* roi);
187 
189  template <class T> void addUnassignedRecoHits(const StoreArray<T>& hits)
190  {
191  if (hits.getEntries() == 0)
192  return;
193  if (!m_unassignedRecoHits) {
194  m_unassignedRecoHits = new TEveStraightLineSet("Unassigned RecoHits");
195  m_unassignedRecoHits->SetTitle("Unassigned RecoHits");
198  m_unassignedRecoHits->SetMarkerStyle(6);
199  //m_unassignedRecoHits->SetMainTransparency(60);
200  }
201  for (const T& hit : hits) {
202  if (m_shownRecohits.count(&hit) == 0) {
204  }
205  }
206  }
207 
209  void addCDCHit(const CDCHit* hit, bool showTriggerHits = false);
210 
212  void addCDCTriggerSegmentHit(const std::string& collectionName, const CDCTriggerSegmentHit* hit);
213 
215  void addTOPDigits(const StoreArray<TOPDigit>& digits);
216 
222  void addObject(const TObject* dataStoreObject, TEveElement* visualRepresentation);
223 
224 
226  void showUserData(const DisplayData& displayData);
227 
228 
233  void makeTracks();
234 
236  void clearEvent();
237 
238  // === configuration options ===
239 
257  void setOptions(const std::string& opts);
258 
263  void setErrScale(double errScale = 1.);
264 
267 
269  void setHideSecondaries(bool on) { m_hideSecondaries = on; }
270 
271 
272  private:
274  TEveCalo3D* m_calo3d;
275 
279  TEveBox* boxCreator(const TVector3& o, TVector3 u, TVector3 v, float ud, float vd, float depth);
280 
282  void makeLines(TEveTrack* eveTrack, const genfit::StateOnPlane* prevState, const genfit::StateOnPlane* state,
283  const genfit::AbsTrackRep* rep,
284  TEvePathMark::EType_e markType, bool drawErrors, int markerPos = 1);
285 
287  template <class SomeVXDHit> void addRecoHit(const SomeVXDHit* hit, TEveStraightLineSet* lines)
288  {
290 
291  const TVector3 local_pos(hit->getU(), hit->getV(), 0.0); //z-component is height over the center of the detector plane
292  const VXD::SensorInfoBase& sensor = geo.get(hit->getSensorID());
293  const TVector3 global_pos = sensor.pointToGlobal(local_pos);
294  lines->AddMarker(global_pos.x(), global_pos.y(), global_pos.z());
295 
296  m_shownRecohits.insert(hit);
297  }
298 
300  void addRecoHit(const SVDCluster* hit, TEveStraightLineSet* lines);
301 
303  void addRecoHit(const CDCHit* hit, TEveStraightLineSet* lines);
304 
311  void addToGroup(const std::string& name, TEveElement* elem);
312 
314  double m_errorScale;
315 
320  std::string m_options;
321 
324 
326  bool m_hideSecondaries{false};
327 
329  std::map<const MCParticle*, MCTrack> m_mcparticleTracks;
330 
332  std::map<std::string, ElementGroup> m_groups;
333 
335  TEveTrackList* m_tracklist;
336 
338  TEveTrackPropagator* m_trackpropagator;
339 
341  TEveTrackPropagator* m_gftrackpropagator;
342 
344  TEveTrackPropagator* m_consttrackpropagator;
345 
347  TEveCaloDataVec* m_eclData;
348 
351 
353  std::set<const TObject*> m_shownRecohits;
354 
356  TEveStraightLineSet* m_unassignedRecoHits = nullptr;
359 
361  static constexpr double c_minPCut = 0.00;
362 
364  bool m_drawCardinalRep = true;
365 
367  bool m_drawErrors = false;
368 
370  bool m_drawRefTrack = false;
371 
373  bool m_drawForward = false;
374 
376  bool m_drawBackward = false;
377  };
379 }
380 #endif
Belle2::EVEVisualization::m_drawCardinalRep
bool m_drawCardinalRep
Draw cardinal representation in addTrack.
Definition: EVEVisualization.h:364
Belle2::EVEVisualization::addUnassignedRecoHits
void addUnassignedRecoHits(const StoreArray< T > &hits)
After adding recohits for tracks/candidates, this function adds the remaining hits in a global collec...
Definition: EVEVisualization.h:189
Belle2::EVEVisualization::addToGroup
void addToGroup(const std::string &name, TEveElement *elem)
Add 'elem' to the element group 'name' (created if necessary).
Definition: EVEVisualization.cc:1886
Belle2::EVEVisualization::m_shownRecohits
std::set< const TObject * > m_shownRecohits
List of shown recohits (PXDCluster, SVDCluster, CDCHit).
Definition: EVEVisualization.h:353
Belle2::EVEVisualization::operator=
EVEVisualization & operator=(const EVEVisualization &)=delete
disabled assignment
Belle2::SVDSimHit
Class SVDSimHit - Geant4 simulated hit for the SVD.
Definition: SVDSimHit.h:28
Belle2::EVEVisualization::c_recoHitColor
const static int c_recoHitColor
Color for reco hits.
Definition: EVEVisualization.h:85
Belle2::EVEVisualization::m_unassignedRecoHits
TEveStraightLineSet * m_unassignedRecoHits
Unassigned recohits.
Definition: EVEVisualization.h:356
genfit::GFRaveVertex
GFRaveVertex class.
Definition: GFRaveVertex.h:48
Belle2::EVEVisualization::~EVEVisualization
~EVEVisualization()
Destructor.
Definition: EVEVisualization.cc:179
Belle2::EVEVisualization::m_consttrackpropagator
TEveTrackPropagator * m_consttrackpropagator
Track propagator for CDCTriggerTracks (uses constant B field)
Definition: EVEVisualization.h:344
Belle2::ECLCluster
ECL cluster data.
Definition: ECLCluster.h:39
Belle2::EVEVisualization::addECLCluster
void addECLCluster(const ECLCluster *cluster)
Add a reconstructed cluster in the ECL.
Definition: EVEVisualization.cc:1400
Belle2::VXD::GeoCache::get
static const SensorInfoBase & get(Belle2::VxdID id)
Return a reference to the SensorInfo of a given SensorID.
Definition: GeoCache.h:141
Belle2::CDCHit
Class containing the result of the unpacker in raw data and the result of the digitizer in simulation...
Definition: CDCHit.h:51
Belle2::EVEVisualization::m_groups
std::map< std::string, ElementGroup > m_groups
name -> grouping element.
Definition: EVEVisualization.h:332
Belle2::EVEVisualization::showUserData
void showUserData(const DisplayData &displayData)
Add user-defined data (labels, points, etc.)
Definition: EVEVisualization.cc:1833
genfit::StateOnPlane
A state with arbitrary dimension defined in a DetPlane.
Definition: StateOnPlane.h:47
Belle2::EVEVisualization::addCDCTriggerSegmentHit
void addCDCTriggerSegmentHit(const std::string &collectionName, const CDCTriggerSegmentHit *hit)
show outline of track segments.
Definition: EVEVisualization.cc:1676
Belle2::EVEVisualization::m_tracklist
TEveTrackList * m_tracklist
parent object for MC tracks.
Definition: EVEVisualization.h:335
Belle2::EVEVisualization::makeTracks
void makeTracks()
Create visual representation of all tracks.
Definition: EVEVisualization.cc:1246
Belle2::CDCTriggerTrack
Track created by the CDC trigger.
Definition: CDCTriggerTrack.h:15
Belle2::EVEVisualization::c_trackMarkerColor
const static int c_trackMarkerColor
Color for track markers.
Definition: EVEVisualization.h:91
Belle2::EVEVisualization::c_minPCut
static constexpr double c_minPCut
don't show MCParticles with momentum below this cutoff.
Definition: EVEVisualization.h:361
Belle2::VXD::SensorInfoBase
Base class to provide Sensor Information for PXD and SVD.
Definition: SensorInfoBase.h:40
genfit::AbsTrackRep
Abstract base class for a track representation.
Definition: AbsTrackRep.h:66
Belle2::EVEVisualization::c_unassignedHitColor
const static int c_unassignedHitColor
Color for unassigned (reco)hits.
Definition: EVEVisualization.h:93
Belle2::EVEVisualization::MCTrack
Hold MC tracks and associated visualisation objects.
Definition: EVEVisualization.h:71
Belle2::EVEVisualization::c_trackColor
const static int c_trackColor
Color for tracks.
Definition: EVEVisualization.h:89
Belle2::CDCSimHit
Example Detector.
Definition: CDCSimHit.h:33
Belle2::EVEVisualization::m_drawBackward
bool m_drawBackward
draw backward in addTrack
Definition: EVEVisualization.h:376
Belle2::EVEVisualization::addTOPDigits
void addTOPDigits(const StoreArray< TOPDigit > &digits)
Add TOPDigits (shown aggregated per module).
Definition: EVEVisualization.cc:1788
Belle2::EVEVisualization::m_unassignedRecoHitsVisibility
bool m_unassignedRecoHitsVisibility
is m_unassignedRecoHits visible?
Definition: EVEVisualization.h:358
Belle2::EVEVisualization::MCTrack::simhits
TEvePointSet * simhits
simhit positions.
Definition: EVEVisualization.h:73
Belle2::EVEVisualization::addBKLMHit2d
void addBKLMHit2d(const BKLMHit2d *bklm2dhit)
Add a reconstructed 2d hit in the BKLM.
Definition: EVEVisualization.cc:1489
Belle2::EVEVisualization::addTrackCandidate
void addTrackCandidate(const std::string &collectionName, const RecoTrack &recoTrack)
Add a RecoTrack, to evaluate track finding.
Definition: EVEVisualization.cc:195
Belle2::EVEVisualization::m_assignToPrimaries
bool m_assignToPrimaries
If true, hits created by secondary particles (e.g.
Definition: EVEVisualization.h:323
Belle2::EVEVisualization::MCTrack::track
TEveTrack * track
the actual MC track.
Definition: EVEVisualization.h:72
Belle2::EVEVisualization::addRecoHit
void addRecoHit(const SomeVXDHit *hit, TEveStraightLineSet *lines)
adds given VXD hit to lines.
Definition: EVEVisualization.h:287
Belle2::EVEVisualization::ElementGroup::visible
bool visible
Stores wether this group was visible in last event.
Definition: EVEVisualization.h:81
Belle2::EVEVisualization::eFitterType
eFitterType
Fitter type to be used for addTrack().
Definition: EVEVisualization.h:61
Belle2::EVEVisualization::ElementGroup
Group of TEveElements, remembers wether user wants it visible or not.
Definition: EVEVisualization.h:78
Belle2::EKLMSimHit
Class EKLMSimHit stores information on particular Geant step; using information from TrackID and Pare...
Definition: EKLMSimHit.h:41
Belle2::EVEVisualization::MCTrack::parentParticle
const MCParticle * parentParticle
parent particle, or nullptr.
Definition: EVEVisualization.h:74
Belle2::EVEVisualization::EVEVisualization
EVEVisualization()
Constructor.
Definition: EVEVisualization.cc:127
Belle2::RecoTrack
This is the Reconstruction Event-Data Model Track.
Definition: RecoTrack.h:78
Belle2::EVEVisualization::m_drawForward
bool m_drawForward
draw forward in addTrack
Definition: EVEVisualization.h:373
Belle2::EVEVisualization::m_drawErrors
bool m_drawErrors
Draw errors in addTrack.
Definition: EVEVisualization.h:367
Belle2::ARICHHit
Datastore class that holds photon hits. Input to the reconstruction.
Definition: ARICHHit.h:33
Belle2::EVEVisualization
Produces visualisation for MCParticles, simhits, genfit::Tracks, geometry and other things.
Definition: EVEVisualization.h:59
Belle2::EVEVisualization::addROI
void addROI(const ROIid *roi)
Add a Region Of Interest, computed by the PXDDataReduction module.
Definition: EVEVisualization.cc:1546
Belle2::EVEVisualization::addCDCTriggerTrack
void addCDCTriggerTrack(const std::string &collectionName, const CDCTriggerTrack &track)
Add a CDCTriggerTrack.
Definition: EVEVisualization.cc:338
Belle2::EVEVisualization::addTrackCandidateImproved
void addTrackCandidateImproved(const std::string &collectionName, const RecoTrack &recoTrack)
Add a RecoTrack, but use stored genfit track representation to make visualisation objects.
Definition: EVEVisualization.cc:254
Belle2::ROIid
ROIid stores the U and V ids and the sensor id of the Region Of Interest.
Definition: ROIid.h:35
Belle2::VXD::GeoCache::getInstance
static GeoCache & getInstance()
Return a reference to the singleton instance.
Definition: GeoCache.cc:215
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::EVEVisualization::addEKLMHit2d
void addEKLMHit2d(const EKLMHit2d *bklm2dhit)
Add a reconstructed 2d hit in the EKLM.
Definition: EVEVisualization.cc:1532
Belle2::EVEVisualization::addObject
void addObject(const TObject *dataStoreObject, TEveElement *visualRepresentation)
Generic function to keep track of which objects have which visual representation.
Definition: EVEVisualization.cc:1881
Belle2::EVEVisualization::addCDCHit
void addCDCHit(const CDCHit *hit, bool showTriggerHits=false)
show CDCHits directly.
Definition: EVEVisualization.cc:1608
Belle2::EVEVisualization::addKLMCluster
void addKLMCluster(const KLMCluster *cluster)
Add a reconstructed cluster in the KLM.
Definition: EVEVisualization.cc:1437
Belle2::EVEVisualization::c_klmClusterColor
const static int c_klmClusterColor
Color for KLMCluster objects.
Definition: EVEVisualization.h:95
Belle2::EVEVisualization::addMCParticle
MCTrack * addMCParticle(const MCParticle *particle)
Return MCTrack for given particle, add it if it doesn't exist yet.
Definition: EVEVisualization.cc:1099
Belle2::EVEVisualization::addARICHHit
void addARICHHit(const ARICHHit *hit)
Add recontructed hit in ARICH.
Definition: EVEVisualization.cc:1767
Belle2::EveVisBField
Provide magnetic field values for TEveTrackPropagator.
Definition: EveVisBField.h:12
Belle2::EVEVisualization::setAssignToPrimaries
void setAssignToPrimaries(bool on)
If true, hits created by secondary particles (e.g.
Definition: EVEVisualization.h:266
Belle2::EVEVisualization::addVertex
void addVertex(const genfit::GFRaveVertex *vertex)
Add a vertex point and its covariance matrix.
Definition: EVEVisualization.cc:1348
Belle2::EVEVisualization::m_options
std::string m_options
Option string for genfit::Track visualisation.
Definition: EVEVisualization.h:320
Belle2::EVEVisualization::m_gftrackpropagator
TEveTrackPropagator * m_gftrackpropagator
Track propagator for genfit::Tracks (different mainly because of drawing options)
Definition: EVEVisualization.h:341
Belle2::KLMCluster
KLM cluster data.
Definition: KLMCluster.h:38
Belle2::EVEVisualization::m_trackpropagator
TEveTrackPropagator * m_trackpropagator
Track propagator for MCParticles.
Definition: EVEVisualization.h:338
Belle2::EVEVisualization::ElementGroup::group
TEveElementList * group
Contains elements of this group.
Definition: EVEVisualization.h:80
Belle2::EVEVisualization::makeLines
void makeLines(TEveTrack *eveTrack, const genfit::StateOnPlane *prevState, const genfit::StateOnPlane *state, const genfit::AbsTrackRep *rep, TEvePathMark::EType_e markType, bool drawErrors, int markerPos=1)
Create hit visualisation for the given options, and add them to 'eveTrack'.
Definition: EVEVisualization.cc:881
Belle2::EVEVisualization::m_mcparticleTracks
std::map< const MCParticle *, MCTrack > m_mcparticleTracks
map MCParticles to MCTrack (so hits can be added to the correct track).
Definition: EVEVisualization.h:329
Belle2::SVDCluster
The SVD Cluster class This class stores all information about reconstructed SVD clusters.
Definition: SVDCluster.h:38
Belle2::EVEVisualization::setOptions
void setOptions(const std::string &opts)
Set the display options.
Definition: EVEVisualization.cc:175
Belle2::VXD::GeoCache
Class to faciliate easy access to sensor information of the VXD like coordinate transformations or pi...
Definition: GeoCache.h:41
Belle2::EVEVisualization::setHideSecondaries
void setHideSecondaries(bool on)
If true, secondary MCParticles (and hits created by them) will not be shown.
Definition: EVEVisualization.h:269
Belle2::EVEVisualization::c_recoTrackColor
const static int c_recoTrackColor
Color for TrackCandidates.
Definition: EVEVisualization.h:87
Belle2::DisplayData
Add custom information to the display.
Definition: DisplayData.h:65
Belle2::EVEVisualization::addSimHit
void addSimHit(const CDCSimHit *hit, const MCParticle *particle)
Add a CDCSimHit.
Definition: EVEVisualization.cc:1063
Belle2::EVEVisualization::boxCreator
TEveBox * boxCreator(const TVector3 &o, TVector3 u, TVector3 v, float ud, float vd, float depth)
Create a box around o, oriented along u and v with widths ud, vd and depth and return a pointer to th...
Definition: EVEVisualization.cc:845
Belle2::EVEVisualization::addTrack
void addTrack(const Belle2::Track *belle2Track)
Add this genfit::Track to event data.
Definition: EVEVisualization.cc:376
Belle2::Track
Class that bundles various TrackFitResults.
Definition: Track.h:35
Belle2::EVEVisualization::m_eclData
TEveCaloDataVec * m_eclData
ECL cluster data.
Definition: EVEVisualization.h:347
Belle2::BKLMSimHit
Store one simulation hit as a ROOT object.
Definition: BKLMSimHit.h:35
Belle2::MCParticle
A Class to store the Monte Carlo particle information.
Definition: MCParticle.h:43
Belle2::StoreArray
Accessor to arrays stored in the data store.
Definition: ECLMatchingPerformanceExpertModule.h:33
Belle2::EVEVisualization::m_calo3d
TEveCalo3D * m_calo3d
Object for the energy bar visualisation.
Definition: EVEVisualization.h:274
Belle2::EVEVisualization::clearEvent
void clearEvent()
clear event data.
Definition: EVEVisualization.cc:1305
Belle2::EVEVisualization::m_drawRefTrack
bool m_drawRefTrack
Draw reference track in addTrack.
Definition: EVEVisualization.h:370
Belle2::EVEVisualization::m_hideSecondaries
bool m_hideSecondaries
If true, secondary MCParticles (and hits created by them) will not be shown.
Definition: EVEVisualization.h:326
Belle2::CDCTriggerSegmentHit
Combination of several CDCHits to a track segment hit for the trigger.
Definition: CDCTriggerSegmentHit.h:16
Belle2::EVEVisualization::addSimHits
void addSimHits(const StoreArray< T > &hits)
Add all entries in the given 'hits' array (and the corresponding MCParticles) to the event scene.
Definition: EVEVisualization.h:131
Belle2::RelationsInterface
Defines interface for accessing relations of objects in StoreArray.
Definition: RelationsObject.h:102
Belle2::BKLMHit2d
Store one BKLM strip hit as a ROOT object.
Definition: BKLMHit2d.h:42
Belle2::RelationsInterface::getRelatedFrom
FROM * getRelatedFrom(const std::string &name="", const std::string &namedRelation="") const
Get the object from which this object has a relation.
Definition: RelationsObject.h:265
Belle2::EKLMHit2d
Class for 2d hits handling.
Definition: EKLMHit2d.h:39
Belle2::EVEVisualization::setErrScale
void setErrScale(double errScale=1.)
Set the scaling factor for the visualization of track hit errors.
Definition: EVEVisualization.cc:177
Belle2::EVEVisualization::m_bfield
EveVisBField * m_bfield
The global magnetic field.
Definition: EVEVisualization.h:350
Belle2::EVEVisualization::m_errorScale
double m_errorScale
Rescale PXD/SVD errors with this factor to ensure visibility.
Definition: EVEVisualization.h:314
Belle2::PXDSimHit
Class PXDSimHit - Geant4 simulated hit for the PXD.
Definition: PXDSimHit.h:28