#include #include #include "LikelihoodTable.h" double LikelihoodTable::CalcLikelihood (double response) { double likelihood = 0; int bin_num = (int) ((response - minResponse) / bin_width); if (bin_num >= 0 && bin_num < num_bins) { // within the valid histogram region likelihood = bins[bin_num]; } // Make sure likelihood is always positive if (likelihood == 0) { likelihood += VERY_SMALL; } return likelihood; } LikelihoodTable::LikelihoodTable (void) { bins = NULL; } LikelihoodTable::LikelihoodTable ( const char *filename) { FILE *fp = fopen(filename, "rt"); char line[1024]; if (fp == NULL) { // printf("Couldn't open %s\n", filename); throw "Couldn't open LikelihoodTable"; abort(); } // Read parameters fgets(line, sizeof(line), fp); minResponse = atof(line); fgets(line, sizeof(line), fp); bin_width = atof(line); fgets(line, sizeof(line), fp); num_bins = atoi(line); //printf("%f %f %d\n", minResponse, bin_width, num_bins); bins = new double[100]; // Read bins int bin_idx = 0; while (fgets(line, sizeof(line), fp) != NULL && bin_idx < num_bins) { //printf(line); bins[bin_idx] = atof(line); //printf("%d %f\n", bin_idx, bins[bin_idx]); bin_idx++; } fclose(fp); } // Delete bins LikelihoodTable::~LikelihoodTable () { if (bins != NULL) { // HUH --- doesn't work // delete bins; } }