Exemple #1
0
def import_file(request, lib_dir=None, tmp_dir=None, test_data=None):
    # input_data is passed by test cases only
    f = request.files['file']
    filename = werkzeug.secure_filename(f.filename)
    input_data = test_data

    if 'simulationId' in request.form:
        input_data = simulation_db.read_simulation_json(
            elegant_common.SIM_TYPE, sid=request.form['simulationId'])
    if re.search(r'.ele$', filename, re.IGNORECASE):
        data = elegant_command_importer.import_file(f.read())
    elif re.search(r'.lte$', filename, re.IGNORECASE):
        data = elegant_lattice_importer.import_file(f.read(), input_data)
        if input_data:
            _map_commands_to_lattice(data)
    else:
        raise IOError('invalid file extension, expecting .ele or .lte')
    data['models']['simulation']['name'] = re.sub(r'\.(lte|ele)$',
                                                  '',
                                                  filename,
                                                  flags=re.IGNORECASE)
    if input_data and not test_data:
        simulation_db.delete_simulation(
            elegant_common.SIM_TYPE,
            input_data['models']['simulation']['simulationId'])
    return data
Exemple #2
0
def parse_input_text(path, text=None, input_data=None):
    def _map(data):
        for cmd in data.models.commands:
            if cmd._type == 'run_setup':
                cmd.lattice = 'Lattice'
                break
        for cmd in data.models.commands:
            if cmd._type == 'run_setup':
                name = cmd.use_beamline.upper()
                for bl in data.models.beamlines:
                    if bl.name.upper() == name:
                        cmd.use_beamline = bl.id
                        break

    if text is None:
        text = pkio.read_text(path)
    e = path.ext.lower()
    if e == '.ele':
        return elegant_command_importer.import_file(text)
    if e == '.lte':
        data = elegant_lattice_importer.import_file(text, input_data)
        if input_data:
            _map(data)
        return data
    if e == '.madx':
        return ElegantMadxConverter().from_madx_text(text)
    raise IOError(
        f'{path.basename}: invalid file format; expecting .madx, .ele, or .lte'
    )
Exemple #3
0
def import_file(req, test_data=None, **kwargs):
    # input_data is passed by test cases only
    input_data = test_data
    text = pkcompat.from_bytes(req.file_stream.read())
    if 'simulationId' in req.req_data:
        input_data = simulation_db.read_simulation_json(
            SIM_TYPE, sid=req.req_data.simulationId)
    if re.search(r'\.ele$', req.filename, re.IGNORECASE):
        data = elegant_command_importer.import_file(text)
    elif re.search(r'\.lte$', req.filename, re.IGNORECASE):
        data = elegant_lattice_importer.import_file(text, input_data)
        if input_data:
            _map_commands_to_lattice(data)
    elif re.search(r'\.madx$', req.filename, re.IGNORECASE):
        from sirepo.template import madx_converter, madx_parser
        data = madx_converter.from_madx(
            SIM_TYPE, madx_parser.parse_file(text, downcase_variables=True))
    else:
        raise IOError('invalid file extension, expecting .ele or .lte')
    data.models.simulation.name = re.sub(r'\.(lte|ele|madx)$',
                                         '',
                                         req.filename,
                                         flags=re.IGNORECASE)
    if input_data and not test_data:
        simulation_db.delete_simulation(
            SIM_TYPE, input_data.models.simulation.simulationId)
    return data
Exemple #4
0
def _import_elegant_file(text):
    elegant_data = elegant_lattice_importer.import_file(text)
    rpn_cache = elegant_data['models']['rpnCache']
    data = simulation_db.default_data(SIM_TYPE)
    element_ids = {}
    for el in elegant_data['models']['elements']:
        if el['type'] not in _ELEGANT_NAME_MAP:
            if 'l' in el:
                el['name'] += '_{}'.format(el['type'])
                el['type'] = 'DRIF'
            else:
                continue
        el['name'] = re.sub(r':', '_', el['name'])
        name = _ELEGANT_NAME_MAP[el['type']]
        schema = _SCHEMA['model'][name]
        m = {
            '_id': el['_id'],
            'type': name,
        }
        for f in el:
            v = el[f]
            if el['type'] in _ELEGANT_FIELD_MAP and f in _ELEGANT_FIELD_MAP[
                    el['type']]:
                f = _ELEGANT_FIELD_MAP[el['type']][f]
            if f in schema:
                if v in rpn_cache:
                    v = rpn_cache[v]
                m[f] = v
        template_common.update_model_defaults(m, name, _SCHEMA)
        data['models']['elements'].append(m)
        element_ids[m['_id']] = True
    beamline_ids = {}
    for bl in elegant_data['models']['beamlines']:
        bl['name'] = re.sub(r':', '_', bl['name'])
        element_ids[bl['id']] = True
        element_ids[-bl['id']] = True
    for bl in elegant_data['models']['beamlines']:
        items = []
        for element_id in bl['items']:
            if element_id in element_ids:
                items.append(element_id)
        data['models']['beamlines'].append({
            'id': bl['id'],
            'items': items,
            'name': bl['name'],
        })
    elegant_sim = elegant_data['models']['simulation']
    if 'activeBeamlineId' in elegant_sim:
        data['models']['simulation']['activeBeamlineId'] = elegant_sim[
            'activeBeamlineId']
        data['models']['simulation']['visualizationBeamlineId'] = elegant_sim[
            'activeBeamlineId']
    data['models']['elements'] = sorted(data['models']['elements'],
                                        key=lambda el: el['type'])
    data['models']['elements'] = sorted(data['models']['elements'],
                                        key=lambda el:
                                        (el['type'], el['name'].lower()))
    return data
Exemple #5
0
def _import_elegant_file(text):
    try:
        from sirepo.template import elegant_lattice_importer
    except AssertionError:
        assert False, 'The elegant sirepo application is not configured.'
    elegant_data = elegant_lattice_importer.import_file(text)
    rpn_cache = elegant_data.models.rpnCache
    data = simulation_db.default_data(SIM_TYPE)
    element_ids = {}
    for el in elegant_data.models.elements:
        if el.type not in _ELEGANT_NAME_MAP:
            if 'l' in el:
                el.name += '_{}'.format(el.type)
                el.type = 'DRIF'
            else:
                continue
        el.name = re.sub(r':', '_', el.name)
        name = _ELEGANT_NAME_MAP[el.type]
        schema = _SCHEMA.model[name]
        m = PKDict(
            _id=el._id,
            type=name,
        )
        for f in el:
            v = el[f]
            if el.type in _ELEGANT_FIELD_MAP and f in _ELEGANT_FIELD_MAP[
                    el.type]:
                f = _ELEGANT_FIELD_MAP[el.type][f]
            if f in schema:
                if v in rpn_cache:
                    v = rpn_cache[v]
                m[f] = v
        _SIM_DATA.update_model_defaults(m, name)
        data.models.elements.append(m)
        element_ids[m._id] = True
    beamline_ids = {}
    for bl in elegant_data.models.beamlines:
        bl.name = re.sub(r':', '_', bl.name)
        element_ids[bl.id] = True
        element_ids[-bl.id] = True
    for bl in elegant_data.models.beamlines:
        items = []
        for element_id in bl['items']:
            if element_id in element_ids:
                items.append(element_id)
        data.models.beamlines.append(
            PKDict(
                id=bl.id,
                items=items,
                name=bl.name,
            ))
    elegant_sim = elegant_data.models.simulation
    if 'activeBeamlineId' in elegant_sim:
        data.models.simulation.activeBeamlineId = elegant_sim.activeBeamlineId
        data.models.simulation.visualizationBeamlineId = elegant_sim.activeBeamlineId
    return data
Exemple #6
0
def _import_elegant_file(text):
    elegant_data = elegant_lattice_importer.import_file(text)
    rpn_cache = elegant_data['models']['rpnCache']
    data = simulation_db.default_data(SIM_TYPE)
    element_ids = {}
    for el in elegant_data['models']['elements']:
        if el['type'] not in _ELEGANT_NAME_MAP:
            if 'l' in el:
                el['name'] += '_{}'.format(el['type'])
                el['type'] = 'DRIF'
            else:
                continue
        el['name'] = re.sub(r':', '_', el['name'])
        name = _ELEGANT_NAME_MAP[el['type']]
        schema = _SCHEMA['model'][name]
        m = {
            '_id': el['_id'],
            'type': name,
        }
        for f in el:
            v = el[f]
            if el['type'] in _ELEGANT_FIELD_MAP and f in _ELEGANT_FIELD_MAP[el['type']]:
                f = _ELEGANT_FIELD_MAP[el['type']][f]
            if f in schema:
                if v in rpn_cache:
                    v = rpn_cache[v]
                m[f] = v
        template_common.update_model_defaults(m, name, _SCHEMA)
        data['models']['elements'].append(m)
        element_ids[m['_id']] = True
    beamline_ids = {}
    for bl in elegant_data['models']['beamlines']:
        bl['name'] = re.sub(r':', '_', bl['name'])
        element_ids[bl['id']] = True
        element_ids[-bl['id']] = True
    for bl in elegant_data['models']['beamlines']:
        items = []
        for element_id in bl['items']:
            if element_id in element_ids:
                items.append(element_id)
        data['models']['beamlines'].append({
            'id': bl['id'],
            'items': items,
            'name': bl['name'],
        })
    elegant_sim = elegant_data['models']['simulation']
    if 'activeBeamlineId' in elegant_sim:
        data['models']['simulation']['activeBeamlineId'] = elegant_sim['activeBeamlineId']
        data['models']['simulation']['visualizationBeamlineId'] = elegant_sim['activeBeamlineId']
    return data
Exemple #7
0
def import_file(request, lib_dir=None, tmp_dir=None, test_data=None):
    # input_data is passed by test cases only
    f = request.files['file']
    filename = werkzeug.secure_filename(f.filename)
    input_data = test_data

    if 'simulationId' in request.form:
        input_data = simulation_db.read_simulation_json(elegant_common.SIM_TYPE, sid=request.form['simulationId'])
    if re.search(r'.ele$', filename, re.IGNORECASE):
        data = elegant_command_importer.import_file(f.read())
    elif re.search(r'.lte$', filename, re.IGNORECASE):
        data = elegant_lattice_importer.import_file(f.read(), input_data)
        if input_data:
            _map_commands_to_lattice(data)
    else:
        raise IOError('invalid file extension, expecting .ele or .lte')
    data['models']['simulation']['name'] = re.sub(r'\.(lte|ele)$', '', filename, flags=re.IGNORECASE)
    if input_data and not test_data:
        simulation_db.delete_simulation(elegant_common.SIM_TYPE, input_data['models']['simulation']['simulationId'])
    return data
Exemple #8
0
def import_file(request, lib_dir=None, tmp_dir=None, test_data=None):
    # input_data is passed by test cases only
    f = request.files["file"]
    filename = werkzeug.secure_filename(f.filename)
    input_data = test_data

    if "simulationId" in request.form:
        input_data = simulation_db.read_simulation_json(_SIMULATION_TYPE, sid=request.form["simulationId"])
    try:
        if re.search(r".ele$", filename, re.IGNORECASE):
            data = elegant_command_importer.import_file(f.read())
        elif re.search(r".lte$", filename, re.IGNORECASE):
            data = elegant_lattice_importer.import_file(f.read(), input_data)
            if input_data:
                _map_commands_to_lattice(data)
        else:
            raise IOError("invalid file extension, expecting .ele or .lte")
        data["models"]["simulation"]["name"] = re.sub(r"\.(lte|ele)$", "", filename, re.IGNORECASE)
        if input_data and not test_data:
            simulation_db.delete_simulation(_SIMULATION_TYPE, input_data["models"]["simulation"]["simulationId"])
        return None, data
    except IOError as e:
        return e.message, None
Exemple #9
0
def import_file(req, test_data=None, **kwargs):
    # input_data is passed by test cases only
    input_data = test_data

    if 'simulationId' in req:
        input_data = simulation_db.read_simulation_json(
            elegant_common.SIM_TYPE, sid=req.simulationId)
    if re.search(r'.ele$', req.filename, re.IGNORECASE):
        data = elegant_command_importer.import_file(req.file_stream.read())
    elif re.search(r'.lte$', req.filename, re.IGNORECASE):
        data = elegant_lattice_importer.import_file(req.file_stream.read(),
                                                    input_data)
        if input_data:
            _map_commands_to_lattice(data)
    else:
        raise IOError('invalid file extension, expecting .ele or .lte')
    data.models.simulation.name = re.sub(r'\.(lte|ele)$',
                                         '',
                                         req.filename,
                                         flags=re.IGNORECASE)
    if input_data and not test_data:
        simulation_db.delete_simulation(
            elegant_common.SIM_TYPE, input_data.models.simulation.simulationId)
    return data