diff --git a/FusionDetection/Evaluator/.gitignore b/FusionDetection/Evaluator/.gitignore new file mode 100644 index 0000000..89970dc --- /dev/null +++ b/FusionDetection/Evaluator/.gitignore @@ -0,0 +1,8 @@ +bin/ +CMakeCache* +CMakeFiles +CTestTestfile* +cmake_install.cmake +testout* +Makefile +*.a diff --git a/FusionDetection/Evaluator/src/BedCompare.cpp b/FusionDetection/Evaluator/src/BedCompare.cpp index 7b92bd1..e433510 100644 --- a/FusionDetection/Evaluator/src/BedCompare.cpp +++ b/FusionDetection/Evaluator/src/BedCompare.cpp @@ -1,4 +1,5 @@ #include "BedCompare.h" +#include bool isStrandKnown(string strand) { @@ -106,7 +107,7 @@ int getNewTruePos(const bedpe_t & tt, const bedpe_t & rr, const uint32_t & tt_p } -int transcript_compare(Bedpe & res, Bedpe & truth, int resolution, int max_diff, double & sensitivity, double & precision, pseudo_counts_t & pct) +int transcript_compare(Bedpe & res, Bedpe & truth, int resolution, int max_diff, double & sensitivity, double & precision, pseudo_counts_t & pct, evaluate_t & et) { int diff=resolution-1; if(diff<0) @@ -131,6 +132,7 @@ int transcript_compare(Bedpe & res, Bedpe & truth, int resolution, int max_diff, { bedpe_t tt=truth.getBedpe(i); bedpe_t rr=res.getBedpe(j); + //cerr<<"check " + tt.name + " " + rr.name< resSP; - bp.getSetPair(res, resSP, g); - vector truthSP; - bp.getSetPair(truth, truthSP, g); + bp.getSetPair(res, et.resSP, g); + bp.getSetPair(truth, et.truthSP, g); SetPair sp; - sp.merge(resSP); - sp.merge(truthSP); + sp.merge(et.resSP); + sp.merge(et.truthSP); //2.. - int num_res_gene=resSP.size()+pct.t_g+pct.f_g; - int num_truth_gene=truthSP.size()+pct.truth_g; + int num_res_gene=et.resSP.size()+pct.t_g+pct.f_g; + int num_truth_gene=et.truthSP.size()+pct.truth_g; + printf ("Num res gene: %d\n", num_res_gene); + printf ("Num truth gene: %d\n", num_truth_gene); et.num_res_gene=num_res_gene; @@ -333,7 +349,7 @@ int BedpeCompare::compare(Bedpe & res, Bedpe & truth, Gene & g, evaluate_t & et, } else //3 { - int num_inter_gene=sp.numIntersectSet(resSP, truthSP); + int num_inter_gene=sp.numIntersectSet(et.resSP, et.truthSP, et); num_inter_gene+=pct.t_g; //evaluate; double sens_g=(num_inter_gene+0.0)/num_truth_gene; diff --git a/FusionDetection/Evaluator/src/ExecuteByRule.cpp b/FusionDetection/Evaluator/src/ExecuteByRule.cpp index e777339..ca8d78f 100644 --- a/FusionDetection/Evaluator/src/ExecuteByRule.cpp +++ b/FusionDetection/Evaluator/src/ExecuteByRule.cpp @@ -32,6 +32,7 @@ int ExecuteByRule::execute(Bedpe & res, Bedpe & truth, char * outputfile, char * string tmpfile1=string(outputfile)+"."+std::to_string((long long int)i)+"."+"result.bedpe"; string tmpfile2=string(outputfile)+"."+std::to_string((long long int)i)+"."+"truth.bedpe"; string ruleString=rtv[i].rule; + printf("\nRule: %s\n", ruleString.c_str()); Bedpe outRes; Bedpe outTruth; cbr.cut(res, outRes, ruleString, tmpfile1); diff --git a/FusionDetection/Evaluator/src/MyTypes.h b/FusionDetection/Evaluator/src/MyTypes.h index eb838a8..a7da6bb 100644 --- a/FusionDetection/Evaluator/src/MyTypes.h +++ b/FusionDetection/Evaluator/src/MyTypes.h @@ -91,6 +91,12 @@ typedef struct } bedpe_t; +typedef struct +{ + vector ids1; + vector ids2; +} set_pair_t; + typedef struct { string name; @@ -109,14 +115,16 @@ typedef struct string precision_g; string f_g; + vector false_negatives; + vector false_positives; + vector true_positives; + vector gene_true_positives; + vector gene_false_positives; + vector gene_false_negatives; + vector resSP; + vector truthSP; } evaluate_t; -typedef struct -{ - vector ids1; - vector ids2; -} set_pair_t; - typedef struct { int t_t; diff --git a/FusionDetection/Evaluator/src/Printer.cpp b/FusionDetection/Evaluator/src/Printer.cpp index bd30c12..17a72d7 100644 --- a/FusionDetection/Evaluator/src/Printer.cpp +++ b/FusionDetection/Evaluator/src/Printer.cpp @@ -1,9 +1,9 @@ #include "Printer.h" -int Printer::print(vector & evals, char * outputfile, string gene_file, int base_resolution, int max_diff, string pseudo_counts, string version) +int Printer::print(vector & evals, string outputfile, string gene_file, int base_resolution, int max_diff, string pseudo_counts, string version, Gene g) { ofstream ofs; - ofs.open (outputfile, std::ofstream::out); + ofs.open ((char *)outputfile.c_str(), std::ofstream::out); ofs<<"#fusionToolEvaluator version "+version<name2 + "\t" + y->name2<<"\n"; + } + } + } + + for (int i = 0; i < et.gene_false_positives.size(); i++) + { + set_pair_t sp = et.gene_false_positives[i]; + for (int j = 0; j < sp.ids1.size(); j++) + { + gene_t *x = g.getGene(sp.ids1[j]); + for (int k = 0; k < sp.ids2.size(); k++) + { + gene_t *y = g.getGene(sp.ids2[k]); + ofs_fuse<<"G_FP\t" + x->name2 + "\t" + y->name2<<"\n"; + } + } + } + + for (int i = 0; i < et.gene_false_negatives.size(); i++) + { + set_pair_t sp = et.gene_false_negatives[i]; + for (int j = 0; j < sp.ids1.size(); j++) + { + gene_t *x = g.getGene(sp.ids1[j]); + for (int k = 0; k < sp.ids2.size(); k++) + { + gene_t *y = g.getGene(sp.ids2[k]); + ofs_fuse<<"G_FN\t" + x->name2 + "\t" + y->name2<<"\n"; + } + } + } + + /* + ofs<<"resSP\n"; + ofs< & evals, char * outputfile, string gene_file, int base_resolution, int max_diff, string pseudo_counts, string version); + int print(vector & evals, string outputfile, string gene_file, int base_resolution, int max_diff, string pseudo_counts, string version, Gene g); }; diff --git a/FusionDetection/Evaluator/src/SetPair.cpp b/FusionDetection/Evaluator/src/SetPair.cpp index 438085a..3c20950 100644 --- a/FusionDetection/Evaluator/src/SetPair.cpp +++ b/FusionDetection/Evaluator/src/SetPair.cpp @@ -67,22 +67,40 @@ int SetPair::merge(vector & spv) } //use after merge -int SetPair::numIntersectSet(vector & spv1,vector & spv2) +int SetPair::numIntersectSet(vector & res,vector & truth, evaluate_t & et) { - vector intersect(spv1.size(),0); - for(int i=0;i found(truth.size(),0); + vector correct(res.size(),0); + + for(int i=0;i0 && inter2>0) - intersect[i]=1; + int inter1=numIntersect(res[i].ids1, truth[j].ids1); + int inter2=numIntersect(res[i].ids2, truth[j].ids2); + if(inter1>0 && inter2>0) { + found[j]=1; + correct[i]=1; + et.gene_true_positives.push_back(truth[j]); + } } } + int num=0; - for(int i=0;i & spv); - int numIntersectSet(vector & spv1,vector & spv2); + int numIntersectSet(vector & spv1,vector & spv2, evaluate_t & et); }; diff --git a/FusionDetection/Evaluator/src/main.cpp b/FusionDetection/Evaluator/src/main.cpp index 86d1aa1..7cf787b 100644 --- a/FusionDetection/Evaluator/src/main.cpp +++ b/FusionDetection/Evaluator/src/main.cpp @@ -181,7 +181,7 @@ int main(int argc, char * argv[]) cerr<<"printing evaluation results..."<