46 coutCBL <<
"I'm putting data and random objects in regions given by R.A.-Dec tiles." << endl;
49 ErrorCBL(
"nz must be >0.",
"set_ObjectRegion_Tiles_Redshift",
"GlobalFunc/SubSample.cpp");
52 for (
size_t i=0; i<data.
nObjects(); i++) {
54 if (data.
isSetVar(i, catalogue::Var::_Region_) ==
false)
55 ErrorCBL(
"The tile number for the object "+
cbl::conv(i,
cbl::par::fINT)+
" in the data catalogue is not set.",
"set_ObjectRegion_Tiles_Redshift",
"GlobalFunc/SubSample.cpp");
56 if (data.
var(i, catalogue::Var::_Region_) < 0)
57 ErrorCBL(
"The tile number for the object "+
cbl::conv(i,
cbl::par::fINT)+
" in the data catalogue is <0. The tile numbers must be all the integers between 0 and N, where N is the highest tile number.",
"set_ObjectRegion_Tiles_Redshift",
"GlobalFunc/SubSample.cpp");
61 for (
size_t i=0; i<random.
nObjects(); i++) {
63 if (random.
isSetVar(i, catalogue::Var::_Region_) ==
false)
64 ErrorCBL(
"The tile number for the object "+
cbl::conv(i,
cbl::par::fINT)+
" in the random catalogue is not set.",
"set_ObjectRegion_Tiles_Redshift",
"GlobalFunc/SubSample.cpp");
65 if (random.
var(i, catalogue::Var::_Region_) < 0)
66 ErrorCBL(
"The tile number for the object "+
cbl::conv(i,
cbl::par::fINT)+
" in the random catalogue is <0. The tile numbers must be all the integers between 0 and N, where N is the highest tile number.",
"set_ObjectRegion_Tiles_Redshift",
"GlobalFunc/SubSample.cpp");
74 std::vector<long int> observedRegions (data.
nObjects(), -1);
75 std::vector<long int> randomRegions (random.
nObjects(), -1);
77 std::vector<bool> ok_data_tile (data.
nObjects(),
false);
78 std::vector<bool> ok_random_tile (random.
nObjects(),
false);
82 for (
size_t i=0; i<data.
nObjects(); i++) {
84 bool update_value =
false;
86 for (
size_t j=0; j<data.
nObjects(); j++)
87 if (data.
region(j) == data.
region(i) && ok_data_tile[j] ==
false) {
88 observedRegions[j] = value;
89 ok_data_tile[j] =
true;
94 for (
size_t j=0; j<random.
nObjects(); j++)
95 if (random.
region(j) == data.
region(i) && ok_random_tile[j] ==
false) {
96 randomRegions[j] = value;
97 ok_random_tile[j] =
true;
105 for (
size_t i=0; i<random.
nObjects(); i++)
107 if (ok_random_tile[i] ==
false) {
109 const long int new_value =
cbl::Max(randomRegions)+1;
111 for (
size_t j=0; j<random.
nObjects(); j++)
113 randomRegions[j] = new_value;
114 ok_random_tile[j] =
true;
124 const int original_nObj = random.
nObjects();
126 for (
int i=0; i<original_nObj; i++) {
128 const int idx = original_nObj-1-i;
130 if ((
int)(randomRegions[idx]) > (
int)(
cbl::Max(observedRegions))) {
132 randomRegions.erase(randomRegions.begin()+idx);
143 const double zMin = data.
Min(catalogue::Var::_Redshift_);
144 const double Cell_z = (data.
Max(catalogue::Var::_Redshift_)-zMin)/nz;
146 int next_max_tile_number =
cbl::Max(observedRegions)+1;
147 std::vector<std::vector<long int>> tile_z_idx (
cbl::Max(observedRegions)+1, std::vector<long int>(nz, -1));
149 std::vector<long int> dummy_observedRegions = observedRegions;
151 for (
size_t i=0; i<observedRegions.size(); i++) {
153 int z_idx = min(
int((data.
redshift(i)-zMin)/Cell_z), nz-1);
157 if (tile_z_idx[dummy_observedRegions[i]][z_idx] != -1)
158 observedRegions[i] = tile_z_idx[dummy_observedRegions[i]][z_idx];
161 observedRegions[i] = next_max_tile_number;
162 tile_z_idx[dummy_observedRegions[i]][z_idx] = next_max_tile_number;
163 next_max_tile_number ++;
172 std::vector<long int> dummy_randomRegions = randomRegions;
174 for (
size_t i=0; i<randomRegions.size(); i++) {
175 int z_idx = min(
int((random.
redshift(i)-zMin)/Cell_z), nz-1);
176 randomRegions[i] = tile_z_idx[dummy_randomRegions[i]][z_idx];
185 std::sort(sorted_regions.begin(), sorted_regions.end());
187 std::vector<long int> missed_index;
190 for (
size_t i=0; i<sorted_regions.size(); i++) {
192 if ((
size_t)(sorted_regions[idx]) != i) {
193 missed_index.emplace_back(i);
198 for (
size_t i=0; i<missed_index.size(); i++) {
200 const long int max_idx = sorted_regions[sorted_regions.size()-1];
202 for (
size_t j=0; j<observedRegions.size(); j++)
203 if (observedRegions[j] == max_idx)
204 observedRegions[j] = missed_index[i];
206 for (
size_t j=0; j<randomRegions.size(); j++)
207 if (randomRegions[j] == max_idx)
208 randomRegions[j] = missed_index[i];
210 sorted_regions.erase(sorted_regions.end()-1);
216 for (
size_t i=0; i<random.
nObjects(); i++)
217 if (randomRegions[i] == -1)
218 ErrorCBL(
"Some random objects fall in redshift bins that are not populated by any data object!",
"set_ObjectRegion_Tiles_Redshift",
"GlobalFunc/SubSample.cpp");
224 data.
set_region(observedRegions, nRegions_data);
225 random.
set_region(randomRegions, nRegions_random);
238 const double xMin = data.
Min(catalogue::Var::_X_);
239 const double yMin = data.
Min(catalogue::Var::_Y_);
240 const double zMin = data.
Min(catalogue::Var::_Z_);
242 const double Cell_X = (data.
Max(catalogue::Var::_X_)-xMin)/nx;
243 const double Cell_Y = (data.
Max(catalogue::Var::_Y_)-yMin)/ny;
244 const double Cell_Z = (data.
Max(catalogue::Var::_Z_)-zMin)/nz;
246 vector<long> dataReg(data.
nObjects());
248 #pragma omp parallel num_threads(omp_get_max_threads())
251 #pragma omp for schedule(static, 2)
252 for (
size_t i=0; i<data.
nObjects(); i++) {
253 const int i1 = min(
int((data.
xx(i)-xMin)/Cell_X), nx-1);
254 const int j1 = min(
int((data.
yy(i)-yMin)/Cell_Y), ny-1);
255 const int z1 = min(
int((data.
zz(i)-zMin)/Cell_Z), nz-1);
256 const int index = z1+nz*(j1+ny*i1);
271 string mangle_dir = path.
DirCosmo()+
"/External/mangle/";
273 string mangle_working_dir = mangle_dir+
"output/";
274 string mkdir =
"mkdir -p "+mangle_working_dir;
275 if (system(mkdir.c_str())) {}
277 string out_cat = mangle_working_dir+
"data.dat";
278 string out_ran = mangle_working_dir+
"ran.dat";
280 ofstream fout(out_cat.c_str());
checkIO(fout, out_cat); fout.precision(10);
282 for (
size_t i=0; i<data.
nObjects(); i++)
283 fout << data.
ra(i) <<
" " << data.
dec(i) << endl;
284 fout.clear(); fout.close();
286 string cmd = mangle_dir+
"bin/polyid -ur "+polygonfile+
" "+out_cat+
" "+out_cat+
".id";
287 if (system(cmd.c_str())) {}
289 vector<int> poly_data, poly_list;
292 string in_cat = out_cat+
".id";
294 ifstream fin(in_cat.c_str());
checkIO(fin, in_cat);
296 while (getline(fin, line)) {
297 stringstream ss(line);
double NUM;
int pp=-100;
301 if (pp==-100)
ErrorCBL(
"",
"set_ObjectRegion_mangle",
"GlobalFunc/SubSample.cpp");
302 poly_data.push_back(pp);
304 fin.clear(); fin.close();
306 vector<int>::iterator it = poly_list.begin();
307 sort(poly_list.begin(), poly_list.end());
308 it = unique(poly_list.begin(), poly_list.end());
309 poly_list.resize(distance(poly_list.begin(), it));
311 int nPoly = poly_list.size();
313 vector<int> boundaries(nSamples+1, 0);
314 boundaries[0] =
Min(poly_list); boundaries[nSamples] =
Max(poly_list)+100;
316 for (
int i=1; i<nSamples; i++)
317 boundaries[i] = poly_list[i*
int(nPoly/(nSamples))];
319 vector<long> dataReg(data.
nObjects());
321 for (
size_t i=1; i<boundaries.size(); i++) {
322 for (
size_t j=0; j<poly_data.size(); j++)
323 if (poly_data[j]>=boundaries[i-1] && poly_data[j] <boundaries[i])
329 string RM =
"rm -rf "+mangle_working_dir;
330 if (system(RM.c_str())) {}
340 coutCBL <<
"I'm putting data and random objects in box-sized regions."<<endl;
342 const double xMin = data.
Min(catalogue::Var::_X_);
343 const double yMin = data.
Min(catalogue::Var::_Y_);
344 const double zMin = data.
Min(catalogue::Var::_Z_);
346 const double Cell_X = (data.
Max(catalogue::Var::_X_)-xMin)/nx;
347 const double Cell_Y = (data.
Max(catalogue::Var::_Y_)-yMin)/ny;
348 const double Cell_Z = (data.
Max(catalogue::Var::_Z_)-zMin)/nz;
350 vector<long> dataReg(data.
nObjects());
351 vector<long> randReg(random.
nObjects());
353 #pragma omp parallel num_threads(omp_get_max_threads())
356 #pragma omp for schedule(static, 2)
357 for (
size_t i=0; i<data.
nObjects(); i++) {
358 const int i1 = min(
int((data.
xx(i)-xMin)/Cell_X), nx-1);
359 const int j1 = min(
int((data.
yy(i)-yMin)/Cell_Y), ny-1);
360 const int z1 = min(
int((data.
zz(i)-zMin)/Cell_Z), nz-1);
361 const int index = z1+nz*(j1+ny*i1);
365 #pragma omp for schedule(static, 2)
366 for (
size_t i=0; i<random.
nObjects(); i++) {
367 const int i1 = min(
int((random.
xx(i)-xMin)/Cell_X), nx-1);
368 const int j1 = min(
int((random.
yy(i)-yMin)/Cell_Y), ny-1);
369 const int z1 = min(
int((random.
zz(i)-zMin)/Cell_Z), nz-1);
370 const int index = z1+nz*(j1+ny*i1);
390 string mangle_dir = path.
DirCosmo()+
"/External/mangle/";
392 string mangle_working_dir = mangle_dir+
"output/";
393 string mkdir =
"mkdir -p "+mangle_working_dir;
394 if (system(mkdir.c_str())) {}
396 string out_cat = mangle_working_dir+
"data.dat";
397 string out_ran = mangle_working_dir+
"ran.dat";
399 ofstream fout(out_cat.c_str());
checkIO(fout, out_cat); fout.precision(10);
401 for (
size_t i=0; i<data.
nObjects(); i++)
402 fout << data.
ra(i) <<
" " << data.
dec(i) << endl;
403 fout.clear(); fout.close();
405 fout.open(out_ran.c_str());
checkIO(fout, out_ran);
406 for (
size_t i=0; i<random.
nObjects(); i++)
407 fout << random.
ra(i) <<
" " << random.
dec(i) << endl;
408 fout.clear(); fout.close();
410 string cmd = mangle_dir+
"bin/polyid -ur "+polygonfile+
" "+out_cat+
" "+out_cat+
".id";
411 if (system(cmd.c_str())) {}
412 cmd = mangle_dir+
"bin/polyid -ur "+polygonfile+
" "+out_ran+
" "+out_ran+
".id";
413 if (system(cmd.c_str())) {}
415 vector<int> poly_data, poly_random, poly_list;
418 string in_cat = out_cat+
".id";
419 string in_ran = out_ran+
".id";
421 ifstream fin(in_cat.c_str());
checkIO(fin, in_cat);
423 while (getline(fin, line)) {
424 stringstream ss(line);
double NUM;
int pp=-100;
428 if (pp==-100)
ErrorCBL(
"",
"set_ObjectRegion_mangle",
"GlobalFunc/SubSample.cpp");
429 poly_data.push_back(pp);
431 fin.clear(); fin.close();
433 fin.open(in_ran.c_str());
checkIO(fin, in_ran);
435 while (getline(fin, line)) {
436 stringstream ss(line);
double NUM;
int pp = -100;
440 if (pp==-100)
ErrorCBL(
"",
"set_ObjectRegion_mangle",
"GlobalFunc/SubSample.cpp");
441 poly_random.push_back(pp);
442 poly_list.push_back(pp);
444 fin.clear(); fin.close();
446 vector<int>::iterator it = poly_list.begin();
447 sort(poly_list.begin(), poly_list.end());
448 it = unique(poly_list.begin(), poly_list.end());
449 poly_list.resize(distance(poly_list.begin(), it));
451 int nPoly = poly_list.size();
453 vector<int> boundaries(nSamples+1, 0);
454 boundaries[0] =
Min(poly_list); boundaries[nSamples] =
Max(poly_list)+100;
456 for (
int i=1; i<nSamples; i++)
457 boundaries[i] = poly_list[i*
int(nPoly/(nSamples))];
459 vector<long> dataReg(data.
nObjects());
460 vector<long> randReg(random.
nObjects());
462 for (
size_t i=1; i<boundaries.size(); i++) {
463 for (
size_t j=0; j<poly_data.size(); j++)
464 if (poly_data[j]>=boundaries[i-1] && poly_data[j] <boundaries[i])
467 for (
size_t j=0; j<poly_random.size(); j++)
468 if (poly_random[j]>=boundaries[i-1] && poly_random[j]<boundaries[i])
472 string RM =
"rm -rf "+mangle_working_dir;
473 if (system(RM.c_str())) {}
488 for (
size_t i=0; i<latitude.size(); i++)
500 vector<double> data_x = data.
var(catalogue::Var::_RA_);
501 vector<double> data_y = (use_colatitude) ?
cbl::colatitude(data.
var(catalogue::Var::_Dec_)) : data.
var(catalogue::Var::_Dec_);
502 vector<double> cos_data_y(data.
nObjects(), 0);
503 for (
size_t i=0; i<data.
nObjects(); i++)
504 cos_data_y[i] = cos(data_y[i]);
506 double min_ra =
Min(data_x);
507 double max_ra =
Max(data_x);
508 double deltaRa = (max_ra-min_ra)/nCells_Ra;
510 double min_cdec =
Min(cos_data_y);
511 double max_cdec =
Max(cos_data_y);
512 double deltaCDec = (max_cdec-min_cdec)/nCells_Dec;
514 int nCells = nCells_Ra*nCells_Dec;
515 double Area = deltaRa*deltaCDec*nCells;
517 coutCBL <<
"Survey area is: " << Area << endl;
518 coutCBL <<
"Number of cells will be: " << nCells << endl;
520 vector<long> dataReg(data.
nObjects());
522 #pragma omp parallel num_threads(omp_get_max_threads())
525 #pragma omp for schedule(static, 2)
526 for (
size_t i=0; i<data.
nObjects(); i++) {
527 int j1 = min(
int((cos_data_y[i]-min_cdec)/deltaCDec), nCells_Dec-1);
528 int i1 = min(
int((data_x[i]-min_ra)/deltaRa), nCells_Ra-1);
529 dataReg[i] = i1*nCells_Dec+j1;
543 vector<double> data_x = data.
var(catalogue::Var::_RA_);
544 vector<double> data_y = (use_colatitude) ?
cbl::colatitude(data.
var(catalogue::Var::_Dec_)) : data.
var(catalogue::Var::_Dec_);
545 vector<double> cos_data_y(data.
nObjects(), 0);
546 for (
size_t i=0; i<data.
nObjects(); i++)
547 cos_data_y[i] = cos(data_y[i]);
550 vector<double> random_x = random.
var(catalogue::Var::_RA_);
551 vector<double> random_y = (use_colatitude) ?
cbl::colatitude(random.
var(catalogue::Var::_Dec_)) : random.
var(catalogue::Var::_Dec_);
552 vector<double> cos_random_y(random.
nObjects(), 0);
553 for (
size_t i=0; i<random.
nObjects(); i++)
554 cos_random_y[i] = cos(random_y[i]);
556 double min_ra =
Min(random_x);
557 double max_ra =
Max(random_x);
558 double deltaRa = (max_ra-min_ra)/nCells_Ra;
560 double min_cdec =
Min(cos_random_y);
561 double max_cdec =
Max(cos_random_y);
562 double deltaCDec = (max_cdec-min_cdec)/nCells_Dec;
564 int nCells = nCells_Ra*nCells_Dec;
565 double Area = deltaRa*deltaCDec*nCells;
567 coutCBL <<
"Survey area is: " << Area << endl;
568 coutCBL <<
"Number of cells will be: " << nCells << endl;
570 vector<long> dataReg(data.
nObjects());
571 vector<long> randReg(random.
nObjects());
573 #pragma omp parallel num_threads(omp_get_max_threads())
576 #pragma omp for schedule(static, 2)
577 for (
size_t i=0; i<data.
nObjects(); i++) {
578 int j1 = min(
int((cos_data_y[i]-min_cdec)/deltaCDec), nCells_Dec-1);
579 int i1 = min(
int((data_x[i]-min_ra)/deltaRa), nCells_Ra-1);
580 dataReg[i] = i1*nCells_Dec+j1;
583 #pragma omp for schedule(static, 2)
584 for (
size_t i=0; i<random.
nObjects(); i++) {
585 int j1 = min(
int((cos_random_y[i]-min_cdec)/deltaCDec), nCells_Dec-1);
586 int i1 = min(
int((random_x[i]-min_ra)/deltaRa), nCells_Ra-1);
587 randReg[i] = i1*nCells_Dec+j1;
603 coutCBL <<
"Checking if the regions have been assigned correctly..." << endl;
608 ErrorCBL(
"data and random have different number of regions: data_regions.size() = "+
conv(data.
nRegions(),
par::fINT)+
", random_regions.size = "+
conv(random.
nRegions(),
par::fINT)+
": please set the number of regions through set_region_number() or check your inputs!",
"check_regions",
"GlobalFunc/SubSample.cpp");
613 vector<long> dataObj_region(nRegions, 0);
614 vector<long> data_region = data.
region();
616 for (
size_t i=0; i<data.
nObjects(); ++i) {
617 checkDim(dataObj_region, data_region[i],
"dataObj_region",
false);
618 dataObj_region[data_region[i]] ++;
621 vector<long> randObj_region(nRegions, 0);
622 vector<long> rand_region = random.
region();
623 for (
size_t i=0; i<random.
nObjects(); ++i) {
624 checkDim(randObj_region, rand_region[i],
"randObj_region",
false);
625 randObj_region[rand_region[i]] ++;
630 size_t region_eff = 0;
631 std::map<long, long> region_list_eff;
632 for (
size_t i=0; i<nRegions; i++) {
633 if (randObj_region[i]!=0) {
634 region_list_eff.insert(pair<long, long>(i, region_eff));
639 if (dataObj_region[i]!=0)
640 ErrorCBL(
"the "+
conv(i,
par::fINT)+
" region is empty in the random sample, but contains "+
conv(dataObj_region[i],
par::fINT)+
" data points; this is not allowed, Please check your inputs!",
"check_regions",
"GlobalFunc/SubSample.cpp");
644 if (region_eff!=nRegions) {
646 coutCBL <<
"Rearranging regions in data and random sample..." << endl;
647 for (
size_t i=0; i<data.
nObjects(); ++i) {
648 checkDim(data_region, i,
"data_region",
false);
649 if (
int(region_list_eff.size())<data_region[i])
ErrorCBL(
"the dimension of region_list_eff is: " +
conv(region_list_eff.size(),
par::fINT) +
" ( < " +
conv(data_region[i],
par::fINT) +
" )",
"check_regions",
"SubSample.cpp");
650 data_region[i] = region_list_eff[data_region[i]];
653 for (
size_t i=0; i<random.
nObjects(); ++i) {
654 checkDim(rand_region, i,
"rand_region",
false);
655 if (
int(region_list_eff.size())<rand_region[i])
ErrorCBL(
"the dimension of region_list_eff is: " +
conv(region_list_eff.size(),
par::fINT) +
" ( < " +
conv(rand_region[i],
par::fINT) +
" )",
"check_regions",
"SubSample.cpp");
656 rand_region[i] = region_list_eff[rand_region[i]];
664 coutCBL <<
"End check regions!" << endl;
674 vector<double> lambda, eta, random_lambda, random_eta;
675 vector<int> stripe, random_stripe, str_u, random_str_u;
677 eq2sdss(data.
var(catalogue::Var::_RA_), data.
var(catalogue::Var::_Dec_), lambda, eta);
680 eq2sdss(random.
var(catalogue::Var::_RA_), random.
var(catalogue::Var::_Dec_), random_lambda, random_eta);
681 sdss_stripe (random_eta, random_lambda, random_stripe, random_str_u);
684 ErrorCBL(
"data and random catalogues have different stripes!",
"set_ObjectRegion_SDSS_stripes",
"GlobalFunc/SubSample.cpp");
686 for (
size_t i=0; i<data.
nObjects(); i++)
687 data.
set_var(i, catalogue::Var::_Region_, stripe[i]);
689 for (
size_t i=0; i<random.
nObjects(); i++)
690 random.
set_var(i, catalogue::Var::_Region_, random_stripe[i]);
Generic functions that use one or more classes of the CosmoBolognaLib.
#define coutCBL
CBL print message.
std::string DirCosmo()
get the directory where the CosmoBolognaLbi are stored
size_t nRegions()
get the private member m_nRegions
double yy(const int i) const
get the private member Catalogue::m_object[i]->m_yy
double Min(const Var var_name) const
get the minimum value of a variable of the catalogue objects
size_t nObjects() const
get the number of objects of the catalogue
void set_region_number(const size_t nRegions)
set the private variable m_nRegion
double dec(const int i) const
get the private member Catalogue::m_object[i]->m_dec
bool isSetVar(const int index, const Var var_name) const
check if the given variable of the i-th object is set
double xx(const int i) const
get the private member Catalogue::m_object[i]->m_xx
double redshift(const int i) const
get the private member Catalogue::m_object[i]->m_redshift
double ra(const int i) const
get the private member Catalogue::m_object[i]->m_ra
double var(const int index, const Var var_name) const
get the value of the i-th object variable
double Max(const Var var_name) const
get the maximum value of a variable of the catalogue objects
double zz(const int i) const
get the private member Catalogue::m_object[i]->m_zz
long region(const int i) const
get the private member Catalogue::m_object[i]->m_region
void set_region(const std::vector< long > region, const int nRegions=-1)
set a private variable
void set_var(const int index, const Var var_name, const double value, const cosmology::Cosmology cosmology={}, const bool update_coordinates=true)
set a private variable
void remove_object(const int index)
remove an existing object
static const char fINT[]
conversion symbol for: int -> std::string
static const double pi
: the ratio of a circle's circumference to its diameter
The global namespace of the CosmoBolognaLib
T Min(const std::vector< T > vect)
minimum element of a std::vector
std::string conv(const T val, const char *fact)
convert a number to a std::string
void set_ObjectRegion_RaDec(catalogue::Catalogue &data, const int nCells_Ra, const int nCells_Dec, const bool use_colatitude=true)
set the object region in angular SubBoxes
std::vector< T > different_elements(const std::vector< T > vect_input)
get the unique elements of a std::vector
void checkDim(const std::vector< T > vect, const int val, const std::string vector, bool equal=true)
check if the dimension of a std::vector is equal/lower than an input value
void check_regions(catalogue::Catalogue &data, catalogue::Catalogue &random)
check if the subdivision process produced the correct results
void checkIO(const std::ifstream &fin, const std::string file="NULL")
check if an input file can be opened
void set_ObjectRegion_Tiles_Redshift(catalogue::Catalogue &data, catalogue::Catalogue &random, const int nz)
set data and random objects' regions given R.A.-Dec tiles and a number of redshift sub-samples....
int ErrorCBL(const std::string msg, const std::string functionCBL, const std::string fileCBL, const cbl::glob::ExitCode exitCode=cbl::glob::ExitCode::_error_)
throw an exception: it is used for handling exceptions inside the CosmoBolognaLib
std::vector< double > colatitude(std::vector< double > latitude)
convert to colatitude
void set_ObjectRegion_SubBoxes(catalogue::Catalogue &data, const int nx, const int ny, const int nz)
set the object region in sub-boxes
void set_ObjectRegion_mangle(catalogue::Catalogue &data, const int nSamples, const std::string polygonfile)
set the object region in sub-regions using mangle
T Max(const std::vector< T > vect)
maximum element of a std::vector
bool isDimEqual(const std::vector< T > vect1, const std::vector< T > vect2)
check if the dimensions of two std::vectors are equal
void sdss_stripe(const std::vector< double > eta, const std::vector< double > lambda, std::vector< int > &stripe, std::vector< int > &str_u)
compute the SDSS stripe given SDSS coordinates
void set_ObjectRegion_SDSS_stripes(catalogue::Catalogue &data, catalogue::Catalogue &random)
set the object region in SDSS stripes
void eq2sdss(const std::vector< double > ra, const std::vector< double > dec, std::vector< double > &lambda, std::vector< double > &eta)
convert from equatorial coordinates R.A., Dec to sdss coordinates