36 #define G_GET_PARAMETERS "ctphase::get_parameters()"
37 #define G_PHASE_EVENTS "ctphase::phase_events(GCTAObservation*)"
187 this->GApplication::clear();
218 log_header1(TERSE,
"Compute event phase");
221 int n_observations = 0;
237 if (n_observations > 1) {
245 if ((*
this)[
"publish"].
boolean()) {
276 log_header1(TERSE, gammalib::number(
"Save event list",
m_obs.size()));
301 log_header1(TERSE, gammalib::number(
"Publish event list",
m_obs.size()));
304 for (
int i = 0; i <
m_obs.size(); ++i) {
307 GCTAObservation*
obs =
dynamic_cast<GCTAObservation*
>(
m_obs[i]);
313 if (obs->events()->size() != 0) {
316 std::string user_name(name);
317 if (user_name.empty()) {
323 user_name += gammalib::str(i);
327 log_value(NORMAL,
"Event list name", user_name);
334 fits.publish(gammalib::extname_cta_events, user_name);
406 if (
m_obs.models().size() == 0) {
407 if ((*
this)[
"inmodel"].is_valid()) {
408 m_obs.models((*
this)[
"inmodel"].filename());
414 if (
m_obs.models().size() != 0) {
417 std::string srcname = (*this)[
"srcname"].string();
420 if (!
m_obs.models().contains(srcname)) {
421 std::string msg =
"Source model \""+srcname+
"\" not found in "
427 const GModelSky* sky =
428 dynamic_cast<const GModelSky*
>(
m_obs.models()[srcname]);
432 std::string msg =
"Source model \""+srcname+
"\" is not a sky "
438 GModelTemporalPhaseCurve* phasecurve =
439 dynamic_cast<GModelTemporalPhaseCurve*
>(sky->temporal());
443 if (phasecurve == NULL) {
444 std::string msg =
"Source model \""+srcname+
"\" does not have a "
445 "temporal component with phase information.";
450 m_phase = GModelTemporalPhaseCurve(*phasecurve);
458 double mjd_value = (*this)[
"mjd"].real();
459 double phase = (*this)[
"phase"].real();
460 double f0 = (*this)[
"f0"].real();
461 double f1 = (*this)[
"f1"].real();
462 double f2 = (*this)[
"f2"].real();
469 m_phase = GModelTemporalPhaseCurve();
480 (*this)[
"outobs"].query();
481 (*this)[
"prefix"].query();
506 log_header3(NORMAL,
"Compute event phases");
510 GCTAEventList* events =
dynamic_cast<GCTAEventList*
>(
const_cast<GEvents*
>
512 if (events == NULL) {
513 std::string msg =
"CTA Observation does not contain an event list. An "
514 "event list is needed to compute the event phases.";
519 if (events->size() > 0) {
522 GCTAEventAtom*
event = (*events)[0];
523 double dt = std::abs(event->time() -
m_phase.mjd());
525 double f2 =
m_phase.f2() * dt * dt;
528 log_value(NORMAL,
"Reference MJD",
m_phase.mjd().mjd());
529 log_value(NORMAL,
"First event MJD", event->time().mjd());
530 log_value(NORMAL,
"First event offset", gammalib::str(dt)+
" s");
531 log_value(NORMAL,
"F1 * dt", gammalib::str(f1)+
" Hz");
532 log_value(NORMAL,
"F2 * dt * dt", gammalib::str(f2)+
" Hz");
536 if ((f1 > 1.0e8) || (f2 > 1.0e8)) {
537 std::string msg =
"\nWARNING: Values supplied for reference MJD "
538 "and/or F1 and/or F2 are large and may\n"
539 " result in numerical precision issues. "
540 "Consider using an ephemeris derived\n"
541 " from a date closer to the data being "
543 log_string(TERSE, msg);
547 for (
int i = 0; i < events->size(); ++i) {
550 GCTAEventAtom*
event = (*events)[i];
553 GTime time =
event->time();
556 event->phase(
m_phase.phase(time));
563 events->has_phase(
true);
void clear(void)
Clear ctphase tool.
const GObservations & obs(void) const
Return observation container.
GCTAObservation * next_unbinned_observation(void)
Return next unbinned CTA observation.
void free_members(void)
Delete class members.
void save(void)
Save the output event list(s)
void get_parameters(void)
Get application parameters.
ctphase & operator=(const ctphase &app)
Assignment operator.
void publish(const std::string &name="")
Publish event lists.
GModelTemporalPhaseCurve m_phase
Phase curve model.
Base class for observation tools.
virtual ~ctphase(void)
Destructor.
void save_events_fits(void)
Save event list in FITS format.
Event phase computation tool.
void free_members(void)
Delete class members.
Event phase computation tool interface definition.
void process(void)
Process the ctprob tool.
void copy_members(const ctphase &app)
Copy class members.
void init_members(void)
Initialise class members.
GCTAObservation * first_unbinned_observation(void)
Return first unbinned CTA observation.
ctobservation & operator=(const ctobservation &app)
Assignment operator.
ctphase(void)
Void constructor.
GObservations m_obs
Observation container.
void save_events_xml(void)
Save event list(s) in XML format.
void init_members(void)
Initialise class members.
void phase_events(GCTAObservation *obs)
Compute event phase for an observation.