Commit 70b28cc17d7937a8d58c8064e223c902d65df200
1 parent
4972e29c
Add 10 hours night / 14 hours day scheme to make_pointing and start observations on 1/1/2021
Showing
1 changed file
with
85 additions
and
15 deletions
examples/make_pointings.py
| @@ -2,7 +2,7 @@ | @@ -2,7 +2,7 @@ | ||
| 2 | # ========================================================================== | 2 | # ========================================================================== |
| 3 | # Generates pointing patterns for CTA observations | 3 | # Generates pointing patterns for CTA observations |
| 4 | # | 4 | # |
| 5 | -# Copyright (C) 2015-2016 Juergen Knoedlseder | 5 | +# Copyright (C) 2015-2017 Juergen Knoedlseder |
| 6 | # | 6 | # |
| 7 | # This program is free software: you can redistribute it and/or modify | 7 | # This program is free software: you can redistribute it and/or modify |
| 8 | # it under the terms of the GNU General Public License as published by | 8 | # it under the terms of the GNU General Public License as published by |
| @@ -96,10 +96,49 @@ def get_positions(xmin, xmax, ymin, ymax, step): | @@ -96,10 +96,49 @@ def get_positions(xmin, xmax, ymin, ymax, step): | ||
| 96 | return positions | 96 | return positions |
| 97 | 97 | ||
| 98 | 98 | ||
| 99 | +# ============== # | ||
| 100 | +# Set start time # | ||
| 101 | +# ============== # | ||
| 102 | +def set_tmin_for_next_pointing(tmin, duration): | ||
| 103 | + """ | ||
| 104 | + Set start time for next pointing | ||
| 105 | + | ||
| 106 | + Adds duration and 2 min for slew, and takes care of day and night. It is | ||
| 107 | + assumed that the night lasts from [0,10] and the day lasts from [10,24] | ||
| 108 | + | ||
| 109 | + Parameters | ||
| 110 | + ---------- | ||
| 111 | + tmin : float | ||
| 112 | + Start time of current pointing (sec) | ||
| 113 | + duration : float | ||
| 114 | + Duration of current pointing (sec) | ||
| 115 | + | ||
| 116 | + Returns | ||
| 117 | + ------- | ||
| 118 | + tmin : float | ||
| 119 | + Start time of new pointing | ||
| 120 | + """ | ||
| 121 | + # Update start time, add 2 min for slew | ||
| 122 | + tmin += duration + 120.0 | ||
| 123 | + | ||
| 124 | + # If we have more than 10 hours in day then go to next day | ||
| 125 | + hours_in_day = tmin/3600.0 % 24.0 | ||
| 126 | + if hours_in_day > 10.0: | ||
| 127 | + days = int(tmin/86400.0) | ||
| 128 | + days += 1 | ||
| 129 | + tmin = float(days) * 86400.0 | ||
| 130 | + | ||
| 131 | + # Dump result | ||
| 132 | + #print(tmin, hours_in_day) | ||
| 133 | + | ||
| 134 | + # Return start time | ||
| 135 | + return tmin | ||
| 136 | + | ||
| 137 | + | ||
| 99 | # ====================== # | 138 | # ====================== # |
| 100 | # Setup patch on the sky # | 139 | # Setup patch on the sky # |
| 101 | # ====================== # | 140 | # ====================== # |
| 102 | -def set_patch(lmin=-30.0, lmax=30.0, bmin=-1.5, bmax=+1.5, | 141 | +def set_patch(tmin, lmin=-30.0, lmax=30.0, bmin=-1.5, bmax=+1.5, |
| 103 | separation=3.0, hours=100.0, run_duration=30.0, | 142 | separation=3.0, hours=100.0, run_duration=30.0, |
| 104 | site=None, caldb='prod2', lst=True, autodec=0.0): | 143 | site=None, caldb='prod2', lst=True, autodec=0.0): |
| 105 | """ | 144 | """ |
| @@ -107,6 +146,8 @@ def set_patch(lmin=-30.0, lmax=30.0, bmin=-1.5, bmax=+1.5, | @@ -107,6 +146,8 @@ def set_patch(lmin=-30.0, lmax=30.0, bmin=-1.5, bmax=+1.5, | ||
| 107 | 146 | ||
| 108 | Parameters | 147 | Parameters |
| 109 | ---------- | 148 | ---------- |
| 149 | + tmin : float | ||
| 150 | + Observation start time (seconds) | ||
| 110 | lmin : float, optional | 151 | lmin : float, optional |
| 111 | Minimum Galactic Longitude (deg) | 152 | Minimum Galactic Longitude (deg) |
| 112 | lmax : float, optional | 153 | lmax : float, optional |
| @@ -163,8 +204,12 @@ def set_patch(lmin=-30.0, lmax=30.0, bmin=-1.5, bmax=+1.5, | @@ -163,8 +204,12 @@ def set_patch(lmin=-30.0, lmax=30.0, bmin=-1.5, bmax=+1.5, | ||
| 163 | # Loop over number of runs | 204 | # Loop over number of runs |
| 164 | for run in range(n_runs): | 205 | for run in range(n_runs): |
| 165 | 206 | ||
| 166 | - # Set positions and duration | ||
| 167 | - obs = {'lon': pnt['x'], 'lat': pnt['y'], 'duration': exposure} | 207 | + # Set positions, start time and duration |
| 208 | + obs = {'lon': pnt['x'], 'lat': pnt['y'], \ | ||
| 209 | + 'tmin': tmin, 'duration': exposure} | ||
| 210 | + | ||
| 211 | + # Update start time for next pointing | ||
| 212 | + tmin = set_tmin_for_next_pointing(tmin, exposure) | ||
| 168 | 213 | ||
| 169 | # Optionally add-in site dependent IRF | 214 | # Optionally add-in site dependent IRF |
| 170 | if site != None: | 215 | if site != None: |
| @@ -309,28 +354,43 @@ def set_gps(separation=3.0, bmin=-1.3, bmax=1.3, caldb='prod2', lst=True): | @@ -309,28 +354,43 @@ def set_gps(separation=3.0, bmin=-1.3, bmax=1.3, caldb='prod2', lst=True): | ||
| 309 | # Initialise observation definition | 354 | # Initialise observation definition |
| 310 | obsdef = [] | 355 | obsdef = [] |
| 311 | 356 | ||
| 357 | + # Initialise start time (1-1-2021) | ||
| 358 | + tmin = 7671.0 * 86400.0 | ||
| 359 | + | ||
| 312 | # Add inner region South | 360 | # Add inner region South |
| 313 | - obsdef.extend(set_patch(lmin=-60.0, lmax=60.0, bmin=bmin, bmax=bmax, | 361 | + obsdef.extend(set_patch(tmin, lmin=-60.0, lmax=60.0, bmin=bmin, bmax=bmax, |
| 314 | separation=separation, hours=780, | 362 | separation=separation, hours=780, |
| 315 | site='South', caldb=caldb, lst=lst)) | 363 | site='South', caldb=caldb, lst=lst)) |
| 316 | 364 | ||
| 365 | + # Update start time | ||
| 366 | + tmin = set_tmin_for_next_pointing(obsdef[-1]['tmin'], obsdef[-1]['duration']) | ||
| 367 | + | ||
| 317 | # Add Vela & Carina region | 368 | # Add Vela & Carina region |
| 318 | - obsdef.extend(set_patch(lmin=240.0, lmax=300.0, bmin=bmin, bmax=bmax, | 369 | + obsdef.extend(set_patch(tmin, lmin=240.0, lmax=300.0, bmin=bmin, bmax=bmax, |
| 319 | separation=separation, hours=180, | 370 | separation=separation, hours=180, |
| 320 | site='South', caldb=caldb, lst=lst)) | 371 | site='South', caldb=caldb, lst=lst)) |
| 321 | 372 | ||
| 373 | + # Update start time | ||
| 374 | + tmin = set_tmin_for_next_pointing(obsdef[-1]['tmin'], obsdef[-1]['duration']) | ||
| 375 | + | ||
| 322 | # Add 210-240 region | 376 | # Add 210-240 region |
| 323 | - obsdef.extend(set_patch(lmin=210.0, lmax=240.0, bmin=bmin, bmax=bmax, | 377 | + obsdef.extend(set_patch(tmin, lmin=210.0, lmax=240.0, bmin=bmin, bmax=bmax, |
| 324 | separation=separation, hours=60, | 378 | separation=separation, hours=60, |
| 325 | site='South', caldb=caldb, lst=lst)) | 379 | site='South', caldb=caldb, lst=lst)) |
| 326 | 380 | ||
| 381 | + # Initialise start time | ||
| 382 | + tmin = 7671.0 * 86400.0 | ||
| 383 | + | ||
| 327 | # Add Cygnus, Perseus | 384 | # Add Cygnus, Perseus |
| 328 | - obsdef.extend(set_patch(lmin=60.0, lmax=150.0, bmin=bmin, bmax=bmax, | 385 | + obsdef.extend(set_patch(tmin, lmin=60.0, lmax=150.0, bmin=bmin, bmax=bmax, |
| 329 | separation=separation, hours=450, | 386 | separation=separation, hours=450, |
| 330 | site='North', caldb=caldb, lst=lst)) | 387 | site='North', caldb=caldb, lst=lst)) |
| 331 | 388 | ||
| 389 | + # Update start time | ||
| 390 | + tmin = set_tmin_for_next_pointing(obsdef[-1]['tmin'], obsdef[-1]['duration']) | ||
| 391 | + | ||
| 332 | # Add Anticentre | 392 | # Add Anticentre |
| 333 | - obsdef.extend(set_patch(lmin=150.0, lmax=210.0, bmin=bmin, bmax=bmax, | 393 | + obsdef.extend(set_patch(tmin, lmin=150.0, lmax=210.0, bmin=bmin, bmax=bmax, |
| 334 | separation=separation, hours=150, | 394 | separation=separation, hours=150, |
| 335 | site='North', caldb=caldb, lst=lst)) | 395 | site='North', caldb=caldb, lst=lst)) |
| 336 | 396 | ||
| @@ -362,8 +422,11 @@ def set_extgal(separation=3.0, caldb='prod2', lst=True): | @@ -362,8 +422,11 @@ def set_extgal(separation=3.0, caldb='prod2', lst=True): | ||
| 362 | # Initialise observation definition | 422 | # Initialise observation definition |
| 363 | obsdef = [] | 423 | obsdef = [] |
| 364 | 424 | ||
| 425 | + # Initialise start time (1-1-2021) | ||
| 426 | + tmin = 7671.0 * 86400.0 | ||
| 427 | + | ||
| 365 | # Set patch | 428 | # Set patch |
| 366 | - obsdef.extend(set_patch(lmin=-90.0, lmax=90.0, bmin=+5.0, bmax=+88.0, | 429 | + obsdef.extend(set_patch(tmin, lmin=-90.0, lmax=90.0, bmin=+5.0, bmax=+88.0, |
| 367 | separation=separation, hours=1000, | 430 | separation=separation, hours=1000, |
| 368 | site='Automatic', caldb=caldb, lst=lst, | 431 | site='Automatic', caldb=caldb, lst=lst, |
| 369 | autodec=10.0)) | 432 | autodec=10.0)) |
| @@ -394,13 +457,19 @@ def set_gc(caldb='prod2', lst=True): | @@ -394,13 +457,19 @@ def set_gc(caldb='prod2', lst=True): | ||
| 394 | # Initialise observation definition | 457 | # Initialise observation definition |
| 395 | obsdef = [] | 458 | obsdef = [] |
| 396 | 459 | ||
| 460 | + # Initialise start time (1-1-2021) | ||
| 461 | + tmin = 7671.0 * 86400.0 | ||
| 462 | + | ||
| 397 | # Central wobble | 463 | # Central wobble |
| 398 | - obsdef.extend(set_patch(lmin=-0.5, lmax=0.5, bmin=-0.5, bmax=0.5, | 464 | + obsdef.extend(set_patch(tmin, lmin=-0.5, lmax=0.5, bmin=-0.5, bmax=0.5, |
| 399 | separation=0.1, hours=525, | 465 | separation=0.1, hours=525, |
| 400 | site='South', caldb=caldb, lst=lst)) | 466 | site='South', caldb=caldb, lst=lst)) |
| 401 | 467 | ||
| 468 | + # Update start time | ||
| 469 | + tmin = set_tmin_for_next_pointing(obsdef[-1]['tmin'], obsdef[-1]['duration']) | ||
| 470 | + | ||
| 402 | # Extended region | 471 | # Extended region |
| 403 | - obsdef.extend(set_patch(lmin=-10.0, lmax=10.0, bmin=-10.0, bmax=10.0, | 472 | + obsdef.extend(set_patch(tmin, lmin=-10.0, lmax=10.0, bmin=-10.0, bmax=10.0, |
| 404 | separation=1.5, hours=300, | 473 | separation=1.5, hours=300, |
| 405 | site='South', caldb=caldb, lst=lst)) | 474 | site='South', caldb=caldb, lst=lst)) |
| 406 | 475 | ||
| @@ -491,7 +560,7 @@ def write_obsdef(filename, obsdef): | @@ -491,7 +560,7 @@ def write_obsdef(filename, obsdef): | ||
| 491 | file = open(filename, 'w') | 560 | file = open(filename, 'w') |
| 492 | 561 | ||
| 493 | # Write header | 562 | # Write header |
| 494 | - file.write('ra,dec,duration,caldb,irf\n') | 563 | + file.write('ra,dec,tmin,duration,caldb,irf\n') |
| 495 | 564 | ||
| 496 | # Loop over pointings | 565 | # Loop over pointings |
| 497 | for obs in obsdef: | 566 | for obs in obsdef: |
| @@ -509,8 +578,9 @@ def write_obsdef(filename, obsdef): | @@ -509,8 +578,9 @@ def write_obsdef(filename, obsdef): | ||
| 509 | dec = obs['dec'] | 578 | dec = obs['dec'] |
| 510 | 579 | ||
| 511 | # Write information | 580 | # Write information |
| 512 | - file.write('%8.4f,%8.4f,%.4f,%s,%s\n' % | ||
| 513 | - (ra, dec, obs['duration'], obs['caldb'], obs['irf'])) | 581 | + file.write('%8.4f,%8.4f,%.4f,%.4f,%s,%s\n' % |
| 582 | + (ra, dec, obs['tmin'], obs['duration'], obs['caldb'], \ | ||
| 583 | + obs['irf'])) | ||
| 514 | 584 | ||
| 515 | # Close file | 585 | # Close file |
| 516 | file.close() | 586 | file.close() |