166      G4Material* oldmat = 
getMaterial(parameters.getName(), 
false);
 
  169        B2ERROR(
"Material with name " << parameters.getName() << 
" already existing");
 
  172      B2DEBUG(10, 
"Creating Material " << parameters.getName());
 
  175      double density = parameters.getDensity() * CLHEP::g / CLHEP::cm3;
 
  176      if (density < 1e-25) {
 
  181          if (component.getIselement()) {
 
  182            B2ERROR(
"createMaterial " << parameters.getName()
 
  183                    << 
": Cannot calculate density when adding elements, please provide a density");
 
  186          G4Material* mat = 
getMaterial(component.getName());
 
  188            B2ERROR(
"createMaterial " << parameters.getName() << 
": Material '" << component.getName() << 
"' not found");
 
  191          density += mat->GetDensity() * component.getFraction();
 
  196      G4Material* mat = 
new G4Material(parameters.getName(), density, parameters.getComponents().size(),
 
  197                                       (G4State)parameters.getState(), parameters.getTemperature(), parameters.getPressure() * CLHEP::pascal);
 
  200        if (component.getIselement()) {
 
  201          G4Element* cmp = 
getElement(component.getName());
 
  203            B2ERROR(
"Cannot create material " << parameters.getName() << 
": element " << component.getName() << 
" not found");
 
  204#ifdef __clang_analyzer__ 
  210          mat->AddElement(cmp, component.getFraction());
 
  212          G4Material* cmp = 
getMaterial(component.getName());
 
  214            B2ERROR(
"Cannot create material " << parameters.getName() << 
": material " << component.getName() << 
" not found");
 
  215#ifdef __clang_analyzer__ 
  221          mat->AddMaterial(cmp, component.getFraction());
 
  226      mat->SetMaterialPropertiesTable(
createProperties(parameters.getProperties()));
 
 
  236      string name = parameters.getString(
"@name");
 
  237      B2DEBUG(10, 
"Creating Material Config " << name);
 
  238      string stateStr = parameters.getString(
"state", 
"undefined");
 
  239      double density = parameters.getDensity(
"density", 0); 
 
  240      double temperature = parameters.getDouble(
"temperature", CLHEP::STP_Temperature);
 
  241      double pressure = parameters.getDouble(
"pressure", CLHEP::STP_Pressure / CLHEP::pascal);
 
  251      double sumFractions(0);
 
  254      for (
const GearDir& component : parameters.getNodes(
"Components/Material")) {
 
  255        const string componentName = component.getString();
 
  256        double fraction = component.getDouble(
"@fraction", 1.0);
 
  257        material.
addComponent({componentName, 
false, fraction});
 
  258        sumFractions += fraction;
 
  261      for (
const GearDir& element : parameters.getNodes(
"Components/Element")) {
 
  262        const std::string elementName = element.getString();
 
  263        double fraction = element.getDouble(
"@fraction", 1.0);
 
  265        sumFractions += fraction;
 
  269      if (abs(sumFractions - 1) > numeric_limits<double>::epsilon()) {
 
  270        B2WARNING(
"createMaterial " << name << 
": Fractions not normalized, scaling by 1/" << sumFractions);
 
  272          cmp.setFraction(cmp.getFraction() / sumFractions);
 
  277      boost::to_lower(stateStr);
 
  278      G4State state = kStateUndefined;
 
  279      if (stateStr == 
"solid") {
 
  281      } 
else if (stateStr == 
"liquid") {
 
  282        state = kStateLiquid;
 
  283      } 
else if (stateStr == 
"gas") {
 
  285      } 
else if (stateStr != 
"undefined") {
 
  286        B2WARNING(
"createMaterial " << name << 
": Unknown state '" << stateStr << 
"', using undefined");
 
  290      addProperties(material, parameters);
 
 
  315      string name         = parameters.getString(
"@name", 
"OpticalSurface");
 
  316      string modelString  = parameters.getString(
"Model", 
"glisur");
 
  317      string finishString = parameters.getString(
"Finish", 
"polished");
 
  318      string typeString   = parameters.getString(
"Type", 
"dielectric_dielectric");
 
  319      double value        = parameters.getDouble(
"Value", 1.0);
 
  321#define CHECK_ENUM_VALUE(name,value) if (name##String == #value) { name = value; } 
  322      G4OpticalSurfaceModel model;
 
  323      boost::to_lower(modelString);
 
  324      CHECK_ENUM_VALUE(model, glisur)
 
  325      else CHECK_ENUM_VALUE(model, unified)
 
  326        else CHECK_ENUM_VALUE(model, LUT)
 
  328            B2FATAL(
"Unknown Optical Surface Model: " << modelString);
 
  331      G4OpticalSurfaceFinish finish;
 
  332      boost::to_lower(finishString);
 
  333      CHECK_ENUM_VALUE(finish, polished)
 
  334      else CHECK_ENUM_VALUE(finish, polishedfrontpainted)
 
  335        else CHECK_ENUM_VALUE(finish, polishedbackpainted)
 
  336          else CHECK_ENUM_VALUE(finish, ground)
 
  337            else CHECK_ENUM_VALUE(finish, groundfrontpainted)
 
  338              else CHECK_ENUM_VALUE(finish, groundbackpainted)
 
  339                else CHECK_ENUM_VALUE(finish, polishedlumirrorair)
 
  340                  else CHECK_ENUM_VALUE(finish, polishedlumirrorglue)
 
  341                    else CHECK_ENUM_VALUE(finish, polishedair)
 
  342                      else CHECK_ENUM_VALUE(finish, polishedteflonair)
 
  343                        else CHECK_ENUM_VALUE(finish, polishedtioair)
 
  344                          else CHECK_ENUM_VALUE(finish, polishedtyvekair)
 
  345                            else CHECK_ENUM_VALUE(finish, polishedvm2000air)
 
  346                              else CHECK_ENUM_VALUE(finish, polishedvm2000glue)
 
  347                                else CHECK_ENUM_VALUE(finish, etchedlumirrorair)
 
  348                                  else CHECK_ENUM_VALUE(finish, etchedlumirrorglue)
 
  349                                    else CHECK_ENUM_VALUE(finish, etchedair)
 
  350                                      else CHECK_ENUM_VALUE(finish, etchedteflonair)
 
  351                                        else CHECK_ENUM_VALUE(finish, etchedtioair)
 
  352                                          else CHECK_ENUM_VALUE(finish, etchedtyvekair)
 
  353                                            else CHECK_ENUM_VALUE(finish, etchedvm2000air)
 
  354                                              else CHECK_ENUM_VALUE(finish, etchedvm2000glue)
 
  355                                                else CHECK_ENUM_VALUE(finish, groundlumirrorair)
 
  356                                                  else CHECK_ENUM_VALUE(finish, groundlumirrorglue)
 
  357                                                    else CHECK_ENUM_VALUE(finish, groundair)
 
  358                                                      else CHECK_ENUM_VALUE(finish, groundteflonair)
 
  359                                                        else CHECK_ENUM_VALUE(finish, groundtioair)
 
  360                                                          else CHECK_ENUM_VALUE(finish, groundtyvekair)
 
  361                                                            else CHECK_ENUM_VALUE(finish, groundvm2000air)
 
  362                                                              else CHECK_ENUM_VALUE(finish, groundvm2000glue)
 
  364                                                                  B2FATAL(
"Unknown Optical Surface Finish: " << finishString);
 
  368      boost::to_lower(typeString);
 
  369      CHECK_ENUM_VALUE(type, dielectric_metal)
 
  370      else CHECK_ENUM_VALUE(type, dielectric_dielectric)
 
  371        else CHECK_ENUM_VALUE(type, dielectric_LUT)
 
  372          else CHECK_ENUM_VALUE(type, firsov)
 
  373            else CHECK_ENUM_VALUE(type, x_ray)
 
  375                B2FATAL(
"Unknown Optical Surface Type: " << typeString);
 
  377#undef CHECK_ENUM_VALUE 
  380      addProperties(surface, 
GearDir(parameters, 
"Properties"));