diff --git a/src/main/java/proteomics/ECL2.java b/src/main/java/proteomics/ECL2.java index 1010fad..c626a9f 100644 --- a/src/main/java/proteomics/ECL2.java +++ b/src/main/java/proteomics/ECL2.java @@ -166,7 +166,7 @@ private ECL2(String parameter_path, String spectra_path, String dbName) throws I } ExecutorService thread_pool = Executors.newFixedThreadPool(thread_num); Search search_obj = new Search(build_index_obj, parameter_map, ms1Tolerance, leftInverseMs1Tolerance, rightInverseMs1Tolerance, ms1ToleranceUnit); - List> taskList = new LinkedList<>(); + ArrayList> taskList = new ArrayList<>(preSpectra.getUsefulSpectraNum() + 10); Connection sqlConnection = DriverManager.getConnection(sqlPath); Statement sqlStatement = sqlConnection.createStatement(); ResultSet sqlResultSet = sqlStatement.executeQuery("SELECT scanId, precursorCharge, massWithoutLinker, precursorMass FROM spectraTable"); @@ -188,8 +188,8 @@ private ECL2(String parameter_path, String spectra_path, String dbName) throws I int count = 0; while (count < totalCount) { // record search results and delete finished ones. - List> toBeDeleteTaskList = new LinkedList<>(); for (Future task : taskList) { + List> toBeDeleteTaskList = new ArrayList<>(totalCount - count); if (task.isDone()) { if (task.get()) { ++resultCount; @@ -201,6 +201,7 @@ private ECL2(String parameter_path, String spectra_path, String dbName) throws I } count += toBeDeleteTaskList.size(); taskList.removeAll(toBeDeleteTaskList); + taskList.trimToSize(); int progress = count * 20 / totalCount; if (progress != lastProgress) { @@ -270,12 +271,12 @@ private static void saveTargetResult(Map result, Map entryList = new LinkedList<>(result.values()); + List entryList = new ArrayList<>(result.values()); entryList.sort(Comparator.reverseOrder()); for (CalFDR.Entry entry : entryList) { sqlResultSet = sqlStatement.executeQuery(String.format(Locale.US, "SELECT scanNum, precursorMz, precursorMass, rt, isotopeCorrectionNum, ms1PearsonCorrelationCoefficient, precursorCharge, theoMass, score, deltaC, ppm, seq1, linkSite1, seq2, linkSite2, proId1, proId2, eValue, mgfTitle, candidateNum, pointCount, rSquare, slope, intercept, startIdx, endIdx, chainScore1, chainRank1, chainScore2, chainRank2, hitType, clType FROM spectraTable WHERE scanId='%s'", entry.scanId)); if (sqlResultSet.next()) { - List proAnnotationList1 = new LinkedList<>(); + List proAnnotationList1 = new ArrayList<>(); for (String s : sqlResultSet.getString("proId1").split(";")) { if (s.startsWith("DECOY_")) { proAnnotationList1.add("DECOY"); @@ -283,7 +284,7 @@ private static void saveTargetResult(Map result, Map proAnnotationList2 = new LinkedList<>(); + List proAnnotationList2 = new ArrayList<>(); for (String s : sqlResultSet.getString("proId2").split(";")) { if (s.startsWith("DECOY_")) { proAnnotationList2.add("DECOY"); diff --git a/src/main/java/proteomics/Spectrum/PreSpectra.java b/src/main/java/proteomics/Spectrum/PreSpectra.java index 625731c..3f0262e 100644 --- a/src/main/java/proteomics/Spectrum/PreSpectra.java +++ b/src/main/java/proteomics/Spectrum/PreSpectra.java @@ -28,6 +28,7 @@ public class PreSpectra { private static final Pattern scanNumPattern3 = Pattern.compile("^[^.]+\\.([0-9]+)\\.[0-9]+\\.[0-9]"); private Map>> scanDevEntryMap = new HashMap<>(); + private int usefulSpectraNum = 0; public PreSpectra(JMzReader spectra_parser, double ms1Tolerance, double leftInverseMs1Tolerance, double rightInverseMs1Tolerance, int ms1ToleranceUnit, BuildIndex build_index_obj, Map parameter_map, String ext, String sqlPath) throws MzXMLParsingException, IOException, SQLException, JMzReaderException { Set debug_scan_num_set = new HashSet<>(); @@ -52,7 +53,6 @@ public PreSpectra(JMzReader spectra_parser, double ms1Tolerance, double leftInve PreparedStatement sqlPrepareStatement = sqlConnection.prepareStatement("INSERT INTO spectraTable (scanNum, scanId, precursorCharge, precursorMz, precursorMass, rt, massWithoutLinker, mgfTitle, isotopeCorrectionNum, ms1PearsonCorrelationCoefficient) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); sqlConnection.setAutoCommit(false); - int usefulSpectraNum = 0; Iterator spectrumIterator = spectra_parser.getSpectrumIterator(); String parentId = null; @@ -154,6 +154,10 @@ public Map>> getScanDevEntryMap() { return scanDevEntryMap; } + public int getUsefulSpectraNum() { + return usefulSpectraNum; + } + private Entry getIsotopeCorrectionNum(double precursorMz, int charge, double inverseCharge, TreeMap parentPeakList, double ms1Tolerance, double leftInverseMs1Tolerance, double rightInverseMs1Tolerance, int ms1ToleranceUnit, IsotopeDistribution isotopeDistribution, TreeMap> chargeDevEntryMap) { Entry entry = new Entry(0, 0); double leftTol = ms1Tolerance * 2; diff --git a/src/main/java/proteomics/Types/SparseVector.java b/src/main/java/proteomics/Types/SparseVector.java index 08fc332..59dd9ae 100644 --- a/src/main/java/proteomics/Types/SparseVector.java +++ b/src/main/java/proteomics/Types/SparseVector.java @@ -43,13 +43,13 @@ public Set getIdxSet() { } double getMaxValue() { - List intensity_list = new LinkedList<>(sparse_vector.values()); + List intensity_list = new ArrayList<>(sparse_vector.values()); intensity_list.sort(Collections.reverseOrder()); return intensity_list.get(0); } double getMinValue() { - List intensity_list = new LinkedList<>(sparse_vector.values()); + List intensity_list = new ArrayList<>(sparse_vector.values()); Collections.sort(intensity_list); return intensity_list.get(0); }