Changeset 205


Ignore:
Timestamp:
01/22/07 08:55:49 (17 years ago)
Author:
smasson
Message:

improve the use of high frequency calendar

Location:
trunk/SRC
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/SRC/Calendar/caldat.pro

    r163 r205  
    7070  IF n_elements(key_caltype) EQ 0 THEN key_caltype = 'greg' 
    7171  if keyword_set(ndayspm) then key_caltype = '360d' 
     72 
     73  nParam = N_PARAMS() 
     74  IF (nParam LT 1) THEN MESSAGE, 'Incorrect number of arguments.' 
     75 
    7276  CASE key_caltype OF 
    7377    'greg':BEGIN 
    74  
    75       nParam = N_PARAMS() 
    76       IF (nParam LT 1) THEN MESSAGE, 'Incorrect number of arguments.' 
    7778 
    7879      min_julian = -1095 
     
    110111      year = TEMPORARY(year) - (month GT 2) 
    111112      year = year - (year LE 0) 
    112 ; see if we need to do hours, minutes, seconds 
    113       IF (nParam GT 4) THEN BEGIN 
    114         fraction = julian + 0.5d - TEMPORARY(julLong) 
    115         hour = floor(fraction * 24d) 
    116         fraction = TEMPORARY(fraction) - hour/24d 
    117         minute = floor(fraction*1440d) 
    118         second = (TEMPORARY(fraction) - minute/1440d) * 86400d 
    119       ENDIF 
    120  
    121 ; if julian is an array, reform all output to correct dimensions 
    122       IF (SIZE(julian, /N_DIMENSION) GT 0) THEN BEGIN 
    123         dimensions = SIZE(julian, /DIMENSION) 
    124         month = REFORM(month, dimensions) 
    125         day = REFORM(day, dimensions) 
    126         year = REFORM(year, dimensions) 
    127         IF (nParam GT 4) THEN BEGIN 
    128           hour = REFORM(hour, dimensions) 
    129           minute = REFORM(minute, dimensions) 
    130           second = REFORM(second, dimensions) 
    131         ENDIF 
    132       ENDIF 
    133113 
    134114    END  
    135115    '360d':BEGIN 
    136  
    137       jul = long(julian) 
    138       f = (jul - floor(jul)) 
    139       IF total(f NE 0.0) GT 0 THEN BEGIN ;Get hours, minutes, seconds. 
    140         hour = floor(f*24.) 
    141         f = f - hour / 24.d 
    142         minute = floor(f*1440) 
    143         second = (f - minute/1440.d0) * 86400.0d0 
    144       ENDIF ELSE BEGIN 
    145         hour = replicate(0L,  n_elements(julian)) 
    146         minute = replicate(0L,  n_elements(julian)) 
    147         second = replicate(0L,  n_elements(julian)) 
    148       ENDELSE 
    149  
     116  
    150117      IF keyword_set(ndayspm) THEN BEGIN 
    151118        IF ndayspm EQ 1 THEN ndayspm = 30 
     
    153120 
    154121      ndayspm = long(ndayspm) 
    155       Z = floor(julian) 
    156       year = z/(12*ndayspm)+1 
    157       month = (z-(12*ndayspm)*(year-1))/ndayspm+1 
    158       day = z-(12*ndayspm)*(year-1)-ndayspm*(month-1) 
     122      julLong = FLOOR(julian + 0.5d)     ;Better be long 
     123      year = julLong/(12*ndayspm)+1 
     124      month = (julLong-(12*ndayspm)*(year-1))/ndayspm+1 
     125      day = julLong-(12*ndayspm)*(year-1)-ndayspm*(month-1) 
    159126      WHILE total(day LT 1) GT 0 DO BEGIN 
    160127        tochange = where(day LT 1) 
     
    173140    'noleap':BEGIN 
    174141 
    175       jul = long(julian) 
    176       year = jul/365 + 1 
    177       day = jul MOD 365L 
    178 ; 
     142      julLong = FLOOR(julian + 0.5d)     ;Better be long 
     143      year = julLong/365 + 1 
     144      day = julLong MOD 365L 
    179145; 
    180146      zero = where(day EQ 0) 
    181  ; 
     147; 
    182148      month = 1 + (day GT 31) + (day GT 59) + (day GT 90) + (day GT 120) $ 
    183149              + (day GT 151) + (day GT 181) + (day GT 212) + (day GT 243) $ 
     
    195161        day[zero] = 31L 
    196162      ENDIF  
    197  
     163; 
    198164    END  
    199165    ELSE:BEGIN 
     
    206172  IF cnt NE 0 THEN year[zero] = year[zero]-654321L 
    207173; 
     174; see if we need to do hours, minutes, seconds 
     175  IF (nParam GT 4) THEN BEGIN 
     176    fraction = julian + 0.5d - TEMPORARY(julLong) 
     177    hour = floor(fraction * 24d) 
     178    fraction = TEMPORARY(fraction) - hour/24d 
     179    minute = floor(fraction*1440d) 
     180    second = (TEMPORARY(fraction) - minute/1440d) * 86400d 
     181  ENDIF 
     182   
     183; if julian is an array, reform all output to correct dimensions 
     184  IF (SIZE(julian, /N_DIMENSION) GT 0) THEN BEGIN 
     185    dimensions = SIZE(julian, /DIMENSION) 
     186    month = REFORM(month, dimensions, /overwrite) 
     187    day = REFORM(day, dimensions, /overwrite) 
     188    year = REFORM(year, dimensions, /overwrite) 
     189    IF (nParam GT 4) THEN BEGIN 
     190      hour = REFORM(hour, dimensions, /overwrite) 
     191      minute = REFORM(minute, dimensions, /overwrite) 
     192      second = REFORM(second, dimensions, /overwrite) 
     193    ENDIF 
     194  ENDIF 
     195; 
    208196  return 
    209197 
  • trunk/SRC/Calendar/date2jul.pro

    r157 r205  
    5050     + 2000 * (year GE  1 AND year LE 49) 
    5151;------------------------------------------------------------ 
    52    return, julday(month, day, year) 
     52  IF array_equal(date, long(date)) THEN return, julday(month, day, year) 
     53   
     54  fraction = date - long(date) 
     55  hour = floor(fraction * 24d) 
     56  fraction = TEMPORARY(fraction) - hour/24d 
     57  minute = floor(fraction*1440d) 
     58  second = (TEMPORARY(fraction) - minute/1440d) * 86400d 
     59   
     60  return, julday(month, day, year, hour, minute, second) 
     61 
    5362end 
    5463 
  • trunk/SRC/Calendar/jul2date.pro

    r157 r205  
    3030  compile_opt idl2, strictarrsubs 
    3131; 
    32  
    33   caldat, jday, month, day, year 
    34  
     32  caldat, jday, month, day, year, hour, min, sec 
     33; 
    3534  res = (10000L*year + 100L*month + day)*(year GE 0) $ 
    3635        +( 10000L*year - 100L*month - day)*(year LT 0) 
     36; 
     37  IF total([hour NE 12, min NE 0, sec NE 0]) EQ 0 THEN return, long(res) $ 
     38  ELSE return, double(res) + (hour / 24.0d0) + (min/1440.0d0) + (sec / 86400.0d0) 
    3739 
    38   return, long(res) 
    3940end 
  • trunk/SRC/Calendar/julday.pro

    r163 r205  
    9393  if keyword_set(ndayspm) then key_caltype = '360d' 
    9494; 
    95  
    9695  YEAR = long(yearin) 
    9796  zero = where(year EQ 0, cnt) 
     
    10099  CASE key_caltype OF 
    101100    'greg':BEGIN 
    102  
    103101 
    104102; Gregorian Calender was adopted on Oct. 15, 1582 
     
    245243      if n_elements(Hour) + n_elements(Minute) + n_elements(Second) eq 0 then $ 
    246244        return, JUL 
    247       if n_elements(Hour) eq 0 then Hour = 0 
     245      if n_elements(Hour) eq 0 then Hour = 12 
    248246      if n_elements(Minute) eq 0 then Minute = 0 
    249247      if n_elements(Second) eq 0 then Second = 0 
    250248       
    251       IF Hour+Minute+Second EQ 0 THEN return, JUL ELSE $ 
    252         return, JUL + (Hour / 24.0d0) + (Minute/1440.0d0) + (Second / 86400.0d0) 
     249      IF total([hour NE 12, minute NE 0, second NE 0]) EQ 0 THEN return, JUL ELSE $ 
     250        return, JUL + (Hour / 24.0d0 - 0.5d) + (Minute/1440.0d0) + (Second / 86400.0d0) 
    253251 
    254252    END  
     
    275273      daysyear = long(total([0, 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30], /cumulative)) 
    276274 
    277       return, 365*L_YEAR + daysyear[L_MONTH] + L_DAY 
     275      JUL = 365*L_YEAR + daysyear[L_MONTH] + L_DAY 
     276      if n_elements(Hour) + n_elements(Minute) + n_elements(Second) eq 0 then $ 
     277        return, JUL 
     278      if n_elements(Hour) eq 0 then Hour = 12 
     279      if n_elements(Minute) eq 0 then Minute = 0 
     280      if n_elements(Second) eq 0 then Second = 0 
     281       
     282        IF total([hour NE 12, minute NE 0, second NE 0]) EQ 0 THEN return, JUL ELSE $ 
     283        return, JUL + (Hour / 24.0d0 - 0.5d) + (Minute/1440.0d0) + (Second / 86400.0d0) 
    278284 
    279285    END  
  • trunk/SRC/Interpolation/fromirr.pro

    r202 r205  
    1414; a 2D array the input data to interpolate 
    1515; 
    16 ; @param lonin {in}{optional}{type=2d array} 
     16; @param lonin {in}{required}{type=2d array} 
    1717; a 2D array defining the longitude of the input data 
    1818; 
    19 ; @param latin {in}{optional}{type=2d array} 
     19; @param latin {in}{required}{type=2d array} 
    2020; a 2D array defining the latitude of the input data. 
    2121; 
    22 ; @param mskin {in}{optional}{type=2d array or -1} 
     22; @param mskin {in}{required}{type=2d array or -1} 
    2323; a 2D array, the land-sea mask of the input data (1 on ocean, 0 on land) 
    2424; put -1 if input data are not masked 
    2525; 
    26 ; @param lonout {in}{optional}{type=1d or 2d array} 
     26; @param lonout {in}{required}{type=1d or 2d array} 
    2727; 1D or 2D array defining the longitude of the output data. 
    2828; 
    29 ; @param latout {in}{optional}{type=1d or 2d array} 
     29; @param latout {in}{required}{type=1d or 2d array} 
    3030; 1D or 2D array defining the latitude of the output data. 
    3131; 
  • trunk/SRC/Interpolation/fromreg.pro

    r163 r205  
    1717; a 2D array the input data to interpolate 
    1818; 
    19 ; @param lonin {in}{optional}{type=1d or 2d array} 
     19; @param lonin {in}{required}{type=1d or 2d array} 
    2020; 1D or 2D array defining the longitude of the input data 
    2121; 
    22 ; @param latin {in}{optional}{type=1d or 2d array} 
     22; @param latin {in}{required}{type=1d or 2d array} 
    2323; 1D or 2D array defining the latitude of the input data 
    2424; 
    25 ; @param lonout {in}{optional}{type=1d or 2d array} 
     25; @param lonout {in}{required}{type=1d or 2d array} 
    2626; 1D or 2D array defining the longitude of the output data 
    2727; 
  • trunk/SRC/ToBeReviewed/PLOTS/axe.pro

    r163 r205  
    7474       if coupe EQ 'yt' OR coupe EQ 'zt' OR coupe EQ 't' then sep = '!C' ELSE sep = ' ' 
    7575; 
    76       caldat,tempsmin, mmin, dmin, ymin, hmin, mnmin, smin, _EXTRA = ex 
    77       caldat,tempsmax, mmax, dmax, ymax, hmax, mnmax, smax, _EXTRA = ex 
     76      caldat, tempsmin, mmin, dmin, ymin, hmin, mnmin, smin, _EXTRA = ex 
     77      caldat, tempsmax, mmax, dmax, ymax, hmax, mnmax, smax, _EXTRA = ex 
    7878; format used for the year (2 or 4/5 digits). 
    7979      IF NOT keyword_set(digitsyear) THEN digitsyear = 4 
    8080      IF digitsyear EQ 2 THEN fmtyr = '%Z' ELSE fmtyr = '%Y' 
    8181; 
    82       if ymax EQ ymin then BEGIN 
    83          if mmin ne mmax then BEGIN 
    84 ; Same year but several monthes 
    85             nticks = mmax-mmin+1 
    86             ticknom = lonarr(nticks) 
    87             for m = 0,nticks-1 do ticknom[m] = julday(m+mmin, 1, ymin, _EXTRA = ex) 
    88             tminor = 6 
    89             datfmt = '%M'+sep+fmtyr 
    90 ; We check that labels are betwenn TEMPSMIN and TEMPSMAX... 
    91             ticknom = ticknom[where(ticknom GE tempsmin AND ticknom LE tempsmax AND ticknom NE -1)] 
    92             nticks = n_elements(ticknom) 
    93 ; Particular case where we are overlap two monthes 
    94             if nticks LE 1 then begin 
    95                nticks = (dmax+(jourdsmois(mmin, ymin))[0]-dmin+1)/2 
    96                ticknom = lonarr(nticks) 
    97                for d = 0,nticks-1 do ticknom[d] = julday(mmin, d*2+dmin, ymin, _EXTRA = ex) 
    98                ticknom = ticknom[where(ticknom GE tempsmin AND ticknom LE tempsmax $ 
    99                                        AND ticknom NE -1)] 
    100                nticks = n_elements(ticknom) 
    101                tminor = 2 
    102                datfmt = '%D'+sep+'%M' 
    103             endif 
    104          ENDIF ELSE BEGIN  
    105 ; Same year and same month 
    106             IF dmax-dmin+1 GT 4 THEN BEGIN ; more than 4 days 
    107                nticks = dmax-dmin+1 
    108                ticknom = lonarr(nticks) 
    109                for d = 0,nticks-1 do ticknom[d] = julday(mmin, d+dmin, ymin, _EXTRA = ex) 
    110                ticknom = ticknom[where(ticknom GE tempsmin AND ticknom LE tempsmax $ 
    111                                        AND ticknom NE -1)] 
    112                nticks = n_elements(ticknom) 
    113                tminor = 2 
    114                datfmt = '%D'+sep+'%M' 
    115             ENDIF ELSE BEGIN    ; less than 4 days : divday ticks per day 
    116                divday = 4 
    117                nticks = (dmax-dmin)*divday + 1 
    118                ticknom = fltarr(nticks) 
    119                for d = 0,nticks-1 do $ 
    120                 ticknom[d] = julday(mmin, d/divday+dmin, ymin, _EXTRA = ex) $ 
    121                 +(d MOD divday)/float(divday) 
    122                tminor = 2 
    123                datfmt = '%H:00' 
    124             ENDELSE  
    125          ENDELSE  
    126       ENDIF ELSE BEGIN  
    127 ; Several years 
    128          CASE 1 OF 
    129          ymax-ymin+1 LE 10: BEGIN & freq = 1. & tminor = 12 & datfmt = '%M'+sep+fmtyr & end 
    130          ymax-ymin+1 LE 20: BEGIN & freq = 2. & tminor = 6 & datfmt = '%M'+sep+fmtyr & end 
    131          ymax-ymin+1 LE 50: BEGIN & freq = 5. & tminor = 5 & datfmt = '%M'+sep+fmtyr & end 
    132          ymax-ymin+1 LE 100: BEGIN & freq = 10. & tminor = 10 & datfmt = fmtyr & end 
    133          ymax-ymin+1 LE 1000: BEGIN & freq = 50. & tminor = 5 & datfmt = fmtyr & end 
    134          ELSE : BEGIN & freq = 100. & tminor = 50 & datfmt = '%Y' & end 
    135          ENDCASE  
    136          nticks = floor((ymax-ymin)/freq)+1 
    137          IF floor((ymin)/freq) NE (ymin)/freq THEN $ 
    138           yminf = (floor(ymin/freq)+1)*freq ELSE  $ 
     82      CASE 1 OF 
     83; yearly base 
     84        tempsmax GT julday(mmin, dmin, ymin + 3, hmin, mnmin, smin):BEGIN ; more than 3 years 
     85          CASE 1 OF 
     86          ymax-ymin+1 GT 5000: BEGIN & freq = 500. & tminor = 5 & datfmt = fmtyr & end 
     87          ymax-ymin+1 GT 2000: BEGIN & freq = 200. & tminor = 4 & datfmt = fmtyr & end 
     88          ymax-ymin+1 GT 1000: BEGIN & freq = 100. & tminor = 5 & datfmt = fmtyr & end 
     89          ymax-ymin+1 GT 500: BEGIN & freq = 50. & tminor = 5 & datfmt = fmtyr & end 
     90          ymax-ymin+1 GT 200: BEGIN & freq = 20. & tminor = 4 & datfmt = fmtyr & end 
     91          ymax-ymin+1 GT 100: BEGIN & freq = 10. & tminor = 5 & datfmt = fmtyr & end 
     92          ymax-ymin+1 GT 50: BEGIN & freq = 5. & tminor = 5 & datfmt = '%M'+sep+fmtyr & end 
     93          ymax-ymin+1 GT 20: BEGIN & freq = 4. & tminor = 4 & datfmt = '%M'+sep+fmtyr & end 
     94          ymax-ymin+1 GT 10: BEGIN & freq = 2. & tminor = 4 & datfmt = '%M'+sep+fmtyr & end 
     95          ELSE: BEGIN & freq = 1. & tminor = 4 & datfmt = '%M'+sep+fmtyr & end 
     96          ENDCASE  
     97          nticks = ceil((ymax-ymin)/freq) + 2 
    13998          yminf = (floor(ymin/freq))*freq 
    140          ticknom = lonarr(nticks) 
    141          for y = 0, nticks-1 do ticknom[y] = julday(1, 1, yminf+(y*freq), _EXTRA = ex) 
    142 ; We check that labels are betwenn TEMPSMIN and TEMPSMAX... 
    143          ticknom = ticknom[where(ticknom GE tempsmin AND ticknom LE tempsmax AND ticknom NE -1)] 
    144          nticks = n_elements(ticknom) 
    145 ; Particular case where we are overlap two monthes 
    146          if nticks LE 1 then begin 
    147             nticks = (mmax+12)-mmin+1 
    148             ticknom = lonarr(nticks) 
    149             for m = 0,nticks-1 do ticknom[m] = julday(m+mmin, 1, ymin, _EXTRA = ex) 
    150             ticknom = ticknom[where(ticknom GE tempsmin AND ticknom LE tempsmax AND ticknom NE -1)] 
    151             nticks = n_elements(ticknom) 
    152             tminor = 6 
    153             datfmt = '%M'+sep+fmtyr 
    154  ; Particular case where we are overlap two monthes 
    155            if nticks LE 1 then begin 
    156                nticks = (dmax+(jourdsmois(mmin, ymin))[0]-dmin+1)/2 
    157                ticknom = lonarr(nticks) 
    158                for d = 0,nticks-1 do ticknom[d] = julday(mmin, d*2+dmin, ymin, _EXTRA = ex) 
    159                ticknom = ticknom[where(ticknom GE tempsmin AND ticknom LE tempsmax $ 
    160                                        AND ticknom NE -1)] 
    161                nticks = n_elements(ticknom) 
    162                tminor = 2 
    163                datfmt = '%D'+sep+'%M' 
    164             endif 
    165          endif 
    166       ENDELSE  
    167       toto = label_date(0, 0, 0, DATE_FORMAT = datfmt, _EXTRA = ex) 
     99          ticknom = lonarr(nticks) 
     100          for y = 0, nticks-1 do ticknom[y] = julday(1, 1, yminf + y*freq, _EXTRA = ex) 
     101          ticknom = ticknom[where(ticknom GE tempsmin AND ticknom LE tempsmax, nticks)] 
     102        END 
     103; monthly base 
     104        tempsmax GT julday(mmin + 3, dmin, ymin, hmin, mnmin, smin):BEGIN ; more than 3 months 
     105          CASE 1 OF 
     106            tempsmax GT julday(mmin + 30, dmin, ymin, hmin, mnmin, smin):BEGIN ; more than 30 months -> ticks every 3 months 
     107            freq = 3. & tminor = 3 & END 
     108            tempsmax GT julday(mmin + 16, dmin, ymin, hmin, mnmin, smin):BEGIN ; more than 16 months -> ticks every 2 months 
     109            freq = 2. & tminor = 2 & END 
     110            else:BEGIN          ; monthly ticks 
     111            freq = 1. & tminor = 6 & END 
     112          ENDCASE 
     113          nticks = ceil((mmax + 12*(ymax - ymin) - mmin)/freq) + 2 
     114          mminf = 1 > ((floor(mmin/freq))*freq) 
     115          ticknom = lonarr(nticks) 
     116          for m = 0, nticks-1 do ticknom[m] = julday(mminf + freq*m, 1, ymin, _EXTRA = ex) 
     117          datfmt = '%M'+sep+fmtyr 
     118          ticknom = ticknom[where(ticknom GE tempsmin AND ticknom LE tempsmax, nticks)] 
     119        END 
     120; daily base 
     121        tempsmax GT julday(mmin, dmin + 3, ymin, hmin, mnmin, smin):BEGIN ; more than 3 days 
     122          CASE 1 OF 
     123            tempsmax GT julday(mmin, dmin + 60, ymin, hmin, mnmin, smin):BEGIN ; more than 60 days -> ticks every 7 days 
     124            freq = 7. & tminor = 2 & END 
     125            tempsmax GT julday(mmin, dmin + 30, ymin, hmin, mnmin, smin):BEGIN ; more than 30 days -> ticks every 5 days 
     126            freq = 5. & tminor = 5 & END 
     127            tempsmax GT julday(mmin, dmin + 16, ymin, hmin, mnmin, smin):BEGIN ; more than 16 days -> ticks every 2 days 
     128            freq = 2. & tminor = 2 & END 
     129            ELSE:BEGIN   ; daily ticks 
     130            freq = 1. & tminor = 2 & END 
     131          ENDCASE 
     132          nticks = ceil((tempsmax - tempsmin)/freq) + 2 
     133          dminf = 1 > ((floor(dmin/freq))*freq) 
     134          ticknom = lonarr(nticks) 
     135          for d = 0, nticks-1 do ticknom[d] = julday(mmin, dminf + freq*d, ymin, _EXTRA = ex) 
     136          datfmt = '%D'+sep+'%M' 
     137          ticknom = ticknom[where(ticknom GE tempsmin AND ticknom LE tempsmax, nticks)] 
     138        END 
     139; hourly base 
     140        tempsmax GT julday(mmin, dmin, ymin, hmin + 3, mnmin, smin):BEGIN ; more than 3 hours 
     141          CASE 1 OF 
     142            tempsmax GT julday(mmin, dmin, ymin, hmin + 48, mnmin, smin):BEGIN ; more than 48 hours -> ticks every 6 hours 
     143            freq = 6. & tminor = 3 & datfmt = '%D'+sep+'%H:00' & END 
     144            tempsmax GT julday(mmin, dmin, ymin, hmin + 30, mnmin, smin):BEGIN ; more than 30 hours -> ticks every 4 hours 
     145            freq = 4. & tminor = 2 & datfmt = '%D'+sep+'%H:00' & END 
     146            tempsmax GT julday(mmin, dmin, ymin, hmin + 16, mnmin, smin):BEGIN ; more than 16 hours -> ticks every 2 hours 
     147            freq = 2. & tminor = 2 & datfmt = '%H:00' & END 
     148            ELSE:BEGIN   ; ticks every hour 
     149            freq = 1. & tminor = 2 & datfmt = '%H:00' & END 
     150          ENDCASE 
     151          nticks = ceil((hmax + 24*(dmax - dmin) - hmin)/freq) + 2 
     152          hminf = (floor(hmin/freq))*freq 
     153          ticknom = dblarr(nticks) 
     154          for h = 0, nticks-1 do ticknom[h] = julday(mmin, dmin, ymin, hminf + freq*h, 0, 0, _EXTRA = ex) 
     155          ticknom = ticknom[where(ticknom GE tempsmin AND ticknom LE tempsmax, nticks)] 
     156        END 
     157; minute base 
     158        tempsmax GT julday(mmin, dmin, ymin, hmin, mnmin + 3, smin):BEGIN ; more than 3 minutes 
     159          CASE 1 OF 
     160            tempsmax GT julday(mmin, dmin, ymin, hmin, mnmin + 120, smin):BEGIN ; more than 120 minutes -> ticks every 10 minutes 
     161            freq = 10. & tminor = 2 & END 
     162            tempsmax GT julday(mmin, dmin, ymin, hmin, mnmin + 60, smin):BEGIN ; more than 60 minutes -> ticks every 6 minutes 
     163            freq = 6. & tminor = 3 & END 
     164            tempsmax GT julday(mmin, dmin, ymin, hmin, mnmin + 30, smin):BEGIN ; more than 30 minutes -> ticks every 4 minutes 
     165            freq = 4. & tminor = 2 & END 
     166            tempsmax GT julday(mmin, dmin, ymin, hmin, mnmin + 15, smin):BEGIN ; more than 15 minutes -> ticks every 2 minutes 
     167            freq = 2. & tminor = 2 & END 
     168            ELSE:BEGIN   ; ticks every minutes 
     169            freq = 1. & tminor = 2 & END 
     170          ENDCASE 
     171          nticks = ceil((mnmax + 60*(hmax - hmin) - mnmin)/freq) + 2 
     172          mnminf = (floor(mnmin/freq))*freq 
     173          ticknom = dblarr(nticks) 
     174          for mn = 0, nticks-1 do ticknom[mn] = julday(mmin, dmin, ymin, hmin, mnminf + freq*mn, 0, _EXTRA = ex) 
     175          ticknom = ticknom[where(ticknom GE tempsmin AND ticknom LE tempsmax, nticks)] 
     176          datfmt = '%H:%I'  
     177        END 
     178; second base 
     179        ELSE:BEGIN ; less than 3 minutes 
     180          CASE 1 OF 
     181            tempsmax GT julday(mmin, dmin, ymin, hmin, mnmin, smin + 120):BEGIN ; more than 120 seconds -> ticks every 20 seconds 
     182            freq = 20. & tminor = 2 & datfmt = '%H:%I:%S' & END 
     183            tempsmax GT julday(mmin, dmin, ymin, hmin, mnmin, smin + 60):BEGIN ; more than 60 seconds -> ticks every 15 seconds 
     184            freq = 15. & tminor = 3 & datfmt = '%H:%I:%S' & END 
     185            tempsmax GT julday(mmin, dmin, ymin, hmin, mnmin, smin + 30):BEGIN ; more than 30 seconds -> ticks every 10 seconds 
     186            freq = 10. & tminor = 2 & datfmt = '%H:%I:%S' & END 
     187            tempsmax GT julday(mmin, dmin, ymin, hmin, mnmin, smin + 15):BEGIN ; more than 15 seconds -> ticks every 4 seconds 
     188            freq = 4. & tminor = 4 & datfmt = '%H:%I:%S' & END 
     189            tempsmax GT julday(mmin, dmin, ymin, hmin, mnmin, smin + 7):BEGIN ; more than 7 seconds -> ticks every 2 seconds 
     190            freq = 2. & tminor = 2 & datfmt = '%H:%I:%S' & END 
     191            ELSE:BEGIN   ; ticks every minutes 
     192            freq = 1. & tminor = 2 & datfmt = '%H:%I:%S' & END 
     193          ENDCASE 
     194          nticks = ceil((smax + 60*(mnmax - mnmin) - smin)/freq) + 2 
     195          sminf = (floor(smin/freq))*freq 
     196          ticknom = dblarr(nticks) 
     197          for s = 0, nticks-1 do ticknom[s] = julday(mmin, dmin, ymin, hmin, mnmin, sminf + freq*s, _EXTRA = ex) 
     198          ticknom = ticknom[where(ticknom GE tempsmin AND ticknom LE tempsmax, nticks)] 
     199        END 
     200      ENDCASE 
     201      dummy = label_date(0, 0, 0, DATE_FORMAT = datfmt, _EXTRA = ex) 
    168202      if chkstru(ex, 'DATE_FORMAT') then ex.DATE_FORMAT = '' 
    169203   ENDIF  
Note: See TracChangeset for help on using the changeset viewer.