Geant4 Cross Reference |
>> 1 // This code implementation is the intellectual property of >> 2 // the GEANT4 collaboration. 1 // 3 // 2 // ******************************************* << 4 // By copying, distributing or modifying the Program (or any work 3 // * License and Disclaimer << 5 // based on the Program) you indicate your acceptance of this statement, 4 // * << 6 // and all its terms. 5 // * The Geant4 software is copyright of th << 7 // 6 // * the Geant4 Collaboration. It is provided << 8 // $Id: G4UIcmdWithADoubleAndUnit.cc,v 1.2 1999/12/15 14:50:41 gunter Exp $ 7 // * conditions of the Geant4 Software License << 9 // GEANT4 tag $Name: geant4-03-01 $ 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 // 10 // 26 // G4UIcmdWithADoubleAndUnit << 27 // 11 // 28 // Author: M.Asai, 1998 << 29 // ------------------------------------------- << 30 12 31 #include "G4UIcmdWithADoubleAndUnit.hh" 13 #include "G4UIcmdWithADoubleAndUnit.hh" >> 14 #include "g4std/strstream" 32 15 33 #include "G4Tokenizer.hh" << 16 G4UIcmdWithADoubleAndUnit::G4UIcmdWithADoubleAndUnit 34 #include "G4UIcommandStatus.hh" << 17 (const char * theCommandPath,G4UImessenger * theMessenger) 35 #include "G4UnitsTable.hh" << 18 :G4UIcommand(theCommandPath,theMessenger) 36 << 37 #include <sstream> << 38 #include <vector> << 39 << 40 // ------------------------------------------- << 41 G4UIcmdWithADoubleAndUnit::G4UIcmdWithADoubleA << 42 << 43 : G4UIcommand(theCommandPath, theMessenger) << 44 { 19 { 45 auto* dblParam = new G4UIparameter('d'); << 20 G4UIparameter * dblParam = new G4UIparameter('d'); 46 SetParameter(dblParam); 21 SetParameter(dblParam); 47 auto* untParam = new G4UIparameter('s'); << 22 G4UIparameter * untParam = new G4UIparameter('s'); 48 untParam->SetParameterName("Unit"); << 49 SetParameter(untParam); 23 SetParameter(untParam); 50 SetCommandType(WithADoubleAndUnitCmd); << 24 untParam->SetParameterName("Unit"); 51 } << 52 << 53 // ------------------------------------------- << 54 G4int G4UIcmdWithADoubleAndUnit::DoIt(const G4 << 55 { << 56 std::vector<G4String> token_vector; << 57 G4Tokenizer tkn(parameterList); << 58 G4String str; << 59 while (!(str = tkn()).empty()) { << 60 token_vector.push_back(str); << 61 } << 62 << 63 // convert a value in default unit << 64 G4String converted_parameter; << 65 G4String default_unit = GetParameter(1)->Get << 66 if (!default_unit.empty() && token_vector.si << 67 if (CategoryOf(token_vector[1]) != Categor << 68 return fParameterOutOfCandidates + 1; << 69 } << 70 G4double value_given = ValueOf(token_vecto << 71 G4double value_default = ValueOf(default_u << 72 G4double value = ConvertToDouble(token_vec << 73 // reconstruct parameter list << 74 converted_parameter += ConvertToString(val << 75 converted_parameter += " "; << 76 converted_parameter += default_unit; << 77 for (std::size_t i = 2; i < token_vector.s << 78 converted_parameter += " "; << 79 converted_parameter += token_vector[i]; << 80 } << 81 } << 82 else { << 83 converted_parameter = parameterList; << 84 } << 85 << 86 return G4UIcommand::DoIt(converted_parameter << 87 } 25 } 88 26 89 // ------------------------------------------- << 27 G4double G4UIcmdWithADoubleAndUnit::GetNewDoubleValue(G4String paramString) 90 G4double G4UIcmdWithADoubleAndUnit::GetNewDoub << 91 { 28 { 92 return ConvertToDimensionedDouble(paramStrin << 29 G4double vl; >> 30 char unts[30]; >> 31 >> 32 const char* t = paramString; >> 33 G4std::istrstream is((char*)t); >> 34 is >> vl >> unts; >> 35 G4String unt = unts; >> 36 >> 37 return (vl*ValueOf(unt)); 93 } 38 } 94 39 95 // ------------------------------------------- << 40 G4double G4UIcmdWithADoubleAndUnit::GetNewDoubleRawValue(G4String paramString) 96 G4double G4UIcmdWithADoubleAndUnit::GetNewDoub << 97 { 41 { 98 G4double vl; 42 G4double vl; 99 char unts[30]; 43 char unts[30]; 100 << 44 101 std::istringstream is(paramString); << 45 const char* t = paramString; >> 46 G4std::istrstream is((char*)t); 102 is >> vl >> unts; 47 is >> vl >> unts; 103 << 48 104 return vl; 49 return vl; 105 } 50 } 106 51 107 // ------------------------------------------- << 52 G4double G4UIcmdWithADoubleAndUnit::GetNewUnitValue(G4String paramString) 108 G4double G4UIcmdWithADoubleAndUnit::GetNewUnit << 109 { 53 { 110 G4double vl; 54 G4double vl; 111 char unts[30]; 55 char unts[30]; 112 << 56 113 std::istringstream is(paramString); << 57 const char* t = paramString; >> 58 G4std::istrstream is((char*)t); 114 is >> vl >> unts; 59 is >> vl >> unts; 115 G4String unt = unts; 60 G4String unt = unts; 116 << 61 117 return ValueOf(unt); 62 return ValueOf(unt); 118 } 63 } 119 64 120 // ------------------------------------------- << 65 G4String G4UIcmdWithADoubleAndUnit::ConvertToString 121 G4String G4UIcmdWithADoubleAndUnit::ConvertToS << 66 (G4double dblValue,const char * unitName) 122 { 67 { 123 G4UIparameter* unitParam = GetParameter(1); << 68 G4String unt = unitName; 124 G4String canList = unitParam->GetParameterCa << 69 G4double uv = ValueOf(unitName); 125 G4Tokenizer candidateTokenizer(canList); << 70 126 G4String aToken = candidateTokenizer(); << 71 char st[50]; 127 std::ostringstream os; << 72 G4std::ostrstream os(st,50); 128 os << G4BestUnit(val, CategoryOf(aToken)); << 73 os << dblValue/uv << " " << unitName << '\0'; 129 << 74 G4String vl = st; 130 G4String st = os.str(); << 75 return vl; 131 return st; << 76 } 132 } << 77 133 << 78 void G4UIcmdWithADoubleAndUnit::SetParameterName 134 // ------------------------------------------- << 79 (const char * theName,G4bool omittable,G4bool currentAsDefault) 135 G4String G4UIcmdWithADoubleAndUnit::ConvertToS << 136 { << 137 G4UIparameter* unitParam = GetParameter(1); << 138 G4String st; << 139 if (unitParam->IsOmittable()) { << 140 st = ConvertToString(val, unitParam->GetDe << 141 } << 142 else { << 143 st = ConvertToStringWithBestUnit(val); << 144 } << 145 return st; << 146 } << 147 << 148 // ------------------------------------------- << 149 void G4UIcmdWithADoubleAndUnit::SetParameterNa << 150 << 151 { 80 { 152 G4UIparameter* theParam = GetParameter(0); << 81 G4UIparameter * theParam = GetParameter(0); 153 theParam->SetParameterName(theName); 82 theParam->SetParameterName(theName); 154 theParam->SetOmittable(omittable); 83 theParam->SetOmittable(omittable); 155 theParam->SetCurrentAsDefault(currentAsDefau 84 theParam->SetCurrentAsDefault(currentAsDefault); 156 } 85 } 157 86 158 // ------------------------------------------- << 159 void G4UIcmdWithADoubleAndUnit::SetDefaultValu 87 void G4UIcmdWithADoubleAndUnit::SetDefaultValue(G4double defVal) 160 { 88 { 161 G4UIparameter* theParam = GetParameter(0); << 89 G4UIparameter * theParam = GetParameter(0); 162 theParam->SetDefaultValue(defVal); 90 theParam->SetDefaultValue(defVal); 163 } 91 } 164 92 165 // ------------------------------------------- << 93 void G4UIcmdWithADoubleAndUnit::SetUnitCategory(const char * unitCategory) 166 void G4UIcmdWithADoubleAndUnit::SetUnitCategor << 167 { 94 { 168 SetUnitCandidates(UnitsList(unitCategory)); 95 SetUnitCandidates(UnitsList(unitCategory)); 169 } 96 } 170 97 171 // ------------------------------------------- << 98 void G4UIcmdWithADoubleAndUnit::SetUnitCandidates(const char * candidateList) 172 void G4UIcmdWithADoubleAndUnit::SetUnitCandida << 173 { 99 { 174 G4UIparameter* untParam = GetParameter(1); << 100 G4UIparameter * untParam = GetParameter(1); 175 G4String canList = candidateList; 101 G4String canList = candidateList; 176 untParam->SetParameterCandidates(canList); 102 untParam->SetParameterCandidates(canList); 177 } 103 } 178 104 179 // ------------------------------------------- << 105 void G4UIcmdWithADoubleAndUnit::SetDefaultUnit(const char * defUnit) 180 void G4UIcmdWithADoubleAndUnit::SetDefaultUnit << 181 { 106 { 182 G4UIparameter* untParam = GetParameter(1); << 107 G4UIparameter * untParam = GetParameter(1); 183 untParam->SetOmittable(true); 108 untParam->SetOmittable(true); 184 untParam->SetDefaultValue(defUnit); 109 untParam->SetDefaultValue(defUnit); 185 SetUnitCategory(CategoryOf(defUnit)); 110 SetUnitCategory(CategoryOf(defUnit)); 186 } 111 } >> 112 187 113