void DateAxis(TCanvas * c) { c->Update(); TGaxis* xaxis; float minmjd = gPad->GetUxmin(); float maxmjd = gPad->GetUxmax(); float dur = (maxmjd - minmjd) * 24*3600; xaxis = new TGaxis(gPad->GetUxmin(), gPad->GetUymax(), gPad->GetUxmax(), gPad->GetUymax(), 0, dur, 505, "t-"); xaxis->SetLineColor(1); xaxis->SetLabelOffset(0.0001); // touching axis xaxis->SetLabelSize(0.04); xaxis->SetNdivisions(3); xaxis->SetTimeFormat("%d.%m.%Y"); int year, month, day, hour, min, sec; MJDToCalendarDate(minmjd, year, month, day, hour, min, sec); TDatime da(year,month,day,hour,min,sec); xaxis->SetTimeOffset(da.Convert()); xaxis->SetTitle("Calender Date"); xaxis->CenterTitle(); xaxis->Draw(); } void MJDToCalendarDate(float mjd, int & year, int & month, int & day, int & hour, int & min, int & sec) { MJDToYearDay(mjd, year, day); int monthlen[12]; monthlen[0] = 31; if ( ( year % 4 == 0 && year % 100 != 0) || ( year % 400 == 0 ) ) { monthlen[1] = 29; }else{ monthlen[1] = 28; } monthlen[2] = 31; monthlen[3] = 30; monthlen[4] = 31; monthlen[5] = 30; monthlen[6] = 31; monthlen[7] = 31; monthlen[8] = 30; monthlen[9] = 31; monthlen[10] = 30; monthlen[11] = 31; int mo = 0; while (day > monthlen[mo]) { day -= monthlen[mo]; mo++; } month = mo + 1; // day is set in loop float remains = (mjd - (int)mjd) * 24; hour = (int)remains; remains = (remains - hour) * 60; min = (int)remains; remains = (remains - min) * 60; sec = (int)remains; } void MJDToYearDay(float mjd, int & year, float & day) { int intmjd = (int)mjd; // get rid of decimal float yearsin = (intmjd - 45) / 365; if (yearsin < 0) { year = 1858; day = 319 + intmjd; }else{ int leaps = (int)(yearsin + 2) / 4; bool leapthisyear; int subleaps = (int)(leaps + 14) / 25; int addleaps = (int)(leaps + 64) / 100; if ((((int)(yearsin + 2) % 4 == 0) && ((leaps + 14) % 25 != 0)) || ((leaps + 64) % 100 == 0)) leapthisyear = true; leaps = leaps - subleaps + addleaps; int days = intmjd - 45 - leaps; yearsin = days / 365; days -= yearsin * 365; year = 1859 + yearsin; day = days + 1; if (day == 365 && leapthisyear) day = 366; day = day + (mjd - intmjd); } } void MJDToYearDay(float mjd, int & year, int & day) { float fday; MJDToYearDay(mjd, year, fday); day = (int)fday; }