Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 #include "Par03DetectorMessenger.hh" 27 28 #include "Par03DetectorConstruction.hh" 29 30 #include "G4UIcmdWithADoubleAndUnit.hh" 31 #include "G4UIcmdWithAString.hh" 32 #include "G4UIcmdWithAnInteger.hh" 33 #include "G4UIcmdWithoutParameter.hh" 34 #include "G4UIdirectory.hh" 35 36 //....oooOO0OOooo........oooOO0OOooo........oo 37 38 Par03DetectorMessenger::Par03DetectorMessenger 39 : G4UImessenger(), fDetector(aDetector) 40 { 41 fExampleDir = new G4UIdirectory("/Par03/"); 42 fExampleDir->SetGuidance("UI commands specif 43 44 fDetectorDir = new G4UIdirectory("/Par03/det 45 fDetectorDir->SetGuidance("Detector construc 46 47 fPrintCmd = new G4UIcmdWithoutParameter("/Pa 48 fPrintCmd->SetGuidance("Print current settin 49 50 fDetectorRadiusCmd = new G4UIcmdWithADoubleA 51 fDetectorRadiusCmd->SetGuidance("Set tranver 52 fDetectorRadiusCmd->SetParameterName("Size", 53 fDetectorRadiusCmd->SetRange("Size>0."); 54 fDetectorRadiusCmd->SetUnitCategory("Length" 55 fDetectorRadiusCmd->AvailableForStates(G4Sta 56 fDetectorRadiusCmd->SetToBeBroadcasted(false 57 58 fDetectorLengthCmd = new G4UIcmdWithADoubleA 59 fDetectorLengthCmd->SetGuidance("Set length 60 fDetectorLengthCmd->SetParameterName("Size", 61 fDetectorLengthCmd->SetRange("Size>0."); 62 fDetectorLengthCmd->SetUnitCategory("Length" 63 fDetectorLengthCmd->AvailableForStates(G4Sta 64 fDetectorLengthCmd->SetToBeBroadcasted(false 65 66 fDetectorMaterialCmd = new G4UIcmdWithAStrin 67 fDetectorMaterialCmd->SetGuidance("Material 68 fDetectorMaterialCmd->SetParameterName("Name 69 fDetectorMaterialCmd->AvailableForStates(G4S 70 fDetectorMaterialCmd->SetToBeBroadcasted(fal 71 72 fNbLayersCmd = new G4UIcmdWithAnInteger("/Pa 73 fNbLayersCmd->SetGuidance("Set number of lay 74 fNbLayersCmd->SetParameterName("NbLayers", f 75 fNbLayersCmd->SetRange("NbLayers>0"); 76 fNbLayersCmd->AvailableForStates(G4State_Pre 77 fNbLayersCmd->SetToBeBroadcasted(false); 78 79 fNbRhoCellsCmd = new G4UIcmdWithAnInteger("/ 80 fNbRhoCellsCmd->SetGuidance("Set number of c 81 fNbRhoCellsCmd->SetParameterName("NbRhoCells 82 fNbRhoCellsCmd->SetRange("NbRhoCells>0"); 83 fNbRhoCellsCmd->AvailableForStates(G4State_P 84 fNbRhoCellsCmd->SetToBeBroadcasted(false); 85 86 fNbPhiCellsCmd = new G4UIcmdWithAnInteger("/ 87 fNbPhiCellsCmd->SetGuidance("Set number of c 88 fNbPhiCellsCmd->SetParameterName("NbPhiCells 89 fNbPhiCellsCmd->SetRange("NbPhiCells>0"); 90 fNbPhiCellsCmd->AvailableForStates(G4State_P 91 fNbPhiCellsCmd->SetToBeBroadcasted(false); 92 } 93 94 //....oooOO0OOooo........oooOO0OOooo........oo 95 96 Par03DetectorMessenger::~Par03DetectorMessenge 97 { 98 delete fPrintCmd; 99 delete fDetectorRadiusCmd; 100 delete fDetectorLengthCmd; 101 delete fDetectorMaterialCmd; 102 delete fNbLayersCmd; 103 delete fNbRhoCellsCmd; 104 delete fNbPhiCellsCmd; 105 delete fDetectorDir; 106 delete fExampleDir; 107 } 108 109 //....oooOO0OOooo........oooOO0OOooo........oo 110 111 void Par03DetectorMessenger::SetNewValue(G4UIc 112 { 113 if (aCommand == fPrintCmd) { 114 fDetector->Print(); 115 } 116 else if (aCommand == fDetectorRadiusCmd) { 117 fDetector->SetRadius(fDetectorRadiusCmd->G 118 } 119 else if (aCommand == fDetectorLengthCmd) { 120 fDetector->SetLength(fDetectorRadiusCmd->G 121 } 122 else if (aCommand == fDetectorMaterialCmd) { 123 fDetector->SetMaterial(aNewValue); 124 } 125 else if (aCommand == fNbLayersCmd) { 126 fDetector->SetNbOfLayers(fNbLayersCmd->Get 127 } 128 else if (aCommand == fNbRhoCellsCmd) { 129 fDetector->SetNbOfRhoCells(fNbRhoCellsCmd- 130 } 131 else if (aCommand == fNbPhiCellsCmd) { 132 fDetector->SetNbOfPhiCells(fNbPhiCellsCmd- 133 } 134 } 135 136 //....oooOO0OOooo........oooOO0OOooo........oo 137 138 G4String Par03DetectorMessenger::GetCurrentVal 139 { 140 G4String cv; 141 142 if (aCommand == fDetectorRadiusCmd) { 143 cv = fDetectorRadiusCmd->ConvertToString(f 144 } 145 else if (aCommand == fDetectorLengthCmd) { 146 cv = fDetectorLengthCmd->ConvertToString(f 147 } 148 else if (aCommand == fDetectorMaterialCmd) { 149 cv = fDetector->GetMaterial(); 150 } 151 else if (aCommand == fNbLayersCmd) { 152 cv = fNbLayersCmd->ConvertToString(fDetect 153 } 154 else if (aCommand == fNbPhiCellsCmd) { 155 cv = fNbPhiCellsCmd->ConvertToString(fDete 156 } 157 else if (aCommand == fNbRhoCellsCmd) { 158 cv = fNbRhoCellsCmd->ConvertToString(fDete 159 } 160 return cv; 161 }