Use proper interface to reset the preselector

This commit is contained in:
Guilhem Lavaux 2013-02-27 14:08:49 -05:00
parent 393b6e756e
commit 91901c0186

View file

@ -255,16 +255,28 @@ class PreselectParticles: public SimulationPreprocessor
private: private:
gsl_rng *rng; gsl_rng *rng;
double subsample; double subsample;
int seed;
public: public:
PreselectParticles(gsl_rng *r, double s) PreselectParticles(double s, int seed_value)
: subsample(s), rng(r) : subsample(s), seed(seed_value), rng(gsl_rng_alloc(gsl_rng_default))
{ {
gsl_rng_set(rng, seed);
}
virtual ~PreselectParticles()
{
gsl_rng_free(rng);
} }
bool accept(const SingleParticle& p) bool accept(const SingleParticle& p)
{ {
return gsl_rng_uniform(rng) < subsample; return gsl_rng_uniform(rng) < subsample;
} }
void reset()
{
gsl_rng_set(rng, seed);
}
}; };
void createBox(SimuData *simu, vector<long>& targets, vector<long>& snapshot_split, SimuData *& boxed, generateMock_info& args_info) void createBox(SimuData *simu, vector<long>& targets, vector<long>& snapshot_split, SimuData *& boxed, generateMock_info& args_info)
@ -504,7 +516,6 @@ int main(int argc, char **argv)
generateMock_conf_params args_params; generateMock_conf_params args_params;
SimuData *simu, *simuOut; SimuData *simu, *simuOut;
SimulationLoader *loader; SimulationLoader *loader;
gsl_rng *rng = gsl_rng_alloc(gsl_rng_default);
generateMock_conf_init(&args_info); generateMock_conf_init(&args_info);
generateMock_conf_params_init(&args_params); generateMock_conf_params_init(&args_params);
@ -530,8 +541,7 @@ int main(int argc, char **argv)
generateMock_conf_print_version(); generateMock_conf_print_version();
gsl_rng_set(rng, args_info.subsample_seed_arg); SimulationPreprocessor *preselector = new PreselectParticles(args_info.subsample_arg, args_info.subsample_seed_arg);
SimulationPreprocessor *preselector = new PreselectParticles(rng, args_info.subsample_arg);
if (args_info.ramsesBase_given || args_info.ramsesId_given) if (args_info.ramsesBase_given || args_info.ramsesId_given)
{ {
@ -593,7 +603,7 @@ int main(int argc, char **argv)
makeBoxFromSimulation(loader, simuOut, metricOperation, args_info); makeBoxFromSimulation(loader, simuOut, metricOperation, args_info);
// Reset the random number generator // Reset the random number generator
gsl_rng_set(rng, args_info.subsample_seed_arg); preselector->reset();
long loaded = 0; long loaded = 0;
for (int nf = 0; nf < loader->num_files(); nf++) for (int nf = 0; nf < loader->num_files(); nf++)
@ -625,8 +635,6 @@ int main(int argc, char **argv)
args_info.output_arg); args_info.output_arg);
delete preselector; delete preselector;
gsl_rng_free(rng);
printf("Done!\n"); printf("Done!\n");
return 0; return 0;
} }