Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
G4VGFlashSensitiveDetector.hh
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26//
27// $Id$
28//
29//
30//---------------------------------------------------------------
31// GEANT 4 class header file
32//
33// G4VGFlashSensitiveDetector
34//
35// Class description:
36//
37// Abstract base class of the sensitive detector for use with GFlash.
38// The user's sensitive detector which generates hits must be derived
39// from this class, and G4VSensitiveDetector.
40
41//---------------------------------------------------------------
42#ifndef G4VGFlashSensitiveDetector_h
43#define G4VGFlashSensitiveDetector_h 1
44
45#include "G4Step.hh"
46#include "G4VReadOutGeometry.hh"
47#include "G4TouchableHistory.hh"
48#include "GFlashEnergySpot.hh"
49#include "G4GFlashSpot.hh"
50
52{
53
54 public: // with description
55
58 // Constructors. The user's concrete class must use one of these
59 // constructors by the constructor initializer of the derived class.
60 // The name of the sensitive detector must be the same as for the
61 // corresponding GG4VSensitiveDetector.
62
63 public: // without description
64
66
68 {return this == &right;}
70 {return this != &right;}
71
72 public: // without description
73
74 inline G4bool Hit(G4GFlashSpot * aSpot)
75 {
76 // This is the public method invoked by GFlashHitMaker for generating
77 // hits. The actual user's implementation for generating hits must be
78 // implemented in GenerateHits() virtual protected method.
79
80 G4bool result = true;
82 = dynamic_cast<G4VSensitiveDetector *>(this);
83 if(!This)
84 {
85 G4Exception("G4VGFlashSensitiveDetector::Hit()",
86 "InvalidSetup", FatalException,
87 "Needs also to inherit from G4VSensitiveDetector!");
88 return false;
89 }
90 if(This->isActive())
91 {
92 G4VReadOutGeometry * ROgeometry = 0;
93 G4TouchableHistory* ROhis = 0;
94
95 if(This) ROgeometry = This->GetROgeometry();
96 if(ROgeometry)
97 {
98 // fake pre-step point for touchable from read-out geometry.
99 G4Step fakeStep;
100 G4StepPoint * tmpPoint = fakeStep.GetPreStepPoint();
101 tmpPoint->SetTouchableHandle(aSpot->GetTouchableHandle());
102 tmpPoint->SetPosition(aSpot->GetPosition());
105 result = ROgeometry->CheckROVolume(&fakeStep, ROhis);
106 }
107 if(result) result = ProcessHits(aSpot, ROhis);
108 }
109 else
110 {
111 result = false;
112 }
113 return result;
114 }
115
116 protected: // with description
117
119 G4TouchableHistory*ROhist) = 0;
120 // The user MUST implement this method for generating hit(s) from the
121 // GFlashSpots. Be aware that this method is a protected method and it
122 // will be invoked by Hit() method of the Base class once the Readout
123 // geometry that may be associated to the corresponding
124 // G4VSensitiveDetector was taken into account.
125};
126
127#endif
128
@ FatalException
int G4int
Definition: G4Types.hh:66
bool G4bool
Definition: G4Types.hh:67
const G4Track * GetPrimaryTrack() const
Definition: G4FastTrack.hh:208
G4ThreeVector GetPosition() const
Definition: G4GFlashSpot.hh:64
const G4FastTrack * GetOriginatorTrack() const
Definition: G4GFlashSpot.hh:60
G4TouchableHandle GetTouchableHandle() const
Definition: G4GFlashSpot.hh:62
void SetTouchableHandle(const G4TouchableHandle &apValue)
void SetPosition(const G4ThreeVector &aValue)
void SetMomentumDirection(const G4ThreeVector &aValue)
Definition: G4Step.hh:78
G4StepPoint * GetPreStepPoint() const
const G4ThreeVector & GetMomentumDirection() const
virtual G4bool ProcessHits(G4GFlashSpot *aSpot, G4TouchableHistory *ROhist)=0
G4int operator!=(const G4VGFlashSensitiveDetector &right) const
G4VGFlashSensitiveDetector(const G4VGFlashSensitiveDetector &)
G4int operator==(const G4VGFlashSensitiveDetector &right) const
G4bool Hit(G4GFlashSpot *aSpot)
virtual G4bool CheckROVolume(G4Step *, G4TouchableHistory *&)
G4VReadOutGeometry * GetROgeometry() const
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41