https://github.com/trvrb/PACT
Revision 5f267bc03537152ab6977efca5bb453ecdeedb93 authored by Trevor Bedford on 01 August 2009, 18:31:22 UTC, committed by Trevor Bedford on 01 August 2009, 18:31:22 UTC
1 parent 0a3ae8b
Raw File
Tip revision: 5f267bc03537152ab6977efca5bb453ecdeedb93 authored by Trevor Bedford on 01 August 2009, 18:31:22 UTC
Full read of parameters file completed.
Tip revision: 5f267bc
series.cpp
/* series.cpp
Member function definitions for Series class
*/

#include <iostream>
using std::cout;
using std::endl;

#include <stdexcept>
using std::runtime_error;
using std::out_of_range;

#include <set>
using std::multiset;

#include <cmath>

#include "series.h"

Series::Series() {
	
}

/* inserts value into growing set */
void Series::insert(double n) {
	values.insert(n);
}

/* clears all stored values */
void Series::clear() {
	values.clear();
}

/* returns value at position n */
double Series::at(int n) {

	if (n > values.size() - 1 || values.size() == 0) {
		throw out_of_range("Series::at");
	}

	multiset<double>::iterator is = values.begin();
	for (int i = 0; i < n; i++) {
		is++;
	}
	return *is;

}

/* returns arithmetic mean of stored values */
double Series::mean() {

	if (values.size() == 0) {
		throw out_of_range("Series::mean");
	}

	double mean = 0.0;
	for (multiset<double>::iterator is = values.begin(); is != values.end(); is++ ) {
		mean += *is;
	}
	mean /= (double) values.size();
	return mean;
		
}

/* returns quantile rank (p) of stored values */
/* using the empirical distribution function with averaging */
double Series::quantile(double p) {

	if (values.size() == 0) {
		throw out_of_range("Series::quantile");
	}

	double q;						// quantile value
	
	int n = values.size();			// sample size
	int j = floor(n*p);				// integer part
	double g = n*p - floor(n*p);	// fractional part
	
	if (g > 0 || n == 1)			// samples are ordered 0 to N-1
		q = at(j);				
	else
		q = 0.5 * ( at(j-1) + at(j));

	return q;

}
back to top