File indexing completed on 2026-04-04 07:52:58
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037 #include "ClusteringAlgoMessenger.hh"
0038
0039 #include "ClusteringAlgo.hh"
0040
0041 #include "G4UIcmdWithADouble.hh"
0042 #include "G4UIcmdWithADoubleAndUnit.hh"
0043 #include "G4UIcmdWithAnInteger.hh"
0044 #include "G4UIdirectory.hh"
0045
0046
0047
0048 ClusteringAlgoMessenger::ClusteringAlgoMessenger(ClusteringAlgo* pClustAlgo)
0049 : G4UImessenger(), fpClusteringAlgo(pClustAlgo)
0050 {
0051 fpAppliDir = new G4UIdirectory("/clustering/");
0052 fpAppliDir->SetGuidance("commands specific to this example");
0053
0054 fpMinPtsCmd = new G4UIcmdWithAnInteger("/clustering/algo/setMinPts", this);
0055 fpMinPtsCmd->SetGuidance("Minimal number of points to create a cluster");
0056 fpMinPtsCmd->SetParameterName("MinPts", false);
0057 fpMinPtsCmd->SetRange("MinPts>0");
0058 fpMinPtsCmd->AvailableForStates(G4State_Idle);
0059
0060 fpProbCmd = new G4UIcmdWithADouble("/clustering/algo/setSelectionProb", this);
0061 fpProbCmd->SetGuidance(
0062 "Probability to select potential "
0063 "damage according to the geometry");
0064 fpProbCmd->SetParameterName("Prob", false);
0065 fpProbCmd->SetRange("Prob>0");
0066 fpProbCmd->AvailableForStates(G4State_Idle);
0067
0068 fpEpsCmd = new G4UIcmdWithADoubleAndUnit("/clustering/algo/setEps", this);
0069 fpEpsCmd->SetGuidance("Maximal distance between points to create a cluster");
0070 fpEpsCmd->SetParameterName("Eps", false);
0071 fpEpsCmd->SetRange("Eps>0");
0072 fpEpsCmd->AvailableForStates(G4State_Idle);
0073
0074 fpEminCmd = new G4UIcmdWithADoubleAndUnit("/clustering/algo/setEmin", this);
0075 fpEminCmd->SetGuidance(
0076 "Energy to have a probability "
0077 "to create a strand break = 0");
0078 fpEminCmd->SetParameterName("Emin", false);
0079 fpEminCmd->SetRange("Emin>=0");
0080 fpEminCmd->AvailableForStates(G4State_Idle);
0081
0082 fpEmaxCmd = new G4UIcmdWithADoubleAndUnit("/clustering/algo/setEmax", this);
0083 fpEmaxCmd->SetGuidance(
0084 "Energy to have a probability "
0085 "to create a strand break = 1");
0086 fpEmaxCmd->SetParameterName("Emax", false);
0087 fpEmaxCmd->SetRange("Emax>=0");
0088 fpEmaxCmd->AvailableForStates(G4State_Idle);
0089 }
0090
0091
0092
0093 ClusteringAlgoMessenger::~ClusteringAlgoMessenger()
0094 {
0095 delete fpMinPtsCmd;
0096 delete fpProbCmd;
0097 delete fpEpsCmd;
0098 delete fpEminCmd;
0099 delete fpEmaxCmd;
0100 delete fpAppliDir;
0101 }
0102
0103
0104
0105 void ClusteringAlgoMessenger::SetNewValue(G4UIcommand* pCommand, G4String pNewValue)
0106 {
0107 if (pCommand == fpMinPtsCmd) {
0108 fpClusteringAlgo->SetMinPts(fpMinPtsCmd->GetNewIntValue(pNewValue));
0109 }
0110 if (pCommand == fpProbCmd) {
0111 fpClusteringAlgo->SetSPointsProb(fpProbCmd->GetNewDoubleValue(pNewValue));
0112 }
0113 if (pCommand == fpEpsCmd) {
0114 fpClusteringAlgo->SetEps(fpEpsCmd->GetNewDoubleValue(pNewValue));
0115 }
0116 if (pCommand == fpEminCmd) {
0117 fpClusteringAlgo->SetEMinDamage(fpEminCmd->GetNewDoubleValue(pNewValue));
0118 }
0119 if (pCommand == fpEmaxCmd) {
0120 fpClusteringAlgo->SetEMaxDamage(fpEmaxCmd->GetNewDoubleValue(pNewValue));
0121 }
0122 }