add and use new function XLALComputeAntennaPatternSqrtDeterminant()
requested to merge CW/software/lalsuite:RP-fix-negative-2F-values-for-small-number-of-SFTs into master
The first commit introduces a new function to compute the antenna-pattern matrix determinant, using a threshold for 'acceptable' condition-numbers for the antenna-pattern matrix of 1e3, and returning NAN if it exceeds this. In the first commit only the F-stat calculation makes use of that, and all tests pass.
@david-keitel However, when extending this to TransientCW_utils in the second commit, this does make your testCFSv2transient.sh fail now, as numerous cases exceed that condition number, eg
$ make check TESTS=testCFSv2transient.sh
$ LAL_DEBUG_LEVEL=warning ./lalapps_ComputeFstatistic_v2 --Alpha=2 --Delta=-0.5 --Freq=100.1234465277778 --f1dot=-1e-10 --FreqBand=6.944444444444445e-06 --f1dotBand=0 --dFreq=6.944444444444445e-08 --df1dot=1 --DataFiles="testCFSv2transient.d/*.sft" --IFO="H1" --TwoFthreshold=0 --refTime=711595934 --outputFstat="testCFSv2transient.d/testCFSv2_run2.dat" --outputLoudest="testCFSv2transient.d/Fstat_loudest_run2.dat" --outputTransientStats="testCFSv2transient.d/testCFSv2_tCW_run2.dat" --transient-WindowType="rect" --transient-t0Epoch=711595934 --transient-t0Band=140400 --transient-dt0=1800 --transient-tau=3600 --transient-tauBand=144000 --transient-dtau=1800 --Dterms=8
WARNING: Antenna-pattern matrix is ill-conditioned:
cond{A=0.1857808232307434, B=0.2133933007717133, C=-0.1988836228847504, E=0} = 1.77e+03 > 1.00e+03 ==> setting derminant = NaN
WARNING: Antenna-pattern matrix is ill-conditioned:
cond{A=0.290683388710022, B=0.3185926675796509, C=-0.3039344847202301, E=0} = 1.59e+03 > 1.00e+03 ==> setting derminant = NaN
WARNING: Antenna-pattern matrix is ill-conditioned:
cond{A=0.3435397148132324, B=0.3808883726596832, C=-0.3613167107105255, E=0} = 1.74e+03 > 1.00e+03 ==> setting derminant = NaN
WARNING: Antenna-pattern matrix is ill-conditioned:
cond{A=0.2043910026550293, B=0.2093276679515839, C=-0.2068327963352203, E=0} = 3.51e+04 > 1.00e+03 ==> setting derminant = NaN
WARNING: Antenna-pattern matrix is ill-conditioned:
cond{A=0.2572473287582397, B=0.2716233730316162, C=-0.2642150223255157, E=0} = 4.31e+03 > 1.00e+03 ==> setting derminant = NaN
WARNING: Antenna-pattern matrix is ill-conditioned:
cond{A=0.1577588617801666, B=0.1674950569868088, C=-0.1624330878257751, E=0} = 2.69e+03 > 1.00e+03 ==> setting derminant = NaN
WARNING: Antenna-pattern matrix is ill-conditioned:
cond{A=0.07880248129367828, B=0.3458895087242126, C=0.1645843237638474, E=0} = 1.07e+03 > 1.00e+03 ==> setting derminant = NaN
WARNING: Antenna-pattern matrix is ill-conditioned:
cond{A=0.1141374185681343, B=0.5300058126449585, C=0.2452424764633179, E=0} = 1.18e+03 > 1.00e+03 ==> setting derminant = NaN
WARNING: Antenna-pattern matrix is ill-conditioned:
cond{A=0.06714462488889694, B=0.2739522755146027, C=0.1356251537799835, E=0} = 4.77e+05 > 1.00e+03 ==> setting derminant = NaN
...
I'm not quite sure if that's a sign of problems, and if the test should be adjusted to be 'safer', or if this would actually be "OK"? How many SFTs are used in these calculations, do you know?
Edited by Reinhard Prix