1   
  2   
  3   
  4   
  5   
  6   
  7   
  8   
  9   
 10   
 11   
 12   
 13   
 14   
 15   
 16   
 17   
 18   
 19   
 20   
 21   
 22   
 23   
 24   
 25   
 26   
 27  """ 
 28  This module provides functions to calculate antenna factors for a given time, a given sky location and a given detector 
 29  """ 
 30  import sys 
 31  from math import * 
 32  import lal 
 33  from pylal import inject 
 34   
 35   
 36  __author__ = "Alexander Dietz <Alexander.Dietz@astro.cf.ac.uk>" 
 37   
 38 -def response( gpsTime, rightAscension, declination, inclination, 
 39                polarization, unit, det ): 
  40   
 41    """ 
 42    response( gpsTime, rightAscension, declination, inclination, 
 43                polarization, unit, detector ) 
 44     
 45    Calculates the antenna factors for a detector 'detector' (e.g. 'H1') 
 46    at a given gps time (as integer) for a given sky location 
 47    (rightAscension, declination) in some unit (degree/radians). 
 48    This computation also takes into account a specific inclination 
 49    and polarization. 
 50     
 51    The returned values are: (f-plus, f-cross, f-average, q-value). 
 52     
 53    Example: antenna.response( 854378604.780, 11.089, 42.308, 0, 0, 'radians', 'H1' ) 
 54    """ 
 55     
 56     
 57    if unit =='radians': 
 58      ra_rad = rightAscension 
 59      de_rad = declination 
 60      psi_rad = polarization 
 61      iota_rad = inclination 
 62    elif unit =='degree': 
 63      ra_rad = rightAscension/180.0*pi 
 64      de_rad = declination/180.0*pi 
 65      psi_rad = polarization/180.0*pi 
 66      iota_rad = inclination/180.0*pi 
 67    else: 
 68      raise ValueError, "Unknown unit %s" % unit 
 69   
 70     
 71    gps = lal.LIGOTimeGPS( gpsTime ) 
 72    gmst_rad = lal.GreenwichMeanSiderealTime(gps) 
 73   
 74     
 75    detMap = {'H1': 'LHO_4k', 'H2': 'LHO_2k', 'L1': 'LLO_4k', 
 76              'G1': 'GEO_600', 'V1': 'VIRGO', 'T1': 'TAMA_300'} 
 77    try: 
 78      detector=detMap[det] 
 79    except KeyError: 
 80      raise ValueError, "ERROR. Key %s is not a valid detector name."\ 
 81            % (det) 
 82   
 83     
 84    if detector not in inject.cached_detector.keys(): 
 85      raise ValueError, "%s is not a cached detector.  "\ 
 86            "Cached detectors are: %s" \ 
 87            % (det, inject.cached_detector.keys()) 
 88   
 89     
 90    response = inject.cached_detector[detector].response 
 91   
 92     
 93    f_plus, f_cross = lal.ComputeDetAMResponse(response, ra_rad, de_rad, 
 94                                                      psi_rad, gmst_rad) 
 95   
 96    f_ave=sqrt( (f_plus*f_plus + f_cross*f_cross)/2.0 ); 
 97    ci=cos( iota_rad ); 
 98    cc=ci*ci; 
 99   
100     
101     
102    f_q=sqrt( f_plus*f_plus*(1+cc)*(1+cc)/4.0 + f_cross*f_cross*cc );  
103   
104     
105    return f_plus, f_cross, f_ave, f_q 
 106   
107   
108   
109 -def timeDelay( gpsTime, rightAscension, declination, unit, det1, det2 ): 
 110    """ 
111    timeDelay( gpsTime, rightAscension, declination, unit, det1, det2 ) 
112     
113    Calculates the time delay in seconds between the detectors 
114    'det1' and 'det2' (e.g. 'H1') for a sky location at (rightAscension 
115    and declination) which must be given in certain units 
116    ('radians' or 'degree'). The time is passes as GPS time. 
117    A positive time delay means the GW arrives first at 'det2', then at 'det1'. 
118       
119    Example: 
120    antenna.timeDelay( 877320548.000, 355.084,31.757, 'degree','H1','L1') 
121    0.0011604683260994519 
122   
123    Given these values, the signal arrives first at detector L1, 
124    and 1.16 ms later at H2 
125    """ 
126   
127     
128    if unit =='radians': 
129      ra_rad = rightAscension 
130      de_rad = declination 
131    elif unit =='degree': 
132      ra_rad = rightAscension/180.0*pi 
133      de_rad = declination/180.0*pi 
134    else: 
135      raise ValueError, "Unknown unit %s" % unit 
136   
137     
138    if ra_rad<0.0 or ra_rad> 2*pi: 
139      raise ValueError, "ERROR. right ascension=%f "\ 
140            "not within reasonable range."\ 
141            % (rightAscension) 
142   
143    if de_rad<-pi or de_rad> pi: 
144      raise ValueError, "ERROR. declination=%f not within reasonable range."\ 
145            % (declination) 
146   
147    if det1 == det2: 
148      return 0.0 
149     
150    gps = lal.LIGOTimeGPS( gpsTime ) 
151   
152     
153    detMap = {'H1': 'LHO_4k', 'H2': 'LHO_2k', 'L1': 'LLO_4k', 
154              'G1': 'GEO_600', 'V1': 'VIRGO', 'T1': 'TAMA_300'} 
155     
156    x1 = inject.cached_detector[detMap[det1]].location 
157    x2 = inject.cached_detector[detMap[det2]].location 
158    timedelay = lal.ArrivalTimeDiff(list(x1), list(x2), ra_rad, de_rad, gps) 
159   
160    return timedelay 
 161