// M Hentz, 2016 #include "ParallelWorldMessenger.hh" #include "ParallelWorldConstruction.hh" #include "G4UIdirectory.hh" #include "G4UIcmdWithAString.hh" #include "G4UIcmdWithADoubleAndUnit.hh" ParallelWorldMessenger::ParallelWorldMessenger( ParallelWorldConstruction* parallelWorldConstruction ) :G4UImessenger(), fParaWorldConstruction(parallelWorldConstruction), fParallelDir(0), fDetCmd(0) { fParallelDir = new G4UIdirectory( "/parallel/" ); fParallelDir->SetGuidance( " parallel world control." ); fDetCmd = new G4UIcmdWithAString( "/parallel/detector", this ); fDetCmd->SetGuidance( "Use detector " ); fDetCmd->SetParameterName( "detName", false ); fDetCmd->AvailableForStates( G4State_PreInit ); fDetSpacingCmd = new G4UIcmdWithADoubleAndUnit( "/parallel/detector/spacing", this ); fDetSpacingCmd->SetGuidance( "Set detector spacing" ); fDetSpacingCmd->SetParameterName( "detSpacing", false ); fDetSpacingCmd->SetUnitCategory( "Length" ); fDetSpacingCmd->SetDefaultUnit( "mm" ); fDetSpacingCmd->AvailableForStates( G4State_PreInit ); fDetDistanceCmd = new G4UIcmdWithADoubleAndUnit( "/parallel/detector/distance", this ); fDetDistanceCmd->SetGuidance( "Set detector distance" ); fDetDistanceCmd->SetParameterName( "containerLength", false ); fDetDistanceCmd->SetUnitCategory( "Length" ); fDetDistanceCmd->SetDefaultUnit( "mm" ); fDetDistanceCmd->AvailableForStates( G4State_PreInit ); } ParallelWorldMessenger::~ParallelWorldMessenger() { delete fDetDistanceCmd; delete fDetSpacingCmd; delete fDetCmd; delete fParallelDir; } void ParallelWorldMessenger::SetNewValue( G4UIcommand* command, G4String newValue ) { if( command == fDetCmd ) { fParaWorldConstruction->SetDetector( newValue ); } if( command == fDetSpacingCmd ){ G4double detSpacing = fDetSpacingCmd->GetNewDoubleValue( newValue ); fParaWorldConstruction->SetDetSpacing( detSpacing ); } if( command == fDetDistanceCmd ){ G4double containerLength = fDetDistanceCmd->GetNewDoubleValue( newValue ); fParaWorldConstruction->SetDetDistance( containerLength ); } }