Account for earth curvature in ET detector constants
Description
The current detector configuration for the Einstein Telescope detector follows T1400308. According to the procedure outlined in this document, the vertices and unit vectors of the triangular configuration are calculated in ECEF coordinates. These coordinates are then transformed into latitude, longitude, height, azimuth and tilt for each corner point. The current azimuth and tilt in LALDetectors.h are all calculated with respect to the tangent plane of the first corner point. This has two important consequences:
- Creating an ET2 or ET3 detector from cache results in a different unit vector (and detector response tensor) than creating the same detector from a LALFrDetector object (verified, it is off by O(10^{-3})). This difference is also visible downstream by comparing to the PyCBC detector response.
- The null stream ET0 does not perfectly correspond to the sum of ET1, ET2 and ET3.
I have updated the angles to take the curvature into account and verified the consistency of the detector response tensor between cached detectors, from LALFrDetector object and PyCBC. A minimal example to check the consistency:
#include <lal/LALDetectors.h>
#include <stdio.h>
#include <string.h>
void print_detector_response(LALDetector *detector) {
printf("Detector response tensor:\n");
for (int i = 0; i < 3; i++) {
printf("\n[ ");
for (int j = 0; j < 3; j++) {
printf("%f, ", detector->response[i][j]);
}
printf("]\n");
}
}
int main() {
LALDetector from_cache, from_src;
LALFrDetector init = {.name = LAL_ET2_DETECTOR_NAME};
LALDetectorType type = LALDETECTORTYPE_IFODIFF;
XLALCreateDetector(&from_cache, &init, type);
print_detector_response(&from_cache);
LALFrDetector init2 = from_cache.frDetector;
strcpy(init2.name, "Test");
XLALCreateDetector(&from_src, &init2, type);
print_detector_response(&from_src);
return 0;
}
API Changes and Justification
Backwards Compatible Changes
-
This change does not modify any class/function/struct/type definitions in a public C header file or any Python class/function definitions -
This change adds new classes/functions/structs/types to a public C header file or Python module
There is no change in API but results will differ slightly for anyone using the ET detector constants directly.
Backwards Incompatible Changes
-
This change modifies an existing class/function/struct/type definition in a public C header file or Python module -
This change removes an existing class/function/struct/type from a public C header file or Python module
If any of the Backwards Incompatible check boxes are ticked please provide a justification why this change is necessary and why it needs to be done in a backwards incompatible way.
Review Status
Please provide details on any reviews related to this change and and the associated reviewers.