lalsuite 7.26.2.dev20251210__cp312-cp312-macosx_12_0_arm64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (749) hide show
  1. lal/.dylibs/Python +0 -0
  2. lal/.dylibs/libaec.0.dylib +0 -0
  3. lal/.dylibs/libbrotlicommon.1.2.0.dylib +0 -0
  4. lal/.dylibs/libbrotlidec.1.2.0.dylib +0 -0
  5. lal/.dylibs/libcfitsio.10.4.4.1.dylib +0 -0
  6. lal/.dylibs/libcrypto.3.dylib +0 -0
  7. lal/.dylibs/libcurl.4.dylib +0 -0
  8. lal/.dylibs/libfftw3.3.dylib +0 -0
  9. lal/.dylibs/libfftw3f.3.dylib +0 -0
  10. lal/.dylibs/libframel.8.48.4.dylib +0 -0
  11. lal/.dylibs/libgsl.28.dylib +0 -0
  12. lal/.dylibs/libgslcblas.0.dylib +0 -0
  13. lal/.dylibs/libhdf5.310.dylib +0 -0
  14. lal/.dylibs/libhdf5_hl.310.dylib +0 -0
  15. lal/.dylibs/libiconv.2.dylib +0 -0
  16. lal/.dylibs/libidn2.0.dylib +0 -0
  17. lal/.dylibs/libintl.8.dylib +0 -0
  18. lal/.dylibs/liblal.20.dylib +0 -0
  19. lal/.dylibs/liblalburst.8.dylib +0 -0
  20. lal/.dylibs/liblalframe.14.dylib +0 -0
  21. lal/.dylibs/liblalinference.23.dylib +0 -0
  22. lal/.dylibs/liblalinspiral.18.dylib +0 -0
  23. lal/.dylibs/liblalmetaio.11.dylib +0 -0
  24. lal/.dylibs/liblalpulsar.30.dylib +0 -0
  25. lal/.dylibs/liblalsimulation.37.dylib +0 -0
  26. lal/.dylibs/liblalsupport.14.dylib +0 -0
  27. lal/.dylibs/libmetaio.1.dylib +0 -0
  28. lal/.dylibs/libnghttp2.14.dylib +0 -0
  29. lal/.dylibs/libpsl.5.dylib +0 -0
  30. lal/.dylibs/libssl.3.dylib +0 -0
  31. lal/.dylibs/libsz.2.dylib +0 -0
  32. lal/.dylibs/libunistring.5.dylib +0 -0
  33. lal/.dylibs/libz.1.3.1.dylib +0 -0
  34. lal/.dylibs/libzstd.1.5.7.dylib +0 -0
  35. lal/__init__.py +145 -0
  36. lal/_lal.cpython-312-darwin.so +0 -0
  37. lal/_lal_swig.py +12 -0
  38. lal/antenna.py +1200 -0
  39. lal/git_version.py +64 -0
  40. lal/gpstime.py +233 -0
  41. lal/iterutils.py +408 -0
  42. lal/pipeline.py +3139 -0
  43. lal/rate.py +2455 -0
  44. lal/series.py +244 -0
  45. lal/utils/__init__.py +29 -0
  46. lal/utils/cache.py +379 -0
  47. lal/utils/series.py +277 -0
  48. lalapps/__init__.py +26 -0
  49. lalapps/bin/lal_cache +0 -0
  50. lalapps/bin/lal_fftw_wisdom +0 -0
  51. lalapps/bin/lal_fftwf_wisdom +0 -0
  52. lalapps/bin/lal_simd_detect +0 -0
  53. lalapps/bin/lal_tconvert +0 -0
  54. lalapps/bin/lal_version +0 -0
  55. lalapps/bin/lalapps_ComputeAntennaPattern +16 -0
  56. lalapps/bin/lalapps_ComputeFstatBenchmark +16 -0
  57. lalapps/bin/lalapps_ComputeFstatLatticeCount +16 -0
  58. lalapps/bin/lalapps_ComputeFstatMCUpperLimit +16 -0
  59. lalapps/bin/lalapps_ComputeFstatistic_v2 +16 -0
  60. lalapps/bin/lalapps_ComputePSD +16 -0
  61. lalapps/bin/lalapps_CopySFTs +16 -0
  62. lalapps/bin/lalapps_DistanceVsMass +0 -0
  63. lalapps/bin/lalapps_DriveHoughMulti +16 -0
  64. lalapps/bin/lalapps_FstatMetric_v2 +16 -0
  65. lalapps/bin/lalapps_HierarchSearchGCT +16 -0
  66. lalapps/bin/lalapps_HierarchicalSearch +16 -0
  67. lalapps/bin/lalapps_MakeSFTDAG +16 -0
  68. lalapps/bin/lalapps_MakeSFTs +16 -0
  69. lalapps/bin/lalapps_Makefakedata_v4 +16 -0
  70. lalapps/bin/lalapps_Makefakedata_v5 +16 -0
  71. lalapps/bin/lalapps_PredictFstat +16 -0
  72. lalapps/bin/lalapps_PrintDetectorState +16 -0
  73. lalapps/bin/lalapps_SFTclean +16 -0
  74. lalapps/bin/lalapps_SFTvalidate +16 -0
  75. lalapps/bin/lalapps_StringAddFrame +0 -0
  76. lalapps/bin/lalapps_StringSearch +0 -0
  77. lalapps/bin/lalapps_Weave +16 -0
  78. lalapps/bin/lalapps_WeaveCompare +16 -0
  79. lalapps/bin/lalapps_WeaveConcat +16 -0
  80. lalapps/bin/lalapps_WeaveSetup +16 -0
  81. lalapps/bin/lalapps_WriteSFTsfromSFDBs +16 -0
  82. lalapps/bin/lalapps_animate +0 -0
  83. lalapps/bin/lalapps_binj +0 -0
  84. lalapps/bin/lalapps_blindinj +0 -0
  85. lalapps/bin/lalapps_cache +16 -0
  86. lalapps/bin/lalapps_calfacs +0 -0
  87. lalapps/bin/lalapps_cbc_stochasticbank +0 -0
  88. lalapps/bin/lalapps_chirplen +0 -0
  89. lalapps/bin/lalapps_coh_PTF_inspiral +0 -0
  90. lalapps/bin/lalapps_coinj +0 -0
  91. lalapps/bin/lalapps_combine_crosscorr_toplists +16 -0
  92. lalapps/bin/lalapps_compareFstats +16 -0
  93. lalapps/bin/lalapps_compareSFTs +16 -0
  94. lalapps/bin/lalapps_create_time_correction_ephemeris +16 -0
  95. lalapps/bin/lalapps_dumpSFT +16 -0
  96. lalapps/bin/lalapps_effdist +0 -0
  97. lalapps/bin/lalapps_exc_resp +0 -0
  98. lalapps/bin/lalapps_fftw_wisdom +16 -0
  99. lalapps/bin/lalapps_fftwf_wisdom +16 -0
  100. lalapps/bin/lalapps_fits_header_getval +16 -0
  101. lalapps/bin/lalapps_fits_header_list +16 -0
  102. lalapps/bin/lalapps_fits_overview +16 -0
  103. lalapps/bin/lalapps_fits_table_list +16 -0
  104. lalapps/bin/lalapps_fr_ninja +0 -0
  105. lalapps/bin/lalapps_frextr +0 -0
  106. lalapps/bin/lalapps_frinfo +0 -0
  107. lalapps/bin/lalapps_frjoin +0 -0
  108. lalapps/bin/lalapps_frread +0 -0
  109. lalapps/bin/lalapps_frview +0 -0
  110. lalapps/bin/lalapps_gwf2xml +0 -0
  111. lalapps/bin/lalapps_heterodyne_pulsar +16 -0
  112. lalapps/bin/lalapps_inspawgfile +0 -0
  113. lalapps/bin/lalapps_inspfrinj +0 -0
  114. lalapps/bin/lalapps_inspinj +0 -0
  115. lalapps/bin/lalapps_inspiralDistance +0 -0
  116. lalapps/bin/lalapps_knope +16 -0
  117. lalapps/bin/lalapps_knope_automation_script +16 -0
  118. lalapps/bin/lalapps_knope_collate_results +16 -0
  119. lalapps/bin/lalapps_knope_result_page +16 -0
  120. lalapps/bin/lalapps_makeblindinj +85 -0
  121. lalapps/bin/lalapps_makeblindinj_himass +67 -0
  122. lalapps/bin/lalapps_ninja +0 -0
  123. lalapps/bin/lalapps_path2cache +16 -0
  124. lalapps/bin/lalapps_power +0 -0
  125. lalapps/bin/lalapps_pulsar_crosscorr_v2 +16 -0
  126. lalapps/bin/lalapps_pulsar_frequency_evolution +16 -0
  127. lalapps/bin/lalapps_pulsar_parameter_estimation_nested +16 -0
  128. lalapps/bin/lalapps_random_bank +0 -0
  129. lalapps/bin/lalapps_randombank +0 -0
  130. lalapps/bin/lalapps_run_pulsar_crosscorr_v2 +16 -0
  131. lalapps/bin/lalapps_searchsum2cache +16 -0
  132. lalapps/bin/lalapps_spec_avg +16 -0
  133. lalapps/bin/lalapps_spec_avg_long +16 -0
  134. lalapps/bin/lalapps_spec_coherence +16 -0
  135. lalapps/bin/lalapps_spininj +0 -0
  136. lalapps/bin/lalapps_splitSFTs +16 -0
  137. lalapps/bin/lalapps_splitbank +0 -0
  138. lalapps/bin/lalapps_ssbtodetector +16 -0
  139. lalapps/bin/lalapps_synthesizeBstatMC +16 -0
  140. lalapps/bin/lalapps_synthesizeLVStats +16 -0
  141. lalapps/bin/lalapps_synthesizeTransientStats +16 -0
  142. lalapps/bin/lalapps_tconvert +16 -0
  143. lalapps/bin/lalapps_tmpltbank +0 -0
  144. lalapps/bin/lalapps_version +0 -0
  145. lalapps/bin/lalapps_xtefitstoframe +0 -0
  146. lalapps/bin/lalburst_version +0 -0
  147. lalapps/bin/lalfr-cat +0 -0
  148. lalapps/bin/lalfr-cksum +0 -0
  149. lalapps/bin/lalfr-cut +0 -0
  150. lalapps/bin/lalfr-dump +0 -0
  151. lalapps/bin/lalfr-fmt +0 -0
  152. lalapps/bin/lalfr-paste +0 -0
  153. lalapps/bin/lalfr-print +0 -0
  154. lalapps/bin/lalfr-split +0 -0
  155. lalapps/bin/lalfr-stat +0 -0
  156. lalapps/bin/lalfr-stream +0 -0
  157. lalapps/bin/lalfr-vis +0 -0
  158. lalapps/bin/lalframe_version +0 -0
  159. lalapps/bin/lalinference_bench +0 -0
  160. lalapps/bin/lalinference_burst +0 -0
  161. lalapps/bin/lalinference_datadump +0 -0
  162. lalapps/bin/lalinference_injectedlike +0 -0
  163. lalapps/bin/lalinference_mpi_wrapper +59 -0
  164. lalapps/bin/lalinference_nest +0 -0
  165. lalapps/bin/lalinference_version +0 -0
  166. lalapps/bin/lalinspiral_version +0 -0
  167. lalapps/bin/lalmetaio_version +0 -0
  168. lalapps/bin/lalpulsar_ComputeAntennaPattern +0 -0
  169. lalapps/bin/lalpulsar_ComputeFstatBenchmark +0 -0
  170. lalapps/bin/lalpulsar_ComputeFstatLatticeCount +0 -0
  171. lalapps/bin/lalpulsar_ComputeFstatMCUpperLimit +0 -0
  172. lalapps/bin/lalpulsar_ComputeFstatistic_v2 +0 -0
  173. lalapps/bin/lalpulsar_ComputePSD +0 -0
  174. lalapps/bin/lalpulsar_DriveHoughMulti +0 -0
  175. lalapps/bin/lalpulsar_FstatMetric_v2 +0 -0
  176. lalapps/bin/lalpulsar_HierarchSearchGCT +0 -0
  177. lalapps/bin/lalpulsar_HierarchicalSearch +0 -0
  178. lalapps/bin/lalpulsar_MakeSFTs +0 -0
  179. lalapps/bin/lalpulsar_Makefakedata_v4 +0 -0
  180. lalapps/bin/lalpulsar_Makefakedata_v5 +0 -0
  181. lalapps/bin/lalpulsar_PredictFstat +0 -0
  182. lalapps/bin/lalpulsar_PrintDetectorState +0 -0
  183. lalapps/bin/lalpulsar_SFTclean +0 -0
  184. lalapps/bin/lalpulsar_SFTvalidate +0 -0
  185. lalapps/bin/lalpulsar_Weave +0 -0
  186. lalapps/bin/lalpulsar_WeaveCompare +0 -0
  187. lalapps/bin/lalpulsar_WeaveConcat +0 -0
  188. lalapps/bin/lalpulsar_WeaveSetup +0 -0
  189. lalapps/bin/lalpulsar_WriteSFTsfromSFDBs +0 -0
  190. lalapps/bin/lalpulsar_compareFstats +0 -0
  191. lalapps/bin/lalpulsar_compareSFTs +0 -0
  192. lalapps/bin/lalpulsar_create_time_correction_ephemeris +0 -0
  193. lalapps/bin/lalpulsar_crosscorr_v2 +0 -0
  194. lalapps/bin/lalpulsar_dumpSFT +0 -0
  195. lalapps/bin/lalpulsar_fits_header_getval +0 -0
  196. lalapps/bin/lalpulsar_fits_header_list +0 -0
  197. lalapps/bin/lalpulsar_fits_overview +0 -0
  198. lalapps/bin/lalpulsar_fits_table_list +0 -0
  199. lalapps/bin/lalpulsar_frequency_evolution +0 -0
  200. lalapps/bin/lalpulsar_heterodyne +0 -0
  201. lalapps/bin/lalpulsar_parameter_estimation_nested +0 -0
  202. lalapps/bin/lalpulsar_spec_avg +0 -0
  203. lalapps/bin/lalpulsar_spec_avg_long +0 -0
  204. lalapps/bin/lalpulsar_spec_coherence +0 -0
  205. lalapps/bin/lalpulsar_splitSFTs +0 -0
  206. lalapps/bin/lalpulsar_ssbtodetector +0 -0
  207. lalapps/bin/lalpulsar_synthesizeBstatMC +0 -0
  208. lalapps/bin/lalpulsar_synthesizeLVStats +0 -0
  209. lalapps/bin/lalpulsar_synthesizeTransientStats +0 -0
  210. lalapps/bin/lalpulsar_version +0 -0
  211. lalapps/bin/lalsim-bh-qnmode +0 -0
  212. lalapps/bin/lalsim-bh-ringdown +0 -0
  213. lalapps/bin/lalsim-bh-sphwf +0 -0
  214. lalapps/bin/lalsim-burst +0 -0
  215. lalapps/bin/lalsim-detector-noise +0 -0
  216. lalapps/bin/lalsim-detector-strain +0 -0
  217. lalapps/bin/lalsim-inject +0 -0
  218. lalapps/bin/lalsim-inspiral +0 -0
  219. lalapps/bin/lalsim-ns-eos-table +0 -0
  220. lalapps/bin/lalsim-ns-mass-radius +0 -0
  221. lalapps/bin/lalsim-ns-params +0 -0
  222. lalapps/bin/lalsim-sgwb +0 -0
  223. lalapps/bin/lalsim-unicorn +0 -0
  224. lalapps/bin/lalsimulation_version +0 -0
  225. lalapps/cosmicstring.py +691 -0
  226. lalapps/data/BNSMasses.dat +65022 -0
  227. lalapps/data/CorrelationMatrix.csv +15 -0
  228. lalapps/data/LALSimNeutronStarEOS_ABHT_QMC_RMF1_META.dat +1882 -0
  229. lalapps/data/LALSimNeutronStarEOS_ABHT_QMC_RMF2_META.dat +1939 -0
  230. lalapps/data/LALSimNeutronStarEOS_ABHT_QMC_RMF3_META.dat +1784 -0
  231. lalapps/data/LALSimNeutronStarEOS_ABHT_QMC_RMF4_META.dat +2074 -0
  232. lalapps/data/LALSimNeutronStarEOS_ALF1.dat +435 -0
  233. lalapps/data/LALSimNeutronStarEOS_ALF2.dat +453 -0
  234. lalapps/data/LALSimNeutronStarEOS_ALF3.dat +441 -0
  235. lalapps/data/LALSimNeutronStarEOS_ALF4.dat +441 -0
  236. lalapps/data/LALSimNeutronStarEOS_AP1.dat +212 -0
  237. lalapps/data/LALSimNeutronStarEOS_AP2.dat +212 -0
  238. lalapps/data/LALSimNeutronStarEOS_AP3.dat +212 -0
  239. lalapps/data/LALSimNeutronStarEOS_AP4.dat +210 -0
  240. lalapps/data/LALSimNeutronStarEOS_APR.dat +500 -0
  241. lalapps/data/LALSimNeutronStarEOS_APR4_EPP.dat +1447 -0
  242. lalapps/data/LALSimNeutronStarEOS_BBB2.dat +84 -0
  243. lalapps/data/LALSimNeutronStarEOS_BGN1H1.dat +123 -0
  244. lalapps/data/LALSimNeutronStarEOS_BHF_BBB2.dat +499 -0
  245. lalapps/data/LALSimNeutronStarEOS_BL_CHIRAL_META.dat +1534 -0
  246. lalapps/data/LALSimNeutronStarEOS_BPAL12.dat +61 -0
  247. lalapps/data/LALSimNeutronStarEOS_BSK19.dat +310 -0
  248. lalapps/data/LALSimNeutronStarEOS_BSK20.dat +310 -0
  249. lalapps/data/LALSimNeutronStarEOS_BSK21.dat +310 -0
  250. lalapps/data/LALSimNeutronStarEOS_ENG.dat +108 -0
  251. lalapps/data/LALSimNeutronStarEOS_FPS.dat +129 -0
  252. lalapps/data/LALSimNeutronStarEOS_GMSR_BSK14_BSK24.dat +1010 -0
  253. lalapps/data/LALSimNeutronStarEOS_GMSR_DHSL59_BSK24.dat +1009 -0
  254. lalapps/data/LALSimNeutronStarEOS_GMSR_DHSL69_BSK24.dat +1009 -0
  255. lalapps/data/LALSimNeutronStarEOS_GMSR_F0_BSK24.dat +1010 -0
  256. lalapps/data/LALSimNeutronStarEOS_GMSR_H1_BSK24.dat +1009 -0
  257. lalapps/data/LALSimNeutronStarEOS_GMSR_H2_BSK24.dat +1010 -0
  258. lalapps/data/LALSimNeutronStarEOS_GMSR_H3_BSK24.dat +1010 -0
  259. lalapps/data/LALSimNeutronStarEOS_GMSR_H4_BSK24.dat +1010 -0
  260. lalapps/data/LALSimNeutronStarEOS_GMSR_H5_BSK24.dat +1009 -0
  261. lalapps/data/LALSimNeutronStarEOS_GMSR_LN55_BSK24.dat +1010 -0
  262. lalapps/data/LALSimNeutronStarEOS_GMSR_SLY5_BSK24.dat +1010 -0
  263. lalapps/data/LALSimNeutronStarEOS_GNH3.dat +71 -0
  264. lalapps/data/LALSimNeutronStarEOS_GPPVA_DD2_BSK24.dat +1009 -0
  265. lalapps/data/LALSimNeutronStarEOS_GPPVA_DDME2_BSK24.dat +1010 -0
  266. lalapps/data/LALSimNeutronStarEOS_GPPVA_FSU2H_BSK24.dat +1009 -0
  267. lalapps/data/LALSimNeutronStarEOS_GPPVA_FSU2_BSK24.dat +1010 -0
  268. lalapps/data/LALSimNeutronStarEOS_GPPVA_NL3WRL55_BSK24.dat +1010 -0
  269. lalapps/data/LALSimNeutronStarEOS_GS1.dat +136 -0
  270. lalapps/data/LALSimNeutronStarEOS_GS2.dat +100 -0
  271. lalapps/data/LALSimNeutronStarEOS_H1.dat +114 -0
  272. lalapps/data/LALSimNeutronStarEOS_H2.dat +114 -0
  273. lalapps/data/LALSimNeutronStarEOS_H3.dat +98 -0
  274. lalapps/data/LALSimNeutronStarEOS_H4.dat +664 -0
  275. lalapps/data/LALSimNeutronStarEOS_H5.dat +703 -0
  276. lalapps/data/LALSimNeutronStarEOS_H6.dat +509 -0
  277. lalapps/data/LALSimNeutronStarEOS_H7.dat +703 -0
  278. lalapps/data/LALSimNeutronStarEOS_HQC18.dat +388 -0
  279. lalapps/data/LALSimNeutronStarEOS_KDE0V.dat +500 -0
  280. lalapps/data/LALSimNeutronStarEOS_KDE0V1.dat +500 -0
  281. lalapps/data/LALSimNeutronStarEOS_KDE0V1_BSK24.dat +1388 -0
  282. lalapps/data/LALSimNeutronStarEOS_KDE0V_BSK24.dat +1398 -0
  283. lalapps/data/LALSimNeutronStarEOS_MPA1.dat +102 -0
  284. lalapps/data/LALSimNeutronStarEOS_MS1.dat +122 -0
  285. lalapps/data/LALSimNeutronStarEOS_MS1B.dat +126 -0
  286. lalapps/data/LALSimNeutronStarEOS_MS1B_PP.dat +1447 -0
  287. lalapps/data/LALSimNeutronStarEOS_MS1_PP.dat +1447 -0
  288. lalapps/data/LALSimNeutronStarEOS_MS2.dat +48 -0
  289. lalapps/data/LALSimNeutronStarEOS_PAL6.dat +148 -0
  290. lalapps/data/LALSimNeutronStarEOS_PCL2.dat +134 -0
  291. lalapps/data/LALSimNeutronStarEOS_PCP_BSK24_BSK24.dat +1010 -0
  292. lalapps/data/LALSimNeutronStarEOS_PS.dat +165 -0
  293. lalapps/data/LALSimNeutronStarEOS_QMC700.dat +117 -0
  294. lalapps/data/LALSimNeutronStarEOS_RG_SLY4_BSK24.dat +1010 -0
  295. lalapps/data/LALSimNeutronStarEOS_RS.dat +500 -0
  296. lalapps/data/LALSimNeutronStarEOS_RS_BSK24.dat +1356 -0
  297. lalapps/data/LALSimNeutronStarEOS_SK255.dat +500 -0
  298. lalapps/data/LALSimNeutronStarEOS_SK255_BSK24.dat +1066 -0
  299. lalapps/data/LALSimNeutronStarEOS_SK272.dat +500 -0
  300. lalapps/data/LALSimNeutronStarEOS_SKA.dat +500 -0
  301. lalapps/data/LALSimNeutronStarEOS_SKA_BSK24.dat +1433 -0
  302. lalapps/data/LALSimNeutronStarEOS_SKB.dat +500 -0
  303. lalapps/data/LALSimNeutronStarEOS_SKB_BSK24.dat +1373 -0
  304. lalapps/data/LALSimNeutronStarEOS_SKI2.dat +500 -0
  305. lalapps/data/LALSimNeutronStarEOS_SKI2_BSK24.dat +1348 -0
  306. lalapps/data/LALSimNeutronStarEOS_SKI3.dat +500 -0
  307. lalapps/data/LALSimNeutronStarEOS_SKI3_BSK24.dat +1355 -0
  308. lalapps/data/LALSimNeutronStarEOS_SKI4.dat +497 -0
  309. lalapps/data/LALSimNeutronStarEOS_SKI4_BSK24.dat +1348 -0
  310. lalapps/data/LALSimNeutronStarEOS_SKI5.dat +500 -0
  311. lalapps/data/LALSimNeutronStarEOS_SKI6.dat +500 -0
  312. lalapps/data/LALSimNeutronStarEOS_SKI6_BSK24.dat +1358 -0
  313. lalapps/data/LALSimNeutronStarEOS_SKMP.dat +498 -0
  314. lalapps/data/LALSimNeutronStarEOS_SKOP.dat +500 -0
  315. lalapps/data/LALSimNeutronStarEOS_SKOP_BSK24.dat +1373 -0
  316. lalapps/data/LALSimNeutronStarEOS_SLY.dat +99 -0
  317. lalapps/data/LALSimNeutronStarEOS_SLY2.dat +500 -0
  318. lalapps/data/LALSimNeutronStarEOS_SLY230A.dat +500 -0
  319. lalapps/data/LALSimNeutronStarEOS_SLY230A_BSK24.dat +1116 -0
  320. lalapps/data/LALSimNeutronStarEOS_SLY2_BSK24.dat +1106 -0
  321. lalapps/data/LALSimNeutronStarEOS_SLY4.dat +100 -0
  322. lalapps/data/LALSimNeutronStarEOS_SLY9.dat +498 -0
  323. lalapps/data/LALSimNeutronStarEOS_SLY9_BSK24.dat +1083 -0
  324. lalapps/data/LALSimNeutronStarEOS_SQM1.dat +176 -0
  325. lalapps/data/LALSimNeutronStarEOS_SQM2.dat +180 -0
  326. lalapps/data/LALSimNeutronStarEOS_SQM3.dat +176 -0
  327. lalapps/data/LALSimNeutronStarEOS_WFF1.dat +109 -0
  328. lalapps/data/LALSimNeutronStarEOS_WFF2.dat +109 -0
  329. lalapps/data/LALSimNeutronStarEOS_WFF3.dat +107 -0
  330. lalapps/data/LALSimNeutronStarEOS_XMLSLZ_DDLZ1_BSK24.dat +1227 -0
  331. lalapps/data/LALSimNeutronStarEOS_XMLSLZ_DDME2_BSK24.dat +1272 -0
  332. lalapps/data/LALSimNeutronStarEOS_XMLSLZ_DDMEX_BSK24.dat +1280 -0
  333. lalapps/data/LALSimNeutronStarEOS_XMLSLZ_GM1_BSK24.dat +1288 -0
  334. lalapps/data/LALSimNeutronStarEOS_XMLSLZ_MTVTC_BSK24.dat +1288 -0
  335. lalapps/data/LALSimNeutronStarEOS_XMLSLZ_NL3_BSK24.dat +1230 -0
  336. lalapps/data/LALSimNeutronStarEOS_XMLSLZ_PKDD_BSK24.dat +1288 -0
  337. lalapps/data/LALSimNeutronStarEOS_XMLSLZ_TM1_BSK24.dat +1288 -0
  338. lalapps/data/LALSimNeutronStarEOS_XMLSLZ_TW99_BSK24.dat +1288 -0
  339. lalapps/data/LIGO-P1200087-v18-AdV_BNS_OPTIMIZED.txt +3000 -0
  340. lalapps/data/LIGO-P1200087-v18-AdV_DESIGN.txt +3000 -0
  341. lalapps/data/LIGO-P1200087-v18-AdV_EARLY_HIGH.txt +3000 -0
  342. lalapps/data/LIGO-P1200087-v18-AdV_EARLY_LOW.txt +3000 -0
  343. lalapps/data/LIGO-P1200087-v18-AdV_LATE_HIGH.txt +3000 -0
  344. lalapps/data/LIGO-P1200087-v18-AdV_LATE_LOW.txt +3000 -0
  345. lalapps/data/LIGO-P1200087-v18-AdV_MID_HIGH.txt +3000 -0
  346. lalapps/data/LIGO-P1200087-v18-AdV_MID_LOW.txt +3000 -0
  347. lalapps/data/LIGO-P1200087-v18-aLIGO_BNS_OPTIMIZED.txt +3000 -0
  348. lalapps/data/LIGO-P1200087-v18-aLIGO_DESIGN.txt +3000 -0
  349. lalapps/data/LIGO-P1200087-v18-aLIGO_EARLY_HIGH.txt +3000 -0
  350. lalapps/data/LIGO-P1200087-v18-aLIGO_EARLY_LOW.txt +3000 -0
  351. lalapps/data/LIGO-P1200087-v18-aLIGO_LATE_HIGH.txt +3000 -0
  352. lalapps/data/LIGO-P1200087-v18-aLIGO_LATE_LOW.txt +3000 -0
  353. lalapps/data/LIGO-P1200087-v18-aLIGO_MID_HIGH.txt +3000 -0
  354. lalapps/data/LIGO-P1200087-v18-aLIGO_MID_LOW.txt +3000 -0
  355. lalapps/data/LIGO-P1600143-v18-CE.txt +3000 -0
  356. lalapps/data/LIGO-P1600143-v18-CE_Pessimistic.txt +3000 -0
  357. lalapps/data/LIGO-P1600143-v18-CE_Wideband.txt +3000 -0
  358. lalapps/data/LIGO-P1600143-v18-ET_D.txt +3000 -0
  359. lalapps/data/LIGO-T0900288-v3-BHBH_20deg.txt +3000 -0
  360. lalapps/data/LIGO-T0900288-v3-High_Freq.txt +3000 -0
  361. lalapps/data/LIGO-T0900288-v3-NO_SRM.txt +3000 -0
  362. lalapps/data/LIGO-T0900288-v3-NSNS_Opt.txt +3000 -0
  363. lalapps/data/LIGO-T0900288-v3-ZERO_DET_high_P.txt +3000 -0
  364. lalapps/data/LIGO-T0900288-v3-ZERO_DET_low_P.txt +3000 -0
  365. lalapps/data/LIGO-T1600593-v1-KAGRA_Design.txt +4000 -0
  366. lalapps/data/LIGO-T1600593-v1-KAGRA_Early.txt +4000 -0
  367. lalapps/data/LIGO-T1600593-v1-KAGRA_Late.txt +4000 -0
  368. lalapps/data/LIGO-T1600593-v1-KAGRA_Mid.txt +4000 -0
  369. lalapps/data/LIGO-T1600593-v1-KAGRA_Opening.txt +4000 -0
  370. lalapps/data/LIGO-T1800042-v5-aLIGO_APLUS.txt +3000 -0
  371. lalapps/data/LIGO-T1800044-v5-aLIGO_DESIGN.txt +3000 -0
  372. lalapps/data/LIGO-T1800545-v1-AdV_O3low.txt +3000 -0
  373. lalapps/data/LIGO-T1800545-v1-AdV_O4.txt +3000 -0
  374. lalapps/data/LIGO-T1800545-v1-AdV_O4intermediate.txt +3000 -0
  375. lalapps/data/LIGO-T1800545-v1-KAGRA_128Mpc.txt +1000 -0
  376. lalapps/data/LIGO-T1800545-v1-KAGRA_25Mpc.txt +1000 -0
  377. lalapps/data/LIGO-T1800545-v1-KAGRA_80Mpc.txt +1000 -0
  378. lalapps/data/LIGO-T1800545-v1-aLIGO_140Mpc.txt +1000 -0
  379. lalapps/data/LIGO-T1800545-v1-aLIGO_175Mpc.txt +2792 -0
  380. lalapps/data/LIGO-T1800545-v1-aLIGO_O3low.txt +2792 -0
  381. lalapps/data/bimodalMeans.csv +3 -0
  382. lalapps/data/config_tiger_example.ini +150 -0
  383. lalapps/data/fiducialBBH.xml +67 -0
  384. lalapps/data/fiducialBNS.xml +67 -0
  385. lalapps/data/inspsrcs100Mpc.errors +38735 -0
  386. lalapps/data/lalinference_pipe_example.ini +573 -0
  387. lalapps/data/lib_pipe_example.ini +303 -0
  388. lalapps/data/power_pipe.ini +129 -0
  389. lalapps/data/unimodalMeans.csv +2 -0
  390. lalapps/git_version.py +64 -0
  391. lalburst/SimBurstUtils.py +324 -0
  392. lalburst/SnglBurstUtils.py +367 -0
  393. lalburst/__init__.py +7 -0
  394. lalburst/_lalburst.cpython-312-darwin.so +0 -0
  395. lalburst/_lalburst_swig.py +16 -0
  396. lalburst/binjfind.py +824 -0
  397. lalburst/bucluster.py +409 -0
  398. lalburst/burca.py +315 -0
  399. lalburst/burca_tailor.py +349 -0
  400. lalburst/cafe.py +579 -0
  401. lalburst/calc_likelihood.py +145 -0
  402. lalburst/cs_gamma.cpython-312-darwin.so +0 -0
  403. lalburst/date.py +118 -0
  404. lalburst/git_version.py +64 -0
  405. lalburst/offsetvector.py +278 -0
  406. lalburst/packing.py +170 -0
  407. lalburst/power.py +1457 -0
  408. lalburst/snglcluster.py +136 -0
  409. lalburst/snglcoinc.py +2637 -0
  410. lalburst/stringutils.py +607 -0
  411. lalburst/timeslides.py +236 -0
  412. lalframe/__init__.py +7 -0
  413. lalframe/_lalframe.cpython-312-darwin.so +0 -0
  414. lalframe/_lalframe_swig.py +14 -0
  415. lalframe/frread.py +324 -0
  416. lalframe/git_version.py +64 -0
  417. lalframe/utils/__init__.py +25 -0
  418. lalframe/utils/frtools.py +61 -0
  419. lalinference/__init__.py +7 -0
  420. lalinference/_bayespputils.cpython-312-darwin.so +0 -0
  421. lalinference/_lalinference.cpython-312-darwin.so +0 -0
  422. lalinference/_lalinference_swig.py +19 -0
  423. lalinference/bayespputils.py +7479 -0
  424. lalinference/bayestar/__init__.py +2 -0
  425. lalinference/bayestar/deprecation.py +72 -0
  426. lalinference/git_version.py +64 -0
  427. lalinference/imrtgr/__init__.py +0 -0
  428. lalinference/imrtgr/imrtgrutils.py +168 -0
  429. lalinference/imrtgr/nrutils.py +1366 -0
  430. lalinference/imrtgr/pneqns.py +250 -0
  431. lalinference/io/__init__.py +31 -0
  432. lalinference/io/hdf5.py +365 -0
  433. lalinference/lalinference_pipe_utils.py +3617 -0
  434. lalinference/nest2pos.py +151 -0
  435. lalinference/plot/__init__.py +34 -0
  436. lalinference/plot/spindisk.py +104 -0
  437. lalinference/tiger/__init__.py +0 -0
  438. lalinference/tiger/make_injtimes.py +634 -0
  439. lalinference/tiger/omegascans_dag.py +691 -0
  440. lalinference/tiger/postproc.py +1338 -0
  441. lalinference/wrapper.py +231 -0
  442. lalinspiral/__init__.py +7 -0
  443. lalinspiral/_lalinspiral.cpython-312-darwin.so +0 -0
  444. lalinspiral/_lalinspiral_swig.py +18 -0
  445. lalinspiral/_thinca.cpython-312-darwin.so +0 -0
  446. lalinspiral/git_version.py +64 -0
  447. lalinspiral/inspinjfind.py +485 -0
  448. lalinspiral/thinca.py +509 -0
  449. lalmetaio/__init__.py +7 -0
  450. lalmetaio/_lalmetaio.cpython-312-darwin.so +0 -0
  451. lalmetaio/_lalmetaio_swig.py +14 -0
  452. lalmetaio/git_version.py +64 -0
  453. lalpulsar/NstarTools.py +259 -0
  454. lalpulsar/PulsarParametersWrapper.py +938 -0
  455. lalpulsar/__init__.py +7 -0
  456. lalpulsar/_lalpulsar.cpython-312-darwin.so +0 -0
  457. lalpulsar/_lalpulsar_swig.py +17 -0
  458. lalpulsar/git_version.py +64 -0
  459. lalpulsar/knope_utils.py +6497 -0
  460. lalpulsar/lineFileParser.py +264 -0
  461. lalpulsar/metric_utils.py +78 -0
  462. lalpulsar/piecewise_model/__init__.py +7 -0
  463. lalpulsar/piecewise_model/basis_functions.py +156 -0
  464. lalpulsar/piecewise_model/class_definitions.py +323 -0
  465. lalpulsar/piecewise_model/errors.py +37 -0
  466. lalpulsar/piecewise_model/estimating_knots.py +833 -0
  467. lalpulsar/piecewise_model/gte_and_other_methods.py +189 -0
  468. lalpulsar/piecewise_model/mols_for_gte.py +269 -0
  469. lalpulsar/piecewise_model/pw_fstat.py +813 -0
  470. lalpulsar/piecewise_model/pw_model_simulations.py +156 -0
  471. lalpulsar/piecewise_model/sampling_methods.py +186 -0
  472. lalpulsar/piecewise_model/semicoherent_metric_methods.py +375 -0
  473. lalpulsar/piecewise_model/tbank_estimates.py +293 -0
  474. lalpulsar/public_sft_directory.py +82 -0
  475. lalpulsar/pulsarhtmlutils.py +1395 -0
  476. lalpulsar/pulsarpputils.py +3638 -0
  477. lalpulsar/simulateCW.py +602 -0
  478. lalpulsar/simulateHeterodynedCW.py +591 -0
  479. lalsimulation/__init__.py +7 -0
  480. lalsimulation/_lalsimulation.cpython-312-darwin.so +0 -0
  481. lalsimulation/_lalsimulation_swig.py +14 -0
  482. lalsimulation/git_version.py +64 -0
  483. lalsimulation/gwsignal/__init__.py +9 -0
  484. lalsimulation/gwsignal/core/__init__.py +2 -0
  485. lalsimulation/gwsignal/core/conditioning_subroutines.py +196 -0
  486. lalsimulation/gwsignal/core/errors.py +136 -0
  487. lalsimulation/gwsignal/core/gw.py +206 -0
  488. lalsimulation/gwsignal/core/parameter_conventions.py +122 -0
  489. lalsimulation/gwsignal/core/utils.py +329 -0
  490. lalsimulation/gwsignal/core/waveform.py +725 -0
  491. lalsimulation/gwsignal/core/waveform_conditioning.py +455 -0
  492. lalsimulation/gwsignal/models/__init__.py +29 -0
  493. lalsimulation/gwsignal/models/pyseobnr_model.py +452 -0
  494. lalsimulation/nrfits/NRSur3dq8Remnant.py +92 -0
  495. lalsimulation/nrfits/NRSur7dq4Remnant.py +469 -0
  496. lalsimulation/nrfits/__init__.py +1 -0
  497. lalsimulation/nrfits/eval_fits.py +364 -0
  498. lalsimulation/nrfits/nrfits.py +78 -0
  499. lalsimulation/nrfits/pn_spin_evolution_wrapper.py +92 -0
  500. lalsimulation/nrfits/quaternion_utils.py +74 -0
  501. lalsimulation/tilts_at_infinity/__init__.py +2 -0
  502. lalsimulation/tilts_at_infinity/calc_tilts_prec_avg_regularized.py +1424 -0
  503. lalsimulation/tilts_at_infinity/hybrid_spin_evolution.py +461 -0
  504. lalsimulation/tilts_at_infinity/tilts_at_infinity_utils.py +167 -0
  505. lalsuite-7.26.2.dev20251210.data/scripts/cbcBayesBurstPPAnalysis +305 -0
  506. lalsuite-7.26.2.dev20251210.data/scripts/cbcBayesBurstPostProc +1364 -0
  507. lalsuite-7.26.2.dev20251210.data/scripts/cbcBayesCombinePTMCMCh5s +100 -0
  508. lalsuite-7.26.2.dev20251210.data/scripts/cbcBayesCombinePosteriors +235 -0
  509. lalsuite-7.26.2.dev20251210.data/scripts/cbcBayesCompPos +1121 -0
  510. lalsuite-7.26.2.dev20251210.data/scripts/cbcBayesDIEvidence +68 -0
  511. lalsuite-7.26.2.dev20251210.data/scripts/cbcBayesGraceDBinfo +182 -0
  512. lalsuite-7.26.2.dev20251210.data/scripts/cbcBayesMCMC2pos +314 -0
  513. lalsuite-7.26.2.dev20251210.data/scripts/cbcBayesPPAnalysis +322 -0
  514. lalsuite-7.26.2.dev20251210.data/scripts/cbcBayesPlotSpinDisk +42 -0
  515. lalsuite-7.26.2.dev20251210.data/scripts/cbcBayesPosToSimBurst +227 -0
  516. lalsuite-7.26.2.dev20251210.data/scripts/cbcBayesPosToSimInspiral +307 -0
  517. lalsuite-7.26.2.dev20251210.data/scripts/cbcBayesPostProc +1345 -0
  518. lalsuite-7.26.2.dev20251210.data/scripts/cbcBayesThermoInt +107 -0
  519. lalsuite-7.26.2.dev20251210.data/scripts/imrtgr_imr_consistency_test +796 -0
  520. lalsuite-7.26.2.dev20251210.data/scripts/lal_cache +6 -0
  521. lalsuite-7.26.2.dev20251210.data/scripts/lal_fftw_wisdom +6 -0
  522. lalsuite-7.26.2.dev20251210.data/scripts/lal_fftwf_wisdom +6 -0
  523. lalsuite-7.26.2.dev20251210.data/scripts/lal_path2cache +148 -0
  524. lalsuite-7.26.2.dev20251210.data/scripts/lal_searchsum2cache +172 -0
  525. lalsuite-7.26.2.dev20251210.data/scripts/lal_simd_detect +6 -0
  526. lalsuite-7.26.2.dev20251210.data/scripts/lal_tconvert +6 -0
  527. lalsuite-7.26.2.dev20251210.data/scripts/lal_version +6 -0
  528. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_ComputeAntennaPattern +6 -0
  529. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_ComputeFstatBenchmark +6 -0
  530. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_ComputeFstatLatticeCount +6 -0
  531. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_ComputeFstatMCUpperLimit +6 -0
  532. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_ComputeFstatistic_v2 +6 -0
  533. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_ComputePSD +6 -0
  534. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_CopySFTs +6 -0
  535. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_DistanceVsMass +6 -0
  536. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_DriveHoughMulti +6 -0
  537. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_FstatMetric_v2 +6 -0
  538. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_HierarchSearchGCT +6 -0
  539. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_HierarchicalSearch +6 -0
  540. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_MakeSFTDAG +6 -0
  541. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_MakeSFTs +6 -0
  542. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_Makefakedata_v4 +6 -0
  543. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_Makefakedata_v5 +6 -0
  544. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_PredictFstat +6 -0
  545. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_PrintDetectorState +6 -0
  546. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_SFTclean +6 -0
  547. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_SFTvalidate +6 -0
  548. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_StringAddFrame +6 -0
  549. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_StringSearch +6 -0
  550. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_Weave +6 -0
  551. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_WeaveCompare +6 -0
  552. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_WeaveConcat +6 -0
  553. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_WeaveSetup +6 -0
  554. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_WriteSFTsfromSFDBs +6 -0
  555. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_animate +6 -0
  556. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_binj +6 -0
  557. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_blindinj +6 -0
  558. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_cache +6 -0
  559. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_cafe +99 -0
  560. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_calfacs +6 -0
  561. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_cbc_stochasticbank +6 -0
  562. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_chirplen +6 -0
  563. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_coh_PTF_inspiral +6 -0
  564. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_coinj +6 -0
  565. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_combine_crosscorr_toplists +6 -0
  566. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_compareFstats +6 -0
  567. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_compareSFTs +6 -0
  568. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_cosmicstring_pipe +525 -0
  569. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_create_time_correction_ephemeris +6 -0
  570. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_dumpSFT +6 -0
  571. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_effdist +6 -0
  572. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_exc_resp +6 -0
  573. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_fftw_wisdom +6 -0
  574. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_fftwf_wisdom +6 -0
  575. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_fits_header_getval +6 -0
  576. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_fits_header_list +6 -0
  577. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_fits_overview +6 -0
  578. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_fits_table_list +6 -0
  579. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_fr_ninja +6 -0
  580. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_frextr +6 -0
  581. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_frinfo +6 -0
  582. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_frjoin +6 -0
  583. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_frread +6 -0
  584. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_frview +6 -0
  585. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_gwf2xml +6 -0
  586. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_heterodyne_pulsar +6 -0
  587. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_inspawgfile +6 -0
  588. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_inspfrinj +6 -0
  589. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_inspinj +6 -0
  590. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_inspiralDistance +6 -0
  591. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_knope +6 -0
  592. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_knope_automation_script +6 -0
  593. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_knope_collate_results +6 -0
  594. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_knope_result_page +6 -0
  595. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_makeblindinj +6 -0
  596. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_makeblindinj_himass +6 -0
  597. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_ninja +6 -0
  598. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_path2cache +6 -0
  599. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_power +6 -0
  600. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_power_likelihood_pipe +219 -0
  601. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_power_pipe +417 -0
  602. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_pulsar_crosscorr_v2 +6 -0
  603. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_pulsar_frequency_evolution +6 -0
  604. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_pulsar_parameter_estimation_nested +6 -0
  605. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_random_bank +6 -0
  606. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_randombank +6 -0
  607. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_run_pulsar_crosscorr_v2 +6 -0
  608. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_searchsum2cache +6 -0
  609. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_spec_avg +6 -0
  610. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_spec_avg_long +6 -0
  611. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_spec_coherence +6 -0
  612. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_spininj +6 -0
  613. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_splitSFTs +6 -0
  614. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_splitbank +6 -0
  615. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_ssbtodetector +6 -0
  616. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_string_apply_vetoes +171 -0
  617. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_string_calc_likelihood +172 -0
  618. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_string_contour_plotter +141 -0
  619. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_string_contour_plotter_largeloops +133 -0
  620. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_string_cs_gamma +110 -0
  621. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_string_cs_gamma_largeloops +119 -0
  622. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_string_final +1064 -0
  623. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_string_meas_likelihood +264 -0
  624. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_string_plot_binj +543 -0
  625. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_string_plot_likelihood +380 -0
  626. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_synthesizeBstatMC +6 -0
  627. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_synthesizeLVStats +6 -0
  628. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_synthesizeTransientStats +6 -0
  629. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_tconvert +6 -0
  630. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_tmpltbank +6 -0
  631. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_version +6 -0
  632. lalsuite-7.26.2.dev20251210.data/scripts/lalapps_xtefitstoframe +6 -0
  633. lalsuite-7.26.2.dev20251210.data/scripts/lalburst_cluster +156 -0
  634. lalsuite-7.26.2.dev20251210.data/scripts/lalburst_coinc +224 -0
  635. lalsuite-7.26.2.dev20251210.data/scripts/lalburst_cut +425 -0
  636. lalsuite-7.26.2.dev20251210.data/scripts/lalburst_gen_timeslides +254 -0
  637. lalsuite-7.26.2.dev20251210.data/scripts/lalburst_inj_pic +254 -0
  638. lalsuite-7.26.2.dev20251210.data/scripts/lalburst_injfind +170 -0
  639. lalsuite-7.26.2.dev20251210.data/scripts/lalburst_plot_tisi +165 -0
  640. lalsuite-7.26.2.dev20251210.data/scripts/lalburst_power_calc_likelihood +182 -0
  641. lalsuite-7.26.2.dev20251210.data/scripts/lalburst_power_final +1369 -0
  642. lalsuite-7.26.2.dev20251210.data/scripts/lalburst_power_meas_likelihood +206 -0
  643. lalsuite-7.26.2.dev20251210.data/scripts/lalburst_power_plot_binj +934 -0
  644. lalsuite-7.26.2.dev20251210.data/scripts/lalburst_power_plot_binjtf +302 -0
  645. lalsuite-7.26.2.dev20251210.data/scripts/lalburst_version +6 -0
  646. lalsuite-7.26.2.dev20251210.data/scripts/lalfr-cat +6 -0
  647. lalsuite-7.26.2.dev20251210.data/scripts/lalfr-cksum +6 -0
  648. lalsuite-7.26.2.dev20251210.data/scripts/lalfr-cut +6 -0
  649. lalsuite-7.26.2.dev20251210.data/scripts/lalfr-dump +6 -0
  650. lalsuite-7.26.2.dev20251210.data/scripts/lalfr-fmt +6 -0
  651. lalsuite-7.26.2.dev20251210.data/scripts/lalfr-paste +6 -0
  652. lalsuite-7.26.2.dev20251210.data/scripts/lalfr-print +6 -0
  653. lalsuite-7.26.2.dev20251210.data/scripts/lalfr-split +6 -0
  654. lalsuite-7.26.2.dev20251210.data/scripts/lalfr-stat +6 -0
  655. lalsuite-7.26.2.dev20251210.data/scripts/lalfr-stream +6 -0
  656. lalsuite-7.26.2.dev20251210.data/scripts/lalfr-vis +6 -0
  657. lalsuite-7.26.2.dev20251210.data/scripts/lalframe_version +6 -0
  658. lalsuite-7.26.2.dev20251210.data/scripts/lalinference_bench +6 -0
  659. lalsuite-7.26.2.dev20251210.data/scripts/lalinference_burst +6 -0
  660. lalsuite-7.26.2.dev20251210.data/scripts/lalinference_burst_pp_pipe +220 -0
  661. lalsuite-7.26.2.dev20251210.data/scripts/lalinference_coherence_test +139 -0
  662. lalsuite-7.26.2.dev20251210.data/scripts/lalinference_compute_roq_weights +404 -0
  663. lalsuite-7.26.2.dev20251210.data/scripts/lalinference_cpnest +58 -0
  664. lalsuite-7.26.2.dev20251210.data/scripts/lalinference_datadump +6 -0
  665. lalsuite-7.26.2.dev20251210.data/scripts/lalinference_evolve_spins_and_append_samples +202 -0
  666. lalsuite-7.26.2.dev20251210.data/scripts/lalinference_injectedlike +6 -0
  667. lalsuite-7.26.2.dev20251210.data/scripts/lalinference_merge_posteriors +57 -0
  668. lalsuite-7.26.2.dev20251210.data/scripts/lalinference_mpi_wrapper +6 -0
  669. lalsuite-7.26.2.dev20251210.data/scripts/lalinference_multi_pipe +144 -0
  670. lalsuite-7.26.2.dev20251210.data/scripts/lalinference_nest +6 -0
  671. lalsuite-7.26.2.dev20251210.data/scripts/lalinference_nest2pos +286 -0
  672. lalsuite-7.26.2.dev20251210.data/scripts/lalinference_pipe +512 -0
  673. lalsuite-7.26.2.dev20251210.data/scripts/lalinference_pp_pipe +229 -0
  674. lalsuite-7.26.2.dev20251210.data/scripts/lalinference_review_test +362 -0
  675. lalsuite-7.26.2.dev20251210.data/scripts/lalinference_version +6 -0
  676. lalsuite-7.26.2.dev20251210.data/scripts/lalinspiral_injfind +206 -0
  677. lalsuite-7.26.2.dev20251210.data/scripts/lalinspiral_thinca +240 -0
  678. lalsuite-7.26.2.dev20251210.data/scripts/lalinspiral_version +6 -0
  679. lalsuite-7.26.2.dev20251210.data/scripts/lalmetaio_version +6 -0
  680. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_ComputeAntennaPattern +6 -0
  681. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_ComputeFstatBenchmark +6 -0
  682. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_ComputeFstatLatticeCount +6 -0
  683. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_ComputeFstatMCUpperLimit +6 -0
  684. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_ComputeFstatistic_v2 +6 -0
  685. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_ComputePSD +6 -0
  686. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_CopyPublicSFTs +216 -0
  687. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_DriveHoughMulti +6 -0
  688. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_FstatMetric_v2 +6 -0
  689. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_HierarchSearchGCT +6 -0
  690. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_HierarchicalSearch +6 -0
  691. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_MakeSFTDAG +1142 -0
  692. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_MakeSFTs +6 -0
  693. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_Makefakedata_v4 +6 -0
  694. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_Makefakedata_v5 +6 -0
  695. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_MoveSFTs +208 -0
  696. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_PiecewiseSearch +963 -0
  697. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_PredictFstat +6 -0
  698. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_PrintDetectorState +6 -0
  699. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_SFTclean +6 -0
  700. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_SFTvalidate +6 -0
  701. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_Weave +6 -0
  702. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_WeaveCompare +6 -0
  703. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_WeaveConcat +6 -0
  704. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_WeaveSetup +6 -0
  705. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_WriteSFTsfromSFDBs +6 -0
  706. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_compareFstats +6 -0
  707. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_compareSFTs +6 -0
  708. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_create_time_correction_ephemeris +6 -0
  709. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_crosscorr_v2 +6 -0
  710. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_dumpSFT +6 -0
  711. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_fits_header_getval +6 -0
  712. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_fits_header_list +6 -0
  713. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_fits_overview +6 -0
  714. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_fits_table_list +6 -0
  715. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_frequency_evolution +6 -0
  716. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_heterodyne +6 -0
  717. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_knope +145 -0
  718. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_knope_automation_script +731 -0
  719. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_knope_collate_results +675 -0
  720. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_knope_result_page +2977 -0
  721. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_parameter_estimation_nested +6 -0
  722. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_spec_avg +6 -0
  723. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_spec_avg_long +6 -0
  724. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_spec_coherence +6 -0
  725. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_splitSFTs +6 -0
  726. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_ssbtodetector +6 -0
  727. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_synthesizeBstatMC +6 -0
  728. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_synthesizeLVStats +6 -0
  729. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_synthesizeTransientStats +6 -0
  730. lalsuite-7.26.2.dev20251210.data/scripts/lalpulsar_version +6 -0
  731. lalsuite-7.26.2.dev20251210.data/scripts/lalsim-bh-qnmode +6 -0
  732. lalsuite-7.26.2.dev20251210.data/scripts/lalsim-bh-ringdown +6 -0
  733. lalsuite-7.26.2.dev20251210.data/scripts/lalsim-bh-sphwf +6 -0
  734. lalsuite-7.26.2.dev20251210.data/scripts/lalsim-burst +6 -0
  735. lalsuite-7.26.2.dev20251210.data/scripts/lalsim-detector-noise +6 -0
  736. lalsuite-7.26.2.dev20251210.data/scripts/lalsim-detector-strain +6 -0
  737. lalsuite-7.26.2.dev20251210.data/scripts/lalsim-inject +6 -0
  738. lalsuite-7.26.2.dev20251210.data/scripts/lalsim-inspiral +6 -0
  739. lalsuite-7.26.2.dev20251210.data/scripts/lalsim-ns-eos-table +6 -0
  740. lalsuite-7.26.2.dev20251210.data/scripts/lalsim-ns-mass-radius +6 -0
  741. lalsuite-7.26.2.dev20251210.data/scripts/lalsim-ns-params +6 -0
  742. lalsuite-7.26.2.dev20251210.data/scripts/lalsim-sgwb +6 -0
  743. lalsuite-7.26.2.dev20251210.data/scripts/lalsim-unicorn +6 -0
  744. lalsuite-7.26.2.dev20251210.data/scripts/lalsimulation_version +6 -0
  745. lalsuite-7.26.2.dev20251210.dist-info/METADATA +90 -0
  746. lalsuite-7.26.2.dev20251210.dist-info/RECORD +749 -0
  747. lalsuite-7.26.2.dev20251210.dist-info/WHEEL +6 -0
  748. lalsuite-7.26.2.dev20251210.dist-info/licenses/COPYING +339 -0
  749. lalsuite-7.26.2.dev20251210.dist-info/top_level.txt +9 -0
@@ -0,0 +1,833 @@
1
+ # Copyright (C) 2019--2023 Benjamin Grace
2
+ #
3
+ # This program is free software; you can redistribute it and/or modify it
4
+ # under the terms of the GNU General Public License as published by the
5
+ # Free Software Foundation; either version 2 of the License, or (at your
6
+ # option) any later version.
7
+ #
8
+ # This program is distributed in the hope that it will be useful, but
9
+ # WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
11
+ # Public License for more details.
12
+ #
13
+ # You should have received a copy of the GNU General Public License along
14
+ # with this program; if not, write to the Free Software Foundation, Inc.,
15
+ # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16
+
17
+ ## \file
18
+ ## \ingroup lalpulsar_python_piecewise_model
19
+ """
20
+ Construct a list of knots which gives the maximum allowed spacing between
21
+ them while maintaining the desired accuracy.
22
+ """
23
+
24
+ import ast
25
+ import logging
26
+ import os.path
27
+
28
+ import numpy as np
29
+
30
+ from . import basis_functions as bf
31
+ from . import mols_for_gte as mols
32
+ from . import errors
33
+ from . import semicoherent_metric_methods as scmm
34
+
35
+ knotarchivefile = None
36
+
37
+
38
+ def setknotarchivepath(path):
39
+ global knotarchivefile
40
+ knotarchivefile = os.path.join(path, "KnotArchive")
41
+
42
+
43
+ # In this module, we use the function, max(|f_GTE(t) - F_PP(t)|) - Delta f_i0,
44
+ # to choose the spacing of our knots. The Delta f_i0 is the spacing between the frequency parameter given by the
45
+ # metric, it is equal to sqrt(mu/g_ii). Ideally, we wish for the maximum difference between our piecewise model and
46
+ # the GTE to be minimised and smaller than the spacing of our frequency parameters. When finding the maximum
47
+ # difference between the GTE and our model, max(|f_GTE(t) - F_PP(t)|), we maximise over the value t which falls into
48
+ # some interval [p_i, p_i+1]. If we make interval sizes small the difference will go to zero, however this would
49
+ # dramatically increase the number of intervals we need, and hence most likely increase the template bank size.
50
+ # However, if we make them too large the error becomes greater than our parameter spacing. As such, we wish to
51
+ # find the values [p_i, p_i+1] such that the given function above is zero. This is the longest we can make a segment
52
+ # before the error becomes greater than our parameter spacing. We start by assuming p_0 = 0 and then inductively
53
+ # calculate all of the following knots.
54
+
55
+ # Working in this module it is important that the knots function, p(i, ints, dur) in the basis_functions file is
56
+ # written correctly. See that file for how it should be defined when using this file. As well as this, this module
57
+ # requires methods written in the mols_for_gte, basis_functions and semicoherent_metric_methods files, all of which rely
58
+ # on the p(i, ints, dur) method. This can be a problem, as for the methods in this module to work, p(i, ints,
59
+ # dur) should simply extract an element from a 'knots list' that we build inductively in this module. Hence,
60
+ # using the knots generated in this module can at times be tricky. The recommendation for using knots built by this
61
+ # file is to either run this file for given model parameter and then use the output as the knots by copying and
62
+ # pasting the output into the basis_functions file to be used as all knots, or in the module you wish to run, run
63
+ # the GlobalVariableDeclarations module which initialises our knot list (by importing this module and using the
64
+ # methods below) and then import the GlobalVariableDeclarations module into the module you wish to run. As an
65
+ # example, if you want to run module A which requires knots, import the GlobalVariableDeclarations module into A,
66
+ # making sure that in the GlobalVariableDecalartions module the knots list is initialised with one of the methods
67
+ # here.
68
+ #
69
+ # Knots generated in this module are saved to the KnotArchive text file.
70
+
71
+ # Another word of caution, some methods in this module are outdated, being replaced by more efficient methods later
72
+ # in the module. These methods typically run much slower than those which they are replaced by. Further more, many of
73
+ # these methods do not make use of the KnotArchive file which stores all generated values of knots. I have tried to
74
+ # note these outdated methods were appropriate and add an explanation to why they have been rewritten further in the
75
+ # module. They are kept in this module however for completeness and a reference in case they are needed in the
76
+ # future
77
+
78
+ # When using this module be sure to check that the method p and the knotslist parameter in the basis_functions module
79
+ # are defined correctly or are being properly updated.
80
+
81
+ # List that we append the maximum parameter spacing for each segment we build knots for in this module. Kept only for
82
+ # inspection, not used in any methods except for printing.
83
+ parameterspacings = []
84
+
85
+ # Returns the parameter spacing associated with the zeroth derivative at the lth knot. Note, if the knotslist variable
86
+ # in the basis_functions is never updated, then this method will only work for l = 0
87
+ def metricelementspacingonl(l, coeffs, mu):
88
+
89
+ metvalue = scmm.metricelementonl(l, l, l, 1, 1, 0, 0, coeffs)
90
+
91
+ stepsize = np.sqrt(mu / metvalue)
92
+
93
+ return stepsize
94
+
95
+
96
+ # This method is an outdated method, replaced later in this module. Chronologiclly this was replaced first by the
97
+ # knotatleff method and then finally by the knotatleffusinggivenknotlist method. No other methods in this module use
98
+ # this method.
99
+ #
100
+ # Calcualtes the time (and hence knot) at which the function, max(|f_GTE(t) - F_PP(t)| - Delta f_i0 is zero. This is
101
+ # achieved by sampling all times t between durmin and durmax and seeing if the appropriate value of that function is
102
+ # within a given tolerance of zero. If not, we reuse this method with an extended duration of durmax to 2 * durmax. This
103
+ # has the obvious flaw that if the correct knot value is below durmin, then this method will not be able to find it.
104
+ # Because this method does not make use of faster algorithms, such as the bisection method which we use later on, it
105
+ # runs very slowly.
106
+ def knotatl(l, s, durmin, durmax, steps, f0, ngte, kgte, mu):
107
+ errorlists = []
108
+ paramspacinglist = []
109
+
110
+ durlist = np.linspace(durmin, durmax, steps)
111
+
112
+ for dur in durlist:
113
+ basiscoeffs = bf.allcoeffs(s)
114
+ modelparams = mols.solsbyint(mols.sols(basiscoeffs, 20, s, f0, ngte, kgte), s)
115
+ paramspacinglist.append(metricelementspacingonl(l, basiscoeffs, mu))
116
+
117
+ suberrorlist = []
118
+
119
+ for t in np.linspace(durmin, dur, steps):
120
+ suberrorlist.append(
121
+ mols.errorvalueatpoint(t, basiscoeffs, modelparams, f0, ngte, kgte)
122
+ )
123
+ errorlists.append(suberrorlist)
124
+
125
+ for i, dur in enumerate(durlist):
126
+
127
+ if np.max(errorlists[i]) - paramspacinglist[i] > 0:
128
+ return dur
129
+
130
+ logging.debug("No root found for specified duration, increasing duration span")
131
+ return knotatl(l, s, durmax, 2 * durmax, steps, f0, ngte, kgte)
132
+
133
+
134
+ # This method is not used in our finalised knot generating method. It is however used in the buildcompleteknotlist
135
+ # method. It was kept because the buildcompelteknotlist method (and this method) do not read or write to any files.
136
+ # As such, if we want to do some experimentation with how we build our knots but not interfere and risk altering our
137
+ # library of knots we can use these methods instead.
138
+ #
139
+ #
140
+ # The same as the knotatl method but now done more efficiently by using a bisection method. Instead of sampling all
141
+ # possible times/knots, we instead sample two possible durations, negdur and posdur. These knots should be chosen
142
+ # such that negdur results in the function, max(|f_GTE(t) - F_PP(t)| - Delta f_i0, being negative and posdur such
143
+ # that it is positive. We then select a time inbetween these two possible choices and calculated that function value.
144
+ # If the value is within a given tolerance of zero we return that time as the new knot value. If not, we recursively use
145
+ # this method by replacing negdur or posdur with this 'inbetween time' in accordance with the bisection method until we
146
+ # find a time that is close enough to zero for us to be confident we can use that as the new knot value. This method
147
+ # has a maximum recursion depth of 10.
148
+ #
149
+ # This method is somewhat sensitive to the initial choices of negdur and posdur. The checkfirst parameter is used
150
+ # such that negdur and posdur have appropriate values. We must check that negdur and posdur result in negative and
151
+ # positive values of the diff function respectively. In certain cases the ill-conditionedness of the basis functions
152
+ # we calculate also influences our results. We check for this too in certain cases.
153
+ #
154
+ # The checkfirst value should always be used when knotatleff is first called and set to True. Once this check has
155
+ # initially been cleared we do not need to check the negdur and posdur values again.
156
+ #
157
+ # In this method we refer to a boolean value fullMOLS, it is defined below.
158
+ def knotatleff(
159
+ l,
160
+ s,
161
+ negdur,
162
+ posdur,
163
+ steps,
164
+ f0,
165
+ ngte,
166
+ kgte,
167
+ mu,
168
+ checkfirst=False,
169
+ recursiondepth=0,
170
+ ps=None,
171
+ negcounter=0,
172
+ ):
173
+ # logging.debug("Current recursion depth: " + str(counter))
174
+
175
+ knotnuma = len(bf.knotslist) - 1
176
+ knotnumb = knotnuma + 1
177
+
178
+ # As negdur is a candidate knot, it should be greater than the last knot we currently have in bf.knotslist.
179
+ if bf.knotslist[l] >= negdur:
180
+ logging.debug(
181
+ "negdur parameter not within appropriate range, adjusting with larger value"
182
+ )
183
+ logging.debug(
184
+ "negdur = " + str(negdur) + ", previous knot = " + str(bf.knotslist[l])
185
+ )
186
+ return knotatleff(
187
+ l, s, bf.knotslist[l] + 1, posdur, steps, f0, ngte, kgte, mu, True, ps=ps
188
+ )
189
+
190
+ if checkfirst:
191
+ bf.knotslist.append(negdur)
192
+ basiscoeffsneg = bf.allcoeffs(s)
193
+
194
+ # Can't remember why but this sometimes throws a TypeError. I suspect it probably happens when negdur is too
195
+ # large and the sample points in the sampling_methods module are chosen poorly. Corrected for by using a
196
+ # smaller negdur value. Don't ever remember seeing this error for the posdur parameter though
197
+ try:
198
+ # logging.debug("Prev knot: " + str(ps))
199
+ if fullMOLS:
200
+ modelparamsneg = mols.solsbyint(
201
+ mols.sols(basiscoeffsneg, 20, s, f0, ngte, kgte), s
202
+ )
203
+ else:
204
+ modelparamsneg = mols.solsbyint(
205
+ mols.solsbetweenknots(
206
+ knotnuma, knotnumb, basiscoeffsneg, 20, s, f0, ngte, kgte
207
+ ),
208
+ s,
209
+ )
210
+ except TypeError as error:
211
+ logging.debug(error)
212
+ logging.debug("Reducing negdur duration")
213
+ diff = negdur - ps
214
+ bf.knotslist.pop()
215
+ return knotatleff(
216
+ l, s, ps + diff / 10, posdur, steps, f0, ngte, kgte, mu, True, 0, ps=ps
217
+ )
218
+
219
+ # Calculating the diff function value for negdur and posdur
220
+ paramspacingneg = metricelementspacingonl(l, basiscoeffsneg, mu)
221
+
222
+ errorlistneg = []
223
+
224
+ for t in np.linspace(bf.knotslist[-1], negdur, steps):
225
+ errorlistneg.append(
226
+ mols.errorvalueatpoint(
227
+ t, basiscoeffsneg, modelparamsneg, f0, ngte, kgte
228
+ )
229
+ )
230
+
231
+ bf.knotslist.pop()
232
+
233
+ bf.knotslist.append(posdur)
234
+ basiscoeffspos = bf.allcoeffs(s)
235
+ if fullMOLS:
236
+ modelparamspos = mols.solsbyint(
237
+ mols.sols(basiscoeffspos, 20, s, f0, ngte, kgte), s
238
+ )
239
+ else:
240
+ modelparamspos = mols.solsbyint(
241
+ mols.solsbetweenknots(
242
+ knotnuma, knotnumb, basiscoeffspos, 20, s, f0, ngte, kgte
243
+ ),
244
+ s,
245
+ )
246
+
247
+ paramspacingpos = metricelementspacingonl(l, basiscoeffspos, mu)
248
+
249
+ errorlistpos = []
250
+
251
+ for t in np.linspace(bf.knotslist[-1], posdur, steps):
252
+ errorlistpos.append(
253
+ mols.errorvalueatpoint(
254
+ t, basiscoeffspos, modelparamspos, f0, ngte, kgte
255
+ )
256
+ )
257
+
258
+ bf.knotslist.pop()
259
+
260
+ maxerrorneg = np.max(errorlistneg)
261
+ maxerrorpos = np.max(errorlistpos)
262
+
263
+ logging.debug("Neg and pos durs: " + str([negdur, posdur]))
264
+ logging.debug("Max errors: " + str([maxerrorneg, maxerrorpos]))
265
+ logging.debug("Metric values: " + str([paramspacingneg, paramspacingpos]))
266
+ logging.debug()
267
+
268
+ diffvalneg = maxerrorneg - paramspacingneg
269
+ diffvalpos = maxerrorpos - paramspacingpos
270
+
271
+ # Checking if posdur and negdur have the appropriate signs for the bisection method and readjusting if not
272
+ if not (diffvalneg < 0 and diffvalpos > 0):
273
+ # logging.debug("Diff vals are: " + str([diffvalneg, diffvalpos]))
274
+ if diffvalpos < 0:
275
+ # logging.debug("Negative pos val")
276
+ diff = posdur - ps
277
+ return knotatleff(
278
+ l, s, negdur, ps + 2 * diff, steps, f0, ngte, kgte, mu, True, ps=ps
279
+ )
280
+ if diffvalneg > 0:
281
+ # logging.debug("Positive neg val")
282
+ diff = negdur - ps
283
+
284
+ return knotatleff(
285
+ l,
286
+ s,
287
+ ps + diff / 10,
288
+ posdur,
289
+ steps,
290
+ f0,
291
+ ngte,
292
+ kgte,
293
+ mu,
294
+ True,
295
+ ps=ps,
296
+ negcounter=negcounter + 1,
297
+ )
298
+
299
+ # Calculating the diff function value for the time between negdur and posdur
300
+ halfdur = (posdur + negdur) / 2
301
+ bf.knotslist.append(halfdur)
302
+ basiscoeffs = bf.allcoeffs(s)
303
+ if fullMOLS:
304
+ modelparams = mols.solsbyint(mols.sols(basiscoeffs, 20, s, f0, ngte, kgte), s)
305
+ else:
306
+ modelparams = mols.solsbyint(
307
+ mols.solsbetweenknots(
308
+ knotnuma, knotnumb, basiscoeffs, 20, s, f0, ngte, kgte
309
+ ),
310
+ s,
311
+ )
312
+ paramspacing = metricelementspacingonl(l, basiscoeffs, mu)
313
+
314
+ errorlist = []
315
+
316
+ for t in np.linspace(bf.knotslist[-1], halfdur, steps):
317
+ errorlist.append(
318
+ mols.errorvalueatpoint(t, basiscoeffs, modelparams, f0, ngte, kgte)
319
+ )
320
+
321
+ bf.knotslist.pop()
322
+
323
+ maxerror = np.max(errorlist)
324
+
325
+ diffval = maxerror - paramspacing
326
+
327
+ # Either return halfdur as our new knot value or recursing
328
+ if -(2**-10) < diffval <= 0:
329
+ parameterspacings.append(paramspacing)
330
+ return halfdur
331
+ elif recursiondepth > 10:
332
+ logging.debug(
333
+ "Recursion depth of 10 reached, terminating and returning current knot value"
334
+ )
335
+ logging.debug("Function value for this knot is " + str(diffval))
336
+ parameterspacings.append(paramspacing)
337
+ return halfdur
338
+ else:
339
+ if diffval < 0:
340
+ return knotatleff(
341
+ l,
342
+ s,
343
+ halfdur,
344
+ posdur,
345
+ steps,
346
+ f0,
347
+ ngte,
348
+ kgte,
349
+ mu,
350
+ False,
351
+ recursiondepth + 1,
352
+ )
353
+ elif diffval > 0:
354
+ return knotatleff(
355
+ l,
356
+ s,
357
+ negdur,
358
+ halfdur,
359
+ steps,
360
+ f0,
361
+ ngte,
362
+ kgte,
363
+ mu,
364
+ False,
365
+ recursiondepth + 1,
366
+ )
367
+
368
+
369
+ # Same as the knotatleff method but instead of refering to the bf.knotslist parameter we instead include this list of
370
+ # previous knots as the parameter knotslist. The motivation behind this is that previous methods used to generate
371
+ # knots had to start from an initial knot p_0 = 0. This was inconvenient if we instead wanted to calculate p_100 and
372
+ # had already calculated p_99. Instead we carry all generated knots as a parameter in this function. We of course do
373
+ # not need to carry the entire knot list for the model specifications, only the last knot in that list,
374
+ # but we do this anyway.
375
+ #
376
+ # The logic in this method is identical to that of the knotatleff method with only the addition of the knotslist
377
+ # parameter. Read that method's description for more details about the process of this method. This method has
378
+ # a maximum recursion depth of 10.
379
+ #
380
+ # The fullMOLS parameter allows us to decide when considering the worse case scenario whether we want to consider the
381
+ # accuracy of the entire MOLS solution or just the MOLS solution which belongs to the segment we are currently trying
382
+ # to determine the knot for. Typically, if we consider the MOLS solution for the full signal, the knots are spread
383
+ # further apart.
384
+ fullMOLS = True
385
+
386
+
387
+ def knotatleffusinggivenknotlist(
388
+ l,
389
+ s,
390
+ negdur,
391
+ posdur,
392
+ steps,
393
+ f0,
394
+ ngte,
395
+ kgte,
396
+ knotslist,
397
+ mu,
398
+ checkfirst=False,
399
+ counter=0,
400
+ ps=None,
401
+ negcounter=0,
402
+ prevdiffvalneg=np.inf,
403
+ ):
404
+ # logging.debug("Current recursion depth: " + str(counter))
405
+
406
+ knotnuma = len(knotslist) - 1
407
+ knotnumb = knotnuma + 1
408
+
409
+ # As negdur is a candidate knot, it should be greater than the last knot we currently have in bf.knotslist.
410
+ bf.knotslist = knotslist
411
+ if knotslist[l] >= negdur:
412
+ logging.debug(
413
+ "negdur parameter not within appropriate range, adjusting with larger value"
414
+ )
415
+ logging.debug(
416
+ "negdur = " + str(negdur) + ", previous knot = " + str(knotslist[l])
417
+ )
418
+ return knotatleffusinggivenknotlist(
419
+ l,
420
+ s,
421
+ knotslist[l] + 1,
422
+ posdur,
423
+ steps,
424
+ f0,
425
+ ngte,
426
+ kgte,
427
+ knotslist,
428
+ mu,
429
+ True,
430
+ ps=ps,
431
+ )
432
+
433
+ if checkfirst:
434
+ bf.knotslist.append(negdur)
435
+ basiscoeffsneg = bf.allcoeffs(s)
436
+
437
+ # Can't remember why but this sometimes throws a TypeError. I suspect it probably happens when negdur is too
438
+ # large and the sample points in the sampling_methods module are chosen poorly. Corrected for by using a
439
+ # smaller negdur value. Don't ever remember seeing this error for the posdur parameter though
440
+ try:
441
+ if fullMOLS:
442
+ modelparamsneg = mols.solsbyint(
443
+ mols.sols(basiscoeffsneg, 20, s, f0, ngte, kgte), s
444
+ )
445
+ else:
446
+ modelparamsneg = mols.solsbyint(
447
+ mols.solsbetweenknots(
448
+ knotnuma, knotnumb, basiscoeffsneg, 20, s, f0, ngte, kgte
449
+ ),
450
+ s,
451
+ )
452
+ except TypeError as error:
453
+ logging.debug(error)
454
+ logging.debug("Reducing negdur duration")
455
+ bf.knotslist.pop()
456
+ diff = negdur - ps
457
+ return knotatleffusinggivenknotlist(
458
+ l,
459
+ s,
460
+ ps + diff / 10,
461
+ posdur,
462
+ steps,
463
+ f0,
464
+ ngte,
465
+ kgte,
466
+ knotslist,
467
+ mu,
468
+ True,
469
+ 0,
470
+ ps=ps,
471
+ )
472
+
473
+ # Calculating the diff function value for negdur and posdur
474
+ paramspacingneg = metricelementspacingonl(l, basiscoeffsneg, mu)
475
+
476
+ errorlistneg = []
477
+
478
+ for t in np.linspace(knotslist[-1], negdur, steps):
479
+ errorlistneg.append(
480
+ mols.errorvalueatpoint(
481
+ t, basiscoeffsneg, modelparamsneg, f0, ngte, kgte
482
+ )
483
+ )
484
+
485
+ bf.knotslist.pop()
486
+
487
+ bf.knotslist.append(posdur)
488
+ basiscoeffspos = bf.allcoeffs(s)
489
+
490
+ if fullMOLS:
491
+ modelparamspos = mols.solsbyint(
492
+ mols.sols(basiscoeffspos, 20, s, f0, ngte, kgte), s
493
+ )
494
+ else:
495
+ modelparamspos = mols.solsbyint(
496
+ mols.solsbetweenknots(
497
+ knotnuma, knotnumb, basiscoeffspos, 20, s, f0, ngte, kgte
498
+ ),
499
+ s,
500
+ )
501
+
502
+ paramspacingpos = metricelementspacingonl(l, basiscoeffspos, mu)
503
+
504
+ errorlistpos = []
505
+
506
+ for t in np.linspace(knotslist[-1], posdur, steps):
507
+ errorlistpos.append(
508
+ mols.errorvalueatpoint(
509
+ t, basiscoeffspos, modelparamspos, f0, ngte, kgte
510
+ )
511
+ )
512
+
513
+ bf.knotslist.pop()
514
+
515
+ maxerrorneg = np.max(errorlistneg)
516
+ maxerrorpos = np.max(errorlistpos)
517
+
518
+ diffvalneg = maxerrorneg - paramspacingneg
519
+ diffvalpos = maxerrorpos - paramspacingpos
520
+
521
+ # Checking if posdur and negdur have the appropriate signs for the bisection method and readjusting if not
522
+ if not (diffvalneg < 0 and diffvalpos > 0):
523
+ if diffvalpos < 0:
524
+ diff = posdur - ps
525
+ return knotatleffusinggivenknotlist(
526
+ l,
527
+ s,
528
+ negdur,
529
+ ps + 2 * diff,
530
+ steps,
531
+ f0,
532
+ ngte,
533
+ kgte,
534
+ knotslist,
535
+ mu,
536
+ True,
537
+ ps=ps,
538
+ prevdiffvalneg=diffvalneg,
539
+ )
540
+ if diffvalneg > 0:
541
+ diff = negdur - ps
542
+
543
+ if diffvalneg > prevdiffvalneg:
544
+ return knotatleffusinggivenknotlist(
545
+ l,
546
+ s,
547
+ ps + 2 * diff,
548
+ posdur,
549
+ steps,
550
+ f0,
551
+ ngte,
552
+ kgte,
553
+ knotslist,
554
+ mu,
555
+ True,
556
+ ps=ps,
557
+ negcounter=negcounter + 1,
558
+ prevdiffvalneg=diffvalneg,
559
+ )
560
+
561
+ # if negcounter > 5 or (diff/10) < 1:
562
+ # logging.debug("Too many negdur reductions")
563
+ # logging.debug()
564
+ # raise errors.TooManyNegdurReductions
565
+
566
+ return knotatleffusinggivenknotlist(
567
+ l,
568
+ s,
569
+ ps + diff / 10,
570
+ posdur,
571
+ steps,
572
+ f0,
573
+ ngte,
574
+ kgte,
575
+ knotslist,
576
+ mu,
577
+ True,
578
+ ps=ps,
579
+ negcounter=negcounter + 1,
580
+ prevdiffvalneg=diffvalneg,
581
+ )
582
+
583
+ # Calculating the diff function value for the time between negdur and posdur
584
+ halfdur = (posdur + negdur) / 2
585
+ bf.knotslist.append(halfdur)
586
+ basiscoeffs = bf.allcoeffs(s)
587
+
588
+ if fullMOLS:
589
+ modelparams = mols.solsbyint(mols.sols(basiscoeffs, 20, s, f0, ngte, kgte), s)
590
+ else:
591
+ modelparams = mols.solsbyint(
592
+ mols.solsbetweenknots(
593
+ knotnuma, knotnumb, basiscoeffs, 20, s, f0, ngte, kgte
594
+ ),
595
+ s,
596
+ )
597
+
598
+ paramspacing = metricelementspacingonl(l, basiscoeffs, mu)
599
+
600
+ errorlist = []
601
+
602
+ for t in np.linspace(knotslist[-1], halfdur, steps):
603
+ errorlist.append(
604
+ mols.errorvalueatpoint(t, basiscoeffs, modelparams, f0, ngte, kgte)
605
+ )
606
+ bf.knotslist.pop()
607
+ maxerror = np.max(errorlist)
608
+
609
+ diffval = maxerror - paramspacing
610
+
611
+ # Either return halfdur as our new knot value or recurse
612
+ if -(2**-10) < diffval <= 0:
613
+ parameterspacings.append(paramspacing)
614
+ return halfdur
615
+ elif counter > 10:
616
+ logging.debug(
617
+ "Recursion depth of 10 reached, terminating and returning current knot value"
618
+ )
619
+ logging.debug("Function value for this knot is " + str(diffval))
620
+ parameterspacings.append(paramspacing)
621
+ return halfdur
622
+ else:
623
+ if diffval < 0:
624
+ return knotatleffusinggivenknotlist(
625
+ l,
626
+ s,
627
+ halfdur,
628
+ posdur,
629
+ steps,
630
+ f0,
631
+ ngte,
632
+ kgte,
633
+ knotslist,
634
+ mu,
635
+ counter=counter + 1,
636
+ )
637
+ elif diffval > 0:
638
+ return knotatleffusinggivenknotlist(
639
+ l,
640
+ s,
641
+ negdur,
642
+ halfdur,
643
+ steps,
644
+ f0,
645
+ ngte,
646
+ kgte,
647
+ knotslist,
648
+ mu,
649
+ counter=counter + 1,
650
+ )
651
+
652
+
653
+ # knotlist = [0, 2.107421875, 4.18438720703125]
654
+ # ints = len(knotlist)
655
+ # logging.debug(knotatleffusinggivenknotlist(ints - 1, 1, ints, 1, 10, 30, knotlist, checkfirst=True, ps=knotlist[-1]))
656
+
657
+ # Calculates and adds the next knot to the KnotArchive file with the appropriate specifications by using the
658
+ # knotatleffusinggivenknotlist method
659
+ def addnextknottofile(f0, nmax, kgte, s, mu, steps=30):
660
+ spindownspecification = [f0, nmax, kgte, s, mu, fullMOLS]
661
+
662
+ knotarchive = open(knotarchivefile, "r")
663
+ alllines = knotarchive.readlines()
664
+ knotarchive.close()
665
+
666
+ foundspecifications = False
667
+ newknot = 0
668
+
669
+ for i, line in enumerate(alllines):
670
+ thisline = ast.literal_eval(line)
671
+
672
+ if thisline[0] == spindownspecification:
673
+ foundspecifications = True
674
+
675
+ knotslist = thisline[1]
676
+ ps = thisline[1][-1]
677
+ ints = len(knotslist)
678
+
679
+ if ps == 0:
680
+ negdurincrement = 1.1
681
+ while True:
682
+ try:
683
+ newknot = knotatleffusinggivenknotlist(
684
+ ints - 1,
685
+ s,
686
+ negdurincrement,
687
+ 10 * negdurincrement,
688
+ steps,
689
+ f0,
690
+ nmax,
691
+ kgte,
692
+ knotslist,
693
+ mu,
694
+ True,
695
+ ps=ps,
696
+ )
697
+
698
+ break
699
+ except errors.TooManyNegdurReductions:
700
+ negdurincrement *= 10
701
+ else:
702
+ negdurincrement = 0
703
+ while True:
704
+ ordmag = np.floor(np.log10(ps)) + negdurincrement
705
+ try:
706
+ newknot = knotatleffusinggivenknotlist(
707
+ ints - 1,
708
+ s,
709
+ ps + 10**ordmag,
710
+ ps + 10 ** (ordmag + 0.5),
711
+ steps,
712
+ f0,
713
+ nmax,
714
+ kgte,
715
+ knotslist,
716
+ mu,
717
+ True,
718
+ ps=ps,
719
+ )
720
+ break
721
+ except errors.TooManyNegdurReductions:
722
+ negdurincrement += 0.5
723
+ thisline[1].append(newknot)
724
+ updatedline = str(thisline) + "\n"
725
+ alllines[i] = updatedline
726
+ logging.info("Knotnum and knot val: " + str(ints) + ", " + str(newknot))
727
+ break
728
+
729
+ if foundspecifications:
730
+ knotarchive = open(knotarchivefile, "w")
731
+ knotarchive.writelines(alllines)
732
+ knotarchive.close()
733
+ else:
734
+ newline = [spindownspecification, [0]]
735
+
736
+ knotarchive = open(knotarchivefile, "a")
737
+ knotarchive.write(str(newline) + "\n")
738
+ knotarchive.close()
739
+
740
+ addnextknottofile(f0, nmax, kgte, s, mu, steps=steps)
741
+
742
+ return newknot
743
+
744
+
745
+ # Calculates and writes all knots up the knotnum th knot to the KnotArchive file. E.g. If we want to know the first 10
746
+ # knots for certain model specifications, if we run this method with knotnum = 10, if the KnotArchive file does not
747
+ # already have those 10 knot values, this method will calculate and add those knot values to that file until all knots
748
+ # up to the 10th knot are present
749
+ def addknottoknotnum(s, knotnum, f0, nmax, kgte, mu, steps=30):
750
+ spindownspecifications = [f0, nmax, kgte, s, mu, fullMOLS]
751
+
752
+ knotarchive = open(knotarchivefile, "r")
753
+ alllines = knotarchive.readlines()
754
+ knotarchive.close()
755
+
756
+ currentknotnum = 0
757
+
758
+ for i, line in enumerate(alllines):
759
+ thisline = ast.literal_eval(line)
760
+
761
+ if thisline[0] == spindownspecifications:
762
+ currentknotnum = len(thisline[1]) - 1
763
+ break
764
+
765
+ while currentknotnum <= knotnum:
766
+ addnextknottofile(f0, nmax, kgte, s, mu, steps=steps)
767
+ currentknotnum += 1
768
+
769
+
770
+ # Ad the above method but now instead of calculating up to a given knotnumber instead calculates all knots up to a given
771
+ # signal duration.
772
+ def addknottodur(s, dur, f0, nmax, kgte, mu, steps=30):
773
+ spindownspecifications = [f0, nmax, kgte, s, mu, fullMOLS]
774
+
775
+ knotarchive = open(knotarchivefile, "r")
776
+ alllines = knotarchive.readlines()
777
+ knotarchive.close()
778
+
779
+ currentdur = 0
780
+
781
+ for i, line in enumerate(alllines):
782
+ thisline = ast.literal_eval(line)
783
+
784
+ if thisline[0] == spindownspecifications:
785
+ currentdur = thisline[1][-1]
786
+ break
787
+
788
+ while currentdur < dur:
789
+ currentdur = addnextknottofile(f0, nmax, kgte, s, mu, steps=steps)
790
+
791
+
792
+ # Calculates and returns all knots either up to the time dur or given knot number from the KnotArchive file. By using
793
+ # this method we no longer need to always recalculate our knots, hopefully speeding up some of our other modules.
794
+ def allidealisedknots(s, dur, steps, f0, nmax, kgte, mu, knotnum=0):
795
+ spindownspecifications = [f0, nmax, kgte, s, mu, fullMOLS]
796
+
797
+ if os.path.exists(knotarchivefile):
798
+ pass
799
+ else:
800
+ with open(knotarchivefile, "w") as _:
801
+ pass
802
+
803
+ if knotnum != 0:
804
+ addknottoknotnum(s, knotnum, f0, nmax, kgte, mu, steps=steps)
805
+ else:
806
+ addknottodur(s, dur, f0, nmax, kgte, mu, steps=steps)
807
+
808
+ knotarchive = open(knotarchivefile, "r")
809
+ alllines = knotarchive.readlines()
810
+ knotarchive.close()
811
+
812
+ for i, line in enumerate(alllines):
813
+ thisline = ast.literal_eval(line)
814
+
815
+ if thisline[0] == spindownspecifications:
816
+ bf.knotslist = thisline[1]
817
+
818
+ knotsbelowdur = []
819
+
820
+ if knotnum != 0:
821
+ knotsbelowdur = thisline[1][0 : knotnum + 1]
822
+ else:
823
+ # In case the knots stored in KnotArchive go well past the specified duration, we make sure we only set the knots to go to the duration we require
824
+ for i, knot in enumerate(bf.knotslist):
825
+ if knot < dur:
826
+ knotsbelowdur.append(knot)
827
+ else:
828
+ knotsbelowdur.append(dur)
829
+ break
830
+
831
+ bf.knotslist = knotsbelowdur
832
+
833
+ return bf.knotslist