Skip to content

Commit

Permalink
Change cal_evalue to a parameter.
Browse files Browse the repository at this point in the history
  • Loading branch information
fcyu committed May 23, 2017
1 parent 27741b5 commit 8e6d5d5
Show file tree
Hide file tree
Showing 7 changed files with 51 additions and 38 deletions.
27 changes: 15 additions & 12 deletions src/main/java/proteomics/ECL2.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@

public class ECL2 {

public static final boolean cal_evalue = true;
public static final double delta_c_t = 0;
public static final int score_point_t = 15000;
public static final boolean flankingPeaks = true;
Expand Down Expand Up @@ -50,6 +49,10 @@ public static void main(String[] args) {
Parameter parameter = new Parameter(parameter_path);
Map<String, String> parameter_map = parameter.returnParameterMap();
int max_common_ion_charge = Integer.valueOf(parameter_map.get("max_common_ion_charge"));
boolean cal_evalue = true;
if (parameter_map.containsKey("cal_evalue") && parameter_map.get("cal_evalue").trim().contentEquals("0")) {
cal_evalue = false;
}

debug = parameter_map.get("debug").contentEquals("1");
dev = parameter_map.get("dev").contentEquals("1");
Expand Down Expand Up @@ -109,7 +112,7 @@ public static void main(String[] args) {
Search search_obj = new Search(build_index_obj, parameter_map);
List<Future<FinalResultEntry>> temp_result_list = new LinkedList<>();
for (int scanNum : scanNumArray) {
temp_result_list.add(thread_pool.submit(new SearchWrap(search_obj, num_spectrum_map.get(scanNum), build_index_obj, mass_tool_obj, max_common_ion_charge, build_index_obj.getSeqProMap())));
temp_result_list.add(thread_pool.submit(new SearchWrap(search_obj, num_spectrum_map.get(scanNum), build_index_obj, mass_tool_obj, max_common_ion_charge, build_index_obj.getSeqProMap(), cal_evalue)));
}

// check progress every minute
Expand Down Expand Up @@ -175,22 +178,22 @@ public static void main(String[] args) {
// save result
logger.info("Estimating q-value...");
List<List<FinalResultEntry>> picked_result = pickResult(final_search_results);
CalFDR cal_fdr_obj = new CalFDR(picked_result.get(0));
List<FinalResultEntry> intra_result = cal_fdr_obj.includeStats();
CalFDR cal_fdr_obj = new CalFDR(picked_result.get(0), cal_evalue);
List<FinalResultEntry> intra_result = cal_fdr_obj.includeStats(cal_evalue);
intra_result.sort(Collections.reverseOrder());
cal_fdr_obj = new CalFDR(picked_result.get(1));
List<FinalResultEntry> inter_result = cal_fdr_obj.includeStats();
cal_fdr_obj = new CalFDR(picked_result.get(1), cal_evalue);
List<FinalResultEntry> inter_result = cal_fdr_obj.includeStats(cal_evalue);
inter_result.sort(Collections.reverseOrder());
logger.info("Saving results...");
saveTargetResult(intra_result, build_index_obj.getProAnnotateMap(), spectra_path, true);
saveTargetResult(inter_result, build_index_obj.getProAnnotateMap(), spectra_path, false);
saveDecoyResult(intra_result, build_index_obj.getProAnnotateMap(), spectra_path, true);
saveDecoyResult(inter_result, build_index_obj.getProAnnotateMap(), spectra_path, false);
saveTargetResult(intra_result, build_index_obj.getProAnnotateMap(), spectra_path, true, cal_evalue);
saveTargetResult(inter_result, build_index_obj.getProAnnotateMap(), spectra_path, false, cal_evalue);
saveDecoyResult(intra_result, build_index_obj.getProAnnotateMap(), spectra_path, true, cal_evalue);
saveDecoyResult(inter_result, build_index_obj.getProAnnotateMap(), spectra_path, false, cal_evalue);
}
logger.info("Done.");
}

private static void saveTargetResult(List<FinalResultEntry> result, Map<String, String> pro_annotate_map, String id_file_name, boolean is_intra) {
private static void saveTargetResult(List<FinalResultEntry> result, Map<String, String> pro_annotate_map, String id_file_name, boolean is_intra, boolean cal_evalue) {
try {
BufferedWriter writer;
if (is_intra) {
Expand Down Expand Up @@ -234,7 +237,7 @@ private static void saveTargetResult(List<FinalResultEntry> result, Map<String,
}
}

private static void saveDecoyResult(List<FinalResultEntry> result, Map<String, String> pro_annotate_map, String id_file_name, boolean is_intra) {
private static void saveDecoyResult(List<FinalResultEntry> result, Map<String, String> pro_annotate_map, String id_file_name, boolean is_intra, boolean cal_evalue) {
try {
BufferedWriter writer;
if (is_intra) {
Expand Down
18 changes: 13 additions & 5 deletions src/main/java/proteomics/Search/Search.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ public class Search {
private int[] C13_correction_range;
private Map<Integer, Long> bin_candidate_num_map;
final float single_chain_t;
private final boolean cal_evalue;

/////////////////////////////////////////public methods////////////////////////////////////////////////////////////
public Search(BuildIndex build_index_obj, Map<String, String> parameter_map) {
Expand All @@ -39,12 +40,19 @@ public Search(BuildIndex build_index_obj, Map<String, String> parameter_map) {
ms1_tolerance = Float.valueOf(parameter_map.get("ms1_tolerance"));
bin_seq_map = build_index_obj.getMassBinSeqMap();
bin_candidate_num_map = build_index_obj.getBinCandidateNumMap();

if (parameter_map.containsKey("single_chain_t")) {
single_chain_t = Float.valueOf(parameter_map.get("single_chain_t"));
} else {
single_chain_t = 0.1f;
}

if (parameter_map.containsKey("cal_evalue") && parameter_map.get("cal_evalue").trim().contentEquals("0")) {
cal_evalue = false;
} else {
cal_evalue = true;
}

String[] temp = parameter_map.get("C13_correction_range").split(",");
C13_correction_range = new int[temp.length];
for (int i = 0; i < temp.length; ++i) {
Expand Down Expand Up @@ -112,7 +120,7 @@ ResultEntry doSearch(SpectrumEntry spectrumEntry, SparseVector xcorrPL, int spec
int max_v = build_index_obj.massToBin(max_mass) + 1;

long candidate_num = 0;
ResultEntry resultEntry = new ResultEntry(spectrumEntry.spectrum_id, spectrumEntry.precursor_mz, spectrumEntry.precursor_mass, spectrumEntry.rt, spectrumEntry.precursor_charge);
ResultEntry resultEntry = new ResultEntry(spectrumEntry.spectrum_id, spectrumEntry.precursor_mz, spectrumEntry.precursor_mass, spectrumEntry.rt, spectrumEntry.precursor_charge, cal_evalue);
for (int idx_1 : binChainMap.keySet()) {
if (idx_1 > max_v) {
break;
Expand Down Expand Up @@ -181,7 +189,7 @@ ResultEntry doSearch(SpectrumEntry spectrumEntry, SparseVector xcorrPL, int spec
}
}

if (ECL2.cal_evalue && (resultEntry.getScoreCount() < ECL2.score_point_t)) {
if (cal_evalue && (resultEntry.getScoreCount() < ECL2.score_point_t)) {
for (double s1 : chain_score_entry_1.getScoreList()) {
for (double s2 : chain_score_entry_2.getScoreList()) {
resultEntry.addToScoreHistogram(s1 + s2);
Expand Down Expand Up @@ -285,7 +293,7 @@ public FinalResultEntry convertResultEntry(int scanNum, ResultEntry result_entry
String final_seq_1 = addFixMod(chain_seq_1, result_entry.getLinkSite1());
String final_seq_2 = addFixMod(chain_seq_2, result_entry.getLinkSite2());

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());
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(), cal_evalue);
}

private void linearScan(SpectrumEntry spectrumEntry, SparseVector xcorrPL, int specMaxBinIdx, ChainEntry chainEntry, int binInx, TreeMap<Integer, ChainResultEntry> binChainMap, List<DebugEntry> debugEntryList, Map<String, Double> devChainScoreMap) {
Expand All @@ -308,7 +316,7 @@ private void linearScan(SpectrumEntry spectrumEntry, SparseVector xcorrPL, int s
if (dot_product > single_chain_t) {
if (binChainMap.containsKey(binInx)) {
ChainResultEntry chain_result_entry = binChainMap.get(binInx);
chain_result_entry.addToScoreList(dot_product);
chain_result_entry.addToScoreList(dot_product, cal_evalue);
if (dot_product > chain_result_entry.getScore()) {
chain_result_entry.setSecondScore(chain_result_entry.getScore());
chain_result_entry.setSecondSeq(chain_result_entry.getSeq());
Expand All @@ -321,7 +329,7 @@ private void linearScan(SpectrumEntry spectrumEntry, SparseVector xcorrPL, int s
}
} else {
ChainResultEntry chain_result_entry = new ChainResultEntry();
chain_result_entry.addToScoreList(dot_product);
chain_result_entry.addToScoreList(dot_product, cal_evalue);
chain_result_entry.setSeq(chainEntry.seq);
chain_result_entry.setLinkSite(link_site_1);
chain_result_entry.setScore(dot_product);
Expand Down
6 changes: 4 additions & 2 deletions src/main/java/proteomics/Search/SearchWrap.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,15 +26,17 @@ public class SearchWrap implements Callable<FinalResultEntry> {
private final int max_common_ion_charge;
private final PreSpectrum preSpectrumObj;
private final Map<String, Set<String>> seqProMap;
private final boolean cal_evalue;

public SearchWrap(Search search_obj, SpectrumEntry spectrumEntry, BuildIndex build_index_obj, MassTool mass_tool_obj, int max_common_ion_charge, Map<String, Set<String>> seqProMap) {
public SearchWrap(Search search_obj, SpectrumEntry spectrumEntry, BuildIndex build_index_obj, MassTool mass_tool_obj, int max_common_ion_charge, Map<String, Set<String>> seqProMap, boolean cal_evalue) {
this.search_obj = search_obj;
this.spectrumEntry = spectrumEntry;
this.build_index_obj = build_index_obj;
this.mass_tool_obj = mass_tool_obj;
this.max_common_ion_charge = max_common_ion_charge;
preSpectrumObj = new PreSpectrum(mass_tool_obj);
this.seqProMap = seqProMap;
this.cal_evalue = cal_evalue;
}

@Override
Expand Down Expand Up @@ -74,7 +76,7 @@ public FinalResultEntry call() {
}
}
if (1 - (resultEntry.getSecondScore() / resultEntry.getScore()) > ECL2.delta_c_t) {
if (ECL2.cal_evalue) {
if (cal_evalue) {
float originalTolerance;
if (search_obj.ms1_tolerance_unit == 1) {
originalTolerance = resultEntry.spectrum_mass * search_obj.ms1_tolerance * 1e-6f;
Expand Down
6 changes: 2 additions & 4 deletions src/main/java/proteomics/Types/ChainResultEntry.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package proteomics.Types;

import proteomics.ECL2;

import java.util.LinkedList;
import java.util.List;

Expand All @@ -28,8 +26,8 @@ public void setSecondSeq(String second_seq) {
secondPtmFreeSeq = second_seq.replaceAll("[^A-Znc]", "");
}

public void addToScoreList(double score) {
if (ECL2.cal_evalue) {
public void addToScoreList(double score, boolean cal_evalue) {
if (cal_evalue) {
score_list.add(score);
}
}
Expand Down
9 changes: 6 additions & 3 deletions src/main/java/proteomics/Types/FinalResultEntry.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package proteomics.Types;

import proteomics.ECL2;

public class FinalResultEntry implements Comparable<FinalResultEntry> {

Expand Down Expand Up @@ -44,7 +43,9 @@ public class FinalResultEntry implements Comparable<FinalResultEntry> {
public double chain_score_2;
public int chain_rank_2;

public FinalResultEntry(int scan_num, String spectrum_id, int rank, int charge, float spectrum_mz, float spectrum_mass, float peptide_mass, float rt, float ppm, double score, double delta_c, String seq_1, int link_site_1, String pro_id_1, String seq_2, int link_site_2, String pro_id_2, String cl_type, int hit_type, int C13_correction, double e_value, int point_count, float r_square, float slope, float intercept, int start_idx, int end_idx, double chain_score_1, int chain_rank_1, double chain_score_2, int chain_rank_2, long candidate_num) {
private final boolean cal_evalue;

public FinalResultEntry(int scan_num, String spectrum_id, int rank, int charge, float spectrum_mz, float spectrum_mass, float peptide_mass, float rt, float ppm, double score, double delta_c, String seq_1, int link_site_1, String pro_id_1, String seq_2, int link_site_2, String pro_id_2, String cl_type, int hit_type, int C13_correction, double e_value, int point_count, float r_square, float slope, float intercept, int start_idx, int end_idx, double chain_score_1, int chain_rank_1, double chain_score_2, int chain_rank_2, long candidate_num, boolean cal_evalue) {
this.scan_num = scan_num;
this.spectrum_id = spectrum_id;
this.rank = rank;
Expand Down Expand Up @@ -92,10 +93,12 @@ public FinalResultEntry(int scan_num, String spectrum_id, int rank, int charge,
this.candidate_num = candidate_num;

toString = scan_num + "-" + seq_1 + "-" + link_site_1 + "-" + seq_2 + link_site_2;

this.cal_evalue = cal_evalue;
}

public int compareTo(FinalResultEntry other) {
if (ECL2.cal_evalue) {
if (cal_evalue) {
if (this.negative_log10_evalue > other.negative_log10_evalue) {
return 1;
} else if (this.negative_log10_evalue < other.negative_log10_evalue) {
Expand Down
6 changes: 3 additions & 3 deletions src/main/java/proteomics/Types/ResultEntry.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import proteomics.ECL2;


public class ResultEntry{

Expand Down Expand Up @@ -38,8 +38,8 @@ public class ResultEntry{
private double chain_score_2;
private int chain_rank_2;

public ResultEntry(String spectrum_id, float spectrum_mz, float spectrum_mass, float rt, int charge) {
if (ECL2.cal_evalue) {
public ResultEntry(String spectrum_id, float spectrum_mz, float spectrum_mass, float rt, int charge, boolean cal_evalue) {
if (cal_evalue) {
score_histogram = new int[(int) Math.round(max_score / histogram_bin_size) + 1]; // start from zero score.
}
this.spectrum_id = spectrum_id;
Expand Down
17 changes: 8 additions & 9 deletions src/main/java/proteomics/Validation/CalFDR.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package proteomics.Validation;


import proteomics.ECL2;
import proteomics.Types.FinalResultEntry;

import java.util.List;
Expand All @@ -15,17 +14,17 @@ public class CalFDR {
private float[] qvalue_array = null;
private List<FinalResultEntry> results;

public CalFDR(List<FinalResultEntry> results) {
public CalFDR(List<FinalResultEntry> results, boolean cal_evalue) {
this.results = results;
if (ECL2.cal_evalue) {
if (cal_evalue) {
precision = 0.1f;
} else {
precision = 0.001f;
}

// find the max score
for (FinalResultEntry entry : results) {
if (ECL2.cal_evalue) {
if (cal_evalue) {
if (entry.negative_log10_evalue > max_score) {
max_score = entry.negative_log10_evalue;
}
Expand All @@ -52,23 +51,23 @@ public CalFDR(List<FinalResultEntry> results) {
for (FinalResultEntry re : results) {
if (re.hit_type == 1) {
int idx;
if (ECL2.cal_evalue) {
if (cal_evalue) {
idx = (int) Math.floor((re.negative_log10_evalue - min_score) / precision);
} else {
idx = (int) Math.floor((re.score - min_score) / precision);
}
++decoy_count_vector[idx];
} else if (re.hit_type == 0) {
int idx;
if (ECL2.cal_evalue) {
if (cal_evalue) {
idx = (int) Math.floor((re.negative_log10_evalue - min_score) / precision);
} else {
idx = (int) Math.floor((re.score - min_score) / precision);
}
++target_count_vector[idx];
} else {
int idx;
if (ECL2.cal_evalue) {
if (cal_evalue) {
idx = (int) Math.floor((re.negative_log10_evalue - min_score) / precision);
} else {
idx = (int) Math.floor((re.score - min_score) / precision);
Expand Down Expand Up @@ -116,10 +115,10 @@ public CalFDR(List<FinalResultEntry> results) {
}
}

public List<FinalResultEntry> includeStats() {
public List<FinalResultEntry> includeStats(boolean cal_evalue) {
for (FinalResultEntry re : results) {
if (re.hit_type == 0) {
if (ECL2.cal_evalue) {
if (cal_evalue) {
int idx = (int) Math.floor((re.negative_log10_evalue - min_score) / precision);
re.qvalue = qvalue_array[idx];
} else {
Expand Down

0 comments on commit 8e6d5d5

Please sign in to comment.