openModeller
Version 1.4.0
|
00001 00031 #include <TestHarness.h> 00032 #include <openmodeller/Occurrences.hh> 00033 #include <openmodeller/Sample.hh> 00034 00035 #include <rules_range.hh> 00036 #include <rules_negrange.hh> 00037 #include <rules_logit.hh> 00038 #include <test_rules_defs.hh> 00039 #include <test_rules_evaluate_data.cpp> 00040 00041 typedef ExtendedDummyRule<RangeRule> ExtRangeRule; 00042 typedef ExtendedDummyRule<NegatedRangeRule> ExtNegatedRangeRule; 00043 typedef ExtendedDummyRule<LogitRule> ExtLogitRule; 00044 00045 00046 #define eps 10e-6 00047 00048 OccurrencesPtr getSampleSet(int hardcodedSamplesIndex, int *dim) 00049 { 00050 HardcodedSample * data = SamplesSet + hardcodedSamplesIndex; 00051 OccurrencesPtr occs ( new OccurrencesImpl("") ); 00052 00053 *dim = data->dimension; 00054 00055 int valDim = data->dimension + 1; 00056 00057 for (int i = 0; i < data->resamples; ++i) 00058 { 00059 Scalar pred = *(data->values + (valDim * i)); 00060 Sample s(data->dimension, data->values + (valDim * i) + 1); 00061 OccurrencePtr oc( new OccurrenceImpl(0.0, 0.0, -1.0, pred) ); 00062 oc->setUnnormalizedEnvironment(s); 00063 occs->insert(oc); 00064 } 00065 00066 return occs; 00067 } 00068 00069 00070 00071 // helper function 00072 bool checkEqualArray(Scalar * array1, Scalar * array2, int size, double veps) 00073 { 00074 int i; 00075 bool result = true; 00076 00077 if (!array1 || !array2) 00078 return false; 00079 00080 for (i = 0; i < size; i++) 00081 { 00082 //printf("Comparing (%2d): %+12.8f == %+12.8f => ", i, array1[i], array2[i]); 00083 if ((array1[i] != -1000) && (array2[i] != -1000)) 00084 { result = result && (fabs(array1[i] - array2[i]) <= veps); } 00085 00086 //printf("%d\n", result); 00087 } 00088 00089 //printf("\n"); 00090 00091 return result; 00092 } 00093 00094 template <class T> 00095 bool testEvaluate(int sampleIndex, Scalar * ruleGenes, 00096 Scalar rulePred, Scalar * rulePerfs) 00097 { 00098 int i, dim; 00099 double * perf; 00100 bool result; 00101 00102 T * rule = new T(); 00103 OccurrencesPtr occs = getSampleSet(sampleIndex, &dim); 00104 rule->setPrediction(rulePred); 00105 rule->setGenes(ruleGenes, dim); 00106 rule->evaluate(occs); 00107 perf = rule->getPerformanceArray(); 00108 00109 /* 00110 OccurrencesImpl::const_iterator it = occs->begin(); 00111 OccurrencesImpl::const_iterator end = occs->end(); 00112 00113 int k = 0; 00114 while (it != end) 00115 { 00116 Scalar y = (*it)->abundance(); 00117 Sample s = (*it)->environment(); 00118 00119 printf("occs[%2d]: (occ=%-7.3f) ", k, y); 00120 for (int i = 0; i < dim; ++i) 00121 printf("%-7.3f | ", s[i]); 00122 printf("\n"); 00123 00124 ++it; ++k; 00125 } 00126 00127 printf("Rule (pred=%7.3f): ", rule->getPrediction()); 00128 for (int i = 0; i < dim; ++i) 00129 printf("%-7.3f %-7.3f | ", rule->getChrom1()[i], rule->getChrom2()[i]); 00130 printf("\n"); 00131 */ 00132 00133 result = checkEqualArray(perf, rulePerfs, 10, eps); 00134 delete rule; 00135 return result; 00136 } 00137 00138 00139 // SampleSet 1 00140 // =========== 00141 TEST( evaluate1_1, RangeRule ) 00142 { CHECK(testEvaluate<ExtRangeRule>(1, RuleGenes1_1, RulePred1_1, RulePerfs1_1)); } 00143 00144 TEST( evaluate1_2, RangeRule ) 00145 { CHECK(testEvaluate<ExtRangeRule>(1, RuleGenes1_2, RulePred1_2, RulePerfs1_2)); } 00146 00147 TEST( evaluate1_3, NegatedRangeRule ) 00148 { CHECK(testEvaluate<ExtNegatedRangeRule>(1, RuleGenes1_3, RulePred1_3, RulePerfs1_3)); } 00149 00150 TEST( evaluate1_4, NegatedRangeRule ) 00151 { CHECK(testEvaluate<ExtNegatedRangeRule>(1, RuleGenes1_4, RulePred1_4, RulePerfs1_4)); } 00152 00153 00154 // SampleSet 2 00155 // =========== 00156 TEST( evaluate2_1, RangeRule ) 00157 { CHECK(testEvaluate<ExtRangeRule>(2, RuleGenes2_1, RulePred2_1, RulePerfs2_1)); } 00158 00159 TEST( evaluate2_2, RangeRule ) 00160 { CHECK(testEvaluate<ExtRangeRule>(2, RuleGenes2_2, RulePred2_2, RulePerfs2_2)); } 00161 00162 TEST( evaluate2_3, RangeRule ) 00163 { CHECK(testEvaluate<ExtRangeRule>(2, RuleGenes2_3, RulePred2_3, RulePerfs2_3)); } 00164 00165 TEST( evaluate2_4, RangeRule ) 00166 { CHECK(testEvaluate<ExtRangeRule>(2, RuleGenes2_4, RulePred2_4, RulePerfs2_4)); } 00167 00168 00169 // SampleSet 3 00170 // =========== 00171 TEST( evaluate3_1, RangeRule ) 00172 { CHECK(testEvaluate<ExtRangeRule>(3, RuleGenes3_1, RulePred3_1, RulePerfs3_1)); } 00173 00174 TEST( evaluate3_2, RangeRule ) 00175 { CHECK(testEvaluate<ExtRangeRule>(3, RuleGenes3_2, RulePred3_2, RulePerfs3_2)); } 00176 00177 00178 // SampleSet 4 00179 // =========== 00180 TEST( evaluate4_1, RangeRule ) 00181 { CHECK(testEvaluate<ExtRangeRule>(4, RuleGenes4_1, RulePred4_1, RulePerfs4_1)); } 00182 00183 TEST( evaluate4_2, RangeRule ) 00184 { CHECK(testEvaluate<ExtRangeRule>(4, RuleGenes4_2, RulePred4_2, RulePerfs4_2)); } 00185 00186 TEST( evaluate4_3, RangeRule ) 00187 { CHECK(testEvaluate<ExtRangeRule>(4, RuleGenes4_3, RulePred4_3, RulePerfs4_3)); } 00188 00189 TEST( evaluate4_4, NegatedRangeRule ) 00190 { CHECK(testEvaluate<ExtNegatedRangeRule>(4, RuleGenes4_4, RulePred4_4, RulePerfs4_4)); } 00191 00192 TEST( evaluate4_5, NegatedRangeRule ) 00193 { CHECK(testEvaluate<ExtNegatedRangeRule>(4, RuleGenes4_5, RulePred4_5, RulePerfs4_5)); } 00194 00195 TEST( evaluate4_6, NegatedRangeRule ) 00196 { CHECK(testEvaluate<ExtNegatedRangeRule>(4, RuleGenes4_6, RulePred4_6, RulePerfs4_6)); } 00197 00198 00199 00200 // Logit regression tests 00201 TEST( regression4_1, LogitRule ) 00202 { 00203 int dim; 00204 Regression reg; 00205 00206 OccurrencesPtr occs = getSampleSet(4, &dim); 00207 reg.calculateParameters(occs); 00208 00209 DOUBLES_EQUAL(reg.getA()[0], +0.336735, eps); 00210 DOUBLES_EQUAL(reg.getB()[0], -0.459183, eps); 00211 DOUBLES_EQUAL(reg.getC()[0], -0.445368, eps); 00212 00213 DOUBLES_EQUAL(reg.getA()[1], +0.378012, eps); 00214 DOUBLES_EQUAL(reg.getB()[1], -0.353916, eps); 00215 DOUBLES_EQUAL(reg.getC()[1], -0.596326, eps); 00216 }