Ejemplo n.º 1
0
void cosmobl::check_regions (catalogue::Catalogue &data, catalogue::Catalogue &random)
{
  vector<long> data_regions = data.get_region_list();
  vector<long> random_regions = random.get_region_list();
  
  // check if data and random catalogues have the same number of regions
  if (data_regions.size() != random_regions.size()) 
    ErrorMsg("Error in check_regions of Subsample.cpp, data and random have different number of regions");
  
  // check if data and random catalogues have the same regions
  int nRegions = data_regions.size();
  for (int i=0; i<nRegions; i++)
    if (data_regions[i] != random_regions[i])
      ErrorMsg("Error in check_regions of Subsample.cpp, data and random have regions");
  
  // check if regions are consecutives and starting from 0
  bool cons = 1;
  for (int i=0; i<nRegions; i++) 
    if (data_regions[i]!=i)
      cons = 0;
  
  // make regions 
  if (!cons) {
    map<long, long> regions;
    for (long i=0; i<nRegions; i++)
      regions[data_regions[i]] = i;
      
    for (int i=0; i<data.nObjects(); i++) {
      long region = data.catalogue_object(i)->region();
      auto search = regions.find(region);
      data.catalogue_object(i)->set_region(search->second);
    }
      
    for (int i=0; i<random.nObjects(); i++) {
      long region = random.catalogue_object(i)->region();
      auto search = regions.find(region);
      random.catalogue_object(i)->set_region(search->second);
    } 
  }

}