Skip to content
Snippets Groups Projects
Geant4HitExtractor.cpp 2.54 KiB
Newer Older
//==========================================================================
Markus Frank's avatar
Markus Frank committed
//  AIDA Detector description implementation 
//--------------------------------------------------------------------------
Markus Frank's avatar
Markus Frank committed
// Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN)
// All rights reserved.
//
// For the licensing terms see $DD4hepINSTALL/LICENSE.
// For the list of contributors see $DD4hepINSTALL/doc/CREDITS.
//
// Author     : M.Frank
//
//==========================================================================

// Framework include files
Markus Frank's avatar
Markus Frank committed
using namespace dd4hep::sim;
/// Namespace for the AIDA detector description toolkit
Markus Frank's avatar
Markus Frank committed
namespace dd4hep {
Markus Frank's avatar
Markus Frank committed
  /// Namespace for the dd4hep event display specializations
  namespace DDEve  {

    /// SimulationHit definition
    /**
     *  \author  M.Frank
     *  \version 1.0
     *  \ingroup DD4HEP_SIMULATION
     *  \ingroup DD4HEP_EVE
     */
    class SimulationHit   {
    public:
      Position position;
      float deposit;
      /// Default constructor
      SimulationHit() : deposit(0.0) {}
      /// Standard initializing constructor
      SimulationHit(const Position& p, float d) : position(p), deposit(d) {}
      /// Copy constructor
      SimulationHit(const SimulationHit& c) : position(c.position), deposit(c.deposit) {}
      /// Standard Destructor
      ~SimulationHit()  {}
      /// Assignment operator
      SimulationHit& operator=(const SimulationHit& c)  {
        if ( this != &c )  {
          position = c.position;
          deposit = c.deposit;
        }
        return *this;
/// Hit conversion function  \ingroup DD4HEP_EVE
static void* _convertHitCollection(const char* source)  {
Markus Frank's avatar
Markus Frank committed
  typedef dd4hep::DDEve::SimulationHit SimulationHit;
  const std::vector<SimpleHit*>* c = (std::vector<SimpleHit*>*)source;
  std::vector<SimulationHit>* pv = new std::vector<SimulationHit>();
  if ( source && c->size() > 0 )   {
    for(std::vector<SimpleHit*>::const_iterator k=c->begin(); k!=c->end(); ++k)   {
      SimpleTracker::Hit* trh = dynamic_cast<SimpleTracker::Hit*>(*k);
      if ( trh )   {
        pv->emplace_back(SimulationHit(trh->position, trh->energyDeposit));
      }
      SimpleCalorimeter::Hit* cah = dynamic_cast<SimpleCalorimeter::Hit*>(*k);
      if ( cah )   {
        pv->emplace_back(SimulationHit(cah->position, cah->energyDeposit));
Markus Frank's avatar
Markus Frank committed
using namespace dd4hep::detail;
DECLARE_CONSTRUCTOR(DDEve_DDG4CollectionAccess,_convertHitCollection)