Changeset 15190 for trunk/FACT++
- Timestamp:
- 03/30/13 13:35:20 (12 years ago)
- Location:
- trunk/FACT++/src
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/FACT++/src/Time.cc
r15006 r15190 26 26 // ************************************************************************** 27 27 #include "Time.h" 28 29 #ifdef HAVE_LIBNOVA 30 #include <libnova/solar.h> 31 #include <libnova/rise_set.h> 32 #endif 28 33 29 34 using namespace std; … … 291 296 // 292 297 //! @returns 293 //! an int corresponding to the stored time minus 12 hours of the form 298 //! The time of the previous sun-rise, relative to given horizon in degree, 299 //! for the coordinates of the ORM, La Palma. 300 //! if libnova was not compiled in, it will return the next noon. 301 //! 302 //! @throws 303 //! a runtime_error exception is thrown if the calculation of the sun-rise 304 //! by libnova fails (this would happen if libnova thinks the sun is 305 //! circumpolar which should never happen at La Palma) 306 // 307 Time Time::GetPrevSunRise(double horizon) const 308 { 309 #ifdef HAVE_LIBNOVA 310 const double lon = -(17.+53./60+26.525/3600); 311 const double lat = 28.+45./60+42.462/3600; 312 313 ln_lnlat_posn observer; 314 observer.lng = lon; 315 observer.lat = lat; 316 317 ln_rst_time sun_day; 318 if (ln_get_solar_rst_horizon(JD()-0.5, &observer, horizon, &sun_day)==1) 319 throw runtime_error("ln_get_solar_rst_horizon reported the sun to be circumpolar at the coordinates of La Palma!"); 320 321 if (Time(sun_day.rise)<*this) 322 return Time(sun_day.rise); 323 324 if (ln_get_solar_rst_horizon(JD()-1.5, &observer, horizon, &sun_day)==1) 325 throw runtime_error("ln_get_solar_rst_horizon reported the sun to be circumpolar at the coordinates of La Palma!"); 326 327 return Time(sun_day.rise); 328 #else 329 return Time(floor(GetMjd()-0.5)+0.5); 330 #endif 331 } 332 333 // -------------------------------------------------------------------------- 334 // 335 //! @returns 336 //! The time of the next sun-rise, relative to given horizon in degree, 337 //! for the coordinates of the ORM, La Palma. 338 //! if libnova was not compiled in, it will return the next noon. 339 //! 340 //! @throws 341 //! a runtime_error exception is thrown if the calculation of the sun-rise 342 //! by libnova fails (this would happen if libnova thinks the sun is 343 //! circumpolar which should never happen at La Palma) 344 // 345 Time Time::GetNextSunRise(double horizon) const 346 { 347 #ifdef HAVE_LIBNOVA 348 const double lon = -(17.+53./60+26.525/3600); 349 const double lat = 28.+45./60+42.462/3600; 350 351 ln_lnlat_posn observer; 352 observer.lng = lon; 353 observer.lat = lat; 354 355 ln_rst_time sun_day; 356 if (ln_get_solar_rst_horizon(JD()-0.5, &observer, horizon, &sun_day)==1) 357 throw runtime_error("ln_get_solar_rst_horizon reported the sun to be circumpolar at the coordinates of La Palma!"); 358 359 if (Time(sun_day.rise)>=*this) 360 return Time(sun_day.rise); 361 362 if (ln_get_solar_rst_horizon(JD()+0.5, &observer, horizon, &sun_day)==1) 363 throw runtime_error("ln_get_solar_rst_horizon reported the sun to be circumpolar at the coordinates of La Palma!"); 364 365 return Time(sun_day.rise); 366 #else 367 return Time(floor(GetMjd()+0.5))+0.5; 368 #endif 369 } 370 371 // -------------------------------------------------------------------------- 372 // 373 //! Calls GetPrevSunRise(LN_SOLAR_STANDART_HORIZON) 374 // 375 Time Time::GetPrevSunRise() const 376 { 377 return GetPrevSunRise(LN_SOLAR_STANDART_HORIZON); 378 } 379 380 // -------------------------------------------------------------------------- 381 // 382 //! Calls GetNextSunRise(LN_SOLAR_STANDART_HORIZON) 383 // 384 Time Time::GetNextSunRise() const 385 { 386 return GetNextSunRise(LN_SOLAR_STANDART_HORIZON); 387 } 388 389 // -------------------------------------------------------------------------- 390 // 391 //! @returns 392 //! Returns an int corresponding to the current sun-cycle, that means 393 //! the day of the last sun-rise w.r.t. this Time. 294 394 //! YYYYMMDD, e.g. 20111224 for Christmas eve 2011 395 //! 396 //! @remark 397 //! Before March 30th 2013, 12:00 noon was the reference and the 398 //! returned value belonged to the day of sun-set within the 399 //! 24h period between two noon's. 295 400 // 296 401 int Time::NightAsInt() const 297 402 { 298 const Time tm = *this - boost::posix_time::hours(12);403 const Time tm = GetPrevSunRise(); 299 404 return tm.Y()*10000 + tm.M()*100 + tm.D(); 300 405 } … … 379 484 return in; 380 485 } 381 -
trunk/FACT++/src/Time.h
r15006 r15190 113 113 std::string SecondsTo(const Time & = Time()) const; 114 114 115 Time GetPrevSunRise(double horizon) const; 116 Time GetNextSunRise(double horizon) const; 117 118 Time GetPrevSunRise() const; 119 Time GetNextSunRise() const; 120 115 121 int NightAsInt() const; 116 122 };
Note:
See TracChangeset
for help on using the changeset viewer.