matrix
authorPierre Ratinaud <ratinaud@univ-tlse2.fr>
Fri, 18 Jul 2014 23:27:46 +0000 (01:27 +0200)
committerPierre Ratinaud <ratinaud@univ-tlse2.fr>
Fri, 18 Jul 2014 23:27:46 +0000 (01:27 +0200)
16 files changed:
iramuteq.py
layout.py
listlex.py
openanalyse.py
parse_factiva_txt.py
tabchdalc.py
tabchddist.py
tabchi2.py
tabfrequence.py
tableau.py
tabrsimple.py
tabsimi.py
tabstudent.py
tabverges.py
textafcuci.py
textaslexico.py

index 5d64a17..69e0bda 100644 (file)
@@ -48,17 +48,17 @@ from tabsimi import DoSimi
 from tabrsimple import InputText
 from tabverges import Prototypical
 #from textafcuci import AfcUci
 from tabrsimple import InputText
 from tabverges import Prototypical
 #from textafcuci import AfcUci
-from analysetxt import Alceste
 from textdist import AnalysePam
 from textstat import Stat
 from textaslexico import Lexico
 from textsimi import SimiTxt, SimiFromCluster
 from textwordcloud import WordCloud, ClusterCloud
 from textdist import AnalysePam
 from textstat import Stat
 from textaslexico import Lexico
 from textsimi import SimiTxt, SimiFromCluster
 from textwordcloud import WordCloud, ClusterCloud
+from textreinert import Reinert
 #from profile_segment import ProfileSegment
 #from textcheckcorpus import checkcorpus
 from openanalyse import OpenAnalyse
 #from profile_segment import ProfileSegment
 #from textcheckcorpus import checkcorpus
 from openanalyse import OpenAnalyse
-from corpus import Builder
-from sheet import MySheet
+from corpus import Builder, SubBuilder
+#from sheet import MySheet
 from checkinstall import CreateIraDirectory, CheckRPath, FindRPAthWin32, FindRPathNix, CheckRPackages, IsNew, UpgradeConf, CopyConf, RLibsAreInstalled
 from chemins import RscriptsPath, ConstructConfigPath, ConstructDicoPath, ConstructGlobalPath, PathOut
 from parse_factiva_xml import ImportFactiva
 from checkinstall import CreateIraDirectory, CheckRPath, FindRPAthWin32, FindRPathNix, CheckRPackages, IsNew, UpgradeConf, CopyConf, RLibsAreInstalled
 from chemins import RscriptsPath, ConstructConfigPath, ConstructDicoPath, ConstructGlobalPath, PathOut
 from parse_factiva_xml import ImportFactiva
@@ -74,11 +74,11 @@ ID_Freq = wx.NewId()
 ID_Chi2 = wx.NewId()
 ID_Student = wx.NewId()
 ID_CHDSIM = wx.NewId()
 ID_Chi2 = wx.NewId()
 ID_Student = wx.NewId()
 ID_CHDSIM = wx.NewId()
-ID_CHDAlceste = wx.NewId()
+ID_CHDReinert = wx.NewId()
 ID_TEXTAFCM = wx.NewId()
 ID_TEXTSTAT = wx.NewId()
 ID_ASLEX = wx.NewId()
 ID_TEXTAFCM = wx.NewId()
 ID_TEXTSTAT = wx.NewId()
 ID_ASLEX = wx.NewId()
-ID_TEXTALCESTE = wx.NewId()
+ID_TEXTREINERT = wx.NewId()
 ID_TEXTPAM = wx.NewId()
 ID_CHECKCORPUS = wx.NewId()
 ID_Tabcontent = wx.NewId()
 ID_TEXTPAM = wx.NewId()
 ID_CHECKCORPUS = wx.NewId()
 ID_Tabcontent = wx.NewId()
@@ -216,16 +216,19 @@ class IraFrame(wx.Frame):
         menuTools = wx.Menu()
         splitvar = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Split from variable").decode('utf8'))
         extractmod = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Extract mods").decode('utf8'))
         menuTools = wx.Menu()
         splitvar = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Split from variable").decode('utf8'))
         extractmod = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Extract mods").decode('utf8'))
+        extractthem = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Extract thematics").decode('utf8'))
         menuTools.AppendItem(splitvar)
         menuTools.AppendItem(extractmod)
         menuTools.AppendItem(splitvar)
         menuTools.AppendItem(extractmod)
+        menuTools.AppendItem(extractthem)
         self.ID_splitvar = splitvar.GetId()
         self.ID_extractmod = extractmod.GetId()
         self.ID_splitvar = splitvar.GetId()
         self.ID_extractmod = extractmod.GetId()
+        self.ID_extractthem = extractthem.GetId()
         file_menu.AppendMenu(-1, _(u"Tools"), menuTools)
 
                
         file_menu.AppendMenu(-1, _(u"Tools"), menuTools)
 
                
-        item = wx.MenuItem(file_menu, ID_SaveTab, _(u"Save tab as...").decode('utf8'), _(u"Save tab as...").decode('utf8'))
-        item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_SAVE_AS))
-        file_menu.AppendItem(item)
+        #item = wx.MenuItem(file_menu, ID_SaveTab, _(u"Save tab as...").decode('utf8'), _(u"Save tab as...").decode('utf8'))
+        #item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_SAVE_AS))
+        #file_menu.AppendItem(item)
         
         file_menu.Append(wx.ID_EXIT, _(u"Exit").decode('utf8'))
         
         
         file_menu.Append(wx.ID_EXIT, _(u"Exit").decode('utf8'))
         
@@ -243,7 +246,7 @@ class IraFrame(wx.Frame):
         analyse_menu.Append(ID_Chi2, _(u"Chi2").decode('utf8'))
         #analyse_menu.Append(ID_Student, u"t de Student")
         menu_classif = wx.Menu()
         analyse_menu.Append(ID_Chi2, _(u"Chi2").decode('utf8'))
         #analyse_menu.Append(ID_Student, u"t de Student")
         menu_classif = wx.Menu()
-        menu_classif.Append(ID_CHDAlceste, _(u"Reinert Method").decode('utf8'))
+        menu_classif.Append(ID_CHDReinert, _(u"Reinert's Method").decode('utf8'))
         #menu_classif.Append(ID_CHDSIM, u"Par matrice des distances")
         analyse_menu.AppendMenu(-1, _(u"Clustering").decode('utf8'), menu_classif)
         #analyse_menu.Append(ID_AFCM, u"AFCM")
         #menu_classif.Append(ID_CHDSIM, u"Par matrice des distances")
         analyse_menu.AppendMenu(-1, _(u"Clustering").decode('utf8'), menu_classif)
         #analyse_menu.Append(ID_AFCM, u"AFCM")
@@ -258,7 +261,7 @@ class IraFrame(wx.Frame):
         text_menu.Append(ID_ASLEX, _(u"Specificities and CA").decode('utf8'))
         #text_menu.Append(ID_TEXTAFCM, u"AFC sur UCI / Vocabulaire")
         menu_classiftxt = wx.Menu()
         text_menu.Append(ID_ASLEX, _(u"Specificities and CA").decode('utf8'))
         #text_menu.Append(ID_TEXTAFCM, u"AFC sur UCI / Vocabulaire")
         menu_classiftxt = wx.Menu()
-        menu_classiftxt.Append(ID_TEXTALCESTE, _(u"Reinert Method").decode('utf8'))
+        menu_classiftxt.Append(ID_TEXTREINERT, _(u"Reinert's Method").decode('utf8'))
         #menu_classiftxt.Append(ID_TEXTPAM, u"Par matrice des distances")
         text_menu.AppendMenu(-1, _(u"Clustering").decode('utf8'), menu_classiftxt)
         text_menu.Append(ID_SimiTxt, _(u"Similarities Analysis").decode('utf8')) 
         #menu_classiftxt.Append(ID_TEXTPAM, u"Par matrice des distances")
         text_menu.AppendMenu(-1, _(u"Clustering").decode('utf8'), menu_classiftxt)
         text_menu.Append(ID_SimiTxt, _(u"Similarities Analysis").decode('utf8')) 
@@ -333,9 +336,9 @@ class IraFrame(wx.Frame):
         self._mgr.AddPane(self.nb, aui.AuiPaneInfo().
                               Name("Tab_content").
                               CenterPane())        
         self._mgr.AddPane(self.nb, aui.AuiPaneInfo().
                               Name("Tab_content").
                               CenterPane())        
-        self.Sheet = MySheet(self)
+        
         #self._mgr.AddPane(self.Sheet, wx.aui.AuiPaneInfo().Name("Data").CenterPane())
         #self._mgr.AddPane(self.Sheet, wx.aui.AuiPaneInfo().Name("Data").CenterPane())
-        self._mgr.AddPane(self.Sheet, aui.AuiPaneInfo().Name("Data").CenterPane())
+        #self._mgr.AddPane(self.Sheet, aui.AuiPaneInfo().Name("Data").CenterPane())
         self.nb.Bind(aui.EVT_AUINOTEBOOK_PAGE_CLOSE, self.OnCloseTab)
         self.nb.Bind(aui.EVT_AUINOTEBOOK_PAGE_CHANGED, self.OnPageChanged)
         # add the toolbars to the manager
         self.nb.Bind(aui.EVT_AUINOTEBOOK_PAGE_CLOSE, self.OnCloseTab)
         self.nb.Bind(aui.EVT_AUINOTEBOOK_PAGE_CHANGED, self.OnPageChanged)
         # add the toolbars to the manager
@@ -368,11 +371,12 @@ class IraFrame(wx.Frame):
         self.Bind(wx.EVT_MENU, self.import_factiva_txt, fact_from_txt)
         self.Bind(wx.EVT_MENU, self.ExtractTools, splitvar)
         self.Bind(wx.EVT_MENU, self.ExtractTools, extractmod)
         self.Bind(wx.EVT_MENU, self.import_factiva_txt, fact_from_txt)
         self.Bind(wx.EVT_MENU, self.ExtractTools, splitvar)
         self.Bind(wx.EVT_MENU, self.ExtractTools, extractmod)
+        self.Bind(wx.EVT_MENU, self.ExtractTools, extractthem)
         self.Bind(wx.EVT_MENU, self.OnFreq, id=ID_Freq)
         self.Bind(wx.EVT_MENU, self.OnChi2, id=ID_Chi2)
         self.Bind(wx.EVT_MENU, self.OnStudent, id=ID_Student)
         self.Bind(wx.EVT_MENU, self.OnCHDSIM, id=ID_CHDSIM)
         self.Bind(wx.EVT_MENU, self.OnFreq, id=ID_Freq)
         self.Bind(wx.EVT_MENU, self.OnChi2, id=ID_Chi2)
         self.Bind(wx.EVT_MENU, self.OnStudent, id=ID_Student)
         self.Bind(wx.EVT_MENU, self.OnCHDSIM, id=ID_CHDSIM)
-        self.Bind(wx.EVT_MENU, self.OnCHDAlceste, id=ID_CHDAlceste)
+        self.Bind(wx.EVT_MENU, self.OnCHDReinert, id=ID_CHDReinert)
         self.Bind(wx.EVT_MENU, self.OnAFCM, id=ID_AFCM)
         self.Bind(wx.EVT_MENU, self.OnProto, id=ID_proto)
         self.Bind(wx.EVT_MENU, self.OnRCode, id=ID_RCODE)
         self.Bind(wx.EVT_MENU, self.OnAFCM, id=ID_AFCM)
         self.Bind(wx.EVT_MENU, self.OnProto, id=ID_proto)
         self.Bind(wx.EVT_MENU, self.OnRCode, id=ID_RCODE)
@@ -380,13 +384,13 @@ class IraFrame(wx.Frame):
         self.Bind(wx.EVT_MENU, self.OnTextStat, id=ID_TEXTSTAT)
         self.Bind(wx.EVT_MENU, self.OnTextSpec, id=ID_ASLEX)
         self.Bind(wx.EVT_MENU, self.OnTextAfcm, id=ID_TEXTAFCM)
         self.Bind(wx.EVT_MENU, self.OnTextStat, id=ID_TEXTSTAT)
         self.Bind(wx.EVT_MENU, self.OnTextSpec, id=ID_ASLEX)
         self.Bind(wx.EVT_MENU, self.OnTextAfcm, id=ID_TEXTAFCM)
-        self.Bind(wx.EVT_MENU, self.OnTextAlceste, id=ID_TEXTALCESTE)
+        self.Bind(wx.EVT_MENU, self.OnTextReinert, id=ID_TEXTREINERT)
         self.Bind(wx.EVT_MENU, self.OnPamSimple, id=ID_TEXTPAM)
         self.Bind(wx.EVT_MENU, self.OnSimiTxt, id=ID_SimiTxt)
         self.Bind(wx.EVT_MENU, self.OnWordCloud, id=ID_WC)
         self.Bind(wx.EVT_MENU, self.OnPamSimple, id=ID_TEXTPAM)
         self.Bind(wx.EVT_MENU, self.OnSimiTxt, id=ID_SimiTxt)
         self.Bind(wx.EVT_MENU, self.OnWordCloud, id=ID_WC)
-        self.Bind(wx.EVT_MENU, self.OnSimi, id=ID_SIMI)
+        self.Bind(wx.EVT_MENU, self.OnSimiTab, id=ID_SIMI)
         self.Bind(wx.EVT_MENU, self.OnExit, id=wx.ID_EXIT)
         self.Bind(wx.EVT_MENU, self.OnExit, id=wx.ID_EXIT)
-        self.Bind(wx.EVT_MENU, self.OnSaveTabAs, id=ID_SaveTab)
+        #self.Bind(wx.EVT_MENU, self.OnSaveTabAs, id=ID_SaveTab)
         self.Bind(wx.EVT_MENU, self.OnAbout, id=wx.ID_ABOUT)
         self.Bind(wx.EVT_MENU, self.OnHelp, id=wx.ID_HELP)
         self.Bind(wx.EVT_MENU, self.OnPref, id=wx.ID_PREFERENCES)
         self.Bind(wx.EVT_MENU, self.OnAbout, id=wx.ID_ABOUT)
         self.Bind(wx.EVT_MENU, self.OnHelp, id=wx.ID_HELP)
         self.Bind(wx.EVT_MENU, self.OnPref, id=wx.ID_PREFERENCES)
@@ -577,11 +581,14 @@ vous devez signaler le chemin de l'éxecutable de R dans les préférences."""
     def OnOpenData(self, event):
         inputname, self.input_path = OnOpen(self, "Data")
         if inputname:
     def OnOpenData(self, event):
         inputname, self.input_path = OnOpen(self, "Data")
         if inputname:
-            self.filename = self.input_path[0]
+            #filename = self.input_path[0]
             self.tableau = Tableau(self,os.path.abspath(self.input_path[0]))
             self.tableau = Tableau(self,os.path.abspath(self.input_path[0]))
-            get_table_param(self, self.input_path[0])
-            self.tableau.make_content()
-            self.tableau.show_tab()
+            val = get_table_param(self, self.input_path[0])
+            if val == wx.ID_OK :
+                self.tableau.make_content()
+                OpenAnalyse(self, self.tableau.parametres)
+                self.tree.OnItemAppend(self.tableau.parametres)
+                #self.tableau.show_tab()
 
     def OnOpenAnalyse(self, event):
         self.AnalysePath = OnOpen(self, "Analyse")
 
     def OnOpenAnalyse(self, event):
         self.AnalysePath = OnOpen(self, "Analyse")
@@ -612,7 +619,18 @@ vous devez signaler le chemin de l'éxecutable de R dans les préférences."""
                 self.DataPop = False
             self.ShowAPane(u"Text")
         self._mgr.Update()
                 self.DataPop = False
             self.ShowAPane(u"Text")
         self._mgr.Update()
-        
+    
+    def OnSubText(self, corpus, parametres = None):
+        busy = wx.BusyInfo(_("Please wait...").decode('utf8'), self)
+        wx.SafeYield()
+        builder = SubBuilder(self, corpus, parametres)
+        del busy
+        if builder.res == wx.ID_OK :
+            corpus = builder.doanalyse()
+            self.history.add(corpus.parametres)
+            self.tree.OnItemAppend(corpus.parametres)
+            OpenAnalyse(self, corpus.parametres)
+            
     def OpenText(self):
         dlg = wx.ProgressDialog("Ouverture...",
                                    "Veuillez patienter...",
     def OpenText(self):
         dlg = wx.ProgressDialog("Ouverture...",
                                    "Veuillez patienter...",
@@ -695,6 +713,12 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis."""
             npage = self.nb.GetPage(new)
             if 'parametres' in dir(npage) :
                 self.tree.GiveFocus(uuid=npage.parametres['uuid'])
             npage = self.nb.GetPage(new)
             if 'parametres' in dir(npage) :
                 self.tree.GiveFocus(uuid=npage.parametres['uuid'])
+                if npage.parametres.get('matrix', False) :
+                    self.ShowMenu(_(u"Text analysis").decode('utf8'), False)
+                    self.ShowMenu(_(u"Matrix analysis").decode('utf8'), True)
+                elif npage.parametres.get('corpus', False) :
+                    self.ShowMenu(_(u"Text analysis").decode('utf8'))
+                    self.ShowMenu(_(u"Matrix analysis").decode('utf8'), False)
 
     def OnCloseTab(self, evt):
         #log.info('Closing tab %s' % str(evt.GetEventObject()))
 
     def OnCloseTab(self, evt):
         #log.info('Closing tab %s' % str(evt.GetEventObject()))
@@ -708,40 +732,40 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis."""
             self.history.rmtab(page.parametres)
             self.tree.CloseItem(uuid = page.parametres['uuid'])
         TabTitle = self.nb.GetPageText(self.nb.GetSelection())
             self.history.rmtab(page.parametres)
             self.tree.CloseItem(uuid = page.parametres['uuid'])
         TabTitle = self.nb.GetPageText(self.nb.GetSelection())
-        if self.DictTab != {} :
-            if TabTitle in self.DictTab :
-                ListFile=self.DictTab[TabTitle]
-                if False in ListFile:
-                    msg = u"""
-Certains résultats ne sont pas enregistrer.
-Voulez-vous fermer quand même ?"""
-                    dlg = wx.MessageDialog(self, msg, "Sauvegarde",wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION)
-
-                    dlg.CenterOnParent()
-                    if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]:
-                        remove = False
-                        evt.Veto()
-                        dlg.Destroy()
-                    else :
-                        for f in ListFile[1:] :
-                            print 'remove', f
-                            os.remove(f)
-                            remove = True
-                        dlg.Destroy()
-                elif True in ListFile :
-                    remove = True
-                if remove:
-                    del self.DictTab[TabTitle]
-            else : 
-                self.LastTabClose()
-        else :
-            remove = True
-        if self.nb.GetPageCount() == 1 and remove and not notebook :
+        if self.DictTab != {} :
+            if TabTitle in self.DictTab :
+                ListFile=self.DictTab[TabTitle]
+                if False in ListFile:
+                    msg = u"""
+Certains résultats ne sont pas enregistrer.
+Voulez-vous fermer quand même ?"""
+                    dlg = wx.MessageDialog(self, msg, "Sauvegarde",wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION)
+# 
+                    dlg.CenterOnParent()
+                    if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]:
+                        remove = False
+                        evt.Veto()
+                        dlg.Destroy()
+                    else :
+                        for f in ListFile[1:] :
+                            print 'remove', f
+                            os.remove(f)
+                            remove = True
+                        dlg.Destroy()
+                elif True in ListFile :
+                    remove = True
+                if remove:
+                    del self.DictTab[TabTitle]
+            else : 
+                self.LastTabClose()
+#        else :
+#            remove = True
+        if self.nb.GetPageCount() == 1 and not notebook :
             self.LastTabClose()
     
     def LastTabClose(self) :
         if self.nb.GetPageCount() == 1 :
             self.LastTabClose()
     
     def LastTabClose(self) :
         if self.nb.GetPageCount() == 1 :
-            self.DisEnSaveTabAs(False)
+            #self.DisEnSaveTabAs(False)
             if self.DataTxt :
                 self.ShowAPane("Text")
             elif self.DataPop :
             if self.DataTxt :
                 self.ShowAPane("Text")
             elif self.DataPop :
@@ -749,39 +773,39 @@ Voulez-vous fermer quand même ?"""
             else :
                 self.ShowAPane("Intro_Text")
 
             else :
                 self.ShowAPane("Intro_Text")
 
-    def OnSaveTabAs(self, event):
-        SelectTab = self.nb.GetSelection()
-        TabTitle = self.nb.GetPageText(SelectTab)
-        FileToSave = self.DictTab[TabTitle]
-        NewListFile = []
-        dlg = wx.FileDialog(
-            self, message="Enregistrer sous...", defaultDir=os.getcwd(),
-            defaultFile="resultat.html", wildcard="Tous les fichiers|*", style=wx.SAVE | wx.OVERWRITE_PROMPT
-            )
-        dlg.SetFilterIndex(2)
-        dlg.CenterOnParent()
-        
-        if dlg.ShowModal() == wx.ID_OK:
-            Path = dlg.GetPath()
-            Dirname = os.path.dirname(Path)
-            Filename = dlg.GetFilename()
-        else :
-            Path = False
-        dlg.Destroy()
-        if Path:
-            shutil.copyfile(FileToSave[-1], Path)
-            os.remove(FileToSave[len(FileToSave) - 1])
-            NewListFile.append(True)
-            NewListFile.append(Path)
-            for f in FileToSave[1:-1] :
-                Fileout = os.path.join(Dirname, os.path.basename(f))
-                shutil.copyfile(f, Fileout)
-                NewListFile.append(Fileout)
-                os.remove(f)
-            TabText = Filename
-            self.DictTab[TabText] = NewListFile
-            del self.DictTab[TabTitle]
-            self.nb.SetPageText(SelectTab, TabText)
+    def OnSaveTabAs(self, event):
+        SelectTab = self.nb.GetSelection()
+        TabTitle = self.nb.GetPageText(SelectTab)
+        FileToSave = self.DictTab[TabTitle]
+        NewListFile = []
+        dlg = wx.FileDialog(
+            self, message="Enregistrer sous...", defaultDir=os.getcwd(),
+            defaultFile="resultat.html", wildcard="Tous les fichiers|*", style=wx.SAVE | wx.OVERWRITE_PROMPT
+            )
+        dlg.SetFilterIndex(2)
+        dlg.CenterOnParent()
+#         
+        if dlg.ShowModal() == wx.ID_OK:
+            Path = dlg.GetPath()
+            Dirname = os.path.dirname(Path)
+            Filename = dlg.GetFilename()
+        else :
+            Path = False
+        dlg.Destroy()
+        if Path:
+            shutil.copyfile(FileToSave[-1], Path)
+            os.remove(FileToSave[len(FileToSave) - 1])
+            NewListFile.append(True)
+            NewListFile.append(Path)
+            for f in FileToSave[1:-1] :
+                Fileout = os.path.join(Dirname, os.path.basename(f))
+                shutil.copyfile(f, Fileout)
+                NewListFile.append(Fileout)
+                os.remove(f)
+            TabText = Filename
+            self.DictTab[TabText] = NewListFile
+            del self.DictTab[TabTitle]
+            self.nb.SetPageText(SelectTab, TabText)
 
     def GetStartPosition(self):
 
 
     def GetStartPosition(self):
 
@@ -815,20 +839,42 @@ Voulez-vous fermer quand même ?"""
 ################################################################
 #debut des analyses
 ################################################################
 ################################################################
 #debut des analyses
 ################################################################
-
-    def OnFreq(self, event):
+    def analyse_matrix(self, evt, analyse, analyse_type = '', matrix = None, dlgnb = 1):
+        if matrix is None :
+            matrix = self.tree.getmatrix()
+        #try :
+        analyse(self, matrix, parametres = {'type' : analyse_type}, dlg = progressbar(self, dlgnb))
+        #except:
+        #    BugReport(self)           
+
+    def OnFreq(self, event, matrix = None):
+        self.analyse_matrix(event, Frequences, analyse_type = 'freq', matrix = matrix, dlgnb = 3)
+        #if matrix is None :
+        #    matrix = self.tree.getmatrix()
+        #try:
+        #    Frequences(self, matrix, parametres = {'type' : 'freq'}, dlg = progressbar(self, 3)) 
+        #except:
+        #    BugReport(self)
+
+    def OnChi2(self, event, matrix = None):
+        #try:
+        self.analyse_matrix(event, ChiSquare, matrix = matrix, analyse_type = 'chi2', dlgnb = 3) 
+        #except:
+        #    BugReport(self)
+
+    def OnSimiTab(self, event, matrix = None):
+        if matrix is None :
+            matrix = self.tree.getmatrix()
         try:
         try:
-            Frequences(self
+            DoSimi(self, matrix, parametres = {'type' : 'simimatrix'}, dlg = progressbar(self, 3)
         except:
             BugReport(self)
         except:
             BugReport(self)
+
+    def OnCHDReinert(self, event, matrix = None):
+        if matrix is None :
+            matrix = self.tree.getmatrix()
+        AnalyseQuest(self, matrix, parametres = {'type' : 'reinertmatrix'}, dlg = progressbar(self, 3))
             
             
-    def OnChi2(self, event):
-        try:
-        #    print('PAS DE DEBUG SUR CHI2')
-            chi = ChiSquare(self)
-        except:
-            BugReport(self)
-    
     def OnStudent(self, event):
         try:
             MakeStudent(self) 
     def OnStudent(self, event):
         try:
             MakeStudent(self) 
@@ -850,14 +896,14 @@ Voulez-vous fermer quand même ?"""
         except:
             BugReport(self)
  
         except:
             BugReport(self)
  
-    def OnCHDAlceste(self, event):
-        try:
-         #   print('PLUS DE BUG SUR ALCESTE QUESTIONNAIRE')
-            self.quest = AnalyseQuest(self)
-            if self.quest.val == wx.ID_OK:
-                PlaySound(self)
-        except:
-            BugReport(self)
+#     def OnCHDReinert(self, event):
+        try:
+         #   print('PLUS DE BUG SUR ALCESTE QUESTIONNAIRE')
+            self.quest = AnalyseQuest(self)
+            if self.quest.val == wx.ID_OK:
+                PlaySound(self)
+        except:
+            BugReport(self)
     
     def OnProto(self, evt) :
         Prototypical(self, {'type' : 'proto'})
     
     def OnProto(self, evt) :
         Prototypical(self, {'type' : 'proto'})
@@ -953,16 +999,18 @@ Voulez-vous fermer quand même ?"""
         ID = evt.GetId()
         if ID == self.ID_splitvar :
             Extract(self, 'splitvar')
         ID = evt.GetId()
         if ID == self.ID_splitvar :
             Extract(self, 'splitvar')
-        else :
+        elif ID == self.ID_extractmod :
             Extract(self, 'mods')
             Extract(self, 'mods')
+        elif ID == self.ID_extractthem :
+            Extract(self, 'them')
 
 
-    def OnTextAlceste(self, event, corpus = None):
+    def OnTextReinert(self, event, corpus = None):
         try:
             #print('ATTENTION : PLUS DE BUG SUR ALCESTE')
             #RunAnalyse(self, corpus, Alceste, OptAlceste)
             if corpus is None :
                 corpus = self.tree.getcorpus()            
         try:
             #print('ATTENTION : PLUS DE BUG SUR ALCESTE')
             #RunAnalyse(self, corpus, Alceste, OptAlceste)
             if corpus is None :
                 corpus = self.tree.getcorpus()            
-            self.Text = Alceste(self, corpus, parametres = {'type': 'alceste'}, dlg = progressbar(self,6))
+            self.Text = Reinert(self, corpus, parametres = {'type': 'alceste'}, dlg = progressbar(self,6))
             if self.Text.val == wx.ID_OK:
                 PlaySound(self)
         except:
             if self.Text.val == wx.ID_OK:
                 PlaySound(self)
         except:
@@ -979,18 +1027,18 @@ Voulez-vous fermer quand même ?"""
             BugReport(self)
 
     def SimiCluster(self, parametres = {}, fromprof = False, pathout = '', listactives = [], actives = [], tableau = None) :
             BugReport(self)
 
     def SimiCluster(self, parametres = {}, fromprof = False, pathout = '', listactives = [], actives = [], tableau = None) :
-        DoSimi(self, param = parametres, fromprof =  fromprof, pathout = pathout, listactives = listactives, actives = actives, tableau = tableau)
+        DoSimi(self, param = parametres, fromprof =  fromprof, listactives = listactives, actives = actives, tableau = tableau)
     
     
-    def OnSimi(self,evt):
-        try :
+#    def OnSimi(self,evt):
+#        try :
             #print 'ATTENTION !!!! VERGES'
             #print 'PLUS DE BUG SUR SIMI'
             #print 'ATTENTION !!!! VERGES'
             #print 'PLUS DE BUG SUR SIMI'
-            self.res = DoSimi(self, param = None)
+#            self.res = DoSimi(self, param = None)
             #self.res = Verges(self)
             #self.res = Verges(self)
-            if self.res.val == wx.ID_OK :
-                PlaySound(self)
-        except :
-            BugReport(self)
+#            if self.res.val == wx.ID_OK :
+#                PlaySound(self)
+#        except :
+#            BugReport(self)
 #################################################################
 
     def OnHelp(self, event):
 #################################################################
 
     def OnHelp(self, event):
index 96aaaf6..2c3f41c 100644 (file)
--- a/layout.py
+++ b/layout.py
@@ -23,6 +23,7 @@ from dialog import PrefGraph, PrefExport, PrefSimpleFile, PrefDendro, SimpleDial
 from guifunct import SelectColumn, PrepSimi, PrefSimi
 from webexport import WebExport
 from corpus import Corpus
 from guifunct import SelectColumn, PrepSimi, PrefSimi
 from webexport import WebExport
 from corpus import Corpus
+from sheet import MySheet
 import datetime
 import sys
 import tempfile
 import datetime
 import sys
 import tempfile
@@ -361,7 +362,9 @@ class OpenCHDS():
             self.corpus.make_ucecl_from_R(self.pathout['uce'])
             corpname = self.corpus.parametres['corpus_name']
         else :
             self.corpus.make_ucecl_from_R(self.pathout['uce'])
             corpname = self.corpus.parametres['corpus_name']
         else :
-            corpname = self.corpus.parametres['name']
+            corpname = self.corpus.parametres['matrix_name']
+            if os.path.exists(self.pathout['analyse.db']) :
+                self.corpus.read_tableau(self.pathout['analyse.db'])
 
         clnb = parametres['clnb']
         dlg = progressbar(self, maxi = 4 + clnb) 
 
         clnb = parametres['clnb']
         dlg = progressbar(self, maxi = 4 + clnb) 
@@ -629,7 +632,27 @@ class SashList(wx.Panel) :
         self.rightwin1 = rightwin1
         winids.append(rightwin1.GetId())
 
         self.rightwin1 = rightwin1
         winids.append(rightwin1.GetId())
 
-
+class TgenLayout :
+    def __init__(self, page):
+        self.page = page
+        parametres = self.page.parametres
+        ira = wx.GetApp().GetTopWindow()
+        self.page.tgens, etoiles =  ReadList(parametres['tgenspec'], ira.syscoding, sep="\t")
+        tgentab = False
+        for i in range(page.GetPageCount()) :
+            tab = page.GetPage(i)
+            if 'tgen' in dir(tab) :
+                if tab.tgen :
+                    tgentab = tab
+                    break
+        if tgentab :
+            self.page.tgentab.RefreshData(self.page.tgens)
+            self.page.SetSelection(i)
+        else :
+            self.page.tgentab = ListForSpec(ira, None, self.page.tgens, etoiles[1:])
+            self.page.tgentab.tgen = True
+            self.page.AddPage(self.page.tgentab, u'Tgens Specificities')
+            self.page.SetSelection(self.page.GetPageCount() - 1)
 
 class dolexlayout :
     def __init__(self, ira, corpus, parametres):
 
 class dolexlayout :
     def __init__(self, ira, corpus, parametres):
@@ -649,21 +672,21 @@ class dolexlayout :
         self.DictEffType, firstefft = ReadList(self.dictpathout['tabletypem'], self.corpus.parametres['syscoding'])
         self.DictEffRelForme, firsteffrelf = ReadList(self.dictpathout['eff_relatif_forme'], self.corpus.parametres['syscoding']) 
         self.DictEffRelType, firsteffrelt = ReadList(self.dictpathout['eff_relatif_type'], self.corpus.parametres['syscoding'])    
         self.DictEffType, firstefft = ReadList(self.dictpathout['tabletypem'], self.corpus.parametres['syscoding'])
         self.DictEffRelForme, firsteffrelf = ReadList(self.dictpathout['eff_relatif_forme'], self.corpus.parametres['syscoding']) 
         self.DictEffRelType, firsteffrelt = ReadList(self.dictpathout['eff_relatif_type'], self.corpus.parametres['syscoding'])    
-        
+        self.etoiles = firsteff[1:]
         #sash = SashList(ira.nb)
         
         
         self.TabStat = aui.AuiNotebook(ira.nb, -1, wx.DefaultPosition)
         self.TabStat.parametres = parametres
         #sash = SashList(ira.nb)
         
         
         self.TabStat = aui.AuiNotebook(ira.nb, -1, wx.DefaultPosition)
         self.TabStat.parametres = parametres
-        self.ListPan = ListForSpec(ira, self, self.DictSpec, first)
+        self.ListPan = ListForSpec(ira, self, self.DictSpec, self.etoiles)
         if os.path.exists(self.pathout['banalites.csv']) :
         if os.path.exists(self.pathout['banalites.csv']) :
-            self.listban = ListForSpec(ira, self, self.dictban, firstban)
+            self.listban = ListForSpec(ira, self, self.dictban, ['eff'] + self.etoiles)
         #self.ListPan2 = ListForSpec(sash.rightwin1, self, self.DictSpec, first)
         #self.ListPan2 = ListForSpec(sash.rightwin1, self, self.DictSpec, first)
-        self.ListPant = ListForSpec(ira, self, self.DictType, firstt)
-        self.ListPanEff = ListForSpec(ira, self, self.DictEff, firsteff)
-        self.ListPanEffType = ListForSpec(ira, self, self.DictEffType, firstefft)
-        self.ListPanEffRelForme = ListForSpec(ira, self, self.DictEffRelForme, firsteffrelf)
-        self.ListPanEffRelType = ListForSpec(ira, self.parent, self.DictEffRelType, firsteffrelt)
+        self.ListPant = ListForSpec(ira, self, self.DictType, self.etoiles)
+        self.ListPanEff = ListForSpec(ira, self, self.DictEff, self.etoiles)
+        self.ListPanEffType = ListForSpec(ira, self, self.DictEffType, self.etoiles)
+        self.ListPanEffRelForme = ListForSpec(ira, self, self.DictEffRelForme, self.etoiles)
+        self.ListPanEffRelType = ListForSpec(ira, self.parent, self.DictEffRelType, self.etoiles)
         
         self.TabStat.AddPage(self.ListPan, u'formes') 
         if os.path.exists(self.pathout['banalites.csv']) :
         
         self.TabStat.AddPage(self.ListPan, u'formes') 
         if os.path.exists(self.pathout['banalites.csv']) :
@@ -682,11 +705,20 @@ class dolexlayout :
             self.tabAFCTGraph = GraphPanelAfc(self.TabAFC, self.dictpathout, list_graph, self.parametres['clnb'], itempath ='liste_graph_afct', coding=self.encoding)
             self.TabAFC.AddPage(self.tabAFCTGraph, 'AFC type')
             self.TabStat.AddPage(self.TabAFC, 'AFC')
             self.tabAFCTGraph = GraphPanelAfc(self.TabAFC, self.dictpathout, list_graph, self.parametres['clnb'], itempath ='liste_graph_afct', coding=self.encoding)
             self.TabAFC.AddPage(self.tabAFCTGraph, 'AFC type')
             self.TabStat.AddPage(self.TabAFC, 'AFC')
+        
+        
+        
            
         
         ira.nb.AddPage(self.TabStat, u'Spécificités')
            
         
         ira.nb.AddPage(self.TabStat, u'Spécificités')
+        self.ira = ira
         
         self.TabStat.corpus = self.corpus
         
         self.TabStat.corpus = self.corpus
+        self.TabStat.etoiles = self.etoiles
+        if os.path.exists(os.path.join(self.parametres['pathout'], 'tgenspec.csv')) :
+            self.parametres['tgenspec'] = os.path.join(self.parametres['pathout'], 'tgenspec.csv')
+            TgenLayout(self.TabStat)
+        self.TabStat.SetSelection(0)
         ira.nb.SetSelection(self.parent.nb.GetPageCount() - 1)
         ira.ShowAPane("Tab_content")
 
         ira.nb.SetSelection(self.parent.nb.GetPageCount() - 1)
         ira.ShowAPane("Tab_content")
 
@@ -798,9 +830,9 @@ class GraphPanelDendro(wx.Panel):
         self.param['type_tclasse'] = dial.m_radioBox2.GetSelection()
 
     def make_dendro(self, dendro = 'simple') :
         self.param['type_tclasse'] = dial.m_radioBox2.GetSelection()
 
     def make_dendro(self, dendro = 'simple') :
-        while os.path.exists(os.path.join(self.dirout, 'dendrogamme_' + str(self.graphnb)+'.png')) :
+        while os.path.exists(os.path.join(self.dirout, 'dendrogramme_' + str(self.graphnb)+'.png')) :
             self.graphnb += 1
             self.graphnb += 1
-        fileout = ffr(os.path.join(self.dirout,'dendrogamme_' + str(self.graphnb)+'.png'))
+        fileout = ffr(os.path.join(self.dirout,'dendrogramme_' + str(self.graphnb)+'.png'))
         width = self.param['width']
         height = self.param['height']
         type_dendro = self.type_dendro[self.param['type_dendro']]
         width = self.param['width']
         height = self.param['height']
         type_dendro = self.type_dendro[self.param['type_dendro']]
@@ -892,6 +924,25 @@ class OpenCorpus :
         ira.nb.SetSelection(ira.nb.GetPageCount() - 1)
         ira.ShowAPane("Tab_content")
 
         ira.nb.SetSelection(ira.nb.GetPageCount() - 1)
         ira.ShowAPane("Tab_content")
 
+class MatLayout :
+    def __init__(self, ira, matrix):
+        #self.parent.content = self.csvtable
+        self.sheet = MySheet(ira.nb)
+        ira.nb.AddPage(self.sheet, matrix.parametres['matrix_name'])
+        self.sheet.Populate(matrix.csvtable)
+        self.sheet.parametres = matrix.parametres
+        #self.ira.ShowMenu(_(u"View").decode('utf8'))
+        #self.ira.ShowMenu(_(u"Matrix analysis").decode('utf8'))
+        #self.ira.ShowMenu(_(u"Text analysis").decode('utf8'), False)
+        #self.parent.type = "Data"
+        #self.parent.DataPop = False
+        ira.nb.SetSelection(ira.nb.GetPageCount() - 1)
+        ira.ShowAPane("Tab_content")
+        #self.ira.OnViewData('')
+
+      
+        
+
 class CopusPanel(wx.Panel) :
     def __init__(self, parent, parametres) :
         wx.Panel.__init__ ( self, parent, id = wx.ID_ANY, pos = wx.DefaultPosition, size = wx.Size( 500,300 ), style = wx.TAB_TRAVERSAL )
 class CopusPanel(wx.Panel) :
     def __init__(self, parent, parametres) :
         wx.Panel.__init__ ( self, parent, id = wx.ID_ANY, pos = wx.DefaultPosition, size = wx.Size( 500,300 ), style = wx.TAB_TRAVERSAL )
@@ -1119,11 +1170,37 @@ class DefaultMatLayout :
         self.parent = parent
         self.tableau = tableau
         self.parametres = parametres
         self.parent = parent
         self.tableau = tableau
         self.parametres = parametres
+        if os.path.exists(self.pathout['analyse.db']) :
+            self.tableau.read_tableau(self.pathout['analyse.db'])
         self.dolayout()
         self.dolayout()
+        self.ira.nb.SetSelection(self.ira.nb.GetPageCount() - 1)
+        self.ira.ShowAPane("Tab_content")
 
     def dolayout(self) :
         pass
 
 
     def dolayout(self) :
         pass
 
+class FreqLayout(DefaultMatLayout) :
+    def dolayout(self) :
+        self.tab = wx.html.HtmlWindow(self.ira.nb, -1)
+        if "gtk2" in wx.PlatformInfo:
+            self.tab.SetStandardFonts()
+        self.tab.LoadPage(self.pathout['resultats.html'])
+        self.tab.parametres = self.parametres
+        self.ira.nb.AddPage(self.tab, u"Fréquences")
+
+
+class Chi2Layout(DefaultMatLayout) :
+    def dolayout(self):
+        self.tab = wx.html.HtmlWindow(self.ira.nb, -1)
+        if "gtk2" in wx.PlatformInfo:
+            self.tab.SetStandardFonts()
+        self.tab.LoadPage(self.pathout['resultats-chi2.html'])
+        self.tab.parametres = self.parametres
+        self.ira.nb.AddPage(self.tab, ' - '.join([u"Chi2", "%s" % self.parametres['name']]))
+        #self.ira.nb.SetSelection(self.ira.nb.GetPageCount() - 1)
+        #self.ira.ShowAPane("Tab_content")  
+
+
 class ProtoLayout(DefaultMatLayout) :
     def dolayout(self) :
         list_graph = [['proto.png', 'Analyse prototypique']]
 class ProtoLayout(DefaultMatLayout) :
     def dolayout(self) :
         list_graph = [['proto.png', 'Analyse prototypique']]
@@ -1137,8 +1214,8 @@ class ProtoLayout(DefaultMatLayout) :
         #self.Tab.corpus = self.corpus
         self.TabProto.parametres = self.parametres
         self.ira.nb.AddPage(self.TabProto, 'Analyse Prototypique - %s' % self.parametres['name'])
         #self.Tab.corpus = self.corpus
         self.TabProto.parametres = self.parametres
         self.ira.nb.AddPage(self.TabProto, 'Analyse Prototypique - %s' % self.parametres['name'])
-        self.ira.nb.SetSelection(self.ira.nb.GetPageCount() - 1)
-        self.ira.ShowAPane("Tab_content")
+        #self.ira.nb.SetSelection(self.ira.nb.GetPageCount() - 1)
+        #self.ira.ShowAPane("Tab_content")
 
 
 class SimiMatLayout(DefaultMatLayout) :
 
 
 class SimiMatLayout(DefaultMatLayout) :
@@ -1159,8 +1236,8 @@ class SimiMatLayout(DefaultMatLayout) :
         self.tabsimi.AddPage(self.graphpan, 'Graph')
         self.tabsimi.parametres = self.parametres
         self.parent.nb.AddPage(self.tabsimi, 'Analyse de graph')
         self.tabsimi.AddPage(self.graphpan, 'Graph')
         self.tabsimi.parametres = self.parametres
         self.parent.nb.AddPage(self.tabsimi, 'Analyse de graph')
-        self.parent.ShowTab(True)
-        self.parent.nb.SetSelection(self.parent.nb.GetPageCount() - 1)
+        #self.parent.ShowTab(True)
+        #self.parent.nb.SetSelection(self.parent.nb.GetPageCount() - 1)
 
     def redosimi(self,evt) :
         with open(self.pathout['selected.csv'],'r') as f :
 
     def redosimi(self,evt) :
         with open(self.pathout['selected.csv'],'r') as f :
index 409c9fc..7664614 100644 (file)
@@ -26,13 +26,23 @@ from operator import itemgetter
 #---------------------------------------------------------------------------
 
 class ListForSpec(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.ColumnSorterMixin):
 #---------------------------------------------------------------------------
 
 class ListForSpec(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.ColumnSorterMixin):
-    def __init__(self, parent,gparent, dlist, first, menu = True):
+    def __init__(self, parent,gparent, dlist = {}, first = [], menu = True):
     #def  __init__(self, parent) :
         wx.ListCtrl.__init__( self, parent, -1, style=wx.LC_REPORT|wx.LC_VIRTUAL|wx.LC_HRULES|wx.LC_VRULES)
         self.parent=parent
         self.gparent=gparent
         self.dlist=dlist
         self.first = first
     #def  __init__(self, parent) :
         wx.ListCtrl.__init__( self, parent, -1, style=wx.LC_REPORT|wx.LC_VIRTUAL|wx.LC_HRULES|wx.LC_VRULES)
         self.parent=parent
         self.gparent=gparent
         self.dlist=dlist
         self.first = first
+        self.tgen = False
+        if 'etoiles' in dir(self.gparent) :
+            self.etoiles = self.gparent.etoiles
+        else :
+            self.etoiles = []
+            for val in self.first :
+                if val.startswith(u'X.') :
+                    val = val.replace(u'X.', u'*')
+                self.etoiles.append(val)
+                
         self.menu = menu
 
     #def start(self) :
         self.menu = menu
 
     #def start(self) :
@@ -54,23 +64,26 @@ class ListForSpec(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.ColumnSor
         self.attr1.SetBackgroundColour((230, 230, 230))
         self.attr2 = wx.ListItemAttr()
         self.attr2.SetBackgroundColour("light blue")
         self.attr1.SetBackgroundColour((230, 230, 230))
         self.attr2 = wx.ListItemAttr()
         self.attr2.SetBackgroundColour("light blue")
+        self.attrselected = wx.ListItemAttr()
+        self.attrselected.SetBackgroundColour("red")
+        self.selected = {}
         
         i=0
         
         i=0
-        for name in self.first :
+        for name in [u'formes'] + self.first :
             self.InsertColumn(i,name,wx.LIST_FORMAT_LEFT)
             i+=1
             
         self.SetColumnWidth(0, 180)
 
             self.InsertColumn(i,name,wx.LIST_FORMAT_LEFT)
             i+=1
             
         self.SetColumnWidth(0, 180)
 
-        for i in range(1,len(self.first)-1):
-            self.SetColumnWidth(i, self.checkcolumnwidth(len(self.first[i]) * 10))
+        for i in range(0,len(self.first)):
+            self.SetColumnWidth(i + 1, self.checkcolumnwidth(len(self.first[i]) * 10))
         
         self.itemDataMap = self.dlist
         self.itemIndexMap = self.dlist.keys()
         self.SetItemCount(len(self.dlist))
         
         #listmix.ListCtrlAutoWidthMixin.__init__(self)
         
         self.itemDataMap = self.dlist
         self.itemIndexMap = self.dlist.keys()
         self.SetItemCount(len(self.dlist))
         
         #listmix.ListCtrlAutoWidthMixin.__init__(self)
-        listmix.ColumnSorterMixin.__init__(self, len(self.first))
+        listmix.ColumnSorterMixin.__init__(self, len(self.first) + 1)
         self.SortListItems(1, 0)
         
 #-----------------------------------------------------------------------------------------    
         self.SortListItems(1, 0)
         
 #-----------------------------------------------------------------------------------------    
@@ -84,6 +97,11 @@ class ListForSpec(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.ColumnSor
         self.Bind(wx.EVT_RIGHT_UP, self.OnRightClick)
 
 #-----------------------------------------------------------------------------------------    
         self.Bind(wx.EVT_RIGHT_UP, self.OnRightClick)
 
 #-----------------------------------------------------------------------------------------    
+    def RefreshData(self, data):
+        self.itemDataMap = data
+        self.itemIndexMap = data.keys()
+        self.SetItemCount(len(data))
+        self.Refresh()
         
     def checkcolumnwidth(self, width) :
         if width < 80 :
         
     def checkcolumnwidth(self, width) :
         if width < 80 :
@@ -97,11 +115,16 @@ class ListForSpec(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.ColumnSor
         return s
 
     def OnGetItemAttr(self, item):
         return s
 
     def OnGetItemAttr(self, item):
-        if item % 2 :
-            return self.attr1
+        if self.getColumnText(item, 0) not in self.selected :
+            if item % 2 :
+                return self.attr1
+            else :
+                return self.attr2
         else :
         else :
-            return self.attr2
-
+            return self.attrselected
+    
+    def GetItemByWord(self, word):
+        return [ val for val in self.dlist if self.dlist[val][0] == word ][0]
 
     # Used by the ColumnSorterMixin, see wx/lib/mixins/listctrl.py
     def GetListCtrl(self):
 
     # Used by the ColumnSorterMixin, see wx/lib/mixins/listctrl.py
     def GetListCtrl(self):
@@ -120,6 +143,12 @@ class ListForSpec(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.ColumnSor
             self.Select(item)
 
         event.Skip()
             self.Select(item)
 
         event.Skip()
+    
+    def GetString(self, evt):
+        return self.getselectedwords()[0]
+    
+    def GetSelections(self):
+        return self.getselectedwords()
 
     def getColumnText(self, index, col):
         item = self.GetItem(index, col)
 
     def getColumnText(self, index, col):
         item = self.GetItem(index, col)
@@ -155,28 +184,31 @@ class ListForSpec(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.ColumnSor
                 self.popupID2 = wx.NewId()
                 self.popupID3 = wx.NewId()
                 self.popup_Tgen_glob = wx.NewId()
                 self.popupID2 = wx.NewId()
                 self.popupID3 = wx.NewId()
                 self.popup_Tgen_glob = wx.NewId()
+                self.onmaketgen = wx.NewId()
                 self.ID_stcaract = wx.NewId()
 
                 self.Bind(wx.EVT_MENU, self.OnPopupOne, id=self.popupID1)
                 self.Bind(wx.EVT_MENU, self.OnPopupTwo, id=self.popupID2)
                 self.Bind(wx.EVT_MENU, self.OnPopupThree, id=self.popupID3)
                 self.Bind(wx.EVT_MENU, self.OnTgen_glob, id=self.popup_Tgen_glob)
                 self.ID_stcaract = wx.NewId()
 
                 self.Bind(wx.EVT_MENU, self.OnPopupOne, id=self.popupID1)
                 self.Bind(wx.EVT_MENU, self.OnPopupTwo, id=self.popupID2)
                 self.Bind(wx.EVT_MENU, self.OnPopupThree, id=self.popupID3)
                 self.Bind(wx.EVT_MENU, self.OnTgen_glob, id=self.popup_Tgen_glob)
+                self.Bind(wx.EVT_MENU, self.OnMakeTgen, id=self.onmaketgen)
                 #self.Bind(wx.EVT_MENU, self.onstcaract, id = self.ID_stcaract)
             # make a menu
             menu = wx.Menu()
             # add some items
             menu.Append(self.popupID1, u"Formes associées")
             menu.Append(self.popupID2, u"Concordancier")
                 #self.Bind(wx.EVT_MENU, self.onstcaract, id = self.ID_stcaract)
             # make a menu
             menu = wx.Menu()
             # add some items
             menu.Append(self.popupID1, u"Formes associées")
             menu.Append(self.popupID2, u"Concordancier")
-            menu.Append(self.popupID3, "Graphique")
+            menu.Append(self.popupID3, u"Graphique")
             menu_stcaract = wx.Menu()
             self.menuid = {}
             menu_stcaract = wx.Menu()
             self.menuid = {}
-            for i, et in enumerate(self.first[1:]) :
+            for i, et in enumerate(self.etoiles) :
                 nid = wx.NewId()
                 self.menuid[nid] = i
                 menu_stcaract.Append(nid, et)
                 self.Bind(wx.EVT_MENU, self.onstcaract, id = nid)
             menu.AppendMenu(-1, u"Segments de texte caractéristiques", menu_stcaract)
             #menu.Append(self.popup_Tgen_glob, "Tgen global")
                 nid = wx.NewId()
                 self.menuid[nid] = i
                 menu_stcaract.Append(nid, et)
                 self.Bind(wx.EVT_MENU, self.onstcaract, id = nid)
             menu.AppendMenu(-1, u"Segments de texte caractéristiques", menu_stcaract)
             #menu.Append(self.popup_Tgen_glob, "Tgen global")
+            menu.Append(self.onmaketgen, "Make Tgen")
             self.PopupMenu(menu)
             menu.Destroy()
 
             self.PopupMenu(menu)
             menu.Destroy()
 
@@ -185,7 +217,7 @@ class ListForSpec(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.ColumnSor
         last = self.GetFirstSelected()
         while self.GetNextSelected(last) != -1:
             last = self.GetNextSelected(last)
         last = self.GetFirstSelected()
         while self.GetNextSelected(last) != -1:
             last = self.GetNextSelected(last)
-            words.append(self.getColumnText(last, 1))
+            words.append(self.getColumnText(last, 0))
         return words
 
     def OnPopupOne(self, event):
         return words
 
     def OnPopupOne(self, event):
@@ -214,9 +246,11 @@ class ListForSpec(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.ColumnSor
         parametres = page.parametres
         paneff = self.gparent.ListPanEff
         panchi = self.gparent.ListPan
         parametres = page.parametres
         paneff = self.gparent.ListPanEff
         panchi = self.gparent.ListPan
-        et = self.first[ind+1]
-        if et.startswith(u'X.') :
-            et = et.replace(u'X.', u'*')
+        #etoiles = self.gparent.etoiles
+        et = self.etoiles[ind]
+        
+        #if et.startswith(u'X.') :
+        #    et = et.replace(u'X.', u'*')
         uces = corpus.getucesfrometoile(et)
         self.la = [panchi.dlist[i][0] for i in range(0, len(panchi.dlist)) if panchi.dlist[i][ind+1] >= minind ]
         self.lchi = [panchi.dlist[i][ind+1] for i in range(0, len(panchi.dlist)) if panchi.dlist[i][ind+1] >= minind ]
         uces = corpus.getucesfrometoile(et)
         self.la = [panchi.dlist[i][0] for i in range(0, len(panchi.dlist)) if panchi.dlist[i][ind+1] >= minind ]
         self.lchi = [panchi.dlist[i][ind+1] for i in range(0, len(panchi.dlist)) if panchi.dlist[i][ind+1] >= minind ]
@@ -240,21 +274,28 @@ class ListForSpec(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.ColumnSor
         ntab2 = ntab2[:limite]
         nuces = [val[1] for val in ntab2]
         ucis_txt, ucestxt = doconcorde(corpus, nuces, self.la)
         ntab2 = ntab2[:limite]
         nuces = [val[1] for val in ntab2]
         ucis_txt, ucestxt = doconcorde(corpus, nuces, self.la)
-        win = message(self, u"Segments de texte caractéristiques - %s" % self.first[ind], (750, 600))
-        win.html = '<html>\n' + '<br>'.join(['<br>'.join([ucis_txt[i], '<table bgcolor = #1BF0F7 border=0><tr><td><b>score : %.2f</b></td></tr></table>' % ntab2[i][0], ucestxt[i]]) for i in range(0,len(ucestxt))]) + '\n</html>'
-        win.HtmlPage.SetPage(win.html)
+        items = dict([[i, '<br>'.join([ucis_txt[i], '<table bgcolor = #1BF0F7 border=0><tr><td><b>score : %.2f</b></td></tr></table><br>' % ntab2[i][0], ucestxt[i]])] for i in range(0,len(ucestxt))])
+        win = message(self, items, u"Segments de texte caractéristiques - %s" % self.first[ind], (900, 600))
+        #win.html = '<html>\n' + '<br>'.join(['<br>'.join([ucis_txt[i], '<table bgcolor = #1BF0F7 border=0><tr><td><b>score : %.2f</b></td></tr></table>' % ntab2[i][0], ucestxt[i]]) for i in range(0,len(ucestxt))]) + '\n</html>'
+        #win.HtmlPage.SetPage(win.html)
         win.Show(True)
         
     def OnPopupTwo(self, event):
         win.Show(True)
         
     def OnPopupTwo(self, event):
-        activenotebook = self.parent.nb.GetSelection()
-        page = self.parent.nb.GetPage(activenotebook)
+        if 'nb' in dir(self.parent) :
+            activenotebook = self.parent.nb.GetSelection()
+            page = self.parent.nb.GetPage(activenotebook)
+            corpus = page.corpus
+        else :
+            corpus = self.parent.parent.parent.corpus
         item=self.getColumnText(self.GetFirstSelected(), 0)
         item=self.getColumnText(self.GetFirstSelected(), 0)
-        corpus = page.corpus
         uce_ok = corpus.getlemuces(item)
         uce_ok = corpus.getlemuces(item)
-        win = message(self, u"Concordancier", (750, 600))
+        ira = wx.GetApp().GetTopWindow()
         ucis_txt, ucestxt = doconcorde(corpus, uce_ok, [item])
         ucis_txt, ucestxt = doconcorde(corpus, uce_ok, [item])
-        win.html = ('<html>\n<h1>%s</h1>' % item) + '<br>'.join(['<br>'.join([ucis_txt[i], ucestxt[i]]) for i in range(0,len(ucestxt))]) + '\n</html>'
-        win.HtmlPage.SetPage(win.html)
+        items = dict([[i, '<br><br>'.join([ucis_txt[i], ucestxt[i]])] for i in range(0,len(ucestxt))])
+        win = message(ira, items, u"Concordancier - %s" % item, (800, 500))
+        #win = message(ira, u"Concordancier", (800, 500))
+        #win.html = ('<html>\n<h1>%s</h1>' % item) + '<br>'.join(['<br>'.join([ucis_txt[i], ucestxt[i]]) for i in range(0,len(ucestxt))]) + '\n</html>'
+        #win.HtmlPage.SetPage(win.html)
         win.Show(True)
 
     def getinf(self, txt) :
         win.Show(True)
 
     def getinf(self, txt) :
@@ -272,7 +313,7 @@ class ListForSpec(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.ColumnSor
             last = self.GetNextSelected(last)
             data = self.GetItemData(last)
             datas += [data]
             last = self.GetNextSelected(last)
             data = self.GetItemData(last)
             datas += [data]
-        colnames = self.first[1:]
+        colnames = self.etoiles
         table = [[self.getinf(val) for val in line[1:]] for line in datas]
         rownames = [val[0] for val in datas]
         tmpgraph = tempfile.mktemp(dir=self.parent.TEMPDIR)
         table = [[self.getinf(val) for val in line[1:]] for line in datas]
         rownames = [val[0] for val in datas]
         tmpgraph = tempfile.mktemp(dir=self.parent.TEMPDIR)
@@ -320,3 +361,6 @@ class ListForSpec(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.ColumnSor
         txt = "<img src='%s'>" % tmpgraph
         win.HtmlPage.SetPage(txt)
         win.Show(True)
         txt = "<img src='%s'>" % tmpgraph
         win.HtmlPage.SetPage(txt)
         win.Show(True)
+    
+    def OnMakeTgen(self, evt):
+        self.parent.tree.OnTgenEditor(self.getselectedwords())
index b02c1fe..f8c32bb 100644 (file)
@@ -5,13 +5,13 @@
 #License: GNU/GPL
 
 from chemins import ChdTxtPathOut, StatTxtPathOut, PathOut
 #License: GNU/GPL
 
 from chemins import ChdTxtPathOut, StatTxtPathOut, PathOut
-from layout import OpenCHDS, dolexlayout, StatLayout, WordCloudLayout, OpenCorpus, SimiLayout, SimiMatLayout, ProtoLayout
+from layout import OpenCHDS, dolexlayout, StatLayout, WordCloudLayout, OpenCorpus, SimiLayout, SimiMatLayout, ProtoLayout, MatLayout, FreqLayout, Chi2Layout
 from corpus import Corpus, copycorpus
 from tableau import Tableau
 import os
 #import shelve
 #from tabsimi import DoSimi
 from corpus import Corpus, copycorpus
 from tableau import Tableau
 import os
 #import shelve
 #from tabsimi import DoSimi
-from functions import DoConf
+from functions import DoConf, ReadDicoAsDico
 from tableau import Tableau
 import logging
 
 from tableau import Tableau
 import logging
 
@@ -31,36 +31,46 @@ class OpenAnalyse():
         
         if self.conf['type'] == 'corpus' :
             corpus = self.opencorpus()
         
         if self.conf['type'] == 'corpus' :
             corpus = self.opencorpus()
+        elif self.conf['type'] == 'matrix' :
+            matrix = self.openmatrix()
         elif self.conf.get('corpus', False) in self.parent.history.corpus :
             if self.conf['uuid'] in self.parent.history.analyses :
                 intree  = True
             else :
                 intree = False
             corpus = self.openanalyse()
         elif self.conf.get('corpus', False) in self.parent.history.corpus :
             if self.conf['uuid'] in self.parent.history.analyses :
                 intree  = True
             else :
                 intree = False
             corpus = self.openanalyse()
+            
             if self.conf.get('lem',1) :
             if self.conf.get('lem',1) :
-                corpus.make_lems(True)
+                dolem = True
             else :
             else :
-                corpus.make_lems(False)
+                dolem = False
+            if self.conf.get('dictionary', False) :
+                dico = ReadDicoAsDico(self.conf['dictionary'])
+                corpus.make_lems_from_dict(dico, dolem = dolem)
+            else :
+                corpus.make_lems(lem = dolem)
             if not intree :
                 self.parent.tree.AddAnalyse(self.conf, bold = True)
             else :
                 self.parent.tree.GiveFocus(uuid = self.conf['uuid'], bold = True)
             self.doopen(corpus)
             if not intree :
                 self.parent.tree.AddAnalyse(self.conf, bold = True)
             else :
                 self.parent.tree.GiveFocus(uuid = self.conf['uuid'], bold = True)
             self.doopen(corpus)
-        else :
+        elif self.conf.get('matrix', False) in self.parent.history.ordermatrix :
             corpus = None
             corpus = None
-            if isinstance(parametres, dict) :
-                tableau = Tableau(parent, parametres['ira'])
-            else :
-                tableau = Tableau(parent, parametres)
-            tableau.parametres = self.conf 
-            tableau.dictpathout = PathOut(filename = tableau.parametres['filename'], dirout = self.conf['pathout'], analyse_type = self.conf['type'])
-            tableau.dictpathout.basefiles(ChdTxtPathOut)
-            tableau.read_tableau(tableau.dictpathout['db'])
-            if self.parent.tree.IsInTree(uuid = self.conf['uuid']) :
-                self.parent.tree.GiveFocus(uuid = self.conf['uuid'], bold = True)
-            else :
-                self.parent.tree.AddAnalyse(self.conf, bold = True)
-            self.doopen(tableau)
+            matrix = Tableau(self.parent, parametres = self.parent.history.matrix[self.parent.history.ordermatrix[self.conf['matrix']]])
+            matrix.open()
+            #if isinstance(parametres, dict) :
+            #    tableau = Tableau(parent, parametres['ira'])
+            #else :
+            #    tableau = Tableau(parent, parametres)
+            #tableau.parametres = self.conf 
+            #tableau.dictpathout = PathOut(filename = tableau.parametres['filename'], dirout = self.conf['pathout'], analyse_type = self.conf['type'])
+            #tableau.dictpathout.basefiles(ChdTxtPathOut)
+            #tableau.read_tableau(tableau.dictpathout['db'])
+            #if self.parent.tree.IsInTree(uuid = self.conf['uuid']) :
+            self.parent.tree.GiveFocus(uuid = self.conf['uuid'], bold = True)
+            self.doopen(matrix)
+        else :
+            self.parent.tree.AddAnalyse(self.conf, bold = True)
         self.parent.history.addtab(self.conf)
     
     def redopath(self, conf, path) :
         self.parent.history.addtab(self.conf)
     
     def redopath(self, conf, path) :
@@ -87,6 +97,25 @@ class OpenAnalyse():
             self.parent.history.openedcorpus[self.conf['uuid']] = corpus
             self.opencorpus_analyses()
             self.doopen(corpus)
             self.parent.history.openedcorpus[self.conf['uuid']] = corpus
             self.opencorpus_analyses()
             self.doopen(corpus)
+    
+    def openmatrix(self):
+        log.info('open matrix')
+        if self.conf['uuid'] not in self.parent.history.ordermatrix :
+            self.parent.history.addMatrix(self.conf)
+            log.info('add matrix to history')
+            self.parent.tree.OnItemAppend(self.conf)
+        if self.conf['uuid'] in self.parent.history.openedmatrix :
+            log.info('matrix is already opened')
+            self.doopen(self.parent.history.openedmatrix[self.conf['uuid']])
+        else :
+            #dial = progressbar(2)
+            #dial.Update(1, 'Ouverture du corpus')
+            matrix = Tableau(self, parametres = self.conf)
+            matrix.open()
+            self.parent.history.openedmatrix[self.conf['uuid']] = matrix
+            self.openmatrix_analyses()
+            self.doopen(matrix)        
+            self.parent.history.addtab(self.conf)
 
     def opencorpus_analyses(self) :
         log.info('open analysis')
 
     def opencorpus_analyses(self) :
         log.info('open analysis')
@@ -103,6 +132,9 @@ class OpenAnalyse():
             self.parent.history.addmultiple(analyses)
         for analyse in analyses :
             self.parent.tree.AddAnalyse(analyse, bold = False)
             self.parent.history.addmultiple(analyses)
         for analyse in analyses :
             self.parent.tree.AddAnalyse(analyse, bold = False)
+    
+    def openmatrix_analyses(self):
+        pass
 
     def openanalyse(self) :
         if self.conf['corpus'] in self.parent.history.openedcorpus :
 
     def openanalyse(self) :
         if self.conf['corpus'] in self.parent.history.openedcorpus :
@@ -134,7 +166,7 @@ class OpenAnalyse():
         elif self.conf['type'] == 'wordcloud' or self.conf['type'] == 'clustercloud':
             self.parent.ShowMenu(_("Text analysis"))
             WordCloudLayout(self.parent, corpus, self.conf)
         elif self.conf['type'] == 'wordcloud' or self.conf['type'] == 'clustercloud':
             self.parent.ShowMenu(_("Text analysis"))
             WordCloudLayout(self.parent, corpus, self.conf)
-        elif self.conf['type'] == 'gnepamatrix' :
+        elif self.conf['type'] == 'reinertmatrix' :
             #self.parent.ShowMenu(_("Spreadsheet analysis"))
             OpenCHDS(self.parent,  corpus, self.conf, Alceste = False)
         elif self.conf['type'] == 'simimatrix' :
             #self.parent.ShowMenu(_("Spreadsheet analysis"))
             OpenCHDS(self.parent,  corpus, self.conf, Alceste = False)
         elif self.conf['type'] == 'simimatrix' :
@@ -142,4 +174,10 @@ class OpenAnalyse():
             SimiMatLayout(self.parent, corpus, self.conf)
         elif self.conf['type'] == 'proto' :
             ProtoLayout(self.parent, corpus, self.conf)
             SimiMatLayout(self.parent, corpus, self.conf)
         elif self.conf['type'] == 'proto' :
             ProtoLayout(self.parent, corpus, self.conf)
+        elif self.conf['type'] == 'matrix' :
+            MatLayout(self.parent, corpus)
+        elif self.conf['type'] == 'freq' :
+            FreqLayout(self.parent, corpus, self.conf)
+        elif self.conf['type'] == 'chi2' :
+            Chi2Layout(self.parent, corpus, self.conf)
         
         
index 21f70aa..18461e0 100644 (file)
@@ -14,6 +14,31 @@ import re
 #encodage_in = 'utf8'
 #encodage_out = 'utf8'
 
 #encodage_in = 'utf8'
 #encodage_out = 'utf8'
 
+mois = {u'janvier' : '01', 
+        u'février' : '02',
+        u'mars' : '03',
+        u'avril' : '04', 
+        u'mai' : '05',
+        u'juin' : '06',
+        u'juillet' : '07',
+        u'août' : '08',
+        u'septembre' : '09',
+        u'octobre' : '10',
+        u'novembre' : '11',
+        u'décembre' : '12', 
+        u'january' : '01',
+        u'february': '02',
+        u'march' : '03',
+        u'april': '04',
+        u'may': '05',
+        u'june' : '06',
+        u'july': '07',
+        u'august': '08',
+        u'september' : '09',
+        u'october': '10',
+        u'november': '11',
+        u'december': '12'}
+
 
 def parsetxtpaste(txt):
     """
 
 def parsetxtpaste(txt):
     """
@@ -26,21 +51,27 @@ def parsetxtpaste(txt):
     keepline = False
     ucis = []
     for line in txt : 
     keepline = False
     ucis = []
     for line in txt : 
-        if line.startswith('Article') :
+        if line.startswith(u'Article') :
             lp = line.split()
             if len(lp) > 2  :
             lp = line.split()
             if len(lp) > 2  :
-                if lp[2] == 'Article' :
+                if lp[2] == u'Article' or lp[2] == u'Next' or lp[2] == u'Previous':
                     ucis.append([[u'****'],''])
                     keepline = False
         if line.startswith('SN ') : #source
                     ucis.append([[u'****'],''])
                     keepline = False
         if line.startswith('SN ') : #source
-            jsource = re.sub('[^A-Za-z0-9]', '', line[4:])
+            jsource = re.sub(u'[\'" !\.?;,:\+\-°&]', '', line[4:])
             source = u'_'.join([u'*source', jsource]).lower()
             #source = '*source_' + line[4:].replace(' ','').replace('\'','').replace(u'´','').replace(u'’','').replace('-','').lower()
             ucis[-1][0].append(source)
         elif line.startswith('PD ') : #date
             source = u'_'.join([u'*source', jsource]).lower()
             #source = '*source_' + line[4:].replace(' ','').replace('\'','').replace(u'´','').replace(u'’','').replace('-','').lower()
             ucis[-1][0].append(source)
         elif line.startswith('PD ') : #date
-            mois_annee = '*ma_' + line[4:].split(' ')[1] + line[4:].split(' ')[2]
-            ucis[-1][0].append(mois_annee)
-            annee = u'*annee_' + line[4:].split(' ')[2]
+            datemois = line[4:].split(' ')[1].lower()
+            datemois = mois.get(datemois, datemois)
+            dateannee = line[4:].split(' ')[2]
+            datejour = '%02d' % int(line[4:].split(' ')[0])
+            am = '_'.join([u'*am', dateannee, datemois])
+            amj = '_'.join([u'*amj', dateannee, datemois, datejour])
+            ucis[-1][0].append(am)
+            ucis[-1][0].append(amj)
+            annee = '_'.join([u'*annee', dateannee])
             ucis[-1][0].append(annee)
         elif line.strip() in no : #fin
             keepline = False
             ucis[-1][0].append(annee)
         elif line.strip() in no : #fin
             keepline = False
@@ -59,16 +90,18 @@ def print_ucis(ucis, ofile, encodage) :
     #elimination des articles vides
     ucis = [uci for uci in ucis if uci[1].strip() != '']
     toprint = '\n\n'.join(['\n'.join([' '.join(uci[0]),uci[1]]) for uci in ucis])
     #elimination des articles vides
     ucis = [uci for uci in ucis if uci[1].strip() != '']
     toprint = '\n\n'.join(['\n'.join([' '.join(uci[0]),uci[1]]) for uci in ucis])
-    ofile.write(toprint.encode(encodage) + '\n')
+    ofile.write(toprint.encode(encodage, errors='replace') + '\n')
 
 class ParseFactivaPaste :
     def __init__(self, txtdir, fileout, encodage_in, encodage_out) :
         files = os.listdir(txtdir) 
 
 class ParseFactivaPaste :
     def __init__(self, txtdir, fileout, encodage_in, encodage_out) :
         files = os.listdir(txtdir) 
+        files = [f for f in files if f.split('.')[-1] == 'txt']
         tot = 0
         with open(fileout,'w') as outf : 
             for f in files : 
                 print f
                 f = os.path.join(txtdir, f) 
         tot = 0
         with open(fileout,'w') as outf : 
             for f in files : 
                 print f
                 f = os.path.join(txtdir, f) 
+                print f
                 with codecs.open(f, 'rU', encodage_in) as infile : 
                     content = infile.read() 
                 ucis = parsetxtpaste(content)
                 with codecs.open(f, 'rU', encodage_in) as infile : 
                     content = infile.read() 
                 ucis = parsetxtpaste(content)
index 4f79e4b..2b101dc 100644 (file)
@@ -2,7 +2,7 @@
 # -*- coding: utf-8 -*-
 #Author: Pierre Ratinaud
 #Copyright (c) 2008-2009 Pierre Ratinaud
 # -*- coding: utf-8 -*-
 #Author: Pierre Ratinaud
 #Copyright (c) 2008-2009 Pierre Ratinaud
-#Lisense: GNU/GPL
+#License: GNU/GPL
 
 from chemins import ConstructPathOut, ChdTxtPathOut, ConstructAfcUciPath, ffr, PathOut
 from functions import sortedby, CreateIraFile, print_liste, exec_rcode, check_Rresult
 
 from chemins import ConstructPathOut, ChdTxtPathOut, ConstructAfcUciPath, ffr, PathOut
 from functions import sortedby, CreateIraFile, print_liste, exec_rcode, check_Rresult
@@ -17,57 +17,62 @@ import tempfile
 import time
 
 
 import time
 
 
-class AnalyseQuest():
-    def __init__(self, parent):
-        dlg = PrefQuestAlc(parent)
-        dlg.CenterOnParent()
-        self.val = dlg.ShowModal()
-        parametres = parent.tableau.parametre
-        if self.val == wx.ID_OK :
-            parametres['nbcl_p1'] = dlg.spin_nbcl.GetValue()
-            parametres['mincl'] = dlg.spin_mincl.GetValue()
-            if dlg.m_radioBox1.GetSelection() == 1 :
-                parametres['listact'] = dlg.nactives
-                parametres['listsup'] = dlg.varsup
+class AnalyseQuest(AnalyseMatrix):
+    def doparametres(self, dlg = None):
+        if dlg is not None :
+            dial = PrefQuestAlc(self.parent, self.tableau)
+            dial.CenterOnParent()
+            self.val = dial.ShowModal()
+            #parametres = self.tableau.parametre
+            if self.val == wx.ID_OK :
+                self.parametres['nbcl_p1'] = dial.spin_nbcl.GetValue()
+                self.parametres['mincl'] = dial.spin_mincl.GetValue()
+                if dial.m_radioBox1.GetSelection() == 1 :
+                    self.parametres['listact'] = dial.nactives
+                    self.parametres['listsup'] = dial.varsup
+                else :
+                    self.parametres['formatted'] = 1
             else :
             else :
-                parametres['formatted'] = 1
-            DoQuestAlceste(parent, parametres)
+                self.parametres = None
+            dial.Destroy()
+           # DoQuestAlceste(parent, parametres)
 
 
-class DoQuestAlceste(AnalyseMatrix):
-    def __init__(self, parent, parametres):
-        parametres['pathout'] = ConstructPathOut(parent.tableau.parametre['filename'], 'gnepaMatrix')
-        self.parametres = parametres
-        self.parametres['type'] = 'gnepamatrix'
+#class DoQuestAlceste(AnalyseMatrix):
+    def doanalyse(self):
+        #parametres['pathout'] = ConstructPathOut(parent.tableau.parametre['filename'], 'ReinertMatrix')
+        #self.parametres = parametres
+        #self.parametres['type'] = 'reinertmatrix'
         self.DictForme = {}
         self.DictFormeSup = {}
         self.Min = 10
         self.Linecontent = []
         self.DictForme = {}
         self.DictFormeSup = {}
         self.Min = 10
         self.Linecontent = []
-        self.parent = parent
-        self.RPath = self.parent.PathPath.get('PATHS', 'rpath')
+        #self.parent = parent
+        #self.RPath = self.parent.PathPath.get('PATHS', 'rpath')
         #self.dictpathout = PathOut(dirout = self.pathout)
         #self.dictpathout = self.pathout
         #self.dictpathout.basefiles(ChdTxtPathOut)
         #self.pathout = self.dictpathout
         self.clnb = ''
         #self.dictpathout = PathOut(dirout = self.pathout)
         #self.dictpathout = self.pathout
         #self.dictpathout.basefiles(ChdTxtPathOut)
         #self.pathout = self.dictpathout
         self.clnb = ''
-        self.ListAct = parametres.get('listact', False)
+        self.ListAct = self.parametres.get('listact', False)
         self.ucecla = ''
         self.ucecla = ''
-        dlg = wx.ProgressDialog("Traitements",
-                               "Veuillez patienter...",
-                               maximum=5,
-                               parent=self.parent,
-                               style=wx.PD_APP_MODAL | wx.PD_AUTO_HIDE | wx.PD_ELAPSED_TIME
-                                )
+        #dlg = wx.ProgressDialog("Traitements",
+        #                       "Veuillez patienter...",
+        #                       maximum=5,
+        #                       parent=self.parent,
+        #                       style=wx.PD_APP_MODAL | wx.PD_AUTO_HIDE | wx.PD_ELAPSED_TIME
+        #                        )
 
 
-        AnalyseMatrix.__init__(self, parent, parent.tableau, self.parametres, dlg = dlg)
+        #AnalyseMatrix.__init__(self, parent, parent.tableau, self.parametres, dlg = dlg)
  
 
 
 #-----------------------------------------------------------
  
 
 
 #-----------------------------------------------------------
-    def doanalyse(self) :
+#    def doanalyse(self) :
 #-------------------------------------------------------------------               
 #-------------------------------------------------------------------               
-        self.dictpathout = self.pathout
-        self.dictpathout.basefiles(ChdTxtPathOut)
-        self.parent.tableau.dictpathout = self.dictpathout
+        #self.dictpathout = self.pathout
+        self.pathout.basefiles(ChdTxtPathOut)
+        self.tableau.pathout.basefiles(ChdTxtPathOut)
+#        self.parent.tableau.dictpathout = self.dictpathout
 
         self.dlg.Center()
         count = 1
 
         self.dlg.Center()
         count = 1
@@ -76,22 +81,23 @@ class DoQuestAlceste(AnalyseMatrix):
         count += 1
         self.dlg.Update(count, u"passage en O/1")
         if 'formatted' in self.parametres:
         count += 1
         self.dlg.Update(count, u"passage en O/1")
         if 'formatted' in self.parametres:
-            self.parent.tableau.make_01_alc_format(self.dictpathout['mat01'])
+            self.tableau.make_01_alc_format(self.pathout['mat01.csv'])
         else:
         else:
-            self.parent.tableau.make_01_from_selection(self.parametres['listact'], self.parametres['listsup'])
-        file = open(self.dictpathout['listeuce1'], 'w')
+            print self.parametres['listsup']
+            self.tableau.make_01_from_selection(self.parametres['listact'], self.parametres['listsup'])
+        file = open(self.pathout['listeuce1'], 'w')
         file.write('num uce;num uc\n')
         file.write('num uce;num uc\n')
-        for i in range(0, len(self.parent.tableau.linecontent)):
+        for i in range(0, len(self.tableau.linecontent)):
             file.write('%i;%i\n' % (i, i))
         file.close()
             file.write('%i;%i\n' % (i, i))
         file.close()
-        self.nbind = len(self.parent.tableau.linecontent)
+        self.nbind = len(self.tableau.linecontent)
 #------------------------------------------------------------
 #------------------------------------------------------------
-        RchdQuest(self.dictpathout, self.parent.RscriptsPath, self.parametres['nbcl_p1'], self.parametres['mincl'])
+        RchdQuest(self.pathout, self.parent.RscriptsPath, self.parametres['nbcl_p1'], self.parametres['mincl'])
 #------------------------------------------------------------
         count += 1
         self.dlg.Update(count, u"Analyse (patientez...)")
         
 #------------------------------------------------------------
         count += 1
         self.dlg.Update(count, u"Analyse (patientez...)")
         
-        pid = exec_rcode(self.RPath, self.dictpathout['Rchdquest'], wait = False)
+        pid = exec_rcode(self.parent.RPath, self.pathout['Rchdquest'], wait = False)
         while pid.poll() == None :
             self.dlg.Pulse(u"Analyse (patientez...)")
             time.sleep(0.2)
         while pid.poll() == None :
             self.dlg.Pulse(u"Analyse (patientez...)")
             time.sleep(0.2)
@@ -99,24 +105,24 @@ class DoQuestAlceste(AnalyseMatrix):
 #------------------------------------------------------------
         count += 1
         self.dlg.Update(count, u"Ecriture des résultats")
 #------------------------------------------------------------
         count += 1
         self.dlg.Update(count, u"Ecriture des résultats")
-        self.parent.tableau.buildprofil()
-        self.clnb = self.parent.tableau.clnb
+        self.tableau.buildprofil()
+        self.clnb = self.tableau.clnb
         self.parametres['clnb'] = self.clnb
         self.parametres['clnb'] = self.clnb
-        self.ucecla = self.parent.tableau.ucecla
+        self.ucecla = self.tableau.ucecla
         self.BuildProfile()
         temps = time.time() - self.t1
         PrintRapport(self, self, {}, istxt = False)
         self.BuildProfile()
         temps = time.time() - self.t1
         PrintRapport(self, self, {}, istxt = False)
-        self.parent.tableau.save_tableau(self.dictpathout['db'])
+        self.tableau.save_tableau(self.pathout['db'])
         #CreateIraFile(self.dictpathout, self.clnb, corpname = os.path.basename(self.parent.filename), section = 'questionnaire')
         #CreateIraFile(self.dictpathout, self.clnb, corpname = os.path.basename(self.parent.filename), section = 'questionnaire')
-        afc_graph_list = [[os.path.basename(self.dictpathout['AFC2DL_OUT']), u'Variables actives - coordonnées - facteurs 1 / 2'],
-                         [os.path.basename(self.dictpathout['AFC2DSL_OUT']), u'variables illustratives - coordonnées - facteurs 1 / 2'],
-                         [os.path.basename(self.dictpathout['AFC2DCL_OUT']), u'Classes - Coordonnées - facteur 1 / 2'],]
-        chd_graph_list = [[os.path.basename(self.dictpathout['dendro1']), u'dendrogramme à partir de chd1']]
-        chd_graph_list.append([os.path.basename(self.dictpathout['arbre1']), u'chd1'])
-        print_liste(self.dictpathout['liste_graph_afc'], afc_graph_list)
-        print_liste(self.dictpathout['liste_graph_chd'], chd_graph_list)
+        afc_graph_list = [[os.path.basename(self.pathout['AFC2DL_OUT']), u'Variables actives - coordonnées - facteurs 1 / 2'],
+                         [os.path.basename(self.pathout['AFC2DSL_OUT']), u'variables illustratives - coordonnées - facteurs 1 / 2'],
+                         [os.path.basename(self.pathout['AFC2DCL_OUT']), u'Classes - Coordonnées - facteur 1 / 2'],]
+        chd_graph_list = [[os.path.basename(self.pathout['dendro1']), u'dendrogramme à partir de chd1']]
+        chd_graph_list.append([os.path.basename(self.pathout['arbre1']), u'chd1'])
+        print_liste(self.pathout['liste_graph_afc'], afc_graph_list)
+        print_liste(self.pathout['liste_graph_chd'], chd_graph_list)
 
 
-        self.tableau = self.parent.tableau
+        #self.tableau = self.parent.tableau
         #OpenCHDS(self.parent, self, self.dictpathout['ira'], False)
 #------------------------------------------------------------
         print 'fini', time.time() - self.t1
         #OpenCHDS(self.parent, self, self.dictpathout['ira'], False)
 #------------------------------------------------------------
         print 'fini', time.time() - self.t1
@@ -131,13 +137,13 @@ class DoQuestAlceste(AnalyseMatrix):
         """ % self.parent.RscriptsPath['chdfunct']
         txt += """
         load("%s")
         """ % self.parent.RscriptsPath['chdfunct']
         txt += """
         load("%s")
-        """ % self.dictpathout['RData']
+        """ % self.pathout['RData']
         txt += """
         dataact<-read.csv2("%s", header = FALSE, sep = ';',quote = '\"', row.names = 1, na.strings = 'NA')
         txt += """
         dataact<-read.csv2("%s", header = FALSE, sep = ';',quote = '\"', row.names = 1, na.strings = 'NA')
-        """ % self.dictpathout['Contout']
+        """ % self.pathout['Contout']
         txt += """
         dataet<-read.csv2("%s", header = FALSE, sep = ';',quote = '\"', row.names = 1, na.strings = 'NA')
         txt += """
         dataet<-read.csv2("%s", header = FALSE, sep = ';',quote = '\"', row.names = 1, na.strings = 'NA')
-        """ % self.dictpathout['ContEtOut']
+        """ % self.pathout['ContEtOut']
         txt += """
         clnb<-%i
         """ % self.clnb
         txt += """
         clnb<-%i
         """ % self.clnb
@@ -145,7 +151,7 @@ class DoQuestAlceste(AnalyseMatrix):
         tablesqrpact<-BuildProf(as.matrix(dataact),n1,clnb)
         tablesqrpet<-BuildProf(as.matrix(dataet),n1,clnb)
         PrintProfile(n1,tablesqrpact[4],tablesqrpet[4],tablesqrpact[5],tablesqrpet[5],%i,"%s","%s")
         tablesqrpact<-BuildProf(as.matrix(dataact),n1,clnb)
         tablesqrpet<-BuildProf(as.matrix(dataet),n1,clnb)
         PrintProfile(n1,tablesqrpact[4],tablesqrpet[4],tablesqrpact[5],tablesqrpet[5],%i,"%s","%s")
-        """ % (self.clnb, self.dictpathout['PROFILE_OUT'], self.dictpathout['ANTIPRO_OUT'])
+        """ % (self.clnb, self.pathout['PROFILE_OUT'], self.pathout['ANTIPRO_OUT'])
         txt += """
         colnames(tablesqrpact[[2]])<-paste('classe',1:clnb,sep=' ')
         colnames(tablesqrpact[[1]])<-paste('classe',1:clnb,sep=' ')
         txt += """
         colnames(tablesqrpact[[2]])<-paste('classe',1:clnb,sep=' ')
         colnames(tablesqrpact[[1]])<-paste('classe',1:clnb,sep=' ')
@@ -155,13 +161,13 @@ class DoQuestAlceste(AnalyseMatrix):
         ptabletot<-rbind(as.data.frame(tablesqrpact[1]),as.data.frame(tablesqrpet[1]))
         gbcluster<-n1
         write.csv2(chistabletot,file="%s")
         ptabletot<-rbind(as.data.frame(tablesqrpact[1]),as.data.frame(tablesqrpet[1]))
         gbcluster<-n1
         write.csv2(chistabletot,file="%s")
-        """ % self.dictpathout['chisqtable']
+        """ % self.pathout['chisqtable']
         txt += """
         write.csv2(ptabletot,file="%s")
         txt += """
         write.csv2(ptabletot,file="%s")
-        """ % self.dictpathout['ptable']
+        """ % self.pathout['ptable']
         txt += """
         write.csv2(gbcluster,file="%s")
         txt += """
         write.csv2(gbcluster,file="%s")
-        """ % self.dictpathout['SbyClasseOut']
+        """ % self.pathout['SbyClasseOut']
         if self.clnb > 2 :
             txt += """
             library(ca)
         if self.clnb > 2 :
             txt += """
             library(ca)
@@ -182,7 +188,7 @@ class DoQuestAlceste(AnalyseMatrix):
             write.csv2(afc_table$facteur, file = "%s")
             write.csv2(afc_table$colonne, file = "%s")
             write.csv2(afc_table$ligne, file = "%s")
             write.csv2(afc_table$facteur, file = "%s")
             write.csv2(afc_table$colonne, file = "%s")
             write.csv2(afc_table$ligne, file = "%s")
-            """ % (self.dictpathout['afc_facteur'], self.dictpathout['afc_col'], self.dictpathout['afc_row'])
+            """ % (self.pathout['afc_facteur'], self.pathout['afc_col'], self.pathout['afc_row'])
             
             txt += """
             xlab <- paste('facteur 1 - ', round(afc$facteur[1,2],2), sep = '')
             
             txt += """
             xlab <- paste('facteur 1 - ', round(afc$facteur[1,2],2), sep = '')
@@ -196,16 +202,16 @@ class DoQuestAlceste(AnalyseMatrix):
             """ % "0.9"
             txt += """
             xyminmax <- PlotAfc2dCoul(afc, as.data.frame(chistabletot), "%s", what='coord', deb=1, fin=(debet-1), xlab = xlab, ylab = ylab)
             """ % "0.9"
             txt += """
             xyminmax <- PlotAfc2dCoul(afc, as.data.frame(chistabletot), "%s", what='coord', deb=1, fin=(debet-1), xlab = xlab, ylab = ylab)
-            """ % (self.dictpathout['AFC2DL_OUT'])
+            """ % (self.pathout['AFC2DL_OUT'])
             txt += """
             PlotAfc2dCoul(afc, as.data.frame(chistabletot), "%s", what='coord', deb=debet, fin=fin, xlab = xlab, ylab = ylab, xmin = xyminmax$xminmax[1], xmax = xyminmax$xminmax[2], ymin = xyminmax$yminmax[1], ymax = xyminmax$yminmax[2])
             txt += """
             PlotAfc2dCoul(afc, as.data.frame(chistabletot), "%s", what='coord', deb=debet, fin=fin, xlab = xlab, ylab = ylab, xmin = xyminmax$xminmax[1], xmax = xyminmax$xminmax[2], ymin = xyminmax$yminmax[1], ymax = xyminmax$yminmax[2])
-            """ % (self.dictpathout['AFC2DSL_OUT'])
+            """ % (self.pathout['AFC2DSL_OUT'])
             txt += """
             PlotAfc2dCoul(afc, as.data.frame(chistabletot), "%s", col = TRUE, what='coord', xlab = xlab, ylab = ylab, xmin = xyminmax$xminmax[1], xmax = xyminmax$xminmax[2], ymin = xyminmax$yminmax[1], ymax = xyminmax$yminmax[2])
             txt += """
             PlotAfc2dCoul(afc, as.data.frame(chistabletot), "%s", col = TRUE, what='coord', xlab = xlab, ylab = ylab, xmin = xyminmax$xminmax[1], xmax = xyminmax$xminmax[2], ymin = xyminmax$yminmax[1], ymax = xyminmax$yminmax[2])
-            """ % (self.dictpathout['AFC2DCL_OUT'])
+            """ % (self.pathout['AFC2DCL_OUT'])
         txt += """
         save.image(file="%s")
         txt += """
         save.image(file="%s")
-        """ % self.dictpathout['RData']
+        """ % self.pathout['RData']
         tmpfile = tempfile.mktemp(dir=self.parent.TEMPDIR)
         tmpscript = open(tmpfile, 'w')
         tmpscript.write(txt)
         tmpfile = tempfile.mktemp(dir=self.parent.TEMPDIR)
         tmpscript = open(tmpfile, 'w')
         tmpscript.write(txt)
index 18864a1..39c50ac 100644 (file)
@@ -1,17 +1,13 @@
 # -*- coding: utf-8 -*-
 #Author: Pierre Ratinaud
 #Copyright (c) 2008 Pierre Ratinaud
 # -*- coding: utf-8 -*-
 #Author: Pierre Ratinaud
 #Copyright (c) 2008 Pierre Ratinaud
-#Lisense: GNU/GPL
+#License: GNU/GPL
 
 import wx
 import os
 
 import wx
 import os
-#from rchdng import RchdFunct
 from chemins import ffr, ConstructPathOut,ChdTxtPathOut
 from chemins import ffr, ConstructPathOut,ChdTxtPathOut
-#from layout import PrintRapport
-#from openanalyse import OpenAnalyse
-from ConfigParser import ConfigParser
 from functions import CreateIraFile, print_liste, exec_rcode, check_Rresult
 from functions import CreateIraFile, print_liste, exec_rcode, check_Rresult
-from dialog import CHDDialog, PrefQuestAlc, ClusterNbDialog
+from dialog import PrefQuestAlc, ClusterNbDialog
 import tempfile
 import time
 
 import tempfile
 import time
 
@@ -51,9 +47,9 @@ def RchdFunct(self,parent, rep_out, CLASSIF, encode, RscriptsPath):
         time.sleep(0.2)
     check_Rresult(parent, pid)
     
         time.sleep(0.2)
     check_Rresult(parent, pid)
     
-    file=open(fileout,'rU')
-    lcl=file.readlines()
-    file.close()
+    f=open(fileout,'rU')
+    lcl=f.readlines()
+    f.close()
     ListClasseOk=[line.replace('\n','').replace('"','') for line in lcl]
     ListClasseOk.pop(0)
 
     ListClasseOk=[line.replace('\n','').replace('"','') for line in lcl]
     ListClasseOk.pop(0)
 
@@ -171,9 +167,9 @@ def RchdFunct(self,parent, rep_out, CLASSIF, encode, RscriptsPath):
     txt += """
     PlotAfc2dCoul(afc, as.data.frame(chistabletot), "%s", col = TRUE, what='crl')
     """ % (rep_out['AFC2DCoulCl'])
     txt += """
     PlotAfc2dCoul(afc, as.data.frame(chistabletot), "%s", col = TRUE, what='crl')
     """ % (rep_out['AFC2DCoulCl'])
-    file=open(Rtmp,'w')
-    file.write(txt)
-    file.close()
+    f=open(Rtmp,'w')
+    f.write(txt)
+    f.close()
     pid = exec_rcode(parent.RPath, Rtmp, wait = False)
     while pid.poll() == None :
         time.sleep(0.2)
     pid = exec_rcode(parent.RPath, Rtmp, wait = False)
     while pid.poll() == None :
         time.sleep(0.2)
index 6a8cf55..422b447 100755 (executable)
@@ -2,7 +2,7 @@
 # -*- coding: utf-8 -*-
 #Author: Pierre Ratinaud
 #Copyright (c) 2010 Pierre Ratinaud
 # -*- coding: utf-8 -*-
 #Author: Pierre Ratinaud
 #Copyright (c) 2010 Pierre Ratinaud
-#Lisense: GNU/GPL
+#License: GNU/GPL
 
 import HTML
 import os
 
 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 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':
                     
 def make_res(line) :
     if float(line[5]) <= 0.05 and line[6] != 'warning':
@@ -45,11 +46,21 @@ 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)] 
 
 
     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():
 
 
 class MakeChi2():
-    def __init__(self, parent, select1, select2, chioption):
+    def __init__(self, parent, select1, select2, chioption, tableau):
+        self.tableau = tableau
         self.OutFrame=tempfile.mktemp(dir=parent.TEMPDIR)
         print self.OutFrame
         self.parent=parent
         self.OutFrame=tempfile.mktemp(dir=parent.TEMPDIR)
         print self.OutFrame
         self.parent=parent
@@ -59,7 +70,7 @@ class MakeChi2():
         self.TextCroise=[]
         for i in select1 :
             for j in select2 :
         self.TextCroise=[]
         for i in select1 :
             for j in select2 :
-                self.TextCroise.append(parent.tableau.colnames[i] + ' / ' + parent.tableau.colnames[j])
+                self.TextCroise.append(self.tableau.colnames[i] + ' / ' + self.tableau.colnames[j])
         rchioption = {}
         for val in chioption :
             if chioption[val]:
         rchioption = {}
         for val in chioption :
             if chioption[val]:
@@ -88,11 +99,11 @@ class MakeChi2():
         bw <- %s
         """ % (rchioption['valobs'], rchioption['valtheo'], rchioption['contrib'], rchioption['resi'], rchioption['pourcent'], rchioption['pourcentl'], rchioption['pourcentc'], rchioption['graph'], rchioption['bw'])
         txt+="""
         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
         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)
+        """%(ffr(self.tableau.parametres['csvfile']), self.tableau.parametres['syscoding'])
         if len(select1)==1:
             strsel1=str(select1).replace(',','')
         else:
         if len(select1)==1:
             strsel1=str(select1).replace(',','')
         else:
@@ -148,9 +159,7 @@ class MakeChi2():
                 chi$prl <- round((chi$observed/sr)*100,2)
                 chi$prc <- t(round((t(chi$observed)/sc)*100,2))
             }
                 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)
             fileout<-paste(fileout,'.png',sep='')
             count<-count+1
             fileout<-file.path("%s",fileout)
@@ -258,7 +267,7 @@ class MakeChi2():
         li<-matrix('fin_analyse',1,maxcol)
         frameout<-rbind(frameout,li)
         write.csv2(frameout,file="%s")
         li<-matrix('fin_analyse',1,maxcol)
         frameout<-rbind(frameout,li)
         write.csv2(frameout,file="%s")
-        """%(parent.FreqNum,ffr(parent.TEMPDIR),ffr(self.OutFrame))
+        """ % (ffr(parent.TEMPDIR),ffr(self.OutFrame))
         tmpfile=tempfile.mktemp(dir=self.TEMPDIR)
         print tmpfile
         tmpscript=open(tmpfile,'w')
         tmpfile=tempfile.mktemp(dir=self.TEMPDIR)
         print tmpfile
         tmpscript=open(tmpfile,'w')
@@ -350,77 +359,381 @@ class MakeChi2():
         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>'
 
         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
 
         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),
+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
                      )
                      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()
+        dial.CenterOnParent()
+        val = dial.ShowModal()
+        if val==wx.ID_OK : 
+            dlg.Center()
             self.count = 1
             self.count = 1
-            keepGoing = self.dlg.Update(self.count)
+            keepGoing = 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.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
             
             
-            self.count += 1
-            keepGoing = self.dlg.Update(self.count,u"Analyse dans R...")
-            analyse=MakeChi2(parent,ColSel1,ColSel2, chioption)
+    def doanalyse(self):
+
+
+            #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.count += 1
-            keepGoing = self.dlg.Update(self.count,u"Ecriture des résultats")
+        self.count += 1
+        keepGoing = self.dlg.Update(self.count,u"Analyse dans R...")
+        #analyse=MakeChi2(self.parent, self.colsel1, self.colsel2, self.chioption, self.tableau)
+        #self.tableau = tableau
+        self.OutFrame=tempfile.mktemp(dir=self.parent.TEMPDIR)
+        print self.OutFrame
+        #self.parent=parent
+        self.encode=self.parent.encode
+        self.TEMPDIR=self.parent.TEMPDIR
+        self.RPath=self.parent.PathPath.get('PATHS','rpath')
+        self.TextCroise=[]
+        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 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'
+        txt += """
+        source("%s")
+        """ % ffr(self.parent.RscriptsPath['Rgraph'])
+        txt += """
+        doobs <- %s
+        doexp <- %s
+        docontrib <- %s
+        doresi <- %s
+        dopr <- %s
+        doprl <- %s
+        doprc <- %s
+        dograph <- %s
+        bw <- %s
+        """ % (rchioption['valobs'], rchioption['valtheo'], rchioption['contrib'], rchioption['resi'], rchioption['pourcent'], rchioption['pourcentl'], rchioption['pourcentc'], rchioption['graph'], rchioption['bw'])
+        txt+="""
+        datadm <- read.csv2("%s", encoding="%s", header = TRUE, row.names = 1, sep='\\t', quote = '"', na.string = '')
+        listres<-list()
+        listcol<-list()
+        cont<-1
+        """%(ffr(self.tableau.parametres['csvfile']), self.tableau.parametres['syscoding'])
+        if len(self.colsel1)==1:
+            strsel1=str(self.colsel1).replace(',','')
+        else:
+            strsel1=str(self.colsel1)
+        if len(self.colsel2)==1:
+            strsel2=str(self.colsel2).replace(',','')
+        else:
+            strsel2=str(self.colsel2)
+        txt+="""
+        for (i in c%s) {""" % strsel1
+        txt+="""
+            for (j in c%s) {""" % strsel2
+        txt+="""
+                tab<-table(datadm[,i+1],datadm[,j+1])
+                if (min(dim(tab)) != 1) {
+                    chi<-chisq.test(tab)
+                    CS<-colSums(tab)
+                    RS<-rowSums(tab)
+                    GT<-sum(tab)
+                    chi$contrib<-(tab-chi$expected)/sqrt(chi$expected * ((1 - RS/GT) %%*%% t(1 - CS/GT)))
+                    listres[[cont]]<-chi
+                    listcol[[cont]]<-ncol(tab)
+                    cont<-cont+1
+                } else {
+                    chi <- list(observed = tab, residuals = tab, contrib = tab, statistic = 0, p.value = 1, expected = tab, message = 'pas de calcul')
+                    listres[[cont]] <- chi
+                    listcol[[cont]]<-ncol(tab)
+                    cont <- cont + 1
+                }
+            }
+        }
+        maxcol<-max(unlist(listcol))+1
+        if (maxcol<7) {maxcol<-7}
+        frameout<-matrix('*',1,maxcol)
+        count<-0
+        for (chi in listres) {
+            if (min(chi$expected)<5) {
+                att<-"warning"
+            } else {
+                att<-""
+            }
+            if ('message' %%in%% attributes(chi)$names) {
+                att <- "Ce chi2 n\'a pas été calculé"
+                nom_colresi<-colnames(chi$observed)
+                chi$prl <- chi$expected
+                chi$prc <- chi$expected
+                st <- sum(chi$observed)
+            } else {
+                nom_colresi<-colnames(chi$observed)
+                st <- sum(chi$observed)
+                sc <- colSums(chi$observed)
+                sr <- rowSums(chi$observed)
+                chi$prl <- round((chi$observed/sr)*100,2)
+                chi$prc <- t(round((t(chi$observed)/sc)*100,2))
+            }
+            fileout<-paste('histo_',count,sep='')
+            fileout<-paste(fileout,'.png',sep='')
+            count<-count+1
+            fileout<-file.path("%s",fileout)
+            if (max(nchar(colnames(chi$observed)))>15) {
+                leg <- 1:length(colnames(chi$observed))
+            } else {
+                leg <- colnames(chi$observed)
+            }
+            if (dograph) {
+                width<-ncol(chi$observed)*100
+                if (width < 350) {width <- 350}
+                open_file_graph(fileout,width = width, height = 300)
+                par(mar=c(0,0,0,0))
+                layout(matrix(c(1,2),1,2, byrow=TRUE),widths=c(3,1))
+                par(mar=c(2,2,1,0))
+                par(cex=0.8)
+                if (!bw) colors <- rainbow(length(rownames(chi$observed)))
+                else colors <- gray.colors(length(rownames(chi$observed)))
+                barplot(chi$prl,names.arg = leg, beside=TRUE,border=NA, col=colors)
+                par(mar=c(0,0,0,0))
+                par(cex=0.8)
+                plot(0, axes = FALSE, pch = '')
+                legend(x = 'center' , rownames(chi$observed), fill = colors)
+                dev.off()
+            }
+            chi$prl <- cbind(chi$prl, total = rowSums(chi$prl))
+            chi$prc <- rbind(chi$prc, total = colSums(chi$prc))
+            chi$observed<-rbind(chi$observed,total=colSums(chi$observed))
+            chi$observed<-cbind(chi$observed,total=rowSums(chi$observed))
+            chi$pr <- round((chi$observed/st)*100,2)
+            chi$expected<-rbind(chi$expected,total=colSums(chi$expected))
+            chi$expected<-cbind(chi$expected,total=rowSums(chi$expected))
+            chi$expected<-round(chi$expected,digits=2)
+            chi$residuals<-round(chi$residuals,digits=2)
+            chi$contrib<-round(chi$contrib, digits=2)
+            nom_col<-colnames(chi$observed)
+           
+            if (ncol(chi$observed)<maxcol) {
+                for (i in 1:(maxcol-ncol(chi$observed))) {
+                    chi$observed<-cbind(chi$observed,'**')
+                    chi$pr<-cbind(chi$pr,'**')
+                    chi$prl<-cbind(chi$prl,'**')
+                    chi$prc<-cbind(chi$prc,'**')
+                    chi$expected<-cbind(chi$expected,'**')
+                    chi$residuals<-cbind(chi$residuals,'**')
+                    chi$contrib<-cbind(chi$contrib,'**')
+                    nom_col<-append(nom_col,'**')
+                    nom_colresi<-append(nom_colresi,'**')
+                }
+                chi$residuals<-cbind(chi$residuals,'**')
+                chi$contrib<-cbind(chi$contrib,'**')
+                nom_colresi<-append(nom_colresi,'**')
+                chi$prc<-cbind(chi$prc,'**')
+            } else if (ncol(chi$observed)==maxcol) {
+                chi$residuals<-cbind(chi$residuals,'**')
+                chi$contrib<-cbind(chi$contrib,'**')
+                nom_colresi<-append(nom_colresi,'**')
+                chi$prc<-cbind(chi$prc,'**')
+            }
+            if (doobs) {
+                li<-matrix('*obs*',1,maxcol)
+                frameout<-rbind(frameout,li)
+                frameout<-rbind(frameout,nom_col)
+                frameout<-rbind(frameout,chi$observed)
+            }
+            if (doexp) {
+                li<-matrix('*exp*',1,maxcol)
+                frameout<-rbind(frameout,li)
+                frameout<-rbind(frameout,nom_col)
+                frameout<-rbind(frameout,chi$expected)
+            }
+            if (doresi) {
+                li<-matrix('*resi*',1,maxcol)
+                frameout<-rbind(frameout,li)
+                frameout<-rbind(frameout,nom_colresi)
+                frameout<-rbind(frameout,chi$residuals)
+            }
+            if (docontrib) {
+                li<-matrix('*contrib*',1,maxcol)
+                frameout<-rbind(frameout,li)
+                frameout<-rbind(frameout,nom_colresi)
+                frameout<-rbind(frameout,chi$contrib)
+            }
+            if (dopr) {
+                li<-matrix('*pr*', 1, maxcol)
+                frameout<-rbind(frameout,li)
+                frameout<-rbind(frameout,nom_col)
+                frameout<-rbind(frameout,chi$pr)
+            }
+            if (doprl) {
+                li<-matrix('*prl*', 1, maxcol)
+                frameout<-rbind(frameout,li)
+                frameout<-rbind(frameout,nom_col)
+                frameout<-rbind(frameout,chi$prl)
+            }
+            if (doprc) {
+                li<-matrix('*prc*', 1, maxcol)
+                frameout<-rbind(frameout,li)
+                frameout<-rbind(frameout,nom_colresi)
+                frameout<-rbind(frameout,chi$prc)
+            }
+            res<-c('****','chi',chi$statistic,'p',chi$p.value,att,fileout)
+            frameout<-rbind(frameout,res)
+        }
+        li<-matrix('fin_analyse',1,maxcol)
+        frameout<-rbind(frameout,li)
+        write.csv2(frameout,file="%s")
+        """ % (ffr(self.parametres['pathout']),ffr(self.OutFrame))
+        tmpfile=tempfile.mktemp(dir=self.TEMPDIR)
+        print tmpfile
+        tmpscript=open(tmpfile,'w')
+        tmpscript.write(txt)
+        tmpscript.close()
+        pid = exec_rcode(self.RPath, tmpfile, wait = False)
+        while pid.poll() == None :
+            sleep(0.2)
+        check_Rresult(self.parent, pid)            
+        self.count += 1
+        keepGoing = self.dlg.Update(self.count,u"Ecriture des résultats")
          
          
-            listfileout = analyse.dolayout(chioption)
+        listfileout = self.dolayout(self.chioption)
             #listfileout=dlg.ShowChi2(ColSel1,ColSel2)
             #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()
+            #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]
+        file=open(self.OutFrame,'rU')
+        content=file.readlines()
+        file.close()
+        lcont = [line.replace('"','').replace('\n','').split(';') for line in content]
+    
+        lcont.pop(0)
+        lcont.pop(0)
+        
+        allcoord = []
+        names = []
+
+        res = [chi for chi in lcont if chi[0]=='res']
+        res = [make_res(line) for line in res]
+        coord_res = [i for i,chi in enumerate(lcont) if chi[0]=='res']
+        if option['valobs']:
+            allcoord.append([i for i,chi in enumerate(lcont) if chi[1]=='*obs*'])
+            names.append(u'Valeurs observées')
+        if option['valtheo'] :
+            allcoord.append([i for i,chi in enumerate(lcont) if chi[1]=='*exp*'])
+            names.append(u'Valeurs théoriques')
+        if option['resi'] :
+            allcoord.append([i for i,chi in enumerate(lcont) if chi[1]=='*resi*'])
+            names.append(u'Residuals')
+        if option['contrib'] :
+            allcoord.append([i for i,chi in enumerate(lcont) if chi[1]=='*contrib*'])
+            names.append(u'Contributions a posteriori')
+        if option['pourcent'] : 
+            allcoord.append([i for i,chi in enumerate(lcont) if chi[1]=='*pr*'])
+            names.append(u'Pourcentages')
+        if option['pourcentl'] :
+            allcoord.append([i for i,chi in enumerate(lcont) if chi[1]=='*prl*'])
+            names.append(u'Pourcentages en ligne')
+        if option['pourcentc'] :
+            allcoord.append([i for i,chi in enumerate(lcont) if chi[1]=='*prc*'])
+            names.append(u'Pourcentages en colonne')
+    
+        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)
+        
+        if option['graph'] :
+            graphs = [line[7] for line in res]
+            ListFile += graphs
+            html_graphs = make_htmlgraphs(graphs)
+            allhtml.append(html_graphs)
+
+        header=u"""
+        <html>\n
+        <meta http-equiv="content-Type" content="text/html; charset=%s" />\n
+        <body>\n
+        <h1>Test du Chi2</h1>\n
+        <br>
+        <table border=1><tr><td>
+        Légende : <br>
+        <font color=green>p &lt;= 0.05</font><br>
+        <font color=blue>p &lt;= 0.05 mais il y a des valeurs théoriques &lt; 5</font><br>
+        <font color=red>p &gt; 0.05</font>
+        </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.parametres['pathout'],'resultats-chi2.html')
+        with open(fileout, 'w') as f :
+            f.write(txt)
+        ListFile.append(fileout)         
+        return ListFile
\ No newline at end of file
index 4eb42ee..563e5b4 100644 (file)
 # -*- coding: utf-8 -*-
 #Author: Pierre Ratinaud
 #Copyright (c) 2008 Pierre Ratinaud
 # -*- coding: utf-8 -*-
 #Author: Pierre Ratinaud
 #Copyright (c) 2008 Pierre Ratinaud
-#Lisense: GNU/GPL
+#License: GNU/GPL
 
 #from __future__ import division
 import os
 
 #from __future__ import division
 import os
-import sys
 import wx
 import wx
-import wx.html
 from chemins import ffr, FFF
 import tempfile
 from time import sleep
 from chemins import ffr, FFF
 import tempfile
 from time import sleep
+from analysematrix import AnalyseMatrix
 from functions import exec_rcode, check_Rresult
 from dialog import FreqDialog
 from functions import exec_rcode, check_Rresult
 from dialog import FreqDialog
+from PrintRScript import PrintRScript
 
 
-        
-class Frequences():
-    def __init__(self, parent):
-        #self.Filename = parent.filename
-        self.fileforR = parent.tableau.parametre['csvfile']
-        self.TEMPDIR = parent.TEMPDIR
-        self.num = parent.FreqNum
-        self.DICTFILE = {}
-        self.RPath = parent.PathPath.get('PATHS', 'rpath')
-        self.parent=parent
-        self.tableau = parent.tableau
-        dlg = FreqDialog(parent, -1, self.tableau.get_colnames(), u"Fréquences", size=(350, 200))
-        dlg.CenterOnParent()
-        val = dlg.ShowModal()
-        if val == wx.ID_OK :
-            ColSel = dlg.list_box_1.GetSelections()
-            self.header=dlg.header
-            dlg.Destroy()
-            listfileout = self.ShowFreq(ColSel)
-            parent.FreqNum += 1
-            parent.DictTab[u"Fréquences_%s*" % parent.FreqNum] = listfileout
-            parent.FileTabList.append(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"Fréquences_%s*" % parent.FreqNum)
-            parent.nb.SetSelection(parent.nb.GetPageCount() - 1)
-            parent.ShowAPane("Tab_content")
-            parent.DisEnSaveTabAs(True) 
+class Frequences(AnalyseMatrix) :
+    def doparametres(self, dlg=None) :
+        if dlg is None :
+            return
         else :
         else :
-            dlg.Destroy()
-
-    def ShowFreq(self, select):
-        listfile = []
-        listfile.append(False)
-        self.ListFileForR = []
-        self.ListTitre = []
-        self.OutFrame = tempfile.mktemp(dir=self.TEMPDIR)
-        if self.parent.g_id: rownames = '1'
-        else: rownames = 'NULL'
-        if self.parent.g_header : header = 'TRUE'
-        else : header = 'FALSE'
-        self.ListTitre = [self.header[i] for i in select]
-        self.ListFileForR = [ffr(os.path.join(self.TEMPDIR, 'freq%s_%s.jpeg' % (str(self.num), i))) for i in range(len(select))]
-        listfile = [os.path.join(self.TEMPDIR, 'freq%s_%s.jpeg' % (str(self.num), i)) for i in range(len(select))]
+            dial = FreqDialog(self.parent, -1, self.tableau.get_colnames(), u"Fréquences", size=(350, 200))
+            dial.CenterOnParent()
+            val = dial.ShowModal()
+            if val == wx.ID_OK :
+                self.parametres['colsel'] = dial.list_box_1.GetSelections()
+                self.parametres['header'] = dial.header
+            else :
+                self.parametres = None
+            dial.Destroy()
+                
+    def doanalyse(self):
+        self.pathout.createdir(self.parametres['pathout'])
+        header = self.tableau.get_colnames()
+        select = self.parametres['colsel']
+        self.listtitre = [header[i] for i in select]
+        b, self.outframe = tempfile.mkstemp()
+        self.fileforR = [ffr(os.path.join(self.pathout.dirout, 'freq_%i.png' % i)) for i in range(len(select))]
+        self.Rscript = PrintRScript(self)
         sel = 'c(' + ','.join([str(val + 1) for val in select]) + ')'
         sel = 'c(' + ','.join([str(val + 1) for val in select]) + ')'
-        listfiles = 'c("' + '","'.join(self.ListFileForR) + '")'
-        titles = 'c("' +  '","'.join(self.ListTitre) + '")'
+        listfiles = 'c("' + '","'.join(self.fileforR) + '")'
+        titles = 'c("' +  '","'.join(self.listtitre) + '")'
         txt = """
         txt = """
-        source("%s")
-        """ % self.parent.RscriptsPath['Rfunct']
-
+        filein <- "%s"
+        encoding <- '%s'
+        dm <- read.csv2(filein, encoding = encoding, header = TRUE, row.names = 1, sep='\\t', quote = '"', na.string = '')
+        """ %(ffr(self.tableau.parametres['csvfile']), self.tableau.parametres['syscoding'])
         txt += """
         txt += """
-        datadm <- ReadData("%s", encoding="%s", header = TRUE, sep = ";",quote = "\\%s", na.strings = "%s",rownames=1)
-        """ % (ffr(self.fileforR), self.parent.encode, self.parent.tableau.parametre['txtsep'], self.parent.nastrings)
-        txt += """
-        outframe<-data.frame(cbind('***','****'))
-        colnames(outframe)<-c('effectif','pourcentage')
+        outframe <- data.frame(cbind('***','****','****'))
+        colnames(outframe)<-c('effectif','pourcentage', 'labels')
         select <- %s
         listfiles <- %s
         titles <- %s
         compteur <- 1
         """ % (sel, listfiles, titles)
         select <- %s
         listfiles <- %s
         titles <- %s
         compteur <- 1
         """ % (sel, listfiles, titles)
+        
         txt += """
         for (i in select) {
         txt += """
         for (i in select) {
-            datasum<-as.matrix(summary(datadm[,i]))
-            if (rownames(datasum)[1]=='Min.' && rownames(datasum)[3]=='Median') {
-                dtype<-'num'
-            } else if (datasum[1] == "logical") {
-                dtype <- 'char'
-                datasum <- as.matrix(as.integer(datasum[2]))
-                rownames(datasum) <- 'NA'
-            } else {
-                dtype<-'char'
-            }
-            datasum<-as.data.frame(datasum)
-            if (dtype=='char') {
-                datasum[,2]<-round((datasum[,1]/sum(datasum[,1]))*100,digits=2)
-            } else {
-                datasum[,2]<-datasum[,1]
-            }
-            colnames(datasum)<-c('effectif','pourcentage')
+            freq <- table(dm[,i])
+            sumfreq <- sum(freq)
+            pour <- prop.table(as.matrix(freq), 2) * 100
+            sumpour <- sum(pour)
+            ntable <- cbind(as.matrix(freq), pour)
             graphout <- listfiles[compteur]  
             if (Sys.info()["sysname"]=='Darwin') {
             graphout <- listfiles[compteur]  
             if (Sys.info()["sysname"]=='Darwin') {
-                quartz(file=graphout,type='jpeg')
+                quartz(file=graphout,type='png')
                 par(cex=1)
             } else {
                 par(cex=1)
             } else {
-                jpeg(graphout,res=200)
+                png(graphout)
                 par(cex=0.3)
                 }
                 par(cex=0.3)
                 }
-            if (max(nchar(rownames(datasum))) > 15) {
-                lab.bar <- 1:nrow(datasum)
+            if (max(nchar(rownames(ntable))) > 15) {
+                lab.bar <- 1:nrow(ntable)
             } else {
             } else {
-                lab.bar <- rownames(datasum)
+                lab.bar <- rownames(ntable)
             }
             }
-            barplot(datasum[,2],border=NA,beside=TRUE,names.arg=lab.bar)
+            barplot(ntable[,2],border=NA,beside=TRUE,names.arg=lab.bar)
+            ntable <- cbind(ntable, rownames(as.matrix(freq)))
+            colnames(ntable) <- c('effectif','pourcentage', 'labels')
             title(main=titles[compteur])
             dev.off()
             title(main=titles[compteur])
             dev.off()
-            datasum<-rbind(datasum,total=colSums(datasum))
-            outframe<-rbind(outframe,c('***','****'))
-            datasum[,1]<-as.character(datasum[,1])
-            datasum[,2]<-as.character(datasum[,2])
-            outframe<-rbind(outframe,datasum)
+            ntable<-rbind(ntable,total=c(sumfreq,sumpour,''))
+            outframe<-rbind(outframe,c('***','****','****'))
+            #datasum[,1]<-as.character(datasum[,1])
+            #datasum[,2]<-as.character(datasum[,2])
+            outframe<-rbind(outframe,ntable)
             compteur <- compteur + 1
             compteur <- compteur + 1
-            }
-        outframe<-rbind(outframe,c('***','****'))
-        write.csv2(outframe,file="%s")
-        """ % ffr(self.OutFrame)
-        tmpfile = tempfile.mktemp(dir=self.TEMPDIR)
-        tmpscript = open(tmpfile, 'w')
-        tmpscript.write(txt)
-        tmpscript.close()
-        pid = exec_rcode(self.RPath, tmpfile, wait = False)
-        while pid.poll() == None :
-           sleep(0.2)
-        check_Rresult(self.parent, pid)
-        fileout = self.DoLayout()
-        listfile.append(fileout)
-        self.DICTFILE[self.num] = listfile
-        return listfile
-
-
-    def DoLayout(self):
+        }
+        outframe<-rbind(outframe,c('***','****','****'))
+        write.table(outframe, file="%s", sep="\\t")
+        """ % ffr(self.outframe)
+        self.Rscript.add(txt)
+        self.Rscript.write()
+        self.doR(self.Rscript.scriptout)
+        self.dolayout()
+        
+    def dolayout(self):
         listtab = []
         tab = []
         listtab = []
         tab = []
-        filein = open(self.OutFrame, 'rU')
-        content = filein.readlines()
-        filein.close()
+        with open(self.outframe) as f :
+            content = f.read().splitlines()
         content.pop(0)
         content.pop(0)
         texte = ''
         for ligne in content:
         content.pop(0)
         content.pop(0)
         texte = ''
         for ligne in content:
-            ligne = ligne.replace('"', '').replace('\n', '')
-            ligne = ligne.split(';')
+            ligne = ligne.replace('"', '')
+            ligne = ligne.split('\t')
             if ligne[1] == u'***' :
                 if tab != []:
                     listtab.append(tab)
             if ligne[1] == u'***' :
                 if tab != []:
                     listtab.append(tab)
@@ -162,27 +118,25 @@ class Frequences():
         <a name="deb"></a><br>
         ''' % self.parent.SysEncoding
         for i in range(0, len(listtab)):
         <a name="deb"></a><br>
         ''' % self.parent.SysEncoding
         for i in range(0, len(listtab)):
-            pretexte += '<p><a href="#%s">%s</a></p>' % (str(i), self.ListTitre[i])
+            pretexte += '<p><a href="#%s">%s</a></p>' % (str(i), self.listtitre[i])
             texte += '<hr size="5" align="center" width="50%" color="green">\n'
             texte += '<p><a href="#deb">Retour</a></p>\n'
             texte += '<hr size="5" align="center" width="50%" color="green">\n'
             texte += '<p><a href="#deb">Retour</a></p>\n'
-            texte += '<a name="%s"></a><h2>%s</h2>\n' % (str(i), self.ListTitre[i])
+            texte += '<a name="%s"></a><h2>%s</h2>\n' % (str(i), self.listtitre[i])
             texte += '<table>\n<tr><td>\n'
             texte += '<table border=1><tr><td></td><td>Effectifs</td><td>pourcentage</td></tr>'
             for line in listtab[i] :
                 texte += '<tr>'
                 texte += """
                 <td>%s</td><td align=center>%s</td><td align=center>%s %%</td>
             texte += '<table>\n<tr><td>\n'
             texte += '<table border=1><tr><td></td><td>Effectifs</td><td>pourcentage</td></tr>'
             for line in listtab[i] :
                 texte += '<tr>'
                 texte += """
                 <td>%s</td><td align=center>%s</td><td align=center>%s %%</td>
-                """ % (line[0], line[1], line[2])
+                """ % (line[3], line[1], line[2])
                 texte += '</tr>'
             texte += '</table></td>'
             texte += """
             <td><img src="%s" alt="graph"/></td></tr></table>\n
                 texte += '</tr>'
             texte += '</table></td>'
             texte += """
             <td><img src="%s" alt="graph"/></td></tr></table>\n
-            """ % os.path.basename(self.ListFileForR[i])
+            """ % os.path.basename(self.fileforR[i])
             texte += '</body>\n</html>'
             texte += '</body>\n</html>'
-        fileout = os.path.join(self.TEMPDIR, 'resultats%s-freq.html' % str(self.num))
-        FILE = open(fileout, 'w')
-        FILE.write(pretexte + texte)
-        FILE.close()
-        return fileout
-
-
+        fileout = os.path.join(self.pathout.dirout, 'resultats.html')
+        with open(fileout, 'w') as f :
+            f.write(pretexte + texte)
+        #return fileout
+        
\ No newline at end of file
index 514c8cf..6fa6abc 100644 (file)
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 #Author: Pierre Ratinaud
 #Copyright (c) 2010 Pierre Ratinaud
 # -*- coding: utf-8 -*-
 #Author: Pierre Ratinaud
 #Copyright (c) 2010 Pierre Ratinaud
-#Lisense: GNU/GPL
+#License: GNU/GPL
 
 import codecs
 import sys
 
 import codecs
 import sys
@@ -12,7 +12,9 @@ import tempfile
 import re
 import htmlentitydefs
 import shelve
 import re
 import htmlentitydefs
 import shelve
+from functions import DoConf
 from uuid import uuid4
 from uuid import uuid4
+from chemins import PathOut
 import logging
 
 log = logging.getLogger('iramuteq.tableau')
 import logging
 
 log = logging.getLogger('iramuteq.tableau')
@@ -51,18 +53,41 @@ def UpdateDico(Dico, word, line):
         Dico[word][1].append(line)
     else:
         Dico[word] = [1, [line]]
         Dico[word][1].append(line)
     else:
         Dico[word] = [1, [line]]
+        
+def copymatrix(tableau):
+    log.info('copy matrix')
+    copymat = Tableau(tableau.parent, parametres = tableau.parametres)
+    copymat.linecontent = tableau.linecontent
+    copymat.csvtable = tableau.csvtable
+    copymat.pathout = tableau.pathout
+    copymat.colnames = tableau.colnames
+    copymat.rownb = tableau.rownb
+    copymat.colnb = tableau.colnb
+    if copymat.csvtable is None :
+        copymat.open()
+    return copymat
 
 class Tableau() :
 
 class Tableau() :
-    def __init__(self, parent, filename = '', filetype = 'csv', encodage = 'utf-8') :
+    def __init__(self, parent, filename = '', filetype = 'csv', encodage = 'utf-8', parametres = None) :
         self.parent = parent
         self.parent = parent
-        self.parametre = {'filename' : filename}
-        self.parametre['filetype'] = filetype
-        self.parametre['encodage'] = encodage
-        self.parametre['pathout'] = os.path.dirname(os.path.abspath(filename))
-        self.parametre['mineff'] = 3
-        self.parametre['syscoding'] = sys.getdefaultencoding()
-        self.parametre['type'] = 'matrix'
-        self.parametre['name'] = 'unNOm'
+        if parametres is None :
+            self.parametres = DoConf(os.path.join(self.parent.UserConfigPath,'matrix.cfg')).getoptions('matrix')
+            self.parametres['pathout'] = PathOut(filename, 'matrix').mkdirout()
+            self.parametres['originalpath'] = filename
+            self.parametres['filetype'] = filetype
+            self.parametres['encodage'] = encodage
+            #self.parametre['pathout'] = os.path.dirname(os.path.abspath(filename))
+            self.parametres['mineff'] = 3
+            self.parametres['syscoding'] = sys.getdefaultencoding()
+            self.parametres['type'] = 'matrix'
+            self.parametres['matrix_name'] = os.path.basename(filename)
+            self.parametres['uuid'] = str(uuid4())
+            self.parametres['shelves'] = os.path.join(self.parametres['pathout'], 'shelve.db')
+            self.parametres['ira'] = os.path.join(self.parametres['pathout'], 'Matrix.ira')
+        else :
+            self.parametres = parametres
+        self.pathout = PathOut(filename = filename, dirout = self.parametres['pathout'])
+        self.csvtable = None
         self.sups = {}
         self.actives = {}
         self.listactives = None
         self.sups = {}
         self.actives = {}
         self.listactives = None
@@ -77,13 +102,13 @@ class Tableau() :
         self.colnb = 0
         self.rownb = 0
         self.classes = []
         self.colnb = 0
         self.rownb = 0
         self.classes = []
-        self.parametres = self.parametre
+        #self.parametres = self.parametre
 
     def read_tableau(self, fileout) :
         d=shelve.open(fileout)
 
     def read_tableau(self, fileout) :
         d=shelve.open(fileout)
-        self.parametre = d['parametre']
-        if 'syscoding' not in self.parametre :
-            self.parametre['syscoding'] = sys.getdefaultencoding()
+        #self.parametres = d['parametres']
+        #if 'syscoding' not in self.parametres :
+        #    self.parametres['syscoding'] = sys.getdefaultencoding()
         self.actives = d['actives']
         self.sups = d['sups']
         self.classes = d['classes']
         self.actives = d['actives']
         self.sups = d['sups']
         self.classes = d['classes']
@@ -96,11 +121,20 @@ class Tableau() :
             self.datas = d['datas']
         if 'lchi' in d :
             self.lchi = d['lchi']
             self.datas = d['datas']
         if 'lchi' in d :
             self.lchi = d['lchi']
+        if 'content' in d :
+            self.content = d['content']
         d.close()
         d.close()
+    
+    def open(self):
+        print 'open matrix'
+        self.read_csvfile()
+        self.colnames = self.csvtable[0][1:]
+        self.rownb = len(self.linecontent)
+        self.colnb = len(self.linecontent[0])
 
     def save_tableau(self, fileout) :
         d=shelve.open(fileout)
 
     def save_tableau(self, fileout) :
         d=shelve.open(fileout)
-        d['parametre'] = self.parametre
+        d['parametres'] = self.parametres
         d['actives'] = self.actives
         d['sups'] = self.sups
         d['classes'] = self.classes
         d['actives'] = self.actives
         d['sups'] = self.sups
         d['classes'] = self.classes
@@ -113,28 +147,32 @@ class Tableau() :
             d['datas'] = self.datas
         if 'lchi' in dir(self) :
             d['lchi'] = self.lchi
             d['datas'] = self.datas
         if 'lchi' in dir(self) :
             d['lchi'] = self.lchi
+        d['content'] = self.content
         d.close()
 
     def make_content(self) :
         d.close()
 
     def make_content(self) :
-        if self.parametre['filetype'] == 'csv' :
+        self.pathout.createdir(self.parametres['pathout'])
+        if self.parametres['filetype'] == 'csv' :
             self.read_csv()
             self.read_csv()
-        elif self.parametre['filetype'] == 'xls' :
+        elif self.parametres['filetype'] == 'xls' :
             self.read_xls()
             self.read_xls()
-        elif self.parametre['filetype'] == 'ods' :
+        elif self.parametres['filetype'] == 'ods' :
             self.read_ods()
             self.read_ods()
-        self.parametre['csvfile'] = tempfile.mktemp(dir=self.parent.TEMPDIR)
+        self.parametres['csvfile'] = os.path.join(self.parametres['pathout'], 'csvfile.csv')
         self.make_tmpfile()
         self.make_tmpfile()
+        DoConf().makeoptions(['matrix'],[self.parametres], self.parametres['ira'])
+        self.parent.history.addMatrix(self.parametres)
 
     def read_xls(self) :
         #FIXME : encodage
         #print '############## ENCODING IN EXCEL #######################'
         #datafile = xlrd.open_workbook(self.parametre['filename'], encoding_override="azerazerazer")
 
     def read_xls(self) :
         #FIXME : encodage
         #print '############## ENCODING IN EXCEL #######################'
         #datafile = xlrd.open_workbook(self.parametre['filename'], encoding_override="azerazerazer")
-        datafile = xlrd.open_workbook(self.parametre['filename'])
-        datatable = datafile.sheet_by_index(self.parametre['sheetnb']-1)
-        self.linecontent = [[str(datatable.cell_value(rowx = i, colx = j)) for j in range(datatable.ncols)] for i in range(datatable.nrows)]
+        datafile = xlrd.open_workbook(self.parametres['originalpath'])
+        datatable = datafile.sheet_by_index(self.parametres['sheetnb']-1)
+        self.linecontent = [[str(datatable.cell_value(rowx = i, colx = j)).replace(u'"','').replace(u';','').replace(u'\n',' ').strip() for j in range(datatable.ncols)] for i in range(datatable.nrows)]
 
     def read_ods(self) :
 
     def read_ods(self) :
-        doc = ooolib.Calc(opendoc=self.parametre['filename'])
+        doc = ooolib.Calc(opendoc=self.parametres['originalpath'])
         doc.set_sheet_index(0)
         (cols, rows) = doc.get_sheet_dimensions()
         for row in range(1, rows + 1):
         doc.set_sheet_index(0)
         (cols, rows) = doc.get_sheet_dimensions()
         for row in range(1, rows + 1):
@@ -142,19 +180,20 @@ class Tableau() :
             for col in range(1, cols + 1):
                 data = doc.get_cell_value(col, row)
                 if data is not None :
             for col in range(1, cols + 1):
                 data = doc.get_cell_value(col, row)
                 if data is not None :
-                    ligne.append(unescape(data[1]))
+                    ligne.append(unescape(data[1].replace(u'"','').replace(u';','').replace(u'\n', ' ').strip()))
                 else :
                     ligne.append('')
             self.linecontent.append(ligne)
 
     def read_csv(self) :
                 else :
                     ligne.append('')
             self.linecontent.append(ligne)
 
     def read_csv(self) :
-        with codecs.open(self.parametre['filename'], 'r', self.parametre['encodage']) as f :
+        with codecs.open(self.parametres['originalpath'], 'r', self.parametres['encodage']) as f :
             content = f.read() 
             content = f.read() 
-        self.linecontent = [line.replace('"','').split(self.parametre['colsep']) for line in content.splitlines()]
+        self.linecontent = [line.split(self.parametres['colsep']) for line in content.splitlines()]
+        self.linecontent = [[val.replace(u'"','').strip() for val in line] for line in self.linecontent]
 
     def write_csvfile(self) :
 
     def write_csvfile(self) :
-        with open(self.parametre['csvfile'], 'w') as f :
-            f.write('\n'.join([';'.join(line) for line in self.csvtable]))
+        with open(self.parametres['csvfile'], 'w') as f :
+            f.write('\n'.join(['\t'.join(line) for line in self.csvtable]))
 
     def make_tmpfile(self) :
         self.rownb = len(self.linecontent)
 
     def make_tmpfile(self) :
         self.rownb = len(self.linecontent)
@@ -178,14 +217,11 @@ class Tableau() :
         self.csvtable = [[self.idname] + self.colnames] + [[self.rownames[i]] + self.linecontent[i] for i in range(len(self.rownames))] 
         self.write_csvfile()
 
         self.csvtable = [[self.idname] + self.colnames] + [[self.rownames[i]] + self.linecontent[i] for i in range(len(self.rownames))] 
         self.write_csvfile()
 
-    def show_tab(self) :
-        self.parent.content = self.csvtable
-        self.parent.ShowMenu(_("View"))
-        self.parent.ShowMenu(_("Spreadsheet analysis"))
-        self.parent.ShowMenu(_("Text analysis"), False)
-        self.parent.type = "Data"
-        self.parent.DataPop = False
-        self.parent.OnViewData('')
+    def read_csvfile(self):
+        with codecs.open(self.parametres['csvfile'], 'r', self.parametres['syscoding']) as f:
+            self.csvtable = [line.split('\t') for line in f.read().splitlines()]
+        self.linecontent = [line[1:] for line in self.csvtable]
+        self.linecontent.pop(0)
 
     def check_rownames(self) :
         if len(self.rownames) == len(list(set(self.rownames))) :
 
     def check_rownames(self) :
         if len(self.rownames) == len(list(set(self.rownames))) :
@@ -197,9 +233,9 @@ class Tableau() :
     def make_unique_list(self) :
         return list(set([val for line in self.linecontent for val in line if val.strip() != '']))
 
     def make_unique_list(self) :
         return list(set([val for line in self.linecontent for val in line if val.strip() != '']))
 
-    def make_dico(self, linecontent) :
+    def make_dico(self, selcol) :
         dico = {}
         dico = {}
-        for i, line in enumerate(linecontent) :
+        for i, line in enumerate(selcol) :
             for forme in line:
                 if forme.strip() != '' :
                     UpdateDico(dico, forme, i)
             for forme in line:
                 if forme.strip() != '' :
                     UpdateDico(dico, forme, i)
@@ -216,11 +252,11 @@ class Tableau() :
         return [[val, self.actives[val][0]] for val in self.actives]       
 
     def make_listactives(self) :
         return [[val, self.actives[val][0]] for val in self.actives]       
 
     def make_listactives(self) :
-        self.listactives = [val for val in self.actives if val != 'NA' and self.actives[val] >= self.parametre['mineff']]
+        self.listactives = [val for val in self.actives if val != 'NA' and self.actives[val] >= self.parametres['mineff']]
     
     def write01(self, fileout, dico, linecontent) :
         if self.listactives is None :
     
     def write01(self, fileout, dico, linecontent) :
         if self.listactives is None :
-            self.listactives = [val for val in dico if val != 'NA' and dico[val] >= self.parametre['mineff']]
+            self.listactives = [val for val in dico if val != 'NA' and dico[val] >= self.parametres['mineff']]
         out = [['0' for forme in self.listactives] for line in linecontent]
         for i, forme in enumerate(self.listactives) :
             for line in dico[forme][1] :
         out = [['0' for forme in self.listactives] for line in linecontent]
         for i, forme in enumerate(self.listactives) :
             for line in dico[forme][1] :
@@ -234,7 +270,7 @@ class Tableau() :
     def make_01_from_selection(self, listact, listsup = None, dowrite = True) :
         selcol = self.select_col(listact)
         self.actives = self.make_dico(selcol)
     def make_01_from_selection(self, listact, listsup = None, dowrite = True) :
         selcol = self.select_col(listact)
         self.actives = self.make_dico(selcol)
-        self.write01(self.dictpathout['mat01'], self.actives, selcol)
+        self.write01(self.pathout['mat01.csv'], self.actives, selcol)
         if listsup is not None :
             selcol = self.select_col(listsup)
             self.sups = self.make_dico(selcol)
         if listsup is not None :
             selcol = self.select_col(listsup)
             self.sups = self.make_dico(selcol)
@@ -247,7 +283,7 @@ class Tableau() :
                         UpdateDico(self.sups, forme, i)
                     else:
                         UpdateDico(self.actives, forme, i)        
                         UpdateDico(self.sups, forme, i)
                     else:
                         UpdateDico(self.actives, forme, i)        
-        self.listactives = [val for val in self.actives if self.actives[val][0] >= self.parametre['mineff']]
+        self.listactives = [val for val in self.actives if self.actives[val][0] >= self.parametres['mineff']]
         table = [['0' for i in range(len(self.listactives))] for j in range(self.rownb)]
         for i, val in enumerate(self.listactives) :
             for j, line in enumerate(self.linecontent) :
         table = [['0' for i in range(len(self.listactives))] for j in range(self.rownb)]
         for i, val in enumerate(self.listactives) :
             for j, line in enumerate(self.linecontent) :
@@ -259,12 +295,12 @@ class Tableau() :
         with open(fileout, 'w') as f:
             f.write('\n'.join([';'.join(line) for line in table]))
 
         with open(fileout, 'w') as f:
             f.write('\n'.join([';'.join(line) for line in table]))
 
-    def printtable(self, filename, Table):
+    def printtable(self, filename, Table, sep = ';'):
         with open(filename, 'w') as f :
         with open(filename, 'w') as f :
-            f.write('\n'.join([';'.join(line) for line in Table]))
+            f.write('\n'.join([sep.join(line) for line in Table]))
     
     def buildprofil(self) :
     
     def buildprofil(self) :
-        with open(self.dictpathout['uce'], 'rU') as filein :
+        with open(self.pathout['uce'], 'rU') as filein :
             content = filein.readlines()
         content.pop(0)
         lsucecl = []
             content = filein.readlines()
         content.pop(0)
         lsucecl = []
@@ -291,7 +327,7 @@ class Tableau() :
                     if cl == i + 1 :
                         if active in self.linecontent[uce]:
                             line[i + 1] += 1
                     if cl == i + 1 :
                         if active in self.linecontent[uce]:
                             line[i + 1] += 1
-            if sum(line[1:]) > self.parametre['mineff']:
+            if sum(line[1:]) > self.parametres['mineff']:
                 tablecont.append([line[0]] + [`don` for don in line if type(don) == type(1)])
         
         tablecontet = []
                 tablecont.append([line[0]] + [`don` for don in line if type(don) == type(1)])
         
         tablecontet = []
@@ -306,8 +342,8 @@ class Tableau() :
                             line[i + 1] += 1
             tablecontet.append([line[0]] + [`don` for don in line if type(don) == type(1)])
             
                             line[i + 1] += 1
             tablecontet.append([line[0]] + [`don` for don in line if type(don) == type(1)])
             
-        self.printtable(self.dictpathout['ContEtOut'], tablecontet)
-        self.printtable(self.dictpathout['Contout'], tablecont)        
+        self.printtable(self.pathout['ContEtOut'], tablecontet)
+        self.printtable(self.pathout['Contout'], tablecont)        
 
     def get_colnames(self) :
         return self.colnames[:]
 
     def get_colnames(self) :
         return self.colnames[:]
index dd81048..2db7c5a 100644 (file)
@@ -2,7 +2,7 @@
 # -*- coding: utf-8 -*-
 #Author: Pierre Ratinaud
 #Copyright (c) 2011 Pierre Ratinaud
 # -*- coding: utf-8 -*-
 #Author: Pierre Ratinaud
 #Copyright (c) 2011 Pierre Ratinaud
-#Lisense: GNU/GPL
+#License: GNU/GPL
 
 from chemins import ffr, FFF
 from functions import exec_rcode, check_Rresult
 
 from chemins import ffr, FFF
 from functions import exec_rcode, check_Rresult
index b34a107..4d64840 100644 (file)
@@ -2,7 +2,7 @@
 # -*- coding: utf-8 -*-
 #Author: Pierre Ratinaud
 #Copyright (c) 2009-2010 Pierre Ratinaud
 # -*- coding: utf-8 -*-
 #Author: Pierre Ratinaud
 #Copyright (c) 2009-2010 Pierre Ratinaud
-#Lisense: GNU/GPL
+#License: GNU/GPL
 
 from chemins import ConstructPathOut, simipath, ffr, PathOut
 from functions import print_liste, exec_rcode, read_list_file, check_Rresult, indices_simi, treat_var_mod
 
 from chemins import ConstructPathOut, simipath, ffr, PathOut
 from functions import print_liste, exec_rcode, read_list_file, check_Rresult, indices_simi, treat_var_mod
@@ -12,10 +12,6 @@ from analysematrix import AnalyseMatrix
 from PrintRScript import PrintSimiScript
 from listlex import *
 import wx
 from PrintRScript import PrintSimiScript
 from listlex import *
 import wx
-#if wx.__version__ >= '2.11' :
-#    import wx.lib.agw.aui as aui
-#else :
-#    import aui
 import os
 import tempfile
 import datetime
 import os
 import tempfile
 import datetime
@@ -25,17 +21,26 @@ from uuid import uuid4
 
 
 class DoSimi(AnalyseMatrix):
 
 
 class DoSimi(AnalyseMatrix):
-    def __init__(self, parent, param = None, isopen = False, fromprof = False, pathout = False, filename ='', gparent = False, wordgraph = False, listactives = False, actives = False, cmd = False, openfromprof=False, tableau = None):
+    def doanalyse(self) :
+        self.fromprof = self.parametres.get('fromprof', False)
+        self.wordgraph = self.parametres.get('wordgraph', False)
+        self.listactives = self.parametres.get('listactives', False)
+        self.actives = self.parametres.get('actives', False)
+        self.openfromprof = self.parametres.get('openfromprof', False)
+        self.cmd = self.parametres.get('cmd', False)
+        self.dirout = self.parametres.get('pathout', False)
+     #parent, matrix = None, parametres = None, isopen = False, fromprof = False, pathout = False, filename ='', gparent = False, wordgraph = False, listactives = False, actives = False, cmd = False, openfromprof=False, tableau = None):
 #------------------------------------------------------------------- 
 #------------------------------------------------------------------- 
-        self.fromprof = fromprof
-        self.wordgraph = wordgraph
-        self.listactives = listactives
-        self.actives = actives
-        self.openfromprof = openfromprof
-        self.cmd = cmd
-        self.dirout = pathout
-        if param is not None and fromprof:
-            self.paramsimi = param
+    #    self.fromprof = fromprof
+    #    self.wordgraph = wordgraph
+    #    self.listactives = listactives
+    #    self.actives = actives
+    #    self.openfromprof = openfromprof
+    #    self.cmd = cmd
+    #    self.dirout = pathout
+    #    if parametres is not None and fromprof:
+        if self.fromprof:
+            self.paramsimi = parametres
         else :
             self.paramsimi = {'coeff' : 0,
                           'layout' : 2,
         else :
             self.paramsimi = {'coeff' : 0,
                           'layout' : 2,
@@ -75,24 +80,21 @@ class DoSimi(AnalyseMatrix):
         #    self.parent = parent.parent
         #    self.Source = parent
         #else :
         #    self.parent = parent.parent
         #    self.Source = parent
         #else :
-        self.parent = parent   
         self.Source = None
         self.Source = None
-        if pathout :
-            self.pathout = PathOut(dirout = pathout)
+        if self.dirout :
+            self.pathout = PathOut(dirout = self.dirout)
 
 
-        self.RPath = self.parent.PathPath.get('PATHS', 'rpath')
-        if not isopen :
+        #self.RPath = self.parent.PathPath.get('PATHS', 'rpath')
+        if not self.parametres.get('isopen', False) :
             #if not fromprof :
             #    self.tableau = self.parent.tableau
             #else :
             #    self.tableau = parent.tableau
             #if not fromprof :
             #    self.tableau = self.parent.tableau
             #else :
             #    self.tableau = parent.tableau
-            if tableau is not None :
-                self.tableau = tableau
-            else : 
+            if self.tableau is None :
                 self.tableau = parent.tableau
                 self.tableau = parent.tableau
-            self.tableau.parametre['mineff'] = 0
-            if not fromprof :
-                dialcol = FreqDialog(self.parent, -1, self.tableau.get_colnames(), u"Sélectionnez les colonnes", size=(600, 250))
+            self.tableau.parametres['mineff'] = 0
+            if not self.fromprof :
+                dialcol = FreqDialog(self.parent, -1, self.tableau.get_colnames(), _(u"Select columns").decode('utf8'), size=(600, 250))
                 dialcol.CenterOnParent()            
                 res = dialcol.ShowModal()
             else :
                 dialcol.CenterOnParent()            
                 res = dialcol.ShowModal()
             else :
@@ -108,7 +110,7 @@ class DoSimi(AnalyseMatrix):
                     self.tableau.actives = dict(actives)
                 self.tableau.make_listactives()
                 actives = dict([[i, val] for i, val in enumerate(actives)])
                     self.tableau.actives = dict(actives)
                 self.tableau.make_listactives()
                 actives = dict([[i, val] for i, val in enumerate(actives)])
-                self.dial = PrefSimi(parent, -1, self.paramsimi, self.indices, wordlist = actives)
+                self.dial = PrefSimi(self.parent, -1, self.paramsimi, self.indices, wordlist = actives)
                 self.dial.CenterOnParent()
                 self.val = self.dial.ShowModal()
                 if self.val == wx.ID_OK :
                 self.dial.CenterOnParent()
                 self.val = self.dial.ShowModal()
                 if self.val == wx.ID_OK :
@@ -122,31 +124,39 @@ class DoSimi(AnalyseMatrix):
                     self.column = [self.tableau.listactives.index(val) for val in indexes]
                     self.column.sort()
                     self.paramsimi = self.make_param()
                     self.column = [self.tableau.listactives.index(val) for val in indexes]
                     self.column.sort()
                     self.paramsimi = self.make_param()
-                    self.parametres = self.paramsimi
-                    self.parametres['type'] = 'simimatrix'
-                    if not pathout : 
-                        self.parametres['pathout'] = ConstructPathOut(self.tableau.parametre['filename'], 'SimiMatrix')
+                    self.parametres.update(self.paramsimi)
+                    #self.parametres['type'] = 'simimatrix'
+                    if not self.pathout : 
+                        self.parametres['pathout'] = ConstructPathOut(self.parametres['pathout'], 'SimiMatrix')
+                        print self.parametres['pathout']
                     else :
                         self.parametres['pathout'] = self.dirout
                     else :
                         self.parametres['pathout'] = self.dirout
-                    self.parametres['filename'] = self.tableau.parametres['filename']
+                    self.pathout.createdir(self.parametres['pathout'])
+                    self.pathout.dirout = self.parametres['pathout']
+                    #self.parametres['filename'] = self.tableau.parametres['filename']
                     self.dial.Destroy()
                     self.dial.Destroy()
-                    dlg = wx.ProgressDialog("Traitements",
-                                   "Veuillez patienter...",
-                                   maximum=4,
-                                   parent=self.parent,
-                                   style=wx.PD_APP_MODAL | wx.PD_AUTO_HIDE | wx.PD_ELAPSED_TIME
-                                    )
-                    dlg.Center()
-                    AnalyseMatrix.__init__(self, parent, self.tableau, self.paramsimi, dlg = dlg)
+                    self.doanalyse2()  
+                    #dlg = wx.ProgressDialog("Traitements",
+                    #               "Veuillez patienter...",
+                    #               maximum=4,
+                    #               parent=self.parent,
+                    #               style=wx.PD_APP_MODAL | wx.PD_AUTO_HIDE | wx.PD_ELAPSED_TIME
+                    #                )
+                    #dlg.Center()
+                    #AnalyseMatrix.__init__(self, parent, self.tableau, self.paramsimi, dlg = dlg)
                 else :
                     self.dial.Destroy()
                 else :
                     self.dial.Destroy()
+                    self.parametres = None
+                    return False
             else :
                 dialcol.Destroy()
             else :
                 dialcol.Destroy()
+                self.parametres = None
+                return False
 
 
-    def doanalyse(self) :
+    def doanalyse2(self) :
         self.pathout.basefiles(simipath)
         with open(self.pathout['selected.csv'], 'w') as f :
         self.pathout.basefiles(simipath)
         with open(self.pathout['selected.csv'], 'w') as f :
-             f.write('\n'.join([`val` for val in self.column]))
+            f.write('\n'.join([`val` for val in self.column]))
 
         count = 1
         keepGoing = self.dlg.Update(count)
 
         count = 1
         keepGoing = self.dlg.Update(count)
@@ -157,7 +167,7 @@ class DoSimi(AnalyseMatrix):
     #--------------------------------------------------------
         count += 1
         #if not self.fromprof :
     #--------------------------------------------------------
         count += 1
         #if not self.fromprof :
-            #self.pathout = ConstructPathOut(self.tableau.parametre['filename'], 'Simi')
+            #self.pathout = ConstructPathOut(self.tableau.parametres['filename'], 'Simi')
             #self.DictPathOut = construct_simipath(self.pathout)
         self.tableau.dictpathout = self.pathout
         self.dlg.Update(count, u"passage en O/1")
             #self.DictPathOut = construct_simipath(self.pathout)
         self.tableau.dictpathout = self.pathout
         self.dlg.Update(count, u"passage en O/1")
@@ -190,35 +200,6 @@ class DoSimi(AnalyseMatrix):
             fromprof = True
         else:
             fromprof = False
             fromprof = True
         else:
             fromprof = False
-        #OpenAnalyse(self.parent, self.DictPathOut['ira'], False, simifromprof=fromprof)
-#        else :
-#            self.tableau = gparent.tableau
-#            if 'corpus' in dir(gparent) :
-#                self.Source = gparent
-#            self.tableau.parametre['mineff'] = 0
-#            self.DictPathOut = construct_simipath(os.path.abspath(os.path.dirname(filename)))
-#            self.dolayout()
-#            self.paramsimi['first'] = False
-#            self.paramsimi['coeff'] = int(param.get('simi', 'indice'))
-#            self.paramsimi['layout'] = int(param.get('simi', 'layout'))
-#            self.paramsimi['seuil_ok'] = param.getboolean('simi', 'seuil_ok')
-#            self.paramsimi['seuil'] = int(param.get('simi', 'seuil'))
-#            if param.get('simi', 'wordgraph') == 'False' :
-#                self.wordgraph = False
-#            else :
-#                self.wordgraph = param.get('simi', 'wordgraph')
-#            if 'listet' in dir(self.tableau) :
-#                self.paramsimi['stars'] = self.tableau.listet
-#                self.paramsimi['bystar'] = False
-#                self.paramsimi['cexfromchi'] = True
-#                self.paramsimi['tvprop'] = False
-#                self.paramsimi['sfromchi'] = False
-#                self.paramsimi['coeff_te'] = True
-#                self.paramsimi['coeff_tv'] = True
-#                self.paramsimi['coeff_tv_nb'] = 0
-#                self.paramsimi['label_e'] = False
-#                self.paramsimi['width'] = 1000
-#                self.paramsimi['height'] = 1000
          
 
     def make_param(self) :
          
 
     def make_param(self) :
@@ -266,31 +247,14 @@ class DoSimi(AnalyseMatrix):
         if 'sfromchi' in self.paramsimi :
             paramsimi['sfromchi'] = self.dial.checki.GetValue()
         if 'vlabcolor' in self.paramsimi :
         if 'sfromchi' in self.paramsimi :
             paramsimi['sfromchi'] = self.dial.checki.GetValue()
         if 'vlabcolor' in self.paramsimi :
-           paramsimi['vlabcolor'] = self.paramsimi['vlabcolor']
+            paramsimi['vlabcolor'] = self.paramsimi['vlabcolor']
         if 'check_bystar' in dir(self.dial) :
             paramsimi['bystar'] = self.dial.check_bystar.GetValue()
             paramsimi['stars'] = self.paramsimi['stars']
         if 'check_bystar' in dir(self.dial) :
             paramsimi['bystar'] = self.dial.check_bystar.GetValue()
             paramsimi['stars'] = self.paramsimi['stars']
+        if 'tmpchi' in self.paramsimi :
+            paramsimi['tmpchi'] = self.paramsimi['tmpchi']
         return paramsimi
         
         return paramsimi
         
-#    def make_ira(self):
-#        self.tableau.save_tableau(self.DictPathOut['db'])
-#        conf = RawConfigParser()
-#        conf.read(self.DictPathOut['ira'])
-#        if not 'simi' in conf.sections() :
-#            conf.add_section('simi')
-#        date = datetime.datetime.now().ctime()
-#        if self.fromprof :
-#            conf.set('simi', 'corpus', self.Source.corpus.parametres['uuid'])
-#        conf.set('simi', 'uuid', str(uuid4()))
-#        conf.set('simi', 'date', str(date))
-#        conf.set('simi', 'indice', self.paramsimi['coeff'])
-#        conf.set('simi','layout', self.paramsimi['layout'])
-#        conf.set('simi', 'seuil_ok', self.paramsimi['seuil_ok'])
-#        conf.set('simi', 'seuil', str(self.paramsimi['seuil']))
-#        conf.set('simi', 'wordgraph', self.wordgraph)
-#        fileout = open(self.DictPathOut['ira'], 'w')
-#        conf.write(fileout)
-#        fileout.close()
 #        
     def addgraph(self) :
         if self.parametres['type_graph'] == 1:
 #        
     def addgraph(self) :
         if self.parametres['type_graph'] == 1:
@@ -307,14 +271,14 @@ class DoSimi(AnalyseMatrix):
             print_liste(self.DictPathOut['liste_graph'], graph_simi)
         
     def DoR(self, dlg):
             print_liste(self.DictPathOut['liste_graph'], graph_simi)
         
     def DoR(self, dlg):
-        if self.paramsimi['type'] == 1 :
+        if self.paramsimi['type_graph'] == 1 :
             graph = False
             wait = False
         else : 
             graph = True
             wait = True
             graph = False
             wait = False
         else : 
             graph = True
             wait = True
-        pid = exec_rcode(self.RPath, self.tmpfile, wait = wait, graph = graph)
-        if self.paramsimi['type'] == 1 :
+        pid = exec_rcode(self.ira.RPath, self.tmpfile, wait = wait, graph = graph)
+        if self.paramsimi['type_graph'] == 1 :
             while pid.poll() == None :
                     if not self.cmd :
                         dlg.Pulse(u'R ...')
             while pid.poll() == None :
                     if not self.cmd :
                         dlg.Pulse(u'R ...')
index fd34232..26e464f 100644 (file)
@@ -2,7 +2,7 @@
 # -*- coding: utf-8 -*-
 #Author: Pierre Ratinaud
 #Copyright (c) 2008 Pierre Ratinaud
 # -*- coding: utf-8 -*-
 #Author: Pierre Ratinaud
 #Copyright (c) 2008 Pierre Ratinaud
-#Lisense: GNU/GPL
+#License: GNU/GPL
 
 
 from chemins import ffr
 
 
 from chemins import ffr
index 12f4a61..8ba6619 100644 (file)
@@ -2,7 +2,7 @@
 # -*- coding: utf-8 -*-
 #Author: Pierre Ratinaud
 #Copyright (c) 2012 Pierre Ratinaud
 # -*- coding: utf-8 -*-
 #Author: Pierre Ratinaud
 #Copyright (c) 2012 Pierre Ratinaud
-#Lisense: GNU GPL
+#License: GNU GPL
 
 import os
 import string
 
 import os
 import string
@@ -60,7 +60,7 @@ class Prototypical(AnalyseMatrix) :
                     self.makedatas(table_assoc, table_rank)
                     self.DoR()
         else :
                     self.makedatas(table_assoc, table_rank)
                     self.DoR()
         else :
-             return 'stop'
+            return 'stop'
 
     def dotable(self) :
         table_assoc = self.tableau.select_col(self.ColSel1)
 
     def dotable(self) :
         table_assoc = self.tableau.select_col(self.ColSel1)
@@ -71,15 +71,16 @@ class Prototypical(AnalyseMatrix) :
         words = {}
         for i in range(0, len(table_assoc)) :
             for j, word in enumerate(table_assoc[i]) :
         words = {}
         for i in range(0, len(table_assoc)) :
             for j, word in enumerate(table_assoc[i]) :
-                if word in words :
-                    words[word][0] += 1
-                    if table_rank[i][j] != '' :
-                        words[word][1].append(int(table_rank[i][j]))
-                else :
-                    if table_rank[i][j] != '' :
-                        words[word] = [1, [int(table_rank[i][j])]]
+                if word.strip() != "" :
+                    if word in words :
+                        words[word][0] += 1
+                        if table_rank[i][j] != '' :
+                            words[word][1].append(float(table_rank[i][j]))
                     else :
                     else :
-                         words[word] = [1, []]
+                        if table_rank[i][j] != '' :
+                            words[word] = [1, [float(table_rank[i][j])]]
+                        else :
+                            words[word] = [1, []]
         res = [[word, words[word][0], float(sum(words[word][1])) / len(words[word][1])] for word in words if len(words[word][1]) != 0 and words[word][0] >= self.parametres['freqmin']]
         with open(self.pathout['table.csv'], 'w') as f :
             f.write('\n'.join(['\t'.join(['"' + val[0] +'"', `val[1]`, `val[2]`]) for val in res]))
         res = [[word, words[word][0], float(sum(words[word][1])) / len(words[word][1])] for word in words if len(words[word][1]) != 0 and words[word][0] >= self.parametres['freqmin']]
         with open(self.pathout['table.csv'], 'w') as f :
             f.write('\n'.join(['\t'.join(['"' + val[0] +'"', `val[1]`, `val[2]`]) for val in res]))
index 33315a6..d030413 100644 (file)
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 #Author: Pierre Ratinaud
 #Copyright (c) 2008-2009 Pierre Ratinaud
 # -*- coding: utf-8 -*-
 #Author: Pierre Ratinaud
 #Copyright (c) 2008-2009 Pierre Ratinaud
-#Lisense: GNU/GPL
+#License: GNU/GPL
 
 from chemins import ConstructPathOut, ConstructAfcUciPath
 from layout import GraphPanel
 
 from chemins import ConstructPathOut, ConstructAfcUciPath
 from layout import GraphPanel
index 1f3e32f..000e8d0 100644 (file)
@@ -3,19 +3,20 @@
 #Copyright (c) 2008-2011 Pierre Ratinaud
 #License: GNU/GPL
 
 #Copyright (c) 2008-2011 Pierre Ratinaud
 #License: GNU/GPL
 
-from chemins import ConstructPathOut, StatTxtPathOut
+from chemins import ConstructPathOut, StatTxtPathOut, PathOut
 #from corpus import Corpus
 from analysetxt import AnalyseText
 import wx
 import os
 #from corpus import Corpus
 from analysetxt import AnalyseText
 import wx
 import os
-import sys
-from listlex import *
-from functions import exec_rcode, progressbar, check_Rresult, CreateIraFile, print_liste, treat_var_mod, write_tab, DoConf
-from dialog import OptLexi, StatDialog 
-from openanalyse import OpenAnalyse
+#import sys
+#from listlex import *
+from functions import exec_rcode, progressbar, check_Rresult, CreateIraFile, print_liste, treat_var_mod, write_tab, DoConf, TGen
+from dialog import OptLexi#, StatDialog 
+#from openanalyse import OpenAnalyse
 import tempfile
 import tempfile
-from ConfigParser import RawConfigParser
-from guifunct import getPage, getCorpus
+#from ConfigParser import RawConfigParser
+#from guifunct import getPage, getCorpus
+from PrintRScript import TgenSpecScript
 from time import sleep
 import logging
 
 from time import sleep
 import logging
 
@@ -206,3 +207,25 @@ class Lexico(AnalyseText) :
         print_liste(self.dictpathout['liste_graph_afcf'],afcf_graph_list)
         print_liste(self.dictpathout['liste_graph_afct'],afct_graph_list)
         #DoConf().makeoptions(['spec'],[self.parametres], self.dictpathout['ira'])
         print_liste(self.dictpathout['liste_graph_afcf'],afcf_graph_list)
         print_liste(self.dictpathout['liste_graph_afct'],afct_graph_list)
         #DoConf().makeoptions(['spec'],[self.parametres], self.dictpathout['ira'])
+
+class TgenSpec(AnalyseText):
+    def __init__(self, ira, corpus, parametres):
+        self.ira = ira
+        self.corpus = corpus
+        self.parametres = parametres
+        self.pathout = PathOut(dirout = self.parametres['pathout'])
+        self.doanalyse()
+        
+    def doanalyse(self):
+        self.tgen = TGen(path = self.parametres['tgenpath'])
+        self.tgen.read(self.tgen.path)
+        tgenocc, totocc = self.corpus.make_tgen_table(self.tgen, self.parametres['etoiles'])
+        self.parametres['tgeneff'] = os.path.join(self.parametres['pathout'], 'tgeneff.csv')
+        self.tgen.writetable(self.parametres['tgeneff'], tgenocc, totocc)
+        self.parametres['tgenspec'] = os.path.join(self.parametres['pathout'], 'tgenspec.csv')
+        self.Rscript = TgenSpecScript(self)
+        self.Rscript.make_script()
+        self.Rscript.write()
+        self.doR(self.Rscript.scriptout, dlg = False, message = 'R...')
+
+    
\ No newline at end of file