44import java .io .File ;
55import java .io .IOException ;
66import java .io .PrintWriter ;
7- import java .nio .file .FileAlreadyExistsException ;
87import java .nio .file .Files ;
98import java .nio .file .Path ;
109import java .nio .file .Paths ;
1110import java .util .ArrayList ;
12- import java .util .Arrays ;
13- import java .util .Collections ;
1411import java .util .HashMap ;
15- import java .util .HashSet ;
1612import java .util .LinkedHashMap ;
1713import java .util .LinkedHashSet ;
1814import java .util .List ;
2420import java .util .concurrent .ExecutionException ;
2521import java .util .logging .Logger ;
2622import java .util .stream .Collectors ;
27- import java .util .stream .Stream ;
2823
29- import org .apache .commons .io .FileUtils ;
3024import org .pankratzlab .common .ArrayUtils ;
3125import org .pankratzlab .common .HashVec ;
3226import org .pankratzlab .common .Matrix ;
3327import org .pankratzlab .common .PSF ;
34- import org .pankratzlab .internal .gwas .FactorLoadings ;
3528import org .pankratzlab .kdmatch .KDMatch ;
3629import org .pankratzlab .kdmatch .KDTree ;
3730import org .pankratzlab .kdmatch .Match ;
3831import org .pankratzlab .kdmatch .Sample ;
3932import org .pankratzlab .kdmatch .SelectOptimizedNeighbors ;
4033
41- import com .google .common .collect .Sets ;
4234import com .google .common .primitives .Ints ;
4335
4436public class MatchMaker {
37+ private static final String naiveMatchFileName = "match.naive.txt" ;
38+ private static final String naiveStatusFileName = "status.naive.txt" ;
39+ private static final String optimizedMatchFileName = "match.optimized.txt" ;
40+ private static final String optimizedStatusFileName = "status.optimized.txt" ;
4541
4642 private static List <Match > kdMatchMaker (Path baseDir , Path inputSamples , List <Sample > caseList ,
4743 List <Sample > controlList ,
@@ -63,9 +59,10 @@ private static List<Match> kdMatchMaker(Path baseDir, Path inputSamples, List<Sa
6359 initialNumSelect )
6460 .collect (Collectors .toList ());
6561
66- String outputBase = baseDir + File .separator + "match.naive.txt" ;
62+ String outputBaseFileName = baseDir + File .separator + naiveMatchFileName ;
63+ String statusBaseFileName = baseDir + File .separator + naiveStatusFileName ;
6764 log .info ("reporting full baseline selection of " + initialNumSelect + " nearest neighbors to "
68- + outputBase );
65+ + outputBaseFileName );
6966 LinkedHashSet <String > setConvert = new LinkedHashSet <String >();
7067
7168 try {
@@ -75,9 +72,11 @@ private static List<Match> kdMatchMaker(Path baseDir, Path inputSamples, List<Sa
7572 setConvert .add (header [i ]);
7673 }
7774 try {
78- KDMatch .writeToFile (naiveMatches .stream (), outputBase ,
75+ KDMatch .writeToFile (naiveMatches .stream (), outputBaseFileName ,
7976 setConvert .stream ().toArray (String []::new ),
8077 setConvert .stream ().toArray (String []::new ), initialNumSelect );
78+
79+ KDMatch .writeSampleStatusFile (naiveMatches .stream (), statusBaseFileName , initialNumSelect );
8180 } catch (IOException e ) {
8281 e .printStackTrace ();
8382 }
@@ -86,8 +85,8 @@ private static List<Match> kdMatchMaker(Path baseDir, Path inputSamples, List<Sa
8685 System .exit (1 );
8786 }
8887
89- String outputOpt = baseDir + File .separator + "match.optimized.txt" ;
90-
88+ String outputOptFileName = baseDir + File .separator + optimizedMatchFileName ;
89+ String statusOptFileName = baseDir + File . separator + optimizedStatusFileName ;
9190 log .info ("selecting optimized nearest neighbors" );
9291
9392 List <Match > optimizedMatches = null ;
@@ -96,10 +95,11 @@ private static List<Match> kdMatchMaker(Path baseDir, Path inputSamples, List<Sa
9695 threads , log )
9796 .collect (Collectors .toList ());
9897 log .info ("reporting optimized selection of " + finalNumSelect + " nearest neighbors to "
99- + outputOpt );
100- KDMatch .writeToFile (optimizedMatches .stream (), outputOpt ,
98+ + outputOptFileName );
99+ KDMatch .writeToFile (optimizedMatches .stream (), outputOptFileName ,
101100 setConvert .stream ().toArray (String []::new ),
102101 setConvert .stream ().toArray (String []::new ), finalNumSelect );
102+ KDMatch .writeSampleStatusFile (optimizedMatches .stream (), statusOptFileName , finalNumSelect );
103103 } catch (StackOverflowError s1 ) {
104104 s1 .printStackTrace ();
105105 log .info ("To potentially prevent this StackOverflowError, try increasing the Thread Stack Size with the -Xss argument passed to the java virtual machine (i.e. java -Xss10m)" );
@@ -577,9 +577,13 @@ public static void main(String[] args) {
577577 log .info ("Starting sample match using k-d tree nearest neighbors." );
578578
579579 try {
580- File naive = new File (d + "/match.naive.txt" );
581- File optimized = new File (d + "/match.optimized.txt" );
582- if (naive .exists () || optimized .exists ()) {
580+ List <String > fileNames = List .of (naiveMatchFileName , naiveStatusFileName ,
581+ optimizedMatchFileName , optimizedStatusFileName );
582+ final Path finalD = d ;
583+ boolean outputExists = fileNames .stream ()
584+ .map (name -> new File (finalD + File .separator + name ))
585+ .anyMatch (File ::exists );
586+ if (outputExists ) {
583587 log .info ("Output already exists." );
584588 System .exit (0 );
585589 }
@@ -597,7 +601,9 @@ public static void main(String[] args) {
597601 loadingIndicesForVis [s ] = loadingIndicesForVis [s ] - 1 ;
598602 }
599603 for (int i = 0 ; i < finalNumSelect ; i ++) {
600- buildVisHelpers (d , Paths .get (optimized .toString ()), samples , i , log );
604+ Path resultsFile = Paths .get (new File (d + File .separator
605+ + optimizedMatchFileName ).toString ());
606+ buildVisHelpers (d , resultsFile , samples , i , log );
601607 if (!onlyBuildVisFiles ) {
602608 new MatchesVisualized (d .toString (), samples .toString (),
603609 d + "/visual_helpers/vis_helper_factors.temp" ,
0 commit comments