From 6fbf03476899a00ada2a29287a6fadf3daa347ae Mon Sep 17 00:00:00 2001 From: Guilhem Lavaux Date: Sat, 24 Nov 2012 09:40:58 -0600 Subject: [PATCH] Re-added ramses loader, multidark loader --- c_tools/mock/gadget_loader.cpp | 13 ++-- c_tools/mock/generateMock.cpp | 116 ++++++----------------------- c_tools/mock/multidark_loader.cpp | 108 +++++++++++++++++++++++++++ c_tools/mock/ramses_loader.cpp | 16 ++-- c_tools/mock/simulation_loader.hpp | 2 +- 5 files changed, 149 insertions(+), 106 deletions(-) create mode 100644 c_tools/mock/multidark_loader.cpp diff --git a/c_tools/mock/gadget_loader.cpp b/c_tools/mock/gadget_loader.cpp index 3f862f0..1c108ee 100644 --- a/c_tools/mock/gadget_loader.cpp +++ b/c_tools/mock/gadget_loader.cpp @@ -47,11 +47,15 @@ public: d = loadGadgetMulti(snapshot_name.c_str(), -1, load_flags); else d = loadGadgetMulti(snapshot_name.c_str(), id, load_flags); - - long *uniqueID = new long[d->NumPart]; - for (long i = 0; i < d->NumPart; i++) + + if (d->Id != 0) { - uniqueID[i] = d->Id[i]; + long *uniqueID = new long[d->NumPart]; + for (long i = 0; i < d->NumPart; i++) + { + uniqueID[i] = d->Id[i]; + } + d->new_attribute("uniqueID", uniqueID, delete_adaptor); } for (int k = 0; k < 3; k++) @@ -62,7 +66,6 @@ public: d->Pos[k][i] *= unitMpc; } } - d->new_attribute("uniqueID", uniqueID, delete_adaptor); d->BoxSize *= unitMpc; applyTransformations(d); diff --git a/c_tools/mock/generateMock.cpp b/c_tools/mock/generateMock.cpp index 570f8b2..670fe84 100644 --- a/c_tools/mock/generateMock.cpp +++ b/c_tools/mock/generateMock.cpp @@ -9,8 +9,6 @@ #include #include #include -#include -#include #include #include #include "generateMock_conf.h" @@ -26,62 +24,6 @@ using boost::format; typedef boost::function2 MetricFunctor; -SimuData *doLoadMultidark(const char *multidarkname) -{ - SimuData *outd; - FILE *fp; - int actualNumPart; - - outd = new SimuData; - cout << "opening multidark file " << multidarkname << endl; - fp = fopen(multidarkname, "r"); - if (fp == NULL) { - cout << "could not open file!" << endl; - return 0; - } - fscanf(fp, "%f\n", &outd->BoxSize); - fscanf(fp, "%f\n", &outd->Omega_M); - fscanf(fp, "%f\n", &outd->Hubble); - fscanf(fp, "%f\n", &outd->time); - fscanf(fp, "%ld\n", &outd->NumPart); - - outd->time = 1./(1.+outd->time); // convert to scale factor - outd->TotalNumPart = outd->NumPart; - outd->Omega_Lambda = 1.0 - outd->Omega_M; - - for (int k = 0; k < 3; k++) - outd->Pos[k] = new float[outd->NumPart]; - outd->Vel[2] = new float[outd->NumPart]; - outd->Id = new int[outd->NumPart]; - long *uniqueID = new long[outd->NumPart]; - - outd->new_attribute("uniqueID", uniqueID, delete_adaptor); - - cout << "loading multidark particles" << endl; - actualNumPart = 0; - for (int i = 0; i < outd->NumPart; i++) { - - fscanf(fp, "%d %f %f %f %f\n", &outd->Id[i], - &outd->Pos[0][i], &outd->Pos[1][i], - &outd->Pos[2][i], &outd->Vel[2][i]); - - uniqueID[i] = 1; - //uniqueID[i] = 1 * outd->Id[i]; - - if (outd->Id[i] == -99 && - outd->Pos[0][i] == -99 && outd->Pos[1][i] == -99 && - outd->Pos[2][i] == -99 && outd->Vel[2][i] == -99) { - break; - } else { - actualNumPart++; - } - } - fclose(fp); - - outd->NumPart = actualNumPart; - outd->TotalNumPart = actualNumPart; - return outd; -} static double cubic(double a) @@ -548,54 +490,42 @@ int main(int argc, char **argv) if (args_info.ramsesBase_given || args_info.ramsesId_given) { if (args_info.ramsesBase_given && args_info.ramsesId_given) { - /* simu = doLoadRamses(args_info.ramsesBase_arg, - args_info.ramsesId_arg, - args_info.axis_arg, false);*/ + loader = ramsesLoader(args_info.ramsesBase_arg, + args_info.ramsesId_arg, + false, + NEED_POSITION|NEED_VELOCITY|NEED_GADGET_ID); } else { cerr << "Both ramsesBase and ramsesId are required to be able to load snapshots" << endl; return 1; } - - if (simu == 0) - { - cerr << "Error while loading" << endl; - return 1; - } } - else if (args_info.gadget_given || args_info.flash_given || args_info.multidark_given) + else if (args_info.gadget_given) { - if (args_info.gadget_given && args_info.flash_given) - { - cerr << "Do not know which file to use: Gadget or Flash ?" << endl; - return 1; - } - /* - if (args_info.multidark_given) { - simu = doLoadMultidark(args_info.multidark_arg); - } - - if (args_info.gadget_given) { - simu = doLoadSimulation(args_info.gadget_arg, args_info.axis_arg, false, myLoadGadget); - } - if (args_info.flash_given) { - simu = doLoadSimulation(args_info.flash_arg, args_info.axis_arg, false, loadFlashMulti); - } - */ loader = gadgetLoader(args_info.gadget_arg, 1/args_info.gadgetUnit_arg, NEED_POSITION|NEED_VELOCITY|NEED_GADGET_ID); - if (loader == 0) - { - cerr << "Error while loading " << endl; - return 1; - } - simu = loader->getHeader(); + } + else if (args_info.flash_given) + { + //if (args_info.flash_given) { + //simu = doLoadSimulation(args_info.flash_arg, args_info.axis_arg, false, loadFlashMulti); + } + else if (args_info.multidark_given) + { + loader = multidarkLoader(args_info.multidark_arg); } else { - cerr << "Either a ramses snapshot or a gadget snapshot is required." << endl; + cerr << "A simulation snapshot is required to generate a mock catalog." << endl; return 1; } + + if (loader == 0) + { + cerr << "Error while loading " << endl; + return 1; + } + simu = loader->getHeader(); { SimuData *header = loader->getHeader(); @@ -604,7 +534,7 @@ int main(int argc, char **argv) cout << "Omega_M = " << header->Omega_M << endl; cout << "Omega_Lambda = " << header->Omega_Lambda << endl; cout << "Subsample fraction: " << (args_info.subsample_given ? 1 : args_info.subsample_arg) << endl; - } + } double *expfact; boost::function2 metricOperation= diff --git a/c_tools/mock/multidark_loader.cpp b/c_tools/mock/multidark_loader.cpp new file mode 100644 index 0000000..b37e4ef --- /dev/null +++ b/c_tools/mock/multidark_loader.cpp @@ -0,0 +1,108 @@ +#include +#include +#include +#include +#include +#include +#include "simulation_loader.hpp" + +using namespace std; +using namespace CosmoTool; + +class MultiDarkLoader: public SimulationLoader +{ +protected: + SimuData *header; + string darkname; +public: + MultiDarkLoader(const std::string& name, SimuData *h) + : darkname(name), header(h) + { + } + + ~MultiDarkLoader() + { + delete header; + } + + int num_files() + { + return 1; + } + + SimuData *getHeader() + { + return header; + } + + SimuData *loadFile(int id) + { + if (id != 0) + return 0; + + ifstream fp(darkname.c_str()); + SimuData *simu; + + fp >> simu->BoxSize >> simu->Omega_M >> simu->Hubble >> simu->time >> simu->NumPart; + simu->time = 1./(1.+simu->time); // convert to scale factor + simu->TotalNumPart = simu->NumPart; + simu->Omega_Lambda = 1.0 - simu->Omega_M; + + for (int k = 0; k < 3; k++) + simu->Pos[k] = new float[simu->NumPart]; + simu->Vel[2] = new float[simu->NumPart]; + simu->Id = new int[simu->NumPart]; + long *uniqueID = new long[simu->NumPart]; + + simu->new_attribute("uniqueID", uniqueID, delete_adaptor); + + cout << "loading multidark particles" << endl; + long actualNumPart = 0; + for (int i = 0; i < simu->NumPart; i++) { + + fp >> simu->Id[i] >> simu->Pos[0][i] >> simu->Pos[1][i] + >> simu->Pos[2][i] >> simu->Vel[2][i]; + + uniqueID[i] = 1; + //uniqueID[i] = 1 * simu->Id[i]; + + if (simu->Id[i] == -99 && + simu->Pos[0][i] == -99 && simu->Pos[1][i] == -99 && + simu->Pos[2][i] == -99 && simu->Vel[2][i] == -99) { + break; + } else { + actualNumPart++; + } + } + + simu->NumPart = actualNumPart; + simu->TotalNumPart = actualNumPart; + return simu; + } +}; + +SimulationLoader *multidarkLoader(const string& multidarkname) +{ + SimuData *header; + int actualNumPart; + ifstream fp(multidarkname.c_str()); + + cout << "opening multidark file " << multidarkname << endl; + if (!fp) + { + cout << "could not open file!" << endl; + return 0; + } + + header = new SimuData(); + fp >> header->BoxSize >> header->Omega_M >> header->Hubble >> header->time >> header->NumPart; + + header->time = 1./(1.+header->time); // convert to scale factor + header->TotalNumPart = header->NumPart; + header->Omega_Lambda = 1.0 - header->Omega_M; + + return new MultiDarkLoader(multidarkname, header); +} + + + diff --git a/c_tools/mock/ramses_loader.cpp b/c_tools/mock/ramses_loader.cpp index 00258a6..8f9fb37 100644 --- a/c_tools/mock/ramses_loader.cpp +++ b/c_tools/mock/ramses_loader.cpp @@ -44,14 +44,16 @@ public: d = loadRamsesSimu(snapshot_name.c_str(), baseid, id, double_precision, load_flags); assert(d != 0); - - long *uniqueID = new long[d->NumPart]; - for (long i = 0; i < d->NumPart; i++) - { - uniqueID[i] = d->Id[i]; - } - d->new_attribute("uniqueID", uniqueID, delete_adaptor); + if (d->Id != 0) + { + long *uniqueID = new long[d->NumPart]; + for (long i = 0; i < d->NumPart; i++) + { + uniqueID[i] = d->Id[i]; + } + d->new_attribute("uniqueID", uniqueID, delete_adaptor); + } applyTransformations(d); diff --git a/c_tools/mock/simulation_loader.hpp b/c_tools/mock/simulation_loader.hpp index e605fec..d96cb47 100644 --- a/c_tools/mock/simulation_loader.hpp +++ b/c_tools/mock/simulation_loader.hpp @@ -42,7 +42,7 @@ void delete_adaptor(void *ptr) // Unit length is the size of one Mpc in the simulation units SimulationLoader *gadgetLoader(const std::string& snapshot, double Mpc_unitLength, int flags); SimulationLoader *flashLoader(const std::string& snapshot, int flags); -SimulationLoader *multidarkLoader(const std::string& snapshot, int flags); +SimulationLoader *multidarkLoader(const std::string& snapshot); SimulationLoader *ramsesLoader(const std::string& snapshot, int baseid, bool double_precision, int flags);