Skip to content

Commit

Permalink
* Update to use new likely features
Browse files Browse the repository at this point in the history
* Add --parameter-scan option that uses the new fit parameter binning
* Changes to binning syntax are not backwards compatible
* Update binning specs in config files
  • Loading branch information
dkirkby committed May 13, 2013
2 parents 2037cd2 + b014559 commit e80bfd3
Show file tree
Hide file tree
Showing 17 changed files with 143 additions and 137 deletions.
12 changes: 2 additions & 10 deletions baofit/AbsCorrelationData.cc
Expand Up @@ -11,16 +11,8 @@

namespace local = baofit;

local::AbsCorrelationData::AbsCorrelationData(
likely::AbsBinningCPtr axis1, likely::AbsBinningCPtr axis2, likely::AbsBinningCPtr axis3,
TransverseBinningType type)
: likely::BinnedData(axis1,axis2,axis3), _type(type), _haveFinalCuts(false)
{
}

local::AbsCorrelationData::AbsCorrelationData(std::vector<likely::AbsBinningCPtr> axes,
TransverseBinningType type)
: likely::BinnedData(axes), _type(type), _haveFinalCuts(false)
local::AbsCorrelationData::AbsCorrelationData(likely::BinnedGrid grid, TransverseBinningType type)
: likely::BinnedData(grid), _type(type), _haveFinalCuts(false)
{
}

Expand Down
5 changes: 2 additions & 3 deletions baofit/AbsCorrelationData.h
Expand Up @@ -4,6 +4,7 @@
#define BAOFIT_ABS_CORRELATION_DATA

#include "likely/BinnedData.h"
#include "likely/BinnedGrid.h"
#include "likely/types.h"

#include "cosmo/types.h"
Expand All @@ -14,9 +15,7 @@ namespace baofit {
// used by an AbsCorrelationModel.
public:
enum TransverseBinningType { Coordinate, Multipole };
AbsCorrelationData(likely::AbsBinningCPtr axis1, likely::AbsBinningCPtr axis2,
likely::AbsBinningCPtr axis3, TransverseBinningType type);
AbsCorrelationData(std::vector<likely::AbsBinningCPtr> axes, TransverseBinningType type);
AbsCorrelationData(likely::BinnedGrid grid, TransverseBinningType type);
virtual ~AbsCorrelationData();
// Returns the type of transverse binning: Coordinate means that a mu value can
// be associated with each bin, and Multipole means that an ell value can be
Expand Down
8 changes: 4 additions & 4 deletions baofit/ComovingCorrelationData.cc
Expand Up @@ -7,17 +7,17 @@

namespace local = baofit;

local::ComovingCorrelationData::ComovingCorrelationData(std::vector<likely::AbsBinningCPtr> axes,
local::ComovingCorrelationData::ComovingCorrelationData(likely::BinnedGrid grid,
CoordinateSystem coordinateSystem)
: AbsCorrelationData(axes,Coordinate), _coordinateSystem(coordinateSystem), _lastIndex(-1)
: AbsCorrelationData(grid,Coordinate), _coordinateSystem(coordinateSystem), _lastIndex(-1)
{
}

local::ComovingCorrelationData::~ComovingCorrelationData() { }

local::ComovingCorrelationData *local::ComovingCorrelationData::clone(bool binningOnly) const {
ComovingCorrelationData *data = binningOnly ?
new ComovingCorrelationData(getAxisBinning(),_coordinateSystem) :
new ComovingCorrelationData(getGrid(),_coordinateSystem) :
new ComovingCorrelationData(*this);
_cloneFinalCuts(*data);
return data;
Expand All @@ -32,7 +32,7 @@ void local::ComovingCorrelationData::finalize() {

void local::ComovingCorrelationData::_setIndex(int index) const {
if(index == _lastIndex) return;
getBinCenters(index,_binCenter);
getGrid().getBinCenters(index,_binCenter);
_lastIndex = index;
}

Expand Down
2 changes: 1 addition & 1 deletion baofit/ComovingCorrelationData.h
Expand Up @@ -12,7 +12,7 @@ namespace baofit {
// Represents 3D correlation data in comoving coordinates (r,mu,z) or (rpar,rperp,z).
public:
enum CoordinateSystem { PolarCoordinates, CartesianCoordinates };
ComovingCorrelationData(std::vector<likely::AbsBinningCPtr> axes,
ComovingCorrelationData(likely::BinnedGrid grid,
CoordinateSystem coordinateSystem = PolarCoordinates);
virtual ~ComovingCorrelationData();
// Polymorphic shallow copy so this type of data can be used with likely::BinnedDataResampler.
Expand Down
27 changes: 26 additions & 1 deletion baofit/CorrelationAnalyzer.cc
Expand Up @@ -515,11 +515,36 @@ std::string const &saveName, int nsave) const {
paramStats.printToStream(std::cout);
}

int local::CorrelationAnalyzer::parameterScan(likely::FunctionMinimumCPtr fmin,
AbsCorrelationDataCPtr sample, std::string const &saveName, int nsave) const {
int nfits(0);
// Initialize the grid we will be sampling.
likely::FitParameters params = fmin->getFitParameters();
likely::BinnedGrid grid = likely::getFitParametersGrid(params);
// Prepare to output samples at each grid point.
SamplingOutput output(fmin,likely::FunctionMinimumCPtr(),saveName,nsave,*this);
// Loop over grid points.
for(likely::BinnedGrid::Iterator iter = grid.begin(); iter != grid.end(); ++iter) {
nfits++;
std::string config = likely::getFitParametersGridConfig(params,grid,iter);
if(_verbose) {
std::cout << std::endl << "-- Performing scan step " << nfits << " of " << grid.getNBinsTotal()
<< " using " << config << std::endl;
}
// Do the fit.
likely::FunctionMinimumCPtr gridMin = fitSample(sample,config);
// Add the results to our output file.
output.saveSample(gridMin->getFitParameters(),gridMin->getMinValue());
}
return nfits;
}

void local::CorrelationAnalyzer::dumpResiduals(std::ostream &out, likely::FunctionMinimumPtr fmin,
AbsCorrelationDataCPtr combined, std::string const &script, bool dumpGradients) const {
if(getNData() == 0) {
throw RuntimeError("CorrelationAnalyzer::dumpResiduals: no observations have been added.");
}
likely::BinnedGrid grid = combined->getGrid();
AbsCorrelationData::TransverseBinningType type = combined->getTransverseBinningType();
// Get a copy of the the parameters at this minimum.
likely::FitParameters parameters(fmin->getFitParameters());
Expand All @@ -537,7 +562,7 @@ AbsCorrelationDataCPtr combined, std::string const &script, bool dumpGradients)
for(likely::BinnedData::IndexIterator iter = combined->begin(); iter != combined->end(); ++iter) {
int index(*iter);
out << index;
combined->getBinCenters(index,centers);
grid.getBinCenters(index,centers);
BOOST_FOREACH(double center, centers) {
out << ' ' << center;
}
Expand Down
4 changes: 4 additions & 0 deletions baofit/CorrelationAnalyzer.h
Expand Up @@ -87,6 +87,10 @@ namespace baofit {
int fitEach(likely::FunctionMinimumPtr fmin,
likely::FunctionMinimumPtr fmin2 = likely::FunctionMinimumPtr(),
std::string const &refitConfig = "", std::string const &saveName = "", int nsave = 0) const;
// Refits the specified sample on the parameter grid specified by each parameter's binning
// spec and saves the results to the specified file name. Returns the number of fits performed.
int parameterScan(likely::FunctionMinimumCPtr fmin,
AbsCorrelationDataCPtr sample, std::string const &saveName = "", int nsave = 0) const;
// Generates and fits toy Monte Carlo samples and returns the number of fits that failed.
// Samples are generated by calculating the truth corresponding to the best-fit input
// parameters in fmin and adding noise sampled from the combined dataset covariance matrix.
Expand Down
25 changes: 10 additions & 15 deletions baofit/MultipoleCorrelationData.cc
Expand Up @@ -10,16 +10,10 @@

namespace local = baofit;

local::MultipoleCorrelationData::MultipoleCorrelationData(likely::AbsBinningCPtr axis1,
likely::AbsBinningCPtr axis2, likely::AbsBinningCPtr axis3)
: AbsCorrelationData(axis1,axis2,axis3,Multipole), _lastIndex(-1)
local::MultipoleCorrelationData::MultipoleCorrelationData(likely::BinnedGrid grid)
: AbsCorrelationData(grid,Multipole), _lastIndex(-1)
{
}

local::MultipoleCorrelationData::MultipoleCorrelationData(std::vector<likely::AbsBinningCPtr> axes)
: AbsCorrelationData(axes,Multipole), _lastIndex(-1)
{
if(axes.size() != 3) {
if(grid.getNAxes() != 3) {
throw RuntimeError("MultipoleCorrelationData: expected 3 axes.");
}
}
Expand All @@ -28,7 +22,7 @@ local::MultipoleCorrelationData::~MultipoleCorrelationData() { }

local::MultipoleCorrelationData *local::MultipoleCorrelationData::clone(bool binningOnly) const {
MultipoleCorrelationData *data = binningOnly ?
new MultipoleCorrelationData(getAxisBinning()) : new MultipoleCorrelationData(*this);
new MultipoleCorrelationData(getGrid()) : new MultipoleCorrelationData(*this);
_cloneFinalCuts(*data);
return data;
}
Expand All @@ -50,7 +44,7 @@ double local::MultipoleCorrelationData::getRedshift(int index) const {

void local::MultipoleCorrelationData::_setIndex(int index) const {
if(index == _lastIndex) return;
getBinCenters(index,_binCenter);
getGrid().getBinCenters(index,_binCenter);
_rLast = _binCenter[0];
// We don't check for a valid enum type here on purpose, so that additional modes can be
// included in the dataset for correct weighting, and then pruned out in the finalize step.
Expand All @@ -71,11 +65,12 @@ std::vector<double> const &weights) const {
if(weights.size() > 0 && weights.size() != getNBinsWithData()) {
throw RuntimeError("MultipoleCorrelationData::dump: unexpected size of weights.");
}
std::vector<likely::AbsBinningCPtr> binning = getAxisBinning();
int nRadialBins(binning[0]->getNBins()), nEllBins(binning[1]->getNBins()), nZBins(binning[2]->getNBins());
likely::BinnedGrid grid(getGrid());
int nRadialBins(grid.getAxisBinning(0)->getNBins()), nEllBins(grid.getAxisBinning(1)->getNBins()),
nZBins(grid.getAxisBinning(2)->getNBins());
std::vector<int> bin(3);
for(int rIndex = 0; rIndex < nRadialBins; ++rIndex) {
double rval(binning[0]->getBinCenter(rIndex));
double rval(grid.getAxisBinning(0)->getBinCenter(rIndex));
if(rval < rmin) continue;
if(rval > rmax) break;
out << rval;
Expand All @@ -84,7 +79,7 @@ std::vector<double> const &weights) const {
bin[2] = zIndex;
for(int ellIndex = 0; ellIndex < nEllBins; ++ellIndex) {
bin[1] = ellIndex;
int index = getIndex(bin);
int index = grid.getIndex(bin);
double data(0),error(0);
if(hasData(index)) {
data = getData(index);
Expand Down
4 changes: 1 addition & 3 deletions baofit/MultipoleCorrelationData.h
Expand Up @@ -14,9 +14,7 @@ namespace baofit {
public:
//Creates a new multipole correlation dataset with the specified binning and final
// cuts rmin <= r < rmax, ellmin <= ell <= ellmax.
MultipoleCorrelationData(likely::AbsBinningCPtr axis1, likely::AbsBinningCPtr axis2,
likely::AbsBinningCPtr axis3);
MultipoleCorrelationData(std::vector<likely::AbsBinningCPtr> axes);
MultipoleCorrelationData(likely::BinnedGrid grid);
virtual ~MultipoleCorrelationData();
// Polymorphic shallow copy so this type of data can be used with likely::BinnedDataResampler.
virtual MultipoleCorrelationData *clone(bool binningOnly = false) const;
Expand Down
33 changes: 12 additions & 21 deletions baofit/QuasarCorrelationData.cc
Expand Up @@ -11,21 +11,12 @@

namespace local = baofit;

local::QuasarCorrelationData::QuasarCorrelationData(
likely::AbsBinningCPtr axis1, likely::AbsBinningCPtr axis2, likely::AbsBinningCPtr axis3,
local::QuasarCorrelationData::QuasarCorrelationData(likely::BinnedGrid grid,
double llMin, double llMax, double sepMin, double sepMax,
bool fixCov, cosmo::AbsHomogeneousUniversePtr cosmology)
: AbsCorrelationData(axis1,axis2,axis3,Coordinate)
: AbsCorrelationData(grid,Coordinate)
{
_initialize(llMin,llMax,sepMin,sepMax,fixCov,cosmology);
}

local::QuasarCorrelationData::QuasarCorrelationData(
std::vector<likely::AbsBinningCPtr> axes, double llMin, double llMax, double sepMin, double sepMax,
bool fixCov, cosmo::AbsHomogeneousUniversePtr cosmology)
: AbsCorrelationData(axes,Coordinate)
{
if(axes.size() != 3) {
if(grid.getNAxes() != 3) {
throw RuntimeError("QuasarCorrelationData: expected 3 axes.");
}
_initialize(llMin,llMax,sepMin,sepMax,fixCov,cosmology);
Expand All @@ -49,7 +40,7 @@ local::QuasarCorrelationData::~QuasarCorrelationData() { }

local::QuasarCorrelationData *local::QuasarCorrelationData::clone(bool binningOnly) const {
QuasarCorrelationData *data = binningOnly ?
new QuasarCorrelationData(getAxisBinning(),_llMin,_llMax,_sepMin,_sepMax,_fixCov,_cosmology) :
new QuasarCorrelationData(getGrid(),_llMin,_llMax,_sepMin,_sepMax,_fixCov,_cosmology) :
new QuasarCorrelationData(*this);
_cloneFinalCuts(*data);
return data;
Expand All @@ -70,13 +61,13 @@ void local::QuasarCorrelationData::fixCovariance(double ll0, double c0, double c
std::vector<int> bin(3);

// Lookup the binning along the log-lambda axis.
likely::AbsBinningCPtr llBins(getAxisBinning()[0]);
likely::AbsBinningCPtr llBins(getGrid().getAxisBinning(0));

// Loop over all bins.
for(IndexIterator iter1 = begin(); iter1 != end(); ++iter1) {
int i1(*iter1);
// Remember the indices of this 3D bin along our sep,z axes.
getBinIndices(i1,bin);
getGrid().getBinIndices(i1,bin);
int sepIndex(bin[1]), zIndex(bin[2]);
// Calculate and save the value of ll - ll0 at the center of this bin.
double ll(llBins->getBinCenter(bin[0]));
Expand All @@ -86,7 +77,7 @@ void local::QuasarCorrelationData::fixCovariance(double ll0, double c0, double c
for(IndexIterator iter2 = begin(); iter2 <= iter1; ++iter2) {
int i2(*iter2);
// Check that this bin has the same sep,z indices
getBinIndices(i2,bin);
getGrid().getBinIndices(i2,bin);
if(bin[1] != sepIndex || bin[2] != zIndex) continue;
// Calculate (ll1 - ll0)*(ll2 - ll0) using cached values.
double d = dll[i1]*dll[i2];
Expand Down Expand Up @@ -116,7 +107,7 @@ void local::QuasarCorrelationData::finalize() {
int index(*iter);
if(0 == keep.count(index)) continue;
// Lookup the value of ll at the center of this bin.
getBinCenters(index,_binCenter);
getGrid().getBinCenters(index,_binCenter);
double ll(_binCenter[0]),sep(_binCenter[1]);
// Keep this bin in our pruned dataset?
if(ll < _llMin || ll > _llMax || sep < _sepMin || sep > _sepMax) {
Expand Down Expand Up @@ -150,8 +141,8 @@ double &r, double &mu) const {

void local::QuasarCorrelationData::_setIndex(int index) const {
if(index == _lastIndex) return;
getBinCenters(index,_binCenter);
getBinWidths(index,_binWidth);
getGrid().getBinCenters(index,_binCenter);
getGrid().getBinWidths(index,_binWidth);
_zLast = _binCenter[2];
transform(_binCenter[0],_binCenter[1],_binWidth[1],_zLast,_rLast,_muLast);
_lastIndex = index;
Expand Down Expand Up @@ -183,14 +174,14 @@ void local::QuasarCorrelationData::rescaleEigenvalues(std::vector<double> modeSc
for(IndexIterator iter1 = begin(); iter1 != end(); ++iter1) {
int i1(*iter1);
// Remember the separation index of this bin.
getBinIndices(i1,bin);
getGrid().getBinIndices(i1,bin);
int sepIndex(bin[1]);
// Loop over unique pairs (iter1,iter2) with iter2 <= iter1 (which does not
// necessarily imply that i2 <= i1).
for(IndexIterator iter2 = begin(); iter2 <= iter1; ++iter2) {
int i2(*iter2);
// Does this bin have a different separation index?
getBinIndices(i2,bin);
getGrid().getBinIndices(i2,bin);
if(bin[1] != sepIndex) {
// Force the covariance between (i1,i2) to zero.
setCovariance(i1,i2,0);
Expand Down
5 changes: 1 addition & 4 deletions baofit/QuasarCorrelationData.h
Expand Up @@ -16,10 +16,7 @@ namespace baofit {
// Creates a new object using the specified binning and cosmology to map the observed coordinates
// into co-moving coordinates. The data will be pruned to rmin <= r < rmax (in Mpc/h) and
// log(lambda2/lambda1) > llmin when the finalize() method is called.
QuasarCorrelationData(likely::AbsBinningCPtr axis1, likely::AbsBinningCPtr axis2,
likely::AbsBinningCPtr axis3, double llMin, double llMax, double sepMin, double sepMax,
bool fixCov, cosmo::AbsHomogeneousUniversePtr cosmology);
QuasarCorrelationData(std::vector<likely::AbsBinningCPtr> axes,
QuasarCorrelationData(likely::BinnedGrid grid,
double llMin, double llMax, double sepMin, double sepMax,
bool fixCov, cosmo::AbsHomogeneousUniversePtr cosmology);
virtual ~QuasarCorrelationData();
Expand Down

0 comments on commit e80bfd3

Please sign in to comment.