Ejemplo n.º 1
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')
Ejemplo n.º 2
0
def _generate_parameters_file(data, run_dir=None, is_parallel=False):
    v = None
    template_common.validate_models(data, _SCHEMA)
    v = template_common.flatten_data(data['models'], {})
    v['outputDir'] = '"{}"'.format(run_dir) if run_dir else None
    v['particlePeriod'] = _PARTICLE_PERIOD
    v['particleFile'] = _PARTICLE_FILE
    v['impactDensityCalculation'] = _generate_impact_density()
    v['egunCurrentFile'] = _EGUN_CURRENT_FILE
    v['conductorLatticeAndParticleScraper'] = _generate_lattice(data)
    v['maxConductorVoltage'] = _max_conductor_voltage(data)
    v['is3D'] = data.models.simulationGrid.simulation_mode == '3d'
    if not v['is3D']:
        v['simulationGrid_num_y'] = v['simulationGrid_num_x']
        v['simulationGrid_channel_height'] = v['simulationGrid_channel_width']
    template_name = ''
    if 'report' not in data:
        template_name = 'visualization'
    elif data['report'] == 'animation':
        if data['models']['simulation']['egun_mode'] == '1':
            v['egunStatusFile'] = _EGUN_STATUS_FILE
            template_name = 'egun'
        else:
            template_name = 'visualization'
    else:
        template_name = 'source-field'
    return template_common.render_jinja(SIM_TYPE, v, 'base.py') \
        + template_common.render_jinja(SIM_TYPE, v, '{}.py'.format(template_name))
Ejemplo n.º 3
0
def _generate_parameters_file(data, run_dir=None, is_parallel=False):
    _validate_data(data, _SCHEMA)
    _scale_units(data)
    v = template_common.flatten_data(data.models, PKDict())
    r = data.report
    report_model = data.models[r]
    beamline = data.models.beamline
    v.shadowOutputFile = _SHADOW_OUTPUT_FILE
    if _has_zone_plate(beamline):
        v.zonePlateMethods = template_common.render_jinja(
            SIM_TYPE, v, 'zone_plate.py')

    if v.simulation_sourceType == 'bendingMagnet':
        v.bendingMagnetSettings = _generate_bending_magnet(data)
    elif v.simulation_sourceType == 'geometricSource':
        v.geometricSourceSettings = _generate_geometric_source(data)
    elif v.simulation_sourceType == 'wiggler':
        v.wigglerSettings = _generate_wiggler(data)
        v.wigglerTrajectoryFilename = _WIGGLER_TRAJECTORY_FILENAME
        v.wigglerTrajectoryInput = ''
        if data.models.wiggler.b_from in ('1', '2'):
            v.wigglerTrajectoryInput = _SIM_DATA.shadow_wiggler_file(
                data.models.wiggler.trajFile)
    elif v.simulation_sourceType == 'undulator':
        v.undulatorSettings = template_common.render_jinja(
            SIM_TYPE, v, 'undulator.py')

    if r == 'initialIntensityReport':
        v.distanceFromSource = beamline[
            0].position if beamline else template_common.DEFAULT_INTENSITY_DISTANCE
    elif r == 'beamStatisticsReport':
        v.simulation_npoint = 10000
        v.beamlineOptics = _generate_beamline_optics(data.models,
                                                     calc_beam_stats=True)
        v.beamStatsFile = BEAM_STATS_FILE
        assert v.simulation_sourceType in ('bendingMagnet', 'geometricSource',
                                           'undulator')
        if v.simulation_sourceType == 'geometricSource':
            if v.geometricSource_f_color == '1':
                v.photonEnergy = v.geometricSource_singleEnergyValue
            else:
                v.photonEnergy = (v.geometricSource_ph1 +
                                  v.geometricSource_ph2) / 2
        elif v.simulation_sourceType == 'undulator':
            if v.undulator_select_energy == 'range':
                v.photonEnergy = (v.undulator_emin + v.undulator_emax) / 2
            else:
                v.photonEnergy = v.undulator_photon_energy
        elif v.simulation_sourceType == 'bendingMagnet':
            v.photonEnergy = v.bendingMagnet_ph1
        return template_common.render_jinja(SIM_TYPE, v, 'beam_statistics.py')
    elif _SIM_DATA.is_watchpoint(r):
        v.beamlineOptics = _generate_beamline_optics(
            data.models, last_id=_SIM_DATA.watchpoint_id(r))
    else:
        v.distanceFromSource = report_model.distanceFromSource
    return template_common.render_jinja(SIM_TYPE, v)
Ejemplo n.º 4
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')
Ejemplo n.º 5
0
def _generate_parameters_file(data):
    v = template_common.flatten_data(data.models, {})
    report = data.report if 'report' in data else ''
    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':
        return res + template_common.render_jinja(SIM_TYPE, v, 'twiss.py')
    v['outputFile'] = _ZGOUBI_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)
Ejemplo n.º 6
0
def _generate_parameters_file(data):
    _validate_data(data, _SCHEMA)
    v = template_common.flatten_data(data['models'], {})
    beamline_map = _build_beamline_map(data)
    v['lattice'] = _generate_lattice(data, beamline_map, v)
    v['diagnosticFilename'] = _BEAM_EVOLUTION_OUTPUT_FILENAME
    res = template_common.render_jinja(SIM_TYPE, v, 'base.py')
    report = data['report'] if 'report' in data else ''
    if report == 'bunchReport' or report == 'twissReport' or report == 'twissReport2':
        res += template_common.render_jinja(SIM_TYPE, v, 'twiss.py')
        if report == 'bunchReport':
            res += template_common.render_jinja(SIM_TYPE, v, 'bunch.py')
    else:
        res += template_common.render_jinja(SIM_TYPE, v, 'parameters.py')
    return res
Ejemplo n.º 7
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)
Ejemplo n.º 8
0
def _generate_twiss_simulation(data, v):
    max_id = elegant_lattice_importer.max_id(data)
    sim = data['models']['simulation']
    sim['simulationMode'] = 'serial'
    run_setup = _find_first_command(data, 'run_setup') or {
        '_id': max_id + 1,
        '_type': 'run_setup',
        'lattice': 'Lattice',
        'p_central_mev': data['models']['bunch']['p_central_mev'],
    }
    run_setup['use_beamline'] = sim['activeBeamlineId']
    twiss_output = _find_first_command(data, 'twiss_output') or {
        '_id': max_id + 2,
        '_type': 'twiss_output',
        'filename': '1',
    }
    twiss_output['final_values_only'] = '0'
    twiss_output['output_at_each_step'] = '0'
    data['models']['commands'] = [
        run_setup,
        twiss_output,
    ]
    filename_map = _build_filename_map(data)
    beamline_map = _build_beamline_map(data)
    v['lattice'] = generate_lattice(data, filename_map, beamline_map, v)
    v['commands'] = _generate_commands(data, filename_map, beamline_map, v)
    return template_common.render_jinja(SIM_TYPE, v)
Ejemplo n.º 9
0
def _generate_full_simulation(data, v):
    filename_map = _build_filename_map(data)
    beamline_map = _build_beamline_map(data)
    v['commands'] = _generate_commands(data, filename_map, beamline_map, v)
    v['lattice'] = generate_lattice(data, filename_map, beamline_map, v)
    v['simulationMode'] = data['models']['simulation']['simulationMode']
    return template_common.render_jinja(SIM_TYPE, v)
Ejemplo n.º 10
0
def _generate_bunch_simulation(data, v):
    for f in _SCHEMA['model']['bunch']:
        info = _SCHEMA['model']['bunch'][f]
        if info[1] == 'RPNValue':
            field = 'bunch_{}'.format(f)
            v[field] = _format_rpn_value(v[field], is_command=True)
    longitudinal_method = int(data['models']['bunch']['longitudinalMethod'])
    # sigma s, sigma dp, dp s coupling
    if longitudinal_method == 1:
        v['bunch_emit_z'] = 0
        v['bunch_beta_z'] = 0
        v['bunch_alpha_z'] = 0
    # sigma s, sigma dp, alpha z
    elif longitudinal_method == 2:
        v['bunch_emit_z'] = 0
        v['bunch_beta_z'] = 0
        v['bunch_dp_s_coupling'] = 0
    # emit z, beta z, alpha z
    elif longitudinal_method == 3:
        v['bunch_sigma_dp'] = 0
        v['bunch_sigma_s'] = 0
        v['bunch_dp_s_coupling'] = 0
    if data['models']['bunchSource']['inputSource'] == 'sdds_beam':
        v['bunch_beta_x'] = 5
        v['bunch_beta_y'] = 5
        v['bunch_alpha_x'] = 0
        v['bunch_alpha_x'] = 0
        if v['bunchFile_sourceFile'] and v['bunchFile_sourceFile'] != 'None':
            v['bunchInputFile'] = template_common.lib_file_name('bunchFile', 'sourceFile', v['bunchFile_sourceFile'])
            v['bunchFileType'] = _sdds_beam_type_from_file(v['bunchInputFile'])
    v['bunchOutputFile'] = _report_output_filename('bunchReport')
    return template_common.render_jinja(SIM_TYPE, v, 'bunch.py')
Ejemplo n.º 11
0
def _generate_twiss_simulation(data, v):
    max_id = elegant_lattice_importer.max_id(data)
    sim = data['models']['simulation']
    sim['simulationMode'] = 'serial'
    run_setup = _find_first_command(data, 'run_setup') or {
        '_id': max_id + 1,
        '_type': 'run_setup',
        'lattice': 'Lattice',
        'p_central_mev': data['models']['bunch']['p_central_mev'],
    }
    run_setup['use_beamline'] = sim['activeBeamlineId']
    twiss_output = _find_first_command(data, 'twiss_output') or {
        '_id': max_id + 2,
        '_type': 'twiss_output',
        'filename': '1',
    }
    twiss_output['output_at_each_step'] = "0"
    data['models']['commands'] = [
        run_setup,
        twiss_output,
    ]
    filename_map = _build_filename_map(data)
    beamline_map = _build_beamline_map(data)
    v['lattice'] = generate_lattice(data, filename_map, beamline_map, v)
    v['commands'] = _generate_commands(data, filename_map, beamline_map, v)
    return template_common.render_jinja(SIM_TYPE, v)
Ejemplo n.º 12
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)
Ejemplo n.º 13
0
def _generate_parameters_file(data, run_dir=None, is_parallel=False):
    _validate_data(data, simulation_db.get_schema(SIM_TYPE))
    _convert_meters_to_centimeters(data['models'])
    _convert_meters_to_centimeters(data['models']['beamline'])
    v = template_common.flatten_data(data['models'], {})
    r = data['report']
    report_model = data['models'][r]
    beamline = data['models']['beamline']
    v['shadowOutputFile'] = _SHADOW_OUTPUT_FILE

    if r == 'initialIntensityReport':
        v['distanceFromSource'] = beamline[0]['position'] if len(beamline) else template_common.DEFAULT_INTENSITY_DISTANCE
    elif template_common.is_watchpoint(r):
        v['beamlineOptics'] = _generate_beamline_optics(data['models'], template_common.watchpoint_id(r))
    else:
        v['distanceFromSource'] = report_model['distanceFromSource']

    if v['simulation_sourceType'] == 'bendingMagnet':
        v['bendingMagnetSettings'] = _generate_bending_magnet(data)
    elif v['simulation_sourceType'] == 'geometricSource':
        v['geometricSourceSettings'] = _generate_geometric_source(data)
    elif v['simulation_sourceType'] == 'wiggler':
        v['wigglerSettings'] = _generate_wiggler(data)
        v['wigglerTrajectoryFilename'] = _WIGGLER_TRAJECTOR_FILENAME
        v['wigglerTrajectoryInput'] = ''
        if data['models']['wiggler']['b_from'] in ('1', '2'):
            v['wigglerTrajectoryInput'] = _wiggler_file(data['models']['wiggler']['trajFile'])
    return template_common.render_jinja(SIM_TYPE, v)
Ejemplo n.º 14
0
def _generate_bunch_simulation(data, v):
    for f in _SCHEMA['model']['bunch']:
        info = _SCHEMA['model']['bunch'][f]
        if info[1] == 'RPNValue':
            field = 'bunch_{}'.format(f)
            v[field] = _format_rpn_value(v[field], is_command=True)
    longitudinal_method = int(data['models']['bunch']['longitudinalMethod'])
    # sigma s, sigma dp, dp s coupling
    if longitudinal_method == 1:
        v['bunch_emit_z'] = 0
        v['bunch_beta_z'] = 0
        v['bunch_alpha_z'] = 0
    # sigma s, sigma dp, alpha z
    elif longitudinal_method == 2:
        v['bunch_emit_z'] = 0
        v['bunch_beta_z'] = 0
        v['bunch_dp_s_coupling'] = 0
    # emit z, beta z, alpha z
    elif longitudinal_method == 3:
        v['bunch_sigma_dp'] = 0
        v['bunch_sigma_s'] = 0
        v['bunch_dp_s_coupling'] = 0
    if data['models']['bunchSource']['inputSource'] == 'sdds_beam':
        v['bunch_beta_x'] = 5
        v['bunch_beta_y'] = 5
        v['bunch_alpha_x'] = 0
        v['bunch_alpha_x'] = 0
        if v['bunchFile_sourceFile'] and v['bunchFile_sourceFile'] != 'None':
            v['bunchInputFile'] = template_common.lib_file_name(
                'bunchFile', 'sourceFile', v['bunchFile_sourceFile'])
            v['bunchFileType'] = _sdds_beam_type_from_file(v['bunchInputFile'])
    v['bunchOutputFile'] = BUNCH_OUTPUT_FILE
    return template_common.render_jinja(SIM_TYPE, v, 'bunch.py')
Ejemplo n.º 15
0
def _generate_parameters_file(data, run_dir=None, is_parallel=False):
    _validate_data(data, _SCHEMA)
    _scale_units(data)
    v = template_common.flatten_data(data.models, PKDict())
    r = data.report
    report_model = data.models[r]
    beamline = data.models.beamline
    v.shadowOutputFile = _SHADOW_OUTPUT_FILE

    if r == 'initialIntensityReport':
        v.distanceFromSource = beamline[
            0].position if beamline else template_common.DEFAULT_INTENSITY_DISTANCE
    elif _SIM_DATA.is_watchpoint(r):
        v.beamlineOptics = _generate_beamline_optics(
            data.models, _SIM_DATA.watchpoint_id(r))
    else:
        v.distanceFromSource = report_model.distanceFromSource

    if v.simulation_sourceType == 'bendingMagnet':
        v.bendingMagnetSettings = _generate_bending_magnet(data)
    elif v.simulation_sourceType == 'geometricSource':
        v.geometricSourceSettings = _generate_geometric_source(data)
    elif v.simulation_sourceType == 'wiggler':
        v.wigglerSettings = _generate_wiggler(data)
        v.wigglerTrajectoryFilename = _WIGGLER_TRAJECTORY_FILENAME
        v.wigglerTrajectoryInput = ''
        if data.models.wiggler.b_from in ('1', '2'):
            v.wigglerTrajectoryInput = _SIM_DATA.shadow_wiggler_file(
                data.models.wiggler.trajFile)
    return template_common.render_jinja(SIM_TYPE, v)
Ejemplo n.º 16
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)
Ejemplo n.º 17
0
def _generate_parameters_file(data, run_dir=None, is_parallel=False):
    _validate_data(data, simulation_db.get_schema(SIM_TYPE))
    _convert_meters_to_centimeters(data['models'])
    _convert_meters_to_centimeters(data['models']['beamline'])
    v = template_common.flatten_data(data['models'], {})
    r = data['report']
    report_model = data['models'][r]
    beamline = data['models']['beamline']
    v['shadowOutputFile'] = _SHADOW_OUTPUT_FILE

    if r == 'initialIntensityReport':
        v['distanceFromSource'] = beamline[0]['position'] if len(
            beamline) else template_common.DEFAULT_INTENSITY_DISTANCE
    elif _SIM_DATA.is_watchpoint(r):
        v['beamlineOptics'] = _generate_beamline_optics(
            data['models'], _SIM_DATA.watchpoint_id(r))
    else:
        v['distanceFromSource'] = report_model['distanceFromSource']

    if v['simulation_sourceType'] == 'bendingMagnet':
        v['bendingMagnetSettings'] = _generate_bending_magnet(data)
    elif v['simulation_sourceType'] == 'geometricSource':
        v['geometricSourceSettings'] = _generate_geometric_source(data)
    elif v['simulation_sourceType'] == 'wiggler':
        v['wigglerSettings'] = _generate_wiggler(data)
        v['wigglerTrajectoryFilename'] = _WIGGLER_TRAJECTOR_FILENAME
        v['wigglerTrajectoryInput'] = ''
        if data['models']['wiggler']['b_from'] in ('1', '2'):
            v['wigglerTrajectoryInput'] = _SIM_DATA.shadow_wiggler_file(
                data.models.wiggler.trajFile)
    return template_common.render_jinja(SIM_TYPE, v)
Ejemplo n.º 18
0
def _generate_full_simulation(data, v):
    filename_map = _build_filename_map(data)
    beamline_map = _build_beamline_map(data)
    v['commands'] = _generate_commands(data, filename_map, beamline_map, v)
    v['lattice'] = generate_lattice(data, filename_map, beamline_map, v)
    v['simulationMode'] = data['models']['simulation']['simulationMode']
    return template_common.render_jinja(SIM_TYPE, v)
Ejemplo n.º 19
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)
Ejemplo n.º 20
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
Ejemplo n.º 21
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')
Ejemplo n.º 22
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')
Ejemplo n.º 23
0
 def _bunch_simulation(self):
     d = self.data
     v = self.jinja_env
     for f in _SCHEMA.model.bunch:
         info = _SCHEMA.model.bunch[f]
         if info[1] == 'RPNValue':
             field = f'bunch_{f}'
             v[field] = _format_rpn_value(v[field], is_command=True)
     longitudinal_method = int(d.models.bunch.longitudinalMethod)
     # sigma s, sigma dp, dp s coupling
     if longitudinal_method == 1:
         v.update(
             bunch_emit_z=0,
             bunch_beta_z=0,
             bunch_alpha_z=0,
         )
     # sigma s, sigma dp, alpha z
     elif longitudinal_method == 2:
         v.update(
             bunch_emit_z=0,
             bunch_beta_z=0,
             bunch_dp_s_coupling=0,
         )
     # emit z, beta z, alpha z
     elif longitudinal_method == 3:
         v.update(
             bunch_sigma_dp=0,
             bunch_sigma_s=0,
             bunch_dp_s_coupling=0,
         )
     if d.models.bunchSource.inputSource == 'sdds_beam':
         v.update(
             bunch_beta_x=5,
             bunch_beta_y=5,
             bunch_alpha_x=0,
         )
         if v.bunchFile_sourceFile and v.bunchFile_sourceFile != 'None':
             v.bunchInputFile = self._input_file(
                 'bunchFile',
                 'sourceFile',
                 v.bunchFile_sourceFile,
             )
             v.bunchFileType = _sdds_beam_type_from_file(
                 self._abspath(v.bunchInputFile), )
     if str(d.models.bunch.p_central_mev) == '0':
         run_setup = LatticeUtil.find_first_command(d, 'run_setup')
         if run_setup and run_setup.expand_for:
             v.bunchExpandForFile = 'expand_for = "{}",'.format(
                 self._input_file(
                     'command_run_setup',
                     'expand_for',
                     run_setup.expand_for,
                 ), )
     v.bunchOutputFile = _report_output_filename('bunchReport')
     return template_common.render_jinja(SIM_TYPE, v, 'bunch.py')
Ejemplo n.º 24
0
def _generate_parameters_file(data):
    assert data['report'] == 'heightWeightReport', \
        'unknown report: {}'.format(data['report'])
    v = copy.deepcopy(data['models'], pkcollections.Dict())
    v.input_name = INPUT_NAME
    v.output_name = OUTPUT_NAME
    return template_common.render_jinja(
        SIM_TYPE,
        v,
        template_common.PARAMETERS_PYTHON_FILE,
    )
Ejemplo n.º 25
0
def _generate_parameters_file(data):
    _validate_data(data, _SCHEMA)
    v = template_common.flatten_data(data['models'], {})
    beamline_map = _build_beamline_map(data)
    v['lattice'] = _generate_lattice(data, beamline_map, v)
    v['bunchFileName'] = OUTPUT_FILE['bunchReport']
    v['diagnosticFilename'] = OUTPUT_FILE['beamEvolutionAnimation']
    v['twissFileName'] = OUTPUT_FILE['twissReport']
    if data.models.bunch.distribution == 'file':
        v['bunchFile'] = template_common.lib_file_name('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
Ejemplo n.º 26
0
def _generate_parameters_file(data):
    assert data['report'] == 'heightWeightReport', \
        'unknown report: {}'.format(data['report'])
    v = copy.deepcopy(data['models'], pkcollections.Dict())
    v.input_name = INPUT_NAME
    v.output_name = OUTPUT_NAME
    return template_common.render_jinja(
        SIM_TYPE,
        v,
        template_common.PARAMETERS_PYTHON_FILE,
    )
Ejemplo n.º 27
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')
Ejemplo n.º 28
0
def _generate_full_simulation(data, v):
    util = LatticeUtil(data, _SCHEMA)
    if data.models.simulation.backtracking == '1':
        _setup_backtracking(util)
    filename_map = _build_filename_map_from_util(util)
    v.update(
        dict(
            commands=_generate_commands(filename_map, util),
            lattice=_generate_lattice(filename_map, util),
            simulationMode=data.models.simulation.simulationMode,
        ))
    return template_common.render_jinja(SIM_TYPE, v)
Ejemplo n.º 29
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)
Ejemplo n.º 30
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)
Ejemplo n.º 31
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,
    )
Ejemplo n.º 32
0
 def _full_simulation(self):
     v = self.jinja_env
     v.lattice = self._generate_lattice(
         self.util,
         self._code_var,
         LatticeUtil.find_first_command(
             self.util.data,
             'track',
         ).line or self.util.select_beamline().id,
     )
     v.use_beamline = self.util.select_beamline().name
     self._generate_commands_and_variables()
     return template_common.render_jinja(SIM_TYPE, v, 'parameters.in')
Ejemplo n.º 33
0
def _generate_parameters_file(data, run_dir=None, is_parallel=False):
    template_common.validate_models(data, _SCHEMA)
    v = template_common.flatten_data(data['models'], {})
    v['optionsCommand'] = _generate_options(data['models'])
    v['solenoidCommand'] = _generate_solenoid(data['models'])
    v['beamCommand'] = _generate_beam(data['models'])
    v['currentCommand'] = _generate_current(data['models'])
    v['chargeCommand'] = _generate_charge(data['models'])
    if is_parallel:
        v['latticeCommands'] = _generate_lattice(data['models'])
    else:
        v['latticeCommands'] = _DEFAULT_DRIFT_ELEMENT
    return template_common.render_jinja(SIM_TYPE, v)
Ejemplo n.º 34
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
Ejemplo n.º 35
0
def _generate_parameters_file(data, run_dir=None, is_parallel=False):
    v = None
    template_common.validate_models(data, simulation_db.get_schema(SIM_TYPE))
    v = template_common.flatten_data(data['models'], {})
    v['outputDir'] = '"{}"'.format(run_dir) if run_dir else None
    v['particlePeriod'] = _PARTICLE_PERIOD
    v['particleFile'] = _PARTICLE_FILE
    v['impactDensityCalculation'] = _generate_impact_density()
    v['egunCurrentFile'] = _EGUN_CURRENT_FILE
    v['conductorLatticeAndParticleScraper'] = _generate_lattice(data)
    template_name = ''
    if 'report' not in data:
        template_name = 'visualization'
    elif data['report'] == 'animation':
        if data['models']['simulation']['egun_mode'] == '1':
            v['egunStatusFile'] = _EGUN_STATUS_FILE
            template_name = 'egun'
        else:
            template_name = 'visualization'
    else:
        template_name = 'source-field'
    return template_common.render_jinja(SIM_TYPE, v, 'base.py') \
        + template_common.render_jinja(SIM_TYPE, v, '{}.py'.format(template_name))
Ejemplo n.º 36
0
def generate_parameters_file(data, run_dir=None, is_parallel=False):
    template_common.validate_models(data, _SCHEMA)
    v = template_common.flatten_data(data['models'], {})
    v['outputDir'] = '"{}"'.format(run_dir) if run_dir else None
    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 template_common.render_jinja(SIM_TYPE, v)
Ejemplo n.º 37
0
def _generate_parameters_file(data):
    v = template_common.flatten_data(data.models, {})
    report = data.report if 'report' in data else ''
    v['particleDef'] = _generate_particle(data.models.particle)
    v['beamlineElements'] = _generate_beamline_elements(report, data)
    res = template_common.render_jinja(SIM_TYPE, v, 'base.py')
    if 'twissReport' in report:
        return res + template_common.render_jinja(SIM_TYPE, v, 'twiss.py')
    if 'opticsReport' in report:
        return res + template_common.render_jinja(SIM_TYPE, v, 'optics.py')
    v['outputFile'] = _ZGOUBI_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)