diff --git a/source/digits_hits/include/GateCoincidenceMultiplesKiller.hh b/source/digits_hits/include/GateCoincidenceMultiplesKiller.hh index ed6d4122d..df90f22b6 100644 --- a/source/digits_hits/include/GateCoincidenceMultiplesKiller.hh +++ b/source/digits_hits/include/GateCoincidenceMultiplesKiller.hh @@ -1,12 +1,9 @@ /*---------------------- Copyright (C): OpenGATE Collaboration - This software is distributed under the terms of the GNU Lesser General Public Licence (LGPL) See LICENSE.md for further details ----------------------*/ - - #ifndef GateCoincidenceMultiplesKiller_h #define GateCoincidenceMultiplesKiller_h 1 @@ -14,15 +11,22 @@ See LICENSE.md for further details #include #include #include "G4ThreeVector.hh" +#include "GateVDigitizerModule.hh" +#include "GateCoincidenceDigi.hh" +#include "GateClockDependent.hh" +#include "GateCrystalSD.hh" +#include "globals.hh" #include "GateVPulseProcessor.hh" #include "GateObjectStore.hh" -#include "GateVCoincidencePulseProcessor.hh" + +#include "GateCoincidenceDigitizer.hh" +#include "GateCoincidenceMultiplesKillerMessenger.hh" class GateCoincidenceMultiplesKillerMessenger; -class GateCoincidenceMultiplesKiller : public GateVCoincidencePulseProcessor +class GateCoincidenceMultiplesKiller : public GateVDigitizerModule { public: @@ -31,26 +35,30 @@ public: //! Destructor virtual ~GateCoincidenceMultiplesKiller() ; + //! Constructs attached to a GateDigitizer + GateCoincidenceMultiplesKiller(GateCoincidenceDigitizer *digitizer, G4String name); - //! Constructs a new dead time attached to a GateDigitizer - GateCoincidenceMultiplesKiller(GateCoincidencePulseProcessorChain* itsChain, - const G4String& itsName); public: + void Digitize() override; - //! Implementation of the pure virtual method declared by the base class GateClockDependent - //! print-out the attributes specific of the MultiplesKiller virtual void DescribeMyself(size_t indent); protected: - /*! Implementation of the pure virtual method declared by the base class GateVCoincidencePulseProcessor*/ - GateCoincidencePulse* ProcessPulse(GateCoincidencePulse* inputPulse,G4int iPulse); - - private: GateCoincidenceMultiplesKillerMessenger *m_messenger; //!< Messenger + GateCoincidenceDigi* m_outputDigi; + + GateCoincidenceDigiCollection* m_OutputDigiCollection; + + GateCoincidenceDigitizer* m_digitizer; + G4int nVerboseLevel; + + + + }; diff --git a/source/digits_hits/include/GateCoincidenceMultiplesKillerMessenger.hh b/source/digits_hits/include/GateCoincidenceMultiplesKillerMessenger.hh index 9dbe8b235..1658dd17f 100644 --- a/source/digits_hits/include/GateCoincidenceMultiplesKillerMessenger.hh +++ b/source/digits_hits/include/GateCoincidenceMultiplesKillerMessenger.hh @@ -6,11 +6,13 @@ of the GNU Lesser General Public Licence (LGPL) See LICENSE.md for further details ----------------------*/ - #ifndef GateCoincidenceMultiplesKillerMessenger_h #define GateCoincidenceMultiplesKillerMessenger_h 1 +#include "G4UImessenger.hh" +#include "globals.hh" + +#include "GateClockDependentMessenger.hh" -#include "GatePulseProcessorMessenger.hh" class G4UIdirectory; @@ -19,14 +21,19 @@ class GateCoincidenceMultiplesKiller; class GateCoincidenceMultiplesKillerMessenger: public GateClockDependentMessenger { public: - GateCoincidenceMultiplesKillerMessenger(GateCoincidenceMultiplesKiller* itsMultiplesKiller); + GateCoincidenceMultiplesKillerMessenger(GateCoincidenceMultiplesKiller*); virtual ~GateCoincidenceMultiplesKillerMessenger(); inline void SetNewValue(G4UIcommand* aCommand, G4String aString); - inline GateCoincidenceMultiplesKiller* GetMultiplesKiller(){ return (GateCoincidenceMultiplesKiller*) GetClockDependent(); } + //inline GateCoincidenceMultiplesKiller* GetMultiplesKiller(){ return (GateCoincidenceMultiplesKiller*) GetClockDependent(); } private: + + + GateCoincidenceMultiplesKiller* m_CoincidenceMultiplesKiller; + + }; #endif diff --git a/source/digits_hits/src/GateCoincidenceDigitizerMessenger.cc b/source/digits_hits/src/GateCoincidenceDigitizerMessenger.cc index 706abf115..2c8359942 100644 --- a/source/digits_hits/src/GateCoincidenceDigitizerMessenger.cc +++ b/source/digits_hits/src/GateCoincidenceDigitizerMessenger.cc @@ -27,6 +27,8 @@ See LICENSE.md for further details #include "GateCoincidenceDeadTime.hh" +#include "GateCoincidenceMultiplesKiller.hh" + /*#include "GateAdder.hh" #include "GateReadout.hh" #include "GateEnergyFraming.hh" @@ -122,7 +124,7 @@ void GateCoincidenceDigitizerMessenger::SetNewValue(G4UIcommand* command,G4Strin const G4String& GateCoincidenceDigitizerMessenger::DumpMap() { - static G4String theList = "deadtime";//readout adder energyFraming timeResolution energyResolution spatialResolution efficiency deadtime pileup adderCompton opticaladder noise merger"; + static G4String theList = "deadtime multiplesKiller";//readout adder energyFraming timeResolution energyResolution spatialResolution efficiency deadtime pileup adderCompton opticaladder noise merger"; return theList; } @@ -148,6 +150,12 @@ void GateCoincidenceDigitizerMessenger::DoInsertion(const G4String& childTypeNam newDM = new GateCoincidenceDeadTime(m_CoinDigitizer, DMname); m_CoinDigitizer->AddNewModule(newDM); } + + else if (childTypeName=="multiplesKiller") + { + newDM = new GateCoincidenceMultiplesKiller(m_CoinDigitizer, DMname); + m_CoinDigitizer->AddNewModule(newDM); + } /*else if (childTypeName=="readout") { newDM = new GateReadout(m_digitizer, DMname); diff --git a/source/digits_hits/src/GateCoincidenceMultiplesKiller.cc b/source/digits_hits/src/GateCoincidenceMultiplesKiller.cc index 62739afd8..0fc107947 100644 --- a/source/digits_hits/src/GateCoincidenceMultiplesKiller.cc +++ b/source/digits_hits/src/GateCoincidenceMultiplesKiller.cc @@ -7,45 +7,87 @@ See LICENSE.md for further details ----------------------*/ -#include "GateCoincidenceMultiplesKiller.hh" + #include "GateCoincidenceMultiplesKillerMessenger.hh" +#include "GateCoincidenceMultiplesKiller.hh" #include "GateTools.hh" +#include "GateCoincidenceDigi.hh" +#include "GateDigitizerMgr.hh" +#include "G4SystemOfUnits.hh" +#include "G4EventManager.hh" +#include "G4Event.hh" +#include "G4SDManager.hh" +#include "G4DigiManager.hh" +#include "G4ios.hh" +#include "G4UnitsTable.hh" - -GateCoincidenceMultiplesKiller::GateCoincidenceMultiplesKiller(GateCoincidencePulseProcessorChain* itsChain, - const G4String& itsName) - : GateVCoincidencePulseProcessor(itsChain,itsName) +GateCoincidenceMultiplesKiller::GateCoincidenceMultiplesKiller(GateCoincidenceDigitizer* digitizer, G4String name) + : GateVDigitizerModule(name, "digitizerMgr/CoincidenceDigitizer/" + digitizer->m_digitizerName + "/" + name, digitizer), + m_outputDigi(0), + m_OutputDigiCollection(0), + m_digitizer(digitizer) { + G4String colName = digitizer->GetOutputName(); + collectionName.push_back(colName); - m_messenger = new GateCoincidenceMultiplesKillerMessenger(this); + m_messenger = new GateCoincidenceMultiplesKillerMessenger(this); } - - - GateCoincidenceMultiplesKiller::~GateCoincidenceMultiplesKiller() { - delete m_messenger; + delete m_messenger; } +void GateCoincidenceMultiplesKiller::Digitize() { + + G4String digitizerName = m_digitizer->m_digitizerName; + G4String outputCollName = m_digitizer-> GetOutputName(); + m_OutputDigiCollection = new GateCoincidenceDigiCollection(GetName(),outputCollName); // to create the Digi Collection + G4DigiManager* DigiMan = G4DigiManager::GetDMpointer(); + GateCoincidenceDigiCollection* IDC = 0; + IDC = (GateCoincidenceDigiCollection*) (DigiMan->GetDigiCollection(m_DCID)); + + GateCoincidenceDigi* inputDigi = new GateCoincidenceDigi(); -GateCoincidencePulse* GateCoincidenceMultiplesKiller::ProcessPulse(GateCoincidencePulse* inputPulse,G4int ) -{ - if (!inputPulse) { - if (nVerboseLevel>1) - G4cout << "[GateCoincidenceMultiplesKiller::ProcessOnePulse]: input pulse was null -> nothing to do\n\n"; - return 0; - } - return (inputPulse->size()==2) ? new GateCoincidencePulse(*inputPulse):0; -} + if (IDC) { + + G4int n_digi = IDC->entries(); + + for (G4int i = 0; i < n_digi; i++) { + inputDigi = (*IDC)[i]; + + if (inputDigi->size() == 2) { + m_outputDigi = new GateCoincidenceDigi(*inputDigi); + m_OutputDigiCollection->insert(m_outputDigi); + + } else { + if (nVerboseLevel > 1) { + G4cout << "[GateCoincidenceMultiplesKiller::Digitize]: input digi was null or size != 2 -> killing this digi\n\n"; + } + + } + + + } + } else + { + if (nVerboseLevel>1) + G4cout << "[GateCoincidenceDeadTime::Digitize]: input digi collection is null -> nothing to do\n\n"; + return; + } + + + StoreDigiCollection(m_OutputDigiCollection); +} void GateCoincidenceMultiplesKiller::DescribeMyself(size_t indent) { - G4cout << GateTools::Indent(indent) << "MultiplesKiller "<< Gateendl; + G4cout << GateTools::Indent(indent) << "MultiplesKiller " << Gateendl; } + diff --git a/source/digits_hits/src/GateCoincidenceMultiplesKillerMessenger.cc b/source/digits_hits/src/GateCoincidenceMultiplesKillerMessenger.cc index 863890314..f35ea73b8 100644 --- a/source/digits_hits/src/GateCoincidenceMultiplesKillerMessenger.cc +++ b/source/digits_hits/src/GateCoincidenceMultiplesKillerMessenger.cc @@ -7,23 +7,41 @@ See LICENSE.md for further details ----------------------*/ -#include "GateCoincidenceMultiplesKillerMessenger.hh" -#include "GateCoincidenceMultiplesKiller.hh" -GateCoincidenceMultiplesKillerMessenger::GateCoincidenceMultiplesKillerMessenger(GateCoincidenceMultiplesKiller* itsMultiplesKiller) - : GateClockDependentMessenger(itsMultiplesKiller) + + +#include "GateCoincidenceMultiplesKillerMessenger.hh" +#include "GateCoincidenceMultiplesKiller.hh" +#include "GateDigitizerMgr.hh" +#include "G4UImessenger.hh" +#include "globals.hh" + +#include "GateClockDependentMessenger.hh" +#include "G4SystemOfUnits.hh" +#include "G4UIdirectory.hh" +#include "G4UIcmdWithADoubleAndUnit.hh" +#include "G4UIcmdWithAString.hh" +#include "G4UIcmdWithAnInteger.hh" +#include "G4UIcmdWithABool.hh" + +GateCoincidenceMultiplesKillerMessenger::GateCoincidenceMultiplesKillerMessenger(GateCoincidenceMultiplesKiller* CoincidenceMultiplesKiller) + : GateClockDependentMessenger(CoincidenceMultiplesKiller), + m_CoincidenceMultiplesKiller(CoincidenceMultiplesKiller) { -} + G4String guidance; + G4String cmdName; +} + GateCoincidenceMultiplesKillerMessenger::~GateCoincidenceMultiplesKillerMessenger() { -} +} -void GateCoincidenceMultiplesKillerMessenger::SetNewValue(G4UIcommand* command, G4String newValue) +void GateCoincidenceMultiplesKillerMessenger::SetNewValue(G4UIcommand* aCommand, G4String newValue) { - GateClockDependentMessenger::SetNewValue(command,newValue); -} + + } diff --git a/source/physics/src/GateCoincidencePulseProcessorChainMessenger.cc b/source/physics/src/GateCoincidencePulseProcessorChainMessenger.cc index 06f6b90ab..3e3672a18 100644 --- a/source/physics/src/GateCoincidencePulseProcessorChainMessenger.cc +++ b/source/physics/src/GateCoincidencePulseProcessorChainMessenger.cc @@ -98,8 +98,8 @@ void GateCoincidencePulseProcessorChainMessenger::DoInsertion(const G4String& ch newProcessor = new GateCoincidenceGeometrySelector(GetProcessorChain(),newInsertionName); else if (childTypeName=="buffer") newProcessor = new GateCoincidenceBuffer(GetProcessorChain(),newInsertionName); - else if (childTypeName=="multiplesKiller") - newProcessor = new GateCoincidenceMultiplesKiller(GetProcessorChain(),newInsertionName); + //else if (childTypeName=="multiplesKiller") + //newProcessor = new GateCoincidenceMultiplesKiller(GetProcessorChain(),newInsertionName); else if (childTypeName=="triCoincProcessor") //mhadi_add newProcessor = new GateTriCoincidenceSorter(GetProcessorChain(),newInsertionName);//mhadi_add else {