package org.cellocad.MIT.misc; import org.cellocad.MIT.dnacompiler.Util; import java.util.*; public class ScarMap { public static void main(String[] args) { HashSet<String> all_txn_units = new HashSet<String>(); HashSet<String> output_txn_units = new HashSet<String>(); ArrayList<String> lines = Util.fileLines(args[0]); for(String line: lines) { List<String> tokens = Arrays.asList(line.split(",")); //System.out.println("current: " + tokens.toString()); ArrayList<String> txn_units = new ArrayList<String>(); ArrayList<String> this_output_txn_units = new ArrayList<String>(); String txn_unit = ""; for(int i=0; i<tokens.size(); ++i) { String s = tokens.get(i); if(s.contains("FP")) { continue; } if(!s.startsWith("p")) { txn_unit += s; //all_txn_units.add(txn_unit); txn_units.add(txn_unit); //System.out.println("txn_unit " + txn_unit); txn_unit = ""; } else { txn_unit += s + "."; } } sortGatesByCloningSlot(txn_units); ArrayList<String> txn_units_with_scars = addScars(txn_units); String tu_order = ""; for(String tu: txn_units_with_scars) { tu_order += tu + "\t"; } //System.out.println(tu_order); for(String tu: txn_units_with_scars) { all_txn_units.add(tu); } String construct_tus = "CONSTRUCT_TUS "; for(String tu: txn_units_with_scars) { construct_tus += tu + ","; } for(String tu: this_output_txn_units) { construct_tus += tu + ","; } System.out.println(construct_tus); } System.exit(-1); for(String s: all_txn_units) { System.out.println(s); } for(String s: output_txn_units) { System.out.println(s); } System.out.println(all_txn_units.size() + " " + output_txn_units.size()); } public static ArrayList<String> addScars(ArrayList<String> txn_units) { ArrayList<String> txn_units_with_5scar = new ArrayList<String>(); ArrayList<String> txn_units_with_scars = new ArrayList<String>(); for(int i=0; i<txn_units.size(); ++i) { String tu = txn_units.get(i); String repressor = tu.split("_")[1]; if(i==0) { String ws = "1_" + tu; txn_units_with_5scar.add(ws); } else { String ws = getCloningSlotPriorities().get(repressor) + "_" + tu; txn_units_with_5scar.add(ws); } } for(int i=0; i<txn_units_with_5scar.size()-1; ++i) { String tu = txn_units_with_5scar.get(i); String tu_next = txn_units_with_5scar.get(i+1); String scar3 = tu_next.split("_")[0]; String ws = tu + "_" + scar3; txn_units_with_scars.add(ws); } String last_tu = txn_units_with_5scar.get(txn_units_with_5scar.size()-1) + "_11"; txn_units_with_scars.add(last_tu); return txn_units_with_scars; } public static void sortGatesByCloningSlot(ArrayList<String> txn_units) { final HashMap<String, Integer> priorities = getCloningSlotPriorities(); Collections.sort(txn_units, new Comparator<String>() { public int compare(String g1, String g2){ if(!g1.contains("_") || !g2.contains("_")) { return 0; } String repressor1 = g1.split("_")[1]; String repressor2 = g2.split("_")[1]; if(!priorities.containsKey(repressor1) || !priorities.containsKey(repressor2)) { return 0; } Integer index1 = priorities.get(repressor1); Integer index2 = priorities.get(repressor2); if ( index1 > index2 ){ return 1; }else { return -1; } } } ); } public static HashMap<String, Integer> getCloningSlotPriorities() { HashMap<String, Integer> priorities = new HashMap<String, Integer>(); priorities.put("AmeR", 1); priorities.put("HlyIIR", 2); priorities.put("AmtR", 3); priorities.put("LitR", 4); priorities.put("IcaRA", 5); priorities.put("BetI", 6); priorities.put("QacR", 7); priorities.put("BM3R1", 8); priorities.put("PhlF", 9); priorities.put("SrpR", 10); return priorities; } }