Author: [log in to unmask]
Date: Tue Apr 7 16:34:46 2015
New Revision: 3585
Log:
committing first version of the ScintillatorCalorimeterHitProcessor
Added:
projects/lcdd/branches/scintillatorHCAL/include/lcdd/detectors/ScintillatorCalorimeterHitProcessor.hh
projects/lcdd/branches/scintillatorHCAL/src/lcdd/detectors/ScintillatorCalorimeterHitProcessor.cc
Modified:
projects/lcdd/branches/scintillatorHCAL/src/lcdd/detectors/HitProcessorManager.cc
Added: projects/lcdd/branches/scintillatorHCAL/include/lcdd/detectors/ScintillatorCalorimeterHitProcessor.hh
=============================================================================
--- projects/lcdd/branches/scintillatorHCAL/include/lcdd/detectors/ScintillatorCalorimeterHitProcessor.hh (added)
+++ projects/lcdd/branches/scintillatorHCAL/include/lcdd/detectors/ScintillatorCalorimeterHitProcessor.hh Tue Apr 7 16:34:46 2015
@@ -0,0 +1,55 @@
+#ifndef LCDD_DETECTORS_SCINTILLATORCALORIMETERHITPROCESSOR_HH_
+#define LCDD_DETECTORS_SCINTILLATORCALORIMETERHITPROCESSOR_HH_ 1
+
+// LCDD
+#include "lcdd/detectors/CalorimeterHitProcessor.hh"
+#include "lcdd/detectors/CalorimeterSD.hh"
+#include "lcdd/detectors/HitProcessorFactory.hh"
+#include "G4EmSaturation.hh"
+
+/**
+ * @brief
+ * Implementation of hit processing behavior for CalorimeterSD objects with Segmentation.
+ */
+class ScintillatorCalorimeterHitProcessor: public CalorimeterHitProcessor {
+private:
+ G4EmSaturation* m_emSaturation;
+
+public:
+
+ /**
+ * Class constructor.
+ */
+ ScintillatorCalorimeterHitProcessor();
+
+ /**
+ * Class destructor.
+ */
+ virtual ~ScintillatorCalorimeterHitProcessor();
+
+ /**
+ * Process steps to produce hits.
+ * @param[in] step A G4Step object.
+ */
+ bool processHits(G4Step* step);
+};
+
+/**
+ * @brief
+ * The factory for creating new BasicCalorimeterHitProcessor objects
+ */
+class ScintillatorCalorimeterHitProcessorFactory: public HitProcessorFactory {
+
+public:
+
+ HitProcessor* createHitProcessor() {
+ return new ScintillatorCalorimeterHitProcessor();
+ }
+
+ const std::string& handlesType() {
+ static std::string typeName = "ScintillatorCalorimeterHitProcessor";
+ return typeName;
+ }
+};
+
+#endif
Modified: projects/lcdd/branches/scintillatorHCAL/src/lcdd/detectors/HitProcessorManager.cc
=============================================================================
--- projects/lcdd/branches/scintillatorHCAL/src/lcdd/detectors/HitProcessorManager.cc (original)
+++ projects/lcdd/branches/scintillatorHCAL/src/lcdd/detectors/HitProcessorManager.cc Tue Apr 7 16:34:46 2015
@@ -2,6 +2,7 @@
// LCDD
#include "lcdd/detectors/BasicCalorimeterHitProcessor.hh"
+#include "lcdd/detectors/ScintillatorCalorimeterHitProcessor.hh"
#include "lcdd/detectors/BasicTrackerHitProcessor.hh"
#include "lcdd/detectors/ScoringTrackerHitProcessor.hh"
#include "lcdd/detectors/DDSegmentationCalorimeterHitProcessor.hh"
@@ -24,6 +25,7 @@
void HitProcessorManager::registerDefaultFactories() {
registerFactory(new BasicCalorimeterHitProcessorFactory());
+ registerFactory(new ScintillatorCalorimeterHitProcessorFactory());
registerFactory(new ScoringTrackerHitProcessorFactory());
registerFactory(new BasicTrackerHitProcessorFactory());
Added: projects/lcdd/branches/scintillatorHCAL/src/lcdd/detectors/ScintillatorCalorimeterHitProcessor.cc
=============================================================================
--- projects/lcdd/branches/scintillatorHCAL/src/lcdd/detectors/ScintillatorCalorimeterHitProcessor.cc (added)
+++ projects/lcdd/branches/scintillatorHCAL/src/lcdd/detectors/ScintillatorCalorimeterHitProcessor.cc Tue Apr 7 16:34:46 2015
@@ -0,0 +1,88 @@
+#include "lcdd/detectors/ScintillatorCalorimeterHitProcessor.hh"
+
+// LCDD
+#include "lcdd/detectors/CurrentTrackState.hh"
+#include "lcdd/util/TimerUtil.hh"
+
+// Geant4
+#include "G4Geantino.hh"
+#include "G4ChargedGeantino.hh"
+
+ScintillatorCalorimeterHitProcessor::ScintillatorCalorimeterHitProcessor() {
+ m_emSaturation = new G4EmSaturation(0);
+}
+
+ScintillatorCalorimeterHitProcessor::~ScintillatorCalorimeterHitProcessor() {
+}
+
+bool ScintillatorCalorimeterHitProcessor::processHits(G4Step* step) {
+
+ // Get the energy deposition.
+ // G4double edep = step->GetTotalEnergyDeposit();
+ // edep with Birks' law:
+ G4double edep = m_emSaturation->VisibleEnergyDeposition(step);
+
+
+ // Mokka code:
+ // G4double energyDeposition = aStep->GetTotalEnergyDeposit();
+ // G4double length = aStep->GetStepLength();
+ // G4double niel = 0.; //aStep->GetNonIonisingEnergyDeposit(); //FIXME
+ // const G4Track* track = aStep->GetTrack();
+ // const G4ParticleDefinition* particle = track->GetDefinition();
+ // const G4MaterialCutsCouple* couple = track->GetMaterialCutsCouple();
+ //
+ // G4double engyVis = emSaturation->VisibleEnergyDeposition(particle,
+ // couple,
+ // length,
+ // energyDeposition,
+ // niel);
+
+ // Check for Geantino particle type.
+ G4ParticleDefinition* def = step->GetTrack()->GetDefinition();
+ bool isGeantino = false;
+ if (def == G4Geantino::Definition() || def == G4ChargedGeantino::Definition()) {
+ isGeantino = true;
+ }
+
+ // Cut on energy deposition <= cut but allow Geantinos.
+ if (edep <= _calorimeter->getEnergyCut() && isGeantino == false) {
+ return false;
+ }
+
+ // Get the Segmentation from the CalorimeterSD.
+ Segmentation* segmentation = _calorimeter->getSegmentation();
+
+ // Get the global cell position from the Segmentation.
+ G4ThreeVector globalCellPosition = segmentation->getGlobalHitPosition(step);
+
+ // Set the segmentation bin values from the step.
+ segmentation->setBins(step);
+
+ // Create a 64-bit ID from the step information.
+ Id64bit id = _calorimeter->makeIdentifier(step);
+
+ // Check for an existing hit with this identifier.
+ CalorimeterHit* hit = _calorimeter->findHit(id);
+
+ // Was there a hit found with this identifier?
+ if (hit == NULL) {
+
+ // No hit was found, so a new one is created.
+ hit = new CalorimeterHit(id, edep, globalCellPosition);
+
+ // Add the new hit to the calorimeter.
+ _calorimeter->addHit(hit, _collectionIndex);
+
+ } else {
+
+ // Add energy deposition to an existing hit.
+ hit->addEdep(edep);
+ }
+
+ // Add hit contribution to the hit.
+ // FIXME: This should pass a pointer to a new object. It is copied, which is inefficient.
+ hit->addHitContribution(HitContribution(CurrentTrackState::getCurrentTrackID(), step));
+
+ // Return true, indicating that a hit was added or modified.
+ return true;
+}
########################################################################
Use REPLY-ALL to reply to list
To unsubscribe from the LCDET-SVN list, click the following link:
https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=LCDET-SVN&A=1
|