Skip to content

Commit

Permalink
Merge pull request #693 from Oudihat-Radia/MultiplesKiller
Browse files Browse the repository at this point in the history
 CoincidenceMultipleskiller
  • Loading branch information
kochebina authored Aug 30, 2024
2 parents 2c31c31 + 70ddb97 commit 9a6d3bb
Show file tree
Hide file tree
Showing 6 changed files with 133 additions and 50 deletions.
36 changes: 22 additions & 14 deletions source/digits_hits/include/GateCoincidenceMultiplesKiller.hh
Original file line number Diff line number Diff line change
@@ -1,28 +1,32 @@
/*----------------------
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

#include "globals.hh"
#include <iostream>
#include <vector>
#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:

Expand All @@ -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;




};


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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
10 changes: 9 additions & 1 deletion source/digits_hits/src/GateCoincidenceDigitizerMessenger.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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;
}
Expand All @@ -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);
Expand Down
82 changes: 62 additions & 20 deletions source/digits_hits/src/GateCoincidenceMultiplesKiller.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

36 changes: 27 additions & 9 deletions source/digits_hits/src/GateCoincidenceMultiplesKillerMessenger.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down

0 comments on commit 9a6d3bb

Please sign in to comment.