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