10 #include "earthmodel.hh" 24 const double FIRNDEPTH=-150.;
32 const double scale_factor=0.97276901289;
33 const double ellipsoid_inv_f = 298.257223563;
34 const double ellipsoid_b = EarthModel::R_EARTH*(1-(1/ellipsoid_inv_f));
35 const double eccentricity = sqrt((1/ellipsoid_inv_f)*(2-(1/ellipsoid_inv_f)));
36 const double bedmap_a_bar = pow(eccentricity,2)/2 + 5*pow(eccentricity,4)/24 + pow(eccentricity,6)/12 + 13*pow(eccentricity,8)/360;
37 const double bedmap_b_bar = 7*pow(eccentricity,4)/48 + 29*pow(eccentricity,6)/240 + 811*pow(eccentricity,8)/11520;
38 const double bedmap_c_bar = 7*pow(eccentricity,6)/120 + 81*pow(eccentricity,8)/1120;
39 const double bedmap_d_bar = 4279*pow(eccentricity,8)/161280;
40 const double bedmap_c_0 = (2*EarthModel::R_EARTH / sqrt(1-pow(eccentricity,2))) * pow(( (1-eccentricity) / (1+eccentricity) ),eccentricity/2);
59 std::vector<double> abs_weights;
60 std::vector<double> weight_probs;
61 std::vector<double> lengths;
62 double sum_weight_probs;
67 balloon.SetXYZ(0,0,0);
74 enterice.SetXYZ(0,0,0);
75 exitice.SetXYZ(0,0,0);
76 exitearth.SetXYZ(0,0,0);
109 TH2D h_ice_thickness;
110 TH2D h_ground_elevation;;
126 int xLowerLeft_ground;
127 int yLowerLeft_ground;
130 int xLowerLeft_water;
131 int yLowerLeft_water;
135 void IceENtoLonLat(
int e,
141 void GroundENtoLonLat(
int e,
145 void WaterENtoLonLat(
int e,
152 vector<double> volume_inhorizon;
153 IceModel(
int model=0,
int earth_mode=0,
int WEIGHTABSORPTION_SETTING=1);
155 double IceThickness(
double lon,
double lat);
156 double IceThickness(
const Position& pos) ;
157 double Surface(
double lon,
double lat) ;
158 double Surface(
const Position& pos) ;
159 double SurfaceAboveGeoid(
double lon,
double lat);
160 double SurfaceAboveGeoid(
const Position& pos) ;
161 double WaterDepth(
double lon,
double lat);
162 double WaterDepth(
const Position& pos);
165 void GetMAXHORIZON(
Balloon *bn1);
166 int RossIceShelf(
const Position &position);
167 int IceOnWater(
const Position &postition);
168 int RossExcept(
const Position &position);
169 int RonneIceShelf(
const Position &position);
171 int AcceptableRfexit(
const Vector &nsurf_rfexit,
const Position &rfexit,
const Vector &n_exit2rx);
172 double GetBalloonPositionWeight(
int ibnpos);
173 int OutsideAntarctica(
const Position &pos);
174 int OutsideAntarctica(
double lat);
175 int WhereDoesItEnterIce(
const Position &posnu,
180 int WhereDoesItExitIce(
const Position &posnu,
184 int WhereDoesItExitIceForward(
const Position &posnu,
191 void CreateCartesianTopAndBottom(
int resolution,
bool force_new =
false);
192 const TH2 * GetCartesianTop()
const {
return cart_ice_top; }
193 const TH2 * GetCartesianBottom()
const {
return cart_ice_bot; }
194 bool CartesianIsInIce(
double x,
double y,
double z);
196 int GetIceIntersectionsCartesian(
const Position &posnu,
const Vector &nnu,
197 std::vector<std::pair<double,double> > & intersections,
double initial_step_size = 50,
int map_resolution=2000);
200 void CreateHorizons(
Settings *settings1,
Balloon *bn1,
double theta_bn,
double phi_bn,
double altitude_bn,ofstream &foutput);
202 double GetN(
double depth);
204 double EffectiveAttenuationLength(
Settings *settings1,
const Position &pos,
const int &whichray);
206 void FillArraysforTree(
double lon_ground[1068][869],
double lat_ground[1068][869],
double lon_ice[1200][1000],
double lat_ice[1200][1000],
double lon_water[1200][1000],
double lat_water[1200][1000]);
207 int PickUnbiased(
Interaction *interaction1,
double len_int_kgm2,
double & position_weight,
double chord_step,
Vector * force_dir = 0);
209 int PickUnbiasedPointSourceNearBalloon(
Interaction *interaction1,
210 const Position * balloon_position,
double max_ps_distance,
double chord_step,
211 double len_int_kgm2,
const Vector * force_dir = 0);
213 double getSampleX()
const {
return sample_x; }
214 double getSampleY()
const {
return sample_y; }
216 void LonLattoEN(
double lon,
224 int DEPTH_DEPENDENT_N;
230 double volume_inhorizon_average;
231 vector< vector<int> > ilon_inhorizon;
232 vector< vector<int> >ilat_inhorizon;
233 vector< vector<int> >easting_inhorizon;
234 vector< vector<int> >northing_inhorizon;
235 vector<double> maxvol_inhorizon;
239 double sample_x, sample_y;
243 TFile *cart_ice_file;
247 double Area(
double latitude);
249 void ENtoLonLat(
int e_coord,
261 void ReadIceThickness();
262 void ReadGroundBed();
263 void ReadWaterDepth();
267 const static int N_sheetup=2810;
268 double d_sheetup[N_sheetup], l_sheetup[N_sheetup];
269 const static int N_shelfup=420;
270 double d_shelfup[N_shelfup], l_shelfup[N_shelfup];
271 const static int N_westlandup=420;
272 double d_westlandup[N_westlandup],l_westlandup[N_westlandup];
274 const static int N_sheetdown=2810;
275 double d_sheetdown[N_sheetup], l_sheetdown[N_sheetdown];
276 const static int N_shelfdown=420;
277 double d_shelfdown[N_shelfdown], l_shelfdown[N_shelfdown];
278 const static int N_westlanddown=420;
279 double d_westlanddown[N_westlanddown],l_westlanddown[N_westlanddown];
Reads in and stores input settings for the run.
This class is a 3-vector that represents a position on the Earth's surface.
Stores everything about a particular neutrino interaction. Interaction.
Shape of the earth, ice thicknesses, profiles of earth layers, densities, neutrino absorption...
Handles everything related to balloon positions, payload orientation over the course of a flight...
This class represents a three-vector. Operators are overloaded to provide for the familiar operations...
Ice thicknesses and water depth.