diff --git a/src/main/java/proteomics/Search/Search.java b/src/main/java/proteomics/Search/Search.java index 3fb2f16..3cc6bf5 100644 --- a/src/main/java/proteomics/Search/Search.java +++ b/src/main/java/proteomics/Search/Search.java @@ -49,7 +49,7 @@ public Search(BuildIndex build_index_obj, Map parameter_map) { Arrays.sort(C13_correction_range); } - ResultEntry doSearch(SpectrumEntry spectrumEntry, SparseVector xcorrPL, int maxBinIdx) { + ResultEntry doSearch(SpectrumEntry spectrumEntry, SparseVector xcorrPL, int specMaxBinIdx) { int max_chain_bin_idx = Math.min(build_index_obj.massToBin(spectrumEntry.precursor_mass + C13_correction_range[C13_correction_range.length - 1] * 1.00335483f - build_index_obj.linker_mass) + 1 - bin_seq_map.firstKey(), bin_seq_map.lastKey()); int min_chain_bin_idx = bin_seq_map.firstKey(); @@ -78,7 +78,7 @@ ResultEntry doSearch(SpectrumEntry spectrumEntry, SparseVector xcorrPL, int maxB if (spectrumEntry.precursor_mass >= build_index_obj.binToLeftMass(binIdx - 1) + min_additional_mass + C13_correction_range[0] * 1.00335483f - leftMs1Tol) { for (String seq : bin_seq_map.get(binIdx)) { ChainEntry chainEntry = chain_entry_map.get(seq); - linearScan(spectrumEntry, xcorrPL, maxBinIdx, chainEntry, binIdx, binChainMap, debugEntryList, devChainScoreMap); + linearScan(spectrumEntry, xcorrPL, specMaxBinIdx, chainEntry, binIdx, binChainMap, debugEntryList, devChainScoreMap); } } else { break; @@ -284,10 +284,10 @@ public FinalResultEntry convertResultEntry(int scanNum, ResultEntry result_entry return new FinalResultEntry(scanNum, result_entry.spectrum_id, rank, result_entry.charge, result_entry.spectrum_mz, result_entry.spectrum_mass, theo_mass, result_entry.rt, ppm, result_entry.getScore(), delta_c, final_seq_1, result_entry.getLinkSite1(), pro_1, final_seq_2, result_entry.getLinkSite2(), pro_2, cl_type, hit_type, C13_Diff_num, result_entry.getEValue(), result_entry.getScoreCount(), result_entry.getRSquare(), result_entry.getSlope(), result_entry.getIntercept(), result_entry.getStartIdx(), result_entry.getEndIdx(), result_entry.getChainScore1(), result_entry.getChainRank1(), result_entry.getChainScore2(), result_entry.getChainRank2(), result_entry.getCandidateNum()); } - private void linearScan(SpectrumEntry spectrumEntry, SparseVector xcorrPL, int maxBinIdx, ChainEntry chainEntry, int binInx, TreeMap binChainMap, List debugEntryList, Map devChainScoreMap) { + private void linearScan(SpectrumEntry spectrumEntry, SparseVector xcorrPL, int specMaxBinIdx, ChainEntry chainEntry, int binInx, TreeMap binChainMap, List debugEntryList, Map devChainScoreMap) { for (short link_site_1 : chainEntry.link_site_set) { int precursor_charge = spectrumEntry.precursor_charge; - SparseBooleanVector theo_mz = mass_tool_obj.buildTheoVector(chainEntry.seq, link_site_1, spectrumEntry.precursor_mass - chainEntry.chain_mass, precursor_charge, max_common_ion_charge, maxBinIdx); + SparseBooleanVector theo_mz = mass_tool_obj.buildTheoVector(chainEntry.seq, link_site_1, spectrumEntry.precursor_mass - chainEntry.chain_mass, precursor_charge, max_common_ion_charge, specMaxBinIdx); // Calculate dot produce double dot_product = theo_mz.dot(xcorrPL) * 0.005; diff --git a/src/main/java/proteomics/Search/SearchWrap.java b/src/main/java/proteomics/Search/SearchWrap.java index b731967..8d3a41f 100644 --- a/src/main/java/proteomics/Search/SearchWrap.java +++ b/src/main/java/proteomics/Search/SearchWrap.java @@ -40,7 +40,7 @@ public SearchWrap(Search search_obj, SpectrumEntry spectrumEntry, BuildIndex bui @Override public FinalResultEntry call() { SparseVector xcorrPL = preSpectrumObj.preSpectrum(spectrumEntry.originalPlMap, spectrumEntry.precursor_mass, spectrumEntry.scan_num); - int maxBinIdx = xcorrPL.getMaxIdx(); + int specMaxBinIdx = xcorrPL.getMaxIdx(); if (ECL2.debug) { try (BufferedWriter writer = new BufferedWriter(new FileWriter(spectrumEntry.scan_num + ".xcorr.spectrum.csv"))) { writer.write("bin_idx,intensity\n"); @@ -53,11 +53,11 @@ public FinalResultEntry call() { System.exit(1); } } - ResultEntry resultEntry = search_obj.doSearch(spectrumEntry, xcorrPL, maxBinIdx); + ResultEntry resultEntry = search_obj.doSearch(spectrumEntry, xcorrPL, specMaxBinIdx); if (resultEntry != null) { if (ECL2.debug) { - SparseBooleanVector chainVector1 = mass_tool_obj.buildTheoVector(resultEntry.getChain1(), (short) resultEntry.getLinkSite1(), spectrumEntry.precursor_mass - (float) (mass_tool_obj.calResidueMass(resultEntry.getChain1()) + MassTool.H2O), spectrumEntry.precursor_charge, max_common_ion_charge, maxBinIdx); - SparseBooleanVector chainVector2 = mass_tool_obj.buildTheoVector(resultEntry.getChain2(), (short) resultEntry.getLinkSite2(), spectrumEntry.precursor_mass - (float) (mass_tool_obj.calResidueMass(resultEntry.getChain2()) + MassTool.H2O), spectrumEntry.precursor_charge, max_common_ion_charge, maxBinIdx); + SparseBooleanVector chainVector1 = mass_tool_obj.buildTheoVector(resultEntry.getChain1(), (short) resultEntry.getLinkSite1(), spectrumEntry.precursor_mass - (float) (mass_tool_obj.calResidueMass(resultEntry.getChain1()) + MassTool.H2O), spectrumEntry.precursor_charge, max_common_ion_charge, specMaxBinIdx); + SparseBooleanVector chainVector2 = mass_tool_obj.buildTheoVector(resultEntry.getChain2(), (short) resultEntry.getLinkSite2(), spectrumEntry.precursor_mass - (float) (mass_tool_obj.calResidueMass(resultEntry.getChain2()) + MassTool.H2O), spectrumEntry.precursor_charge, max_common_ion_charge, specMaxBinIdx); try (BufferedWriter writer = new BufferedWriter(new FileWriter(spectrumEntry.scan_num + ".chain.spectrum.csv"))) { writer.write(resultEntry.getChain1() + " bin idx\n"); for (int idx : chainVector1.getIdxSet()) { diff --git a/src/main/java/proteomics/TheoSeq/MassTool.java b/src/main/java/proteomics/TheoSeq/MassTool.java index 3744c08..caee803 100644 --- a/src/main/java/proteomics/TheoSeq/MassTool.java +++ b/src/main/java/proteomics/TheoSeq/MassTool.java @@ -96,7 +96,7 @@ public Map getMassTable() { return mass_table; } - public SparseBooleanVector buildTheoVector(String seq, short linkSite, float additional_mass, int precursor_charge, int max_common_ion_charge, int maxBinIdx) { + public SparseBooleanVector buildTheoVector(String seq, short linkSite, float additional_mass, int precursor_charge, int max_common_ion_charge, int specMaxBinIdx) { linkSite = (short) Math.max(1, linkSite); int localMaxCharge = Math.min(max_charge, Math.max(precursor_charge - 1, 1)); @@ -123,14 +123,14 @@ public SparseBooleanVector buildTheoVector(String seq, short linkSite, float add if (i < linkSite) { for (int charge = 1; charge <= localMaxCommonIonCharge; ++charge) { int idx = mzToBin(bIonMass / charge + 1.00727646688); - if (idx <= maxBinIdx) { + if (idx <= specMaxBinIdx) { outputVector.put(idx); } } } else { for (int charge = 1; charge <= localMaxCharge; ++charge) { int idx = mzToBin((bIonMass + additional_mass) / charge + 1.00727646688); - if (idx <= maxBinIdx) { + if (idx <= specMaxBinIdx) { outputVector.put(idx); } } @@ -140,7 +140,7 @@ public SparseBooleanVector buildTheoVector(String seq, short linkSite, float add bIonMass += mass_table.get(aaArray[aaArray.length - 2].aa) + aaArray[aaArray.length - 2].delta_mass + mass_table.get(aaArray[aaArray.length - 1].aa) + aaArray[aaArray.length - 1].delta_mass; for (int charge = 1; charge <= localMaxCharge; ++charge) { int idx = mzToBin((bIonMass + additional_mass) / charge + 1.00727646688); - if (idx <= maxBinIdx) { + if (idx <= specMaxBinIdx) { outputVector.put(idx); // for the fragment containing all amino acids, the additional mass is always included. } } @@ -150,7 +150,7 @@ public SparseBooleanVector buildTheoVector(String seq, short linkSite, float add double yIonMass = bIonMass + H2O; for (int charge = 1; charge <= localMaxCharge; ++charge) { int idx = mzToBin((yIonMass + additional_mass) / charge + 1.00727646688); - if (idx <= maxBinIdx) { + if (idx <= specMaxBinIdx) { outputVector.put(idx); // for the fragment containing all amino acids, the additional mass is always included. } } @@ -159,14 +159,14 @@ public SparseBooleanVector buildTheoVector(String seq, short linkSite, float add if (1 >= linkSite) { for (int charge = 1; charge <= localMaxCommonIonCharge; ++charge) { int idx = mzToBin(yIonMass / charge + 1.00727646688); - if (idx <= maxBinIdx) { + if (idx <= specMaxBinIdx) { outputVector.put(idx); } } } else { for (int charge = 1; charge <= localMaxCharge; ++charge) { int idx = mzToBin((yIonMass + additional_mass) / charge + 1.00727646688); - if (idx <= maxBinIdx) { + if (idx <= specMaxBinIdx) { outputVector.put(idx); } } @@ -177,14 +177,14 @@ public SparseBooleanVector buildTheoVector(String seq, short linkSite, float add if (i >= linkSite) { // caution: here, it is different from b-ion for (int charge = 1; charge <= localMaxCommonIonCharge; ++charge) { int idx = mzToBin(yIonMass / charge + 1.00727646688); - if (idx <= maxBinIdx) { + if (idx <= specMaxBinIdx) { outputVector.put(idx); } } } else { for (int charge = 1; charge <= localMaxCharge; ++charge) { int idx = mzToBin((yIonMass + additional_mass) / charge + 1.00727646688); - if (idx <= maxBinIdx) { + if (idx <= specMaxBinIdx) { outputVector.put(idx); } }