Changeset 1718 for branches


Ignore:
Timestamp:
09/03/14 10:13:25 (10 years ago)
Author:
rkrimmel
Message:

Saving everything to file.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/autoquest-core-tasktrees-alignment/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/SequenceForTaskDetectionRuleAlignment.java

    r1717 r1718  
    1515package de.ugoe.cs.autoquest.tasktrees.temporalrelation; 
    1616 
     17import java.io.File; 
    1718import java.io.FileInputStream; 
    1819import java.io.FileOutputStream; 
     
    7778         
    7879         
    79         public static int nThreads; 
    80         public static boolean harmonizeSequences; 
    81         public static boolean loadSubstutionMatrix; 
    82          
    8380 
    8481        private int iteration = 0; 
     
    193190        public RuleApplicationResult apply(List<IUserSession> sessions) { 
    194191                RuleApplicationData appData = new RuleApplicationData(sessions); 
    195                 if(SequenceForTaskDetectionRuleAlignment.harmonizeSequences) { 
     192                File harmonized = new File("harmonized.dat"); 
     193                if(harmonized.exists() && !harmonized.isDirectory()) {  
     194                        Console.traceln(Level.INFO,"loading harmonized sessions from file"); 
     195                        appData = loadAppData("harmonized"); 
     196                } 
     197                else { 
    196198                        //appData.getStopWatch().start("harmonization"); 
    197199                        harmonizeEventTaskInstancesModel(appData); 
     
    202204                        saveAppData("harmonized"); 
    203205                } 
    204                 else { 
    205                         Console.traceln(Level.INFO,"loading harmonized sessions from file"); 
    206                         appData = loadAppData("harmonized"); 
    207                 } 
    208                 System.out.println(SequenceForTaskDetectionRuleAlignment.loadSubstutionMatrix); 
    209                 if(!SequenceForTaskDetectionRuleAlignment.loadSubstutionMatrix) {        
     206                 
     207                File substitution = new File("substitution.dat"); 
     208                if(!(substitution.exists() && !substitution.isDirectory())) {  
    210209                        Console.traceln(Level.INFO, "generating substitution matrix from " + appData.getUniqueTasks().size() + " unique tasks"); 
    211210                        appData.getStopWatch().start("substitution matrix"); 
     
    651650                // Generate pairwise alignments 
    652651                int size = appData.getNumberSequences().size(); 
    653                 Console.traceln(Level.INFO, "generating pairwise alignments"); 
    654                 LinkedList<Match> matchseqs = new LinkedList<Match>(); 
     652                Console.traceln(Level.INFO, "generating pairwise alignments from " + size + " sessions"); 
    655653                int count = 0; 
    656654                 
    657                 for (int i = 0; i < appData.getNumberSequences().size(); i++) { 
    658                         NumberSequence ns1 = appData.getNumberSequences().get(i); 
    659                         count++; 
    660         //              if((count%(size/100)==0)) { 
    661         //                      Console.traceln(Level.INFO,(Math.round((float) count/size*100))+ "%"); 
    662         //              } 
    663                         for (int j = 0; j < appData.getNumberSequences().size(); j++) { 
    664                                 NumberSequence ns2 = appData.getNumberSequences().get(j); 
    665                                 if (i != j) { 
    666                                         //Console.traceln(Level.FINEST,"Aligning sequence " + i + " with sequence " + j); 
    667                                         AlignmentAlgorithm aa = AlignmentAlgorithmFactory.create(); 
    668                                         aa.align(ns1, ns2, appData.getSubmat(),9); 
    669                                         matchseqs.addAll(aa.getMatches()); 
    670                                 } 
    671                         } 
    672                 } 
    673                 GlobalDataContainer.getInstance().addData("aligned", matchseqs); 
    674                 saveAppData("aligned"); 
     655                //Checking if i have an already calculated file result of this action in the working directory  
     656                File aligned = new File("aligned" + iteration + ".dat"); 
     657                if(!(aligned.exists() && !aligned.isDirectory())) { 
     658                        appData.matchseqs = new LinkedList<Match>(); 
     659                        System.out.println(appData.matchseqs); 
     660                        for (int i = 0; i < appData.getNumberSequences().size(); i++) { 
     661                                NumberSequence ns1 = appData.getNumberSequences().get(i); 
     662                                count++; 
     663                                 
     664                                //Print out the progress 
     665                                if(size>100) { 
     666                                        if((count%(size/100)==0)) {      
     667                                                Console.traceln(Level.INFO,(Math.round((float) count/size*100))+ "%"); 
     668                                        } 
     669                                } 
     670                                else { 
     671                                        Console.traceln(Level.INFO,(Math.round((float) count/size*100))+ "%"); 
     672                                } 
     673                                for (int j = 0; j < appData.getNumberSequences().size(); j++) { 
     674                                        NumberSequence ns2 = appData.getNumberSequences().get(j); 
     675                                        if (i != j) { 
     676                                                //Console.traceln(Level.FINEST,"Aligning sequence " + i + " with sequence " + j); 
     677                                                AlignmentAlgorithm aa = AlignmentAlgorithmFactory.create(); 
     678                                                aa.align(ns1, ns2, appData.getSubmat(),9); 
     679                                                appData.getMatchseqs().addAll(aa.getMatches()); 
     680                                        } 
     681                                } 
     682                        } 
     683                        GlobalDataContainer.getInstance().addData("aligned" + iteration, appData); 
     684                        saveAppData("aligned" + iteration); 
     685                } 
     686                else { 
     687                        Console.traceln(Level.INFO,"loading matches from file"); 
     688                        appData = loadAppData("aligned"+iteration); 
     689                } 
     690 
    675691 
    676692                Console.traceln(Level.INFO, "searching for patterns occuring most"); 
    677693 
    678694                // search each match in every other sequence 
    679                 for (Iterator<Match> it = matchseqs.iterator(); it.hasNext();) { 
     695                for (Iterator<Match> it = appData.getMatchseqs().iterator(); it.hasNext();) { 
    680696                        Match pattern = it.next(); 
    681  
     697                         
    682698                        // Skip sequences with more 0 events (scrolls) than other events. 
    683699                        // Both of the pattern sequences are equally long, so the zero 
     
    711727                        } 
    712728                }; 
    713                 Collections.sort(matchseqs, comparator); 
     729                Collections.sort(appData.getMatchseqs(), comparator); 
    714730                appData.getStopWatch().stop("detecting tasks"); 
    715731 
     
    717733                HashMap<Integer, List<MatchOccurence>> replacedOccurences = new HashMap<Integer, List<MatchOccurence>>(); 
    718734                // Replace matches in the sessions 
    719                 for (int i = 0; i < matchseqs.size(); i++) { 
     735                for (int i = 0; i < appData.getMatchseqs().size(); i++) { 
     736                 
    720737                        // Every pattern consists of 2 sequences, therefore the minimum 
    721738                        // occurrences here is 2. 
    722739                        // We just need the sequences also occurring in other sequences as 
    723740                        // well 
    724                         if (matchseqs.get(i).occurenceCount() > 2) { 
    725  
     741                        if (appData.getMatchseqs().get(i).occurenceCount() > 2) { 
    726742                                appData.detectedAndReplacedTasks = true; 
    727                                 ISequence task = matchAsSequence(appData, matchseqs.get(i)); 
    728                                 invalidOccurence: for (Iterator<MatchOccurence> it = matchseqs 
     743                                ISequence task = matchAsSequence(appData, appData.getMatchseqs().get(i)); 
     744                                invalidOccurence: for (Iterator<MatchOccurence> it = appData.getMatchseqs() 
    729745                                                .get(i).getOccurences().iterator(); it.hasNext();) { 
    730746                                        MatchOccurence oc = it.next(); 
    731747                                         
    732748                                        /* 
    733                                         if (iteration > 1) { 
     749                                        if (iteration > 0) { 
    734750                                          
    735751                                        System.out.println("Trying to replace sequence: "); 
    736                                         matchseqs.get(i).getFirstSequence().printSequence(); 
    737                                         matchseqs.get(i).getSecondSequence().printSequence(); 
     752                                        appData.getMatchseqs().get(i).getFirstSequence().printSequence(); 
     753                                        appData.getMatchseqs().get(i).getSecondSequence().printSequence(); 
    738754                                        System.out.println(" in session number: " 
    739755                                                        + (oc.getSequenceId() + 1) + " at position " 
     
    808824                        } 
    809825                } 
    810                 matchseqs = null; 
     826                appData.setMatchseqs(null); 
    811827                appData.getStopWatch().stop("replacing tasks"); 
    812828        } 
     
    828844                 
    829845                ObjectDistanceSubstitionMatrix submat;  
    830  
    831          
     846                 
     847                LinkedList<Match> matchseqs; 
     848                 
    832849                private ArrayList<NumberSequence> numberseqs; 
    833850 
     
    868885                } 
    869886 
     887                public LinkedList<Match> getMatchseqs() { 
     888                        return matchseqs; 
     889                } 
     890 
     891                public void setMatchseqs(LinkedList<Match> matchseqs) { 
     892                        this.matchseqs = matchseqs; 
     893                } 
     894 
    870895                private ObjectDistanceSubstitionMatrix getSubmat() { 
    871896                        return submat; 
     
    907932 
    908933                 
     934                 
    909935                /** 
    910936         * 
Note: See TracChangeset for help on using the changeset viewer.