52 (
const std::vector<G4AttValue>* values,
 
   53  const std::map<G4String,G4AttDef>* definitions):
 
   55   fpDefinitions(definitions)
 
   63     fUnitCategories->insert(
"Length");
 
   64     fUnitCategories->insert(
"Energy");
 
   65     fUnitCategories->insert(
"Time");
 
   66     fUnitCategories->insert(
"Electric charge");
 
   67     fUnitCategories->insert(
"Volumic Mass");  
 
   70     (*fStandardUnits)[
"Length"] = 
"m";
 
   71     (*fStandardUnits)[
"Energy"] = 
"MeV";
 
   72     (*fStandardUnits)[
"Time"] = 
"ns";
 
   73     (*fStandardUnits)[
"Electric charge"] = 
"e+";
 
   74     (*fStandardUnits)[
"Volumic Mass"] = 
"kg/m3";
 
   77     fCategories->insert(
"Bookkeeping");
 
   78     fCategories->insert(
"Draw");
 
   79     fCategories->insert(
"Physics");
 
   80     fCategories->insert(
"PickAction");
 
   81     fCategories->insert(
"Association");
 
   85     fUnits->insert(
"G4BestUnit");
 
   88     for (
size_t i = 0; i < units.size(); ++i) {
 
   89       if (fUnitCategories->find(units[i]->GetName()) !=
 
   90           fUnitCategories->end()) {
 
   93         for (
size_t j = 0; j < container.size(); ++j) {
 
   96           fUnits->insert(container[j]->GetSymbol());
 
  102     fValueTypes->insert(
"G4String");
 
  103     fValueTypes->insert(
"G4int");
 
  104     fValueTypes->insert(
"G4double");
 
  105     fValueTypes->insert(
"G4ThreeVector");
 
  106     fValueTypes->insert(
"G4bool");
 
  129   if (iError < 10 || iError%100 == 0) {
 
  139         "\n*******************************************************";
 
  144         "\nG4AttCheck: ERROR " << iError << 
": Null definitions pointer" 
  145         "\n*******************************************************" 
  150   vector<G4AttValue>::const_iterator iValue;
 
  152     const G4String& valueName = iValue->GetName();
 
  153     const G4String& value = iValue->GetValue();
 
  154     map<G4String,G4AttDef>::const_iterator iDef =
 
  161           "\n*******************************************************";
 
  166           "\nG4AttCheck: ERROR " << iError << 
": No G4AttDef for G4AttValue \"" 
  167                <<  valueName << 
"\": " << value <<
 
  168           "\n*******************************************************" 
  172       const G4String& category = iDef->second.GetCategory();
 
  173       const G4String& extra = iDef->second.GetExtra();
 
  174       const G4String& valueType = iDef->second.GetValueType();
 
  180             "\n*******************************************************";
 
  185             "\nG4AttCheck: ERROR " << iError << 
": Illegal Category Field \"" 
  186                  << category << 
"\" for G4AttValue \"" 
  187                  << valueName << 
"\": " << value <<
 
  188             "\n  Possible Categories:";
 
  189           set<G4String>::iterator i;
 
  194             "\n*******************************************************" 
  198       if(category == 
"Physics" && 
fUnits->find(extra) == 
fUnits->end()) {
 
  203             "\n*******************************************************";
 
  208             "\nG4AttCheck: ERROR " << iError << 
": Illegal Extra field \"" 
  209                  << extra << 
"\" for G4AttValue \"" 
  210                  << valueName << 
"\": " << value <<
 
  211             "\n  Possible Extra fields if Category==\"Physics\":\n    ";
 
  212           set<G4String>::iterator i;
 
  217             "\n*******************************************************" 
  226             "\n*******************************************************";
 
  231             "\nG4AttCheck: ERROR " << iError << 
": Illegal Value Type field \"" 
  232                  << valueType << 
"\" for G4AttValue \"" 
  233                  << valueName << 
"\": " << value <<
 
  234             "\n  Possible Value Types:";
 
  235           set<G4String>::iterator i;
 
  240             "\n*******************************************************" 
  253     os << 
"G4AttCheck: ERROR: zero definitions pointer." << endl;
 
  258     os << storeKey << 
':' << endl;
 
  262     os << 
"G4AttCheck: zero values pointer." << endl;
 
  265   vector<G4AttValue>::const_iterator iValue;
 
  266   for (iValue = ac.
fpValues->begin(); iValue != ac.
fpValues->end(); ++iValue) {
 
  267     const G4String& valueName = iValue->GetName();
 
  268     const G4String& value = iValue->GetValue();
 
  269     map<G4String,G4AttDef>::const_iterator iDef =
 
  274       os << 
"G4AttCheck: ERROR: No G4AttDef for G4AttValue \"" 
  275          << valueName << 
"\": " << value << endl;
 
  277       const G4String& category = iDef->second.GetCategory();
 
  278       const G4String& extra = iDef->second.GetExtra();
 
  279       const G4String& valueType = iDef->second.GetValueType();
 
  283           "G4AttCheck: ERROR: Illegal Category Field \"" << category
 
  284            << 
"\" for G4AttValue \"" << valueName << 
"\": " << value <<
 
  285           "\n  Possible Categories:";
 
  286         set<G4String>::iterator i;
 
  292       if(category == 
"Physics" && ac.
fUnits->find(extra) == ac.
fUnits->end()) {
 
  295           "G4AttCheck: ERROR: Illegal Extra field \""<< extra
 
  296            << 
"\" for G4AttValue \"" << valueName << 
"\": " << value <<
 
  297           "\n  Possible Extra fields if Category==\"Physics\":\n    ";
 
  298         set<G4String>::iterator i;
 
  299         for (i = ac.
fUnits->begin(); i != ac.
fUnits->end(); ++i) {
 
  307           "G4AttCheck: ERROR: Illegal Value Type field \"" << valueType
 
  308            << 
"\" for G4AttValue \"" << valueName << 
"\": " << value <<
 
  309           "\n  Possible Value Types:";
 
  310         set<G4String>::iterator i;
 
  318       os << iDef->second.GetDesc()
 
  321       if (iDef->second.GetCategory() == 
"Physics" &&
 
  322           !iDef->second.GetExtra().empty()) {
 
  323         os << 
" (" << iDef->second.GetExtra() << 
")";
 
  332 (std::vector<G4AttValue>* standardValues,
 
  333  std::map<G4String,G4AttDef>* standardDefinitions,
 
  341   standardValues->push_back(
G4AttValue(name,value,
""));
 
  345   (*standardDefinitions)[
name].SetName(name);
 
  346   (*standardDefinitions)[
name].SetExtra(extra);
 
  347   if (description != 
"") (*standardDefinitions)[
name].SetDesc(description);
 
  351 (std::vector<G4AttValue>* standardValues,
 
  352  std::map<G4String,G4AttDef>* standardDefinitions) 
const 
  358   vector<G4AttValue>::const_iterator iValue;
 
  360     const G4String& valueName = iValue->GetName();
 
  361     const G4String& value = iValue->GetValue();
 
  362     map<G4String,G4AttDef>::const_iterator iDef =
 
  367       const G4String& category = iDef->second.GetCategory();
 
  368       const G4String& extra = iDef->second.GetExtra();
 
  369       const G4String& valueType = iDef->second.GetValueType();
 
  371           (category == 
"Physics" && 
fUnits->find(extra) == 
fUnits->end()) ||
 
  375         if (category != 
"Physics") {  
 
  376           standardValues->push_back(*iValue);
 
  377           (*standardDefinitions)[valueName] =
 
  381             if (valueType == 
"G4ThreeVector") {  
 
  385                 (standardValues,standardDefinitions,
 
  386                  valueName,valueName+
"-X",
 
  390                 (standardValues,standardDefinitions,
 
  391                  valueName,valueName+
"-Y",
 
  395                 (standardValues,standardDefinitions,
 
  396                  valueName,valueName+
"-Z",
 
  400               standardValues->push_back(*iValue);
 
  401               (*standardDefinitions)[valueName] =
 
  407             if (extra == 
"G4BestUnit") {
 
  408               valueAndUnit = value;
 
  409               valueAndUnit = valueAndUnit.
strip();
 
  410               unit = valueAndUnit.substr(valueAndUnit.rfind(
' ')+1);
 
  412               valueAndUnit = value + 
' ' + extra;
 
  413               valueAndUnit = valueAndUnit.
strip();
 
  418               G4String standardUnit = (*fStandardUnits)[unitCategory];
 
  422               if (valueType == 
"G4ThreeVector") {  
 
  426                   (standardValues,standardDefinitions,
 
  427                    valueName,valueName+
"-X",
 
  429                    (internalValue.x()/valueOfStandardUnit),
 
  433                   (standardValues,standardDefinitions,
 
  434                    valueName,valueName+
"-Y",
 
  436                    (internalValue.y()/valueOfStandardUnit),
 
  440                   (standardValues,standardDefinitions,
 
  441                    valueName,valueName+
"-Z",
 
  443                    (internalValue.z()/valueOfStandardUnit),
 
  450                   (standardValues,standardDefinitions,
 
  453                    (internalValue/valueOfStandardUnit),
 
  463     G4cerr << 
"G4AttCheck::Standard: Conversion error." << 
G4endl;
 
static G4ThreadLocal G4bool fFirst
 
G4AttCheck(const std::vector< G4AttValue > *values, const std::map< G4String, G4AttDef > *definitions)
 
const std::vector< G4AttValue > * fpValues
 
CLHEP::Hep3Vector G4ThreeVector
 
G4bool GetStoreKey(const std::map< G4String, G4AttDef > *definitions, G4String &key)
 
G4String strip(G4int strip_Type=trailing, char c=' ')
 
std::vector< G4UnitsCategory * > G4UnitsTable
 
friend std::ostream & operator<<(std::ostream &, const G4AttCheck &)
 
const std::map< G4String, G4AttDef > * fpDefinitions
 
static G4String ConvertToString(G4bool boolVal)
 
G4bool Standard(std::vector< G4AttValue > *standardValues, std::map< G4String, G4AttDef > *standardDefinitions) const 
 
static G4ThreeVector ConvertTo3Vector(const char *st)
 
static G4ThreadLocal std::set< G4String > * fValueTypes
 
static G4double ConvertToDimensionedDouble(const char *st)
 
void AddValuesAndDefs(std::vector< G4AttValue > *newValues, std::map< G4String, G4AttDef > *newDefinitions, const G4String &oldName, const G4String &name, const G4String &value, const G4String &extra, const G4String &description="") const 
 
static G4ThreadLocal std::map< G4String, G4String > * fStandardUnits
 
static G4double GetValueOf(const G4String &)
 
static G4ThreadLocal std::set< G4String > * fCategories
 
static G4ThreadLocal std::set< G4String > * fUnits
 
static G4UnitsTable & GetUnitsTable()
 
static G4String GetCategory(const G4String &)
 
G4bool Check(const G4String &leader="") const 
 
static PROLOG_HANDLER error
 
std::vector< G4UnitDefinition * > G4UnitsContainer
 
void print(const std::vector< T > &data)
 
static G4ThreadLocal std::set< G4String > * fUnitCategories
 
G4GLOB_DLL std::ostream G4cerr
 
static G4ThreeVector ConvertToDimensioned3Vector(const char *st)