]> SALOME platform Git repositories - modules/eficas.git/commitdiff
Salome HOME
maj 0209
authorpascale.noyret <pascale.noyret@edf.fr>
Fri, 2 Sep 2016 12:52:27 +0000 (14:52 +0200)
committerpascale.noyret <pascale.noyret@edf.fr>
Fri, 2 Sep 2016 12:52:27 +0000 (14:52 +0200)
Accas/__init__.py
ProcessOutputs_Eficas/ExtractGeneratorLoadLineandTransfoDico.py [new file with mode: 0644]
ProcessOutputs_Eficas/PSEN_Cata_N1.py [new file with mode: 0644]
ProcessOutputs_Eficas/configuration_PSEN_N1.py [new file with mode: 0644]
ProcessOutputs_Eficas/mesScripts_PSEN_N1.py [new file with mode: 0644]
ProcessOutputs_Eficas/opsPSEN_N1.py [new file with mode: 0644]
ProcessOutputs_Eficas/prefs.py [new file with mode: 0644]
ProcessOutputs_Eficas/prefs_PSEN_N1.py [new file with mode: 0644]

index 716fd6f3ff3fde94c2286aaf1a3606baef33726b..4cc226a2182a9008fec7d41fca7b1871fdef6dde 100644 (file)
@@ -89,6 +89,7 @@ from A_VALIDATOR import RangeVal, EnumVal, TypeVal, PairVal
 from A_VALIDATOR import CardVal, InstanceVal
 from A_VALIDATOR import VerifTypeTuple, VerifExiste
 from A_VALIDATOR import FileExtVal, FunctionVal
+from A_VALIDATOR import CreeMotClef 
 
 # On remplace la factory des validateurs initialement dans Noyau par celle
 # de A_VALIDATOR
diff --git a/ProcessOutputs_Eficas/ExtractGeneratorLoadLineandTransfoDico.py b/ProcessOutputs_Eficas/ExtractGeneratorLoadLineandTransfoDico.py
new file mode 100644 (file)
index 0000000..d918810
--- /dev/null
@@ -0,0 +1,620 @@
+import os\r
+import sys\r
+import numpy as np\r
+import copy\r
+\r
+#import Storage\r
+\r
+\r
+def getNominalkV(NetworkFile):\r
+    print "begin getNominalkV for ", NetworkFile\r
+\r
+    print "version en dur"\r
+    BusList=(1,2,3,4,6)\r
+    LinesList=(7,8,9,10)\r
+    TransfosList=('Transfos_A', 'Transfos_B', 'Transfos_C', 'Transfos_D')\r
+    return BusList, LinesList, TransfosList\r
+\r
+    import psspy\r
+    import redirect\r
+\r
+    psspy.psseinit(80000)\r
+    redirect.psse2py()\r
+    psspy.progress_output(6)\r
+\r
+    psspy.case(NetworkFile)\r
+    print "before buses"\r
+    # Buses\r
+\r
+    sid = -1\r
+    flag = 2\r
+    ierr, ret = psspy.abusreal(sid, flag, ['BASE'])\r
+    Storage.BusBase = ret[0]\r
+\r
+    ierr, carray = psspy.abuschar(sid, flag, ['NAME'])\r
+    Storage.BusBaseList = {}\r
+    for i in range(len(carray[0])):\r
+        Storage.BusBaseList[carray[0][i]] = ret[0][i]\r
+\r
+    BusList = []\r
+    for item in Storage.BusBase:\r
+        if item not in BusList:\r
+            BusList.append(item)\r
+    BusList = sorted(BusList)\r
+\r
+    print "after buses"\r
+\r
+    # Lines\r
+\r
+    owner = 1\r
+    ties = 1\r
+    flag = 2\r
+    entry = 1\r
+    string = ['FROMNAME', 'TONAME']\r
+    ierr, carray = psspy.abrnchar(sid, owner, ties, flag, entry, string)\r
+\r
+    for i in range(len(carray[0])):\r
+        nom = Storage.BusBaseList[carray[0][i]]\r
+        name = carray[0][i] + '-' + carray[1][i]\r
+        Storage.LinesBaseList[name] = nom\r
+        Storage.LinesBase.append(nom)\r
+\r
+    LinesList = []\r
+    for item in Storage.LinesBase:\r
+        if item not in LinesList:\r
+            LinesList.append(item)\r
+    LinesList = sorted(LinesList)\r
+\r
+    print "after lines"\r
+\r
+    # Transfos\r
+\r
+    owner = 1\r
+    ties = 1\r
+    flag = 6\r
+    entry = 1\r
+    string = ['FROMNAME', 'TONAME']\r
+    ierr, carray = psspy.abrnchar(sid, owner, ties, flag, entry, string)\r
+\r
+    for i in range(len(carray[0])):\r
+        nom1 = Storage.BusBaseList[carray[0][i]]\r
+        nom2 = Storage.BusBaseList[carray[1][i]]\r
+        name = carray[0][i] + '-' + carray[1][i]\r
+        Storage.TransfoBaseList[name] = [nom1, nom2]\r
+        Storage.TransfoBase.append([nom1, nom2])\r
+\r
+    TransfosList = []\r
+    for item in Storage.TransfoBase:\r
+        string = str(item[0]) + ' - ' + str(item[1])\r
+        if string not in TransfosList:\r
+            TransfosList.append(string)\r
+    TransfosList = sorted(TransfosList)\r
+\r
+    print "after transfos"\r
+\r
+    # Generators\r
+\r
+    sid = -1 #all buses\r
+    flag = 1 #all in service loads/generators (4 all loads/generators)\r
+\r
+    string = ['NUMBER']\r
+    ierr,iarray = psspy.amachint(sid,flag,string)\r
+\r
+    string = ['NAME','ID']\r
+    ierr,carray = psspy.amachchar(sid,flag,string)\r
+\r
+    for i in range(len(iarray[0])):\r
+        idname = "GR" + carray[1][i]\r
+        machinename = carray[0][i].strip()+ "__" + idname\r
+        machinename = machinename.replace(" ","_")\r
+        machinename = machinename.replace("-","_")\r
+        machinename = machinename.replace(".","_")\r
+        machinename = machinename.replace("&","and")\r
+        try:\r
+            int(machinename[0])\r
+            machinename = "_" + machinename\r
+        except:\r
+            pass\r
+        Storage.GenBaseList[machinename] = iarray[0][i]\r
+\r
+    return BusList, LinesList, TransfosList\r
+\r
+#PN --> inutiles\r
+#def getBusNominalkV(NetworkFile):\r
+#    import psspy\r
+#    import redirect\r
+#\r
+#    psspy.psseinit(80000)\r
+#    redirect.psse2py()\r
+#    psspy.progress_output(6)\r
+#\r
+#    psspy.case(NetworkFile)\r
+#\r
+#    sid = -1\r
+#    flag = 2\r
+#    ierr, ret = psspy.abusreal(sid, flag, ['BASE'])\r
+#    Storage.BusBase = ret[0]\r
+#\r
+#    ierr, carray = psspy.abuschar(sid, flag, ['NAME'])\r
+#    buses = {}\r
+#    for i in range(len(carray[0])):\r
+#        buses[carray[0][i]] = ret[0][i]\r
+#    Storage.BusNames = buses\r
+#    ret = []\r
+#    for item in Storage.BusBase:\r
+#        if item not in ret:\r
+#            ret.append(item)\r
+#    return sorted(ret)\r
+\r
+#def updateConts():\r
+#    Storage.ContFullList = []\r
+#    tmp = Storage.BusBaseList.keys()\r
+#    tmp.sort()\r
+#    for key in tmp:\r
+#        Storage.ContFullList.append(key)\r
+#    tmp = Storage.GenBaseList.keys()\r
+#    tmp.sort()\r
+#    for key in tmp:\r
+#        Storage.ContFullList.append(key)\r
+#    tmp = Storage.LinesBaseList.keys()\r
+#    tmp.sort()\r
+#    for key in tmp:\r
+#        Storage.ContFullList.append(key)\r
+#    tmp = Storage.TransfoBaseList.keys()\r
+#    tmp.sort()\r
+#    for key in tmp:\r
+#        Storage.ContFullList.append(key)\r
+#    print Storage.ContFullList\r
+#    return Storage.ContFullList\r
+#\r
+#def newContingency(MatList):\r
+#    Storage.CustomContingencies.append(MatList)\r
+#\r
+#def checkIfBorder(graph, key, depth, tmplist):\r
+#    if key in tmplist:\r
+#        return True\r
+#    if depth == 0:\r
+#        return False\r
+#    NonBorders = 0\r
+#    for item in graph[key]:\r
+#        if not checkIfBorder(graph, item, depth - 1, tmplist):\r
+#            NonBorders += 1\r
+#    if NonBorders < 2: # A generator is considered as isolated if it has less than two non-borders neighbours\r
+#        if key not in tmplist:\r
+#            tmplist.append(key)\r
+#        return True\r
+#    return False\r
+#\r
+#def getTrueLines(NetworkFile):\r
+#    import psspy\r
+#    import redirect\r
+#\r
+#    psspy.psseinit(80000)\r
+#    redirect.psse2py()\r
+#    psspy.progress_output(6)\r
+#\r
+#    psspy.case(NetworkFile)\r
+#\r
+#    sid = -1\r
+#    owner = 1\r
+#    ties = 1\r
+#    flag = 4 # 6 for two-winding transfos\r
+#    entry = 1 #each branch once, not both directions\r
+#    string = ['FROMNAME', 'TONAME', 'ID']\r
+#    ierr, iarray = psspy.abrnchar(sid, owner, ties, flag, entry, string)\r
+#    string = ['FROMNUMBER', 'TONUMBER']\r
+#    ierr, carray = psspy.abrnint(sid, owner, ties, flag, entry, string)\r
+#\r
+#    lst = []\r
+#    tmplist = []\r
+#    try:\r
+#        for i in range(len(carray[0])):\r
+#            if carray[0][i] not in lst and carray[0][i] not in tmplist:\r
+#                tmplist.append(carray[0][i])\r
+#            elif carray[0][i] not in lst and carray[0][i] in tmplist:\r
+#                tmplist.remove(carray[0][i])\r
+#                lst.append(carray[0][i])\r
+#            if carray[1][i] not in lst and carray[1][i] not in tmplist:\r
+#                tmplist.append(carray[1][i])\r
+#            elif carray[1][i] not in lst and carray[1][i] in tmplist:\r
+#                tmplist.remove(carray[1][i])\r
+#                lst.append(carray[1][i])\r
+#    except:\r
+#        pass\r
+#\r
+#    # Create the graph\r
+#    graph = {}\r
+#    for i in range(len(carray[0])):\r
+#        try:\r
+#            if graph[carray[0][i]]:\r
+#                pass\r
+#        except:\r
+#            graph[carray[0][i]] = []\r
+#        if carray[1][i] not in graph[carray[0][i]]:\r
+#            graph[carray[0][i]].append(carray[1][i])\r
+#        try:\r
+#            if graph[carray[1][i]]:\r
+#                pass\r
+#        except:\r
+#            graph[carray[1][i]] = []\r
+#        if carray[0][i] not in graph[carray[1][i]]:\r
+#            graph[carray[1][i]].append(carray[0][i])\r
+#\r
+#    # Search it twice, to ensure everything is mapped\r
+#    for key in sorted(graph.keys()):\r
+#        checkIfBorder(graph, key, Storage.RecursiveDepth, tmplist)\r
+#    for key in reversed(sorted(graph.keys())):\r
+#        checkIfBorder(graph, key, Storage.RecursiveDepth, tmplist)\r
+#\r
+#    Storage.IsolatedGenList = []\r
+#    # Unfold it\r
+#    for i in range(len(carray[0])):\r
+#        if carray[0][i] in tmplist:\r
+#            if iarray[0][i] not in Storage.IsolatedGenList:\r
+#                Storage.IsolatedGenList.append(iarray[0][i])\r
+#        if carray[1][i] in tmplist:\r
+#            if iarray[1][i] not in Storage.IsolatedGenList:\r
+#                Storage.IsolatedGenList.append(iarray[1][i])\r
+#\r
+#    lines = []\r
+#    outLines = []\r
+#    for i in range(len(iarray[0])):\r
+#        name = iarray[0][i] + '-' + iarray[1][i]\r
+#        if '@' in iarray[2][i] or '*' in iarray[2][i]:\r
+#            outLines.append(name)\r
+#        elif iarray[0][i] not in Storage.IsolatedGenList and iarray[1][i] not in Storage.IsolatedGenList:\r
+#            lines.append(name)\r
+#        else:\r
+#            outLines.append(name)\r
+#    Storage.TrueLines = lines\r
+#    return lines\r
+#\r
+#NoBreakersandSwitches = True\r
+#\r
+#def ExtractGeneratorLoadLineandTransfoDico(NetworkFile,PSSE_PATH):\r
+#    import os\r
+#    import sys\r
+#    import numpy as np\r
+#\r
+#    print NetworkFile\r
+#    print PSSE_PATH\r
+#    sys.path.append(PSSE_PATH)\r
+#    os.environ['PATH'] +=  ';' + PSSE_PATH + ';'\r
+#\r
+#    import psspy\r
+#    import redirect\r
+#\r
+#    ###initialization PSSE\r
+#    psspy.psseinit(10000)\r
+#    _i=psspy.getdefaultint()\r
+#    _f=psspy.getdefaultreal()\r
+#    _s=psspy.getdefaultchar()\r
+#    redirect.psse2py()\r
+#\r
+#    # Silent execution of PSSe\r
+#    islct=6 # 6=no output; 1=standard\r
+#    psspy.progress_output(islct)\r
+#\r
+#    #open Network File\r
+#    psspy.case(NetworkFile)\r
+#\r
+#    # Extract Buses\r
+#    sid = -1 # all buses\r
+#    flag = 2\r
+#    string = ['NUMBER']\r
+#    ierr, iarray = psspy.abusint(sid, flag, string)\r
+#\r
+#    string = ['NAME', 'EXNAME']\r
+#    ierr, carray = psspy.abuschar(sid, flag, string)\r
+#\r
+#    string = ['BASE']\r
+#    ierr, ret = psspy.abusreal(sid, flag, string)\r
+#\r
+#    BusDico = {}\r
+#    BusNominal = {}\r
+#    for i in range(len(iarray[0])):\r
+#        BusNum = iarray[0][i]\r
+#        BusDico[str(BusNum)] = carray[0][i].strip()\r
+#        BusNominal[BusDico[str(BusNum)]] = ret[0][i]    \r
+#\r
+#    #Extract Loads\r
+#    sid = -1 #all buses\r
+#    flag = 1 #all in service loads/generators (4 all loads/generators)\r
+#\r
+#\r
+#    string = ['NUMBER']\r
+#    ierr,iarray = psspy.aloadint(sid,flag,string)\r
+#\r
+#    string = ['NAME','ID','EXNAME']\r
+#    ierr,carray = psspy.aloadchar(sid,flag,string)\r
+#\r
+#    string = ['mvaact']\r
+#    ierr, xdata = psspy.aloadcplx(sid, flag, string)\r
+#\r
+#    LoadDico = {}  # [Bus name, load ID, extended bus name, bus number]\r
+#    for i in range(len(iarray[0])):\r
+#        idname = "Lo" + carray[1][i].strip()\r
+##        try: #id is an integer\r
+##            idname = "Lo" + str(int(carray[1][i]))\r
+##        except: #id is not an integer\r
+##            idname = "Lo" + carray[1][i]\r
+#        loadname = carray[0][i].strip()+ "__" + idname\r
+#        loadname = loadname.replace(" ","_")\r
+#        loadname = loadname.replace("-","_")\r
+#        loadname = loadname.replace(".","_")\r
+#        loadname = loadname.replace("&","and")\r
+#        try:\r
+#            int(loadname[0])\r
+#            loadname="_" + loadname\r
+#        except:\r
+#            pass\r
+#        LoadDico[loadname]= {}\r
+#        LoadDico[loadname]['NAME'] = carray[0][i].strip()\r
+#        LoadDico[loadname]['ID'] = carray[1][i]\r
+#        LoadDico[loadname]['EXNAME'] =carray[2][i]\r
+#        LoadDico[loadname]['NUMBER']=iarray[0][i]\r
+#        LoadDico[loadname]['P']=np.real(xdata)[0][i]\r
+#        LoadDico[loadname]['Q']=np.imag(xdata)[0][i]\r
+#\r
+#    #Extract Generators\r
+#    sid = -1 #all buses\r
+#    flag = 1 #all in service loads/generators (4 all loads/generators)\r
+#\r
+#    string = ['NUMBER']\r
+#    ierr,iarray = psspy.amachint(sid,flag,string)\r
+#\r
+#    string = ['NAME','ID','EXNAME']\r
+#    ierr,carray = psspy.amachchar(sid,flag,string)\r
+#\r
+#    rstrings = ['pgen','qgen','mbase','pmax','qmax','pmin','qmin']\r
+#    ierr, rarray = psspy.amachreal(sid, flag, rstrings)\r
+#\r
+#    MachineDico = {} # [Bus name, machine ID, extended bus name, bus number]\r
+#    for i in range(len(iarray[0])):\r
+#        idname = "Gr" + carray[1][i].strip()\r
+###        try:\r
+###            idname = "Gr" + str(int(carray[1][i]))\r
+###        except:\r
+###            idname = "Gr" + carray[1][i]\r
+#        machinename = carray[0][i].strip()+ "__" + idname\r
+#        machinename = machinename.replace(" ","_")\r
+#        machinename = machinename.replace("-","_")\r
+#        machinename = machinename.replace(".","_")\r
+#        machinename = machinename.replace("&","and")\r
+#        try:\r
+#            int(machinename[0])\r
+#            machinename="_" + machinename\r
+#        except:\r
+#            pass\r
+#        MachineDico[machinename]={}\r
+#        MachineDico[machinename]['NAME'] = carray[0][i].strip()\r
+#        MachineDico[machinename]['ID'] = carray[1][i]\r
+#        MachineDico[machinename]['EXNAME'] =carray[2][i]\r
+#        MachineDico[machinename]['NUMBER']=iarray[0][i]\r
+#        MachineDico[machinename]['P']=rarray[0][i]\r
+#        MachineDico[machinename]['Q']=rarray[1][i]\r
+#        MachineDico[machinename]['PMAX']=rarray[3][i]\r
+#        MachineDico[machinename]['QMAX']=rarray[4][i]\r
+#        MachineDico[machinename]['PMIN']=rarray[5][i]\r
+#        MachineDico[machinename]['QMIN']=rarray[6][i]\r
+#\r
+#    #Extract Motors\r
+#    sid = -1 #all buses\r
+#    flag = 1 #all in service loads/generators (4 all loads/generators)\r
+#\r
+#    string = ['NUMBER','PSETCODE','BASECODE']\r
+#    ierr,iarray = psspy.aindmacint(sid,flag,string)\r
+#\r
+#    string = ['NAME','ID','EXNAME']\r
+#    ierr,carray = psspy.aindmacchar(sid,flag,string)\r
+#\r
+#    rstrings = ['psetpoint','mbase','p','q']\r
+#    ierr, rarray = psspy.aindmacreal(sid, flag, rstrings)\r
+#\r
+#\r
+#    MotorDico = {} # [Bus name, machine ID, extended bus name, bus number]\r
+#    for i in range(len(iarray[0])):\r
+#        idname = "Mo" + carray[1][i].strip()\r
+###        try:\r
+###            idname = "Gr" + str(int(carray[1][i]))\r
+###        except:\r
+###            idname = "Gr" + carray[1][i]\r
+#        motorname = carray[0][i].strip()+ "__" + idname\r
+#        motorname = motorname.replace(" ","_")\r
+#        motorname = motorname.replace("-","_")\r
+#        motorname = motorname.replace(".","_")\r
+#        motorname = motorname.replace("&","and")\r
+#        try:\r
+#            int(motorname[0])\r
+#            motorname="_" + motorname\r
+#        except:\r
+#            pass\r
+#        MotorDico[motorname]={}\r
+#        MotorDico[motorname]['NAME'] = carray[0][i].strip()\r
+#        MotorDico[motorname]['ID'] = carray[1][i]\r
+#        MotorDico[motorname]['EXNAME'] =carray[2][i]\r
+#        MotorDico[motorname]['NUMBER']=iarray[0][i]\r
+#        MotorDico[motorname]['PSETCODE']=iarray[1][i]\r
+#        MotorDico[motorname]['BASECODE']=iarray[2][i]\r
+#        MotorDico[motorname]['PSETPOINT']=rarray[0][i]\r
+#        MotorDico[motorname]['MBASE']=rarray[1][i]\r
+#        MotorDico[motorname]['P']=rarray[2][i]\r
+#        MotorDico[motorname]['Q']=rarray[3][i]\r
+#\r
+#\r
+#    #Extract Lignes\r
+#    sid = -1\r
+#    owner = 1\r
+#    ties = 1\r
+#    flag = 2 #6 for two-winding transfos\r
+#    entry = 1 #each branch once, not both directions\r
+#    string = ['FROMNUMBER','TONUMBER']\r
+#    ierr,iarray = psspy.abrnint(sid,owner,ties,flag,entry,string)\r
+#    string = ['FROMNAME','TONAME','FROMEXNAME','TOEXNAME','ID']\r
+#    ierr,carray = psspy.abrnchar(sid,owner,ties,flag,entry,string)\r
+#\r
+#    LineDico = {} #[linename, Bus name 1, Bus name 2, ID, extended bus name 1, extended bus name 2, bus number 1, bus number 2]\r
+#    for i in range(len(iarray[0])):\r
+#        idname = carray[4][i].strip()\r
+#        #idname = carray[4][i]\r
+#        if '@' in idname:\r
+#            idname = idname.replace('@','Br')\r
+#        elif '*' in idname:\r
+#            idname = idname.replace('*','Sw')\r
+#        else:\r
+#            try:\r
+#                idname = 'Li' + str(int(idname))\r
+#            except:\r
+#                idname = 'Li' + idname\r
+#        linename =carray[0][i].strip() + "__" + carray[1][i].strip() + "__" + idname\r
+#        linename = linename.replace(" ","_")\r
+#        linename = linename.replace("-","_")\r
+#        linename = linename.replace(".","_")\r
+#        linename = linename.replace("&","and")\r
+#        try:\r
+#            int(linename[0])\r
+#            linename="_" + linename\r
+#        except:\r
+#            pass\r
+#        if NoBreakersandSwitches:\r
+#            if 'Br' not in idname and 'Sw' not in idname:\r
+#                LineDico[linename]={}\r
+#                LineDico[linename]['FROMNAME']=carray[0][i].strip()\r
+#                LineDico[linename]['TONAME']=carray[1][i].strip()\r
+#                LineDico[linename]['ID']=carray[4][i]\r
+#                LineDico[linename]['FROMEXNAME']=carray[2][i]\r
+#                LineDico[linename]['TOEXNAME']=carray[3][i]\r
+#                LineDico[linename]['FROMNUMBER']=iarray[0][i]\r
+#                LineDico[linename]['TONUMBER']=iarray[1][i]\r
+#\r
+#    #Extract Branches\r
+#    sid = -1\r
+#    owner = 1\r
+#    ties = 1\r
+#    flag = 4 # lines & transfos\r
+#    entry = 1 #each branch once, not both directions\r
+#    string = ['FROMNUMBER','TONUMBER']\r
+#    ierr, iarray = psspy.abrnint(sid, owner, ties, flag, entry, string)\r
+#    string = ['FROMNAME','TONAME','FROMEXNAME','TOEXNAME','ID']\r
+#    ierr, carray = psspy.abrnchar(sid, owner, ties, flag, entry, string)\r
+#\r
+#    BranchesDico = {} #[linename, Bus name 1, Bus name 2, ID, extended bus name 1, extended bus name 2, bus number 1, bus number 2]\r
+#    for i in range(len(iarray[0])):\r
+#        idname = carray[4][i]\r
+#        if '@' in idname:\r
+#            idname = idname.replace('@','Br')\r
+#        elif '*' in idname:\r
+#            idname = idname.replace('*','Sw')\r
+#        else:\r
+#            idname = 'LI' + idname\r
+#        linename = carray[0][i].strip() + "__" + carray[1][i].strip() + "__" + idname\r
+#        linename = linename.replace(" ","_")\r
+#        linename = linename.replace("-","_")\r
+#        linename = linename.replace(".","_")\r
+#        linename = linename.replace("&","and")\r
+#        try:\r
+#            int(linename[0])\r
+#            linename = "_" + linename\r
+#        except:\r
+#            pass\r
+#        if linename[-1] == '_':\r
+#            linename = linename[:-1]\r
+#        BranchesDico[linename] = {}\r
+#        BranchesDico[linename]['FROMNAME'] = carray[0][i].strip()\r
+#        BranchesDico[linename]['TONAME'] = carray[1][i].strip()\r
+#        BranchesDico[linename]['ID'] = carray[4][i]\r
+#        BranchesDico[linename]['FROMEXNAME'] = carray[2][i]\r
+#        BranchesDico[linename]['TOEXNAME'] = carray[3][i]\r
+#        BranchesDico[linename]['FROMNUMBER'] = iarray[0][i]\r
+#        BranchesDico[linename]['TONUMBER'] = iarray[1][i]\r
+#\r
+#    \r
+#    #Extract Transfos\r
+#    sid = -1\r
+#    owner = 1\r
+#    ties = 1\r
+#    flag = 6 #two-winding transfos\r
+#    entry = 1 #each branch once, not both directions\r
+#    string = ['FROMNUMBER','TONUMBER']\r
+#    ierr,iarray = psspy.abrnint(sid,owner,ties,flag,entry,string)\r
+#    string = ['FROMNAME','TONAME','FROMEXNAME','TOEXNAME','ID']\r
+#    ierr,carray = psspy.abrnchar(sid,owner,ties,flag,entry,string)\r
+#\r
+#    TfoDico = {} #[linename, Bus name 1, Bus name 2, machine ID, extended bus name 1, extended bus name 2, bus number 1, bus number 2]\r
+#    for i in range(len(iarray[0])):\r
+#        idname = 'Tr' + carray[4][i].strip()\r
+###        try:\r
+###            idname = 'Tr' + str(int(carray[4][i]))\r
+###        except:\r
+###            idname = 'Tr' + carray[4][i]\r
+#        tfoname = carray[0][i].strip() + "__" + carray[1][i].strip() + "__" + idname\r
+#        tfoname = tfoname.replace(" ","_")\r
+#        tfoname = tfoname.replace("-","_")\r
+#        tfoname = tfoname.replace(".","_")\r
+#        tfoname = tfoname.replace("&","and")\r
+#        try:\r
+#            int(tfoname[0])\r
+#            tfoname="_" + tfoname\r
+#        except:\r
+#            pass\r
+#        TfoDico[tfoname]={}\r
+#        TfoDico[tfoname]['FROMNAME']=carray[0][i].strip()\r
+#        TfoDico[tfoname]['TONAME']=carray[1][i].strip()\r
+#        TfoDico[tfoname]['ID']=carray[4][i]\r
+#        TfoDico[tfoname]['FROMEXNAME']=carray[2][i]\r
+#        TfoDico[tfoname]['TOEXNAME']=carray[3][i]\r
+#        TfoDico[tfoname]['FROMNUMBER']=iarray[0][i]\r
+#        TfoDico[tfoname]['TONUMBER']=iarray[1][i]\r
+#        TfoDico[tfoname]['#WIND']=2\r
+#    print "Read Transfos"\r
+#\r
+#    #Extract 3 winding Transfos\r
+#    sid = -1 #assume a subsystem containing all buses in working case\r
+#    owner_3flow = 1 #1 = use bus ownership 2 = use tfo ownership\r
+#    ties_3flow = 3 #ignored bc sid is negative. 3 = interior subsystem and subsystem tie 3 winding transformers \r
+#    flag=3 #all 3 winding transfo windings\r
+#    string = ['wind1number','wind2number','wind3number']\r
+#    ierr,iarray = psspy.awndint(sid,owner,ties,flag,entry,string)\r
+#    string = ['wind1name','wind2name','wind3name','wind1exname','wind2exname','wind3exname','id']\r
+#    ierr,carray = psspy.awndchar(sid,owner,ties,flag,entry,string)\r
+#\r
+#    #[Bus name 1, Bus name 2, Bus name 3, machine ID, extended bus name 1, extended bus name 2, extended bus name 3, bus number 1, bus number 2, bus number 3]\r
+#    for i in range(len(iarray[0])):\r
+#        idname = 'Tr' + carray[6][i].strip()\r
+###        try:\r
+###            idname = 'Tr' + str(int(carray[4][i]))\r
+###        except:\r
+###            idname = 'Tr' + carray[4][i]\r
+#        tfoname = carray[0][i].strip() + "__" + carray[1][i].strip() + "__" + carray[2][i].strip() + "__" + idname\r
+#        tfoname = tfoname.replace(" ","_")\r
+#        tfoname = tfoname.replace("-","_")\r
+#        tfoname = tfoname.replace(".","_")\r
+#        tfoname = tfoname.replace("&","and")\r
+#        try:\r
+#            int(tfoname[0])\r
+#            tfoname="_" + tfoname\r
+#        except:\r
+#            pass\r
+#        TfoDico[tfoname]={}\r
+#        TfoDico[tfoname]['FROMNAME']=carray[0][i].strip()\r
+#        TfoDico[tfoname]['TONAME']=carray[1][i].strip()\r
+#        TfoDico[tfoname]['3NAME']=carray[2][i].strip()\r
+#        TfoDico[tfoname]['ID']=carray[6][i]\r
+#        TfoDico[tfoname]['FROMEXNAME']=carray[3][i]\r
+#        TfoDico[tfoname]['TOEXNAME']=carray[4][i]\r
+#        TfoDico[tfoname]['3EXNAME']=carray[5][i]\r
+#        TfoDico[tfoname]['FROMNUMBER']=iarray[0][i]\r
+#        TfoDico[tfoname]['TONUMBER']=iarray[1][i]\r
+#        TfoDico[tfoname]['3NUMBER']=iarray[2][i]\r
+#        TfoDico[tfoname]['#WIND']=3\r
+#    print "Read 3-Winding Transfos"\r
+#\r
+#    return MachineDico, LoadDico, LineDico, TfoDico, MotorDico, BusDico, BranchesDico, BusNominal\r
+#\r
+#\r
+##NetworkFile = r'\\Atlas.edf.fr\co\dpit-cist-siege\Der.012\Dpt-Etudes-Reseaux.001\Outils DER - Divers (excel, codes python, etc.)\PSEN_V15\Example\Results\N_20160705_17h36m34\package0_N_20160705_17h36m34\BaseCase.sav'\r
+##PSSE_PATH=r"C:\Program Files (x86)\PTI\PSSE33\PSSBIN"\r
+##sys.path.append(PSSE_PATH)\r
+##os.environ['PATH'] +=  ';' + PSSE_PATH + ';'\r
+##getNominalkV(NetworkFile)\r
+##updateConts()\r
diff --git a/ProcessOutputs_Eficas/PSEN_Cata_N1.py b/ProcessOutputs_Eficas/PSEN_Cata_N1.py
new file mode 100644 (file)
index 0000000..f259816
--- /dev/null
@@ -0,0 +1,250 @@
+# -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2013   EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+# --------------------------------------------------
+# debut entete
+# --------------------------------------------------
+
+#from Accas import ASSD, JDC_CATA, AU_MOINS_UN, PROC, SIMP, FACT, OPER, MACRO, BLOC, A_VALIDATOR
+from Accas import *
+import opsPSEN_N1
+#
+#
+
+# import types
+class Tuple:
+   def __init__(self,ntuple):
+     self.ntuple=ntuple
+
+   def __convert__(self,valeur):
+     if type(valeur) == types.StringType:
+       return None
+     if len(valeur) != self.ntuple:
+       return None
+     return valeur
+
+   def info(self):
+     return "Tuple de %s elements" % self.ntuple
+
+   __repr__=info
+   __str__=info
+
+# class Matrice:
+#   def __init__(self,nbLigs=None,nbCols=None,methodeCalculTaille=None,formatSortie="ligne",valSup=None,valMin=None,structure=None):
+#       self.nbLigs=nbLigs
+#       self.nbCols=nbCols
+#       self.methodeCalculTaille=methodeCalculTaille
+#       self.formatSortie=formatSortie
+#       self.valSup=valSup
+#       self.valMin=valMin
+#       self.structure=structure
+#
+#   def __convert__(self,valeur):
+#     # Attention ne verifie pas grand chose
+#     if type(valeur) != types.ListType :
+#       return None
+#     return valeur
+#
+#   def info(self):
+#       return "Matrice %s x %s" % (self.nbLigs, self.nbCols)
+#
+#       __repr__=info
+#       __str__=info
+
+
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'PSEN',
+                 execmodul = None,
+                 regles = ( AU_MOINS_UN ( 'CASE_SELECTION' ),
+                            # AU_MOINS_UN ( 'DIRECTORY' ),
+                            # AU_MOINS_UN ( 'DISTRIBUTION' ),
+                            # AU_MOINS_UN ( 'SIMULATION' ),
+                            # AU_PLUS_UN ( 'PSSE_PARAMETERS' ),
+                            # AU_PLUS_UN ( 'DIRECTORY' ),
+                            # AU_PLUS_UN ( 'SIMULATION' ),
+                            # AU_PLUS_UN ( 'CORRELATION' ),
+                            # AU_PLUS_UN ( 'N_1_GENERATORS' ),
+                            # AU_PLUS_UN ( 'N_1_LINES' ),
+                            # AU_PLUS_UN ( 'N_1_LOADS' ),
+                            # AU_PLUS_UN ( 'N_1_TRANSFORMERS' ),
+
+                            ),
+                 ) # Fin JDC_CATA
+
+
+# --------------------------------------------------
+# fin entete
+# --------------------------------------------------
+## TODO : RUN
+CASE_SELECTION = MACRO ( nom = "CASE_SELECTION",
+                      sd_prod = opsPSEN_N1.INCLUDE,
+                      op_init = opsPSEN_N1.INCLUDE_context,
+                      fichier_ini = 1,
+                      op = None,
+                      fr = "Sélectionnez les cas à analyser",
+                      ang = 'Select the cases to analyze',
+                      PSSE_path = SIMP(statut="o",typ='Repertoire',defaut='C:\Program Files (x86)\PTI\PSSE33\PSSBIN'),
+                      output_folder = SIMP(statut="o", typ="Repertoire"),
+
+
+                      BusesList = SIMP(statut = 'f', typ = 'R', min = 0, max = '**', defaut = (), homo = 'SansOrdreNiDoublon'),
+                      LinesList = SIMP(statut = 'f', typ = 'R', min = 0, max = '**', defaut = (), homo = 'SansOrdreNiDoublon'),
+                      TransformersList = SIMP(statut = 'f', typ = 'TXM', min = 0, max = '**', defaut = (), homo = 'SansOrdreNiDoublon'),
+                      MaxDepth = SIMP(statut = 'o', typ = 'I', defaut = 5),
+                      OutputNewCsv = SIMP ( statut = "o",typ=bool,defaut=False,),
+                 )
+N_PROCESSING_OPTIONS = PROC ( nom = 'N_PROCESSING_OPTIONS',
+                            op = None,
+                            ang = "Select whether the program should be displaying data ablout the different categories. The values displayed will be the min, max, and mean of each item, plus a chart.",  
+                           Output_bus_values = SIMP(statut = 'o', typ = bool, defaut = True),
+                           Output_lines_values = SIMP(statut = 'o', typ = bool, defaut = True),
+                           Output_transformer_values = SIMP(statut = 'o', typ = bool, defaut = True),
+                           Threshold_selection_for_the_treated_cases = FACT(
+                              statut = 'f',
+                              Branches = SIMP(statut="o",typ=Tuple(3),defaut=(0,0,0),validators=VerifTypeTuple(('R','R','R'),),),
+                              Transformers = SIMP(statut="o",typ=Tuple(3),defaut=(0,0,0),validators=VerifTypeTuple(('R','R','R'),),),
+                              High_voltage = SIMP(statut="o",typ=Tuple(3),defaut=(0,0,0),validators=VerifTypeTuple(('R','R','R'),),),
+                              Low_voltage = SIMP(statut="o",typ=Tuple(3),defaut=(0,0,0),validators=VerifTypeTuple(('R','R','R'),),),
+                           ),
+                           )
+
+
+CONTINGENCY_OPTIONS = PROC (nom = 'CONTINGENCY_OPTIONS',
+                            op = None,
+                            
+                            GeneralOptions = FACT(statut='o',
+                                Vmin = SIMP(statut = 'o', typ = 'R', defaut = 0.9, val_min = 0),
+                                Vmax = SIMP(statut = 'o', typ = 'R', defaut = 1.1, val_min = 0),
+                                ContingencyRate = SIMP(statut = 'o', typ = 'TXM', defaut = 'a', into=['a', 'b']),
+                                FlowLimitLines = SIMP(statut = 'o', typ = 'I', defaut = 120, val_min = 0),
+                                FlowLimitTransformers = SIMP(statut = 'o', typ = 'I', defaut = 120, val_min = 0),
+                                Tolerance = SIMP(statut = 'o', typ = 'R', defaut = 0.5, val_min = 0),
+                                TripLines = SIMP(statut = 'o', typ = bool, defaut = True),
+                                TripTransfos = SIMP(statut = 'o', typ = bool, defaut = True),
+                                TripGenerators = SIMP(statut = 'o', typ = bool, defaut = True),
+                                ),                            
+
+                            LoadFlowOptions = FACT(statut='o',
+                                AdjustTaps = SIMP(statut = 'o', typ = 'TXM', into = ['0 - Lock', '1 - Stepping', '2 - Direct'], defaut = '1 - Stepping'),
+                                AdjustDCtaps = SIMP(statut = 'o', typ = 'TXM', into = ['0 - Disable', '1 - Enable'], defaut = '1 - Enable'),
+                                SolutionMethod = SIMP(statut = 'o', typ = 'TXM', into = ['0 - FDNS', '1 - FNSL', '2 - Optimized FDNS'], defaut = '1 - FNSL'),
+                                AdjustSwitchedShunts = SIMP(statut = 'o', typ = 'TXM', into = ['0 - Disable', '1 - Enable', '2 - Enable continuous mode'], defaut = '1 - Enable'),
+                                DispatchMode = SIMP(statut = 'o', typ = 'TXM', into = ['0 - Disable', '1 - Reserve', '2 - Pmax', '3 - Inertia', '4 - Droop'], defaut = '1 - Reserve'),
+                                FlatStart = SIMP(statut = 'o', typ = bool, defaut = False),
+                                VarLimits = SIMP(statut = 'o', typ = 'I', defaut = 99,ang = 'if set to -1, var limits will not be applied'),
+                                ),
+                            
+                            OutputOptions = FACT(statut='o',
+                                consigne1 = SIMP(statut='o',homo='information',typ = "TXM",defaut = 'Output PSSE multiple contingency report to Shell?'),
+                                MultipleContingencyReport = SIMP(statut = 'o', typ = bool, defaut = True, ang = 'Output PSSE multiple contingency report to Shell?'),
+                                consigne2 = SIMP(statut='o',homo='information',typ = "TXM",defaut = 'Write an Excel file for the results of each case file?'),
+                                WriteIndivExcels = SIMP(statut = 'o', typ = bool, defaut = True),
+                                consigne3 = SIMP(statut='o',homo='information',typ = "TXM",defaut = 'Add a tab in Excel results file for the differences between the max flow rate (MVAR) and the actual flow rate in lines and transformers?'),
+                                WriteFlowDifs = SIMP(statut = 'o', typ = bool, defaut = True),                            
+                            ),
+                        )
+
+
+
+
+CONTINGENCY_SELECTION = PROC(nom='CONTINGENCY_SELECTION',op = None,
+                      SelectionMethod = SIMP(statut='o',typ='TXM',into=['CaseSelectionFromFile','SelectAllCases','SelectWorstCases'],
+                      ),
+                      
+                      b_file = BLOC(condition="SelectionMethod=='CaseSelectionFromFile'",
+                      CaseSelectionFromFiles = FACT(
+                           statut = 'o',
+                           regles=(AU_MOINS_UN('branch_cases','transformer_cases','high_voltage_cases','low_voltage_cases',),),
+                           branch_cases = SIMP(statut='o', defaut='', typ = ('Fichier', 'CSV file (*.csv);;All Files (*)','Sauvegarde'),),
+                           transformer_cases = SIMP(statut='o', defaut='', typ = ('Fichier', 'CSV file (*.csv);;All Files (*)','Sauvegarde',),),
+                           high_voltage_cases = SIMP(statut='o', defaut='', typ = ('Fichier', 'CSV file (*.csv);;All Files (*)','Sauvegarde'),),
+                           low_voltage_cases = SIMP(statut='o', defaut='', typ = ('Fichier', 'CSV file (*.csv);;All Files (*)','Sauvegarde'),),
+                        ),
+                        
+#                      CaseSelectionFromFile = FACT(
+#                           statut = 'o',
+#                           input_path = SIMP(statut="o",typ='Repertoire'),
+#                           branch_cases = SIMP(statut='o', typ='TXM'),
+#                           transformer_cases = SIMP(statut='o', typ='TXM'),
+#                           high_cases = SIMP(statut='o', typ='TXM'),
+#                           low_cases = SIMP(statut='o', typ='TXM'),
+#                        ),
+                        
+                        ),
+                        
+#                      b_all = BLOC(condition="SelectionMethod=='SelectAllCases'",
+#                      SelectAllCases = FACT(
+#                           statut='o',
+#                           all_cases = SIMP(statut='o', typ=bool, defaut = True),
+#                         ),
+#                         ),
+                         
+                      b_worst = BLOC(condition="SelectionMethod=='SelectWorstCases'",
+                      SelectWorstCases = FACT(
+                          regles = (UN_PARMI('AvgBranchLoad', 'AvgBranchLoadPercent'), UN_PARMI('AvgTransformerLoad', 'AvgTransformerLoadPercent'), UN_PARMI('AvgHighVoltage', 'AvgHighVoltagePercent'), UN_PARMI('AvgLowVoltage', 'AvgLowVoltagePercent'),),
+                          statut = 'o',
+                          consigne = SIMP(statut='o',homo='information',typ = "TXM",defaut = 'Choose at least one of the potential selection criteria from the SelectWorstCases list on the right.'),
+                          AvgBranchLoad = SIMP(statut = 'f', typ = 'I', defaut = 0, val_min = 0),
+                          AvgBranchLoadPercent = SIMP(statut = 'f', typ = 'I', defaut = 0, val_min = 0, val_max = 100),
+                          AvgTransformerLoad = SIMP(statut = 'f', typ = 'I', defaut = 0, val_min = 0),
+                          AvgTransformerLoadPercent = SIMP(statut = 'f', typ = 'I', defaut = 0, val_min = 0, val_max = 100),
+                          AvgHighVoltage = SIMP(statut = 'f', typ = 'I', defaut = 0, val_min = 0),
+                          AvgHighVoltagePercent = SIMP(statut = 'f', typ = 'I', defaut = 0, val_min = 0, val_max = 100),
+                          AvgLowVoltage = SIMP(statut = 'f', typ = 'I', defaut = 0, val_min = 0),
+                          AvgLowVoltagePercent = SIMP(statut = 'f', typ = 'I', defaut = 0, val_min = 0, val_max = 100),
+                        ),
+                        ),
+
+
+                      Automatic_N_2_Selection = FACT(statut='f',
+                                                     
+                          BusesList = SIMP(statut = 'o', typ = 'R', min = 0, max = '**', defaut = (), homo = 'SansOrdreNiDoublon'),
+                          LinesList = SIMP(statut = 'o', typ = 'R', min = 0, max = '**', defaut = (), homo = 'SansOrdreNiDoublon'),
+                          TransformersList = SIMP(statut = 'o', typ = 'TXM', min = 0, max = '**', defaut = (), homo = 'SansOrdreNiDoublon'),                                                    
+                        ),
+
+                     MultipleContingencyList = FACT (statut='f',
+                                                          max="**",
+                                                          ComponentList=SIMP(statut='o', typ = 'TXM', max='**', homo = 'SansOrdreNiDoublon',),
+                     ),
+
+                      )
+
+CONTINGENCY_PROCESSING = MACRO ( nom = 'CONTINGENCY_PROCESSING',
+                        sd_prod = opsPSEN_N1.PROCESS,
+                        op_init = opsPSEN_N1.PROCESS_context,
+                                                
+                        #sd_prod=None,
+
+                        op = None,
+                        fichier_ini = 1,
+                        fr = "",
+                        ang="",
+                        XLS_file = SIMP(statut="o", typ = ('Fichier', 'XLS file (*.xls);;All Files (*)',),),
+                        TabList = SIMP(statut = 'f', typ = 'TXM', min = 0, max = '**',  homo = 'SansOrdreNiDoublon'), 
+                        
+#                        b_highVoltage = BLOC(condition="'High Voltage 0' in TabList",
+#                                                     HighVoltageBuses = SIMP(statut = 'o', typ = 'TXM', min = 0, max = '**', defaut = (), homo = 'SansOrdreNiDoublon'),
+#                                                     HighVoltageContingencies = SIMP(statut = 'o', typ = 'TXM', min = 0, max = '**', defaut = (), homo = 'SansOrdreNiDoublon'),
+#                                                     ),
+                        
+                    )
+
+Ordre_Des_Commandes = ('CASE_SELECTION' , 'N_PROCESSING_OPTIONS' , 'CONTINGENCY_OPTIONS' , 'CONTINGENCY_SELECTION',)
diff --git a/ProcessOutputs_Eficas/configuration_PSEN_N1.py b/ProcessOutputs_Eficas/configuration_PSEN_N1.py
new file mode 100644 (file)
index 0000000..4ab64b8
--- /dev/null
@@ -0,0 +1,43 @@
+# -*- coding: utf-8 -*-\r
+#            CONFIGURATION MANAGEMENT OF EDF VERSION\r
+# ======================================================================\r
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG\r
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY\r
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY\r
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR\r
+# (AT YOUR OPTION) ANY LATER VERSION.\r
+#\r
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT\r
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF\r
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU\r
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.\r
+#\r
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE\r
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,\r
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.\r
+#\r
+#\r
+# ======================================================================\r
+"""\r
+    Ce module sert pour charger les paramètres de configuration d'EFICAS\r
+"""\r
+# Modules Python\r
+from InterfaceQT4 import configuration\r
+import os\r
+\r
+\r
+class CONFIG(configuration.CONFIG_BASE):\r
+\r
+  #-----------------------------------\r
+  def __init__(self,appli,repIni):\r
+  #-----------------------------------\r
+\r
+      self.labels_user=['catalogues','lang']\r
+      self.labels_eficas=['lang','rep_cata','catalogues']\r
+\r
+      configuration.CONFIG_BASE.__init__(self,appli,'.Eficas_monCode')\r
+\r
+\r
+def make_config(appli,rep):\r
+    return CONFIG(appli,rep)\r
+\r
diff --git a/ProcessOutputs_Eficas/mesScripts_PSEN_N1.py b/ProcessOutputs_Eficas/mesScripts_PSEN_N1.py
new file mode 100644 (file)
index 0000000..f3c1473
--- /dev/null
@@ -0,0 +1,57 @@
+def EficasProcessXLS(listeparam) :
+    print "dans processXLS"
+    item=listeparam[0]
+    fileNameObj=item.object.get_child('XLS_file')
+    if fileNameObj : fileName=fileNameObj.get_valeur()
+    else : fileName = ""
+    if fileName == "" : return 0, 'Nom de fichier invalide'
+
+    ongletListObj=item.object.get_child('Onglets')
+    if ongletListObj : ongletList= ongletListObj.get_valeur()
+    else : ongletList = [] 
+    if ongletList == [] : return 0, 'ongletList invalide'
+
+    busListObj=item.object.get_child('BusList')
+    if busListObj : busList= busListObj.get_valeur()
+    else : busList = [] 
+    if busList == [] : return 0, 'BusList invalide'
+
+    contListObj=item.object.get_child('ContList')
+    if contListObj : contList=contListObj.get_valeur()
+    else : contList = []
+    if contList == [] : return 0, 'ContList invalide'
+
+    dicoBus={}
+    dicoCont={}
+    for onglet in ongletList:
+        recherche=str(" ("+ str(onglet) +" )")
+        listeBusPourOnglet=[]
+        listeContPourOnglet=[]
+        for bus  in busList :  
+            nomBusSplit=str(bus).split(recherche)
+            if len(nomBusSplit) == 2 : listeBusPourOnglet.append(nomBusSplit[0])
+        for cont in contList : 
+            nomContSplit=str(cont).split(recherche)
+            if len(nomContSplit) == 2 : listeContPourOnglet.append(nomContSplit[0])
+        if listeBusPourOnglet != []  : dicoBus[onglet]=listeBusPourOnglet
+        if listeContPourOnglet != [] : dicoCont[onglet]=listeContPourOnglet
+
+    from Processor import processXLS
+    processXLS(fileName,dicoBus,dicoCont)
+    
+    #if nouvelleVal != [] : prob.set_valeur(nouvelleVal)
+
+# le dictionnaire des commandes a la structure suivante :
+# la clef est la commande qui va proposer l action
+# puis un tuple qui contient
+#      - la fonction a appeler
+#       - le label dans le menu du clic droit
+#      - un tuple contenant les parametres attendus par la fonction
+#      - appelable depuis Salome uniquement -)
+#      - appelable depuis un item valide uniquement 
+#      - toolTip
+dict_commandes={
+   'CONTINGENCY_PROCESSING': ( 
+       (EficasProcessXLS,"process",('item',),False,True,"process values "),
+                      ),
+  }
diff --git a/ProcessOutputs_Eficas/opsPSEN_N1.py b/ProcessOutputs_Eficas/opsPSEN_N1.py
new file mode 100644 (file)
index 0000000..55de6fd
--- /dev/null
@@ -0,0 +1,223 @@
+
+# -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2013   EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+print "version en dur"
+from ExtractGeneratorLoadLineandTransfoDico import *
+#from ExtractGeneratorLoadLineandTransfoDico import ExtractGeneratorLoadLineandTransfoDico2
+
+#import Storage
+
+def INCLUDE(self,PSSE_path,**args):
+   """
+       Fonction sd_prod pour la macro INCLUDE
+   """
+   CaseFolder = args['output_folder']
+   #Storage.MaximumDepth = args['MaxDepth']
+   #print('casefolder loaded')
+   if CaseFolder==None: return
+
+   reevalue=0
+   if hasattr(self,'fichier_ini'):
+       reevalue=1
+       if self.fichier_ini == CaseFolder : return
+       if hasattr(self,'old_context_fichier_init' ):
+         for concept in self.old_context_fichier_init.values():
+             self.jdc.delete_concept(concept)
+         self.jdc_aux=None
+         self.contexte_fichier_init={}
+         self.reevalue_sd_jdc()
+         self.jdc.reset_context()
+
+   self.fichier_ini=CaseFolder
+   self.contexte_fichier_init = {}
+   self.fichier_unite = 999
+   self.fichier_err = None
+   self.fichier_text=""
+
+   unite = 999
+
+   CaseFile = ''
+   FolderList = os.listdir(CaseFolder)
+   for folder in FolderList:
+      if folder[0:7] == 'package':
+         # Get BaseCase.sav inside the first package folder we find
+         FolderContents = os.listdir(os.path.join(CaseFolder, folder))
+         for file in FolderContents:
+            if file == 'BaseCase.sav':
+               CaseFile = os.path.join(os.path.join(CaseFolder, folder), file)
+               break
+         break
+   print "ops before try"
+
+           
+   try:
+      #MachineDico,LoadDico,LineDico,TransfoDico,MotorDico,BusDico,BranchesDico,BusNominal = ExtractGeneratorLoadLineandTransfoDico(CaseFile, PSSE_path)
+      # BusList = getBusNominalkV(CaseFile)
+      BusList, LinesList, TransfosList = getNominalkV(CaseFile)
+      #getTrueLines(CaseFile)
+   except Exception, e:
+      exc_type, exc_obj, exc_tb = sys.exec_info()
+      print(e)
+      print(exc_type, exc_tb.tb_lineno)
+   
+   for e in self.jdc.etapes:
+       if e.nom == 'CASE_SELECTION' : 
+          etape=e
+          break
+   self.jdc.appli.changeIntoMC(e, 'BusesList', BusList)
+   self.jdc.appli.changeIntoMC(e, 'LinesList', LinesList)
+   self.jdc.appli.changeIntoMC(e, 'TransformersList', TransfosList)
+
+   self.jdc.appli.changeIntoDefMC('CONTINGENCY_SELECTION', ('Automatic_N_2_Selection', 'BusesList'), BusList)
+   self.jdc.appli.changeIntoDefMC('CONTINGENCY_SELECTION', ('Automatic_N_2_Selection', 'LinesList'), LinesList)
+   self.jdc.appli.changeIntoDefMC('CONTINGENCY_SELECTION', ('Automatic_N_2_Selection', 'TransformersList'), TransfosList)
+   
+
+   try:
+       #updateConts()
+       #self.jdc.appli.changeIntoDefMC('CONTINGENCY_SELECTION', ('MultipleContingencyList', 'ComponentList'), Storage.ContFullList)
+       ContFullList=('AAAA','ZER','t__uuu','nkop','iop')
+       self.jdc.appli.changeIntoDefMC('CONTINGENCY_SELECTION', ('MultipleContingencyList', 'ComponentList'), ContFullList)
+   except Exception, e:
+      exc_type, exc_obj, exc_tb = sys.exec_info()
+      print(e)
+      print(exc_type, exc_tb.tb_lineno)
+
+
+   #self.jdc.ajoutMC(e,'TransfosList',listeTuple)
+
+
+
+def INCLUDE_context(self,d):
+   """
+       Fonction op_init pour macro INCLUDE
+   """
+   for k,v in self.g_context.items():
+      d[k]=v
+
+def getXLS(fileName) :
+    dico={}
+    dico['onglet1']=(('bus1','bus2','bus3'),('contin1','contin2','contin3'))
+    dico['onglet2']=(('bus4','bus5'),('contin4','contin5','contin6'))
+    dico['onglet3']=(('bus6','bus7'),('contin8',))
+    print dico
+    return dico
+
+
+def PROCESS_context(self,d):
+    print "dans le init du Process"
+
+def PROCESS(self,XLS_file,**args):
+
+
+
+    print "dans PROCESS"
+    if XLS_file == "" or XLS_file == None: return
+    #Storage.csvFileName = XLS_file
+    # c est la premier fois
+    
+    if not (hasattr(self,'sheets')) :
+       print "dans if" 
+       #from Processor_Storage import *
+       #print getSheets
+       #getSheets()
+       #ComponentList, ContingencyList = getComponentandContingencyList(Storage.sheets[0])
+       #print ComponentList
+       #print ContingencyList
+       #Storage.selectedDoubleRow[Storage.sheets[0]]=['PV MATIMBA']
+       #Storage.selectedDoubleCol[Storage.sheets[0]]=['MAZENOD_MHDAM_LI1_']
+       #self.jdc.appli.changeIntoMC(self,'TabList',Storage.sheets)
+       #self.sheets=Storage.sheets
+       #self.OngletsValeurs=[]
+       self.sheets=getXLS(XLS_file)
+       self.jdc.appli.changeIntoMC(self,'TabList',self.sheets.keys())
+      
+       for k in self.sheets.keys():
+           nom='Component_List_For_'+k
+           monInto=self.sheets[k][0]
+           self.jdc.appli.ajoutDefinitionMC('CONTINGENCY_PROCESSING',nom,'TXM',min=0, max='**', into=monInto, homo= 'SansOrdreNiDoublon')
+           nom='Contingency_List_For_'+k
+           monInto=self.sheets[k][1]
+           self.jdc.appli.ajoutDefinitionMC('CONTINGENCY_PROCESSING',nom,'TXM',min=0, max='**', into=monInto, homo= 'SansOrdreNiDoublon')
+
+       self.MCAjoutes=[]
+       self.OngletsSelectionnes=[]
+       
+    else :
+       # On a selectionne un onglet 
+       # On teste si on a modifie la liste des onglets
+
+       nouveauxOngletsSelectionnes= self.get_child('TabList').getval()
+       if  nouveauxOngletsSelectionnes==self.OngletsSelectionnes : return
+       if nouveauxOngletsSelectionnes==() or nouveauxOngletsSelectionnes == [] :
+          for MC in self.MCAjoutes :
+              self.jdc.appli.deleteMC(self,MC)
+          self.MCAjoutes=[]
+          self.OngletsSelectionnes=[]
+          return
+          
+       for Onglet in nouveauxOngletsSelectionnes:
+           if Onglet in self.OngletsSelectionnes : continue
+
+           MCFils='Contingency_List_For_'+Onglet
+           self.jdc.appli.ajoutMC(self,MCFils,[])
+           self.MCAjoutes.append(MCFils)
+           MCFils='Component_List_For_'+Onglet
+           self.jdc.appli.ajoutMC(self,MCFils,[])
+           self.MCAjoutes.append(MCFils)
+
+
+       for Onglet in self.OngletsSelectionnes:
+           if Onglet in nouveauxOngletsSelectionnes : continue
+
+           MCFils='Contingency_List_For_'+Onglet
+           self.jdc.appli.deleteMC(self,MCFils)
+           self.MCAjoutes.remove(MCFils)
+
+           MCFils='Component_List_For_'+Onglet
+           self.jdc.appli.deleteMC(self,MCFils)
+           self.MCAjoutes.remove(MCFils)
+
+       self.OngletsSelectionnes=nouveauxOngletsSelectionnes
+     
+
+
+      # OldBusValeurs= self.get_child('BusList').getval()
+#       OldContValeurs= self.get_child('ContList').getval()
+#       if OldBusValeurs ==  None : OldBusValeurs=[]
+#       if OldContValeurs ==  None : OldContValeurs=[]
+#
+#       listeBus=[]
+#       listeCont=[]
+#       listeBusCoches=[]
+#       listeContCoches=[]
+#       for o in OngletsValeurs :
+#           for b in self.dico[o][0]:
+#               texte=b+" ("+ str(o) +" )"
+#               listeBus.append(str(texte))
+#               if texte in OldBusValeurs : listeBusCoches.append(str(texte))
+#           for c in self.dico[o][1]:
+#               texte=c+" ("+ str(o) +" )"
+#               listeCont.append(str(texte))
+#               if texte in OldContValeurs : listeContCoches.append(str(texte))
+#           
+#       self.jdc.appli.changeIntoMCandSet(self,'BusList',listeBus,listeBusCoches)
+#       self.jdc.appli.changeIntoMCandSet(self,'ContList',listeCont,listeContCoches)
diff --git a/ProcessOutputs_Eficas/prefs.py b/ProcessOutputs_Eficas/prefs.py
new file mode 100644 (file)
index 0000000..647d0ae
--- /dev/null
@@ -0,0 +1,22 @@
+# Copyright (C) 2007-2012   EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+code="PSEN_N1" 
+import sys, os
+if os.path.dirname(os.path.abspath(__file__)) not in sys.path :
+   sys.path.insert(0,os.path.dirname(os.path.abspath(__file__)))
diff --git a/ProcessOutputs_Eficas/prefs_PSEN_N1.py b/ProcessOutputs_Eficas/prefs_PSEN_N1.py
new file mode 100644 (file)
index 0000000..0099286
--- /dev/null
@@ -0,0 +1,41 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+import os,sys
+# repIni sert a localiser le fichier editeur.ini
+# Obligatoire
+repIni=os.path.dirname(os.path.abspath(__file__))
+INSTALLDIR=os.path.join(repIni,'..')
+sys.path[:0]=[INSTALLDIR]
+
+
+# lang indique la langue utilisee pour les chaines d'aide : fr ou ang
+lang='en' #'fr'
+
+# Codage des strings qui accepte les accents (en remplacement de 'ascii')
+encoding='iso-8859-1'
+docPath=repIni
+
+
+#
+catalogues=(
+   ('PSEN_N1','default',os.path.join(repIni,'PSEN_Cata_N1.py'),'python','python'),
+)