| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

In This Package:

QueriableStepAction Class Reference

A mix-in virtual class used with the HistorianStepAction. More...

#include <QueriableStepAction.h>

Inheritance diagram for QueriableStepAction:

[legend]
Collaboration diagram for QueriableStepAction:
[legend]
List of all members.

Public Types

 SUCCESS
 NO_INTERFACE
 VERSMISMATCH
 LAST_ERROR
enum  Status
enum  Status
enum  Status

Public Member Functions

 QueriableStepAction (const std::string &type, const std::string &name, const IInterface *parent)
virtual ~QueriableStepAction ()
virtual StatusCode initialize ()
virtual StatusCode finalize ()
virtual void UserSteppingAction (const G4Step *)=0
virtual StatusCode GetTrackParameterList (RuleParser::ParameterList &)
 To get the initial list of Queriables.
virtual StatusCode GetVertexParameterList (RuleParser::ParameterList &)
void Reset (const G4Step *, const G4Track *, const G4StepPoint *)
 To prepare a Step for querying:.
virtual void queryParam (int id, double &output) const
virtual void queryParam (int id, std::string &output) const
const IDetectorElementgetDetectorElement () const
int getDetectorElementMatch () const
const ILVolumegetLogicalVolume () const
const IPVolumegetPhysicalVolume () const
const DayaBay::SimProcessgetProcess () const
double getQuenchedEnergy () const
const G4HistoryUserTrackInfogetUserTrackInfo () const
unsigned int getDetectorId () const
unsigned int getDetectorId (const IDetectorElement *) const
virtual StatusCode queryInterface (const InterfaceID &riid, void **ppvInterface)=0
virtual StatusCode queryInterface (const InterfaceID &riid, void **ppvInterface)=0
virtual StatusCode queryInterface (const InterfaceID &riid, void **ppvInterface)=0
virtual StatusCode queryInterface (const InterfaceID &riid, void **ppvUnknown)
virtual unsigned long addRef ()=0
virtual unsigned long addRef ()=0
virtual unsigned long addRef ()=0
virtual unsigned long addRef ()
virtual unsigned long release ()=0
virtual unsigned long release ()=0
virtual unsigned long release ()=0
StatusCode release (const IInterface *interface) const
virtual unsigned long release ()
virtual const std::string & type () const =0
virtual const std::string & type () const
virtual const IInterfaceparent () const =0
virtual const IInterfaceparent () const
virtual StatusCode configure ()=0
virtual StatusCode configure ()
virtual StatusCode start ()=0
virtual StatusCode start ()
virtual StatusCode stop ()=0
virtual StatusCode stop ()
virtual StatusCode terminate ()=0
virtual StatusCode terminate ()
virtual StatusCode reinitialize ()=0
virtual StatusCode reinitialize ()
virtual StatusCode restart ()=0
virtual StatusCode restart ()
virtual Gaudi::StateMachine::State FSMState () const =0
virtual Gaudi::StateMachine::State FSMState () const
virtual StatusCode sysInitialize ()=0
virtual StatusCode sysInitialize ()
virtual StatusCode sysStart ()=0
virtual StatusCode sysStart ()
virtual StatusCode sysStop ()=0
virtual StatusCode sysStop ()
virtual StatusCode sysFinalize ()=0
virtual StatusCode sysFinalize ()
virtual StatusCode sysReinitialize ()=0
virtual StatusCode sysReinitialize ()
virtual StatusCode sysRestart ()=0
virtual StatusCode sysRestart ()
virtual unsigned long refCount () const =0
virtual const std::string & name () const =0
virtual const std::string & name () const
virtual void handle (const Incident &i)
IGiGaSvcgigaSvc () const
IGiGaSetUpSvcsetupSvc () const
INTupleSvcntupleSvc () const
INTupleSvcevtColSvc () const
IDataProviderSvcdetSvc () const
IDataProviderSvcevtSvc () const
IIncidentSvcincSvc () const
IChronoStatSvcchronoSvc () const
IHistogramSvchistoSvc () const
IAlgContextSvccontextSvc () const
DataObjectput (IDataProviderSvc *svc, DataObject *object, const std::string &address, const bool useRootInTES=true) const
DataObjectput (DataObject *object, const std::string &address, const bool useRootInTES=true) const
Gaudi::Utils::GetData< TYPE
>::return_type 
get (IDataProviderSvc *svc, const std::string &location, const bool useRootInTES=true) const
Gaudi::Utils::GetData< TYPE
>::return_type 
get (const std::string &location, const bool useRootInTES=true) const
TYPE * getDet (IDataProviderSvc *svc, const std::string &location) const
TYPE * getDet (const std::string &location) const
bool exist (IDataProviderSvc *svc, const std::string &location, const bool useRootInTES=true) const
bool exist (const std::string &location, const bool useRootInTES=true) const
bool existDet (IDataProviderSvc *svc, const std::string &location) const
bool existDet (const std::string &location) const
TYPE * getOrCreate (IDataProviderSvc *svc, const std::string &location, const bool useRootInTES=true) const
TYPE * getOrCreate (const std::string &location, const bool useRootInTES=true) const
TOOL * tool (const std::string &type, const std::string &name, const IInterface *parent=0, bool create=true) const
TOOL * tool (const std::string &type, const IInterface *parent=0, bool create=true) const
SERVICE * svc (const std::string &name, const bool create=true) const
IUpdateManagerSvcupdMgrSvc () const
IDataProviderSvcfastContainersSvc () const
StatusCode Error (const std::string &msg, const StatusCode st=StatusCode::FAILURE, const size_t mx=10) const
StatusCode Warning (const std::string &msg, const StatusCode st=StatusCode::FAILURE, const size_t mx=10) const
StatusCode Print (const std::string &msg, const StatusCode st=StatusCode::SUCCESS, const MSG::Level lev=MSG::INFO) const
StatusCode Assert (const bool ok, const std::string &message="", const StatusCode sc=StatusCode(StatusCode::FAILURE, true)) const
StatusCode Assert (const bool ok, const char *message, const StatusCode sc=StatusCode(StatusCode::FAILURE, true)) const
StatusCode Exception (const std::string &msg, const GaudiException &exc, const StatusCode sc=StatusCode(StatusCode::FAILURE, true)) const
StatusCode Exception (const std::string &msg, const std::exception &exc, const StatusCode sc=StatusCode(StatusCode::FAILURE, true)) const
StatusCode Exception (const std::string &msg="no message", const StatusCode sc=StatusCode(StatusCode::FAILURE, true)) const
MsgStreammsgStream (const MSG::Level level) const
MsgStreamalways () const
MsgStreamfatal () const
MsgStreamerr () const
MsgStreamerror () const
MsgStreamwarning () const
MsgStreaminfo () const
MsgStreamdebug () const
MsgStreamverbose () const
MsgStreammsg () const
const Statisticscounters () const
StatEntitycounter (const std::string &tag) const
MSG::Level msgLevel () const
bool msgLevel (const MSG::Level level) const
void resetMsgStream () const
bool typePrint () const
bool propsPrint () const
bool statPrint () const
bool errorsPrint () const
long printStat (const MSG::Level level=MSG::ALWAYS) const
long printErrors (const MSG::Level level=MSG::ALWAYS) const
long printProps (const MSG::Level level=MSG::ALWAYS) const
void registerCondition (const std::string &condition, StatusCode(CallerClass::*mf)()=NULL)
void registerCondition (const std::string &condition, CondType *&condPtrDest, StatusCode(CallerClass::*mf)()=NULL)
void registerCondition (char *condition, StatusCode(CallerClass::*mf)()=NULL)
void registerCondition (TargetClass *condition, StatusCode(CallerClass::*mf)()=NULL)
StatusCode runUpdate ()
TransientFastContainer< T > * getFastContainer (const std::string &location, typename TransientFastContainer< T >::size_type initial=0)
const std::string & context () const
const std::string & rootInTES () const
double globalTimeOffset () const
virtual Gaudi::StateMachine::State targetFSMState () const
virtual StatusCode setProperty (const Property &p)
virtual StatusCode setProperty (const std::string &s)
virtual StatusCode setProperty (const std::string &n, const std::string &v)
StatusCode setProperty (const std::string &name, const TYPE &value)
virtual StatusCode getProperty (Property *p) const
virtual const PropertygetProperty (const std::string &name) const
virtual StatusCode getProperty (const std::string &n, std::string &v) const
virtual const std::vector<
Property * > & 
getProperties () const
PropertyMgrgetPropertyMgr ()
ISvcLocatorserviceLocator () const
ISvcLocatorsvcLoc () const
IMessageSvcmsgSvc () const
IToolSvctoolSvc () const
StatusCode setProperties ()
StatusCode service (const std::string &name, T *&svc, bool createIf=true) const
StatusCode service (const std::string &type, const std::string &name, T *&svc) const
void declInterface (const InterfaceID &, void *)
PropertydeclareProperty (const std::string &name, T &property, const std::string &doc="none") const
PropertydeclareRemoteProperty (const std::string &name, IProperty *rsvc, const std::string &rname="") const
IAuditorSvcauditorSvc () const
IMonitorSvcmonitorSvc () const
void declareInfo (const std::string &name, const T &var, const std::string &desc) const
void declareInfo (const std::string &name, const std::string &format, const void *var, int size, const std::string &desc) const

Static Public Member Functions

static const InterfaceIDinterfaceID ()
static const InterfaceIDinterfaceID ()
static const InterfaceIDinterfaceID ()

Public Attributes

 SUCCESS
 NO_INTERFACE
 VERSMISMATCH
 LAST_ERROR

Protected Types

typedef std::map< const IDetectorElement *,
unsigned int > 
DetectorIdCache_t
 kPar_Unknown = 0
 kPar_START_VERTEX
 kPar_Step_dE
 kPar_Step_dE_Ion
 kPar_Step_qdE
 kPar_Step_dx
 kPar_Step_dt
 kPar_Step_dAngle
 kPar_capTargetZ
 kPar_capTargetA
 kPar_Step_E_weighted_x
 kPar_Step_E_weighted_y
 kPar_Step_E_weighted_z
 kPar_Step_E_weighted_t
 kPar_Step_qE_weighted_x
 kPar_Step_qE_weighted_y
 kPar_Step_qE_weighted_z
 kPar_Step_qE_weighted_t
 kPar_IsStopping
 kPar_IsStarting
 kPar_StepNumber
 kPar_VolumeChanged
 kPar_MaterialChanged
 kPar_START_TRACK
 kPar_t
 kPar_x
 kPar_y
 kPar_z
 kPar_r
 kPar_local_x
 kPar_local_y
 kPar_local_z
 kPar_local_r
 kPar_LogicalVolumeName
 kPar_MaterialName
 kPar_DetectorElement
 kPar_DetectorElementName
 kPar_DetectorElementMatch
 kPar_NicheId
 kPar_DetectorId
 kPar_SiteId
 kPar_Site
 kPar_AD
 kPar_momentum
 kPar_TotEnergy
 kPar_KineticEnergy
 kPar_vx
 kPar_vy
 kPar_vz
 kPar_local_vx
 kPar_local_vy
 kPar_local_vz
 kPar_ProcessType
 kPar_ProcessName
 kPar_Pdg
 kPar_Charge
 kPar_TrackId
 kPar_CreatorPdg
 kPar_AncestorPdg
 kPar_mass
 kPar_ParticleName
 kPar_Prescale
 kPar_CreatorProcessName
 kPar_END_VERTEX
 kPar_END_QUERIABLE
enum  EParamIds {
  kPar_Unknown = 0, kPar_START_VERTEX, kPar_Step_dE, kPar_Step_dE_Ion,
  kPar_Step_qdE, kPar_Step_dx, kPar_Step_dt, kPar_Step_dAngle,
  kPar_capTargetZ, kPar_capTargetA, kPar_Step_E_weighted_x, kPar_Step_E_weighted_y,
  kPar_Step_E_weighted_z, kPar_Step_E_weighted_t, kPar_Step_qE_weighted_x, kPar_Step_qE_weighted_y,
  kPar_Step_qE_weighted_z, kPar_Step_qE_weighted_t, kPar_IsStopping, kPar_IsStarting,
  kPar_StepNumber, kPar_VolumeChanged, kPar_MaterialChanged, kPar_START_TRACK,
  kPar_t, kPar_x, kPar_y, kPar_z,
  kPar_r, kPar_local_x, kPar_local_y, kPar_local_z,
  kPar_local_r, kPar_LogicalVolumeName, kPar_MaterialName, kPar_DetectorElement,
  kPar_DetectorElementName, kPar_DetectorElementMatch, kPar_NicheId, kPar_DetectorId,
  kPar_SiteId, kPar_Site, kPar_AD, kPar_momentum,
  kPar_TotEnergy, kPar_KineticEnergy, kPar_vx, kPar_vy,
  kPar_vz, kPar_local_vx, kPar_local_vy, kPar_local_vz,
  kPar_ProcessType, kPar_ProcessName, kPar_Pdg, kPar_Charge,
  kPar_TrackId, kPar_CreatorPdg, kPar_AncestorPdg, kPar_mass,
  kPar_ParticleName, kPar_Prescale, kPar_CreatorProcessName, kPar_END_VERTEX,
  kPar_END_QUERIABLE
}
typedef std::map< std::string,
StatEntity
Statistics
typedef std::map< std::string,
unsigned int > 
Counter
typedef std::vector< IAlgTool * > AlgTools
typedef std::pair< IInterface *,
std::string > 
ServiceEntry
typedef std::vector< ServiceEntryServices

Protected Member Functions

virtual unsigned long refCount () const
StatusCode releaseTool (const IAlgTool *tool) const
StatusCode releaseSvc (const IInterface *svc) const
int outputLevel () const
IntegerPropertyoutputLevelProperty ()
void initOutputLevel (Property &prop)

Protected Attributes

std::vector< std::string > m_DetectorElementSearchPath
std::string m_TouchableToDetelem_name
std::vector< std::string > m_IdParameterNames
const G4Step * mCurrentStep
const G4Track * mCurrentTrack
const G4StepPoint * mCurrentStepPoint
ITouchableToDetectorElementmTouchToDetElem
const IDetectorElementmDetElement
int mDetElementMatch
const ILVolumemLogicVolume
const IPVolumemPhysVolume
DayaBay::SimProcess mProcess
double mQuenchedEnergy
G4HistoryUserTrackInfomUserTrackInfo
unsigned int mDetectorId
DetectorIdCache_t mDetectorIdCache

Static Protected Attributes

static const bool IgnoreRootInTES
static const bool UseRootInTES

Private Member Functions

 QueriableStepAction ()
 no default constructor
 QueriableStepAction (const QueriableStepAction &)
 no copy
QueriableStepActionoperator= (const QueriableStepAction &)
 no =

Private Attributes

INeutronCaptureInfom_capinfo
double m_BirksConstant1
double m_BirksConstant2

Detailed Description

A mix-in virtual class used with the HistorianStepAction.

Author:
Nathaniel Tagg (tagg@minos.phy.tufts.edu)

Definition at line 30 of file QueriableStepAction.h.


Member Typedef Documentation

typedef std::map<const IDetectorElement*,unsigned int> QueriableStepAction::DetectorIdCache_t [protected]

Definition at line 88 of file QueriableStepAction.h.


Member Enumeration Documentation

enum QueriableStepAction::EParamIds [protected]

Enumerator:
kPar_Unknown 
kPar_START_VERTEX 
kPar_Step_dE 
kPar_Step_dE_Ion 
kPar_Step_qdE 
kPar_Step_dx 
kPar_Step_dt 
kPar_Step_dAngle 
kPar_capTargetZ 
kPar_capTargetA 
kPar_Step_E_weighted_x 
kPar_Step_E_weighted_y 
kPar_Step_E_weighted_z 
kPar_Step_E_weighted_t 
kPar_Step_qE_weighted_x 
kPar_Step_qE_weighted_y 
kPar_Step_qE_weighted_z 
kPar_Step_qE_weighted_t 
kPar_IsStopping 
kPar_IsStarting 
kPar_StepNumber 
kPar_VolumeChanged 
kPar_MaterialChanged 
kPar_START_TRACK 
kPar_t 
kPar_x 
kPar_y 
kPar_z 
kPar_r 
kPar_local_x 
kPar_local_y 
kPar_local_z 
kPar_local_r 
kPar_LogicalVolumeName 
kPar_MaterialName 
kPar_DetectorElement 
kPar_DetectorElementName 
kPar_DetectorElementMatch 
kPar_NicheId 
kPar_DetectorId 
kPar_SiteId 
kPar_Site 
kPar_AD 
kPar_momentum 
kPar_TotEnergy 
kPar_KineticEnergy 
kPar_vx 
kPar_vy 
kPar_vz 
kPar_local_vx 
kPar_local_vy 
kPar_local_vz 
kPar_ProcessType 
kPar_ProcessName 
kPar_Pdg 
kPar_Charge 
kPar_TrackId 
kPar_CreatorPdg 
kPar_AncestorPdg 
kPar_mass 
kPar_ParticleName 
kPar_Prescale 
kPar_CreatorProcessName 
kPar_END_VERTEX 
kPar_END_QUERIABLE 

Definition at line 93 of file QueriableStepAction.h.

00093                   {
00094      kPar_Unknown = 0
00095      , kPar_START_VERTEX
00097      // Applies to end-of-step (Vertex) only
00098      , kPar_Step_dE                    // double
00099      , kPar_Step_dE_Ion                // double
00100      , kPar_Step_qdE                   // double
00101      , kPar_Step_dx                    // double
00102      , kPar_Step_dt                    // double
00103      , kPar_Step_dAngle                // double
00104      , kPar_capTargetZ                 // int
00105      , kPar_capTargetA                 // int | No correct A info. 8/2008 Wei
00106      
00107      , kPar_Step_E_weighted_x          // double
00108      , kPar_Step_E_weighted_y          // double
00109      , kPar_Step_E_weighted_z          // double
00110      , kPar_Step_E_weighted_t          // double
00111      , kPar_Step_qE_weighted_x         // double
00112      , kPar_Step_qE_weighted_y         // double
00113      , kPar_Step_qE_weighted_z         // double
00114      , kPar_Step_qE_weighted_t         // double
00115 
00116      , kPar_IsStopping                 // int
00117      , kPar_IsStarting                 // int
00118      , kPar_StepNumber                 // int
00119 
00120      , kPar_VolumeChanged              // int as bool
00121      , kPar_MaterialChanged            // int as bool
00122 
00124      // Both Vertex and Track:
00125      , kPar_START_TRACK
00126      , kPar_t                          // double   |
00127      , kPar_x                          // double   |
00128      , kPar_y                          // double   |
00129      , kPar_z                          // double   |
00130      , kPar_r                          // double   |
00131      , kPar_local_x                    // double   |
00132      , kPar_local_y                    // double   |
00133      , kPar_local_z                    // double   | all of these guys refer to prepoint for tracks
00134      , kPar_local_r                    // double   | or postpoint for vertices.
00135      , kPar_LogicalVolumeName          // string
00136      , kPar_MaterialName               // string
00137      , kPar_DetectorElement            // custom
00138      , kPar_DetectorElementName        // string           
00139      , kPar_DetectorElementMatch       // int
00140      , kPar_NicheId                    // int
00141      , kPar_DetectorId                 // int
00142      , kPar_SiteId                     // int
00143      , kPar_Site                       // int
00144      , kPar_AD                         // int
00145      , kPar_momentum                   // double   |
00146      , kPar_TotEnergy                  // double   |
00147      , kPar_KineticEnergy              // double   |
00148      , kPar_vx                         // double   |
00149      , kPar_vy                         // double   |
00150      , kPar_vz                         // double   |
00151      , kPar_local_vx                   // double   |
00152      , kPar_local_vy                   // double   |
00153      , kPar_local_vz                   // double   |
00154      , kPar_ProcessType                // int      |
00155      , kPar_ProcessName                // string   |
00156 
00157      , kPar_Pdg                        // int 
00158      , kPar_Charge                    // int
00159      , kPar_TrackId                    // int
00160      , kPar_CreatorPdg                 // int
00161      , kPar_AncestorPdg                // int
00162      , kPar_mass                       // double
00163      , kPar_ParticleName               // string
00164      , kPar_Prescale                   // custom
00165      , kPar_CreatorProcessName         // string
00166      , kPar_END_VERTEX
00167      , kPar_END_QUERIABLE
00168    }; 


Constructor & Destructor Documentation

QueriableStepAction::QueriableStepAction ( const std::string &  type,
const std::string &  name,
const IInterface parent 
)

Definition at line 34 of file QueriableStepAction.cc.

00038   : GiGaStepActionBase( type , name , parent )
00039   , m_DetectorElementSearchPath(1,"/dd/Structure")
00040   , mCurrentStep(0)
00041   , mCurrentTrack(0)
00042   , mCurrentStepPoint(0)
00043   , mTouchToDetElem(0)
00044 { 
00045   declareProperty("TouchableToDetelem",m_TouchableToDetelem_name = "TH2DE");
00046   declareProperty("DetectorElementSearchPath",m_DetectorElementSearchPath);
00047 
00048   m_IdParameterNames.push_back("PmtID");
00049   m_IdParameterNames.push_back("DetectorID");
00050   m_IdParameterNames.push_back("SiteID");
00051   declareProperty("IdParameterNames",m_IdParameterNames,
00052                   "Names of the user parameters attached to detector elements used to give ID numbers.");
00053   
00054   // Liang Zhan, Jan 18, 2009.
00055   declareProperty("BirksConstant1", m_BirksConstant1 = 6.5e-3*g/cm2/MeV, "Birks constant C1");
00056   declareProperty("BirksConstant2", m_BirksConstant2 = 2.1e-6*(g/cm2/MeV)*(g/cm2/MeV), "Birks constant C2");
00057 }

virtual QueriableStepAction::~QueriableStepAction (  )  [inline, virtual]

Definition at line 36 of file QueriableStepAction.h.

00036 {};

QueriableStepAction::QueriableStepAction (  )  [private]

no default constructor

QueriableStepAction::QueriableStepAction ( const QueriableStepAction  )  [private]

no copy


Member Function Documentation

StatusCode QueriableStepAction::initialize (  )  [virtual]

Reimplemented from GiGaStepActionBase.

Reimplemented in HistorianStepAction, and UnObserverStepAction.

Definition at line 59 of file QueriableStepAction.cc.

00060 {
00061   StatusCode sc =  GiGaStepActionBase::initialize();
00062   if(sc.isFailure()) return sc;
00063 
00064   std::string t2de_name = std::string("t2de_") + name();
00065   mTouchToDetElem = tool<ITouchableToDetectorElement>(
00066      m_TouchableToDetelem_name,
00067      name(),
00068      this);
00069 
00070   // Get the Neutron Capture tool which is updated in DsPhysConHadron.cc
00071   // to gain access to the neutron capture information.
00072   // --- Wei, Aug 15, 2008
00073   m_capinfo = tool<INeutronCaptureInfo>("G4DhNeutronCaptureInfoTool");
00074 
00075   verbose() << " QueriableStepAction::initialize() done" << endreq;
00076 
00077   return StatusCode::SUCCESS;
00078 }

StatusCode QueriableStepAction::finalize (  )  [virtual]

Reimplemented from GiGaStepActionBase.

Reimplemented in HistorianStepAction, and UnObserverStepAction.

Definition at line 80 of file QueriableStepAction.cc.

00081 {
00082   return  GiGaStepActionBase::finalize();
00083 }

virtual void QueriableStepAction::UserSteppingAction ( const G4Step *   )  [pure virtual]

Implemented in HistorianStepAction, and UnObserverStepAction.

StatusCode QueriableStepAction::GetTrackParameterList ( RuleParser::ParameterList  )  [virtual]

To get the initial list of Queriables.

Usually called at initialize()

Definition at line 107 of file QueriableStepAction.cc.

00108 {
00109   using namespace RuleParser;
00110   using std::string;
00111   
00112   tplist.add<double>(kPar_t,"time","t");
00113   tplist.add<double>(kPar_x,"x","global_x");
00114   tplist.add<double>(kPar_y,"y","global_y");
00115   tplist.add<double>(kPar_z,"z","global_z");
00116   tplist.add<double>(kPar_r,"r","radius","pos_r");
00117   tplist.add<double>(kPar_local_x,"lx","local_x","det_x");             
00118   tplist.add<double>(kPar_local_y,"ly","local_y","det_y");
00119   tplist.add<double>(kPar_local_z,"lz","local_z","det_z");
00120   tplist.add<double>(kPar_local_r,"lr","local_r","det_r");
00121   tplist.add<string>(kPar_LogicalVolumeName,"Volume","LogicalVolumeName","LogicalVolume","VolumeName");
00122   tplist.add<string>(kPar_MaterialName,"Material","MaterialName");
00123   tplist.add<string>(kPar_DetectorElementName,"DetectorElementName");
00124   tplist.add<double>(kPar_DetectorElementMatch,"Match","DetectorElementMatch");
00125   tplist.add<double>(kPar_NicheId,"NicheId","Niche");
00126   tplist.add<double>(kPar_DetectorId,"DetectorId");
00127   tplist.add<double>(kPar_SiteId,"SiteId");
00128   tplist.add<double>(kPar_Site,"Site");
00129   tplist.add<double>(kPar_AD,"AD","AdNumber");
00130 
00131   tplist.add<double>(kPar_momentum,"momentum","p");
00132   tplist.add<double>(kPar_TotEnergy,"E","totEnergy","TotalEnergy");
00133   tplist.add<double>(kPar_KineticEnergy,"KE","kineticEnergy");
00134   tplist.add<double>(kPar_vx,"vx","global_dir_x","global_u");
00135   tplist.add<double>(kPar_vy,"vy","global_dir_y","global_v");
00136   tplist.add<double>(kPar_vz,"vz","global_dir_z","global_w");
00137   tplist.add<double>(kPar_local_vx,"lvx","local_dir_x","local_u");
00138   tplist.add<double>(kPar_local_vy,"lvy","local_dir_y","local_v");
00139   tplist.add<double>(kPar_local_vz,"lvz","local_dir_z","local_w");
00140   tplist.add<double>(kPar_ProcessType,"ProcessType");
00141   tplist.add<string>(kPar_ProcessName,"Process","ProcessName");
00142   tplist.add<double>(kPar_Pdg,"pdg","pdgcode","particle");
00143   tplist.add<double>(kPar_Charge,"charge","ParticleCharge","q");
00144   tplist.add<double>(kPar_TrackId,"id","trackid");
00145   tplist.add<double>(kPar_CreatorPdg,"creatorPdg","creator");
00146   tplist.add<double>(kPar_AncestorPdg,"ParentPdg","AncestorPdg","Ancestor");
00147   tplist.add<double>(kPar_mass,"mass","m");
00148   tplist.add<string>(kPar_ParticleName,"ParticleName");
00149   tplist.add<string>(kPar_CreatorProcessName,"CreatorProcessName","CreatorProcess");
00150 
00151 
00152 
00153   boost::shared_ptr<RuleFactory> prescaleFactory(new PrescaleRuleFactory);
00154   boost::shared_ptr<RuleFactory> customFactory(new DetElemContainsRuleFactory<QueriableStepAction>(this));
00155   tplist.add<int>(kPar_Prescale,"Prescale","by",prescaleFactory);
00156   tplist.add<const IDetectorElement*>(kPar_DetectorElement,"DetElem","in",customFactory);
00157   tplist.add<const IDetectorElement*>(kPar_DetectorElement,"DetectorElement","in",customFactory);
00158 
00159 
00160   return StatusCode::SUCCESS;
00161 }

StatusCode QueriableStepAction::GetVertexParameterList ( RuleParser::ParameterList  )  [virtual]

Definition at line 164 of file QueriableStepAction.cc.

00165 {
00167   GetTrackParameterList(vplist); // Everything valid for a track is valid for a vertex.
00168 
00169   using namespace RuleParser;
00170   using std::string;
00171 
00172 
00173   // And add vertex-specific stuff:
00174   vplist.add<double>(kPar_Step_dE,"Step_dE","dE");
00175   vplist.add<double>(kPar_Step_dE_Ion,"Step_dE_Ion","de_ion","ionization");
00176   vplist.add<double>(kPar_Step_qdE,"Step_qDE","quenched_dE","qdE");
00177   vplist.add<double>(kPar_Step_dx,"Step_dx","StepLength","dx");
00178   vplist.add<double>(kPar_Step_dt,"Step_dt","StepDuration","dt");
00179   vplist.add<double>(kPar_Step_dAngle,"Step_dAngle","dAngle");
00180   vplist.add<double>(kPar_capTargetZ,"capTargetZ");
00181   vplist.add<double>(kPar_capTargetA,"capTargetA");
00182   vplist.add<double>(kPar_Step_E_weighted_x,"Ex","E_weighted_x");
00183   vplist.add<double>(kPar_Step_E_weighted_y,"Ey","E_weighted_y"); 
00184   vplist.add<double>(kPar_Step_E_weighted_z,"Ez","E_weighted_z");    
00185   vplist.add<double>(kPar_Step_E_weighted_t,"Et","E_weighted_t");    
00186   vplist.add<double>(kPar_Step_qE_weighted_x,"qEx","qE_weighted_x","quenched_weighted_x");
00187   vplist.add<double>(kPar_Step_qE_weighted_y,"qEy","qE_weighted_y","quenched_weighted_y");    
00188   vplist.add<double>(kPar_Step_qE_weighted_z,"qEz","qE_weighted_z","quenched_weighted_z");    
00189   vplist.add<double>(kPar_Step_qE_weighted_t,"qEt","qE_weighted_t","quenched_weighted_t");                                     
00190 
00191 
00192   vplist.add<double>(kPar_IsStopping,"IsStopping","stop","End");
00193   vplist.add<double>(kPar_IsStarting,"IsStarting","start","begin");
00194   vplist.add<double>(kPar_StepNumber,"StepNumber");                    
00195   vplist.add<double>(kPar_VolumeChanged,"VolumeChanged","NewVolume");
00196   vplist.add<double>(kPar_MaterialChanged,"MaterialChanged","NewMaterial");
00197 
00198 
00199   verbose() << " kPar_MaterialName " << kPar_MaterialName << " kPar_MaterialChanged " << kPar_MaterialChanged
00200           << " kPar_VolumeChanged " << kPar_VolumeChanged << " kPar_Pdg " << kPar_Pdg 
00201           << " kPar_LogicalVolumeName " << kPar_LogicalVolumeName 
00202           << endreq;
00203   
00204   return StatusCode::SUCCESS;
00205 }                                                   

void QueriableStepAction::Reset ( const G4Step *  ,
const G4Track *  ,
const G4StepPoint *   
)

To prepare a Step for querying:.

Definition at line 85 of file QueriableStepAction.cc.

00089 {
00090   mCurrentStep = step;
00091   mCurrentTrack = track;
00092   mCurrentStepPoint = point;
00093   
00094   mDetElement=0;
00095   mDetElementMatch=-1;
00096   mLogicVolume=0;
00097   mPhysVolume=0;
00098   mProcess=SimProcess();
00099   mQuenchedEnergy = -1e9;
00100   mUserTrackInfo = 0;
00101   mDetectorId = 0xFFFFFFF;
00102 
00103   verbose() << " The current track has been reset " << endreq;
00104 }

void QueriableStepAction::queryParam ( int  id,
double &  output 
) const [virtual]

Reimplemented from RuleParser::Queriable.

Reimplemented in HistorianStepAction.

Definition at line 211 of file QueriableStepAction.cc.

00212 {
00213 
00214   switch(id) {
00215     case kPar_IsStopping: 
00216       output = (  ( mCurrentTrack->GetTrackStatus() == fStopAndKill)
00217                || ( mCurrentTrack->GetTrackStatus() == fKillTrackAndSecondaries ) );
00218       break;
00219 
00220     case kPar_IsStarting: 
00221       output = (mCurrentTrack->GetCurrentStepNumber() == 1);
00222       break;
00223 
00224     case kPar_StepNumber:
00225       output = mCurrentTrack->GetCurrentStepNumber();
00226       break;
00227  
00228     case kPar_MaterialChanged:
00229       output = (mCurrentStep->GetPostStepPoint()->GetMaterial() != mCurrentStep->GetPreStepPoint()->GetMaterial());
00230       break;
00231 
00232     case kPar_VolumeChanged:
00233       output = (mCurrentStep->GetPostStepPoint()->GetStepStatus() == fGeomBoundary);
00234       break;
00235     
00236     case kPar_DetectorElementMatch:
00237       output = getDetectorElementMatch();
00238       break;
00239 
00240     case kPar_ProcessType:
00241       output = getProcess().type();
00242       break;
00243 
00244     case kPar_Pdg:
00245       output = mCurrentTrack->GetDefinition()->GetPDGEncoding();
00246       break;
00247 
00248     case kPar_Charge:
00249       output = mCurrentTrack->GetDefinition()->GetPDGCharge();
00250       break;
00251   
00252     case kPar_TrackId:
00253       output = mCurrentStep->GetTrack()->GetTrackID();
00254       break;
00255       
00256     // wangzhe
00257     // Help me track things.
00258     case kPar_CreatorPdg: {
00259       G4HistoryUserTrackInfo* userinfo = dynamic_cast<G4HistoryUserTrackInfo*>
00260         ( mCurrentStep->GetTrack()->GetUserInformation() );
00261       if(userinfo) 
00262         output = userinfo->parentPdg();
00263       break;
00264       }
00265       
00266     case kPar_AncestorPdg: {
00267       G4HistoryUserTrackInfo* userinfo = dynamic_cast<G4HistoryUserTrackInfo*>
00268         ( mCurrentStep->GetTrack()->GetUserInformation() );
00269       if(userinfo)
00270         output = userinfo->track().track()->particle(); // This will bring me to ancestor track
00271       break;
00272     }
00273     // wz
00274       
00275     case kPar_Step_dE:
00276       output = mCurrentStep->GetTotalEnergyDeposit();
00277       break;
00278     case kPar_Step_dE_Ion:
00279       output = mCurrentStep->GetTotalEnergyDeposit() - mCurrentStep->GetNonIonizingEnergyDeposit();
00280       break;
00281     case kPar_Step_qdE:
00282       output = getQuenchedEnergy();
00283       break;
00284     case kPar_Step_dx:
00285       output = mCurrentStep->GetStepLength();
00286       break;
00287     case kPar_Step_dt:
00288       output = mCurrentStep->GetDeltaTime();
00289       break;
00290     case kPar_Step_dAngle:
00291       output = acos(mCurrentStep->GetPostStepPoint()->GetMomentumDirection().dot(
00292                      mCurrentStep->GetPreStepPoint()->GetMomentumDirection())
00293                      ) * CLHEP::radian;
00294       break;
00295     case kPar_capTargetZ:
00296       // Return the neutron capture target Z
00297       output = m_capinfo->getCapture().GetCapTargetZ();
00298       //info()<<"stepAction: Z "<<m_capinfo->getCapture().GetCapTargetZ()
00299        //        <<" A: "<<m_capinfo->getCapture().GetCapTargetA()
00300         //       <<" time: "<<m_capinfo->getCapture().GetCapTime()
00301          //      <<" gammaNum: "<<m_capinfo->getCapture().GetCapGammaN()
00302           //     <<endreq;
00303       break;
00304     case kPar_capTargetA:
00305       // Return the neutron capture target A
00306       output = m_capinfo->getCapture().GetCapTargetA();
00307       //info()<<"stepAction: A"<<m_capinfo->getCapture().GetCapTargetA()
00308        //        <<endreq;               
00309       break;
00310       // For energy-weighted quantities, use the average position or time of the step rather than
00311       // the final position or time of the step.
00312     case kPar_Step_E_weighted_x:
00313       output = mCurrentStep->GetPreStepPoint()->GetPosition().x();
00314       if ( mCurrentStep->GetPostStepPoint() ) output = 0.5*(output + mCurrentStep->GetPostStepPoint()->GetPosition().x());
00315       output = mCurrentStep->GetTotalEnergyDeposit() * output;
00316       break;
00317     case kPar_Step_E_weighted_y:
00318       output = mCurrentStep->GetPreStepPoint()->GetPosition().y();
00319       if ( mCurrentStep->GetPostStepPoint() ) output = 0.5*(output + mCurrentStep->GetPostStepPoint()->GetPosition().y());
00320       output = mCurrentStep->GetTotalEnergyDeposit() * output;
00321       break;
00322     case kPar_Step_E_weighted_z:
00323       output = mCurrentStep->GetPreStepPoint()->GetPosition().z();
00324       if ( mCurrentStep->GetPostStepPoint() ) output = 0.5*(output + mCurrentStep->GetPostStepPoint()->GetPosition().z());
00325       output = mCurrentStep->GetTotalEnergyDeposit() * output;
00326       break;
00327     case kPar_Step_E_weighted_t:
00328       output = mCurrentStep->GetTotalEnergyDeposit() * mCurrentStepPoint->GetGlobalTime();
00329       output = mCurrentStep->GetPreStepPoint()->GetGlobalTime();
00330       if ( mCurrentStep->GetPostStepPoint() ) output = 0.5*(output + mCurrentStep->GetPostStepPoint()->GetGlobalTime());
00331       output = mCurrentStep->GetTotalEnergyDeposit() * output;
00332       break;
00333 
00334     case kPar_Step_qE_weighted_x:
00335       output = mCurrentStep->GetPreStepPoint()->GetPosition().x();
00336       if ( mCurrentStep->GetPostStepPoint() ) output = 0.5*(output + mCurrentStep->GetPostStepPoint()->GetPosition().x());
00337       output = getQuenchedEnergy() * output ; 
00338       break;
00339     case kPar_Step_qE_weighted_y:
00340       output = mCurrentStep->GetPreStepPoint()->GetPosition().y();
00341       if ( mCurrentStep->GetPostStepPoint() ) output = 0.5*(output + mCurrentStep->GetPostStepPoint()->GetPosition().y());
00342       output = getQuenchedEnergy() * output ; 
00343       break;    
00344     case kPar_Step_qE_weighted_z:
00345       output = mCurrentStep->GetPreStepPoint()->GetPosition().z();
00346       if ( mCurrentStep->GetPostStepPoint() ) output = 0.5*(output + mCurrentStep->GetPostStepPoint()->GetPosition().z());
00347       output = getQuenchedEnergy() * output ; 
00348       break;
00349     case kPar_Step_qE_weighted_t:
00350       output = mCurrentStep->GetPreStepPoint()->GetGlobalTime();
00351       if ( mCurrentStep->GetPostStepPoint() ) output = 0.5*(output + mCurrentStep->GetPostStepPoint()->GetGlobalTime());
00352       output = getQuenchedEnergy() * output ; 
00353       break;
00354 
00355     case kPar_t:
00356       output = mCurrentStepPoint->GetGlobalTime();
00357       break;
00358     case kPar_x:
00359       output = mCurrentStepPoint->GetPosition().x();
00360       break;    
00361     case kPar_y:
00362       output = mCurrentStepPoint->GetPosition().y();
00363       break;
00364     case kPar_z:
00365       output = mCurrentStepPoint->GetPosition().z();
00366       break;
00367     case kPar_r:
00368       output = sqrt(mCurrentStepPoint->GetPosition().x()*mCurrentStepPoint->GetPosition().x() +
00369                     mCurrentStepPoint->GetPosition().y()*mCurrentStepPoint->GetPosition().y());
00370       break;
00371 
00372     case kPar_local_x:
00373     case kPar_local_y:
00374     case kPar_local_z:
00375     case kPar_local_r:
00376     {
00377       const G4AffineTransform transformation =
00378         mCurrentStepPoint->GetTouchable()->GetHistory()->GetTopTransform();
00379       G4ThreeVector local = transformation.TransformPoint(mCurrentStepPoint->GetPosition());
00380       
00381       switch(id){
00382         case kPar_local_x: output = local.x(); break;
00383         case kPar_local_y: output = local.y(); break;
00384         case kPar_local_z: output = local.z(); break;
00385         case kPar_local_r: output = sqrt(local.x()*local.x() + local.y()*local.y()); break;        
00386       }
00387     }
00388     break;
00389     
00390     case kPar_NicheId:
00391       output = getDetectorId();
00392       break;
00393 
00394     case kPar_DetectorId:
00395       output = getDetectorId() & 0xFFFF0000;
00396       break;
00397     case kPar_SiteId:
00398       output = getDetectorId() & 0xFF000000;
00399       break;
00400     case kPar_AD:
00401       output = (getDetectorId() & 0x00FF0000) >> 16;
00402       break;
00403     case kPar_Site:
00404       output = (getDetectorId() & 0xFF000000) >> 24;
00405       break;
00406 
00407     case kPar_momentum:
00408        output = mCurrentStepPoint->GetMomentum().mag();
00409        break;
00410     case kPar_TotEnergy:
00411       output = mCurrentStepPoint->GetTotalEnergy();
00412       break;
00413     case kPar_KineticEnergy:
00414       output = mCurrentStepPoint->GetKineticEnergy();
00415       break;
00416     case kPar_mass:
00417       output = mCurrentStep->GetTrack()->GetDynamicParticle()->GetMass();
00418       break;
00419     case kPar_vx:
00420       output = mCurrentStepPoint->GetMomentumDirection().x();
00421       break;
00422     case kPar_vy:
00423       output = mCurrentStepPoint->GetMomentumDirection().y();
00424       break;
00425     case kPar_vz:
00426       output = mCurrentStepPoint->GetMomentumDirection().z();
00427       break;
00428 
00429     case kPar_local_vx:
00430     case kPar_local_vy:
00431     case kPar_local_vz:
00432     {
00433       const G4AffineTransform transformationV =
00434         mCurrentStepPoint->GetTouchable()->GetHistory()->GetTopTransform();
00435       G4ThreeVector localV = transformationV.TransformAxis(mCurrentStepPoint->GetMomentumDirection());
00436       
00437       switch(id){
00438         case kPar_local_vx: output = localV.x(); break;
00439         case kPar_local_vy: output = localV.y(); break;
00440         case kPar_local_vz: output = localV.z(); break;
00441       }
00442     }
00443     break;
00444         
00445     default:
00446       err() << "Unknown real parameter " << id << endreq;
00447       output = 0;
00448   }
00449   verbose() << " id " << id << " output " << output << endreq;
00450 
00451 }

void QueriableStepAction::queryParam ( int  id,
std::string &  output 
) const [virtual]

Reimplemented from RuleParser::Queriable.

Reimplemented in HistorianStepAction.

Definition at line 453 of file QueriableStepAction.cc.

00454 {
00455   const ILVolume* volume = 0;
00456   const IDetectorElement* ide = 0;
00457 
00458   switch(id) {
00459   case kPar_CreatorProcessName:
00460     if(mCurrentTrack->GetParentID()==0) // This is a primary.
00461         mProcess = SimProcess(SimProcess::kPrimaryVertex,"");
00462     else if(mCurrentTrack->GetCreatorProcess())
00463         mProcess = SimProcess(SimProcess::kParticleStart,mCurrentTrack->GetCreatorProcess()->GetProcessName());
00464     else
00465         mProcess = SimProcess(SimProcess::kParticleStart,""); 
00466     output = mProcess.name();
00467     verbose()<<" id " << id << " creator process name "<<output<<endreq;
00468     return;
00469     
00470   case kPar_ProcessName:
00471     switch(mCurrentStep->GetPostStepPoint()->GetStepStatus()) {
00472         case fWorldBoundary:   mProcess = SimProcess(SimProcess::kWorldBoundary,""); break;
00473         case fGeomBoundary:    mProcess = SimProcess(SimProcess::kGeomBoundary,""); break;
00474         default:
00475         SimProcessFromG4Process(mCurrentStep->GetPostStepPoint()->GetProcessDefinedStep(),mProcess);
00476     }
00477     output = mProcess.name();
00478     verbose()<<" id " << id << " process name "<<output<<endreq;
00479     return;
00480 
00481   case kPar_DetectorElementName:
00482     ide = getDetectorElement();
00483     if(ide)  output = ide->name();
00484     else output = "";
00485     verbose() << " id " << id << " detector element output " << output << endreq;
00486     return;
00487 
00488   case kPar_LogicalVolumeName:
00489     volume = getLogicalVolume();
00490     if(volume)  output = volume->name();
00491     else output = "";
00492     verbose() << " id " << id << " logical volume name output " << output << endreq;
00493     return;
00494     
00495   case kPar_MaterialName:
00496     volume = getLogicalVolume();
00497     if(volume)output = volume->materialName();
00498     else output ="";
00499     verbose() << " id " << id << " material name output " << output << endreq;
00500     return;
00501     
00502   case kPar_ParticleName:
00503     output = mCurrentStep->GetTrack()->GetDefinition()->GetParticleName();
00504     verbose() << " id " << id << " particle name output " << output << endreq;
00505     return;
00506     
00507   default:
00508     err() << "Unknown string parameter " << id << endreq;
00509     output = "";
00510   }
00511 }

const IDetectorElement * QueriableStepAction::getDetectorElement (  )  const

Definition at line 518 of file QueriableStepAction.cc.

00519 {
00520   if(!mDetElement) {
00521     // wangzhe:
00522     // (GetPhysicalVolume() == 0) at the boundary of the world.
00523     // (MotherLogical pointer == 0) means that current step point is
00524     // in the outmost volume, "Universe". 
00525     // Currently no touchable history info is available here, so neglect
00526     // any query in this volume.
00527     if(mCurrentStep->GetPreStepPoint()->GetPhysicalVolume() == 0) {
00528       return 0;
00529     }
00530     if(mCurrentStep->GetPreStepPoint()->GetPhysicalVolume()->GetMotherLogical() == 0) {
00531       return 0;
00532     }
00533     // wz
00534     G4VTouchable* touch = mCurrentStep->GetPreStepPoint()->GetTouchableHandle()();
00535     G4TouchableHistory* hist = dynamic_cast<G4TouchableHistory*>(touch);
00536     assert(hist);
00537 
00538     if (!hist->GetHistoryDepth()) {
00539         err() << "getDetectorElement(): given empty touchable history" << endreq;
00540         return 0;
00541     }
00542 
00543     StatusCode sc = mTouchToDetElem->GetBestDetectorElement(hist,
00544                                                             m_DetectorElementSearchPath,
00545                                                             mDetElement,
00546                                                             mDetElementMatch);
00547     if (sc.isFailure()) {
00548         err() << "Failed to get best detector element" << endreq;
00549         return 0;
00550     }
00551   }
00552   return mDetElement;  
00553 }

int QueriableStepAction::getDetectorElementMatch (  )  const

Definition at line 555 of file QueriableStepAction.cc.

00556 {
00557   getDetectorElement();
00558   return mDetElementMatch;
00559 }

const ILVolume * QueriableStepAction::getLogicalVolume (  )  const

Definition at line 561 of file QueriableStepAction.cc.

00562 {
00563   if(!mLogicVolume) {
00564     const IPVolume* pvol = getPhysicalVolume();
00565     if(pvol) mLogicVolume = pvol->lvolume();
00566   }
00567   return mLogicVolume; 
00568 }

const IPVolume * QueriableStepAction::getPhysicalVolume (  )  const

Definition at line 570 of file QueriableStepAction.cc.

00571 {
00572   if(!mPhysVolume) {
00573      mTouchToDetElem->G4VolumeToDetDesc(mCurrentStep->GetPreStepPoint()->GetPhysicalVolume(),
00574                                         mPhysVolume
00575                                         );
00576    }
00577    return mPhysVolume;  
00578 }

const SimProcess & QueriableStepAction::getProcess (  )  const

Definition at line 580 of file QueriableStepAction.cc.

00581 {
00582   if(!mProcess.isValid()){
00583     if(mCurrentStepPoint == mCurrentStep->GetPreStepPoint()) {
00584       if(mCurrentTrack->GetParentID()==0) // This is a primary.
00585          mProcess = SimProcess(SimProcess::kPrimaryVertex,"");
00586       else if(mCurrentTrack->GetCreatorProcess())
00587         mProcess = SimProcess(SimProcess::kParticleStart,mCurrentTrack->GetCreatorProcess()->GetProcessName());
00588       else
00589         mProcess = SimProcess(SimProcess::kParticleStart,"");
00590     } else {
00591       switch(mCurrentStep->GetPostStepPoint()->GetStepStatus()) {
00592         case fWorldBoundary:   mProcess = SimProcess(SimProcess::kWorldBoundary,""); break;
00593         case fGeomBoundary:    mProcess = SimProcess(SimProcess::kGeomBoundary,""); break;
00594         default:
00595         SimProcessFromG4Process(mCurrentStepPoint->GetProcessDefinedStep(),mProcess);
00596       }
00597     }
00598   }
00599   return mProcess;
00600 }

double QueriableStepAction::getQuenchedEnergy (  )  const

Definition at line 602 of file QueriableStepAction.cc.

00603 {
00604   if(mQuenchedEnergy>=0) return mQuenchedEnergy;
00605   G4Track *aTrack = mCurrentStep->GetTrack();
00606   G4ParticleDefinition* aParticle = aTrack->GetDefinition();
00607   G4String particleName = aParticle->GetParticleName();
00608   //info()<<"particle name "<<particleName<<endreq;
00609 
00610   double dE = mCurrentStep->GetTotalEnergyDeposit();
00611   double dx = mCurrentStep->GetStepLength();
00612 
00613   // Find quenched energy deposit.
00614   mQuenchedEnergy = 0;
00615   if(dE > 0) {
00616     if(aParticle == G4Gamma::Gamma()) // It is a gamma
00617     {
00618       G4LossTableManager* manager = G4LossTableManager::Instance();
00619       dx = manager->GetRange(G4Electron::Electron(), dE, aTrack->GetMaterialCutsCouple());
00620       //info()<<"dE_dx = "<<dE/dx/(MeV/mm)<<"MeV/mm"<<endreq;
00621     } 
00622     G4Material* aMaterial = mCurrentStep->GetPreStepPoint()->GetMaterial();
00623     G4MaterialPropertiesTable* aMaterialPropertiesTable =
00624         aMaterial->GetMaterialPropertiesTable();
00625     if (aMaterialPropertiesTable) {
00626 
00627       // There are some properties. Is there a scintillator property?
00628       const G4MaterialPropertyVector* Fast_Intensity = 
00629           aMaterialPropertiesTable->GetProperty("FASTCOMPONENT"); 
00630       const G4MaterialPropertyVector* Slow_Intensity =
00631           aMaterialPropertiesTable->GetProperty("SLOWCOMPONENT");
00632   
00633       if (Fast_Intensity || Slow_Intensity ) {
00634         // It's a scintillator.
00635         double delta = dE/dx/aMaterial->GetDensity(); 
00636         //double birk1 = 0.0125*g/cm2/MeV;
00637         double birk1 = m_BirksConstant1; 
00638         if(mCurrentTrack->GetDefinition()->GetPDGCharge()>1.1)//for particle charge greater than 1.
00639            birk1 = 0.57*birk1;
00640         //double birk2 = (0.0031*g/MeV/cm2)*(0.0031*g/MeV/cm2);
00641         double birk2 = m_BirksConstant2;
00642         mQuenchedEnergy= dE /(1+birk1*delta+birk2*delta*delta);
00643       }
00644     }
00645   }
00646   return mQuenchedEnergy;  
00647 }

const G4HistoryUserTrackInfo * QueriableStepAction::getUserTrackInfo (  )  const

Definition at line 649 of file QueriableStepAction.cc.

00650 {
00651   if(!mUserTrackInfo) {
00652     mUserTrackInfo = dynamic_cast<G4HistoryUserTrackInfo*>(mCurrentTrack->GetUserInformation());
00653   }
00654   return mUserTrackInfo;  
00655 }

unsigned int QueriableStepAction::getDetectorId (  )  const

Definition at line 657 of file QueriableStepAction.cc.

00658 {
00659   if(mDetectorId==0xFFFFFFF) {
00660     const IDetectorElement* de = getDetectorElement();
00661     mDetectorId = getDetectorId(de);
00662   }
00663   return mDetectorId;
00664 }

unsigned int QueriableStepAction::getDetectorId ( const IDetectorElement  )  const

Definition at line 666 of file QueriableStepAction.cc.

00667 {
00668   DetectorIdCache_t::iterator it = mDetectorIdCache.find(de);
00669   if(it!=mDetectorIdCache.end()) {
00670     return it->second;
00671   }
00672 
00673   const ParamValidDataObject* params = de->params();
00674   
00675   // Check each type of user param that the user could have provided:
00676   for(unsigned int ip = 0; ip<m_IdParameterNames.size(); ip++) {
00677     if (params->exists(m_IdParameterNames[ip])) {
00678       if (unsigned int id = (unsigned int)(params->param<int>(m_IdParameterNames[ip]))) {
00679         // Got it!
00680         mDetectorIdCache[de] = id;  // cache it for next time
00681         //info() << "Found id for " << getDetectorElement()->name() << " --> id " << std::hex << mDetectorId << std::dec << endreq;
00682         return id;
00683       }
00684     }
00685   }
00686   
00687   // Ok, we didnt' find it.
00688   // So, move up the support tree recursively.
00689 
00690   // --this does't work because geo->detElem() is private
00691   // const IGeometryInfo* igeo = de->geometry();
00692   //   ILVolume::ReplicaPath dummy;
00693   //   IGeometryInfo* nextGeo = 0;
00694   //   igeo->location(nextGeo, dummy); 
00695   //   if(nextGeo==0) return 0x0; // We failed to find any kind of ID.
00696   // const GeometryInfoPlus* geoplus = dynamic_cast<GeometryInfoPlus*>(nextGeo);
00697   //   assert(geoplus); // What's up with this?
00698   //   return getDetectorId(geoplus->detElem());
00699 
00700   // -- this works if the child elements are all set correctly in the XML.
00701   const IDetectorElement* nextElem = de->parentIDetectorElement();
00702   if(nextElem==0) {
00703     const IDetectorElement* ide = getDetectorElement();
00704     std::string DeName;
00705     if(ide) DeName = ide->name();
00706     else DeName = "";
00707     warning() << "Found no next-element for " << DeName << " --> id " << std::hex << mDetectorId << std::dec << endreq;
00708     mDetectorIdCache[de] = 0;
00709     return 0;
00710   }
00711   unsigned int id = getDetectorId(nextElem);
00712   mDetectorIdCache[de] = id;
00713   return id;
00714 }

QueriableStepAction& QueriableStepAction::operator= ( const QueriableStepAction  )  [private]

no =


Member Data Documentation

std::vector<std::string> QueriableStepAction::m_DetectorElementSearchPath [protected]

Definition at line 68 of file QueriableStepAction.h.

std::string QueriableStepAction::m_TouchableToDetelem_name [protected]

Definition at line 69 of file QueriableStepAction.h.

std::vector<std::string> QueriableStepAction::m_IdParameterNames [protected]

Definition at line 70 of file QueriableStepAction.h.

const G4Step* QueriableStepAction::mCurrentStep [protected]

Definition at line 73 of file QueriableStepAction.h.

const G4Track* QueriableStepAction::mCurrentTrack [protected]

Definition at line 74 of file QueriableStepAction.h.

const G4StepPoint* QueriableStepAction::mCurrentStepPoint [protected]

Definition at line 75 of file QueriableStepAction.h.

ITouchableToDetectorElement* QueriableStepAction::mTouchToDetElem [protected]

Definition at line 76 of file QueriableStepAction.h.

const IDetectorElement* QueriableStepAction::mDetElement [mutable, protected]

Definition at line 80 of file QueriableStepAction.h.

int QueriableStepAction::mDetElementMatch [mutable, protected]

Definition at line 81 of file QueriableStepAction.h.

const ILVolume* QueriableStepAction::mLogicVolume [mutable, protected]

Definition at line 82 of file QueriableStepAction.h.

const IPVolume* QueriableStepAction::mPhysVolume [mutable, protected]

Definition at line 83 of file QueriableStepAction.h.

DayaBay::SimProcess QueriableStepAction::mProcess [mutable, protected]

Definition at line 84 of file QueriableStepAction.h.

double QueriableStepAction::mQuenchedEnergy [mutable, protected]

Definition at line 85 of file QueriableStepAction.h.

G4HistoryUserTrackInfo* QueriableStepAction::mUserTrackInfo [mutable, protected]

Definition at line 86 of file QueriableStepAction.h.

unsigned int QueriableStepAction::mDetectorId [mutable, protected]

Definition at line 87 of file QueriableStepAction.h.

DetectorIdCache_t QueriableStepAction::mDetectorIdCache [mutable, protected]

Definition at line 89 of file QueriableStepAction.h.

INeutronCaptureInfo* QueriableStepAction::m_capinfo [private]

Definition at line 174 of file QueriableStepAction.h.

double QueriableStepAction::m_BirksConstant1 [private]

Definition at line 177 of file QueriableStepAction.h.

double QueriableStepAction::m_BirksConstant2 [private]

Definition at line 178 of file QueriableStepAction.h.


The documentation for this class was generated from the following files:
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Mon Apr 11 20:54:55 2011 for Historian by doxygen 1.4.7