52    const std::array<std::string, 4> att_names = { 
"att_pi", 
"att_tee",
 
   53                                                   "att_bridge", 
"att_splitter" };
 
   55    for( 
const auto& att_name : att_names )
 
   57        std::string path = 
"attenuators." + att_name;
 
   58        m_Attenuators.attenuators[ att_name ] = ATTENUATOR();
 
   59        ATTENUATOR* att = &m_Attenuators.attenuators[ att_name ];
 
   61        m_params.emplace_back( new PARAM<double>( path + 
".attenuation", &att->attenuation, 6.0 ) );
 
   62        m_params.emplace_back( new PARAM<double>( path + 
".zin", &att->zin, 50.0 ) );
 
   63        m_params.emplace_back( new PARAM<double>( path + 
".zout", &att->zout, 50.0 ) );
 
  224        const std::array<std::string, 8> transline_names = { 
"MicroStrip", 
"CoPlanar", 
"GrCoPlanar",
 
  225                "RectWaveGuide", 
"Coax", 
"Coupled_MicroStrip", 
"StripLine", 
"TwistedPair" };
 
  227        for( 
const auto& 
name : transline_names )
 
  229            m_TransLine.param_values[ name ] = TL_PARAM_MAP();
 
  230            m_TransLine.param_units[ name ] = TL_PARAM_UNITS_MAP();
 
  232            std::string path = 
"trans_line." + name + 
".";
 
  234            m_params.emplace_back( new PARAM_MAP<double>( path + 
"values",
 
  235                    &m_TransLine.param_values.at( name ), {} ) );
 
  243            &m_ViaSize.hole_diameter, 
"0.4" ) );
 
  245    m_params.emplace_back( 
new PARAM<int>( 
"via_size.hole_diameter_units",
 
  246            &m_ViaSize.hole_diameter_units, 0 ) );
 
  249            &m_ViaSize.thickness, 
"0.035" ) );
 
  251    m_params.emplace_back( 
new PARAM<int>( 
"via_size.thickness_units",
 
  252            &m_ViaSize.thickness_units, 0 ) );
 
  255            &m_ViaSize.length, 
"1.6" ) );
 
  257    m_params.emplace_back( 
new PARAM<int>( 
"via_size.length_units", &m_ViaSize.length_units, 0 ) );
 
  260            &m_ViaSize.pad_diameter, 
"0.6" ) );
 
  262    m_params.emplace_back( 
new PARAM<int>( 
"via_size.pad_diameter_units",
 
  263            &m_ViaSize.pad_diameter_units, 0 ) );
 
  265    m_params.emplace_back( 
new PARAM<wxString>( 
"via_size.clearance_diameter",
 
  266            &m_ViaSize.clearance_diameter, 
"1.0" ) );
 
  268    m_params.emplace_back( 
new PARAM<int>( 
"via_size.clearance_diameter_units",
 
  269            &m_ViaSize.clearance_diameter_units, 0 ) );
 
  271    m_params.emplace_back( 
new PARAM<wxString>( 
"via_size.characteristic_impedance",
 
  272            &m_ViaSize.characteristic_impedance, 
"50" ) );
 
  274    m_params.emplace_back( 
new PARAM<int>( 
"via_size.characteristic_impedance_units",
 
  275            &m_ViaSize.characteristic_impedance_units, 0 ) );
 
  277    m_params.emplace_back( 
new PARAM<wxString>( 
"via_size.applied_current",
 
  278            &m_ViaSize.applied_current, 
"1" ) );
 
  280    m_params.emplace_back( 
new PARAM<wxString>( 
"via_size.plating_resistivity",
 
  281            &m_ViaSize.plating_resistivity, 
"1.72e-8" ) );
 
  284            &m_ViaSize.permittivity, 
"4.5" ) );
 
  287            &m_ViaSize.temp_rise, 
"10" ) );
 
  289    m_params.emplace_back( 
new PARAM<wxString>( 
"via_size.pulse_rise_time",
 
  290            &m_ViaSize.pulse_rise_time, 
"1" ) );
 
  292    m_params.emplace_back( 
new PARAM<wxString>( 
"corrosion_table.threshold_voltage",
 
  293            &m_CorrosionTable.threshold_voltage, 
"0" ) );
 
  295    m_params.emplace_back( 
new PARAM<bool>( 
"corrosion_table.show_symbols",
 
  296            &m_CorrosionTable.show_symbols, 
true ) );
 
 
  304    ret &= 
fromLegacy<int>(  aCfg, 
"BrdClass_selection", 
"board_class_units" );
 
  305    ret &= 
fromLegacy<int>(  aCfg, 
"CC_selection",       
"color_code_tolerance" );
 
  311        nlohmann::json::json_pointer ptr =
 
  314        const std::array<std::string, 4> att_names = { 
"att_pi", 
"att_tee",
 
  315                                                       "att_bridge", 
"att_splitter" };
 
  318        for( 
const auto& att : att_names )
 
  320            aCfg->SetPath( 
"Attenuators/" + att );
 
  321            ptr.push_back( att );
 
  323            if( aCfg->Read( 
"Attenuation", &val ) )
 
  324                ( *m_internals )[ptr][
"attenuation"] = val;
 
  326            if( aCfg->Read( 
"Zin", &val ) )
 
  327                ( *m_internals )[ptr][
"zin"] = val;
 
  329            if( aCfg->Read( 
"Zout", &val ) )
 
  330                ( *m_internals )[ptr][
"zout"] = val;
 
  333            aCfg->SetPath( 
"../.." );
 
  337    ret &= 
fromLegacy<int>(   aCfg, 
"ElectSpacing_selection", 
"electrical.spacing_units" );
 
  338    ret &= 
fromLegacyString(  aCfg, 
"ElectSpacing_voltage",   
"electrical.spacing_voltage" );
 
  345    ret &= 
fromLegacyString( aCfg, 
"RegulName",         
"regulators.selected_regulator" );
 
  347    ret &= 
fromLegacy<int>(  aCfg, 
"RegulLastParam",    
"regulators.last_param" );
 
  352    ret &= 
fromLegacy<int>(  aCfg, 
"TW_Track_Len_Unit",      
"track_width.track_len_units" );
 
  353    ret &= 
fromLegacyString( aCfg, 
"TW_Resistivity",         
"track_width.resistivity" );
 
  354    ret &= 
fromLegacyString( aCfg, 
"TW_ExtTrack_Width",      
"track_width.ext_track_width" );
 
  355    ret &= 
fromLegacy<int>(  aCfg, 
"TW_ExtTrack_Width_Unit", 
"track_width.ext_track_width_units" );
 
  356    ret &= 
fromLegacyString( aCfg, 
"TW_ExtTrack_Thickness",  
"track_width.ext_track_thickness" );
 
  358        "track_width.ext_track_thickness_units" );
 
  359    ret &= 
fromLegacyString( aCfg, 
"TW_IntTrack_Width",      
"track_width.int_track_width" );
 
  360    ret &= 
fromLegacy<int>(  aCfg, 
"TW_IntTrack_Width_Unit", 
"track_width.int_track_width_units" );
 
  361    ret &= 
fromLegacyString( aCfg, 
"TW_IntTrack_Thickness",  
"track_width.int_track_thickness" );
 
  363            "track_width.int_track_thickness_units" );
 
  365    ret &= 
fromLegacy<int>(  aCfg, 
"Transline_selection",    
"trans_line.selection" );
 
  368        nlohmann::json::json_pointer ptr =
 
  375        const std::array<std::string, 8> transline_names = { 
"MicroStrip", 
"CoPlanar", 
"GrCoPlanar",
 
  376                "RectWaveGuide", 
"Coax", 
"Coupled_MicroStrip", 
"StripLine", 
"TwistedPair" };
 
  378        for( 
const auto& 
name : transline_names )
 
  381            aCfg->SetPath( 
name );
 
  382            ptr.push_back( 
name );
 
  384            while( aCfg->GetNextEntry( key, index ) )
 
  388                dest.Replace( 
"translineprm", wxEmptyString );
 
  390                if( dest.EndsWith( 
"unit" ) )
 
  392                    dest.Replace( 
"unit", wxEmptyString );
 
  393                    aCfg->Read( key, &units );
 
  394                    ptr.push_back( 
"units" );
 
  396                    ( *m_internals )[ptr].push_back( { { dest.ToStdString(), units } } );
 
  402                    aCfg->Read( key, &value );
 
  403                    ptr.push_back( 
"values" );
 
  405                    ( *m_internals )[ptr].push_back( { { dest.ToStdString(), value } } );
 
  412            aCfg->SetPath( 
".." );
 
  417    ret &= 
fromLegacy<int>(  aCfg, 
"VS_Hole_Dia_Unit",            
"via_size.hole_diameter_units" );
 
  418    ret &= 
fromLegacyString( aCfg, 
"VS_Plating_Thickness",        
"via_size.thickness" );
 
  419    ret &= 
fromLegacy<int>(  aCfg, 
"VS_Plating_Thickness_Unit",   
"via_size.thickness_units" );
 
  421    ret &= 
fromLegacy<int>(  aCfg, 
"VS_Via_Length_Unit",          
"via_size.length_units" );
 
  423    ret &= 
fromLegacy<int>(  aCfg, 
"VS_Pad_Dia_Unit",             
"via_size.pad_diameter_units" );
 
  424    ret &= 
fromLegacyString( aCfg, 
"VS_Clearance_Dia",            
"via_size.clearance_diameter" );
 
  426            "via_size.clearance_diameter_units" );
 
  428            "via_size.characteristic_impedance" );
 
  430            "via_size.characteristic_impedance_units" );
 
  432    ret &= 
fromLegacyString( aCfg, 
"VS_Resistivity",              
"via_size.plating_resistivity" );
 
  433    ret &= 
fromLegacyString( aCfg, 
"VS_Permittivity",             
"via_size.permittivity" );
 
  434    ret &= 
fromLegacyString( aCfg, 
"VS_Temperature_Differential", 
"via_size.temp_rise" );
 
  435    ret &= 
fromLegacyString( aCfg, 
"VS_Pulse_Rise_Time",          
"via_size.pulse_rise_time" );