diff --git a/src/Scripts/mage_to_mascaret.py b/src/Scripts/mage_to_mascaret.py
new file mode 100755
index 0000000000000000000000000000000000000000..cbc403253a25327db3c8727f7f8a15f552e5ad7b
--- /dev/null
+++ b/src/Scripts/mage_to_mascaret.py
@@ -0,0 +1,341 @@
+#!/bin/env python3
+
+import sys
+import importlib.util as imp
+import os
+import datetime as dt
+import lxml.etree as ET
+
+def mage_to_mascaret(filename):
+    # rep file
+    with open(filename, encoding = "ISO-8859-1", mode ="r") as rep:
+        lines = rep.readlines()
+        for line in lines:
+            l = line.split()
+            if (l[0] == 'PAR'):
+                parfile = l[1]
+            elif (l[0] == 'NET'):
+                netfile = l[1]
+            elif (l[0] == 'HYD'):
+                hydfile = l[1]
+            elif (l[0] == 'RUG'):
+                rugfile = l[1]
+            elif (l[0] == 'LIM'):
+                limfile = l[1]
+            elif (l[0] == 'INI'):
+                inifile = l[1]
+
+    # net file
+    with open(netfile, encoding = "ISO-8859-1", mode ="r") as net:
+        lines = net.readlines()
+        for line in lines:
+            if (line[0] != '*' and line[0] != '$'):
+                l = line.split()
+                biefname = l[0]
+                stfile = l[3]
+                break # on n'utilise que le premier bief pour le moment
+
+
+    # geometry file
+
+    print("geometrie fie : "+stfile)
+    wb.init_bief_from_geo_file(stfile, 0, 0)
+    wb.set_bief_name(biefname)
+    nb_sect = wb.get_nb_sections()
+    print("nb sections: "+str(nb_sect))
+
+    # hydrogramme file
+    with open(hydfile, encoding = "ISO-8859-1", mode ="r") as hyd:
+        HYD = []
+        lines = hyd.readlines()
+        for line in lines:
+            if (line[0] != '*' and line[0] != '$'):
+                HYD.append([x for x in line.split()])
+
+    # friction file
+    with open(rugfile, encoding = "ISO-8859-1", mode ="r") as lim:
+        RUG = []
+        lines = lim.readlines()
+        for line in lines:
+            if (line[0] != '*' and line[0] != '$'):
+                RUG.append([x for x in line.split()])
+
+    # tarage file
+    with open(limfile, encoding = "ISO-8859-1", mode ="r") as tar:
+        LIM = []
+        lines = tar.readlines()
+        for line in lines:
+            if (line[0] != '*' and line[0] != '$'):
+                LIM.append([x for x in line.split()])
+
+    # cond init file
+    with open(inifile, encoding = "ISO-8859-1", mode ="r") as ini:
+        INI = []
+        lines = ini.readlines()
+        for line in lines:
+            if (line[0] != '*' and line[0] != '$'):
+                INI.append([x for x in line.split()])
+
+    # PAR file
+    with open(parfile, encoding = "ISO-8859-1", mode ="r") as par:
+        PAR = {}
+        lines = par.readlines()
+        for line in lines:
+            l = line.split()
+            if l[0] == 'init_time':
+                t = l[1].split(":")
+                if len(t)>1:
+                    PAR['init_time'] = int(t[0])*24*3600+int(t[1])*3600+int(t[2])*60+int(t[3])
+                else:
+                    PAR['init_time'] = int(t[0])*60
+            elif l[0] == 'final_time':
+                t = l[1].split(":")
+                if len(t)>1:
+                    PAR['final_time'] = int(t[0])*24*3600+int(t[1])*3600+int(t[2])*60+int(t[3])
+                else:
+                    PAR['final_time'] = int(t[0])*60
+            elif l[0] == 'timestep':
+                PAR['timestep'] = float(l[1])
+            elif l[0] == 'timestep_bin':
+                PAR['timestep_bin'] = float(l[1])
+            elif l[0] == 'timestep_tra':
+                PAR['timestep_tra'] = float(l[1])
+            elif l[0] == 'min_height':
+                PAR['min_height'] = float(l[1])
+
+    #os.chdir(current_dir)
+
+    with open("hydrogramme.loi", mode ="w") as hyd:
+        hyd.write("         S\n")
+        for line in HYD:
+            hyd.write(" "+line[0]+" "+line[1]+"\n")
+        if float(HYD[-1][0]) < PAR['final_time']:
+            hyd.write(" "+str(PAR['final_time'])+" "+str(float(HYD[-1][1]))+"\n")
+
+    with open("limnigramme.loi", mode ="w") as lim:
+        lim.write("         S\n")
+        for line in LIM:
+            lim.write(" "+line[0]+" "+line[1]+"\n")
+        if float(LIM[-1][0]) < PAR['final_time']:
+            lim.write(" "+str(PAR['final_time'])+" "+str(float(LIM[-1][1]))+"\n")
+
+    with open("init.lig", mode ="w") as lig:
+        lig.write("RESULTATS CALCUL,DATE :  "+dt.datetime.now().strftime("%d/%m/%y %H:%M"+"\n"))
+        lig.write("FICHIER RESULTAT MASCARET\n")
+        lig.write("-"*71+"\n")
+        lig.write(" IMAX = "+f"{len(INI):4d}"+" NBBIEF=    1\n")
+        lig.write(" I1,I2 =    1    "+str(len(INI))+"\n")
+        lig.write(" X\n")
+        for i in range(int(len(INI)/5)+1):
+            lig.write(" "+"".join([f"{float(INI[j][4]):12.2f}" for j in range(i*5, min(i*5+5, len(INI)))])+"\n")
+        lig.write(" Z\n")
+        for i in range(int(len(INI)/5)+1):
+            lig.write(" "+"".join([f"{float(INI[j][3]):12.3f}" for j in range(i*5, min(i*5+5, len(INI)))])+"\n")
+        lig.write(" Q\n")
+        for i in range(int(len(INI)/5)+1):
+            lig.write(" "+"".join([f"{float(INI[j][2]):12.3f}" for j in range(i*5, min(i*5+5, len(INI)))])+"\n")
+        lig.write(" FIN\n")
+
+    #os.remove("geometrie")
+    wb.output_bief_mascaret("geometrie")
+    pk = [wb.get_pk_section(i+1) for i in range(nb_sect)]
+    print(pk)
+    print(max(pk))
+    print(min(pk))
+
+    out_name = 'FichierCas.xcas'
+    root = ET.Element('fichierCas')
+    pc = ET.SubElement(root, 'parametresCas')
+    pg = ET.SubElement(pc, 'parametresGeneraux')
+    ET.SubElement(pg, 'versionCode').text='3'
+    ET.SubElement(pg, 'code').text = '3'
+    ET.SubElement(pg, 'fichMotsCles').text = out_name
+    ET.SubElement(pg, 'dictionaire').text='dico.txt'
+    ET.SubElement(pg, 'progPrincipal').text='princi.f'
+    ET.SubElement(pg, 'sauveModele').text='false'
+    ET.SubElement(pg, 'fichSauvModele').text='mascaret_exp.tmp'
+    ET.SubElement(pg, 'validationCode').text='false'
+    ET.SubElement(pg, 'typeValidation').text='1'
+    ET.SubElement(pg, 'presenceCasiers').text='false'
+    b = ET.SubElement(pg, 'bibliotheques')
+    ET.SubElement(b, 'bibliotheque').text='mascaretV5P1.a damoV3P0.a'
+    pmp = ET.SubElement(pc, 'parametresModelePhysique')
+    ET.SubElement(pmp, 'perteChargeConf').text='false'
+    ET.SubElement(pmp, 'compositionLits').text='1'
+    ET.SubElement(pmp, 'conservFrotVertical').text='false'
+    ET.SubElement(pmp, 'elevCoteArrivFront').text='0.05'
+    ET.SubElement(pmp, 'interpolLinStrickler').text='false'
+    d = ET.SubElement(pmp, 'debordement')
+    ET.SubElement(d, 'litMajeur').text='false'
+    ET.SubElement(d, 'zoneStock').text='false'
+    pn = ET.SubElement(pc, 'parametresNumeriques')
+    ET.SubElement(pn, 'calcOndeSubmersion').text='false'
+    ET.SubElement(pn, 'decentrement').text='false'
+    ET.SubElement(pn, 'froudeLimCondLim').text='1000.0'
+    ET.SubElement(pn, 'traitImplicitFrot').text='false'
+    ET.SubElement(pn, 'hauteurEauMini').text=str(PAR['min_height'])
+    ET.SubElement(pn, 'implicitNoyauTrans').text='true'
+    ET.SubElement(pn, 'optimisNoyauTrans').text='false'
+    ET.SubElement(pn, 'perteChargeAutoElargissement').text='false'
+    ET.SubElement(pn, 'termesNonHydrostatiques').text='false'
+    ET.SubElement(pn, 'apportDebit').text='0'
+    ET.SubElement(pn, 'attenuationConvection').text='false'
+    pt = ET.SubElement(pc, 'parametresTemporels')
+    ET.SubElement(pt, 'pasTemps').text=str(PAR['timestep'])
+    ET.SubElement(pt, 'tempsInit').text=str(PAR['init_time'])
+    ET.SubElement(pt, 'critereArret').text='1'
+    ET.SubElement(pt, 'nbPasTemps').text='2000'
+    ET.SubElement(pt, 'tempsMax').text=str(PAR['final_time'])
+    ET.SubElement(pt, 'pasTempsVar').text='true'
+    ET.SubElement(pt, 'nbCourant').text='0.8'
+    ET.SubElement(pt, 'coteMax').text='0.0'
+    ET.SubElement(pt, 'abscisseControle').text='0.0'
+    ET.SubElement(pt, 'biefControle').text='1'
+    pgr = ET.SubElement(pc, 'parametresGeometrieReseau')
+    g = ET.SubElement(pgr, 'geometrie')
+    ET.SubElement(g, 'fichier').text='geometrie'
+    ET.SubElement(g, 'format').text='2'
+    ET.SubElement(g, 'profilsAbscAbsolu').text='true'
+    lb = ET.SubElement(pgr, 'listeBranches')
+    ET.SubElement(lb, 'nb').text='1'
+    ET.SubElement(lb, 'numeros').text='1'
+    ET.SubElement(lb, 'abscDebut').text=str(min(pk))
+    ET.SubElement(lb, 'abscFin').text=str(max(pk))
+    ET.SubElement(lb, 'numExtremDebut').text='1'
+    ET.SubElement(lb, 'numExtremFin').text='2'
+    ln = ET.SubElement(pgr, 'listeNoeuds')
+    ET.SubElement(ln, 'nb').text='0'
+    ET.SubElement(ln, 'noeuds')
+    el = ET.SubElement(pgr, 'extrLibres')
+    ET.SubElement(el, 'nb').text='2'
+    ET.SubElement(el, 'num').text='1 2'
+    ET.SubElement(el, 'numExtrem').text='1 2'
+    noms = ET.SubElement(el, 'noms')
+    ET.SubElement(noms, 'string').text='limite1'
+    ET.SubElement(noms, 'string').text='limite2'
+    ET.SubElement(el, 'typeCond').text='1 2'
+    ET.SubElement(el, 'numLoi').text='1 2'
+    pc2 = ET.SubElement(pc, 'parametresConfluents')
+    ET.SubElement(pc2, 'nbConfluents').text='0'
+    ET.SubElement(pc2, 'confluents')
+    pcm = ET.SubElement(pc, 'parametresPlanimetrageMaillage')
+    ET.SubElement(pcm, 'methodeMaillage').text='1'
+    planim = ET.SubElement(pcm, 'planim')
+    ET.SubElement(planim, 'nbPas').text='101'
+    ET.SubElement(planim, 'nbZones').text='1'
+    ET.SubElement(planim, 'valeursPas').text='0.1'
+    ET.SubElement(planim, 'num1erProf').text='1'
+    ET.SubElement(planim, 'numDerProf').text=str(nb_sect)
+    maillage = ET.SubElement(pcm, 'maillage')
+    ET.SubElement(maillage, 'modeSaisie').text='2'
+    ET.SubElement(maillage, 'sauvMaillage').text='false'
+    maillageClavier = ET.SubElement(maillage, 'maillageClavier')
+    ET.SubElement(maillageClavier, 'nbSections').text='0'
+    ET.SubElement(maillageClavier, 'nbPlages').text='1'
+    ET.SubElement(maillageClavier, 'num1erProfPlage').text='1'
+    ET.SubElement(maillageClavier, 'numDerProfPlage').text=str(nb_sect)
+    ET.SubElement(maillageClavier, 'pasEspacePlage').text='10.0'
+    ET.SubElement(maillageClavier, 'nbZones').text='0'
+    ps = ET.SubElement(pc, 'parametresSingularite')
+    ET.SubElement(ps, 'nbSeuils').text='0'
+    pad = ET.SubElement(pc, 'parametresApportDeversoirs')
+    pc3 = ET.SubElement(pc, 'parametresCalage')
+    frt = ET.SubElement(pc3, 'frottement')
+    ET.SubElement(frt, 'loi').text='1'
+    ET.SubElement(frt, 'nbZone').text=str(len(RUG))
+    ET.SubElement(frt, 'numBranche').text=' '.join([i[1] for i in RUG])
+    ET.SubElement(frt, 'absDebZone').text=' '.join([i[2] for i in RUG])
+    ET.SubElement(frt, 'absFinZone').text=' '.join([i[3] for i in RUG])
+    ET.SubElement(frt, 'coefLitMin').text=' '.join([i[4] for i in RUG])
+    ET.SubElement(frt, 'coefLitMaj').text=' '.join([i[5] for i in RUG])
+    zst = ET.SubElement(pc3, 'zoneStockage')
+    ET.SubElement(zst, 'nbProfils').text='0'
+    ET.SubElement(zst, 'numProfil').text='-0'
+    ET.SubElement(zst, 'limGauchLitMaj').text='-0'
+    ET.SubElement(zst, 'limDroitLitMaj').text='-0'
+    plh = ET.SubElement(pc, 'parametresLoisHydrauliques')
+    ET.SubElement(plh, 'nb').text='2'
+    lois = ET.SubElement(plh, 'lois')
+    spl = ET.SubElement(lois, 'structureParametresLoi')
+    ET.SubElement(spl, 'nom').text='loi_1_hydrogramme'
+    ET.SubElement(spl, 'type').text='1'
+    donnees = ET.SubElement(spl, 'donnees')
+    ET.SubElement(donnees, 'modeEntree').text='1'
+    ET.SubElement(donnees, 'fichier').text='hydrogramme.loi'
+    ET.SubElement(donnees, 'uniteTps').text='-0'
+    ET.SubElement(donnees, 'nbPoints').text='-0'
+    ET.SubElement(donnees, 'nbDebitsDifferents').text='-0'
+    spl2 = ET.SubElement(lois, 'structureParametresLoi')
+    ET.SubElement(spl2, 'nom').text='loi_2_limnigramme'
+    ET.SubElement(spl2, 'type').text='2'
+    donnees = ET.SubElement(spl2, 'donnees')
+    ET.SubElement(donnees, 'modeEntree').text='1'
+    ET.SubElement(donnees, 'fichier').text='limnigramme.loi'
+    ET.SubElement(donnees, 'uniteTps').text='-0'
+    ET.SubElement(donnees, 'nbPoints').text='-0'
+    ET.SubElement(donnees, 'nbDebitsDifferents').text='-0'
+    pci = ET.SubElement(pc, 'parametresConditionsInitiales')
+    re = ET.SubElement(pci, 'repriseEtude')
+    ET.SubElement(re, 'repriseCalcul').text='false'
+    le = ET.SubElement(pci, 'ligneEau')
+    ET.SubElement(le, 'LigEauInit').text='true'
+    ET.SubElement(le, 'modeEntree').text='1'
+    ET.SubElement(le, 'fichLigEau').text='init.lig'
+    ET.SubElement(le, 'formatFichLig').text='2'
+    ET.SubElement(le, 'nbPts').text='-0'
+    pir = ET.SubElement(pc, 'parametresImpressionResultats')
+    ET.SubElement(pir, 'titreCalcul').text='Etude hydraulique1d'
+    impression = ET.SubElement(pir, 'impression')
+    ET.SubElement(impression, 'impressionGeometrie').text='false'
+    ET.SubElement(impression, 'impressionPlanimetrage').text='false'
+    ET.SubElement(impression, 'impressionReseau').text='false'
+    ET.SubElement(impression, 'impressionLoiHydraulique').text='false'
+    ET.SubElement(impression, 'impressionligneEauInitiale').text='false'
+    ET.SubElement(impression, 'impressionCalcul').text='false'
+    ps = ET.SubElement(pir, 'pasStockage')
+    ET.SubElement(ps, 'premPasTpsStock').text='1'
+    ET.SubElement(ps, 'pasStock').text=str(int(PAR['timestep_bin']/PAR['timestep']))
+    ET.SubElement(ps, 'pasImpression').text=str(int(PAR['timestep_tra']/PAR['timestep']))
+    results = ET.SubElement(pir, 'resultats')
+    ET.SubElement(results, 'fichResultat').text='mascaret_exp.opt'
+    ET.SubElement(results, 'postProcesseur').text='2'
+    listing = ET.SubElement(pir, 'listing')
+    ET.SubElement(listing, 'fichListing').text='mascaret_exp.lis'
+    reprise = ET.SubElement(pir, 'fichReprise')
+    ET.SubElement(reprise, 'fichRepriseEcr').text='mascaret_exp.rep'
+    rub = ET.SubElement(pir, 'rubens')
+    ET.SubElement(rub, 'ecartInterBranch').text='1.0'
+    stockage = ET.SubElement(pir, 'stockage')
+    ET.SubElement(stockage, 'option').text='1'
+    ET.SubElement(stockage, 'nbSite').text='0'
+    pvc = ET.SubElement(pc, 'parametresVariablesCalculees')
+    ET.SubElement(pvc, 'variablesCalculees').text="false false false false false false false false false false false false false false false"
+
+    pvs = ET.SubElement(pc, 'parametresVariablesStockees')
+    ET.SubElement(pvs, 'variablesStockees').text="true false false false false true true true false false false false false false false false false false false true false false true false false false false false false false false false false false false false false false false false false false"
+
+    tree = ET.ElementTree(root)
+    xmlstr = ET.tostring(root, encoding='unicode', pretty_print=True)
+    tree.write(out_name)
+    print("fin du programme")
+
+    parser = ET.XMLParser(remove_blank_text=True)
+    tree = ET.parse(out_name, parser)
+    tree.write(out_name, pretty_print=True)
+
+
+if __name__ == "__main__":
+
+    current_dir = os.getcwd()
+    os.chdir('/home/theophile.terraz/Codes/mage/src')
+    spec = imp.spec_from_file_location("wb", "./wrapper_bief.py")
+    wb = imp.module_from_spec(spec)
+    spec.loader.exec_module(wb)
+    os.chdir(current_dir)
+
+    print( 'Number of arguments:', len(sys.argv), 'arguments.')
+    print( 'Argument List:', str(sys.argv))
+    mage_to_mascaret(sys.argv[1])
+
+
+
diff --git a/src/Scripts/mascaret_to_mage.py b/src/Scripts/mascaret_to_mage.py
new file mode 100755
index 0000000000000000000000000000000000000000..9942132bf213efd95d9b95a1c173aa5dc2f5afea
--- /dev/null
+++ b/src/Scripts/mascaret_to_mage.py
@@ -0,0 +1,99 @@
+#!/bin/env python3
+
+import sys
+import importlib.util as imp
+import os
+import numpy as np
+
+def lire_opt(filename, res):
+    with open(filename, encoding = "ISO-8859-1", mode ="r") as f:
+        variables = ['"t"','"Bief"','"Section"','"Pk"']
+        lines = f.readlines()
+        for start,line in enumerate(lines):
+            print("line n "+str(start)+" : ",line)
+            if line == "[variables]\n": continue
+            if line == "[resultats]\n": break
+            val = line.split(';')
+            variables.append(val[1])
+            if val[1] == '"ZREF"': izref = start+3
+            if val[1] == '"Q"': iq = start+3
+            if val[1] == '"Z"': iz = start+3
+        print ("variables : "+str(variables))
+
+        #resultats
+        res.mage_version = 83
+        # first pass to count sect and biefs
+        prev_timestep = float(lines[start+1].split(';')[0])
+        for line in lines[start+1:]:
+            ls = line.split(';')
+            t = float(ls[0])
+            if prev_timestep != t : break
+            ibief = int(ls[1].strip('"'))
+            isect = int(ls[2].strip('"'))
+            pk = float(ls[3])
+            if ibief > res.ibmax:
+                res.ibmax += 1
+                res.is1.append(isect)
+                res.is2.append(isect)
+            if isect > res.ismax:
+                res.ismax += 1
+                res.xgeo.append(pk)
+                res.ygeo.append(0.0)
+                res.zfd.append(float(ls[izref]))
+                res.ybas.append(0.0)
+            if isect > res.is2[ibief-1]:
+                res.is2[ibief-1] = isect
+            if isect < res.is1[ibief-1]:
+                res.is1[ibief-1] = isect
+
+        print(" nb sections : "+str(res.ismax))
+
+        # first pass to get the data
+        prev_bief = 0
+        prev_sect = 0
+        z = np.zeros(res.ismax, dtype=np.float32)
+        q = np.zeros(res.ismax, dtype=np.float32)
+        isect = 0
+        count = np.array([1],dtype=np.int32)
+        bZ = bytearray('Z'.encode())
+        bQ = bytearray('Q'.encode())
+        for line in lines[start+1:]:
+            ls = line.split(';')
+            t = float(ls[0])
+            ibief = int(ls[1].strip('"'))
+            isect = int(ls[2].strip('"'))
+            if prev_timestep != t :
+                res.values['Z'].append(prev_timestep, z)
+                res.values['Q'].append(prev_timestep, q)
+                count[0] = 4 + 8 + 1 + 8*len(z)
+                res.raw_data.append(count)
+                res.raw_data.append(np.array([len(z)],dtype=np.int32))
+                res.raw_data.append(np.array([prev_timestep],dtype=np.float64))
+                res.raw_data.append(np.array(bZ,dtype=np.byte))
+                res.raw_data.append(z)
+                res.raw_data.append(count)
+                res.raw_data.append(count)
+                res.raw_data.append(np.array([len(q)],dtype=np.int32))
+                res.raw_data.append(np.array([prev_timestep],dtype=np.float64))
+                res.raw_data.append(np.array(bQ,dtype=np.byte))
+                res.raw_data.append(q)
+                res.raw_data.append(count)
+                prev_timestep = t
+            z[isect-1] = float(ls[iz])
+            q[isect-1] = float(ls[iq])
+
+
+if __name__ == "__main__":
+
+    current_dir = os.getcwd()
+    os.chdir('/home/theophile.terraz/Codes/mage/src')
+    spec = imp.spec_from_file_location("me", "./mage_extraire.py")
+    me = imp.module_from_spec(spec)
+    spec.loader.exec_module(me)
+    os.chdir(current_dir)
+
+    print( 'Number of arguments:', len(sys.argv), 'arguments.')
+    print( 'Argument List:', str(sys.argv))
+    res = me.data()
+    lire_opt(sys.argv[1], res)
+    res.write_bin_8(sys.argv[2][0:-4])