package org.seqcode.deepseq.hitloaders; import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.Set; import java.util.TreeSet; import org.seqcode.data.seqdata.SeqDataLoader; import org.seqcode.data.seqdata.SeqLocator; import org.seqcode.deepseq.experiments.ExptConfig; /** * HitLoaderFactory is a simple class that defines the hitloaders. * @author mahony * */ public class HitLoaderFactory { ExptConfig econfig; public HitLoaderFactory(ExptConfig e){ econfig = e; } /** * Add a ReadDB HitLoader. * * @param locs List of SeqLocators */ public HitLoader makeReadDBHitLoader(SeqDataLoader loader, String name){ if(loader==null) throw new RuntimeException("SeqDataLoader not initialized in makeReadDBHitLoader"); List<SeqLocator> locs = new ArrayList<SeqLocator>(); String[] pieces = name.trim().split(";"); Set<String> reps = new TreeSet<String>(); if (pieces.length == 2) { //Merge all available replicates locs.add(new SeqLocator(pieces[0], reps, pieces[1])); } else if (pieces.length == 3) { //Specific named replicate or merge a list of comma-separated replicates String[] rs = pieces[1].split(","); for(int r=0; r<rs.length; r++) reps.add(rs[r]); locs.add(new SeqLocator(pieces[0], reps, pieces[2])); } else { throw new RuntimeException("Couldn't parse a SeqLocator from " + name); } return (new ReadDBHitLoader(loader, econfig.getGenome(), locs, econfig.getLoadType1Reads(), econfig.getLoadType2Reads(), econfig.getLoadPairs())); } /** * Add a File HitLoader. File formats accepted include: * SCIDX, NOVO, BOWTIE, BED, SAM, TOPSAM * @param files List of File/String Pairs, where the string is a format descriptor */ public HitLoader makeFileHitLoader(String filename, String format, boolean useNonUnique){ HitLoader currReader=null; File file = new File(filename); if(!file.isFile()){System.err.println("File not found: "+file.getName());System.exit(1);} if(format.equals("SAM") || format.equals("BAM")){ currReader = new SAMFileHitLoader(file,useNonUnique, econfig.getLoadType1Reads(), econfig.getLoadType2Reads(), econfig.getLoadRead2(), econfig.getLoadPairs()); }else if(format.equals("TOPSAM")){ currReader = new TophatFileHitLoader(file,useNonUnique, econfig.getLoadType1Reads(), econfig.getLoadType2Reads(), econfig.getLoadRead2(), econfig.getLoadPairs()); }else if(format.equals("NOVO")){ currReader = new NovoFileHitLoader(file,useNonUnique, econfig.getLoadType1Reads(), econfig.getLoadType2Reads(), econfig.getLoadPairs()); }else if(format.equals("BOWTIE")){ currReader = new BowtieFileHitLoader(file,useNonUnique, econfig.getLoadType1Reads(), econfig.getLoadType2Reads(), econfig.getLoadPairs()); }else if(format.equals("BED")){ currReader = new BEDFileHitLoader(file,useNonUnique, econfig.getLoadType1Reads(), econfig.getLoadType2Reads(), econfig.getLoadPairs()); }else if(format.equals("SCIDX") || format.equals("IDX")){ currReader = new IDXFileHitLoader(file,useNonUnique, econfig.getLoadType1Reads(), econfig.getLoadType2Reads(), econfig.getLoadPairs()); }else{ System.err.println("Unknown file format: "+format); System.exit(1); } return currReader; } }