Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/graphics_reps/src/G4AttCheck.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /graphics_reps/src/G4AttCheck.cc (Version 11.3.0) and /graphics_reps/src/G4AttCheck.cc (Version 9.5)


  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 //                                                 26 //
                                                   >>  27 // $Id: G4AttCheck.cc,v 1.16 2010-12-07 09:36:59 allison Exp $
                                                   >>  28 // GEANT4 tag $Name: not supported by cvs2svn $
 27                                                    29 
 28 #include "G4AttCheck.hh"                           30 #include "G4AttCheck.hh"
 29                                                    31 
 30 #include "globals.hh"                              32 #include "globals.hh"
 31                                                    33 
 32 #include "G4AttDef.hh"                             34 #include "G4AttDef.hh"
 33 #include "G4AttDefStore.hh"                        35 #include "G4AttDefStore.hh"
 34 #include "G4AttValue.hh"                           36 #include "G4AttValue.hh"
 35 #include "G4UnitsTable.hh"                         37 #include "G4UnitsTable.hh"
 36 #include "G4UIcommand.hh"                          38 #include "G4UIcommand.hh"
 37                                                    39 
 38 G4ThreadLocal G4bool G4AttCheck::fFirst = true << 
 39                                                << 
 40 G4ThreadLocal std::set<G4String> *G4AttCheck:: << 
 41                                                << 
 42 G4ThreadLocal std::map<G4String,G4String> *G4A << 
 43                                                << 
 44 G4ThreadLocal std::set<G4String> *G4AttCheck:: << 
 45                                                << 
 46 G4ThreadLocal std::set<G4String> *G4AttCheck:: << 
 47                                                << 
 48 G4ThreadLocal std::set<G4String> *G4AttCheck:: << 
 49                                                << 
 50 G4AttCheck::G4AttCheck                             40 G4AttCheck::G4AttCheck
 51 (const std::vector<G4AttValue>* values,            41 (const std::vector<G4AttValue>* values,
 52  const std::map<G4String,G4AttDef>* definition     42  const std::map<G4String,G4AttDef>* definitions):
 53   fpValues(values),                                43   fpValues(values),
 54   fpDefinitions(definitions)                       44   fpDefinitions(definitions)
 55 {                                                  45 {
 56   Init();                                      << 
 57                                                << 
 58   if (fFirst) {  // Initialise static containe     46   if (fFirst) {  // Initialise static containers.
 59     fFirst = false;                                47     fFirst = false;
 60                                                    48 
 61     // Legal Unit Category Types...                49     // Legal Unit Category Types...
 62     fUnitCategories->insert("Length");         <<  50     fUnitCategories.insert("Length");
 63     fUnitCategories->insert("Energy");         <<  51     fUnitCategories.insert("Energy");
 64     fUnitCategories->insert("Time");           <<  52     fUnitCategories.insert("Time");
 65     fUnitCategories->insert("Electric charge") <<  53     fUnitCategories.insert("Electric charge");
 66     fUnitCategories->insert("Volumic Mass");   <<  54     fUnitCategories.insert("Volumic Mass");  // (Density)
 67                                                    55 
 68     // Corresponding Standard Units...             56     // Corresponding Standard Units...
 69     (*fStandardUnits)["Length"] = "m";         <<  57     fStandardUnits["Length"] = "m";
 70     (*fStandardUnits)["Energy"] = "MeV";       <<  58     fStandardUnits["Energy"] = "MeV";
 71     (*fStandardUnits)["Time"] = "ns";          <<  59     fStandardUnits["Time"] = "ns";
 72     (*fStandardUnits)["Electric charge"] = "e+ <<  60     fStandardUnits["Electric charge"] = "e+";
 73     (*fStandardUnits)["Volumic Mass"] = "kg/m3 <<  61     fStandardUnits["Volumic Mass"] = "kg/m3";
 74                                                    62 
 75     // Legal Categories...                         63     // Legal Categories...
 76     fCategories->insert("Bookkeeping");        <<  64     fCategories.insert("Bookkeeping");
 77     fCategories->insert("Draw");               <<  65     fCategories.insert("Draw");
 78     fCategories->insert("Physics");            <<  66     fCategories.insert("Physics");
 79     fCategories->insert("PickAction");         <<  67     fCategories.insert("PickAction");
 80     fCategories->insert("Association");        <<  68     fCategories.insert("Association");
 81                                                    69 
 82     // Legal units...                              70     // Legal units...
 83     fUnits->insert("");                        <<  71     fUnits.insert("");
 84     fUnits->insert("G4BestUnit");              <<  72     fUnits.insert("G4BestUnit");
 85     // ...plus any legal unit symbol ("MeV", "     73     // ...plus any legal unit symbol ("MeV", "km", etc.)...
 86     G4UnitsTable& units = G4UnitDefinition::Ge     74     G4UnitsTable& units = G4UnitDefinition::GetUnitsTable();
 87     for (size_t i = 0; i < units.size(); ++i)      75     for (size_t i = 0; i < units.size(); ++i) {
 88       if (fUnitCategories->find(units[i]->GetN <<  76       if (fUnitCategories.find(units[i]->GetName()) !=
 89           fUnitCategories->end()) {            <<  77     fUnitCategories.end()) {
 90         //G4cout << units[i]->GetName() << G4e <<  78   //G4cout << units[i]->GetName() << G4endl;
 91         G4UnitsContainer& container = units[i] <<  79   G4UnitsContainer& container = units[i]->GetUnitsList();
 92         for (auto & j : container) {           <<  80   for (size_t j = 0; j < container.size(); ++j) {
 93           //G4cout << container[j]->GetName()  <<  81     //G4cout << container[j]->GetName() << ' '
 94           //       << container[j]->GetSymbol( <<  82     //       << container[j]->GetSymbol() << G4endl;
 95           fUnits->insert(j->GetSymbol());      <<  83     fUnits.insert(container[j]->GetSymbol());
 96         }                                      <<  84   }
 97       }                                            85       }
 98     }                                              86     }
 99                                                    87 
100     // Legal Value Types...                        88     // Legal Value Types...
101     fValueTypes->insert("G4String");           <<  89     fValueTypes.insert("G4String");
102     fValueTypes->insert("G4int");              <<  90     fValueTypes.insert("G4int");
103     fValueTypes->insert("G4double");           <<  91     fValueTypes.insert("G4double");
104     fValueTypes->insert("G4ThreeVector");      <<  92     fValueTypes.insert("G4ThreeVector");
105     fValueTypes->insert("G4bool");             <<  93     fValueTypes.insert("G4bool");
106   }                                                94   }
107 }                                                  95 }
108                                                    96 
109 void G4AttCheck::Init()                        <<  97 G4AttCheck::~G4AttCheck() {}
110 {                                              << 
111   if (fValueTypes == nullptr) fValueTypes = ne << 
112   if (fUnits == nullptr) fUnits = new std::set << 
113   if (fCategories == nullptr) fCategories = ne << 
114   if (fStandardUnits == nullptr) fStandardUnit << 
115   if (fUnitCategories == nullptr) fUnitCategor << 
116 }                                              << 
117                                                    98 
118 G4bool G4AttCheck::Check(const G4String& leade <<  99 G4bool G4AttCheck::fFirst = true;
119 {                                              << 100 
                                                   >> 101 std::set<G4String> G4AttCheck::fUnitCategories;
                                                   >> 102 
                                                   >> 103 std::map<G4String,G4String> G4AttCheck::fStandardUnits;
                                                   >> 104 
                                                   >> 105 std::set<G4String> G4AttCheck::fCategories;
                                                   >> 106 
                                                   >> 107 std::set<G4String> G4AttCheck::fUnits;
                                                   >> 108 
                                                   >> 109 std::set<G4String> G4AttCheck::fValueTypes;
                                                   >> 110 
                                                   >> 111 G4bool G4AttCheck::Check(const G4String& leader) const {
120   // Check only.  Silent unless error - then G    112   // Check only.  Silent unless error - then G4cerr.  Returns error.
121   G4bool error = false;                           113   G4bool error = false;
122   static G4ThreadLocal G4int iError = 0;       << 114   static G4int iError = 0;
123   G4bool print = false;                           115   G4bool print = false;
124   if (iError < 10 || iError%100 == 0) {           116   if (iError < 10 || iError%100 == 0) {
125     print = true;                                 117     print = true;
126   }                                               118   }
127   using namespace std;                            119   using namespace std;
128   if (fpValues == nullptr) return error;  // A << 120   if (!fpValues) return error;  // A null values vector is a valid situation.
129   if (fpDefinitions == nullptr) {              << 121   if (!fpDefinitions) {
130     ++iError;                                     122     ++iError;
131     error = true;                                 123     error = true;
132     if (print) {                                  124     if (print) {
133       G4cerr <<                                   125       G4cerr <<
134         "\n*********************************** << 126   "\n*******************************************************";
135       if (!leader.empty()) {                   << 127       if (leader != "") {
136         G4cerr << '\n' << leader;              << 128   G4cerr << '\n' << leader;
137       }                                           129       }
138       G4cerr <<                                   130       G4cerr <<
139         "\nG4AttCheck: ERROR " << iError << ": << 131   "\nG4AttCheck: ERROR " << iError << ": Null definitions pointer"
140         "\n*********************************** << 132   "\n*******************************************************"
141              << G4endl;                        << 133        << G4endl;
142     }                                             134     }
143     return error;                                 135     return error;
144   }                                               136   }
145   vector<G4AttValue>::const_iterator iValue;      137   vector<G4AttValue>::const_iterator iValue;
146   for (iValue = fpValues->begin(); iValue != f    138   for (iValue = fpValues->begin(); iValue != fpValues->end(); ++iValue) {
147     const G4String& valueName = iValue->GetNam    139     const G4String& valueName = iValue->GetName();
148     const G4String& value = iValue->GetValue()    140     const G4String& value = iValue->GetValue();
149     // NOLINTNEXTLINE(modernize-use-auto): Exp << 
150     map<G4String,G4AttDef>::const_iterator iDe    141     map<G4String,G4AttDef>::const_iterator iDef =
151       fpDefinitions->find(valueName);             142       fpDefinitions->find(valueName);
152     if (iDef == fpDefinitions->end()) {           143     if (iDef == fpDefinitions->end()) {
153       ++iError;                                   144       ++iError;
154       error = true;                               145       error = true;
155       if (print) {                                146       if (print) {
156         G4cerr <<                              << 147   G4cerr <<
157           "\n********************************* << 148     "\n*******************************************************";
158         if (!leader.empty()) {                 << 149   if (leader != "") {
159           G4cerr << '\n' << leader;            << 150     G4cerr << '\n' << leader;
160         }                                      << 151   }
161         G4cerr <<                              << 152   G4cerr <<
162           "\nG4AttCheck: ERROR " << iError <<  << 153     "\nG4AttCheck: ERROR " << iError << ": No G4AttDef for G4AttValue \""
163                <<  valueName << "\": " << valu << 154          <<  valueName << "\": " << value <<
164           "\n********************************* << 155     "\n*******************************************************"
165                << G4endl;                      << 156          << G4endl;
166       }                                           157       }
167     } else {                                      158     } else {
168       const G4String& category = iDef->second.    159       const G4String& category = iDef->second.GetCategory();
169       const G4String& extra = iDef->second.Get    160       const G4String& extra = iDef->second.GetExtra();
170       const G4String& valueType = iDef->second    161       const G4String& valueType = iDef->second.GetValueType();
171       if (fCategories->find(category) == fCate << 162       if (fCategories.find(category) == fCategories.end()) {
172         ++iError;                              << 163   ++iError;
173         error = true;                          << 164   error = true;
174         if (print) {                           << 165   if (print) {
175           G4cerr <<                            << 166     G4cerr <<
176             "\n******************************* << 167       "\n*******************************************************";
177           if (!leader.empty()) {               << 168     if (leader != "") {
178             G4cerr << '\n' << leader;          << 169       G4cerr << '\n' << leader;
179           }                                    << 170     }
180           G4cerr <<                            << 171     G4cerr <<
181             "\nG4AttCheck: ERROR " << iError < << 172       "\nG4AttCheck: ERROR " << iError << ": Illegal Category Field \""
182                  << category << "\" for G4AttV << 173      << category << "\" for G4AttValue \""
183                  << valueName << "\": " << val << 174      << valueName << "\": " << value <<
184             "\n  Possible Categories:";        << 175       "\n  Possible Categories:";
185           set<G4String>::iterator i;           << 176     set<G4String>::iterator i;
186           for (i = fCategories->begin(); i !=  << 177     for (i = fCategories.begin(); i != fCategories.end(); ++i) {
187             G4cerr << ' ' << *i;               << 178       G4cerr << ' ' << *i;
188           }                                    << 179     }
189           G4cerr <<                            << 180     G4cerr <<
190             "\n******************************* << 181       "\n*******************************************************"
191                  << G4endl;                    << 182      << G4endl;
192         }                                      << 183   }
193       }                                           184       }
194       if(category == "Physics" && fUnits->find << 185       if(category == "Physics" && fUnits.find(extra) == fUnits.end()) {
195         ++iError;                              << 186   ++iError;
196         error = true;                          << 187   error = true;
197         if (print) {                           << 188   if (print) {
198           G4cerr <<                            << 189     G4cerr <<
199             "\n******************************* << 190       "\n*******************************************************";
200           if (!leader.empty()) {               << 191     if (leader != "") {
201             G4cerr << '\n' << leader;          << 192       G4cerr << '\n' << leader;
202           }                                    << 193     }
203           G4cerr <<                            << 194     G4cerr <<
204             "\nG4AttCheck: ERROR " << iError < << 195       "\nG4AttCheck: ERROR " << iError << ": Illegal Extra field \""
205                  << extra << "\" for G4AttValu << 196      << extra << "\" for G4AttValue \""
206                  << valueName << "\": " << val << 197      << valueName << "\": " << value <<
207             "\n  Possible Extra fields if Cate << 198       "\n  Possible Extra fields if Category==\"Physics\":\n    ";
208           set<G4String>::iterator i;           << 199     set<G4String>::iterator i;
209           for (i = fUnits->begin(); i != fUnit << 200     for (i = fUnits.begin(); i != fUnits.end(); ++i) {
210             G4cerr << ' ' << *i;               << 201       G4cerr << ' ' << *i;
211           }                                    << 202     }
212           G4cerr <<                            << 203     G4cerr <<
213             "\n******************************* << 204       "\n*******************************************************"
214                  << G4endl;                    << 205      << G4endl;
215         }                                      << 206   }
216       }                                           207       }
217       if (fValueTypes->find(valueType) == fVal << 208       if (fValueTypes.find(valueType) == fValueTypes.end()) {
218         ++iError;                              << 209   ++iError;
219         error = true;                          << 210   error = true;
220         if (print) {                           << 211   if (print) {
221           G4cerr <<                            << 212     G4cerr <<
222             "\n******************************* << 213       "\n*******************************************************";
223           if (!leader.empty()) {               << 214     if (leader != "") {
224             G4cerr << '\n' << leader;          << 215       G4cerr << '\n' << leader;
225           }                                    << 216     }
226           G4cerr <<                            << 217     G4cerr <<
227             "\nG4AttCheck: ERROR " << iError < << 218       "\nG4AttCheck: ERROR " << iError << ": Illegal Value Type field \""
228                  << valueType << "\" for G4Att << 219      << valueType << "\" for G4AttValue \""
229                  << valueName << "\": " << val << 220      << valueName << "\": " << value <<
230             "\n  Possible Value Types:";       << 221       "\n  Possible Value Types:";
231           set<G4String>::iterator i;           << 222     set<G4String>::iterator i;
232           for (i = fValueTypes->begin(); i !=  << 223     for (i = fValueTypes.begin(); i != fValueTypes.end(); ++i) {
233             G4cerr << ' ' << *i;               << 224       G4cerr << ' ' << *i;
234           }                                    << 225     }
235           G4cerr <<                            << 226     G4cerr <<
236             "\n******************************* << 227       "\n*******************************************************"
237                << G4endl;                      << 228          << G4endl;
238         }                                      << 229   }
239       }                                           230       }
240     }                                             231     }
241   }                                               232   }
242   return error;                                   233   return error;
243 }                                                 234 }
244                                                   235 
245 std::ostream& operator<< (std::ostream& os, co    236 std::ostream& operator<< (std::ostream& os, const G4AttCheck& ac)
246 {                                                 237 {
247   using namespace std;                            238   using namespace std;
248   if (ac.fpDefinitions == nullptr) {           << 239   if (!ac.fpDefinitions) {
249     os << "G4AttCheck: ERROR: zero definitions    240     os << "G4AttCheck: ERROR: zero definitions pointer." << endl;
250     return os;                                    241     return os;
251   }                                               242   }
252   G4String storeKey;                              243   G4String storeKey;
253   if (G4AttDefStore::GetStoreKey(ac.fpDefiniti    244   if (G4AttDefStore::GetStoreKey(ac.fpDefinitions, storeKey)) {
254     os << storeKey << ':' << endl;                245     os << storeKey << ':' << endl;
255   }                                               246   }
256   if (ac.fpValues == nullptr) {                << 247   if (!ac.fpValues) {
257     // A null values vector is a valid situati    248     // A null values vector is a valid situation.
258     os << "G4AttCheck: zero values pointer." <    249     os << "G4AttCheck: zero values pointer." << endl;
259     return os;                                    250     return os;
260   }                                               251   }
261   vector<G4AttValue>::const_iterator iValue;      252   vector<G4AttValue>::const_iterator iValue;
262   for (iValue = ac.fpValues->begin(); iValue !    253   for (iValue = ac.fpValues->begin(); iValue != ac.fpValues->end(); ++iValue) {
263     const G4String& valueName = iValue->GetNam    254     const G4String& valueName = iValue->GetName();
264     const G4String& value = iValue->GetValue()    255     const G4String& value = iValue->GetValue();
265     // NOLINTNEXTLINE(modernize-use-auto): Exp << 256     map<G4String,G4AttDef>::const_iterator iDef =
266     map<G4String,G4AttDef>::const_iterator iDe << 
267       ac.fpDefinitions->find(valueName);          257       ac.fpDefinitions->find(valueName);
268     G4bool error = false;                         258     G4bool error = false;
269     if (iDef == ac.fpDefinitions->end()) {        259     if (iDef == ac.fpDefinitions->end()) {
270       error = true;                               260       error = true;
271       os << "G4AttCheck: ERROR: No G4AttDef fo    261       os << "G4AttCheck: ERROR: No G4AttDef for G4AttValue \""
272          << valueName << "\": " << value << en << 262    << valueName << "\": " << value << endl;
273     } else {                                      263     } else {
274       const G4String& category = iDef->second.    264       const G4String& category = iDef->second.GetCategory();
275       const G4String& extra = iDef->second.Get    265       const G4String& extra = iDef->second.GetExtra();
276       const G4String& valueType = iDef->second    266       const G4String& valueType = iDef->second.GetValueType();
277       if (ac.fCategories->find(category) == ac << 267       if (ac.fCategories.find(category) == ac.fCategories.end()) {
278         error = true;                          << 268   error = true;
279         os <<                                  << 269   os <<
280           "G4AttCheck: ERROR: Illegal Category << 270     "G4AttCheck: ERROR: Illegal Category Field \"" << category
281            << "\" for G4AttValue \"" << valueN << 271      << "\" for G4AttValue \"" << valueName << "\": " << value <<
282           "\n  Possible Categories:";          << 272     "\n  Possible Categories:";
283         set<G4String>::iterator i;             << 273   set<G4String>::iterator i;
284         for (i = ac.fCategories->begin(); i != << 274   for (i = ac.fCategories.begin(); i != ac.fCategories.end(); ++i) {
285           os << ' ' << *i;                     << 275     os << ' ' << *i;
286         }                                      << 276   }
287         os << endl;                            << 277   os << endl;
288       }                                           278       }
289       if(category == "Physics" && ac.fUnits->f << 279       if(category == "Physics" && ac.fUnits.find(extra) == ac.fUnits.end()) {
290         error = true;                          << 280   error = true;
291         os <<                                  << 281   os <<
292           "G4AttCheck: ERROR: Illegal Extra fi << 282     "G4AttCheck: ERROR: Illegal Extra field \""<< extra
293            << "\" for G4AttValue \"" << valueN << 283      << "\" for G4AttValue \"" << valueName << "\": " << value <<
294           "\n  Possible Extra fields if Catego << 284     "\n  Possible Extra fields if Category==\"Physics\":\n    ";
295         set<G4String>::iterator i;             << 285   set<G4String>::iterator i;
296         for (i = ac.fUnits->begin(); i != ac.f << 286   for (i = ac.fUnits.begin(); i != ac.fUnits.end(); ++i) {
297           os << ' ' << *i;                     << 287     os << ' ' << *i;
298         }                                      << 288   }
299         os << endl;                            << 289   os << endl;
300       }                                           290       }
301       if (ac.fValueTypes->find(valueType) == a << 291       if (ac.fValueTypes.find(valueType) == ac.fValueTypes.end()) {
302         error = true;                          << 292   error = true;
303         os <<                                  << 293   os <<
304           "G4AttCheck: ERROR: Illegal Value Ty << 294     "G4AttCheck: ERROR: Illegal Value Type field \"" << valueType
305            << "\" for G4AttValue \"" << valueN << 295      << "\" for G4AttValue \"" << valueName << "\": " << value <<
306           "\n  Possible Value Types:";         << 296     "\n  Possible Value Types:";
307         set<G4String>::iterator i;             << 297   set<G4String>::iterator i;
308         for (i = ac.fValueTypes->begin(); i != << 298   for (i = ac.fValueTypes.begin(); i != ac.fValueTypes.end(); ++i) {
309           os << ' ' << *i;                     << 299     os << ' ' << *i;
310         }                                      << 300   }
311         os << endl;                            << 301   os << endl;
312       }                                           302       }
313     }                                             303     }
314     if (!error) {                                 304     if (!error) {
315       os << iDef->second.GetDesc()                305       os << iDef->second.GetDesc()
316          << " (" << valueName                  << 306    << " (" << valueName
317          << "): " << value;                    << 307    << "): " << value;
318       if (iDef->second.GetCategory() == "Physi    308       if (iDef->second.GetCategory() == "Physics" &&
319           !iDef->second.GetExtra().empty()) {  << 309     !iDef->second.GetExtra().empty()) {
320         os << " (" << iDef->second.GetExtra()  << 310   os << " (" << iDef->second.GetExtra() << ")";
321       }                                           311       }
322       os << endl;                                 312       os << endl;
323     }                                             313     }
324   }                                               314   }
325   return os;                                      315   return os;
326 }                                                 316 }
327                                                   317 
328 void G4AttCheck::AddValuesAndDefs                 318 void G4AttCheck::AddValuesAndDefs
329 (std::vector<G4AttValue>* standardValues,         319 (std::vector<G4AttValue>* standardValues,
330  std::map<G4String,G4AttDef>* standardDefiniti    320  std::map<G4String,G4AttDef>* standardDefinitions,
331  const G4String& oldName,                         321  const G4String& oldName,
332  const G4String& name,                            322  const G4String& name,
333  const G4String& value,                           323  const G4String& value,
334  const G4String& extra,                           324  const G4String& extra,
335  const G4String& description) const            << 325  const G4String& description) const {
336 {                                              << 
337   // Add new G4AttDeff...                         326   // Add new G4AttDeff...
338   standardValues->push_back(G4AttValue(name,va    327   standardValues->push_back(G4AttValue(name,value,""));
339   // Copy original G4AttDef...                    328   // Copy original G4AttDef...
340   (*standardDefinitions)[name] = fpDefinitions    329   (*standardDefinitions)[name] = fpDefinitions->find(oldName)->second;
341   // ...and make appropriate changes...           330   // ...and make appropriate changes...
342   (*standardDefinitions)[name].SetName(name);     331   (*standardDefinitions)[name].SetName(name);
343   (*standardDefinitions)[name].SetExtra(extra)    332   (*standardDefinitions)[name].SetExtra(extra);
344   if (!description.empty()) (*standardDefiniti << 333   if (description != "") (*standardDefinitions)[name].SetDesc(description);
345 }                                                 334 }
346                                                   335 
347 G4bool G4AttCheck::Standard                       336 G4bool G4AttCheck::Standard
348 (std::vector<G4AttValue>* standardValues,         337 (std::vector<G4AttValue>* standardValues,
349  std::map<G4String,G4AttDef>* standardDefiniti << 338  std::map<G4String,G4AttDef>* standardDefinitions) const {
350 {                                              << 
351   // Places standard versions in provided vect    339   // Places standard versions in provided vector and map and returns error.
352   // Assumes valid input.  Use Check to check.    340   // Assumes valid input.  Use Check to check.
353   using namespace std;                            341   using namespace std;
354   G4bool error = false;                           342   G4bool error = false;
355   vector<G4AttValue>::const_iterator iValue;      343   vector<G4AttValue>::const_iterator iValue;
356   for (iValue = fpValues->begin(); iValue != f    344   for (iValue = fpValues->begin(); iValue != fpValues->end(); ++iValue) {
357     const G4String& valueName = iValue->GetNam    345     const G4String& valueName = iValue->GetName();
358     const G4String& value = iValue->GetValue()    346     const G4String& value = iValue->GetValue();
359     // NOLINTNEXTLINE(modernize-use-auto): Exp << 
360     map<G4String,G4AttDef>::const_iterator iDe    347     map<G4String,G4AttDef>::const_iterator iDef =
361       fpDefinitions->find(valueName);             348       fpDefinitions->find(valueName);
362     if (iDef == fpDefinitions->end()) {           349     if (iDef == fpDefinitions->end()) {
363       error = true;                               350       error = true;
364     } else {                                      351     } else {
365       const G4String& category = iDef->second.    352       const G4String& category = iDef->second.GetCategory();
366       const G4String& extra = iDef->second.Get    353       const G4String& extra = iDef->second.GetExtra();
367       const G4String& valueType = iDef->second    354       const G4String& valueType = iDef->second.GetValueType();
368       if (fCategories->find(category) == fCate << 355       if (fCategories.find(category) == fCategories.end() ||
369           (category == "Physics" && fUnits->fi << 356     (category == "Physics" && fUnits.find(extra) == fUnits.end()) ||
370           fValueTypes->find(valueType) == fVal << 357     fValueTypes.find(valueType) == fValueTypes.end()) {
371         error = true;                          << 358   error = true;
372       } else {                                    359       } else {
373         if (category != "Physics") {  // Simpl << 360   if (category != "Physics") {  // Simply copy...
374           standardValues->push_back(*iValue);  << 361     standardValues->push_back(*iValue);
375           (*standardDefinitions)[valueName] =  << 362     (*standardDefinitions)[valueName] =
376             fpDefinitions->find(valueName)->se << 363       fpDefinitions->find(valueName)->second;
377         } else {  // "Physics"...              << 364   } else {  // "Physics"...
378           if (extra.empty()) {  // Dimensionle << 365     if (extra.empty()) {  // Dimensionless...
379             if (valueType == "G4ThreeVector")  << 366       if (valueType == "G4ThreeVector") {  // Split vector into 3...
380               G4ThreeVector internalValue =    << 367         G4ThreeVector internalValue =
381                 G4UIcommand::ConvertTo3Vector( << 368     G4UIcommand::ConvertTo3Vector(value);
382               AddValuesAndDefs                 << 369         AddValuesAndDefs
383                 (standardValues,standardDefini << 370     (standardValues,standardDefinitions,
384                  valueName,valueName+"-X",     << 371      valueName,valueName+"-X",
385                  G4UIcommand::ConvertToString( << 372      G4UIcommand::ConvertToString(internalValue.x()),"",
386                  fpDefinitions->find(valueName << 373      fpDefinitions->find(valueName)->second.GetDesc()+"-X");
387               AddValuesAndDefs                 << 374         AddValuesAndDefs
388                 (standardValues,standardDefini << 375     (standardValues,standardDefinitions,
389                  valueName,valueName+"-Y",     << 376      valueName,valueName+"-Y",
390                  G4UIcommand::ConvertToString( << 377      G4UIcommand::ConvertToString(internalValue.y()),"",
391                  fpDefinitions->find(valueName << 378      fpDefinitions->find(valueName)->second.GetDesc()+"-Y");
392               AddValuesAndDefs                 << 379         AddValuesAndDefs
393                 (standardValues,standardDefini << 380     (standardValues,standardDefinitions,
394                  valueName,valueName+"-Z",     << 381      valueName,valueName+"-Z",
395                  G4UIcommand::ConvertToString( << 382      G4UIcommand::ConvertToString(internalValue.z()),"",
396                  fpDefinitions->find(valueName << 383      fpDefinitions->find(valueName)->second.GetDesc()+"-Z");
397             } else {  // Simply copy...        << 384       } else {  // Simply copy...
398               standardValues->push_back(*iValu << 385         standardValues->push_back(*iValue);
399               (*standardDefinitions)[valueName << 386         (*standardDefinitions)[valueName] =
400                 fpDefinitions->find(valueName) << 387     fpDefinitions->find(valueName)->second;
401             }                                  << 388       }
402           } else {  // Dimensioned...          << 389     } else {  // Dimensioned...
403             G4String valueAndUnit;             << 390       G4String valueAndUnit;
404             G4String unit;                     << 391       G4String unit;
405             if (extra == "G4BestUnit") {       << 392       if (extra == "G4BestUnit") {
406               valueAndUnit = G4StrUtil::strip_ << 393         valueAndUnit = value;
407               unit = valueAndUnit.substr(value << 394         valueAndUnit = valueAndUnit.strip();
408             } else {                           << 395         unit = valueAndUnit.substr(valueAndUnit.rfind(' ')+1);
409               valueAndUnit = G4StrUtil::strip_ << 396       } else {
410               unit = extra;                    << 397         valueAndUnit = value + ' ' + extra;
411             }                                  << 398         valueAndUnit = valueAndUnit.strip();
412             G4String unitCategory = G4UnitDefi << 399         unit = extra;
413             if (fUnitCategories->find(unitCate << 400       }
414               G4String standardUnit = (*fStand << 401       G4String unitCategory = G4UnitDefinition::GetCategory(unit);
415               G4double valueOfStandardUnit =   << 402       if (fUnitCategories.find(unitCategory) != fUnitCategories.end()) {
416                 G4UnitDefinition::GetValueOf(s << 403         G4String standardUnit = fStandardUnits[unitCategory];
417 //              G4String exstr = iDef->second. << 404         G4double valueOfStandardUnit =
418               if (valueType == "G4ThreeVector" << 405     G4UnitDefinition::GetValueOf(standardUnit);
419                 G4ThreeVector internalValue =  << 406         G4String extra = iDef->second.GetExtra();
420                   G4UIcommand::ConvertToDimens << 407         if (valueType == "G4ThreeVector") {  // Split vector into 3...
421                 AddValuesAndDefs               << 408     G4ThreeVector internalValue =
422                   (standardValues,standardDefi << 409       G4UIcommand::ConvertToDimensioned3Vector(valueAndUnit);
423                    valueName,valueName+"-X",   << 410     AddValuesAndDefs
424                    G4UIcommand::ConvertToStrin << 411       (standardValues,standardDefinitions,
425                    (internalValue.x()/valueOfS << 412        valueName,valueName+"-X",
426                    standardUnit,               << 413        G4UIcommand::ConvertToString
427                    fpDefinitions->find(valueNa << 414        (internalValue.x()/valueOfStandardUnit),
428                 AddValuesAndDefs               << 415        standardUnit,
429                   (standardValues,standardDefi << 416        fpDefinitions->find(valueName)->second.GetDesc()+"-X");
430                    valueName,valueName+"-Y",   << 417     AddValuesAndDefs
431                    G4UIcommand::ConvertToStrin << 418       (standardValues,standardDefinitions,
432                    (internalValue.y()/valueOfS << 419        valueName,valueName+"-Y",
433                    standardUnit,               << 420        G4UIcommand::ConvertToString
434                    fpDefinitions->find(valueNa << 421        (internalValue.y()/valueOfStandardUnit),
435                 AddValuesAndDefs               << 422        standardUnit,
436                   (standardValues,standardDefi << 423        fpDefinitions->find(valueName)->second.GetDesc()+"-Y");
437                    valueName,valueName+"-Z",   << 424     AddValuesAndDefs
438                    G4UIcommand::ConvertToStrin << 425       (standardValues,standardDefinitions,
439                    (internalValue.z()/valueOfS << 426        valueName,valueName+"-Z",
440                    standardUnit,               << 427        G4UIcommand::ConvertToString
441                    fpDefinitions->find(valueNa << 428        (internalValue.z()/valueOfStandardUnit),
442               } else {                         << 429        standardUnit,
443                 G4double internalValue =       << 430        fpDefinitions->find(valueName)->second.GetDesc()+"-Z");
444                   G4UIcommand::ConvertToDimens << 431         } else {
445                 AddValuesAndDefs               << 432     G4double internalValue =
446                   (standardValues,standardDefi << 433       G4UIcommand::ConvertToDimensionedDouble(valueAndUnit);
447                    valueName,valueName,        << 434     AddValuesAndDefs
448                    G4UIcommand::ConvertToStrin << 435       (standardValues,standardDefinitions,
449                    (internalValue/valueOfStand << 436        valueName,valueName,
450                    standardUnit);              << 437        G4UIcommand::ConvertToString
451               }                                << 438        (internalValue/valueOfStandardUnit),
452             }                                  << 439        standardUnit);
453           }                                    << 440         }
454         }                                      << 441       }
                                                   >> 442     }
                                                   >> 443   }
455       }                                           444       }
456     }                                             445     }
457   }                                               446   }
458   if (error) {                                    447   if (error) {
459     G4cerr << "G4AttCheck::Standard: Conversio    448     G4cerr << "G4AttCheck::Standard: Conversion error." << G4endl;
460   }                                               449   }
461   return error;                                   450   return error;
462 }                                                 451 }
463                                                   452