Geant4 Cross Reference |
1 // 2 // ******************************************************************** 3 // * License and Disclaimer * 4 // * * 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. * 10 // * * 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitation of liability. * 17 // * * 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************************************** 25 // 26 /// \file medical/dna/AuNP/src/DetectorMessenger.cc 27 /// \brief Implementation of the DetectorMessenger class 28 // 29 // $Id: DetectorMessenger.cc 78723 2014-01-20 10:32:17Z gcosmo $ 30 // 31 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 32 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 33 34 #include "DetectorMessenger.hh" 35 36 #include "DetectorConstruction.hh" 37 38 #include "G4UIcmdWithADoubleAndUnit.hh" 39 #include "G4UIcmdWithAString.hh" 40 #include "G4UIcmdWithAnInteger.hh" 41 #include "G4UIdirectory.hh" 42 43 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 44 45 DetectorMessenger::DetectorMessenger(DetectorConstruction* Det) 46 : G4UImessenger(), 47 fDetector(Det), 48 fTestemDir(0), 49 fDetDir(0), 50 fNPMaterCmd(0), 51 fNReplicaRCmd(0), 52 fNReplicaAzmCmd(0), 53 fAbsRadiusCmd(0), 54 fNPRadiusCmd(0), 55 fTrackingCutCmd(0) 56 { 57 fTestemDir = new G4UIdirectory("/AuNP/"); 58 fTestemDir->SetGuidance("Detector control."); 59 60 fDetDir = new G4UIdirectory("/AuNP/det/"); 61 fDetDir->SetGuidance("Detector construction commands"); 62 63 fNPMaterCmd = new G4UIcmdWithAString("/AuNP/det/setNPMat", this); 64 fNPMaterCmd->SetGuidance("Select material of the sphere."); 65 fNPMaterCmd->SetParameterName("choice", false); 66 fNPMaterCmd->AvailableForStates(G4State_PreInit, G4State_Idle); 67 fNPMaterCmd->SetToBeBroadcasted(false); 68 69 fNReplicaRCmd = new G4UIcmdWithAnInteger("/AuNP/det/setNReplicaR", this); 70 fNReplicaRCmd->SetGuidance("Set Number of Replica in R direction"); 71 fNReplicaRCmd->SetParameterName("NR", false); 72 fNReplicaRCmd->SetRange("NR>0"); 73 fNReplicaRCmd->AvailableForStates(G4State_PreInit, G4State_Idle); 74 fNReplicaRCmd->SetToBeBroadcasted(false); 75 76 fNReplicaAzmCmd = new G4UIcmdWithAnInteger("/AuNP/det/setNReplicaAzm", this); 77 fNReplicaAzmCmd->SetGuidance("Set Number of Replica in Azimuthal direction"); 78 fNReplicaAzmCmd->SetParameterName("NAzm", false); 79 fNReplicaAzmCmd->SetRange("NAzm>0"); 80 fNReplicaAzmCmd->AvailableForStates(G4State_PreInit, G4State_Idle); 81 fNReplicaAzmCmd->SetToBeBroadcasted(false); 82 83 fAbsRadiusCmd = new G4UIcmdWithADoubleAndUnit("/AuNP/det/setAbsRadius", this); 84 fAbsRadiusCmd->SetGuidance("Set radius of the absorber"); 85 fAbsRadiusCmd->SetParameterName("Radius", false); 86 fAbsRadiusCmd->SetRange("Radius>0."); 87 fAbsRadiusCmd->SetUnitCategory("Length"); 88 fAbsRadiusCmd->AvailableForStates(G4State_PreInit, G4State_Idle); 89 fAbsRadiusCmd->SetToBeBroadcasted(false); 90 91 fNPRadiusCmd = new G4UIcmdWithADoubleAndUnit("/AuNP/det/setNPRadius", this); 92 fNPRadiusCmd->SetGuidance("Set radius of the nano particle"); 93 fNPRadiusCmd->SetParameterName("Radius", false); 94 fNPRadiusCmd->SetRange("Radius>0."); 95 fNPRadiusCmd->SetUnitCategory("Length"); 96 fNPRadiusCmd->AvailableForStates(G4State_PreInit, G4State_Idle); 97 fNPRadiusCmd->SetToBeBroadcasted(false); 98 99 fTrackingCutCmd = new G4UIcmdWithADoubleAndUnit("/AuNP/det/setTrackingCut", this); 100 fTrackingCutCmd->SetGuidance("Set tracking cut in the absorber"); 101 fTrackingCutCmd->SetParameterName("Cut", false); 102 fTrackingCutCmd->SetRange("Cut>0."); 103 fTrackingCutCmd->SetUnitCategory("Energy"); 104 fTrackingCutCmd->AvailableForStates(G4State_PreInit, G4State_Idle); 105 fTrackingCutCmd->SetToBeBroadcasted(false); 106 } 107 108 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 109 110 DetectorMessenger::~DetectorMessenger() 111 { 112 delete fNPMaterCmd; 113 delete fNReplicaRCmd; 114 delete fNReplicaAzmCmd; 115 delete fAbsRadiusCmd; 116 delete fNPRadiusCmd; 117 delete fTrackingCutCmd; 118 delete fDetDir; 119 delete fTestemDir; 120 } 121 122 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 123 124 void DetectorMessenger::SetNewValue(G4UIcommand* command, G4String newValue) 125 { 126 if (command == fNPMaterCmd) { 127 fDetector->SetNPMaterial(newValue); 128 } 129 130 if (command == fNReplicaRCmd) { 131 fDetector->SetNReplicaR(fNReplicaRCmd->GetNewIntValue(newValue)); 132 } 133 134 if (command == fNReplicaAzmCmd) { 135 fDetector->SetNReplicaAzm(fNReplicaAzmCmd->GetNewIntValue(newValue)); 136 } 137 138 if (command == fAbsRadiusCmd) { 139 fDetector->SetAbsRadius(fAbsRadiusCmd->GetNewDoubleValue(newValue)); 140 } 141 142 if (command == fNPRadiusCmd) { 143 fDetector->SetNPRadius(fNPRadiusCmd->GetNewDoubleValue(newValue)); 144 } 145 146 if (command == fTrackingCutCmd) { 147 fDetector->SetTrackingCut(fTrackingCutCmd->GetNewDoubleValue(newValue)); 148 } 149 } 150 151 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 152