move a method from Segmentation interface to OptCal (work in progress); comment out unused Segmentation methods dealing with G4PreStepPoints; add more doxygen comments
diff -u -r1.5 -r1.6 --- Cartesian3DMagneticFieldMap.hh 2 Jul 2013 21:19:43 -0000 1.5 +++ Cartesian3DMagneticFieldMap.hh 2 Jul 2013 22:57:42 -0000 1.6 @@ -1,4 +1,4 @@
-// $Header: /cvs/lcd/lcdd/include/lcdd/bfield/Cartesian3DMagneticFieldMap.hh,v 1.5 2013/07/02 21:19:43 jeremy Exp $
+// $Header: /cvs/lcd/lcdd/include/lcdd/bfield/Cartesian3DMagneticFieldMap.hh,v 1.6 2013/07/02 22:57:42 jeremy Exp $
#ifndef LCDD_BFIELD_CARTESIAN3DMAGNETICFIELDMAP_HH #define LCDD_BFIELD_CARTESIAN3DMAGNETICFIELDMAP_HH 1
@@ -13,7 +13,38 @@
/** * A 3D B-field map defined as a grid of points with associated B-field values. Values are * interpolated to obtain B-field information at points in between.
- * @note Original PurgMagTabulatedField3D code developed by: S.Larsson and J. Generowicz.
+ * + * The header format of the input data file is as follows: + * + * 1) Blank line + * + * 2) int int int + * + * Number of X, Y, and Z grid points (N_x, N_y, N_z) + * + * 3-8) int String + * + * A description of fields in the lines of the map. In our case it is literally: + * + * 1 X + * 2 Y + * 3 Z + * 4 BX + * 5 BY + * 6 BZ + * + * 9) int String + * + * Header terminator + * + * 10+) float float float float float float + * + * N_x*N_y*N_z+9 + * + * x y z B_x B_y B_z + * + * Original PurgMagTabulatedField3D code developed by: S.Larsson and J. Generowicz. + *
* @author Norman Graf */ class Cartesian3DMagneticFieldMap: public G4MagneticField
diff -u -r1.3 -r1.4 --- Dipole.hh 2 Jul 2013 21:19:43 -0000 1.3 +++ Dipole.hh 2 Jul 2013 22:57:42 -0000 1.4 @@ -1,4 +1,4 @@
-// $Header: /cvs/lcd/lcdd/include/lcdd/bfield/Dipole.hh,v 1.3 2013/07/02 21:19:43 jeremy Exp $
+// $Header: /cvs/lcd/lcdd/include/lcdd/bfield/Dipole.hh,v 1.4 2013/07/02 22:57:42 jeremy Exp $
#ifndef LCDD_BFIELD_DIPOLE_HH #define LCDD_BFIELD_DIPOLE_HH 1
@@ -10,7 +10,8 @@
#include <vector> /**
- * An implementation of a simple parameterized dipole as a G4MagneticField.
+ * The Geant4 implementation of parameterized dipole field that has one or more numerical cofficients. + * @todo This class's algorithm for computing B-field components from coefficients needs to be documented.
*/ class Dipole: public G4MagneticField {
@@ -33,30 +34,85 @@
public:
+ /** + * Compute the field value at a point. + * @param[in] Point The global position. + * @param[in] Bfield The computed B-field data. + */
void GetFieldValue(const double Point[3], double *Bfield) const;
+ /** + * Set the max Z. + * @param[in] The max Z. + */
void setZMax(double zmax);
+ /** + * Get the max Z. + * @return The max Z. + */
double getZMax();
+ /** + * Set the max R. + * @param[in] rmax The max R. + */
void setRMax(double rmax);
+ /** + * Get the max R. + * @return The max R. + */
double getRMax();
+ /** + * Set the Z min. + * @param[in] zmin The min Z. + */
void setZMin(double zmin);
+ /** + * Get the Z min. + * @return The Z min. + */
double getZMin();
+ /** + * Add a dipole coefficient. + * @param[in] coeff The numerical coefficient. + */
void addCoeff(double coeff);
+ /** + * Get the list of coefficients. + * @return The list of dipole coefficients. + */
const std::vector<double>& getCoeffs();
+ /** + * Set the field unit in CLHEP system of units. + * Default is Tesla. + * @param[in] unit The field unit. + */
void setFieldUnit(double unit);
+ /** + * Get the field unit. + * @return The field unit. + */
double getFieldUnit();
+ /** + * Set the length unit in CLHEP system of units. + * Default is mm. + * @param[in] unit The length unit. + */
void setLengthUnit(double unit);
+ /** + * Get the length unit. + * @return The length unit. + */
double getLengthUnit(); private:
diff -u -r1.4 -r1.5 --- CalorimeterHitProcessor.hh 2 Jul 2013 01:46:54 -0000 1.4 +++ CalorimeterHitProcessor.hh 2 Jul 2013 22:57:42 -0000 1.5 @@ -1,4 +1,4 @@
-// $Header: /cvs/lcd/lcdd/include/lcdd/detectors/CalorimeterHitProcessor.hh,v 1.4 2013/07/02 01:46:54 jeremy Exp $
+// $Header: /cvs/lcd/lcdd/include/lcdd/detectors/CalorimeterHitProcessor.hh,v 1.5 2013/07/02 22:57:42 jeremy Exp $
#ifndef LCDD_DETECTORS_CALORIMETERHITPROCESSOR_HH #define LCDD_DETECTORS_CALORIMETERHITPROCESSOR_HH 1
@@ -17,11 +17,25 @@
{ public:
- CalorimeterHitProcessor(CellReadout*);
+ + /** + * Class constructor. + * @param[in] ro The CellReadout used by the processor. + */ + CalorimeterHitProcessor(CellReadout* ro); + + /** + * Class destructor. + */
virtual ~CalorimeterHitProcessor(); public:
- bool processHits(G4Step*);
+ + /** + * Process the step to make hits. + * @param[in] The G4Step object of the energy deposition. + */ + bool processHits(G4Step* aStep);
private: CellReadout* m_readout;
diff -u -r1.2 -r1.3 --- CalorimeterSD.hh 2 Jul 2013 01:46:54 -0000 1.2 +++ CalorimeterSD.hh 2 Jul 2013 22:57:42 -0000 1.3 @@ -1,4 +1,4 @@
-// $Header: /cvs/lcd/lcdd/include/lcdd/detectors/CalorimeterSD.hh,v 1.2 2013/07/02 01:46:54 jeremy Exp $
+// $Header: /cvs/lcd/lcdd/include/lcdd/detectors/CalorimeterSD.hh,v 1.3 2013/07/02 22:57:42 jeremy Exp $
#ifndef LCDD_DETECTORS_CALORIMETERSD_HH #define LCDD_DETECTORS_CALORIMETERSD_HH 1
@@ -136,7 +136,13 @@
CalorimeterHitList getCalorimeterHitList(G4int nHC); protected:
- virtual G4bool ProcessHits(G4Step*, G4TouchableHistory*);
+ + /** + * Process step to make hits. + * @param[in] step The G4Step of the energy deposition. + * @param[in] touchable The touchable handle to the geometry. + */ + virtual G4bool ProcessHits(G4Step* step, G4TouchableHistory* touchable);
protected: Segmentation* m_segmentation;
diff -u -r1.3 -r1.4 --- CellReadout2D.hh 1 Jul 2013 22:10:34 -0000 1.3 +++ CellReadout2D.hh 2 Jul 2013 22:57:42 -0000 1.4 @@ -1,4 +1,4 @@
-// $Header: /cvs/lcd/lcdd/include/lcdd/detectors/CellReadout2D.hh,v 1.3 2013/07/01 22:10:34 jeremy Exp $
+// $Header: /cvs/lcd/lcdd/include/lcdd/detectors/CellReadout2D.hh,v 1.4 2013/07/02 22:57:42 jeremy Exp $
#ifndef LCDD_DETECTORS_CELLREADOUT2D_HH #define LCDD_DETECTORS_CELLREADOUT2D_HH 1
@@ -37,18 +37,21 @@
/** * Get the position of the cell.
+ * @param[in] id The CellId.
*/
- Position2D position(CellId);
+ Position2D position(CellId id);
/** * Compute cell ID from local position.
+ * @param[in] pos The 2D position.
*/
- CellId cellId(Position2D);
+ CellId cellId(Position2D pos);
/** * Create a list of neighbor cells from a cell ID.
+ * @param[in] id The CellId.
*/
- Neighbors neighbors(CellId);
+ Neighbors neighbors(CellId id);
/** * ----------------------------------------------------------
@@ -56,47 +59,62 @@
/** * Get the X cell size.
+ * @return The cell size X.
*/ double getCellSizeX(); /** * Get the Y cell size.
+ * @return The cell size Y.
*/ double getCellSizeY(); /** * Get the X index from a position.
+ * @param[in] x The X coordinate. + * @return The X bin value.
*/ int getXIndex(double x); /** * Get the Y index from a position.
+ * @param[in] y The Y coordinate. + * @return The Y bin value.
*/ int getYIndex(double y); /* * Get the X position from a cell index.
+ * @param[in] ix The X index. + * @return The X coordinate.
*/ double getCellPositionX(int ix); /** * Get the Y position from a Y bin value.
+ * @param[in] iy The Y index. + * @return The Y coordinate.
*/ double getCellPositionY(int iy); /**
- * Get a pair of indices representing a cell. - * This method should check that the indices are valid.
+ * Create a pair of indices representing a cell. + * @param[in] x The X cell index. + * @param[in] y The Y cell index.
*/ CellId createCell(int x, int y); /** * Given an index and cell size, compute the corresponding coordinate.
+ * @param[in] u The cell index. + * @param[in] cellSize The size of the cell in the corresponding dimension.
*/ double getCellCoordinate(int u, double cellSize); /** * Given a coordinate and cell size, compute the corresponding cell index.
+ * @param[in] x The coordinate value. + * @param[in] cellSize The size of the cell in the corresponding dimension.
*/ int getCellIndex(double x, double cellSize);
diff -u -r1.3 -r1.4 --- CellReadout2DSegmentation.hh 1 Jul 2013 22:10:34 -0000 1.3 +++ CellReadout2DSegmentation.hh 2 Jul 2013 22:57:42 -0000 1.4 @@ -11,26 +11,55 @@
class G4Step; /**
- * @brief Adapt a CellReadout2D to the LCDD Segmentation interface.
+ * Adapt a CellReadout2D to the LCDD Segmentation interface.
*/ class CellReadout2DSegmentation: public Segmentation { public:
+ /** + * Class constructor. + * @param[in] cellSizeX The cell size X. + * @param[in] cellSizeY The cell size Y. + */
CellReadout2DSegmentation(double cellSizeX, double cellSizeY);
+ /** + * Class destructor. + */
virtual ~CellReadout2DSegmentation();
- G4ThreeVector getGlobalHitPos(const G4Step*); - - void setBins(const G4Step*); -
+ /** + * Get the global cell center position from a step. + * @param[in] The Geant4 step. + * @return The cell's 3D position. + */ + G4ThreeVector getGlobalHitPos(const G4Step* step); + + /** + * Compute the bin values from a Geant4 step. + * @param[in] The G4Step object. + */ + void setBins(const G4Step* step); + + /** + * Set the bin names for this Segmentation. + */
void setBinNames();
- void setup(const G4Step*); - - CellReadout2D::Position2D localToReadoutCoordinates(G4ThreeVector&);
+ /** + * Setup the Segmentation from the G4Step. + * @param[in] The G4Step object. + */ + void setup(const G4Step* step); + + /** + * Convert local to readout coordinates. + * @param[in] pos The local position. + * @return The readout coordinates. + */ + CellReadout2D::Position2D localToReadoutCoordinates(G4ThreeVector& pos);
private:
diff -u -r1.3 -r1.4 --- Cerenkov.hh 1 Jul 2013 22:10:34 -0000 1.3 +++ Cerenkov.hh 2 Jul 2013 22:57:42 -0000 1.4 @@ -1,4 +1,4 @@
-// $Header: /cvs/lcd/lcdd/include/lcdd/detectors/Cerenkov.hh,v 1.3 2013/07/01 22:10:34 jeremy Exp $
+// $Header: /cvs/lcd/lcdd/include/lcdd/detectors/Cerenkov.hh,v 1.4 2013/07/02 22:57:42 jeremy Exp $
/* ------------------------------------------------------------------------ |\___/|
@@ -34,10 +34,30 @@
class Cerenkov { public:
+ + /** + * Class constructor. + */
Cerenkov();
+ + /** + * Class destructor. + */
~Cerenkov();
+ + /** + * Initialize the Cerenkov data. + */
void Initialize();
- G4double GetAverageNumberOfPhotons(const G4double, const G4double, const G4String) const;
+ + /** + * Compute average number of photons. + * @param[in] charge The particle PDG charge value. + * @param[in] beta Velocity of the track in unit of c (light velocity). + * @param[in] material The name of the G4Material. + */ + G4double GetAverageNumberOfPhotons(const G4double charge, const G4double beta, const G4String material) const; +
private: std::vector<G4String> CAI; std::vector<G4PhysicsOrderedFreeVector*> CerenkovAngleIntegrals;
diff -u -r1.1 -r1.2 --- GlobalGridXYSegmentation.hh 1 Jul 2013 21:00:41 -0000 1.1 +++ GlobalGridXYSegmentation.hh 2 Jul 2013 22:57:42 -0000 1.2 @@ -1,4 +1,5 @@
-// $Header: /cvs/lcd/lcdd/include/lcdd/detectors/GlobalGridXYSegmentation.hh,v 1.1 2013/07/01 21:00:41 jeremy Exp $
+// $Header: /cvs/lcd/lcdd/include/lcdd/detectors/GlobalGridXYSegmentation.hh,v 1.2 2013/07/02 22:57:42 jeremy Exp $
+
#ifndef LCDD_DETECTORS_GLOBALGRIDXYSEGMENTATION_HH #define LCDD_DETECTORS_GLOBALGRIDXYSEGMENTATION_HH 1
@@ -9,51 +10,106 @@
#include "globals.hh" /**
- * @brief Uniform 3D grid segmentation class. - * @note Version of grid segmentation with binning on global coordinates, not local.
+ * An XY grid Segmentation in global coordinates. + * @note This is a version of grid segmentation with binning on global coordinates.
*/ class GlobalGridXYSegmentation: public Segmentation { public:
+ /** + * Class constructor. + * @param[in] gridSizeX The grid size X. + * @param[in] gridSizeY The grid size Y. + */
GlobalGridXYSegmentation(double gridSizeX, double gridSizeY);
+ /** + * Class destructor. + */
virtual ~GlobalGridXYSegmentation(); public:
- // from par class - virtual G4ThreeVector getGlobalHitPos(const G4Step* aStep); - - // hit position from step position
+ /** + * Compute a global hit position from a G4Step. + * @param[in] The G4Step object. + * @return The cell global position. + */ + G4ThreeVector getGlobalHitPos(const G4Step* aStep); + + /** + * Compute a local cell position from a local step position. + * @param[in] localStepPos The local step position. + * @return The local cell position. + */
G4ThreeVector getLocalHitPos(const G4ThreeVector& localStepPos);
- virtual void setBins(const G4Step* aStep); - - virtual void setBinNames()
+ /** + * Compute the ID bin values from a step. + * @param[in] aStep The G4Step object. + */ + void setBins(const G4Step* aStep); + + /** + * Set the bin names for this Segmentation. + */ + void setBinNames()
{ addBinName("x"); addBinName("y"); }
-protected:
+private:
- // compute signed int bin values with base at local origin
+ /** + * Compute the X bin value from a local coordinate. + * @param[in] localStepPos The local step position. + * @return The X bin value. + */
int computeBinX(const G4ThreeVector& localStepPos);
+ + /** + * Compute the Y bin value from a local coordinate. + * @param[in] localStepPos The local step position. + * @return The Y bin value. + */
int computeBinY(const G4ThreeVector& localStepPos);
+ + /** + * Compute the z bin value from a local coordinate. + * @param[in] localStepPos The local step position. + * @return The Z bin value. + */
int computeBinZ(const G4ThreeVector& localStepPos);
- // individual position dim from bin
+ /** + * Compute the X coordinate from a bin value. + * @param[in] The X bin value. + * @return The X coordinate value. + */
double computeDimX(int bin);
+ + /** + * Compute the Y coordinate from a bin value. + * @param[in] The Y bin value. + * @return The Y coordinate value. + */
double computeDimY(int bin);
+ + /** + * Compute the Z coordinate from a bin value. + * @param[in] The Z bin value. + * @return The Z coordinate value. + */
double computeDimZ(int bin); private:
- double m_gridSizeX; - double m_gridSizeY; - double m_gridSizeZ;
+ double _gridSizeX; + double _gridSizeY; + double _gridSizeZ;
}; #endif
diff -u -r1.1 -r1.2 --- GridXYZSegmentation.hh 1 Jul 2013 21:00:41 -0000 1.1 +++ GridXYZSegmentation.hh 2 Jul 2013 22:57:42 -0000 1.2 @@ -1,4 +1,4 @@
-// $Header: /cvs/lcd/lcdd/include/lcdd/detectors/GridXYZSegmentation.hh,v 1.1 2013/07/01 21:00:41 jeremy Exp $
+// $Header: /cvs/lcd/lcdd/include/lcdd/detectors/GridXYZSegmentation.hh,v 1.2 2013/07/02 22:57:42 jeremy Exp $
#ifndef LCDD_DETECTORS_G4GRIDXYZSEGMENTATION_HH #define LCDD_DETECTORS_G4GRIDXYZSEGMENTATION_HH 1
@@ -9,32 +9,56 @@
#include "globals.hh" /**
- * @brief Uniform 3D grid segmentation class. - * @note This class performs calculations to divide a box-like volume into a uniform, 3D grid with square cells.
+ * A Segmentation that defines a grid in a combination of X, Y or Z coordinates. + * @brief This class performs calculations to divide a box-like volume into a uniform, 3D grid of cells.
*/ class GridXYZSegmentation: public Segmentation { public:
+ /** + * Class constructor. + * @param[in] gridSizeX The grid size in X. + * @param[in] gridSizeY The grid size in Y. + * @param[in] gridSizeZ The grid size in Z. + */
GridXYZSegmentation(double gridSizeX, double gridSizeY, double gridSizeZ);
+ /** + * Class destructor. + */
virtual ~GridXYZSegmentation(); public:
- // from par class - virtual G4ThreeVector getGlobalHitPos(const G4Step* aStep); - - virtual void setBins(const G4Step* aStep); - - // DEPRECATED - virtual G4ThreeVector getGlobalHitPosPreStep(const G4StepPoint* aPreStepPoint);
+ /** + * Compute the global hit position from a step. + * @param[in] aStep The G4Step object. + * @return The global hit position. + */ + G4ThreeVector getGlobalHitPos(const G4Step* aStep); + + /** + * Compute the bin values from a step. + * @param[in] aStep The G4Step object. + */ + void setBins(const G4Step* aStep);
// DEPRECATED
- virtual G4ThreeVector getLocalHitPos(const G4ThreeVector& localStepPos);
+ //G4ThreeVector getGlobalHitPosPreStep(const G4StepPoint* aPreStepPoint);
- virtual void setBinNames()
+ /** + * Compute the local hit position from a local step position. + * @param[in] localStepPos The local step position. + * @return The local hit position. + */ + G4ThreeVector getLocalHitPos(const G4ThreeVector& localStepPos); + + /** + * Set the valid bin names for this Segmentation. + */ + void setBinNames()
{ addBinName("x"); addBinName("y");
@@ -43,21 +67,53 @@
protected:
- // compute signed int bin values with base at local origin
+ /** + * Compute X bin value from a local coordinate. + * @param[in] localStepPos The local step position. + * @return The X bin value. + */
int computeBinX(const G4ThreeVector& localStepPos);
+ + /** + * Compute Y bin value from a local coordinate. + * @param[in] localStepPos The local step position. + * @return The Y bin value. + */
int computeBinY(const G4ThreeVector& localStepPos);
+ + /** + * Compute Z bin value from a local coordinate. + * @param[in] localStepPos The local step position. + * @return The Z bin value. + */
int computeBinZ(const G4ThreeVector& localStepPos);
- // individual position dim from bin
+ /** + * Compute a cell center X coordinate from a bin value. + * @param[in] The bin value. + * @return The corresponding 1D cell coordinate value. + */
double computeDimX(int bin);
+ + /** + * Compute a cell center Y coordinate from a bin value. + * @param[in] The bin value. + * @return The corresponding 1D cell coordinate value. + */
double computeDimY(int bin);
+ + /** + * Compute a cell center Z coordinate from a bin value. + * @param[in] The bin value. + * @return The corresponding 1D cell coordinate value. + */
double computeDimZ(int bin); private:
- double m_gridSizeX; - double m_gridSizeY; - double m_gridSizeZ;
+ double _gridSizeX; + double _gridSizeY; + double _gridSizeZ;
}; #endif
diff -u -r1.3 -r1.4 --- HitComparator.hh 1 Jul 2013 22:10:34 -0000 1.3 +++ HitComparator.hh 2 Jul 2013 22:57:42 -0000 1.4 @@ -1,4 +1,4 @@
-// $Header: /cvs/lcd/lcdd/include/lcdd/detectors/HitComparator.hh,v 1.3 2013/07/01 22:10:34 jeremy Exp $
+// $Header: /cvs/lcd/lcdd/include/lcdd/detectors/HitComparator.hh,v 1.4 2013/07/02 22:57:42 jeremy Exp $
#ifndef LCDD_DETECTORS_HITCOMPARATOR_HH #define LCDD_DETECTORS_HITCOMPARATOR_HH 1
@@ -6,17 +6,28 @@
#include "lcdd/hits/CalorimeterHit.hh" /**
- * @brief Interface for comparing LCDD CalorimeterHit objects.
+ * This is an interface for comparing two LCDD CalorimeterHit objects.
*/ class HitComparator {
+
public:
+ + /** + * Class destructor. + */
virtual ~HitComparator() { } public:
- virtual bool compare(const CalorimeterHit&, const CalorimeterHit&) = 0;
+ + /** + * Compare two hits for equality. The compared parameters depends on the implementation. + * @param[in] hit1 The first hit to compare. + * @param[in] hit2 The second hit to compare. + */ + virtual bool compare(const CalorimeterHit& hit1, const CalorimeterHit& hit2) = 0;
}; #endif
diff -u -r1.1 -r1.2 --- NonprojectiveCylinderSegmentation.hh 1 Jul 2013 21:00:41 -0000 1.1 +++ NonprojectiveCylinderSegmentation.hh 2 Jul 2013 22:57:42 -0000 1.2 @@ -1,4 +1,4 @@
-// $Header: /cvs/lcd/lcdd/include/lcdd/detectors/NonprojectiveCylinderSegmentation.hh,v 1.1 2013/07/01 21:00:41 jeremy Exp $
+// $Header: /cvs/lcd/lcdd/include/lcdd/detectors/NonprojectiveCylinderSegmentation.hh,v 1.2 2013/07/02 22:57:42 jeremy Exp $
#ifndef LCDD_DETECTORS_G4NONPROJECTIVECYLINDERSEGMENTATION #define LCDD_DETECTORS_G4NONPROJECTIVECYLINDERSEGMENTATION 1
@@ -6,36 +6,79 @@
#include "Segmentation.hh" /**
- * @brief Segmentation using a nonprojective cylinder.
+ * A Segmentation class that implements a nonprojective cylinder. + * @todo This class needs much better documentation. Much of the computational code is a black box.
*/ class NonprojectiveCylinderSegmentation: public Segmentation {
+
public:
+ + /** + * Class constructor. + * @param[in] gridSizePhi The grid size in phi (radians). + * @param[in] gridSizeZ The grid size in Z (mm). + */
NonprojectiveCylinderSegmentation(double gridSizePhi, double gridSizeZ);
+ + /** + * Class destructor. + */
virtual ~NonprojectiveCylinderSegmentation(); public:
- virtual G4ThreeVector getGlobalHitPos(const G4Step* aStep); - virtual G4ThreeVector getGlobalHitPos(const G4StepPoint* aPreStepPoint); - virtual void setBins(const G4Step* aStep); - virtual void setBins(const G4StepPoint* aPreStepPoint); - virtual void setBinNames()
+ /** + * Compute the global hit position from a step. + * @param[in] aStep The G4Step object. + * @return The global hit position for the step. + */ + G4ThreeVector getGlobalHitPos(const G4Step* aStep); + + /** + * Compute the global hit position a step point. + * @param[in] aPreStepPoint The G4StepPoint object. + * @return The global hit position for the step point. + */ + G4ThreeVector getGlobalHitPos(const G4StepPoint* aPreStepPoint); + + /** + * Compute bin values from a step. + * @param[in] aStep The G4Step object. + */ + void setBins(const G4Step* aStep); + + /** + * Compute bin values from a step point. + * @param[in] aPreStepStep The G4StepPoint object. + */ + void setBins(const G4StepPoint* aPreStepPoint); + + /** + * Set the valid bin names for this Segmentation. + */ + void setBinNames()
{ addBinName("phi"); addBinName("z"); } G4ThreeVector getLocalHitPos(const G4Step* aStep);
+
G4ThreeVector getLocalHitPos(const G4StepPoint* aPreStepPoint);
- virtual bool isValidSolid(G4VSolid*);
+ + bool isValidSolid(G4VSolid*);
private: double computeDeltaPhi(const G4Step* aStep);
+
double computeDeltaPhi(const G4StepPoint* aPreStepPoint);
+
int computeBinPhi(const G4Step* aStep);
+
int computeBinPhi(const G4StepPoint* aPreStepPoint);
+
int computeBinZ(const G4ThreeVector& localStepPos); private:
diff -u -r1.1 -r1.2 --- OpticalCalorimeterSD.hh 1 Jul 2013 21:00:41 -0000 1.1 +++ OpticalCalorimeterSD.hh 2 Jul 2013 22:57:42 -0000 1.2 @@ -14,23 +14,49 @@
*/ class OpticalCalorimeterSD: public CalorimeterSD {
+
private: Cerenkov* CerenGenerator;
+
public:
+
//enum for the two Hit Collections (cerenkov and edep): enum HCType { eEdep = 0, eCerenkov = 1 };
+ /** + * Class constructor. + */
OpticalCalorimeterSD(G4String sdName, G4String hcName, Segmentation* sdSeg, HitComparator* compare = 0);
+ /** + * Class constructor. + */
OpticalCalorimeterSD(G4String sdName, const std::vector<G4String>& hcNames, Segmentation* sdSeg, HitComparator* compare = 0);
+ /** + * Class destructor. + */
virtual ~OpticalCalorimeterSD(); protected:
- virtual G4bool ProcessHits(G4Step*, G4TouchableHistory*);
+ + /** + * Process step to make one or more hits. + * @param[in] step The G4Step object. + * @param[in] touchable The touchable handle pointing at the current geometric volume. + */ + G4bool ProcessHits(G4Step* step, G4TouchableHistory* touchable); + +private: + + /** + * Compute the global hit position from the position of a G4StepPoint. + * @param[in] aPreStepPoint The G4StepPoint object. + */ + G4ThreeVector getGlobalHitPosPreStep(const G4StepPoint* aPreStepPoint);
}; #endif
diff -u -r1.3 -r1.4 --- PositionComparator.hh 1 Jul 2013 22:10:34 -0000 1.3 +++ PositionComparator.hh 2 Jul 2013 22:57:42 -0000 1.4 @@ -1,4 +1,4 @@
-// $Header: /cvs/lcd/lcdd/include/lcdd/detectors/PositionComparator.hh,v 1.3 2013/07/01 22:10:34 jeremy Exp $
+// $Header: /cvs/lcd/lcdd/include/lcdd/detectors/PositionComparator.hh,v 1.4 2013/07/02 22:57:42 jeremy Exp $
#ifndef LCDD_DETECTORS_POSITIONCOMPARATOR_HH #define LCDD_DETECTORS_POSITIONCOMPARATOR_HH 1
@@ -6,20 +6,30 @@
#include "HitComparator.hh" /**
- * @brief Compare the positions of two LCDD CalorimeterHit objects.
+ * An implementation of HitComparator that compares two CalorimeterHit objects for equality + * by using their positions.
*/ class PositionComparator: public HitComparator { public:
+ /** + * Class destructor. + */
virtual ~PositionComparator() { } public:
- virtual bool compare(const CalorimeterHit& hit1, const CalorimeterHit& hit2)
+ /** + * Compare two hits for equality by position. + * @param[in] hit1 The first hit. + * @param[in] hit2 The second hit. + * @return True if positions are equal; false if not. + */ + bool compare(const CalorimeterHit& hit1, const CalorimeterHit& hit2)
{ // std::cout << "POS --> hit1 " << hit1.getPos() << " == hit2 " << hit2.getPos() << std::endl; // if ( hit1.getPos() == hit2.getPos() ) {
diff -u -r1.1 -r1.2 --- ProjectiveCylinderSegmentation.hh 1 Jul 2013 21:00:41 -0000 1.1 +++ ProjectiveCylinderSegmentation.hh 2 Jul 2013 22:57:42 -0000 1.2 @@ -1,4 +1,4 @@
-// $Header: /cvs/lcd/lcdd/include/lcdd/detectors/ProjectiveCylinderSegmentation.hh,v 1.1 2013/07/01 21:00:41 jeremy Exp $
+// $Header: /cvs/lcd/lcdd/include/lcdd/detectors/ProjectiveCylinderSegmentation.hh,v 1.2 2013/07/02 22:57:42 jeremy Exp $
#ifndef LCDD_DETECTORS_G4PROJECTIVECYLINDERSEGMENTATION_HH #define LCDD_DETECTORS_G4PROJECTIVECYLINDERSEGMENTATION_HH 1
@@ -9,24 +9,61 @@
#include "globals.hh" /**
- * @brief Simulation class for projective cylinder segmentation.
+ * The Geant4 implementation of a projective cylinder Segmentation divided into theta and phi bins.
*/ class ProjectiveCylinderSegmentation: public ProjectiveSegmentation { public:
+ + /** + * Class constructor. + * @param[in] ntheta Number of cells in theta. + * @param[in] nphi Number of cells in phi. + */
ProjectiveCylinderSegmentation(G4int ntheta, G4int nphi);
+ /** + * Class destructor. + */
virtual ~ProjectiveCylinderSegmentation();
- virtual bool isValidSolid(G4VSolid* s);
+ /** + * Check whether a Geant4 solid is valid for this Segmentation. + * @param[in] s The G4VSolid object. + * @return True if input sold is valid for the Segmentation; false if not. + */ + bool isValidSolid(G4VSolid* s);
protected:
- virtual double getRadius(const G4Step* aStep); - virtual double getZ(const G4Step* aStep); - virtual double getRadius(const G4StepPoint* aPreStepPoint); - virtual double getZ(const G4StepPoint* aPreStepPoint);
+ /** + * Get the radial position of the solid pointed to by the step. + * @param[in] aStep The G4Step object. + * @return The radial position of the step's cell. + */ + double getRadius(const G4Step* aStep); + + /** + * Get the Z coordinate of a cell from the step. + * @param[in] aStep The G4Step object. + * @return The Z coordinate of the step's cell. + */ + double getZ(const G4Step* aStep); + + /** + * Get the radial position of the cell pointed to by the step point. + * @param[in] aPreStepPoint The G4StepPoint object. + * @return The radial position of the step point's cell. + */ + double getRadius(const G4StepPoint* aPreStepPoint); + + /** + * Get the Z coordinate of a cell from a step point. + * @param[in] aPreStepPoint The G4PreStepPoint object. + * @return The Z coordinate of the step point's cell. + */ + double getZ(const G4StepPoint* aPreStepPoint);
}; #endif
diff -u -r1.1 -r1.2 --- ProjectiveSegmentation.hh 1 Jul 2013 21:00:41 -0000 1.1 +++ ProjectiveSegmentation.hh 2 Jul 2013 22:57:42 -0000 1.2 @@ -1,4 +1,4 @@
-// $Header: /cvs/lcd/lcdd/include/lcdd/detectors/ProjectiveSegmentation.hh,v 1.1 2013/07/01 21:00:41 jeremy Exp $
+// $Header: /cvs/lcd/lcdd/include/lcdd/detectors/ProjectiveSegmentation.hh,v 1.2 2013/07/02 22:57:42 jeremy Exp $
#ifndef LCDD_DETECTORS_PROJECTIVESEGMENTATION_HH #define LCDD_DETECTORS_PROJECTIVESEGMENTATION_HH 1
@@ -7,14 +7,24 @@
#include "globals.hh" /**
- * @brief Generic projective segmentation class.
+ * The base class for projective type Segmentation classes. + * @todo Should this class be pure virtual or have a protected constructor?
*/ class ProjectiveSegmentation: public Segmentation { public:
+ + /** + * Class constructor. + * @param[in] ntheta The number of cells in theta. + * @param[in] nphi The number of cells in phi. + */
ProjectiveSegmentation(int ntheta, int nphi);
+ /** + * Class destructor. + */
virtual ~ProjectiveSegmentation(); public:
@@ -22,9 +32,16 @@
// virtuals from G4Segmentation; should not be overridden // in subclasses G4ThreeVector getGlobalHitPos(const G4Step* aStep);
- G4ThreeVector getGlobalHitPos(const G4StepPoint* aPreStepPoint);
+ + //G4ThreeVector getGlobalHitPos(const G4StepPoint* aPreStepPoint); +
void setBins(const G4Step* aStep);
- void setBins(const G4StepPoint* aPreStepPoint);
+ + //void setBins(const G4StepPoint* aPreStepPoint); + + /** + * Get the valid bin names for this Segmentation. + */
virtual void setBinNames() { addBinName("theta");
@@ -47,18 +64,18 @@
// dim from step double getThetaDim(const G4Step* aStep); // dim from prestep
- double getThetaDim(const G4StepPoint* aPreStepPoint);
+ //double getThetaDim(const G4StepPoint* aPreStepPoint);
double getPhiDim(const G4Step* aStep); // dim from prestep point:
- double getPhiDim(const G4StepPoint* aPreStepPoint);
+ //double getPhiDim(const G4StepPoint* aPreStepPoint);
// These should be overridden in subclasses // for a specific shape or orientation. virtual double getRadius(const G4Step* aStep); virtual double getZ(const G4Step* aStep);
- virtual double getRadius(const G4StepPoint* aPreStepPoint); - virtual double getZ(const G4StepPoint* aPreStepPoint);
+ //virtual double getRadius(const G4StepPoint* aPreStepPoint); + //virtual double getZ(const G4StepPoint* aPreStepPoint);
private: void computeDivisions();
diff -u -r1.1 -r1.2 --- ProjectiveZPlaneSegmentation.hh 1 Jul 2013 21:00:41 -0000 1.1 +++ ProjectiveZPlaneSegmentation.hh 2 Jul 2013 22:57:42 -0000 1.2 @@ -1,4 +1,4 @@
-// $Header: /cvs/lcd/lcdd/include/lcdd/detectors/ProjectiveZPlaneSegmentation.hh,v 1.1 2013/07/01 21:00:41 jeremy Exp $
+// $Header: /cvs/lcd/lcdd/include/lcdd/detectors/ProjectiveZPlaneSegmentation.hh,v 1.2 2013/07/02 22:57:42 jeremy Exp $
#ifndef LCDD_DETECTORS_PROJECTIVEZPLANESEGMENTATION_HH #define LCDD_DETECTORS_PROJECTIVEZPLANESEGMENTATION_HH 1
@@ -24,8 +24,8 @@
virtual double getRadius(const G4Step* aStep); virtual double getZ(const G4Step* aStep);
- virtual double getRadius(const G4StepPoint* aPreStepPoint); - virtual double getZ(const G4StepPoint* aPreStepPoint);
+ //virtual double getRadius(const G4StepPoint* aPreStepPoint); + //virtual double getZ(const G4StepPoint* aPreStepPoint);
}; #endif
diff -u -r1.2 -r1.3 --- Segmentation.hh 2 Jul 2013 01:46:54 -0000 1.2 +++ Segmentation.hh 2 Jul 2013 22:57:42 -0000 1.3 @@ -1,4 +1,4 @@
-// $Header: /cvs/lcd/lcdd/include/lcdd/detectors/Segmentation.hh,v 1.2 2013/07/02 01:46:54 jeremy Exp $
+// $Header: /cvs/lcd/lcdd/include/lcdd/detectors/Segmentation.hh,v 1.3 2013/07/02 22:57:42 jeremy Exp $
#ifndef LCDD_DETECTORS_SEGMENTATION_HH #define LCDD_DETECTORS_SEGMENTATION_HH 1
@@ -13,7 +13,8 @@
/** * This is the base class for calorimeter Segmentation implementations.
- * @todo Add method setVolume(G4LogicalVolume*) for setting up segmentation with current step volume.
+ * @todo Add method setVolume(G4LogicalVolume*) for setting up segmentation from the current G4Step.
+ * @todo Move code from header to source file.
*/ class Segmentation {
@@ -33,7 +34,14 @@
typedef std::vector<std::string> BinNames; public:
+ + /** + * Class Constructor. + * @param[in] segType The type of Segmentation. + * @param[in] nbins The number of bins defined by this Segmentation. + */
Segmentation(EType segType, int nbins = 2);
+
virtual ~Segmentation(); public:
@@ -41,8 +49,9 @@
/** * Compute the global hit position from a step using this Segmentation. * @param[in] aStep The Geant4 step.
+ * @return The hit's global position.
*/
- virtual G4ThreeVector getGlobalHitPos(const G4Step* aStep);
+ virtual G4ThreeVector getGlobalHitPos(const G4Step* aStep) = 0;
/** * Set the identifier bin values from a step.
@@ -51,62 +60,40 @@
virtual void setBins(const G4Step* aStep) = 0; /**
- * Add the list of valid bin names.
+ * Set the valid bin names for this Segmentation.
* @note This should only be called once. */ virtual void setBinNames() = 0;
- /** - * Compute the bin given a coordinate in one dimension. - * @param[in] localDim The 1D coordinate value. - * @param[in] gridDim The dimension of the readout grid. - * @return The value of the bin at that coordinate. - */ - static int computeBin(double localDim, double gridDim) - { - return int(floor(localDim / gridDim)); - - } - - /** - * Compute the coordinate of a cell center at a given a bin value. - * @param[in] bin The bin value. - * @param[in] incr The grid size. - * @return The coordinate of the cell center. - */ - static double computeDim(const int &bin, const double &incr) - { - return (double(bin) + .5) * incr; - } - - /** - * @deprecated Only used by G4OpticalCalorimeter. - * @todo Move to G4OpticalCalorimeter.
+ /* + * Check whether the solid is valid for this segmentation. + * @return True if solid is valid; false if not.
*/
- virtual G4ThreeVector getGlobalHitPosPreStep(const G4StepPoint* aPreStepPoint);
+ virtual bool isValidSolid(G4VSolid*);
/** * @deprecated Only used by G4OpticalCalorimeter. * @todo Move to G4OpticalCalorimeter.
+ * @warning Dummy method only. Specific Segmentation types must implement.
*/ G4ThreeVector getLocalHitPos(const G4ThreeVector& localStepPos); /**
- * Reset the current bin values to all zeros.
+ * Reset the bins values to all zero.
*/ void resetBins(); /**
- * Get the type of the segmentation. - * @return The segmentation type as an enum.
+ * Get the type of this segmentation. + * @return The Segmentation type as an enum.
*/ EType getType(); /**
- * Get a string for this segmentation type. - * @return The segmentation type as a string.
+ * Get a string for this Segmentation type. + * @return The Segmentation type as a string.
*/
- inline const G4String& getTypeString()
+ const G4String& getTypeString()
{ static G4String typestr; if (m_type == eProjective) {
@@ -126,7 +113,7 @@
* @return The bin value. * @todo Change this method's name to "getBinValue". */
- inline int getBin(int idx)
+ int getBin(int idx)
{ return m_bins.at(idx); }
@@ -136,7 +123,7 @@
* @param[in] idx The bin index. * @return The name of the bin. */
- inline const std::string& getBinName(int idx)
+ const std::string& getBinName(int idx)
{ return m_binNames.at(idx); }
@@ -145,7 +132,7 @@
* Add a bin name to the end of the list. * @param[in] The name of the bin. */
- inline void addBinName(const std::string& binName)
+ void addBinName(const std::string& binName)
{ m_binNames.push_back(binName); }
@@ -188,6 +175,8 @@
printOutBins(os, m_bins); }
+protected: +
/** * Print the bin values to an output stream. * @param[in] os The output stream.
@@ -195,11 +184,27 @@
*/ static void printOutBins(std::ostream& os, const std::vector<int>& bins);
- /* - * Check whether the solid is valid for this segmentation. - * @return True if solid is valid; false if not.
+ /** + * Compute the bin given a coordinate in one dimension. + * @param[in] localDim The 1D coordinate value. + * @param[in] gridDim The dimension of the readout grid. + * @return The value of the bin at that coordinate.
*/
- virtual bool isValidSolid(G4VSolid*);
+ static int computeBin(double localDim, double gridDim) + { + return int(floor(localDim / gridDim)); + } + + /** + * Compute the coordinate of a cell center at a given a bin value. + * @param[in] bin The bin value. + * @param[in] incr The grid size. + * @return The coordinate of the cell center. + */ + static double computeDim(const int &bin, const double &incr) + { + return (double(bin) + .5) * incr; + }
private:
diff -N OpticalCalorimeterSD.cc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ OpticalCalorimeterSD.cc 2 Jul 2013 22:57:43 -0000 1.1 @@ -0,0 +1,134 @@
+// $Header: /cvs/lcd/lcdd/src/lcdd/detectors/OpticalCalorimeterSD.cc,v 1.1 2013/07/02 22:57:43 jeremy Exp $ + +// LCDD +#include "lcdd/detectors/OpticalCalorimeterSD.hh" +#include "lcdd/detectors/ReadoutUtil.hh" +#include "lcdd/detectors/Segmentation.hh" +#include "lcdd/detectors/Cerenkov.hh" + +// Geant4 +#include "G4OpticalPhoton.hh" +#include "G4TransportationManager.hh" +#include "G4VProcess.hh" +#include "G4Poisson.hh" + +using std::vector; + +/** + * Constructor for the case only one Hit Collection is given. + * In this case the only the energy deposited by aborbed Cerenkov + * photons is stored. Probably this will be dropped in the + * near future. + */ +OpticalCalorimeterSD::OpticalCalorimeterSD(G4String sdName, G4String hcName, Segmentation* sdSeg, HitComparator* compare) : + CalorimeterSD(sdName, hcName, sdSeg, compare) +{ + CerenGenerator = 0; +} + +/** + * Constructor for multiple Hit Collections. + * + * The current implementation uses the first Hit Collection for the + * Cerenkov Photons and the second Collection to store the ionization losses. + * If more than 2 collections are given the additional Hit collections will + * be ignored. + */ +OpticalCalorimeterSD::OpticalCalorimeterSD(G4String sdName, const vector<G4String>& hcNames, Segmentation* sdSeg, HitComparator* compare) : + CalorimeterSD(sdName, hcNames, sdSeg, compare) +{ + CerenGenerator = 0; +} + +OpticalCalorimeterSD::~OpticalCalorimeterSD() +{ +} + +G4bool OpticalCalorimeterSD::ProcessHits(G4Step* aStep, G4TouchableHistory* tahis) +{ + if (!CerenGenerator) + CerenGenerator = new Cerenkov(); + G4int NCerenPhotons = 0; + G4Track* theTrack = aStep->GetTrack(); + const G4double charge = theTrack->GetDefinition()->GetPDGCharge(); + G4StepPoint* pPreStepPoint = aStep->GetPreStepPoint(); + G4StepPoint* pPostStepPoint = aStep->GetPostStepPoint(); + G4double beta = 0.5 * (pPreStepPoint->GetBeta() + pPostStepPoint->GetBeta()); + const G4VTouchable* touch = aStep->GetPreStepPoint()->GetTouchable(); + G4String thematerial = touch->GetVolume()->GetLogicalVolume()->GetMaterial()->GetName(); + G4double MeanNumberOfPhotons = CerenGenerator->GetAverageNumberOfPhotons(charge, beta, thematerial); + if (MeanNumberOfPhotons > 0.0) { + G4double step_length = aStep->GetStepLength(); + MeanNumberOfPhotons = MeanNumberOfPhotons * step_length; + NCerenPhotons = (G4int) G4Poisson(MeanNumberOfPhotons); + } else { + NCerenPhotons = 0; + } + + if (NCerenPhotons <= 0) { + return CalorimeterSD::ProcessHits(aStep, tahis); + } else { + SensitiveDetector::ProcessHits(aStep, 0); + G4ThreeVector myPoint = aStep->GetPreStepPoint()->GetPosition(); + G4StepPoint* apreStepPoint = aStep->GetPreStepPoint(); + G4Navigator* theNavigator = G4TransportationManager::GetTransportationManager()->GetNavigatorForTracking(); + G4VPhysicalVolume* myVolume = theNavigator->LocateGlobalPointAndSetup(myPoint); + if (getVerbose() > 2) { + G4cout << "Physical volume = " << myVolume->GetName() << G4endl; + G4cout << "Point of interaction = " << myPoint<< G4endl; + G4cout << "sdname " << GetName() << " hcname " <<collectionName[0]<< G4endl; + } + // total photon energy + // G4double theEdep = aTrack->GetTotalEnergy(); + G4double theEdep = double(NCerenPhotons); + // get global cell pos from seg + G4ThreeVector globalCellPos = getGlobalHitPosPreStep(apreStepPoint); + // reset the seg bins + m_segmentation->resetBins(); + // set the seg bins + m_segmentation->setBins(aStep); + // create id and pack into 64 + Id64bit id64 = makeId(); + // find hit by simple lkp of new hit with above info + CalorimeterHit* thisHit = new CalorimeterHit(theEdep, globalCellPos); + thisHit->setId64bit(id64.getId0(), id64.getId1()); + CalorimeterHit* fndHit = 0; + // hit is not found? + if (!(fndHit = findHit(thisHit, eCerenkov))) { + // add it to lkp map + hits_vector[eCerenkov].push_back(thisHit); + // add to the HC + m_hitsCollections[eCerenkov]->insert(thisHit); + } else { + // found a hit + // don't need to insert thisHit, so delete it + delete thisHit; + thisHit = 0; + // incr total edep of the hit + fndHit->incrEdep(theEdep); + // for setting contrib + thisHit = fndHit; + } + // add McpHitContrib to this hit, setting info from step info + thisHit->addMcpHitContrib(HitContribution(aStep)); + // aTrack->SetTrackStatus(fStopAndKill); // don't step photon any further + return true; + } // end Cerenkov photon treatment +} + +G4ThreeVector OpticalCalorimeterSD::getGlobalHitPosPreStep(const G4StepPoint* aPreStepPoint) +{ + G4ThreeVector globalStepPos = aPreStepPoint->GetPosition(); + + // Figure out local step pos using touchable and global midpoint. + G4ThreeVector localStepPos = ReadoutUtil::transformGlobalToLocal(aPreStepPoint, globalStepPos); + + // Compute local cell pos. + G4ThreeVector localCellPos = this->getSegmentation()->getLocalHitPos(localStepPos); + + // Compute global cell pos. + G4ThreeVector globalCellPos = ReadoutUtil::transformLocalToGlobal(aPreStepPoint, localCellPos); + + return globalCellPos; +} +
diff -u -r1.1 -r1.2 --- GlobalGridXYSegmentation.cc 1 Jul 2013 21:00:45 -0000 1.1 +++ GlobalGridXYSegmentation.cc 2 Jul 2013 22:57:43 -0000 1.2 @@ -1,4 +1,4 @@
-// $Header: /cvs/lcd/lcdd/src/lcdd/detectors/GlobalGridXYSegmentation.cc,v 1.1 2013/07/01 21:00:45 jeremy Exp $
+// $Header: /cvs/lcd/lcdd/src/lcdd/detectors/GlobalGridXYSegmentation.cc,v 1.2 2013/07/02 22:57:43 jeremy Exp $
// LCDD #include "lcdd/detectors/GlobalGridXYSegmentation.hh"
@@ -8,7 +8,7 @@
#include "G4NavigationHistory.hh" GlobalGridXYSegmentation::GlobalGridXYSegmentation(double gridSizeX, double gridSizeY) :
- Segmentation(Segmentation::eNonprojective), m_gridSizeX(gridSizeX), m_gridSizeY(gridSizeY)
+ Segmentation(Segmentation::eNonprojective), _gridSizeX(gridSizeX), _gridSizeY(gridSizeY)
{ setBinNames(); }
@@ -52,20 +52,20 @@
int GlobalGridXYSegmentation::computeBinX(const G4ThreeVector& stepPos) {
- return Segmentation::computeBin(stepPos.x(), m_gridSizeX);
+ return Segmentation::computeBin(stepPos.x(), _gridSizeX);
} int GlobalGridXYSegmentation::computeBinY(const G4ThreeVector& stepPos) {
- return Segmentation::computeBin(stepPos.y(), m_gridSizeY);
+ return Segmentation::computeBin(stepPos.y(), _gridSizeY);
} double GlobalGridXYSegmentation::computeDimX(int bin) {
- return Segmentation::computeDim(bin, m_gridSizeX);
+ return Segmentation::computeDim(bin, _gridSizeX);
} double GlobalGridXYSegmentation::computeDimY(int bin) {
- return Segmentation::computeDim(bin, m_gridSizeY);
+ return Segmentation::computeDim(bin, _gridSizeY);
}
diff -u -r1.1 -r1.2 --- GridXYZSegmentation.cc 1 Jul 2013 21:00:45 -0000 1.1 +++ GridXYZSegmentation.cc 2 Jul 2013 22:57:43 -0000 1.2 @@ -1,4 +1,4 @@
-// $Header: /cvs/lcd/lcdd/src/lcdd/detectors/GridXYZSegmentation.cc,v 1.1 2013/07/01 21:00:45 jeremy Exp $
+// $Header: /cvs/lcd/lcdd/src/lcdd/detectors/GridXYZSegmentation.cc,v 1.2 2013/07/02 22:57:43 jeremy Exp $
// LCDD #include "lcdd/detectors/GridXYZSegmentation.hh"
@@ -8,7 +8,7 @@
#include "G4NavigationHistory.hh" GridXYZSegmentation::GridXYZSegmentation(double gridSizeX, double gridSizeY, double gridSizeZ) :
- Segmentation(Segmentation::eNonprojective), m_gridSizeX(gridSizeX), m_gridSizeY(gridSizeY), m_gridSizeZ(gridSizeZ)
+ Segmentation(Segmentation::eNonprojective), _gridSizeX(gridSizeX), _gridSizeY(gridSizeY), _gridSizeZ(gridSizeZ)
{ setBinNames(); }
@@ -63,8 +63,8 @@
int GridXYZSegmentation::computeBinX(const G4ThreeVector& localStepPos) { int ret;
- if (m_gridSizeX != 0) { - ret = Segmentation::computeBin(localStepPos.x(), m_gridSizeX);
+ if (_gridSizeX != 0) { + ret = Segmentation::computeBin(localStepPos.x(), _gridSizeX);
} else { ret = 0; }
@@ -74,8 +74,8 @@
int GridXYZSegmentation::computeBinY(const G4ThreeVector& localStepPos) { int ret;
- if (m_gridSizeY != 0) { - ret = Segmentation::computeBin(localStepPos.y(), m_gridSizeY);
+ if (_gridSizeY != 0) { + ret = Segmentation::computeBin(localStepPos.y(), _gridSizeY);
} else { ret = 0; }
@@ -85,8 +85,8 @@
int GridXYZSegmentation::computeBinZ(const G4ThreeVector& localStepPos) { int ret;
- if (m_gridSizeZ != 0) { - ret = Segmentation::computeBin(localStepPos.z(), m_gridSizeZ);
+ if (_gridSizeZ != 0) { + ret = Segmentation::computeBin(localStepPos.z(), _gridSizeZ);
} else { ret = 0; }
@@ -95,19 +95,20 @@
double GridXYZSegmentation::computeDimX(int bin) {
- return Segmentation::computeDim(bin, m_gridSizeX);
+ return Segmentation::computeDim(bin, _gridSizeX);
} double GridXYZSegmentation::computeDimY(int bin) {
- return Segmentation::computeDim(bin, m_gridSizeY);
+ return Segmentation::computeDim(bin, _gridSizeY);
} double GridXYZSegmentation::computeDimZ(int bin) {
- return Segmentation::computeDim(bin, m_gridSizeZ);
+ return Segmentation::computeDim(bin, _gridSizeZ);
}
+/*
G4ThreeVector GridXYZSegmentation::getGlobalHitPosPreStep(const G4StepPoint* aPreStepPoint) { G4ThreeVector globalStepPos = aPreStepPoint->GetPosition();
@@ -123,20 +124,21 @@
return globalCellPos; }
+*/
G4ThreeVector GridXYZSegmentation::getLocalHitPos(const G4ThreeVector& localStepPos) { G4ThreeVector localHitPos;
- if (m_gridSizeX > 0) {
+ if (_gridSizeX > 0) {
localHitPos.setX(computeDimX(computeBinX(localStepPos))); }
- if (m_gridSizeY > 0) {
+ if (_gridSizeY > 0) {
localHitPos.setY(computeDimY(computeBinY(localStepPos))); }
- if (m_gridSizeZ > 0) {
+ if (_gridSizeZ > 0) {
localHitPos.setZ(computeDimZ(computeBinZ(localStepPos))); }
diff -u -r1.1 -r1.2 --- ProjectiveCylinderSegmentation.cc 1 Jul 2013 21:00:45 -0000 1.1 +++ ProjectiveCylinderSegmentation.cc 2 Jul 2013 22:57:43 -0000 1.2 @@ -1,4 +1,4 @@
-// $Header: /cvs/lcd/lcdd/src/lcdd/detectors/ProjectiveCylinderSegmentation.cc,v 1.1 2013/07/01 21:00:45 jeremy Exp $
+// $Header: /cvs/lcd/lcdd/src/lcdd/detectors/ProjectiveCylinderSegmentation.cc,v 1.2 2013/07/02 22:57:43 jeremy Exp $
// LCDD #include "lcdd/detectors/ProjectiveCylinderSegmentation.hh"
@@ -24,10 +24,14 @@
{ return ReadoutUtil::computeTubsMidRadius(ReadoutUtil::getTubs(aStep)); }
+ +/*
double ProjectiveCylinderSegmentation::getRadius(const G4StepPoint* aPreStepPoint) { return ReadoutUtil::computeTubsMidRadius(ReadoutUtil::getTubs(aPreStepPoint)); }
+*/ +
double ProjectiveCylinderSegmentation::getZ(const G4Step* aStep) { double rcyl = getRadius(aStep);
@@ -41,6 +45,7 @@
return zcell; }
+/*
double ProjectiveCylinderSegmentation::getZ(const G4StepPoint* aPreStepPoint) { double rcyl = getRadius(aPreStepPoint);
@@ -54,6 +59,7 @@
return zcell; }
+*/
bool ProjectiveCylinderSegmentation::isValidSolid(G4VSolid* s) { bool valid = Segmentation::isValidSolid(s);
diff -u -r1.1 -r1.2 --- ProjectiveSegmentation.cc 1 Jul 2013 21:00:45 -0000 1.1 +++ ProjectiveSegmentation.cc 2 Jul 2013 22:57:43 -0000 1.2 @@ -1,4 +1,4 @@
-// $Header: /cvs/lcd/lcdd/src/lcdd/detectors/ProjectiveSegmentation.cc,v 1.1 2013/07/01 21:00:45 jeremy Exp $
+// $Header: /cvs/lcd/lcdd/src/lcdd/detectors/ProjectiveSegmentation.cc,v 1.2 2013/07/02 22:57:43 jeremy Exp $
// LCDD #include "lcdd/detectors/ProjectiveSegmentation.hh"
@@ -68,6 +68,8 @@
return pos; }
+ +/*
G4ThreeVector ProjectiveSegmentation::getGlobalHitPos(const G4StepPoint* aPreStepPoint) { // DEBUG
@@ -110,6 +112,8 @@
return pos; }
+*/ +
void ProjectiveSegmentation::setBins(const G4Step* aStep) { G4ThreeVector globalMidPos = ReadoutUtil::computeMidPos(aStep);
@@ -118,6 +122,7 @@
setBin(1, getPhiBin(globalMidPos)); }
+/*
void ProjectiveSegmentation::setBins(const G4StepPoint* aPreStepPoint) { G4ThreeVector globalPos = aPreStepPoint->GetPosition();
@@ -125,6 +130,7 @@
setBin(0, getThetaBin(globalPos)); setBin(1, getPhiBin(globalPos)); }
+*/
G4int ProjectiveSegmentation::getNtheta() const {
@@ -174,11 +180,12 @@
return ReadoutUtil::computeMidPos(aStep).mag(); }
-double ProjectiveSegmentation::getRadius(const G4StepPoint* aPreStepPoint) -{
+ +//double ProjectiveSegmentation::getRadius(const G4StepPoint* aPreStepPoint) +//{
//G4cout << "G4ProjectiveSegmentation::getRadius()" << G4endl;
- return aPreStepPoint->GetPosition().mag(); -}
+// return aPreStepPoint->GetPosition().mag(); +//}
// default impl. returns z of pos double ProjectiveSegmentation::getZ(const G4Step* aStep)
@@ -187,11 +194,11 @@
return ReadoutUtil::computeMidPos(aStep).z(); }
-double ProjectiveSegmentation::getZ(const G4StepPoint* aPreStepPoint) -{
+//double ProjectiveSegmentation::getZ(const G4StepPoint* aPreStepPoint) +//{
//G4cout << "G4ProjectiveSegmentation::getZ()" << G4endl;
- return aPreStepPoint->GetPosition().z(); -}
+// return aPreStepPoint->GetPosition().z(); +//}
double ProjectiveSegmentation::getThetaDim(const int &thetaBin) const {
@@ -211,13 +218,13 @@
return ctheta; }
-double ProjectiveSegmentation::getThetaDim(const G4StepPoint* aPreStepPoint) -{
+//double ProjectiveSegmentation::getThetaDim(const G4StepPoint* aPreStepPoint) +//{
//G4cout << "G4ProjectiveSegmentation::getThetaDim(G4Step*)" << G4endl;
- G4ThreeVector globalStepPos = aPreStepPoint->GetPosition(); - double ctheta = getThetaDim(getThetaBin(globalStepPos)); - return ctheta; -}
+// G4ThreeVector globalStepPos = aPreStepPoint->GetPosition(); +// double ctheta = getThetaDim(getThetaBin(globalStepPos)); +// return ctheta; +//}
double ProjectiveSegmentation::getPhiDim(const G4Step* aStep) {
@@ -227,12 +234,12 @@
double cphi = getPhiDim(getPhiBin(globalStepPos)); return cphi; }
-double ProjectiveSegmentation::getPhiDim(const G4StepPoint* aPreStepPoint) -{
+//double ProjectiveSegmentation::getPhiDim(const G4StepPoint* aPreStepPoint) +//{
//G4cout << "G4ProjectiveSegmentation::getPhiDim(G4Step*)" << G4endl;
- G4ThreeVector globalStepPos = aPreStepPoint->GetPosition(); - double cphi = getPhiDim(getPhiBin(globalStepPos)); - return cphi; -}
+// G4ThreeVector globalStepPos = aPreStepPoint->GetPosition(); +// double cphi = getPhiDim(getPhiBin(globalStepPos)); +// return cphi; +//}
diff -u -r1.1 -r1.2 --- ProjectiveZPlaneSegmentation.cc 1 Jul 2013 21:00:45 -0000 1.1 +++ ProjectiveZPlaneSegmentation.cc 2 Jul 2013 22:57:43 -0000 1.2 @@ -1,4 +1,4 @@
-// $Header: /cvs/lcd/lcdd/src/lcdd/detectors/ProjectiveZPlaneSegmentation.cc,v 1.1 2013/07/01 21:00:45 jeremy Exp $
+// $Header: /cvs/lcd/lcdd/src/lcdd/detectors/ProjectiveZPlaneSegmentation.cc,v 1.2 2013/07/02 22:57:43 jeremy Exp $
// LCDD #include "lcdd/detectors/ProjectiveZPlaneSegmentation.hh"
@@ -20,6 +20,7 @@
double rcyl = zcell * tan(ctheta); return rcyl; }
+/*
double ProjectiveZPlaneSegmentation::getRadius(const G4StepPoint* aPreStepPoint) { double zcell = getZ(aPreStepPoint);
@@ -27,6 +28,7 @@
double rcyl = zcell * tan(ctheta); return rcyl; }
+*/
double ProjectiveZPlaneSegmentation::getZ(const G4Step* aStep) {
@@ -34,8 +36,10 @@
return gpos.z(); }
+/*
double ProjectiveZPlaneSegmentation::getZ(const G4StepPoint* aPreStepPoint) { G4ThreeVector gpos = ReadoutUtil::getVolumeGlobalPosition(aPreStepPoint, G4ThreeVector()); return gpos.z(); }
+*/
diff -u -r1.1 -r1.2 --- Segmentation.cc 1 Jul 2013 21:00:45 -0000 1.1 +++ Segmentation.cc 2 Jul 2013 22:57:43 -0000 1.2 @@ -1,4 +1,4 @@
-// $Header: /cvs/lcd/lcdd/src/lcdd/detectors/Segmentation.cc,v 1.1 2013/07/01 21:00:45 jeremy Exp $
+// $Header: /cvs/lcd/lcdd/src/lcdd/detectors/Segmentation.cc,v 1.2 2013/07/02 22:57:43 jeremy Exp $
// LCDD #include "lcdd/detectors/Segmentation.hh"
@@ -38,15 +38,20 @@
return m_type; }
-G4ThreeVector Segmentation::getGlobalHitPos(const G4Step* aStep) -{ - return ReadoutUtil::computeMidPos(aStep); -}
+//G4ThreeVector Segmentation::getGlobalHitPos(const G4Step* aStep) +//{ +// return ReadoutUtil::computeMidPos(aStep); +//} + +//G4ThreeVector Segmentation::getGlobalHitPosPreStep(const G4StepPoint* aPreStepPoint) +//{ +// //G4Exception("Do not use this method!"); +// return aPreStepPoint->GetPosition(); +//}
-G4ThreeVector Segmentation::getGlobalHitPosPreStep(const G4StepPoint* aPreStepPoint)
+G4ThreeVector Segmentation::getLocalHitPos(const G4ThreeVector& localStepPos)
{
- //G4Exception("Do not use this method!"); - return aPreStepPoint->GetPosition();
+ return localStepPos;
} void Segmentation::resetBins()
diff -N OpticalCalorimeter.cc --- OpticalCalorimeter.cc 1 Jul 2013 21:00:45 -0000 1.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,116 +0,0 @@
-// $Header: /cvs/lcd/lcdd/src/lcdd/detectors/Attic/OpticalCalorimeter.cc,v 1.1 2013/07/01 21:00:45 jeremy Exp $ - -// LCDD -#include "lcdd/detectors/OpticalCalorimeterSD.hh" -#include "lcdd/detectors/Segmentation.hh" -#include "lcdd/detectors/Cerenkov.hh" - -// Geant4 -#include "G4OpticalPhoton.hh" -#include "G4TransportationManager.hh" -#include "G4VProcess.hh" -#include "G4Poisson.hh" - -using std::vector; - -/** - * Constructor for the case only one Hit Collection is given. - * In this case the only the energy deposited by aborbed Cerenkov - * photons is stored. Probably this will be dropped in the - * near future. - */ -OpticalCalorimeterSD::OpticalCalorimeterSD(G4String sdName, G4String hcName, Segmentation* sdSeg, HitComparator* compare) : - CalorimeterSD(sdName, hcName, sdSeg, compare) -{ - CerenGenerator = 0; -} - -/** - * Constructor for multiple Hit Collections. - * - * The current implementation uses the first Hit Collection for the - * Cerenkov Photons and the second Collection to store the ionization losses. - * If more than 2 collections are given the additional Hit collections will - * be ignored. - */ -OpticalCalorimeterSD::OpticalCalorimeterSD(G4String sdName, const vector<G4String>& hcNames, Segmentation* sdSeg, HitComparator* compare) : - CalorimeterSD(sdName, hcNames, sdSeg, compare) -{ - CerenGenerator = 0; -} - -OpticalCalorimeterSD::~OpticalCalorimeterSD() -{ -} - -G4bool OpticalCalorimeterSD::ProcessHits(G4Step* aStep, G4TouchableHistory* tahis) -{ - if (!CerenGenerator) - CerenGenerator = new Cerenkov(); - G4int NCerenPhotons = 0; - G4Track* theTrack = aStep->GetTrack(); - const G4double charge = theTrack->GetDefinition()->GetPDGCharge(); - G4StepPoint* pPreStepPoint = aStep->GetPreStepPoint(); - G4StepPoint* pPostStepPoint = aStep->GetPostStepPoint(); - G4double beta = 0.5 * (pPreStepPoint->GetBeta() + pPostStepPoint->GetBeta()); - const G4VTouchable* touch = aStep->GetPreStepPoint()->GetTouchable(); - G4String thematerial = touch->GetVolume()->GetLogicalVolume()->GetMaterial()->GetName(); - G4double MeanNumberOfPhotons = CerenGenerator->GetAverageNumberOfPhotons(charge, beta, thematerial); - if (MeanNumberOfPhotons > 0.0) { - G4double step_length = aStep->GetStepLength(); - MeanNumberOfPhotons = MeanNumberOfPhotons * step_length; - NCerenPhotons = (G4int) G4Poisson(MeanNumberOfPhotons); - } else { - NCerenPhotons = 0; - } - - if (NCerenPhotons <= 0) { - return CalorimeterSD::ProcessHits(aStep, tahis); - } else { - SensitiveDetector::ProcessHits(aStep, 0); - G4ThreeVector myPoint = aStep->GetPreStepPoint()->GetPosition(); - G4StepPoint* apreStepPoint = aStep->GetPreStepPoint(); - G4Navigator* theNavigator = G4TransportationManager::GetTransportationManager()->GetNavigatorForTracking(); - G4VPhysicalVolume* myVolume = theNavigator->LocateGlobalPointAndSetup(myPoint); - if (getVerbose() > 2) { - G4cout << "Physical volume = " << myVolume->GetName() << G4endl; - G4cout << "Point of interaction = " << myPoint<< G4endl; - G4cout << "sdname " << GetName() << " hcname " <<collectionName[0]<< G4endl; - } - // total photon energy - // G4double theEdep = aTrack->GetTotalEnergy(); - G4double theEdep = double(NCerenPhotons); - // get global cell pos from seg - G4ThreeVector globalCellPos = m_segmentation->getGlobalHitPosPreStep(apreStepPoint); - // reset the seg bins - m_segmentation->resetBins(); - // set the seg bins - m_segmentation->setBins(aStep); - // create id and pack into 64 - Id64bit id64 = makeId(); - // find hit by simple lkp of new hit with above info - CalorimeterHit* thisHit = new CalorimeterHit(theEdep, globalCellPos); - thisHit->setId64bit(id64.getId0(), id64.getId1()); - CalorimeterHit* fndHit = 0; - // hit is not found? - if (!(fndHit = findHit(thisHit, eCerenkov))) { - // add it to lkp map - hits_vector[eCerenkov].push_back(thisHit); - // add to the HC - m_hitsCollections[eCerenkov]->insert(thisHit); - } else { - // found a hit - // don't need to insert thisHit, so delete it - delete thisHit; - thisHit = 0; - // incr total edep of the hit - fndHit->incrEdep(theEdep); - // for setting contrib - thisHit = fndHit; - } - // add McpHitContrib to this hit, setting info from step info - thisHit->addMcpHitContrib(HitContribution(aStep)); - // aTrack->SetTrackStatus(fStopAndKill); // don't step photon any further - return true; - } // end Cerenkov photon treatment -}
Use REPLY-ALL to reply to list
To unsubscribe from the LCD-CVS list, click the following link:
https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=LCD-CVS&A=1