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 #include "Par03DetectorMessenger.hh" 26 #include "Par03DetectorMessenger.hh" 27 << 28 #include "Par03DetectorConstruction.hh" 27 #include "Par03DetectorConstruction.hh" 29 28 >> 29 #include "G4UIdirectory.hh" >> 30 #include "G4UIcmdWithoutParameter.hh" >> 31 #include "G4UIcmdWithAnInteger.hh" 30 #include "G4UIcmdWithADoubleAndUnit.hh" 32 #include "G4UIcmdWithADoubleAndUnit.hh" 31 #include "G4UIcmdWithAString.hh" 33 #include "G4UIcmdWithAString.hh" 32 #include "G4UIcmdWithAnInteger.hh" << 33 #include "G4UIcmdWithoutParameter.hh" << 34 #include "G4UIdirectory.hh" << 35 34 36 //....oooOO0OOooo........oooOO0OOooo........oo 35 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 37 36 38 Par03DetectorMessenger::Par03DetectorMessenger << 37 Par03DetectorMessenger::Par03DetectorMessenger( 39 : G4UImessenger(), fDetector(aDetector) << 38 Par03DetectorConstruction* aDetector) >> 39 : G4UImessenger() >> 40 , fDetector(aDetector) 40 { 41 { 41 fExampleDir = new G4UIdirectory("/Par03/"); 42 fExampleDir = new G4UIdirectory("/Par03/"); 42 fExampleDir->SetGuidance("UI commands specif 43 fExampleDir->SetGuidance("UI commands specific to this example"); 43 44 44 fDetectorDir = new G4UIdirectory("/Par03/det 45 fDetectorDir = new G4UIdirectory("/Par03/detector/"); 45 fDetectorDir->SetGuidance("Detector construc 46 fDetectorDir->SetGuidance("Detector construction UI commands"); 46 47 47 fPrintCmd = new G4UIcmdWithoutParameter("/Pa 48 fPrintCmd = new G4UIcmdWithoutParameter("/Par03/detector/print", this); 48 fPrintCmd->SetGuidance("Print current settin 49 fPrintCmd->SetGuidance("Print current settings."); 49 50 50 fDetectorRadiusCmd = new G4UIcmdWithADoubleA << 51 fDetectorRadiusCmd = 51 fDetectorRadiusCmd->SetGuidance("Set tranver << 52 new G4UIcmdWithADoubleAndUnit("/Par03/detector/setDetectorRadius", this); >> 53 fDetectorRadiusCmd->SetGuidance( >> 54 "Set tranverse size of the detector (cylinder radius)"); 52 fDetectorRadiusCmd->SetParameterName("Size", 55 fDetectorRadiusCmd->SetParameterName("Size", false); 53 fDetectorRadiusCmd->SetRange("Size>0."); 56 fDetectorRadiusCmd->SetRange("Size>0."); 54 fDetectorRadiusCmd->SetUnitCategory("Length" 57 fDetectorRadiusCmd->SetUnitCategory("Length"); 55 fDetectorRadiusCmd->AvailableForStates(G4Sta 58 fDetectorRadiusCmd->AvailableForStates(G4State_PreInit); 56 fDetectorRadiusCmd->SetToBeBroadcasted(false 59 fDetectorRadiusCmd->SetToBeBroadcasted(false); 57 60 58 fDetectorLengthCmd = new G4UIcmdWithADoubleA << 61 fDetectorLengthCmd = 59 fDetectorLengthCmd->SetGuidance("Set length << 62 new G4UIcmdWithADoubleAndUnit("/Par03/detector/setDetectorLength", this); >> 63 fDetectorLengthCmd->SetGuidance( >> 64 "Set length of the detector (cylinder length)"); 60 fDetectorLengthCmd->SetParameterName("Size", 65 fDetectorLengthCmd->SetParameterName("Size", false); 61 fDetectorLengthCmd->SetRange("Size>0."); 66 fDetectorLengthCmd->SetRange("Size>0."); 62 fDetectorLengthCmd->SetUnitCategory("Length" 67 fDetectorLengthCmd->SetUnitCategory("Length"); 63 fDetectorLengthCmd->AvailableForStates(G4Sta 68 fDetectorLengthCmd->AvailableForStates(G4State_PreInit); 64 fDetectorLengthCmd->SetToBeBroadcasted(false 69 fDetectorLengthCmd->SetToBeBroadcasted(false); 65 70 66 fDetectorMaterialCmd = new G4UIcmdWithAStrin << 71 fDetectorMaterialCmd = >> 72 new G4UIcmdWithAString("/Par03/detector/setDetectorMaterial", this); 67 fDetectorMaterialCmd->SetGuidance("Material 73 fDetectorMaterialCmd->SetGuidance("Material of the detector."); 68 fDetectorMaterialCmd->SetParameterName("Name 74 fDetectorMaterialCmd->SetParameterName("Name", false); 69 fDetectorMaterialCmd->AvailableForStates(G4S 75 fDetectorMaterialCmd->AvailableForStates(G4State_PreInit); 70 fDetectorMaterialCmd->SetToBeBroadcasted(fal 76 fDetectorMaterialCmd->SetToBeBroadcasted(false); 71 77 72 fNbLayersCmd = new G4UIcmdWithAnInteger("/Pa << 78 fNbLayersCmd = >> 79 new G4UIcmdWithAnInteger("/Par03/detector/setNbOfLayers", this); 73 fNbLayersCmd->SetGuidance("Set number of lay 80 fNbLayersCmd->SetGuidance("Set number of layers."); 74 fNbLayersCmd->SetParameterName("NbLayers", f 81 fNbLayersCmd->SetParameterName("NbLayers", false); 75 fNbLayersCmd->SetRange("NbLayers>0"); 82 fNbLayersCmd->SetRange("NbLayers>0"); 76 fNbLayersCmd->AvailableForStates(G4State_Pre 83 fNbLayersCmd->AvailableForStates(G4State_PreInit); 77 fNbLayersCmd->SetToBeBroadcasted(false); 84 fNbLayersCmd->SetToBeBroadcasted(false); 78 85 79 fNbRhoCellsCmd = new G4UIcmdWithAnInteger("/ << 86 fNbRhoCellsCmd = >> 87 new G4UIcmdWithAnInteger("/Par03/detector/setNbOfRhoCells", this); 80 fNbRhoCellsCmd->SetGuidance("Set number of c 88 fNbRhoCellsCmd->SetGuidance("Set number of cells along radius."); 81 fNbRhoCellsCmd->SetParameterName("NbRhoCells 89 fNbRhoCellsCmd->SetParameterName("NbRhoCells", false); 82 fNbRhoCellsCmd->SetRange("NbRhoCells>0"); 90 fNbRhoCellsCmd->SetRange("NbRhoCells>0"); 83 fNbRhoCellsCmd->AvailableForStates(G4State_P 91 fNbRhoCellsCmd->AvailableForStates(G4State_PreInit); 84 fNbRhoCellsCmd->SetToBeBroadcasted(false); 92 fNbRhoCellsCmd->SetToBeBroadcasted(false); 85 93 86 fNbPhiCellsCmd = new G4UIcmdWithAnInteger("/ << 94 fNbPhiCellsCmd = >> 95 new G4UIcmdWithAnInteger("/Par03/detector/setNbOfPhiCells", this); 87 fNbPhiCellsCmd->SetGuidance("Set number of c 96 fNbPhiCellsCmd->SetGuidance("Set number of cells in azimuthal angle."); 88 fNbPhiCellsCmd->SetParameterName("NbPhiCells 97 fNbPhiCellsCmd->SetParameterName("NbPhiCells", false); 89 fNbPhiCellsCmd->SetRange("NbPhiCells>0"); 98 fNbPhiCellsCmd->SetRange("NbPhiCells>0"); 90 fNbPhiCellsCmd->AvailableForStates(G4State_P 99 fNbPhiCellsCmd->AvailableForStates(G4State_PreInit); 91 fNbPhiCellsCmd->SetToBeBroadcasted(false); 100 fNbPhiCellsCmd->SetToBeBroadcasted(false); 92 } 101 } 93 102 94 //....oooOO0OOooo........oooOO0OOooo........oo 103 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 95 104 96 Par03DetectorMessenger::~Par03DetectorMessenge 105 Par03DetectorMessenger::~Par03DetectorMessenger() 97 { 106 { 98 delete fPrintCmd; 107 delete fPrintCmd; 99 delete fDetectorRadiusCmd; 108 delete fDetectorRadiusCmd; 100 delete fDetectorLengthCmd; 109 delete fDetectorLengthCmd; 101 delete fDetectorMaterialCmd; 110 delete fDetectorMaterialCmd; 102 delete fNbLayersCmd; 111 delete fNbLayersCmd; 103 delete fNbRhoCellsCmd; 112 delete fNbRhoCellsCmd; 104 delete fNbPhiCellsCmd; 113 delete fNbPhiCellsCmd; 105 delete fDetectorDir; 114 delete fDetectorDir; 106 delete fExampleDir; 115 delete fExampleDir; 107 } 116 } 108 117 109 //....oooOO0OOooo........oooOO0OOooo........oo 118 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 110 119 111 void Par03DetectorMessenger::SetNewValue(G4UIc << 120 void Par03DetectorMessenger::SetNewValue(G4UIcommand* aCommand, >> 121 G4String aNewValue) 112 { 122 { 113 if (aCommand == fPrintCmd) { << 123 if(aCommand == fPrintCmd) >> 124 { 114 fDetector->Print(); 125 fDetector->Print(); 115 } 126 } 116 else if (aCommand == fDetectorRadiusCmd) { << 127 else if(aCommand == fDetectorRadiusCmd) >> 128 { 117 fDetector->SetRadius(fDetectorRadiusCmd->G 129 fDetector->SetRadius(fDetectorRadiusCmd->GetNewDoubleValue(aNewValue)); 118 } 130 } 119 else if (aCommand == fDetectorLengthCmd) { << 131 else if(aCommand == fDetectorLengthCmd) >> 132 { 120 fDetector->SetLength(fDetectorRadiusCmd->G 133 fDetector->SetLength(fDetectorRadiusCmd->GetNewDoubleValue(aNewValue)); 121 } 134 } 122 else if (aCommand == fDetectorMaterialCmd) { << 135 else if(aCommand == fDetectorMaterialCmd) >> 136 { 123 fDetector->SetMaterial(aNewValue); 137 fDetector->SetMaterial(aNewValue); 124 } 138 } 125 else if (aCommand == fNbLayersCmd) { << 139 else if(aCommand == fNbLayersCmd) >> 140 { 126 fDetector->SetNbOfLayers(fNbLayersCmd->Get 141 fDetector->SetNbOfLayers(fNbLayersCmd->GetNewIntValue(aNewValue)); 127 } 142 } 128 else if (aCommand == fNbRhoCellsCmd) { << 143 else if(aCommand == fNbRhoCellsCmd) >> 144 { 129 fDetector->SetNbOfRhoCells(fNbRhoCellsCmd- 145 fDetector->SetNbOfRhoCells(fNbRhoCellsCmd->GetNewIntValue(aNewValue)); 130 } 146 } 131 else if (aCommand == fNbPhiCellsCmd) { << 147 else if(aCommand == fNbPhiCellsCmd) >> 148 { 132 fDetector->SetNbOfPhiCells(fNbPhiCellsCmd- 149 fDetector->SetNbOfPhiCells(fNbPhiCellsCmd->GetNewIntValue(aNewValue)); 133 } 150 } 134 } 151 } 135 152 136 //....oooOO0OOooo........oooOO0OOooo........oo 153 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 137 154 138 G4String Par03DetectorMessenger::GetCurrentVal 155 G4String Par03DetectorMessenger::GetCurrentValue(G4UIcommand* aCommand) 139 { 156 { 140 G4String cv; 157 G4String cv; 141 158 142 if (aCommand == fDetectorRadiusCmd) { << 159 if(aCommand == fDetectorRadiusCmd) >> 160 { 143 cv = fDetectorRadiusCmd->ConvertToString(f 161 cv = fDetectorRadiusCmd->ConvertToString(fDetector->GetRadius(), "mm"); 144 } 162 } 145 else if (aCommand == fDetectorLengthCmd) { << 163 else if(aCommand == fDetectorLengthCmd) >> 164 { 146 cv = fDetectorLengthCmd->ConvertToString(f 165 cv = fDetectorLengthCmd->ConvertToString(fDetector->GetLength(), "mm"); 147 } 166 } 148 else if (aCommand == fDetectorMaterialCmd) { << 167 else if(aCommand == fDetectorMaterialCmd) >> 168 { 149 cv = fDetector->GetMaterial(); 169 cv = fDetector->GetMaterial(); 150 } 170 } 151 else if (aCommand == fNbLayersCmd) { << 171 else if(aCommand == fNbLayersCmd) >> 172 { 152 cv = fNbLayersCmd->ConvertToString(fDetect 173 cv = fNbLayersCmd->ConvertToString(fDetector->GetNbOfLayers()); 153 } 174 } 154 else if (aCommand == fNbPhiCellsCmd) { << 175 else if(aCommand == fNbPhiCellsCmd) >> 176 { 155 cv = fNbPhiCellsCmd->ConvertToString(fDete 177 cv = fNbPhiCellsCmd->ConvertToString(fDetector->GetNbOfPhiCells()); 156 } 178 } 157 else if (aCommand == fNbRhoCellsCmd) { << 179 else if(aCommand == fNbRhoCellsCmd) >> 180 { 158 cv = fNbRhoCellsCmd->ConvertToString(fDete 181 cv = fNbRhoCellsCmd->ConvertToString(fDetector->GetNbOfRhoCells()); 159 } 182 } 160 return cv; 183 return cv; 161 } 184 }