Import Geant4 10.7.0 source tree
This commit is contained in:
@@ -0,0 +1,137 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * License and Disclaimer *
|
||||
// * *
|
||||
// * The Geant4 software is copyright of the Copyright Holders of *
|
||||
// * the Geant4 Collaboration. It is provided under the terms and *
|
||||
// * conditions of the Geant4 Software License, included in the file *
|
||||
// * LICENSE and available at http://cern.ch/geant4/license . These *
|
||||
// * include a list of copyright holders. *
|
||||
// * *
|
||||
// * Neither the authors of this software system, nor their employing *
|
||||
// * institutes,nor the agencies providing financial support for this *
|
||||
// * work make any representation or warranty, express or implied, *
|
||||
// * regarding this software system or assume any liability for its *
|
||||
// * use. Please see the license in the file LICENSE and URL above *
|
||||
// * for the full disclaimer and the limitation of liability. *
|
||||
// * *
|
||||
// * This code implementation is the result of the scientific and *
|
||||
// * technical work of the GEANT4 collaboration. *
|
||||
// * By using, copying, modifying or distributing the software (or *
|
||||
// * any work based on the software) you agree to acknowledge its *
|
||||
// * use in resulting scientific publications, and indicate your *
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
|
||||
#ifndef SIPMHIT_HHinline
|
||||
#define SIPMHIT_HHinline
|
||||
|
||||
#include "G4THitsCollection.hh"
|
||||
#include "G4VHit.hh"
|
||||
#include "G4Types.hh"
|
||||
#include "G4String.hh"
|
||||
|
||||
#include <vector>
|
||||
|
||||
/**
|
||||
* @brief SiPM hit
|
||||
*
|
||||
* Stores information of energy deposited in the SiPM.
|
||||
*
|
||||
* Hits can be digitised, to take into account the time window for the deposits
|
||||
* as well as to set the time information based on the energy threshold.
|
||||
* By default no time window is used (all energy deposits are counted), as well
|
||||
* as no energy threshold is used (time of the first energy deposit, however
|
||||
* small, is counted as hit time).
|
||||
*
|
||||
*/
|
||||
|
||||
class SiPMHit : public G4VHit {
|
||||
public:
|
||||
/// Constructor
|
||||
/// @param[in] aName Name of the pixel volume
|
||||
/// @param[in] aCopyNoSensor ID of the sensor
|
||||
/// @param[in] aCopyNoCell ID of the cell
|
||||
SiPMHit(G4String aName, G4int aCopyNoSensor, G4int aCopyNoCell);
|
||||
~SiPMHit(){};
|
||||
/// Get hit ID calculated as 1000 * sensorID + cellID
|
||||
G4int ID() { return 1000 * fCopyNumSensor + fCopyNumCell; }
|
||||
/// Add non-zero energy deposit to vector of deposits
|
||||
/// @param[in] aEnergy Deposited energy
|
||||
/// @param[in] aTime Time of deposit
|
||||
inline void AddEdep(const G4double aEnergy, const G4double aTime) {
|
||||
if (aEnergy > 0)
|
||||
fEdep.push_back(std::make_pair(aEnergy, aTime));
|
||||
}
|
||||
/// Add non-zero non-ionizing energy deposit to vector of deposits
|
||||
/// @param[in] aEnergy Deposited energy
|
||||
/// @param[in] aTime Time of deposit
|
||||
inline void AddEdepNonIonizing(const G4double aEnergy, const G4double aTime) {
|
||||
if (aEnergy > 0)
|
||||
fEdepNonIonizing.push_back(std::make_pair(aEnergy, aTime));
|
||||
}
|
||||
/// Digitise hit
|
||||
/// Calculate time of hit as global time of energy deposit which added
|
||||
/// to hit energy exceeds the energy threshold. Take into account only
|
||||
/// deposits with global time within the timeWindow.
|
||||
/// @param[in] timeWindow Maximal global time for deposit, caounted from
|
||||
/// the time of the first deposit
|
||||
/// @param[in] toaThreshold Energy threshold, first deposit that adds to
|
||||
/// the hit energy and exceeds the threshold is counted as time of
|
||||
/// arrival.
|
||||
void Digitise(const G4double timeWindow, const G4double toaThreshold);
|
||||
/// Set hit position
|
||||
/// @param[in] x X position
|
||||
/// @param[in] y Y position
|
||||
/// @param[in] z Z position
|
||||
inline void SetPosition(G4double x, G4double y, G4double z) {
|
||||
fPosX = x;
|
||||
fPosY = y;
|
||||
fPosZ = z;
|
||||
}
|
||||
/// Get hit X position
|
||||
inline G4double GetX() const { return fPosX; }
|
||||
/// Get hit Y position
|
||||
inline G4double GetY() const { return fPosY; }
|
||||
/// Get hit Z position
|
||||
inline G4double GetZ() const { return fPosZ; }
|
||||
/// Check if hit is valid
|
||||
inline G4bool isValidHit() const { return fIsValidHit; }
|
||||
/// Get hit energy
|
||||
inline G4double GetEdep() const { return fEdepDigi; }
|
||||
/// Get hit non-ionizing energy
|
||||
inline G4double GetEdepNonIonizing() const { return fEdepNonIonizingDigi; }
|
||||
/// Get time of arrival
|
||||
inline G4double GetTOA() const { return fTimeOfArrival; }
|
||||
|
||||
private:
|
||||
/// Name of the logical volume
|
||||
G4String fVolumeName = "";
|
||||
/// ID of the sensor
|
||||
G4int fCopyNumCell = -1;
|
||||
/// ID of the cell
|
||||
G4int fCopyNumSensor = -1;
|
||||
/// Position along x axis
|
||||
G4double fPosX = -1;
|
||||
/// Position along y axis
|
||||
G4double fPosY = -1;
|
||||
/// Position along z axis
|
||||
G4double fPosZ = -1;
|
||||
/// Vector of energy deposits (and their global time)
|
||||
std::vector<std::pair<G4double, G4double>> fEdep;
|
||||
/// Vector of non-ionizing energy deposits (and their global time)
|
||||
std::vector<std::pair<G4double, G4double>> fEdepNonIonizing;
|
||||
/// Flag indicating if hit is valid (digitised and with non-zero energy)
|
||||
G4bool fIsValidHit = false;
|
||||
/// Energy of the digitised hit
|
||||
G4double fEdepDigi = -1;
|
||||
/// Non-ionizing energy of the digitised hit
|
||||
G4double fEdepNonIonizingDigi = -1;
|
||||
/// Time of arrival of the digitised hit
|
||||
G4double fTimeOfArrival = -1;
|
||||
};
|
||||
|
||||
typedef G4THitsCollection<SiPMHit> SiPMHitCollection;
|
||||
|
||||
#endif /* SIPMHIT_HH */
|
||||
Reference in New Issue
Block a user