void cosmobl::set_ObjectRegion_mangle (catalogue::Catalogue &data, catalogue::Catalogue &random, const int nSamples, const string polygonfile, const string dir) { string temp_dir = dir+"temp/"; string mangle_dir = par::DirCosmo+"/CatalogueAnalysis/RandomCatalogue/mangle/"; string cmd = "mkdir -p "+temp_dir; if(system(cmd.c_str())){} string out_cat = temp_dir+"data"; string out_ran = temp_dir+"ran"; ofstream fout(out_cat.c_str()); checkIO(out_cat, 0); fout.precision(10); for (int i=0; i<data.nObjects(); i++) fout << data.ra(i) << " " << data.dec(i) << endl; fout.clear(); fout.close(); fout.open(out_ran.c_str()); checkIO(out_ran, 0); for (int i=0; i<random.nObjects(); i++) fout << random.ra(i) << " " << random.dec(i) << endl; fout.clear(); fout.close(); cmd = mangle_dir+"bin/polyid -ur "+polygonfile+" "+out_cat+" "+out_cat+".id"; if (system(cmd.c_str())) {} cmd = mangle_dir+"bin/polyid -ur "+polygonfile+" "+out_ran+" "+out_ran+".id"; if (system(cmd.c_str())) {} vector<int> poly_data, poly_random, poly_list; string line; string in_cat = out_cat+".id"; string in_ran = out_ran+".id"; ifstream fin(in_cat.c_str()); checkIO(in_cat, 1); getline(fin, line); while (getline(fin, line)) { stringstream ss(line); double NUM; int pp=-100; ss >> NUM; ss >> NUM; ss >> pp; if (pp==-100) ErrorMsg("Error in cosmobl::set_ObjectRegion_mangle!"); poly_data.push_back(pp); } fin.clear(); fin.close(); fin.open(in_ran.c_str()); checkIO(in_ran, 1); getline(fin, line); while (getline(fin, line)) { stringstream ss(line); double NUM; int pp = -100; ss >> NUM; ss >> NUM; ss >> pp; if (pp==-100) ErrorMsg("Error in cosmobl::set_ObjectRegion_mangle!"); poly_random.push_back(pp); poly_list.push_back(pp); } fin.clear(); fin.close(); vector<int>::iterator it = poly_list.begin(); sort(poly_list.begin(), poly_list.end()); it = unique(poly_list.begin(), poly_list.end()); poly_list.resize(distance(poly_list.begin(), it)); int nPoly = poly_list.size(); vector<int> boundaries(nSamples+1, 0); boundaries[0] = Min(poly_list); boundaries[nSamples] = Max(poly_list)+100; for (int i=1; i<nSamples; i++) boundaries[i] = poly_list[i*int(nPoly/(nSamples))]; for (size_t i=1; i<boundaries.size(); i++) { for (size_t j=0; j<poly_data.size(); j++) if (poly_data[j]>=boundaries[i-1] && poly_data[j] <boundaries[i]) data.catalogue_object(j)->set_region(i-1); for (size_t j=0; j<poly_random.size(); j++) if (poly_random[j]>=boundaries[i-1] && poly_random[j]<boundaries[i]) random.catalogue_object(j)->set_region(i-1); } string RM = "rm -rf "+dir+"temp/"; if (system(RM.c_str())) {} }