9#ifndef __SLsimLib__causticdata__ 
   10#define __SLsimLib__causticdata__ 
   14#include "utilities_slsim.h" 
   15#include "simpleTree.h" 
   16#include "simpleTreeVec.h" 
   17#include "grid_maintenance.h" 
   63  double crit_radius[3];
 
   69  Point_2d caustic_center;
 
   71  double caustic_radius[3];
 
   87  CausticDataStore(std::string filename,bool verbose = false);
 
   89  CausticDataStore(std::vector<ImageFinding::CriticalCurve> &crticurve_vec);
 
   90  CausticDataStore(const CausticDataStore &input);
 
   95  void addcrits(std::vector<ImageFinding::CriticalCurve> &crticurve_vec);
 
   97  double getTotalCritArea(){return totalcritarea;}
 
   98  double getTotalCausticArea(){return totalcausticarea;}
 
  101  void printfile(std::string filename,std::string paramfile,double fieldofview,double minscale);
 
  104  void resize(size_t size){ data.resize(size);}
 
  106  size_t numberOfCaustics(){return data.size();}
 
  109  CausticSummary & operator[](size_t index){return data[index];}
 
  112  CausticSummary & CritAreaOrder(size_t n){return data[crit_area_index[n]];}
 
  114  CausticSummary & CausticAreaOrder(size_t n){return data[caus_area_index[n]];}
 
  116  CausticSummary & CritRadiusOrder(size_t n){return data[caus_area_index[n]];}
 
  119  size_t getNthIndexCritArea(size_t n){return crit_area_index[n];}
 
  121  size_t getNthIndexCaustArea(size_t n){return caus_area_index[n];}
 
  123  size_t getNthIndexCritRadius(size_t n){return crit_radius_index[n];}
 
  127  //void SortByCritSize();
 
  129  //void SortByCritArea();
 
  131  //void SortByCausticArea();
 
  134  size_t init_for_random(
 
  135        short type              /// select according to: (1) critical curve area, (2) caustic curve area
 
  136        ,double limit = 0.0     /// minimum accepted area