ATLAS Offline Software
Loading...
Searching...
No Matches
VP1SimHitSystem.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
5/*
6 * Major updates:
7 * - 2022 Jan, Riccardo Maria Bianchi <riccardo.maria.bianchi@cern.ch>
8 * Added visualization for Calorimeters' sim hits
9 * - 2026 Apr, Riccardo Maria Bianchi <riccardo.maria.bianchi@cern.ch>
10 * Added ITk simHits
11 *
12 */
14#include "ui_simhitcontrollerform.h"
15
18#include "VP1Base/VP1Msg.h"
22
29
30// Section of includes for global calo hits
31#include "CaloDetDescr/CaloDetDescrElement.h"
34
35// Section of includes for LAr calo hits
36#include "LArSimEvent/LArHit.h"
38
39// Section of includes for Tile calo hits
44
50
52
54
55#include <Inventor/C/errors/debugerror.h>
56#include <Inventor/nodes/SoDrawStyle.h>
57#include <Inventor/nodes/SoMaterial.h>
58#include <Inventor/nodes/SoSeparator.h>
59#include <Inventor/nodes/SoSwitch.h>
60#include <Inventor/nodes/SoVertexProperty.h>
61#include <Inventor/nodes/SoPointSet.h>
62#include <Inventor/SbColor.h>
63
64// Qt includes
65#include <QMap>
66#include <QSet>
67
68// C++ includes
69#include <string>
70
71
73{
74public:
75 QMap<QString,SoSwitch*> switchMap;
76 QMap<QString,SbColor> colorMap;
77 QMap<QCheckBox*,QString> checkBoxNamesMap;
78 QMap<QString,QCheckBox*> checkBoxMap;
79 QSet<QString> hitsThisEvent;
80 StoreGateSvc * sg = nullptr;
81
82 // Managers
85 std::unique_ptr<CaloDetDescrManager> lar_dd_man;
86
87 // ID helpers
88 const TileID* tile_id{nullptr};
89
90};
91
93 :IVP13DSystemSimple("Sim Hits","Display simulation hits from trackers and calorimeters","Vakho Tsulaia <Vakhtang.Tsulaia@cern.ch>, Riccardo Maria Bianchi <Riccardo.Maria.Bianchi@cern.ch>"),
95{
96}
97
103
105{
106 QWidget* controller = new QWidget(0);
107 Ui::SimHitControllerForm ui;
108 ui.setupUi(controller);
109
110 // Show/Hide checkboxes
111 // based on geometry being used
112 ui.chbxITkPixelHits->setVisible(VP1JobConfigInfo::hasITkGeometry());
113 ui.chbxITkStripHits->setVisible(VP1JobConfigInfo::hasITkGeometry());
114 ui.chbxPixelHits->setVisible(VP1JobConfigInfo::hasPixelGeometry());
115 ui.chbxSCTHits->setVisible(VP1JobConfigInfo::hasSCTGeometry());
116 ui.chbxTRTHits->setVisible(VP1JobConfigInfo::hasTRTGeometry());
117 ui.chbxHGTDHits->setVisible(VP1JobConfigInfo::hasHGTDGeometry());
118
119 // Populate Check Box Names Map
121 m_clockwork->checkBoxNamesMap.insert(ui.chbxITkPixelHits,"ITkPixel");
122 m_clockwork->checkBoxNamesMap.insert(ui.chbxITkStripHits,"ITkStrip");
123 } else {
124 m_clockwork->checkBoxNamesMap.insert(ui.chbxPixelHits,"Pixel");
125 m_clockwork->checkBoxNamesMap.insert(ui.chbxSCTHits,"SCT");
126 m_clockwork->checkBoxNamesMap.insert(ui.chbxTRTHits,"TRT");
127 }
129 m_clockwork->checkBoxNamesMap.insert(ui.chbxHGTDHits,"HGTD");
130 }
131 m_clockwork->checkBoxNamesMap.insert(ui.chbxMDTHits,"MDT");
132 m_clockwork->checkBoxNamesMap.insert(ui.chbxRPCHits,"RPC");
133 m_clockwork->checkBoxNamesMap.insert(ui.chbxTGCHits,"TGC");
134 m_clockwork->checkBoxNamesMap.insert(ui.chbxCSCHits,"CSC");
135 m_clockwork->checkBoxNamesMap.insert(ui.chbxMMHits,"MM");
136 m_clockwork->checkBoxNamesMap.insert(ui.chbxsTGCHits,"sTGC");
137 m_clockwork->checkBoxNamesMap.insert(ui.chbxLArEMBHits,"LArEMB");
138 m_clockwork->checkBoxNamesMap.insert(ui.chbxLArEMECHits,"LArEMEC");
139 m_clockwork->checkBoxNamesMap.insert(ui.chbxLArFCALHits,"LArFCAL");
140 m_clockwork->checkBoxNamesMap.insert(ui.chbxLArHECHits,"LArHEC");
141 m_clockwork->checkBoxNamesMap.insert(ui.chbxTileHits,"Tile");
142 m_clockwork->checkBoxNamesMap.insert(ui.chbxGenericMuonHits,"Generic Muon");
143 m_clockwork->checkBoxNamesMap.insert(ui.chbxForwardRegionHits,"Forward Region");
144
145 // Populate Check Box Map and connect slots
146 for(QCheckBox* cb : m_clockwork->checkBoxNamesMap.keys())
147 {
148 connect(cb,SIGNAL(toggled(bool)),this,SLOT(checkboxChanged()));
149 m_clockwork->checkBoxMap.insert(m_clockwork->checkBoxNamesMap[cb],cb);
150 }
151
152 return controller;
153}
154
156{
157 // Populate Color Map
159 m_clockwork->colorMap.insert("ITkPixel",SbColor(1,1,1)); // white
160 m_clockwork->colorMap.insert("ITkStrip",SbColor(VP1ColorUtils::getSbColorFromRGB(28, 162, 230))); // Carolina Blue
161 } else {
162 m_clockwork->colorMap.insert("Pixel",SbColor(0,0,1));
163 m_clockwork->colorMap.insert("SCT",SbColor(1,1,1)); // white
164 m_clockwork->colorMap.insert("TRT",SbColor(1,0,0)); // red
165 }
167 m_clockwork->colorMap.insert("HGTD",SbColor(VP1ColorUtils::getSbColorFromRGB(255, 170, 0))); // amber
168 }
169 m_clockwork->colorMap.insert("MDT",SbColor(.98,.8,.21));
170 m_clockwork->colorMap.insert("RPC",SbColor(0,.44,.28));
171 m_clockwork->colorMap.insert("TGC",SbColor(0,.631244,.748016));
172 m_clockwork->colorMap.insert("CSC",SbColor(.21,.64,1.));
173 m_clockwork->colorMap.insert("MM",SbColor(VP1ColorUtils::getSbColorFromRGB(28, 162, 230))); // Carolina Blue
174 m_clockwork->colorMap.insert("sTGC",SbColor(VP1ColorUtils::getSbColorFromRGB(255, 255, 255))); // White
175 m_clockwork->colorMap.insert("LArEMB",SbColor(VP1ColorUtils::getSbColorFromRGB(247, 187, 109))); // Mellow Apricot
176 m_clockwork->colorMap.insert("LArEMEC",SbColor(VP1ColorUtils::getSbColorFromRGB(230, 151, 48))); // Carrot Orange
177 m_clockwork->colorMap.insert("LArFCAL",SbColor(VP1ColorUtils::getSbColorFromRGB(212, 134, 32))); // Fulvous
178 m_clockwork->colorMap.insert("LArHEC",SbColor(VP1ColorUtils::getSbColorFromRGB(184, 114, 24))); // Copper
179 //m_clockwork->colorMap.insert("Tile",SbColor(VP1ColorUtils::getSbColorFromRGB(28, 162, 230))); // Carolina Blue --> Note: this is nice, but it disappears when superimposed to the azure Tile geometry default material
180 m_clockwork->colorMap.insert("Tile",SbColor(VP1ColorUtils::getSbColorFromRGB(164, 78, 207))); // Purple Plum
181 m_clockwork->colorMap.insert("Generic Muon",SbColor(.21,.64,1.));
182 m_clockwork->colorMap.insert("Forward Region",SbColor(.21,.64,1.));
183
184
185 // ------------- DD Managers and ID Helpers -------------
186 StatusCode status = detstore->retrieve(m_clockwork->tile_dd_man);
187 if(status.isFailure() || m_clockwork->tile_dd_man==nullptr) {
188 //m_clockwork->noCalo = true;
189 messageDebug("Unable to retrieve Tile DD Manager");
190 return;
191 }
192 m_clockwork->tile_id = m_clockwork->tile_dd_man->get_id();
193 if(m_clockwork->tile_id==nullptr) {
194 //m_clockwork->noCalo = true;
195 messageDebug("0 pointer to Tile ID Helper");
196 return;
197 }
198 status = detstore->retrieve(m_clockwork->trt_dd_man,"TRT");
199 if(status.isFailure() || m_clockwork->trt_dd_man==nullptr) {
200 messageDebug("Unable to retrieve TRT DD Manager");
201 return;
202 }
204}
205
207{
208 // --- Draw style: POINTS
209 SoDrawStyle* ds = new SoDrawStyle();
210 ds->style.setValue(SoDrawStyle::POINTS);
211 ds->pointSize=4;
212 root->addChild(ds);
213
214 // Keep SG pointer
215 m_clockwork->sg = sg;
216
217 // clean up
218 m_clockwork->switchMap.clear();
219 m_clockwork->hitsThisEvent.clear();
220
221 if(!sg)
222 {
223 message("0 pointer to the Store Gate!");
224 return;
225 }
226
227 for(const QString& detector : m_clockwork->checkBoxMap.keys())
228 {
229 // Add switch, off by default
230 SoSwitch* sw = new SoSwitch();
231 sw->whichChild = SO_SWITCH_NONE;
232 root->addChild(sw);
233 m_clockwork->switchMap.insert(detector,sw);
234
235 // Build subtree if the check box is ON
236 if(m_clockwork->checkBoxMap.contains(detector) &&
237 m_clockwork->checkBoxMap[detector]->isChecked())
238 {
239 buildHitTree(detector);
240 sw->whichChild = SO_SWITCH_ALL;
241 }
242 updateGUI();
243 }
244}
245
247{
248 // Get ChB pointer
249 QCheckBox* cb = dynamic_cast<QCheckBox*>(sender());
250 if(cb && m_clockwork->checkBoxNamesMap.contains(cb))
251 {
252 // Get detector name
253 QString detector = m_clockwork->checkBoxNamesMap[cb];
254 if(m_clockwork->switchMap.contains(detector))
255 {
256 // Get swtich
257 SoSwitch* sw = m_clockwork->switchMap[detector];
258 if(cb->isChecked()){
259 // Build subtree if necessary
260 if(!m_clockwork->hitsThisEvent.contains(detector))
261 buildHitTree(detector);
262 sw->whichChild = SO_SWITCH_ALL;
263 }
264 else
265 sw->whichChild = SO_SWITCH_NONE;
266 } else {
267 message("WARNING: Unknown detector:"+detector);
268 }
269 }
270}
271
272void VP1SimHitSystem::fillHitPositionsFromSiHitCollection(const std::string& collName, const StoreGateSvc* sg, SoVertexProperty* hitVtxProperty, unsigned int & hitCount)
273{
274 const char* collNameChar = collName.c_str();
275 const SiHitCollection *p_collection = nullptr;
276 if (sg->retrieve(p_collection, collName) == StatusCode::SUCCESS)
277 {
278 for (const SiHit &hit : *p_collection)
279 {
280 GeoSiHit ghit(hit);
281 if (!ghit)
282 continue;
283 HepGeom::Point3D<double> u = ghit.getGlobalPosition();
284 hitVtxProperty->vertex.set1Value(hitCount++, u.x(), u.y(), u.z());
285 }
286 message("Event contains " + str(p_collection->size()) + " entries in " + str(collNameChar) );
287 }
288 else
289 message("Unable to retrieve '" + str(collNameChar) + "' Hits");
290}
291
292void VP1SimHitSystem::buildHitTree(const QString& detector)
293{
294 messageVerbose("buildHitTree for "+detector);
295 if(m_clockwork->hitsThisEvent.contains(detector)) {
296 messageVerbose(" in hitsThisEvent"); return;
297 }
298 if(!m_clockwork->colorMap.contains(detector)) {
299 messageVerbose("not in colorMap"); return;
300 }
301 if(!m_clockwork->switchMap.contains(detector)) {
302 messageVerbose("not in switchMap"); return;
303 }
304
305 // -- Initializations
306 StoreGateSvc* sg = m_clockwork->sg;
307 SoSwitch* sw = m_clockwork->switchMap[detector];
308 unsigned int hitCount = 0;
309
310 SoVertexProperty* hitVtxProperty = new SoVertexProperty();
311 SoPointSet* hitPointSet = new SoPointSet();
312
313 hitVtxProperty->enableNotify(FALSE);
314 hitPointSet->enableNotify(FALSE);
315
316 // -- COLOR
317 SoMaterial* material = new SoMaterial();
318 material->diffuseColor.setValue(m_clockwork->colorMap[detector]);
319
320 sw->addChild(material);
321
322 // Take hits from SG
323 if(detector=="ITkPixel")
324 {
325 fillHitPositionsFromSiHitCollection( "ITkPixelHits", sg, hitVtxProperty, hitCount);
326 }
327 else if(detector=="ITkStrip")
328 {
329 fillHitPositionsFromSiHitCollection("ITkStripHits", sg, hitVtxProperty, hitCount);
330 }
331 else if(detector=="Pixel")
332 {
333 fillHitPositionsFromSiHitCollection("PixelHits", sg, hitVtxProperty, hitCount);
334 }
335 else if(detector=="SCT")
336 {
337 fillHitPositionsFromSiHitCollection("SCT_Hits", sg, hitVtxProperty, hitCount);
338 }
339 else if(detector=="TRT")
340 {
341 //
342 // TRT:
343 //
344 const TRTUncompressedHitCollection* t_collection = nullptr;
345 if(sg->retrieve(t_collection,"TRTUncompressedHits")==StatusCode::SUCCESS)
346 {
347 for (const TRTUncompressedHit& hit : *t_collection)
348 {
349 GeoTRTUncompressedHit ghit(hit);
350 if(!ghit) continue;
352 hitVtxProperty->vertex.set1Value(hitCount++,u.x(),u.y(),u.z());
353 }
354 }
355 else
356 message("Unable to retrieve TRT Hits");
357 }
358 else if(detector=="HGTD")
359 {
360 //
361 // HGTD:
362 //
363 const SiHitCollection* p_collection = nullptr;
364 if(sg->retrieve(p_collection,"HGTD_Hits")==StatusCode::SUCCESS)
365 {
366 for (const SiHit& hit : *p_collection)
367 {
368 GeoSiHit ghit(hit);
369 if(!ghit) continue;
370 HepGeom::Point3D<double> u = ghit.getGlobalPosition();
371 hitVtxProperty->vertex.set1Value(hitCount++,u.x(),u.y(),u.z());
372 }
373 }
374 else
375 message("Unable to retrieve HGTD Hits");
376 }
377 else if(detector=="LArEMB" || detector=="LArEMEC" || detector=="LArFCAL" || detector=="LArHEC" )
378 {
379 //
380 // LAr:
381 //
382 // NOTE: to access additional LAr simHit data, see:
383 // Simulation/Tools/HitAnalysis/src/CaloHitAnalysis.cxx
384 //
385 const LArHitContainer* lar_collection;
386
387 std::string collName{"LArHit"};
388 std::string suff{""};
389
390 if (detector=="LArEMB")
391 suff = "EMB";
392 else if (detector=="LArEMEC")
393 suff = "EMEC";
394 else if (detector=="LArFCAL")
395 suff = "FCAL";
396 else if (detector=="LArHEC")
397 suff = "HEC";
398 collName += suff; // e.g., we get 'LArHitEMB'
399
400 if(sg->retrieve(lar_collection, collName)==StatusCode::SUCCESS)
401 {
402 for (auto hi : *lar_collection ) {
403
404 const LArHit* larHit = hi;
405 const CaloDetDescrElement* ddElement = m_clockwork->lar_dd_man->get_element(larHit->cellID());
406 if (ddElement)
407 handleDetDescrElementHit(ddElement, hitVtxProperty, hitCount);
408 else
409 message("Unable to retrieve the CaloDetDescrElement!");
410 }
411 }
412 else
413 message("Unable to retrieve " + QString::fromStdString(collName) );
414 }
415 else if(detector=="Tile")
416 {
417 //
418 // Tile:
419 //
420 // For more Tile simHits data, see:
421 // Simulation/Tools/HitAnalysis/src/CaloHitAnalysis.cxx
422 //
423 const TileHitVector* t_collection = nullptr;
424
425 if(sg->retrieve(t_collection,"TileHitVec")==StatusCode::SUCCESS)
426 {
427 for (const TileHit& hit : *t_collection) {
428 Identifier pmt_id = hit.identify();
429 Identifier cell_id = m_clockwork->tile_id->cell_id(pmt_id);
430 const CaloDetDescrElement* ddElement = (m_clockwork->tile_id->is_tile_aux(cell_id)) ? 0 : m_clockwork->tile_dd_man->get_cell_element(cell_id);
431 if (ddElement)
432 handleDetDescrElementHit(ddElement, hitVtxProperty, hitCount);
433 else
434 message("Unable to retrieve the CaloDetDescrElement!");
435 }
436 }
437 else
438 message("Unable to retrieve Tile Hits");
439 }
440 else if(detector=="MDT")
441 {
442 //
443 // MDT:
444 //
445 const MDTSimHitCollection* mdt_collection = nullptr;
446 if(sg->retrieve(mdt_collection)==StatusCode::SUCCESS)
447 {
448 for (const MDTSimHit& hit : *mdt_collection)
449 {
450 GeoMDTHit ghit(hit);
451 if(!ghit) continue;
453 hitVtxProperty->vertex.set1Value(hitCount++,u.x(),u.y(),u.z());
454 }
455 }
456 else
457 message("Unable to retrieve MDT Hits");
458 }
459 else if(detector=="RPC")
460 {
461 //
462 // RPC:
463 //
464 const RPCSimHitCollection* rpc_collection = nullptr;
465 if(sg->retrieve(rpc_collection)==StatusCode::SUCCESS) {
466 for (const RPCSimHit& hit : *rpc_collection)
467 {
468 GeoRPCHit ghit(hit);
469 if(!ghit) continue;
471 hitVtxProperty->vertex.set1Value(hitCount++,u.x(),u.y(),u.z());
472 }
473 }
474 else
475 message("Unable to retrieve RPC Hits");
476 }
477 else if(detector=="TGC")
478 {
479 //
480 // TGC:
481 //
482 const TGCSimHitCollection* tgc_collection = nullptr;
483 if (sg->retrieve(tgc_collection)==StatusCode::SUCCESS)
484 {
485 for (const TGCSimHit& hit : *tgc_collection)
486 {
487 GeoTGCHit ghit(hit);
488 if(!ghit) continue;
490 hitVtxProperty->vertex.set1Value(hitCount++,u.x(),u.y(),u.z());
491 }
492 }
493 else
494 message("Unable to retrieve TGC Hits");
495 }
496 else if(detector=="CSC")
497 {
498 //
499 // CSC:
500 //
501 const CSCSimHitCollection* csc_collection = nullptr;
502 if(sg->retrieve(csc_collection)==StatusCode::SUCCESS)
503 {
504 for (const CSCSimHit& hit : *csc_collection)
505 {
506 GeoCSCHit ghit(hit);
507 if (!ghit) continue;
509 hitVtxProperty->vertex.set1Value(hitCount++,u.x(),u.y(),u.z());
510 }
511 }
512 else
513 message("Unable to retrieve CSC Hits");
514 }
515 else if(detector=="MM")
516 {
517 //
518 // NSW / MM:
519 //
520 const MMSimHitCollection* mm_collection;
521 if(sg->retrieve(mm_collection)==StatusCode::SUCCESS)
522 {
523 for( const MMSimHit& hit : *mm_collection )
524 {
525 GeoMMHit ghit(hit);
526 if(!ghit) continue;
528 hitVtxProperty->vertex.set1Value(hitCount++,u.x(),u.y(),u.z());
529 }
530 }
531 else
532 message("Unable to retrieve MM Hits");
533 }
534 else if(detector=="sTGC")
535 {
536 //
537 // NSW / sTGC:
538 //
539 const sTGCSimHitCollection* stgc_collection;
540 if(sg->retrieve(stgc_collection)==StatusCode::SUCCESS)
541 {
542 for( const sTGCSimHit& hit : *stgc_collection )
543 {
544 GeosTGCHit ghit(hit);
545 if(!ghit) continue;
547 hitVtxProperty->vertex.set1Value(hitCount++,u.x(),u.y(),u.z());
548 }
549 }
550 else
551 message("Unable to retrieve sTGC Hits");
552 }
553 else if(detector=="Generic Muon")
554 {
555 //
556 // Generic:
557 //
558 message("Trying for Generic Muon (as many collections as can be found)");
559 for(const QString& key : VP1SGContentsHelper(this).getKeys<GenericMuonSimHitCollection>()) {
560 const GenericMuonSimHitCollection* generic_collection = nullptr;
561 if(sg->retrieve( generic_collection,key.toStdString().c_str() )==StatusCode::SUCCESS)
562 {
563 messageVerbose("Retrieved"+key+"with size: "+str(generic_collection->size()));
564 std::cout<<"Got collection with size: "<<generic_collection->size()<<std::endl;
565
566 //unsigned int i=0; // for DEBUG only
567 for (const GenericMuonSimHit& hit : *generic_collection)
568 {
569 // std::cout << "Got hit number: " << i++ << std::endl; // for DEBUG only
570 const GenericMuonSimHit ghit(hit);
571 const Amg::Vector3D& u = ghit.globalPosition();
572 hitVtxProperty->vertex.set1Value(hitCount++,u.x(),u.y(),u.z());
573 }
574 }
575 else
576 message("Unable to retrieve Generic Muon Hits from "+key);
577 }
578 } else if(detector=="Forward Region")
579 {
580 //
581 // Generic:
582 //
583 message("Trying for ForwardRegion (as many collections as can be found)");
584 for(const QString& key : VP1SGContentsHelper(this).getKeys<SimulationHitCollection>()) {
585 const SimulationHitCollection* generic_collection = nullptr;
586 if(sg->retrieve( generic_collection,key.toStdString().c_str() )==StatusCode::SUCCESS)
587 {
588 messageVerbose("Retrieved"+key+"with size: "+str(generic_collection->size()));
589 std::cout<<"Got collection with size: "<<generic_collection->size()<<std::endl;
590
591 //unsigned int i=0; // for DEBUG only
592 for (const SimulationHit& hit : *generic_collection)
593 {
594 // std::cout << "Got hit number: " << i++ << std::endl; // for DEBUG only
595 const SimulationHit ghit(hit);
597 hitVtxProperty->vertex.set1Value(hitCount++,u.x(),u.y(),u.z());
598 }
599 }
600 else
601 message("Unable to retrieve Simulation Hits from "+key);
602 }
603 } else {
604 VP1Msg::messageWarningRed("WARNING! Retrieval of Sim Hits not defined for the detector: " + detector, this);
605 }
606
607 // Add to the switch
608 hitPointSet->numPoints=hitCount;
609 hitPointSet->vertexProperty.setValue(hitVtxProperty);
610 sw->addChild(hitPointSet);
611 hitPointSet->enableNotify(TRUE);
612 hitVtxProperty->enableNotify(TRUE);
613}
614
615
616void VP1SimHitSystem::handleDetDescrElementHit(const CaloDetDescrElement *hitElement, SoVertexProperty* hitVtxProperty, unsigned int &hitCount)
617{
618 float x = hitElement->x();
619 float y = hitElement->y();
620 double z = hitElement->z();
621 hitVtxProperty->vertex.set1Value(hitCount++,x,y,z);
622}
AtlasHitsVector< CSCSimHit > CSCSimHitCollection
std::unique_ptr< CaloDetDescrManager > buildCaloDetDescrNoAlign(ISvcLocator *svcLocator, IMessageSvc *msgSvc)
Definition of CaloDetDescrManager.
AtlasHitsVector< GenericMuonSimHit > GenericMuonSimHitCollection
AtlasHitsVector< MDTSimHit > MDTSimHitCollection
AtlasHitsVector< MMSimHit > MMSimHitCollection
AtlasHitsVector< RPCSimHit > RPCSimHitCollection
AtlasHitsVector< SiHit > SiHitCollection
AtlasHitsVector< SimulationHit > SimulationHitCollection
Property holding a SG store/key/clid from which a ReadHandle is made.
AtlasHitsVector< TGCSimHit > TGCSimHitCollection
AtlasHitsVector< TRTUncompressedHit > TRTUncompressedHitCollection
AtlasHitsVector< TileHit > TileHitVector
#define y
#define x
#define z
size_type size() const
This class groups all DetDescr information related to a CaloCell.
const Amg::Vector3D & globalPosition() const
Amg::Vector3D getGlobalPosition() const
Amg::Vector3D getGlobalPosition() const
Amg::Vector3D getGlobalPosition() const
Amg::Vector3D getGlobalPosition() const
HepGeom::Point3D< double > getGlobalPosition() const
Amg::Vector3D getGlobalPosition() const
This adaptor class allows TRT_UncompressedHits to behave as if they knew which detector they were in.
HepGeom::Point3D< double > getGlobalPosition(const InDetDD::TRT_DetectorManager *mgr) const
Amg::Vector3D getGlobalPosition() const
IVP13DSystemSimple(const QString &name, const QString &information, const QString &contact_info)
void messageVerbose(const QString &) const
void messageDebug(const QString &) const
void message(const QString &) const
ISvcLocator * serviceLocator() const
The Detector Manager for all TRT Detector elements, it acts as the interface to the detector elements...
Hit collection.
Class to store hit energy and time in LAr cell from G4 simulation.
Definition LArHit.h:25
Identifier cellID() const
Definition LArHit.h:108
Definition SiHit.h:19
CLHEP::Hep3Vector position
const StepPoint & pre() const
The Athena Transient Store API.
StatusCode retrieve(const T *&ptr) const
Retrieve the default object into a const T*.
Helper class for TileCal offline identifiers.
Definition TileID.h:67
static SbColor getSbColorFromRGB(const unsigned int r, const unsigned int g, const unsigned int b)
static bool hasTRTGeometry()
static bool hasPixelGeometry()
static bool hasSCTGeometry()
static bool hasHGTDGeometry()
static bool hasITkGeometry()
static void messageWarningRed(const QString &str, IVP1System *sys=0)
Definition VP1Msg.cxx:57
QMap< QString, SoSwitch * > switchMap
QMap< QString, QCheckBox * > checkBoxMap
std::unique_ptr< CaloDetDescrManager > lar_dd_man
const TileDetDescrManager * tile_dd_man
QMap< QString, SbColor > colorMap
QMap< QCheckBox *, QString > checkBoxNamesMap
const InDetDD::TRT_DetectorManager * trt_dd_man
Clockwork * m_clockwork
void buildHitTree(const QString &detector)
void handleDetDescrElementHit(const CaloDetDescrElement *hitElement, SoVertexProperty *hitVtxProperty, unsigned int &hitCount)
void buildEventSceneGraph(StoreGateSvc *sg, SoSeparator *root)
QWidget * buildController()
void systemcreate(StoreGateSvc *detstore)
void fillHitPositionsFromSiHitCollection(const std::string &collName, const StoreGateSvc *sg, SoVertexProperty *hitVtxProperty, unsigned int &hitCount)
Helper function to get the global position of a SiHit item.
Amg::Vector3D Hep3VectorToEigen(const CLHEP::Hep3Vector &CLHEPvector)
Converts a CLHEP-based CLHEP::Hep3Vector into an Eigen-based Amg::Vector3D.
Eigen::Matrix< double, 3, 1 > Vector3D
IMessageSvc * getMessageSvc(bool quiet=false)
AtlasHitsVector< sTGCSimHit > sTGCSimHitCollection