/* * The MIT License (MIT) * * Copyright (c) 2007-2015 Broad Institute * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ package org.broad.igv.tools.converters; import org.broad.igv.data.seg.Segment; import java.io.*; import java.util.*; /** * User: jrobinso * Date: Apr 19, 2010 */ public class IlluminaToCN { static int probeIdCol = 1; static int chrCol = 3; static int posCol = 4; static int preColCount = 10; static int sampleColumnCount = 16; static int cnvOffset = 5; static int logROffset = 7; static int afOffset = 8; /** * Converts an illumina aCGH file to multiple .seg and .cn files. The files are produced * * @param iFile * @param oFilePrefix */ public static void convertFile(String iFile, String oFilePrefix) { BufferedReader reader = null; PrintWriter cnvWriter = null; PrintWriter logRWriter = null; PrintWriter afWriter = null; LinkedHashMap<String, List<Segment>> cnvSegments = new LinkedHashMap(); try { reader = new BufferedReader(new FileReader(iFile)); cnvWriter = new PrintWriter(new BufferedWriter(new FileWriter(oFilePrefix + ".cnv.cn"))); logRWriter = new PrintWriter(new BufferedWriter(new FileWriter(oFilePrefix + ".logr.cn"))); afWriter = new PrintWriter(new BufferedWriter(new FileWriter(oFilePrefix + ".af.cn"))); List<PrintWriter> allWriters = Arrays.asList(logRWriter, afWriter); String nextLine = reader.readLine(); List<String> samples = getSamples(nextLine); for (PrintWriter pw : allWriters) { pw.print("Probe\tChr\tPosition"); for (String s : samples) { pw.print("\t" + s); } pw.println(); } cnvWriter.println("Sample\tchr\tstart\tend\tnumberOfSnps"); Map<String, Segment> currentSegments = new HashMap(); while ((nextLine = reader.readLine()) != null) { String[] tokens = nextLine.split("\t"); String probe = tokens[probeIdCol]; String chr = "chr" + tokens[chrCol]; int position = Integer.parseInt(tokens[posCol]); for (PrintWriter pw : allWriters) { pw.print(probe + "\t" + chr + "\t" + position); } int col = preColCount - 1; for (int i = 0; i < samples.size(); i++) { String sample = samples.get(i); int cnv = (int) Float.parseFloat(tokens[col + cnvOffset]); Segment segment = currentSegments.get(sample); if (segment == null || !chr.equals(segment.getChr()) || cnv == (int) segment.getScore()) { if (segment != null) { List<Segment> segs = cnvSegments.get(sample); if (segs == null) { segs = new ArrayList(); cnvSegments.put(sample, segs); } segs.add(segment); } segment = new Segment(position, position, cnv); currentSegments.put(sample, segment); } else { //segment.incremenetSnpCount(1); segment.setEnd(position); } String logR = tokens[col + logROffset]; logRWriter.print("\t" + logR); String af = tokens[col + afOffset]; afWriter.print("\t" + af); col += sampleColumnCount; } for (PrintWriter pw : allWriters) { pw.println(); } } for (Map.Entry<String, List<Segment>> entry : cnvSegments.entrySet()) { String sample = entry.getKey(); for (Segment segment : entry.getValue()) { cnvWriter.println(sample + "\t" + segment.getChr() + "\t" + segment.getStart() + "\t" + segment.getEnd() + "\t" + "" + "\t" + (int) segment.getScore()); } } } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { } } for (PrintWriter pw : Arrays.asList(cnvWriter, logRWriter, afWriter)) { if (pw != null) { pw.close(); } } } } //SB516834_PB15681_E02.GType private static List<String> getSamples(String nextLine) { String[] tokens = nextLine.split("\t"); int col = preColCount; List<String> samples = new ArrayList(); while (col < tokens.length - 1) { samples.add(tokens[col].replace(".GType", "")); col += sampleColumnCount; } return samples; } public static void main(String[] args) { String ifile = "/Users/jrobinso/IGV/maggie/FullDataTable2.txt"; String oFilePre = "/Users/jrobinso/IGV/maggie/smallDataTable"; convertFile(ifile, oFilePre); } }