Exemple #1
0
def _generate_parameters_file(data):
    res, v = template_common.generate_parameters_file(data)
    report = data.report if 'report' in data else ''
    if report == 'tunesReport':
        return template_common.render_jinja(SIM_TYPE, v, TUNES_INPUT_FILE)
    v['zgoubiCommandFile'] = _ZGOUBI_COMMAND_FILE
    v['particleDef'] = _generate_particle(data.models.particle)
    v['beamlineElements'] = _generate_beamline_elements(report, data)
    v['bunchCoordinates'] = data.models.bunch.coordinates
    res += template_common.render_jinja(SIM_TYPE, v, 'base.py')
    if 'twissReport' in report or 'opticsReport' in report or report == 'twissSummaryReport':
        v['fitYRange'] = [-10, 10]
        if v['bunch_method'] == 'OBJET2.1':
            y = v['bunchCoordinates'][0]['Y']
            if y != 0:
                # within 20% on either side of particle 0
                v['fitYRange'] = [
                    min(v['fitYRange'][0], y * 80),
                    max(v['fitYRange'][1], y * 120)
                ]
        return res + template_common.render_jinja(SIM_TYPE, v, 'twiss.py')
    v['outputFile'] = _ZGOUBI_FAI_DATA_FILE
    res += template_common.render_jinja(SIM_TYPE, v, 'bunch.py')
    if 'bunchReport' in report:
        return res + template_common.render_jinja(SIM_TYPE, v,
                                                  'bunch-report.py')
    return res + template_common.render_jinja(SIM_TYPE, v)
Exemple #2
0
def _generate_parameters_file(data):
    bunch = data.models.bunch
    zgoubi_importer.MODEL_UNITS.scale_to_native('bunch', bunch)
    for f in ('FNAME', 'FNAME2', 'FNAME3'):
        if bunch[f]:
            bunch[f] = _SIM_DATA.lib_file_name_with_model_field(
                'bunch', f, bunch[f])
    res, v = template_common.generate_parameters_file(data)
    report = data.report if 'report' in data else ''
    if report == 'tunesReport':
        return template_common.render_jinja(SIM_TYPE, v, TUNES_INPUT_FILE)
    v.zgoubiCommandFile = _ZGOUBI_COMMAND_FILE
    v.particleDef = _generate_particle(data.models.particle)
    v.beamlineElements = _generate_beamline_elements(report, data)
    v.bunchCoordinates = bunch.coordinates
    res += template_common.render_jinja(SIM_TYPE, v, 'base.py')
    if 'twissReport' in report or 'opticsReport' in report or report == 'twissSummaryReport':
        v.fitYRange = [-10, 10]
        if v.bunch_method == 'OBJET2.1':
            y = v.bunchCoordinates[0].Y
            if y != 0:
                # within 20% on either side of particle 0
                v.fitYRange = [
                    min(v.fitYRange[0], y * 80),
                    max(v.fitYRange[1], y * 120)
                ]
        return res + template_common.render_jinja(SIM_TYPE, v, 'twiss.py')
    v.outputFile = _ZGOUBI_FAI_DATA_FILE
    res += template_common.render_jinja(SIM_TYPE, v, 'bunch.py')
    if 'bunchReport' in report:
        return res + template_common.render_jinja(SIM_TYPE, v,
                                                  'bunch-report.py')
    return res + template_common.render_jinja(SIM_TYPE, v)
Exemple #3
0
def _generate_parameters_file(run_dir, data):
    report = data.get('report', None)
    if report and report != 'epicsServerAnimation':
        return ''
    #template_common.validate_models(data, simulation_db.get_schema(SIM_TYPE))

    # copy model values into beamline elements
    kicker_values = []
    count = 0
    for idx in range(len(data.models.elements)):
        el = data.models.elements[idx]
        key = '{}{}'.format(el.type, el._id)
        if key in data.models:
            data.models.elements[idx] = data.models[key]
            el = data.models.elements[idx]
        if el.type == 'KICKER':
            kicker_values += [el.hkick, el.vkick]
            count += 1
            el.hkick = '{' + 'sr_epics_corrector{}_HCurrent'.format(
                count) + '}'
            el.vkick = '{' + 'sr_epics_corrector{}_VCurrent'.format(
                count) + '}'
    if run_dir:
        numpy.save(str(run_dir.join(CURRENT_FILE)),
                   numpy.array([CURRENT_FIELDS, kicker_values]))
    res, v = template_common.generate_parameters_file(data)
    from sirepo.template import elegant
    #TODO(pjm): calling private template.elegant._build_beamline_map()
    data.models.commands = []
    v['currentFile'] = CURRENT_FILE
    v['fodoLattice'] = elegant.webcon_generate_lattice(data)
    v['BPM_FIELDS'] = BPM_FIELDS
    v['CURRENT_FIELDS'] = CURRENT_FIELDS
    return res + template_common.render_jinja(SIM_TYPE, v)
Exemple #4
0
def _generate_parameters_file(data):
    if data.report == 'animation':
        beamline = data.models.beamline
        data.models.crystal = _get_crystal(data)
        res, v = template_common.generate_parameters_file(data)
        v.leftMirrorFocusingError = beamline[0].focusingError
        v.rightMirrorFocusingError = beamline[-1].focusingError
        v.summaryCSV = _SUMMARY_CSV_FILE
        v.initialLaserFile = _INITIAL_LASER_FILE
        v.finalLaserFile = _FINAL_LASER_FILE
        return res + template_common.render_jinja(SIM_TYPE, v)
    if data.report == 'crystalAnimation':
        res, v = template_common.generate_parameters_file(data)
        v.crystalCSV = _CRYSTAL_CSV_FILE
        return res + template_common.render_jinja(SIM_TYPE, v, 'crystal.py')
    assert False, 'invalid param report: {}'.format(data.report)
Exemple #5
0
def _generate_parameters_file(data):
    res, v = template_common.generate_parameters_file(data)

    v.report = re.sub(r'\d+$', '', data.get('report', ''))
    if v.report in _INITIAL_REPORTS:
        # these reports do not require running madx first
        v.initialTwissParameters = _get_initial_twiss_params(data)
        v.numParticles = data.models.simulation.numberOfParticles
        v.particleFile = simulation_db.simulation_dir(SIM_TYPE, data.simulationId) \
            .join(data.report).join('ptc_particles.txt')
        res = template_common.render_jinja(SIM_TYPE, v, 'bunch.py')
        return res

    util = LatticeUtil(data, _SCHEMA)
    filename_map = _build_filename_map_from_util(util)
    report = data.get('report', '')
    code_var = _code_var(data.models.rpnVariables)
    v.twissOutputFilename = _TWISS_OUTPUT_FILE
    v.lattice = _generate_lattice(filename_map, util)
    v.variables = _generate_variables(code_var, data)

    v.useBeamline = util.select_beamline().name
    if report == 'twissReport':
        v.twissOutputFilename = _TWISS_OUTPUT_FILE
        return template_common.render_jinja(SIM_TYPE, v, 'twiss.madx')
    _add_commands(data, util)
    v.commands = _generate_commands(filename_map, util)
    v.hasTwiss = bool(util.find_first_command(data, 'twiss'))
    if not v.hasTwiss:
        v.twissOutputFilename = _TWISS_OUTPUT_FILE
    return template_common.render_jinja(SIM_TYPE, v, 'parameters.madx')
Exemple #6
0
def _generate_parameters_file(data):
    report = data.get('report', '')
    if report == 'elegantAnimation':
        return _generate_elegant_simulation(data)
    res, v = template_common.generate_parameters_file(data)
    res += 'from __future__ import absolute_import, division, print_function\n'
    infile = _SIM_DATA.rcscon_filename(data, 'files', 'inputs')
    outfile = _SIM_DATA.rcscon_filename(data, 'files', 'outputs')
    v.pkupdate(
        inputsFileName=infile,
        outputsFileName=outfile,
        layerImplementationNames=_layer_implementation_list(data),
        neuralNetLayers=data.models.neuralNet.layers,
        inputDim=data.models.files.inputsCount,
    ).pkupdate(_OUTPUT_FILE)
    if 'mlModelGraph' in report:
        res += template_common.render_jinja(SIM_TYPE, v, 'build-model.py')
        res += template_common.render_jinja(SIM_TYPE, v, 'graph.py')
        return res
    res += template_common.render_jinja(SIM_TYPE, v, 'scale.py')
    if 'fileColumnReport' in report or report == 'partitionSelectionReport':
        return res
    v.hasTrainingAndTesting = v.partition_section0 == 'train_and_test' \
        or v.partition_section1 == 'train_and_test' \
        or v.partition_section2 == 'train_and_test'
    res += template_common.render_jinja(SIM_TYPE, v, 'partition.py')
    if 'partitionAnimation' in report:
        res += template_common.render_jinja(SIM_TYPE, v, 'save-partition.py')
        return res
    res += template_common.render_jinja(SIM_TYPE, v, 'build-model.py')
    res += template_common.render_jinja(SIM_TYPE, v, 'train.py')
    return res
Exemple #7
0
def _generate_parameters_file(data):
    report = data.get('report', '')
    res, v = template_common.generate_parameters_file(data)
    beamline = data.models.beamline
    v.leftMirrorFocusingError = beamline[0].focusingError
    v.rightMirrorFocusingError = beamline[-1].focusingError
    return res + template_common.render_jinja(SIM_TYPE, v)
Exemple #8
0
def _generate_parameters_file(data):
    res, v = template_common.generate_parameters_file(data)
    _generate_madx(v, data)
    v.optimizerTargets = data.models.optimizerSettings.targets
    v.summaryCSV = _SUMMARY_CSV_FILE
    if data.get('report') == 'initialMonitorPositionsReport':
        v.optimizerSettings_method = 'runOnce'
    return res + template_common.render_jinja(SIM_TYPE, v)
Exemple #9
0
def _generate_parameters_file(data):
    res, v = template_common.generate_parameters_file(data)
    util = LatticeUtil(data, _SCHEMA)
    code_var = _code_var(data.models.rpnVariables)
    v.lattice = _generate_lattice(util)
    v.variables = _generate_variables(code_var, data)
    if data.models.simulation.visualizationBeamlineId:
        v.useBeamline = util.id_map[data.models.simulation.visualizationBeamlineId].name
    return template_common.render_jinja(SIM_TYPE, v, 'parameters.madx')
Exemple #10
0
 def sim(self, full=True):
     d = self.data
     r, v = template_common.generate_parameters_file(d)
     v.rpn_variables = generate_variables(d)
     self.jinja_env = v
     if full:
         return r + self._full_simulation()
     if d.get('report', '') == 'twissReport':
         return r + self._twiss_simulation()
     return r + self._bunch_simulation()
Exemple #11
0
def generate_parameters_file(data, is_parallel=False):
    _validate_data(data, _SCHEMA)
    res, v = template_common.generate_parameters_file(data)
    v.rpn_variables = _generate_variables(data)

    if is_parallel:
        return res + _generate_full_simulation(data, v)

    if data.get('report', '') == 'twissReport':
        return res + _generate_twiss_simulation(data, v)

    return res + _generate_bunch_simulation(data, v)
Exemple #12
0
def _generate_parameters_file(data):
    report = data.get('report', '')
    res, v = template_common.generate_parameters_file(data)
    sim_id = data.get('simulationId', data.models.simulation.simulationId)
    g = data.models.geometry

    v['dmpFile'] = _dmp_file(sim_id)
    if 'dmpImportFile' in data.models.simulation:
        v['dmpImportFile'] = simulation_db.simulation_lib_dir(SIM_TYPE).join(
            f'{_SCHEMA.constants.radiaDmpFileType}.{data.models.simulation.dmpImportFile}'
        )
    v['isExample'] = data.models.simulation.get('isExample', False)
    v.objects = g.get('objects', [])
    # read in h-m curves if applicable
    for o in v.objects:
        o.h_m_curve = _read_h_m_file(o.materialFile) if \
            o.get('material', None) and o.material == 'custom' and \
            o.get('materialFile', None) and o.materialFile else None
    v['geomName'] = g.name
    disp = data.models.magnetDisplay
    v_type = disp.viewType
    f_type = None
    if v_type not in VIEW_TYPES:
        raise ValueError('Invalid view {} ({})'.format(v_type, VIEW_TYPES))
    v['viewType'] = v_type
    v['dataFile'] = _geom_file(sim_id)
    if v_type == _SCHEMA.constants.viewTypeFields:
        f_type = disp.fieldType
        if f_type not in radia_tk.FIELD_TYPES:
            raise ValueError(
                'Invalid field {} ({})'.format(f_type, radia_tk.FIELD_TYPES)
            )
        v['fieldType'] = f_type
        v['fieldPoints'] = _build_field_points(data.models.fieldPaths.get('paths', []))
    if 'solver' in report:
        v['doSolve'] = True
        s = data.models.solver
        v['solvePrec'] = s.precision
        v['solveMaxIter'] = s.maxIterations
        v['solveMethod'] = s.method
    if 'reset' in report:
        radia_tk.reset()
        data.report = 'geometry'
        return _generate_parameters_file(data)
    v['h5ObjPath'] = _geom_h5_path(_SCHEMA.constants.viewTypeObjects)
    v['h5FieldPath'] = _geom_h5_path(_SCHEMA.constants.viewTypeFields, f_type)

    return template_common.render_jinja(
        SIM_TYPE,
        v,
        GEOM_PYTHON_FILE,
    )
Exemple #13
0
def _generate_parameters_file(data):
    res, v = template_common.generate_parameters_file(data)
    util = LatticeUtil(data, _SCHEMA)
    v.update(
        dict(
            lattice=_generate_lattice(util),
            use_beamline=util.select_beamline().name,
            commands=_generate_commands(util),
        ))
    report = data.get('report', '')
    if report == 'twissReport':
        return template_common.render_jinja(SIM_TYPE, v, 'twiss.in')
    return template_common.render_jinja(SIM_TYPE, v, 'parameters.in')
Exemple #14
0
def generate_parameters_file(data, is_parallel=False):
    template_common.validate_models(data, _SCHEMA)
    res, v = template_common.generate_parameters_file(data)
    v['isAnimationView'] = is_parallel
    v['incSteps'] = 50
    v['diagnosticPeriod'] = 50
    if data['models']['simulation']['sourceType'] == 'electronBeam':
        v['useBeam'] = 1
        v['useLaser'] = 0
    else:
        v['useBeam'] = 0
        v['useLaser'] = 1
    if data['models']['electronBeam']['beamRadiusMethod'] == 'a':
        v['electronBeam_transverseEmittance'] = 0
    return res + template_common.render_jinja(SIM_TYPE, v)
Exemple #15
0
def _generate_parameters_file(data):
    v = None
    template_common.validate_models(data, _SCHEMA)
    res, v = template_common.generate_parameters_file(data)
    v['particlePeriod'] = _PARTICLE_PERIOD
    v['particleFile'] = _PARTICLE_FILE
    v['potentialFile'] = _POTENTIAL_FILE
    v['stepSize'] = COMPARISON_STEP_SIZE
    v['densityFile'] = _DENSITY_FILE
    v['egunCurrentFile'] = _EGUN_CURRENT_FILE
    v['estimateFile'] = _FIELD_ESTIMATE_FILE
    v['conductors'] = _prepare_conductors(data)
    v['maxConductorVoltage'] = _max_conductor_voltage(data)
    v['is3D'] = _SIM_DATA.warpvnd_is_3d(data)
    v['anode'] = _prepare_anode(data)
    v['saveIntercept'] = v['anode']['isReflector']
    for c in data.models.conductors:
        if c.conductor_type.type == 'stl':
            # if any conductor is STL then don't save the intercept
            v['saveIntercept'] = False
            v['polyFile'] = _SIM_DATA.lib_file_abspath(
                _stl_polygon_file(c.conductor_type.name),
            )
            break
        if c.conductor_type.isReflector:
            v['saveIntercept'] = True
    if not v['is3D']:
        v['simulationGrid_num_y'] = v['simulationGrid_num_x']
        v['simulationGrid_channel_height'] = v['simulationGrid_channel_width']
    if 'report' not in data:
        data['report'] = 'animation'
    v['isOptimize'] = data['report'] == 'optimizerAnimation'
    if v['isOptimize']:
        _replace_optimize_variables(data, v)
    res = _render_jinja('base', v)
    if data['report'] == 'animation':
        if data['models']['simulation']['egun_mode'] == '1':
            v['egunStatusFile'] = _EGUN_STATUS_FILE
            res += _render_jinja('egun', v)
        else:
            res += _render_jinja('visualization', v)
        res += _render_jinja('impact-density', v)
    elif data['report'] == 'optimizerAnimation':
        res += _render_jinja('parameters-optimize', v)
    else:
        res += _render_jinja('source-field', v)
    return res, v
Exemple #16
0
def _generate_elegant_simulation(data):
    vars_by_name = PKDict({x.name: x.value for x in data.models.rpnVariables})
    for m in ('elegantAnimation', 'latticeSettings', 'rfcSettings'):
        for f in data.models[m]:
            vars_by_name[f] = data.models[m][f]
    data.models.rpnVariables = [
        PKDict(name=n, value=v) for n, v in vars_by_name.items()
    ]
    res, v = template_common.generate_parameters_file(data)
    from sirepo.template import elegant
    #TODO(pjm): don't call private functions
    v.rpn_variables = elegant._generate_variables(data)
    data.models.simulation.update(
        PKDict(
            backtracking='0',
            simulationMode='serial',
        ))
    return elegant._generate_full_simulation(data, v)
Exemple #17
0
def _generate_parameters_file(data):
    report = data.get('report', '')
    res, v = template_common.generate_parameters_file(data)
    sim_id = data.simulationId
    g = data.models.geometry

    v['dmpFile'] = _dmp_file(sim_id)
    v['isExample'] = data.models.simulation.get('isExample', False)
    v['objects'] = g.get('objects', [])
    v['geomName'] = g.name
    disp = data.models.magnetDisplay
    v_type = disp.viewType
    f_type = None
    if v_type not in VIEW_TYPES:
        raise ValueError('Invalid view {} ({})'.format(v_type, VIEW_TYPES))
    v['viewType'] = v_type
    v['dataFile'] = _geom_file(sim_id)
    if v_type == VIEW_TYPE_FIELD:
        f_type = disp.fieldType
        if f_type not in radia_tk.FIELD_TYPES:
            raise ValueError('Invalid field {} ({})'.format(
                f_type, radia_tk.FIELD_TYPES))
        v['fieldType'] = f_type
        v['fieldPoints'] = _build_field_points(
            data.models.fieldPaths.get('paths', []))
    if 'solver' in report:
        v['doSolve'] = True
        s = data.models.solver
        v['solvePrec'] = s.precision
        v['solveMaxIter'] = s.maxIterations
        v['solveMethod'] = s.method
    if 'reset' in report:
        radia_tk.reset()
        data.report = 'geometry'
        return _generate_parameters_file(data)
    v['h5ObjPath'] = _geom_h5_path(VIEW_TYPE_OBJ)
    v['h5FieldPath'] = _geom_h5_path(VIEW_TYPE_FIELD, f_type)

    return template_common.render_jinja(
        SIM_TYPE,
        v,
        GEOM_PYTHON_FILE,
    )
Exemple #18
0
def _generate_parameters_file(data):
    res, v = template_common.generate_parameters_file(data)
    util = LatticeUtil(data, _SCHEMA)
    filename_map = _build_filename_map_from_util(util)
    report = data.get('report', '')
    v.twissOutputFilename = _TWISS_OUTPUT_FILE
    v.lattice = _generate_lattice(filename_map, util)
    v.variables = code_var(
        data.models.rpnVariables).generate_variables(_generate_variable)
    v.useBeamline = util.select_beamline().name
    if report == 'twissReport' or _is_report('bunchReport', report):
        v.twissOutputFilename = _TWISS_OUTPUT_FILE
        return template_common.render_jinja(SIM_TYPE, v, 'twiss.madx')
    _add_commands(data, util)
    v.commands = _generate_commands(filename_map, util)
    v.hasTwiss = bool(util.find_first_command(data, 'twiss'))
    if not v.hasTwiss:
        v.twissOutputFilename = _TWISS_OUTPUT_FILE
    return template_common.render_jinja(SIM_TYPE, v, 'parameters.madx')
Exemple #19
0
def _generate_parameters_file(data):
    res, v = template_common.generate_parameters_file(data)
    util = LatticeUtil(data, _SCHEMA)
    code_var = _code_var(data.models.rpnVariables)
    report = data.get('report', '')

    if 'bunchReport' in report:
        # keep only first distribution and beam in command list
        beam = LatticeUtil.find_first_command(data, 'beam')
        distribution = LatticeUtil.find_first_command(data, 'distribution')
        v.beamName = beam.name
        v.distributionName = distribution.name
        # these need to get set to default or distribution won't generate in 1 step
        # for emitted distributions
        distribution.nbin = 0
        distribution.emissionsteps = 1
        data.models.commands = [
            LatticeUtil.find_first_command(data, 'option'),
            beam,
            distribution,
        ]
    else:
        if report == 'twissReport':
            beamline_id = util.select_beamline().id
        else:
            beamline_id = LatticeUtil.find_first_command(
                util.data, 'track').line or util.select_beamline().id
        v.lattice = _generate_lattice(util, code_var, beamline_id)
        v.use_beamline = util.select_beamline().name
    v.update(
        dict(
            variables=_generate_variables(code_var, data),
            header_commands=_generate_commands(util, True),
            commands=_generate_commands(util, False),
        ))
    if 'bunchReport' in report:
        return template_common.render_jinja(SIM_TYPE, v, 'bunch.in')
    if report == 'twissReport':
        v.twiss_file_name = _TWISS_FILE_NAME
        return template_common.render_jinja(SIM_TYPE, v, 'twiss.in')
    return template_common.render_jinja(SIM_TYPE, v, 'parameters.in')
Exemple #20
0
def _generate_parameters_file(data):
    report = data.get('report', '')
    res, v = template_common.generate_parameters_file(data)
    v.dataFile = _filename(data.models.dataFile.file)
    v.pkupdate(
        layerImplementationNames=_layer_implementation_list(data),
        neuralNetLayers=data.models.neuralNet.layers,
        inputDim=data.models.columnInfo.inputOutput.count('input'),
    ).pkupdate(_OUTPUT_FILE)
    v.columnTypes = '[' + ','.join(
        ["'" + v + "'" for v in data.models.columnInfo.inputOutput]) + ']'
    res += template_common.render_jinja(SIM_TYPE, v, 'scale.py')
    if 'fileColumnReport' in report or report == 'partitionSelectionReport':
        return res
    v.hasTrainingAndTesting = v.partition_section0 == 'train_and_test' \
        or v.partition_section1 == 'train_and_test' \
        or v.partition_section2 == 'train_and_test'
    res += template_common.render_jinja(SIM_TYPE, v, 'partition.py')
    if 'partitionColumnReport' in report:
        res += template_common.render_jinja(SIM_TYPE, v, 'save-partition.py')
        return res
    if data.models.dataFile.appMode == 'classification':
        res += template_common.render_jinja(SIM_TYPE, v,
                                            'classification-base.py')
        d = PKDict(
            decisionTree='decision-tree',
            knn='knn',
            linearSvc='linear-svc',
            logisticRegression='logistic-regression',
        )
        return res + template_common.render_jinja(
            SIM_TYPE,
            v,
            f'{d[data.models.classificationAnimation.classifier]}.py',
        )
    res += template_common.render_jinja(SIM_TYPE, v, 'build-model.py')
    res += template_common.render_jinja(SIM_TYPE, v, 'train.py')
    return res
Exemple #21
0
def _generate_parameters_file(data):
    _validate_data(data, _SCHEMA)
    res, v = template_common.generate_parameters_file(data)
    util = LatticeUtil(data, _SCHEMA)
    v.update({
        'lattice': _generate_lattice(data, util),
        'use_beamline': util.select_beamline().name.lower(),
        'bunchFileName': OUTPUT_FILE.bunchReport,
        'diagnosticFilename': OUTPUT_FILE.beamEvolutionAnimation,
        'twissFileName': OUTPUT_FILE.twissReport,
    })
    if data.models.bunch.distribution == 'file':
        v.bunchFile = _SIM_DATA.lib_file_name_with_model_field('bunch', 'particleFile', data.models.bunch.particleFile)
    v.bunch = template_common.render_jinja(SIM_TYPE, v, 'bunch.py')
    res += template_common.render_jinja(SIM_TYPE, v, 'base.py')
    report = data.report if 'report' in data else ''
    if 'bunchReport' in report or 'twissReport' in report:
        res += template_common.render_jinja(SIM_TYPE, v, 'twiss.py')
        if 'bunchReport' in report:
            res += template_common.render_jinja(SIM_TYPE, v, 'bunch-report.py')
    else:
        res += template_common.render_jinja(SIM_TYPE, v, 'parameters.py')
    return res
Exemple #22
0
def _generate_parameters_file(data):
    report = data.get('report', '')
    res, v = template_common.generate_parameters_file(data)
    v.dataFile = _filename(data.models.dataFile.file)
    v.update(_OUTPUT_FILE).update(
        layerImplementationNames=_layer_implementation_list(data),
        neuralNetLayers=data.models.neuralNet.layers,
        inputDim=data.models.columnInfo.inputOutput.count('input'),
    )
    v.columnTypes = '[' + ','.join([ "'" + v + "'" for v in data.models.columnInfo.inputOutput]) + ']'
    res += template_common.render_jinja(SIM_TYPE, v, 'scale.py')
    if 'fileColumnReport' in report or report == 'partitionSelectionReport':
        return res
    v.hasTrainingAndTesting = v.partition_section0 == 'train_and_test' \
        or v.partition_section1 == 'train_and_test' \
        or v.partition_section2 == 'train_and_test'
    res += template_common.render_jinja(SIM_TYPE, v, 'partition.py')
    if 'partitionColumnReport' in report:
        res += template_common.render_jinja(SIM_TYPE, v, 'save-partition.py')
        return res
    res += template_common.render_jinja(SIM_TYPE, v, 'build-model.py')
    res += template_common.render_jinja(SIM_TYPE, v, 'train.py')
    return res
Exemple #23
0
def _generate_parameters_file(data, is_parallel, for_export):
    import jinja2

    report = data.get('report', '')
    rpt_out = f'{_REPORT_RES_MAP.get(report, report)}'
    res, v = template_common.generate_parameters_file(data)
    if rpt_out in _POST_SIM_REPORTS:
        return res

    v.doSolve = False
    v.doReset = False
    v.isParallel = is_parallel

    sim_id = data.get('simulationId', data.models.simulation.simulationId)
    g = data.models.geometry

    v.dmpOutputFile = _DMP_FILE if for_export else _dmp_file(sim_id)
    if 'dmpImportFile' in data.models.simulation:
        v.dmpImportFile = data.models.simulation.dmpImportFile if for_export else \
            simulation_db.simulation_lib_dir(SIM_TYPE).join(
                f'{_SCHEMA.constants.radiaDmpFileType}.{data.models.simulation.dmpImportFile}'
            )
    v.isExample = data.models.simulation.get('isExample', False) and \
        data.models.simulation.name in radia_examples.EXAMPLES
    v.exampleName = data.models.simulation.get('exampleName', None)
    v.is_raw = v.exampleName in _SCHEMA.constants.rawExamples
    v.magnetType = data.models.simulation.get('magnetType', 'freehand')
    wd, hd, bd = _geom_directions(
        data.models.simulation.beamAxis,
        data.models.hybridUndulator.gapAxis if v.magnetType == 'undulator' else 'y'
    )
    v.width_dir = wd.tolist()
    v.height_dir = hd.tolist()
    v.beam_dir = bd.tolist()
    if v.magnetType == 'undulator':
        _update_geom_from_undulator(g, data.models.hybridUndulator, data.models.simulation.beamAxis)
    v.objects = g.get('objects', [])
    _validate_objects(v.objects)
    # read in h-m curves if applicable
    for o in v.objects:
        o.h_m_curve = _read_h_m_file(o.materialFile) if \
            o.get('material', None) and o.material == 'custom' and \
            o.get('materialFile', None) and o.materialFile else None
    v.geomName = g.name
    disp = data.models.magnetDisplay
    v_type = disp.viewType

    # for rendering conveneince
    v.VIEW_TYPE_OBJ = _SCHEMA.constants.viewTypeObjects
    v.VIEW_TYPE_FIELD = _SCHEMA.constants.viewTypeFields
    v.FIELD_TYPE_MAG_M = radia_util.FIELD_TYPE_MAG_M
    v.POINT_FIELD_TYPES = radia_util.POINT_FIELD_TYPES
    v.INTEGRABLE_FIELD_TYPES = radia_util.INTEGRABLE_FIELD_TYPES

    f_type = None
    if v_type not in VIEW_TYPES:
        raise ValueError('Invalid view {} ({})'.format(v_type, VIEW_TYPES))
    v.viewType = v_type
    v.dataFile = _GEOM_FILE if for_export else _get_res_file(sim_id, f'{rpt_out}.h5', run_dir=rpt_out)
    if v_type == _SCHEMA.constants.viewTypeFields:
        f_type = disp.fieldType
        if f_type not in radia_util.FIELD_TYPES:
            raise ValueError(
                'Invalid field {} ({})'.format(f_type, radia_util.FIELD_TYPES)
            )
        v.fieldType = f_type
        v.fieldPaths = data.models.fieldPaths.get('paths', [])
        v.fieldPoints = _build_field_points(data.models.fieldPaths.get('paths', []))
    v.kickMap = data.models.get('kickMapReport', None)
    if 'solver' in report or for_export:
        v.doSolve = True
        v.gId = _get_g_id(sim_id)
        s = data.models.solver
        v.solvePrec = s.precision
        v.solveMaxIter = s.maxIterations
        v.solveMethod = s.method
    if 'reset' in report:
        v.doReset = True
    v.h5FieldPath = _geom_h5_path(_SCHEMA.constants.viewTypeFields, f_type)
    v.h5KickMapPath = _H5_PATH_KICK_MAP
    v.h5ObjPath = _geom_h5_path(_SCHEMA.constants.viewTypeObjects)
    v.h5SolutionPath = _H5_PATH_SOLUTION
    v.h5IdMapPath = _H5_PATH_ID_MAP

    j_file = RADIA_EXPORT_FILE if for_export else f'{rpt_out}.py'
    return template_common.render_jinja(
        SIM_TYPE,
        v,
        j_file,
        jinja_env=PKDict(loader=jinja2.PackageLoader('sirepo', 'template'))
    )