Skip to content
Snippets Groups Projects
DDG4Dict.C 12.12 KiB
// $Id: Geant4Data.h 513 2013-04-05 14:31:53Z gaede $
//====================================================================
//  AIDA Detector description implementation
//--------------------------------------------------------------------
//
//  Define the ROOT dictionaries for all data classes to be saved 
//  which are created by the DDG4 examples.
//
//  Author     : M.Frank
//
//====================================================================
// FRamework include files
#include "DDG4/Geant4Particle.h"
#include "DDG4/Geant4Data.h"
#include <vector>

using namespace std;
using namespace DD4hep;
using namespace DD4hep::Simulation;


// CINT configuration
#if defined(__MAKECINT__)
//#pragma link C++ class Position+;
//#pragma link C++ class Direction+;
#pragma link C++ class SimpleRun+;
#pragma link C++ class SimpleEvent+;
//#pragma link C++ class SimpleEvent::Seeds+;
#pragma link C++ class DataExtension+;
#pragma link C++ class ParticleExtension+;
#pragma link C++ class auto_ptr<DataExtension>+;
#pragma link C++ class auto_ptr<ParticleExtension>+;

#pragma link C++ class SimpleHit+;
#pragma link C++ class Geant4Particle+;
#pragma link C++ class std::vector<SimpleHit*>+;
#pragma link C++ class SimpleHit::Contribution+;
#pragma link C++ class SimpleHit::Contributions+;
#pragma link C++ class SimpleTracker+;
#pragma link C++ class SimpleTracker::Hit+;
#pragma link C++ class std::vector<SimpleTracker::Hit*>+;
#pragma link C++ class SimpleCalorimeter+;
#pragma link C++ class SimpleCalorimeter::Hit+;
#pragma link C++ class std::vector<SimpleCalorimeter::Hit*>+;
#pragma link C++ class std::vector<Geant4Particle*>+;

//#pragma link C++ class ;
#endif

#include "DDG4/Geant4Config.h"
#include "DDG4/Geant4DataDump.h"
#include <iostream>

namespace DD4hep {
  namespace Simulation  {

#define ACTIONHANDLE(x)    \
    struct x##Handle  {    \
      Geant4##x* action;   \
      x##Handle(Geant4##x* a)       : action(a)        { if ( action ) action->addRef();} \
      x##Handle(const x##Handle& h) : action(h.action) { if ( action ) action->addRef();} \
      ~x##Handle()                  { if ( action) action->release();                   } \
      Geant4##x* release()          { Geant4##x* tmp = action; action=0; return tmp;    } \
      operator Geant4##x* () const  { return action;     }  \
      Geant4##x* operator->() const { return action;     }  \
      Geant4##x* get() const        { return action;     }  \
      }

    ACTIONHANDLE(Filter);
    ACTIONHANDLE(Action);
    ACTIONHANDLE(RunAction);
    ACTIONHANDLE(EventAction);
    ACTIONHANDLE(GeneratorAction);
    ACTIONHANDLE(PhysicsList);
    ACTIONHANDLE(TrackingAction);
    ACTIONHANDLE(SteppingAction);
    ACTIONHANDLE(StackingAction);
    ACTIONHANDLE(Sensitive);
    ACTIONHANDLE(ParticleHandler);

    ACTIONHANDLE(GeneratorActionSequence);
    ACTIONHANDLE(RunActionSequence);
    ACTIONHANDLE(EventActionSequence);
    ACTIONHANDLE(TrackingActionSequence);
    ACTIONHANDLE(SteppingActionSequence);
    ACTIONHANDLE(StackingActionSequence);
    ACTIONHANDLE(PhysicsListActionSequence);
    ACTIONHANDLE(SensDetActionSequence);

    struct PropertyResult  {
      string data;
      int status;
      PropertyResult() : status(0) {}
      PropertyResult(const string& d, int s) : data(d), status(s) {}
      PropertyResult(const PropertyResult& c) : data(c.data), status(c.status) {}
      ~PropertyResult() {}
    };

    struct Geant4ActionCreation  {
      template <typename H,typename T> static H cr(KernelHandle& kernel, const string& name_type)  {
	T action(*kernel.get(),name_type);
	H handle(action.get());
	return handle;
      }
      static ActionHandle createAction(KernelHandle& kernel, const string& name_type)   
      { return cr<ActionHandle,Setup::Action>(kernel,name_type);                            }
      static FilterHandle createFilter(KernelHandle& kernel, const string& name_type)
      { return cr<FilterHandle,Setup::Filter>(kernel,name_type);                            }
      static PhysicsListHandle createPhysicsList(KernelHandle& kernel, const string& name_type)
      { return cr<PhysicsListHandle,Setup::PhysicsList>(kernel,name_type);                  }
      static RunActionHandle createRunAction(KernelHandle& kernel, const string& name_type)
      { return cr<RunActionHandle,Setup::RunAction>(kernel,name_type);                      }
      static EventActionHandle createEventAction(KernelHandle& kernel, const string& name_type)
      { return cr<EventActionHandle,Setup::EventAction>(kernel,name_type);                  }
      static TrackingActionHandle createTrackingAction(KernelHandle& kernel, const string& name_type)
      { return cr<TrackingActionHandle,Setup::TrackAction>(kernel,name_type);               }
      static SteppingActionHandle createSteppingAction(KernelHandle& kernel, const string& name_type)
      { return cr<SteppingActionHandle,Setup::StepAction>(kernel,name_type);                }
      static StackingActionHandle createStackingAction(KernelHandle& kernel, const string& name_type)
      { return cr<StackingActionHandle,Setup::StackAction>(kernel,name_type);               }
      static GeneratorActionHandle createGeneratorAction(KernelHandle& kernel, const string& name_type)
      { return cr<GeneratorActionHandle,Setup::GenAction>(kernel,name_type);                }
      static SensitiveHandle createSensitive(KernelHandle& kernel, const string& name_type, const string& detector)
      {	return SensitiveHandle(Setup::Sensitive(*kernel.get(),name_type,detector).get());   }
      static SensDetActionSequenceHandle createSensDetSequence(KernelHandle& kernel, const string& name_type)
      {	return cr<SensDetActionSequenceHandle,Setup::SensitiveSeq>(kernel,name_type);       }

      static Geant4Action* toAction(Geant4Filter* f)                   { return f;          }
      static Geant4Action* toAction(Geant4Action* f)                   { return f;          }
      static Geant4Action* toAction(Geant4Sensitive* f)                { return f;          }
      static Geant4Action* toAction(Geant4PhysicsList* f)              { return f;          }
      static Geant4Action* toAction(Geant4RunAction* f)                { return f;          }
      static Geant4Action* toAction(Geant4EventAction* f)              { return f;          }
      static Geant4Action* toAction(Geant4TrackingAction* f)           { return f;          }
      static Geant4Action* toAction(Geant4SteppingAction* f)           { return f;          }
      static Geant4Action* toAction(Geant4StackingAction* f)           { return f;          }
      static Geant4Action* toAction(Geant4GeneratorAction* f)          { return f;          }
      static Geant4Action* toAction(Geant4GeneratorActionSequence* f)  { return f;          }
      static Geant4Action* toAction(Geant4RunActionSequence* f)        { return f;          }
      static Geant4Action* toAction(Geant4EventActionSequence* f)      { return f;          }
      static Geant4Action* toAction(Geant4TrackingActionSequence* f)   { return f;          }
      static Geant4Action* toAction(Geant4SteppingActionSequence* f)   { return f;          }
      static Geant4Action* toAction(Geant4StackingActionSequence* f)   { return f;          }
      static Geant4Action* toAction(Geant4PhysicsListActionSequence* f){ return f;          }
      static Geant4Action* toAction(Geant4SensDetActionSequence* f)    { return f;          }

      static Geant4Action* toAction(FilterHandle f)                    { return f.action;   }
      static Geant4Action* toAction(ActionHandle f)                    { return f.action;   }
      static Geant4Action* toAction(SensitiveHandle f)                 { return f.action;   }
      static Geant4Action* toAction(PhysicsListHandle f)               { return f.action;   }
      static Geant4Action* toAction(RunActionHandle f)                 { return f.action;   }
      static Geant4Action* toAction(EventActionHandle f)               { return f.action;   }
      static Geant4Action* toAction(TrackingActionHandle f)            { return f.action;   }
      static Geant4Action* toAction(SteppingActionHandle f)            { return f.action;   }
      static Geant4Action* toAction(StackingActionHandle f)            { return f.action;   }
      static Geant4Action* toAction(GeneratorActionHandle f)           { return f.action;   }
      static Geant4Action* toAction(GeneratorActionSequenceHandle f)   { return f.action;   }
      static Geant4Action* toAction(RunActionSequenceHandle f)         { return f.action;   }
      static Geant4Action* toAction(EventActionSequenceHandle f)       { return f.action;   }
      static Geant4Action* toAction(TrackingActionSequenceHandle f)    { return f.action;   }
      static Geant4Action* toAction(SteppingActionSequenceHandle f)    { return f.action;   }
      static Geant4Action* toAction(StackingActionSequenceHandle f)    { return f.action;   }
      static Geant4Action* toAction(PhysicsListActionSequenceHandle f) { return f.action;   }
      static Geant4Action* toAction(SensDetActionSequenceHandle f)     { return f.action;   }
      static PropertyResult getProperty(Geant4Action* action, const string& name)  {
	if ( action->hasProperty(name) )  {
	  return PropertyResult(action->property(name).str(),1);
	}
	return PropertyResult("",0);
      }
      static int setProperty(Geant4Action* action, const string& name, const string& value)  {
	if ( action->hasProperty(name) )  {
	  action->property(name).str(value);
	  return 1;
	}
	return 0;
      }
      static PropertyResult getPropertyKernel(Geant4Kernel* kernel, const string& name)  {
	if ( kernel->hasProperty(name) )  {
	  return PropertyResult(kernel->property(name).str(),1);
	}
	return PropertyResult("",0);
      }
      static int setPropertyKernel(Geant4Kernel* kernel, const string& name, const string& value)  {
	if ( kernel->hasProperty(name) )  {
	  kernel->property(name).str(value);
	  return 1;
	}
	return 0;
      }
    };
  }
}

typedef DD4hep::Simulation::Geant4ActionCreation Geant4ActionCreation;

#include "DD4hep/objects/DetectorInterna.h"
// CINT configuration for DDG4
#if defined(__MAKECINT__)
#pragma link C++ class PropertyResult;

#pragma link C++ class ActionHandle;
#pragma link C++ class FilterHandle;
#pragma link C++ class RunActionHandle;
#pragma link C++ class GeneratorActionHandle;
#pragma link C++ class EventActionHandle;
#pragma link C++ class PhysicsListHandle;
#pragma link C++ class TrackingActionHandle;
#pragma link C++ class SteppingActionHandle;
#pragma link C++ class StackingActionHandle;
#pragma link C++ class SensitiveHandle;
#pragma link C++ class GeneratorActionSequenceHandle;
#pragma link C++ class RunActionSequenceHandle;
#pragma link C++ class EventActionSequenceHandle;
#pragma link C++ class TrackingActionSequenceHandle;
#pragma link C++ class SteppingActionSequenceHandle;
#pragma link C++ class StackingActionSequenceHandle;
#pragma link C++ class PhysicsListActionSequenceHandle;
#pragma link C++ class SensDetActionSequenceHandle;

#pragma link C++ class Geant4DataDump;

#pragma link C++ class Geant4ActionCreation;
#pragma link C++ class Geant4Action;
#pragma link C++ class Geant4Kernel;
#pragma link C++ class Geant4Kernel::PhaseSelector;
#pragma link C++ class Geant4Context;
#pragma link C++ class KernelHandle;

#pragma link C++ class Geant4RunActionSequence;
#pragma link C++ class Geant4RunAction;

#pragma link C++ class Geant4EventActionSequence;
#pragma link C++ class Geant4EventAction;

#pragma link C++ class Geant4SteppingActionSequence;
#pragma link C++ class Geant4SteppingAction;

#pragma link C++ class Geant4StackingActionSequence;
#pragma link C++ class Geant4StackingAction;

#pragma link C++ class Geant4TrackingActionSequence;
#pragma link C++ class Geant4TrackingAction;

#pragma link C++ class Geant4GeneratorActionSequence;
#pragma link C++ class Geant4GeneratorAction;

#pragma link C++ class Geant4PhysicsListActionSequence;
#pragma link C++ class Geant4PhysicsList;

#pragma link C++ class Geant4ParticleHandler;
#pragma link C++ class Geant4UserParticleHandler;
#pragma link C++ class Geant4Filter;
#pragma link C++ class Geant4ActionSD;
#pragma link C++ class Geant4Sensitive;
#pragma link C++ class Geant4SensDetActionSequence;
#pragma link C++ class Geant4ActionPhase;

#endif

int Geant4Dict()  {
  return 0;
}