translation
[iramuteq] / tabchi2.py
index 6a8cf55..d82a080 100755 (executable)
@@ -2,7 +2,7 @@
 # -*- coding: utf-8 -*-
 #Author: Pierre Ratinaud
 #Copyright (c) 2010 Pierre Ratinaud
-#Lisense: GNU/GPL
+#License: GNU/GPL
 
 import HTML
 import os
@@ -16,6 +16,7 @@ import wx.lib.sized_controls as sc
 from time import sleep
 from functions import exec_rcode, check_Rresult
 from dialog import ChiDialog, PrefChi
+from analysematrix import AnalyseMatrix
                     
 def make_res(line) :
     if float(line[5]) <= 0.05 and line[6] != 'warning':
@@ -45,34 +46,69 @@ def make_title(res, text) :
     return ['<a name=%i></a><br><font color=%s>%s</font><br><a href=#back_%i>retour</a><br>' % (i, val[-1], text[i], i) for i, val in enumerate(res)] 
 
 
+chioption = { 'valobs' : True,
+              'valtheo' : True,
+              'resi' : False,
+              'contrib' : True,
+              'pourcent' : False,
+              'pourcentl' : True,
+              'pourcentc' : True,
+              'graph' : True,
+              'bw' : False,
+              }
 
-
-
-class MakeChi2():
-    def __init__(self, parent, select1, select2, chioption):
-        self.OutFrame=tempfile.mktemp(dir=parent.TEMPDIR)
-        print self.OutFrame
-        self.parent=parent
+class ChiSquare(AnalyseMatrix):
+    def doparametres(self, dlg = None):
+        if dlg is None :
+            return
+        dial = ChiDialog(self.parent, -1, u"Chi2", chioption, self.tableau, size=(400, 350),
+                     style = wx.DEFAULT_DIALOG_STYLE
+                     )
+        dial.CenterOnParent()
+        val = dial.ShowModal()
+        if val==wx.ID_OK :     
+            self.colsel1 = dial.list_box_1.GetSelections()
+            self.colsel2 = dial.list_box_2.GetSelections()
+            if dial.chiopt :
+                chioption['valobs'] = dial.dial.check1.GetValue()
+                chioption['valtheo'] = dial.dial.check2.GetValue()
+                chioption['resi'] = dial.dial.check3.GetValue()
+                chioption['contrib'] = dial.dial.check4.GetValue()
+                chioption['pourcent'] = dial.dial.check5.GetValue()
+                chioption['pourcentl'] = dial.dial.check6.GetValue()
+                chioption['pourcentc'] = dial.dial.check7.GetValue()
+                chioption['graph'] = dial.dial.check8.GetValue()
+                chioption['bw'] = dial.dial.checkbw.GetValue()
+                dial.dial.Destroy()
+            dial.Destroy()
+            self.parametres.update(chioption)
+            self.chioption = chioption
+        else :
+            if dial.chiopt :
+                dial.dial.Destroy()
+            dial.Destroy()
+            self.parametres = None
+            
+    def doanalyse(self):
+        self.count = 1
+        keepGoing = self.dlg.Update(self.count,u"Analyse dans R...")
+        self.OutFrame=tempfile.mktemp(dir=self.parent.TEMPDIR)
         self.encode=self.parent.encode
-        self.TEMPDIR=parent.TEMPDIR
-        self.RPath=parent.PathPath.get('PATHS','rpath')
+        self.TEMPDIR=self.parent.TEMPDIR
+        self.RPath=self.parent.PathPath.get('PATHS','rpath')
         self.TextCroise=[]
-        for i in select1 :
-            for j in select2 :
-                self.TextCroise.append(parent.tableau.colnames[i] + ' / ' + parent.tableau.colnames[j])
+        for i in self.colsel1 :
+            for j in self.colsel2 :
+                self.TextCroise.append(self.tableau.colnames[i] + ' / ' + self.tableau.colnames[j])
         rchioption = {}
-        for val in chioption :
-            if chioption[val]:
+        for val in self.chioption :
+            if self.chioption[val]:
                 rchioption[val] = 'TRUE'
             else :
                 rchioption[val] = 'FALSE'
         txt="""
         source("%s")
-        """%self.parent.RscriptsPath['Rfunct']
-#        if parent.tableau.: rownames=1
-#        else : rownames='NULL'
-#        if parent.g_header : header = 'TRUE'
-#        else : header = 'FALSE'
+        """%ffr(self.parent.RscriptsPath['Rfunct'])
         txt += """
         source("%s")
         """ % ffr(self.parent.RscriptsPath['Rgraph'])
@@ -88,23 +124,23 @@ class MakeChi2():
         bw <- %s
         """ % (rchioption['valobs'], rchioption['valtheo'], rchioption['contrib'], rchioption['resi'], rchioption['pourcent'], rchioption['pourcentl'], rchioption['pourcentc'], rchioption['graph'], rchioption['bw'])
         txt+="""
-        datadm <- ReadData("%s", encoding="%s", header = TRUE, sep = "%s",quote = '%s', na.strings = "%s",rownames= 1)
+        datadm <- read.csv2("%s", encoding="%s", header = TRUE, row.names = 1, sep='\\t', quote = '"', na.string = '')
         listres<-list()
         listcol<-list()
         cont<-1
-        """%(ffr(parent.tableau.parametre['csvfile']),self.parent.encode, parent.tableau.parametre['colsep'], parent.tableau.parametre['txtsep'], self.parent.nastrings)
-        if len(select1)==1:
-            strsel1=str(select1).replace(',','')
+        """%(ffr(self.tableau.parametres['csvfile']), self.tableau.parametres['syscoding'])
+        if len(self.colsel1)==1:
+            strsel1=str(self.colsel1).replace(',','')
         else:
-            strsel1=str(select1)
-        if len(select2)==1:
-            strsel2=str(select2).replace(',','')
+            strsel1=str(self.colsel1)
+        if len(self.colsel2)==1:
+            strsel2=str(self.colsel2).replace(',','')
         else:
-            strsel2=str(select2)
+            strsel2=str(self.colsel2)
         txt+="""
-        for (i in c%s) {"""%strsel1
+        for (i in c%s) {""" % strsel1
         txt+="""
-            for (j in c%s) {"""%strsel2
+            for (j in c%s) {""" % strsel2
         txt+="""
                 tab<-table(datadm[,i+1],datadm[,j+1])
                 if (min(dim(tab)) != 1) {
@@ -148,9 +184,7 @@ class MakeChi2():
                 chi$prl <- round((chi$observed/sr)*100,2)
                 chi$prc <- t(round((t(chi$observed)/sc)*100,2))
             }
-            fileout<-paste('histo',%i,sep='')
-            fileout<-paste(fileout,'_',sep='')
-            fileout<-paste(fileout,count,sep='')
+            fileout<-paste('histo_',count,sep='')
             fileout<-paste(fileout,'.png',sep='')
             count<-count+1
             fileout<-file.path("%s",fileout)
@@ -258,7 +292,7 @@ class MakeChi2():
         li<-matrix('fin_analyse',1,maxcol)
         frameout<-rbind(frameout,li)
         write.csv2(frameout,file="%s")
-        """%(parent.FreqNum,ffr(parent.TEMPDIR),ffr(self.OutFrame))
+        """ % (ffr(self.parametres['pathout']),ffr(self.OutFrame))
         tmpfile=tempfile.mktemp(dir=self.TEMPDIR)
         print tmpfile
         tmpscript=open(tmpfile,'w')
@@ -267,7 +301,24 @@ class MakeChi2():
         pid = exec_rcode(self.RPath, tmpfile, wait = False)
         while pid.poll() == None :
             sleep(0.2)
-        check_Rresult(self.parent, pid)
+        check_Rresult(self.parent, pid)            
+        self.count += 1
+        keepGoing = self.dlg.Update(self.count,u"Ecriture des résultats")
+         
+        listfileout = self.dolayout(self.chioption)
+            #listfileout=dlg.ShowChi2(ColSel1,ColSel2)
+            #parent.FreqNum += 1
+            #parent.DictTab[u"Chi2_%s*"%parent.FreqNum]=listfileout
+#             parent.newtab = wx.html.HtmlWindow(parent.nb, -1)
+#             if "gtk2" in wx.PlatformInfo:
+#                 parent.newtab.SetStandardFonts()
+#             parent.newtab.LoadPage(listfileout[len(listfileout)-1])
+#             parent.nb.AddPage(parent.newtab,u"Chi2_%s*"%parent.FreqNum)
+#             parent.nb.SetSelection(parent.nb.GetPageCount()-1)
+#             parent.ShowTab(wx.EVT_BUTTON)
+#             parent.DisEnSaveTabAs(True)
+#        self.count += 1
+#        keepGoing = self.dlg.Update(self.count,u"Fini")
 
     def dolayout(self, option):
         ListFile=[False]
@@ -309,19 +360,10 @@ class MakeChi2():
     
         allcoord.append(coord_res)
         allhtml = [[clean_line(lcont[allcoord[i][j]+1:allcoord[i+1][j]]) for j, line in enumerate(allcoord[i])] for i, tab in enumerate(allcoord) if i!=len(allcoord)-1]
-    
         allhtml = [make_table(val,names[i],res) for i,val in enumerate(allhtml)]
-    
         links = make_link_list(res, self.TextCroise)
-        #colors = [line[-1] for line in res]
-    
-    #    good = [i for i,chi in enumerate(res) if chi[-1] == 'green' or chi[-1] == 'blue']
-        #select_good = [[val[i] for i in good] for val in tout]
-    
-    
         html_res = make_restab(res)
         allhtml.insert(0,html_res)
-
         titles = make_title(res, self.TextCroise)
         allhtml.insert(0,titles)
         
@@ -345,82 +387,12 @@ class MakeChi2():
         </td></tr></table><br><br>
         """%self.parent.SysEncoding
 
-    
         pretxt = '<br>\n'.join(links)+'<br><hr><br>\n'
         txt = '<br><hr><br>\n'.join(['<br><br>'.join([tab[i] for tab in allhtml]) for i,val in enumerate(res)])
         txt = header + pretxt + txt + '\n</body></html>'
 
-        fileout=os.path.join(self.TEMPDIR,'resultats-chi2_%s.html'%str(self.parent.FreqNum))
-        file=open(fileout,'w')
-        file.write(txt)
-        file.close()
+        fileout=os.path.join(self.parametres['pathout'],'resultats-chi2.html')
+        with open(fileout, 'w') as f :
+            f.write(txt)
         ListFile.append(fileout)         
-        return ListFile
-
-class ChiSquare():
-    def __init__(self,parent):
-        chioption = { 'valobs' : True,
-                      'valtheo' : True,
-                      'resi' : False,
-                      'contrib' : True,
-                      'pourcent' : False,
-                      'pourcentl' : True,
-                      'pourcentc' : True,
-                      'graph' : True,
-                      'bw' : False,
-                      }
-        dlg = ChiDialog(parent, -1, u"Chi2", chioption, size=(400, 350),
-                     style = wx.DEFAULT_DIALOG_STYLE
-                     )
-        dlg.CenterOnParent()
-        val = dlg.ShowModal()
-        if val==wx.ID_OK :
-            self.dlg=wx.ProgressDialog("Traitements",
-                       "Veuillez patienter...",
-                       maximum = 4,
-                       parent=parent,
-                       style = wx.PD_APP_MODAL|wx.PD_AUTO_HIDE|wx.PD_ELAPSED_TIME
-                        )
-            self.dlg.Center()
-            self.count = 1
-            keepGoing = self.dlg.Update(self.count)
-            
-            ColSel1 = dlg.list_box_1.GetSelections()
-            ColSel2 = dlg.list_box_2.GetSelections()
-            if dlg.chiopt :
-                chioption['valobs'] = dlg.dial.check1.GetValue()
-                chioption['valtheo'] = dlg.dial.check2.GetValue()
-                chioption['resi'] = dlg.dial.check3.GetValue()
-                chioption['contrib'] = dlg.dial.check4.GetValue()
-                chioption['pourcent'] = dlg.dial.check5.GetValue()
-                chioption['pourcentl'] = dlg.dial.check6.GetValue()
-                chioption['pourcentc'] = dlg.dial.check7.GetValue()
-                chioption['graph'] = dlg.dial.check8.GetValue()
-                chioption['bw'] = dlg.dial.checkbw.GetValue()
-                dlg.dial.Destroy()
-            
-            self.count += 1
-            keepGoing = self.dlg.Update(self.count,u"Analyse dans R...")
-            analyse=MakeChi2(parent,ColSel1,ColSel2, chioption)
-            
-            self.count += 1
-            keepGoing = self.dlg.Update(self.count,u"Ecriture des résultats")
-         
-            listfileout = analyse.dolayout(chioption)
-            #listfileout=dlg.ShowChi2(ColSel1,ColSel2)
-            parent.FreqNum += 1
-            parent.DictTab[u"Chi2_%s*"%parent.FreqNum]=listfileout
-            parent.newtab = wx.html.HtmlWindow(parent.nb, -1)
-            if "gtk2" in wx.PlatformInfo:
-               parent.newtab.SetStandardFonts()
-            parent.newtab.LoadPage(listfileout[len(listfileout)-1])
-            parent.nb.AddPage(parent.newtab,u"Chi2_%s*"%parent.FreqNum)
-            parent.nb.SetSelection(parent.nb.GetPageCount()-1)
-            parent.ShowTab(wx.EVT_BUTTON)
-            parent.DisEnSaveTabAs(True)
-            self.count += 1
-            keepGoing = self.dlg.Update(self.count,u"Fini")
-        else :
-            if dlg.chiopt :
-                dlg.dial.Destroy()
-            dlg.Destroy()
+        return ListFile
\ No newline at end of file