lalsuite 7.26.2.dev20251218__cp314-cp314t-manylinux_2_28_x86_64.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 (733) hide show
  1. lal/__init__.py +145 -0
  2. lal/_lal.cpython-314t-x86_64-linux-gnu.so +0 -0
  3. lal/_lal_swig.py +12 -0
  4. lal/antenna.py +1200 -0
  5. lal/git_version.py +64 -0
  6. lal/gpstime.py +233 -0
  7. lal/iterutils.py +408 -0
  8. lal/pipeline.py +3139 -0
  9. lal/rate.py +2455 -0
  10. lal/series.py +244 -0
  11. lal/utils/__init__.py +29 -0
  12. lal/utils/cache.py +379 -0
  13. lal/utils/series.py +277 -0
  14. lalapps/__init__.py +26 -0
  15. lalapps/bin/lal_cache +0 -0
  16. lalapps/bin/lal_fftw_wisdom +0 -0
  17. lalapps/bin/lal_fftwf_wisdom +0 -0
  18. lalapps/bin/lal_simd_detect +0 -0
  19. lalapps/bin/lal_tconvert +0 -0
  20. lalapps/bin/lal_version +0 -0
  21. lalapps/bin/lalapps_ComputeAntennaPattern +16 -0
  22. lalapps/bin/lalapps_ComputeFstatBenchmark +16 -0
  23. lalapps/bin/lalapps_ComputeFstatLatticeCount +16 -0
  24. lalapps/bin/lalapps_ComputeFstatMCUpperLimit +16 -0
  25. lalapps/bin/lalapps_ComputeFstatistic_v2 +16 -0
  26. lalapps/bin/lalapps_ComputePSD +16 -0
  27. lalapps/bin/lalapps_CopySFTs +16 -0
  28. lalapps/bin/lalapps_DistanceVsMass +0 -0
  29. lalapps/bin/lalapps_DriveHoughMulti +16 -0
  30. lalapps/bin/lalapps_FstatMetric_v2 +16 -0
  31. lalapps/bin/lalapps_HierarchSearchGCT +16 -0
  32. lalapps/bin/lalapps_HierarchicalSearch +16 -0
  33. lalapps/bin/lalapps_MakeSFTDAG +16 -0
  34. lalapps/bin/lalapps_MakeSFTs +16 -0
  35. lalapps/bin/lalapps_Makefakedata_v4 +16 -0
  36. lalapps/bin/lalapps_Makefakedata_v5 +16 -0
  37. lalapps/bin/lalapps_PredictFstat +16 -0
  38. lalapps/bin/lalapps_PrintDetectorState +16 -0
  39. lalapps/bin/lalapps_SFTclean +16 -0
  40. lalapps/bin/lalapps_SFTvalidate +16 -0
  41. lalapps/bin/lalapps_StringAddFrame +0 -0
  42. lalapps/bin/lalapps_StringSearch +0 -0
  43. lalapps/bin/lalapps_Weave +16 -0
  44. lalapps/bin/lalapps_WeaveCompare +16 -0
  45. lalapps/bin/lalapps_WeaveConcat +16 -0
  46. lalapps/bin/lalapps_WeaveSetup +16 -0
  47. lalapps/bin/lalapps_WriteSFTsfromSFDBs +16 -0
  48. lalapps/bin/lalapps_animate +0 -0
  49. lalapps/bin/lalapps_binj +0 -0
  50. lalapps/bin/lalapps_blindinj +0 -0
  51. lalapps/bin/lalapps_cache +16 -0
  52. lalapps/bin/lalapps_calfacs +0 -0
  53. lalapps/bin/lalapps_cbc_stochasticbank +0 -0
  54. lalapps/bin/lalapps_chirplen +0 -0
  55. lalapps/bin/lalapps_coh_PTF_inspiral +0 -0
  56. lalapps/bin/lalapps_coinj +0 -0
  57. lalapps/bin/lalapps_combine_crosscorr_toplists +16 -0
  58. lalapps/bin/lalapps_compareFstats +16 -0
  59. lalapps/bin/lalapps_compareSFTs +16 -0
  60. lalapps/bin/lalapps_create_time_correction_ephemeris +16 -0
  61. lalapps/bin/lalapps_dumpSFT +16 -0
  62. lalapps/bin/lalapps_effdist +0 -0
  63. lalapps/bin/lalapps_exc_resp +0 -0
  64. lalapps/bin/lalapps_fftw_wisdom +16 -0
  65. lalapps/bin/lalapps_fftwf_wisdom +16 -0
  66. lalapps/bin/lalapps_fits_header_getval +16 -0
  67. lalapps/bin/lalapps_fits_header_list +16 -0
  68. lalapps/bin/lalapps_fits_overview +16 -0
  69. lalapps/bin/lalapps_fits_table_list +16 -0
  70. lalapps/bin/lalapps_fr_ninja +0 -0
  71. lalapps/bin/lalapps_frextr +0 -0
  72. lalapps/bin/lalapps_frinfo +0 -0
  73. lalapps/bin/lalapps_frjoin +0 -0
  74. lalapps/bin/lalapps_frread +0 -0
  75. lalapps/bin/lalapps_frview +0 -0
  76. lalapps/bin/lalapps_gwf2xml +0 -0
  77. lalapps/bin/lalapps_heterodyne_pulsar +16 -0
  78. lalapps/bin/lalapps_inspawgfile +0 -0
  79. lalapps/bin/lalapps_inspfrinj +0 -0
  80. lalapps/bin/lalapps_inspinj +0 -0
  81. lalapps/bin/lalapps_inspiralDistance +0 -0
  82. lalapps/bin/lalapps_knope +16 -0
  83. lalapps/bin/lalapps_knope_automation_script +16 -0
  84. lalapps/bin/lalapps_knope_collate_results +16 -0
  85. lalapps/bin/lalapps_knope_result_page +16 -0
  86. lalapps/bin/lalapps_makeblindinj +85 -0
  87. lalapps/bin/lalapps_makeblindinj_himass +67 -0
  88. lalapps/bin/lalapps_ninja +0 -0
  89. lalapps/bin/lalapps_path2cache +16 -0
  90. lalapps/bin/lalapps_power +0 -0
  91. lalapps/bin/lalapps_pulsar_crosscorr_v2 +16 -0
  92. lalapps/bin/lalapps_pulsar_frequency_evolution +16 -0
  93. lalapps/bin/lalapps_pulsar_parameter_estimation_nested +16 -0
  94. lalapps/bin/lalapps_random_bank +0 -0
  95. lalapps/bin/lalapps_randombank +0 -0
  96. lalapps/bin/lalapps_run_pulsar_crosscorr_v2 +16 -0
  97. lalapps/bin/lalapps_searchsum2cache +16 -0
  98. lalapps/bin/lalapps_spec_avg +16 -0
  99. lalapps/bin/lalapps_spec_avg_long +16 -0
  100. lalapps/bin/lalapps_spec_coherence +16 -0
  101. lalapps/bin/lalapps_spininj +0 -0
  102. lalapps/bin/lalapps_splitSFTs +16 -0
  103. lalapps/bin/lalapps_splitbank +0 -0
  104. lalapps/bin/lalapps_ssbtodetector +16 -0
  105. lalapps/bin/lalapps_synthesizeBstatMC +16 -0
  106. lalapps/bin/lalapps_synthesizeLVStats +16 -0
  107. lalapps/bin/lalapps_synthesizeTransientStats +16 -0
  108. lalapps/bin/lalapps_tconvert +16 -0
  109. lalapps/bin/lalapps_tmpltbank +0 -0
  110. lalapps/bin/lalapps_version +0 -0
  111. lalapps/bin/lalapps_xtefitstoframe +0 -0
  112. lalapps/bin/lalburst_version +0 -0
  113. lalapps/bin/lalfr-cat +0 -0
  114. lalapps/bin/lalfr-cksum +0 -0
  115. lalapps/bin/lalfr-cut +0 -0
  116. lalapps/bin/lalfr-dump +0 -0
  117. lalapps/bin/lalfr-fmt +0 -0
  118. lalapps/bin/lalfr-paste +0 -0
  119. lalapps/bin/lalfr-print +0 -0
  120. lalapps/bin/lalfr-split +0 -0
  121. lalapps/bin/lalfr-stat +0 -0
  122. lalapps/bin/lalfr-stream +0 -0
  123. lalapps/bin/lalfr-vis +0 -0
  124. lalapps/bin/lalframe_version +0 -0
  125. lalapps/bin/lalinference_bench +0 -0
  126. lalapps/bin/lalinference_burst +0 -0
  127. lalapps/bin/lalinference_datadump +0 -0
  128. lalapps/bin/lalinference_injectedlike +0 -0
  129. lalapps/bin/lalinference_mpi_wrapper +59 -0
  130. lalapps/bin/lalinference_nest +0 -0
  131. lalapps/bin/lalinference_version +0 -0
  132. lalapps/bin/lalinspiral_version +0 -0
  133. lalapps/bin/lalmetaio_version +0 -0
  134. lalapps/bin/lalpulsar_ComputeAntennaPattern +0 -0
  135. lalapps/bin/lalpulsar_ComputeFstatBenchmark +0 -0
  136. lalapps/bin/lalpulsar_ComputeFstatLatticeCount +0 -0
  137. lalapps/bin/lalpulsar_ComputeFstatMCUpperLimit +0 -0
  138. lalapps/bin/lalpulsar_ComputeFstatistic_v2 +0 -0
  139. lalapps/bin/lalpulsar_ComputePSD +0 -0
  140. lalapps/bin/lalpulsar_DriveHoughMulti +0 -0
  141. lalapps/bin/lalpulsar_FstatMetric_v2 +0 -0
  142. lalapps/bin/lalpulsar_HierarchSearchGCT +0 -0
  143. lalapps/bin/lalpulsar_HierarchicalSearch +0 -0
  144. lalapps/bin/lalpulsar_MakeSFTs +0 -0
  145. lalapps/bin/lalpulsar_Makefakedata_v4 +0 -0
  146. lalapps/bin/lalpulsar_Makefakedata_v5 +0 -0
  147. lalapps/bin/lalpulsar_PredictFstat +0 -0
  148. lalapps/bin/lalpulsar_PrintDetectorState +0 -0
  149. lalapps/bin/lalpulsar_SFTclean +0 -0
  150. lalapps/bin/lalpulsar_SFTvalidate +0 -0
  151. lalapps/bin/lalpulsar_Weave +0 -0
  152. lalapps/bin/lalpulsar_WeaveCompare +0 -0
  153. lalapps/bin/lalpulsar_WeaveConcat +0 -0
  154. lalapps/bin/lalpulsar_WeaveSetup +0 -0
  155. lalapps/bin/lalpulsar_WriteSFTsfromSFDBs +0 -0
  156. lalapps/bin/lalpulsar_compareFstats +0 -0
  157. lalapps/bin/lalpulsar_compareSFTs +0 -0
  158. lalapps/bin/lalpulsar_create_time_correction_ephemeris +0 -0
  159. lalapps/bin/lalpulsar_crosscorr_v2 +0 -0
  160. lalapps/bin/lalpulsar_dumpSFT +0 -0
  161. lalapps/bin/lalpulsar_fits_header_getval +0 -0
  162. lalapps/bin/lalpulsar_fits_header_list +0 -0
  163. lalapps/bin/lalpulsar_fits_overview +0 -0
  164. lalapps/bin/lalpulsar_fits_table_list +0 -0
  165. lalapps/bin/lalpulsar_frequency_evolution +0 -0
  166. lalapps/bin/lalpulsar_heterodyne +0 -0
  167. lalapps/bin/lalpulsar_parameter_estimation_nested +0 -0
  168. lalapps/bin/lalpulsar_spec_avg +0 -0
  169. lalapps/bin/lalpulsar_spec_avg_long +0 -0
  170. lalapps/bin/lalpulsar_spec_coherence +0 -0
  171. lalapps/bin/lalpulsar_splitSFTs +0 -0
  172. lalapps/bin/lalpulsar_ssbtodetector +0 -0
  173. lalapps/bin/lalpulsar_synthesizeBstatMC +0 -0
  174. lalapps/bin/lalpulsar_synthesizeLVStats +0 -0
  175. lalapps/bin/lalpulsar_synthesizeTransientStats +0 -0
  176. lalapps/bin/lalpulsar_version +0 -0
  177. lalapps/bin/lalsim-bh-qnmode +0 -0
  178. lalapps/bin/lalsim-bh-ringdown +0 -0
  179. lalapps/bin/lalsim-bh-sphwf +0 -0
  180. lalapps/bin/lalsim-burst +0 -0
  181. lalapps/bin/lalsim-detector-noise +0 -0
  182. lalapps/bin/lalsim-detector-strain +0 -0
  183. lalapps/bin/lalsim-inject +0 -0
  184. lalapps/bin/lalsim-inspiral +0 -0
  185. lalapps/bin/lalsim-ns-eos-table +0 -0
  186. lalapps/bin/lalsim-ns-mass-radius +0 -0
  187. lalapps/bin/lalsim-ns-params +0 -0
  188. lalapps/bin/lalsim-sgwb +0 -0
  189. lalapps/bin/lalsim-unicorn +0 -0
  190. lalapps/bin/lalsimulation_version +0 -0
  191. lalapps/cosmicstring.py +691 -0
  192. lalapps/data/BNSMasses.dat +65022 -0
  193. lalapps/data/CorrelationMatrix.csv +15 -0
  194. lalapps/data/LALSimNeutronStarEOS_ABHT_QMC_RMF1_META.dat +1882 -0
  195. lalapps/data/LALSimNeutronStarEOS_ABHT_QMC_RMF2_META.dat +1939 -0
  196. lalapps/data/LALSimNeutronStarEOS_ABHT_QMC_RMF3_META.dat +1784 -0
  197. lalapps/data/LALSimNeutronStarEOS_ABHT_QMC_RMF4_META.dat +2074 -0
  198. lalapps/data/LALSimNeutronStarEOS_ALF1.dat +435 -0
  199. lalapps/data/LALSimNeutronStarEOS_ALF2.dat +453 -0
  200. lalapps/data/LALSimNeutronStarEOS_ALF3.dat +441 -0
  201. lalapps/data/LALSimNeutronStarEOS_ALF4.dat +441 -0
  202. lalapps/data/LALSimNeutronStarEOS_AP1.dat +212 -0
  203. lalapps/data/LALSimNeutronStarEOS_AP2.dat +212 -0
  204. lalapps/data/LALSimNeutronStarEOS_AP3.dat +212 -0
  205. lalapps/data/LALSimNeutronStarEOS_AP4.dat +210 -0
  206. lalapps/data/LALSimNeutronStarEOS_APR.dat +500 -0
  207. lalapps/data/LALSimNeutronStarEOS_APR4_EPP.dat +1447 -0
  208. lalapps/data/LALSimNeutronStarEOS_BBB2.dat +84 -0
  209. lalapps/data/LALSimNeutronStarEOS_BGN1H1.dat +123 -0
  210. lalapps/data/LALSimNeutronStarEOS_BHF_BBB2.dat +499 -0
  211. lalapps/data/LALSimNeutronStarEOS_BL_CHIRAL_META.dat +1534 -0
  212. lalapps/data/LALSimNeutronStarEOS_BPAL12.dat +61 -0
  213. lalapps/data/LALSimNeutronStarEOS_BSK19.dat +310 -0
  214. lalapps/data/LALSimNeutronStarEOS_BSK20.dat +310 -0
  215. lalapps/data/LALSimNeutronStarEOS_BSK21.dat +310 -0
  216. lalapps/data/LALSimNeutronStarEOS_ENG.dat +108 -0
  217. lalapps/data/LALSimNeutronStarEOS_FPS.dat +129 -0
  218. lalapps/data/LALSimNeutronStarEOS_GMSR_BSK14_BSK24.dat +1010 -0
  219. lalapps/data/LALSimNeutronStarEOS_GMSR_DHSL59_BSK24.dat +1009 -0
  220. lalapps/data/LALSimNeutronStarEOS_GMSR_DHSL69_BSK24.dat +1009 -0
  221. lalapps/data/LALSimNeutronStarEOS_GMSR_F0_BSK24.dat +1010 -0
  222. lalapps/data/LALSimNeutronStarEOS_GMSR_H1_BSK24.dat +1009 -0
  223. lalapps/data/LALSimNeutronStarEOS_GMSR_H2_BSK24.dat +1010 -0
  224. lalapps/data/LALSimNeutronStarEOS_GMSR_H3_BSK24.dat +1010 -0
  225. lalapps/data/LALSimNeutronStarEOS_GMSR_H4_BSK24.dat +1010 -0
  226. lalapps/data/LALSimNeutronStarEOS_GMSR_H5_BSK24.dat +1009 -0
  227. lalapps/data/LALSimNeutronStarEOS_GMSR_LN55_BSK24.dat +1010 -0
  228. lalapps/data/LALSimNeutronStarEOS_GMSR_SLY5_BSK24.dat +1010 -0
  229. lalapps/data/LALSimNeutronStarEOS_GNH3.dat +71 -0
  230. lalapps/data/LALSimNeutronStarEOS_GPPVA_DD2_BSK24.dat +1009 -0
  231. lalapps/data/LALSimNeutronStarEOS_GPPVA_DDME2_BSK24.dat +1010 -0
  232. lalapps/data/LALSimNeutronStarEOS_GPPVA_FSU2H_BSK24.dat +1009 -0
  233. lalapps/data/LALSimNeutronStarEOS_GPPVA_FSU2_BSK24.dat +1010 -0
  234. lalapps/data/LALSimNeutronStarEOS_GPPVA_NL3WRL55_BSK24.dat +1010 -0
  235. lalapps/data/LALSimNeutronStarEOS_GS1.dat +136 -0
  236. lalapps/data/LALSimNeutronStarEOS_GS2.dat +100 -0
  237. lalapps/data/LALSimNeutronStarEOS_H1.dat +114 -0
  238. lalapps/data/LALSimNeutronStarEOS_H2.dat +114 -0
  239. lalapps/data/LALSimNeutronStarEOS_H3.dat +98 -0
  240. lalapps/data/LALSimNeutronStarEOS_H4.dat +664 -0
  241. lalapps/data/LALSimNeutronStarEOS_H5.dat +703 -0
  242. lalapps/data/LALSimNeutronStarEOS_H6.dat +509 -0
  243. lalapps/data/LALSimNeutronStarEOS_H7.dat +703 -0
  244. lalapps/data/LALSimNeutronStarEOS_HQC18.dat +388 -0
  245. lalapps/data/LALSimNeutronStarEOS_KDE0V.dat +500 -0
  246. lalapps/data/LALSimNeutronStarEOS_KDE0V1.dat +500 -0
  247. lalapps/data/LALSimNeutronStarEOS_KDE0V1_BSK24.dat +1388 -0
  248. lalapps/data/LALSimNeutronStarEOS_KDE0V_BSK24.dat +1398 -0
  249. lalapps/data/LALSimNeutronStarEOS_MPA1.dat +102 -0
  250. lalapps/data/LALSimNeutronStarEOS_MS1.dat +122 -0
  251. lalapps/data/LALSimNeutronStarEOS_MS1B.dat +126 -0
  252. lalapps/data/LALSimNeutronStarEOS_MS1B_PP.dat +1447 -0
  253. lalapps/data/LALSimNeutronStarEOS_MS1_PP.dat +1447 -0
  254. lalapps/data/LALSimNeutronStarEOS_MS2.dat +48 -0
  255. lalapps/data/LALSimNeutronStarEOS_PAL6.dat +148 -0
  256. lalapps/data/LALSimNeutronStarEOS_PCL2.dat +134 -0
  257. lalapps/data/LALSimNeutronStarEOS_PCP_BSK24_BSK24.dat +1010 -0
  258. lalapps/data/LALSimNeutronStarEOS_PS.dat +165 -0
  259. lalapps/data/LALSimNeutronStarEOS_QMC700.dat +117 -0
  260. lalapps/data/LALSimNeutronStarEOS_RG_SLY4_BSK24.dat +1010 -0
  261. lalapps/data/LALSimNeutronStarEOS_RS.dat +500 -0
  262. lalapps/data/LALSimNeutronStarEOS_RS_BSK24.dat +1356 -0
  263. lalapps/data/LALSimNeutronStarEOS_SK255.dat +500 -0
  264. lalapps/data/LALSimNeutronStarEOS_SK255_BSK24.dat +1066 -0
  265. lalapps/data/LALSimNeutronStarEOS_SK272.dat +500 -0
  266. lalapps/data/LALSimNeutronStarEOS_SKA.dat +500 -0
  267. lalapps/data/LALSimNeutronStarEOS_SKA_BSK24.dat +1433 -0
  268. lalapps/data/LALSimNeutronStarEOS_SKB.dat +500 -0
  269. lalapps/data/LALSimNeutronStarEOS_SKB_BSK24.dat +1373 -0
  270. lalapps/data/LALSimNeutronStarEOS_SKI2.dat +500 -0
  271. lalapps/data/LALSimNeutronStarEOS_SKI2_BSK24.dat +1348 -0
  272. lalapps/data/LALSimNeutronStarEOS_SKI3.dat +500 -0
  273. lalapps/data/LALSimNeutronStarEOS_SKI3_BSK24.dat +1355 -0
  274. lalapps/data/LALSimNeutronStarEOS_SKI4.dat +497 -0
  275. lalapps/data/LALSimNeutronStarEOS_SKI4_BSK24.dat +1348 -0
  276. lalapps/data/LALSimNeutronStarEOS_SKI5.dat +500 -0
  277. lalapps/data/LALSimNeutronStarEOS_SKI6.dat +500 -0
  278. lalapps/data/LALSimNeutronStarEOS_SKI6_BSK24.dat +1358 -0
  279. lalapps/data/LALSimNeutronStarEOS_SKMP.dat +498 -0
  280. lalapps/data/LALSimNeutronStarEOS_SKOP.dat +500 -0
  281. lalapps/data/LALSimNeutronStarEOS_SKOP_BSK24.dat +1373 -0
  282. lalapps/data/LALSimNeutronStarEOS_SLY.dat +99 -0
  283. lalapps/data/LALSimNeutronStarEOS_SLY2.dat +500 -0
  284. lalapps/data/LALSimNeutronStarEOS_SLY230A.dat +500 -0
  285. lalapps/data/LALSimNeutronStarEOS_SLY230A_BSK24.dat +1116 -0
  286. lalapps/data/LALSimNeutronStarEOS_SLY2_BSK24.dat +1106 -0
  287. lalapps/data/LALSimNeutronStarEOS_SLY4.dat +100 -0
  288. lalapps/data/LALSimNeutronStarEOS_SLY9.dat +498 -0
  289. lalapps/data/LALSimNeutronStarEOS_SLY9_BSK24.dat +1083 -0
  290. lalapps/data/LALSimNeutronStarEOS_SQM1.dat +176 -0
  291. lalapps/data/LALSimNeutronStarEOS_SQM2.dat +180 -0
  292. lalapps/data/LALSimNeutronStarEOS_SQM3.dat +176 -0
  293. lalapps/data/LALSimNeutronStarEOS_WFF1.dat +109 -0
  294. lalapps/data/LALSimNeutronStarEOS_WFF2.dat +109 -0
  295. lalapps/data/LALSimNeutronStarEOS_WFF3.dat +107 -0
  296. lalapps/data/LALSimNeutronStarEOS_XMLSLZ_DDLZ1_BSK24.dat +1227 -0
  297. lalapps/data/LALSimNeutronStarEOS_XMLSLZ_DDME2_BSK24.dat +1272 -0
  298. lalapps/data/LALSimNeutronStarEOS_XMLSLZ_DDMEX_BSK24.dat +1280 -0
  299. lalapps/data/LALSimNeutronStarEOS_XMLSLZ_GM1_BSK24.dat +1288 -0
  300. lalapps/data/LALSimNeutronStarEOS_XMLSLZ_MTVTC_BSK24.dat +1288 -0
  301. lalapps/data/LALSimNeutronStarEOS_XMLSLZ_NL3_BSK24.dat +1230 -0
  302. lalapps/data/LALSimNeutronStarEOS_XMLSLZ_PKDD_BSK24.dat +1288 -0
  303. lalapps/data/LALSimNeutronStarEOS_XMLSLZ_TM1_BSK24.dat +1288 -0
  304. lalapps/data/LALSimNeutronStarEOS_XMLSLZ_TW99_BSK24.dat +1288 -0
  305. lalapps/data/LIGO-P1200087-v18-AdV_BNS_OPTIMIZED.txt +3000 -0
  306. lalapps/data/LIGO-P1200087-v18-AdV_DESIGN.txt +3000 -0
  307. lalapps/data/LIGO-P1200087-v18-AdV_EARLY_HIGH.txt +3000 -0
  308. lalapps/data/LIGO-P1200087-v18-AdV_EARLY_LOW.txt +3000 -0
  309. lalapps/data/LIGO-P1200087-v18-AdV_LATE_HIGH.txt +3000 -0
  310. lalapps/data/LIGO-P1200087-v18-AdV_LATE_LOW.txt +3000 -0
  311. lalapps/data/LIGO-P1200087-v18-AdV_MID_HIGH.txt +3000 -0
  312. lalapps/data/LIGO-P1200087-v18-AdV_MID_LOW.txt +3000 -0
  313. lalapps/data/LIGO-P1200087-v18-aLIGO_BNS_OPTIMIZED.txt +3000 -0
  314. lalapps/data/LIGO-P1200087-v18-aLIGO_DESIGN.txt +3000 -0
  315. lalapps/data/LIGO-P1200087-v18-aLIGO_EARLY_HIGH.txt +3000 -0
  316. lalapps/data/LIGO-P1200087-v18-aLIGO_EARLY_LOW.txt +3000 -0
  317. lalapps/data/LIGO-P1200087-v18-aLIGO_LATE_HIGH.txt +3000 -0
  318. lalapps/data/LIGO-P1200087-v18-aLIGO_LATE_LOW.txt +3000 -0
  319. lalapps/data/LIGO-P1200087-v18-aLIGO_MID_HIGH.txt +3000 -0
  320. lalapps/data/LIGO-P1200087-v18-aLIGO_MID_LOW.txt +3000 -0
  321. lalapps/data/LIGO-P1600143-v18-CE.txt +3000 -0
  322. lalapps/data/LIGO-P1600143-v18-CE_Pessimistic.txt +3000 -0
  323. lalapps/data/LIGO-P1600143-v18-CE_Wideband.txt +3000 -0
  324. lalapps/data/LIGO-P1600143-v18-ET_D.txt +3000 -0
  325. lalapps/data/LIGO-T0900288-v3-BHBH_20deg.txt +3000 -0
  326. lalapps/data/LIGO-T0900288-v3-High_Freq.txt +3000 -0
  327. lalapps/data/LIGO-T0900288-v3-NO_SRM.txt +3000 -0
  328. lalapps/data/LIGO-T0900288-v3-NSNS_Opt.txt +3000 -0
  329. lalapps/data/LIGO-T0900288-v3-ZERO_DET_high_P.txt +3000 -0
  330. lalapps/data/LIGO-T0900288-v3-ZERO_DET_low_P.txt +3000 -0
  331. lalapps/data/LIGO-T1600593-v1-KAGRA_Design.txt +4000 -0
  332. lalapps/data/LIGO-T1600593-v1-KAGRA_Early.txt +4000 -0
  333. lalapps/data/LIGO-T1600593-v1-KAGRA_Late.txt +4000 -0
  334. lalapps/data/LIGO-T1600593-v1-KAGRA_Mid.txt +4000 -0
  335. lalapps/data/LIGO-T1600593-v1-KAGRA_Opening.txt +4000 -0
  336. lalapps/data/LIGO-T1800042-v5-aLIGO_APLUS.txt +3000 -0
  337. lalapps/data/LIGO-T1800044-v5-aLIGO_DESIGN.txt +3000 -0
  338. lalapps/data/LIGO-T1800545-v1-AdV_O3low.txt +3000 -0
  339. lalapps/data/LIGO-T1800545-v1-AdV_O4.txt +3000 -0
  340. lalapps/data/LIGO-T1800545-v1-AdV_O4intermediate.txt +3000 -0
  341. lalapps/data/LIGO-T1800545-v1-KAGRA_128Mpc.txt +1000 -0
  342. lalapps/data/LIGO-T1800545-v1-KAGRA_25Mpc.txt +1000 -0
  343. lalapps/data/LIGO-T1800545-v1-KAGRA_80Mpc.txt +1000 -0
  344. lalapps/data/LIGO-T1800545-v1-aLIGO_140Mpc.txt +1000 -0
  345. lalapps/data/LIGO-T1800545-v1-aLIGO_175Mpc.txt +2792 -0
  346. lalapps/data/LIGO-T1800545-v1-aLIGO_O3low.txt +2792 -0
  347. lalapps/data/bimodalMeans.csv +3 -0
  348. lalapps/data/config_tiger_example.ini +150 -0
  349. lalapps/data/fiducialBBH.xml +67 -0
  350. lalapps/data/fiducialBNS.xml +67 -0
  351. lalapps/data/inspsrcs100Mpc.errors +38735 -0
  352. lalapps/data/lalinference_pipe_example.ini +573 -0
  353. lalapps/data/lib_pipe_example.ini +303 -0
  354. lalapps/data/power_pipe.ini +129 -0
  355. lalapps/data/unimodalMeans.csv +2 -0
  356. lalapps/git_version.py +64 -0
  357. lalburst/SimBurstUtils.py +324 -0
  358. lalburst/SnglBurstUtils.py +367 -0
  359. lalburst/__init__.py +7 -0
  360. lalburst/_lalburst.cpython-314t-x86_64-linux-gnu.so +0 -0
  361. lalburst/_lalburst_swig.py +16 -0
  362. lalburst/binjfind.py +824 -0
  363. lalburst/bucluster.py +409 -0
  364. lalburst/burca.py +315 -0
  365. lalburst/burca_tailor.py +349 -0
  366. lalburst/cafe.py +579 -0
  367. lalburst/calc_likelihood.py +145 -0
  368. lalburst/cs_gamma.cpython-314t-x86_64-linux-gnu.so +0 -0
  369. lalburst/date.py +118 -0
  370. lalburst/git_version.py +64 -0
  371. lalburst/offsetvector.py +278 -0
  372. lalburst/packing.py +170 -0
  373. lalburst/power.py +1457 -0
  374. lalburst/snglcluster.py +136 -0
  375. lalburst/snglcoinc.py +2637 -0
  376. lalburst/stringutils.py +607 -0
  377. lalburst/timeslides.py +236 -0
  378. lalframe/__init__.py +7 -0
  379. lalframe/_lalframe.cpython-314t-x86_64-linux-gnu.so +0 -0
  380. lalframe/_lalframe_swig.py +14 -0
  381. lalframe/frread.py +324 -0
  382. lalframe/git_version.py +64 -0
  383. lalframe/utils/__init__.py +25 -0
  384. lalframe/utils/frtools.py +61 -0
  385. lalinference/__init__.py +7 -0
  386. lalinference/_bayespputils.cpython-314t-x86_64-linux-gnu.so +0 -0
  387. lalinference/_lalinference.cpython-314t-x86_64-linux-gnu.so +0 -0
  388. lalinference/_lalinference_swig.py +19 -0
  389. lalinference/bayespputils.py +7479 -0
  390. lalinference/bayestar/__init__.py +2 -0
  391. lalinference/bayestar/deprecation.py +72 -0
  392. lalinference/git_version.py +64 -0
  393. lalinference/imrtgr/__init__.py +0 -0
  394. lalinference/imrtgr/imrtgrutils.py +168 -0
  395. lalinference/imrtgr/nrutils.py +1366 -0
  396. lalinference/imrtgr/pneqns.py +250 -0
  397. lalinference/io/__init__.py +31 -0
  398. lalinference/io/hdf5.py +365 -0
  399. lalinference/lalinference_pipe_utils.py +3617 -0
  400. lalinference/nest2pos.py +151 -0
  401. lalinference/plot/__init__.py +34 -0
  402. lalinference/plot/spindisk.py +104 -0
  403. lalinference/tiger/__init__.py +0 -0
  404. lalinference/tiger/make_injtimes.py +634 -0
  405. lalinference/tiger/omegascans_dag.py +691 -0
  406. lalinference/tiger/postproc.py +1338 -0
  407. lalinference/wrapper.py +231 -0
  408. lalinspiral/__init__.py +7 -0
  409. lalinspiral/_lalinspiral.cpython-314t-x86_64-linux-gnu.so +0 -0
  410. lalinspiral/_lalinspiral_swig.py +18 -0
  411. lalinspiral/_thinca.cpython-314t-x86_64-linux-gnu.so +0 -0
  412. lalinspiral/git_version.py +64 -0
  413. lalinspiral/inspinjfind.py +485 -0
  414. lalinspiral/thinca.py +509 -0
  415. lalmetaio/__init__.py +7 -0
  416. lalmetaio/_lalmetaio.cpython-314t-x86_64-linux-gnu.so +0 -0
  417. lalmetaio/_lalmetaio_swig.py +14 -0
  418. lalmetaio/git_version.py +64 -0
  419. lalpulsar/NstarTools.py +259 -0
  420. lalpulsar/PulsarParametersWrapper.py +938 -0
  421. lalpulsar/__init__.py +7 -0
  422. lalpulsar/_lalpulsar.cpython-314t-x86_64-linux-gnu.so +0 -0
  423. lalpulsar/_lalpulsar_swig.py +17 -0
  424. lalpulsar/git_version.py +64 -0
  425. lalpulsar/knope_utils.py +6497 -0
  426. lalpulsar/lineFileParser.py +264 -0
  427. lalpulsar/metric_utils.py +78 -0
  428. lalpulsar/piecewise_model/__init__.py +7 -0
  429. lalpulsar/piecewise_model/basis_functions.py +156 -0
  430. lalpulsar/piecewise_model/class_definitions.py +323 -0
  431. lalpulsar/piecewise_model/errors.py +37 -0
  432. lalpulsar/piecewise_model/estimating_knots.py +833 -0
  433. lalpulsar/piecewise_model/gte_and_other_methods.py +189 -0
  434. lalpulsar/piecewise_model/mols_for_gte.py +269 -0
  435. lalpulsar/piecewise_model/pw_fstat.py +813 -0
  436. lalpulsar/piecewise_model/pw_model_simulations.py +156 -0
  437. lalpulsar/piecewise_model/sampling_methods.py +186 -0
  438. lalpulsar/piecewise_model/semicoherent_metric_methods.py +375 -0
  439. lalpulsar/piecewise_model/tbank_estimates.py +293 -0
  440. lalpulsar/public_sft_directory.py +82 -0
  441. lalpulsar/pulsarhtmlutils.py +1395 -0
  442. lalpulsar/pulsarpputils.py +3638 -0
  443. lalpulsar/simulateCW.py +602 -0
  444. lalpulsar/simulateHeterodynedCW.py +591 -0
  445. lalsimulation/__init__.py +7 -0
  446. lalsimulation/_lalsimulation.cpython-314t-x86_64-linux-gnu.so +0 -0
  447. lalsimulation/_lalsimulation_swig.py +14 -0
  448. lalsimulation/git_version.py +64 -0
  449. lalsimulation/gwsignal/__init__.py +9 -0
  450. lalsimulation/gwsignal/core/__init__.py +2 -0
  451. lalsimulation/gwsignal/core/conditioning_subroutines.py +196 -0
  452. lalsimulation/gwsignal/core/errors.py +136 -0
  453. lalsimulation/gwsignal/core/gw.py +206 -0
  454. lalsimulation/gwsignal/core/parameter_conventions.py +122 -0
  455. lalsimulation/gwsignal/core/utils.py +329 -0
  456. lalsimulation/gwsignal/core/waveform.py +725 -0
  457. lalsimulation/gwsignal/core/waveform_conditioning.py +455 -0
  458. lalsimulation/gwsignal/models/__init__.py +29 -0
  459. lalsimulation/gwsignal/models/pyseobnr_model.py +452 -0
  460. lalsimulation/nrfits/NRSur3dq8Remnant.py +92 -0
  461. lalsimulation/nrfits/NRSur7dq4Remnant.py +469 -0
  462. lalsimulation/nrfits/__init__.py +1 -0
  463. lalsimulation/nrfits/eval_fits.py +364 -0
  464. lalsimulation/nrfits/nrfits.py +78 -0
  465. lalsimulation/nrfits/pn_spin_evolution_wrapper.py +92 -0
  466. lalsimulation/nrfits/quaternion_utils.py +74 -0
  467. lalsimulation/tilts_at_infinity/__init__.py +2 -0
  468. lalsimulation/tilts_at_infinity/calc_tilts_prec_avg_regularized.py +1424 -0
  469. lalsimulation/tilts_at_infinity/hybrid_spin_evolution.py +461 -0
  470. lalsimulation/tilts_at_infinity/tilts_at_infinity_utils.py +167 -0
  471. lalsuite-7.26.2.dev20251218.data/scripts/cbcBayesBurstPPAnalysis +305 -0
  472. lalsuite-7.26.2.dev20251218.data/scripts/cbcBayesBurstPostProc +1364 -0
  473. lalsuite-7.26.2.dev20251218.data/scripts/cbcBayesCombinePTMCMCh5s +100 -0
  474. lalsuite-7.26.2.dev20251218.data/scripts/cbcBayesCombinePosteriors +235 -0
  475. lalsuite-7.26.2.dev20251218.data/scripts/cbcBayesCompPos +1121 -0
  476. lalsuite-7.26.2.dev20251218.data/scripts/cbcBayesDIEvidence +68 -0
  477. lalsuite-7.26.2.dev20251218.data/scripts/cbcBayesGraceDBinfo +182 -0
  478. lalsuite-7.26.2.dev20251218.data/scripts/cbcBayesMCMC2pos +314 -0
  479. lalsuite-7.26.2.dev20251218.data/scripts/cbcBayesPPAnalysis +322 -0
  480. lalsuite-7.26.2.dev20251218.data/scripts/cbcBayesPlotSpinDisk +42 -0
  481. lalsuite-7.26.2.dev20251218.data/scripts/cbcBayesPosToSimBurst +227 -0
  482. lalsuite-7.26.2.dev20251218.data/scripts/cbcBayesPosToSimInspiral +307 -0
  483. lalsuite-7.26.2.dev20251218.data/scripts/cbcBayesPostProc +1345 -0
  484. lalsuite-7.26.2.dev20251218.data/scripts/cbcBayesThermoInt +107 -0
  485. lalsuite-7.26.2.dev20251218.data/scripts/imrtgr_imr_consistency_test +796 -0
  486. lalsuite-7.26.2.dev20251218.data/scripts/lal_cache +6 -0
  487. lalsuite-7.26.2.dev20251218.data/scripts/lal_fftw_wisdom +6 -0
  488. lalsuite-7.26.2.dev20251218.data/scripts/lal_fftwf_wisdom +6 -0
  489. lalsuite-7.26.2.dev20251218.data/scripts/lal_path2cache +148 -0
  490. lalsuite-7.26.2.dev20251218.data/scripts/lal_searchsum2cache +172 -0
  491. lalsuite-7.26.2.dev20251218.data/scripts/lal_simd_detect +6 -0
  492. lalsuite-7.26.2.dev20251218.data/scripts/lal_tconvert +6 -0
  493. lalsuite-7.26.2.dev20251218.data/scripts/lal_version +6 -0
  494. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_ComputeAntennaPattern +6 -0
  495. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_ComputeFstatBenchmark +6 -0
  496. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_ComputeFstatLatticeCount +6 -0
  497. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_ComputeFstatMCUpperLimit +6 -0
  498. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_ComputeFstatistic_v2 +6 -0
  499. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_ComputePSD +6 -0
  500. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_CopySFTs +6 -0
  501. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_DistanceVsMass +6 -0
  502. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_DriveHoughMulti +6 -0
  503. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_FstatMetric_v2 +6 -0
  504. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_HierarchSearchGCT +6 -0
  505. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_HierarchicalSearch +6 -0
  506. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_MakeSFTDAG +6 -0
  507. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_MakeSFTs +6 -0
  508. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_Makefakedata_v4 +6 -0
  509. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_Makefakedata_v5 +6 -0
  510. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_PredictFstat +6 -0
  511. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_PrintDetectorState +6 -0
  512. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_SFTclean +6 -0
  513. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_SFTvalidate +6 -0
  514. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_StringAddFrame +6 -0
  515. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_StringSearch +6 -0
  516. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_Weave +6 -0
  517. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_WeaveCompare +6 -0
  518. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_WeaveConcat +6 -0
  519. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_WeaveSetup +6 -0
  520. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_WriteSFTsfromSFDBs +6 -0
  521. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_animate +6 -0
  522. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_binj +6 -0
  523. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_blindinj +6 -0
  524. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_cache +6 -0
  525. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_cafe +99 -0
  526. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_calfacs +6 -0
  527. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_cbc_stochasticbank +6 -0
  528. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_chirplen +6 -0
  529. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_coh_PTF_inspiral +6 -0
  530. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_coinj +6 -0
  531. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_combine_crosscorr_toplists +6 -0
  532. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_compareFstats +6 -0
  533. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_compareSFTs +6 -0
  534. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_cosmicstring_pipe +525 -0
  535. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_create_time_correction_ephemeris +6 -0
  536. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_dumpSFT +6 -0
  537. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_effdist +6 -0
  538. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_exc_resp +6 -0
  539. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_fftw_wisdom +6 -0
  540. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_fftwf_wisdom +6 -0
  541. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_fits_header_getval +6 -0
  542. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_fits_header_list +6 -0
  543. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_fits_overview +6 -0
  544. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_fits_table_list +6 -0
  545. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_fr_ninja +6 -0
  546. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_frextr +6 -0
  547. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_frinfo +6 -0
  548. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_frjoin +6 -0
  549. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_frread +6 -0
  550. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_frview +6 -0
  551. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_gwf2xml +6 -0
  552. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_heterodyne_pulsar +6 -0
  553. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_inspawgfile +6 -0
  554. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_inspfrinj +6 -0
  555. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_inspinj +6 -0
  556. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_inspiralDistance +6 -0
  557. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_knope +6 -0
  558. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_knope_automation_script +6 -0
  559. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_knope_collate_results +6 -0
  560. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_knope_result_page +6 -0
  561. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_makeblindinj +6 -0
  562. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_makeblindinj_himass +6 -0
  563. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_ninja +6 -0
  564. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_path2cache +6 -0
  565. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_power +6 -0
  566. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_power_likelihood_pipe +219 -0
  567. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_power_pipe +417 -0
  568. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_pulsar_crosscorr_v2 +6 -0
  569. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_pulsar_frequency_evolution +6 -0
  570. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_pulsar_parameter_estimation_nested +6 -0
  571. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_random_bank +6 -0
  572. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_randombank +6 -0
  573. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_run_pulsar_crosscorr_v2 +6 -0
  574. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_searchsum2cache +6 -0
  575. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_spec_avg +6 -0
  576. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_spec_avg_long +6 -0
  577. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_spec_coherence +6 -0
  578. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_spininj +6 -0
  579. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_splitSFTs +6 -0
  580. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_splitbank +6 -0
  581. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_ssbtodetector +6 -0
  582. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_string_apply_vetoes +171 -0
  583. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_string_calc_likelihood +172 -0
  584. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_string_contour_plotter +141 -0
  585. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_string_contour_plotter_largeloops +133 -0
  586. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_string_cs_gamma +110 -0
  587. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_string_cs_gamma_largeloops +119 -0
  588. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_string_final +1064 -0
  589. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_string_meas_likelihood +264 -0
  590. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_string_plot_binj +543 -0
  591. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_string_plot_likelihood +380 -0
  592. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_synthesizeBstatMC +6 -0
  593. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_synthesizeLVStats +6 -0
  594. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_synthesizeTransientStats +6 -0
  595. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_tconvert +6 -0
  596. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_tmpltbank +6 -0
  597. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_version +6 -0
  598. lalsuite-7.26.2.dev20251218.data/scripts/lalapps_xtefitstoframe +6 -0
  599. lalsuite-7.26.2.dev20251218.data/scripts/lalburst_cluster +156 -0
  600. lalsuite-7.26.2.dev20251218.data/scripts/lalburst_coinc +224 -0
  601. lalsuite-7.26.2.dev20251218.data/scripts/lalburst_cut +425 -0
  602. lalsuite-7.26.2.dev20251218.data/scripts/lalburst_gen_timeslides +254 -0
  603. lalsuite-7.26.2.dev20251218.data/scripts/lalburst_inj_pic +254 -0
  604. lalsuite-7.26.2.dev20251218.data/scripts/lalburst_injfind +170 -0
  605. lalsuite-7.26.2.dev20251218.data/scripts/lalburst_plot_tisi +165 -0
  606. lalsuite-7.26.2.dev20251218.data/scripts/lalburst_power_calc_likelihood +182 -0
  607. lalsuite-7.26.2.dev20251218.data/scripts/lalburst_power_final +1369 -0
  608. lalsuite-7.26.2.dev20251218.data/scripts/lalburst_power_meas_likelihood +206 -0
  609. lalsuite-7.26.2.dev20251218.data/scripts/lalburst_power_plot_binj +934 -0
  610. lalsuite-7.26.2.dev20251218.data/scripts/lalburst_power_plot_binjtf +302 -0
  611. lalsuite-7.26.2.dev20251218.data/scripts/lalburst_version +6 -0
  612. lalsuite-7.26.2.dev20251218.data/scripts/lalfr-cat +6 -0
  613. lalsuite-7.26.2.dev20251218.data/scripts/lalfr-cksum +6 -0
  614. lalsuite-7.26.2.dev20251218.data/scripts/lalfr-cut +6 -0
  615. lalsuite-7.26.2.dev20251218.data/scripts/lalfr-dump +6 -0
  616. lalsuite-7.26.2.dev20251218.data/scripts/lalfr-fmt +6 -0
  617. lalsuite-7.26.2.dev20251218.data/scripts/lalfr-paste +6 -0
  618. lalsuite-7.26.2.dev20251218.data/scripts/lalfr-print +6 -0
  619. lalsuite-7.26.2.dev20251218.data/scripts/lalfr-split +6 -0
  620. lalsuite-7.26.2.dev20251218.data/scripts/lalfr-stat +6 -0
  621. lalsuite-7.26.2.dev20251218.data/scripts/lalfr-stream +6 -0
  622. lalsuite-7.26.2.dev20251218.data/scripts/lalfr-vis +6 -0
  623. lalsuite-7.26.2.dev20251218.data/scripts/lalframe_version +6 -0
  624. lalsuite-7.26.2.dev20251218.data/scripts/lalinference_bench +6 -0
  625. lalsuite-7.26.2.dev20251218.data/scripts/lalinference_burst +6 -0
  626. lalsuite-7.26.2.dev20251218.data/scripts/lalinference_burst_pp_pipe +220 -0
  627. lalsuite-7.26.2.dev20251218.data/scripts/lalinference_coherence_test +139 -0
  628. lalsuite-7.26.2.dev20251218.data/scripts/lalinference_compute_roq_weights +404 -0
  629. lalsuite-7.26.2.dev20251218.data/scripts/lalinference_cpnest +58 -0
  630. lalsuite-7.26.2.dev20251218.data/scripts/lalinference_datadump +6 -0
  631. lalsuite-7.26.2.dev20251218.data/scripts/lalinference_evolve_spins_and_append_samples +202 -0
  632. lalsuite-7.26.2.dev20251218.data/scripts/lalinference_injectedlike +6 -0
  633. lalsuite-7.26.2.dev20251218.data/scripts/lalinference_merge_posteriors +57 -0
  634. lalsuite-7.26.2.dev20251218.data/scripts/lalinference_mpi_wrapper +6 -0
  635. lalsuite-7.26.2.dev20251218.data/scripts/lalinference_multi_pipe +144 -0
  636. lalsuite-7.26.2.dev20251218.data/scripts/lalinference_nest +6 -0
  637. lalsuite-7.26.2.dev20251218.data/scripts/lalinference_nest2pos +286 -0
  638. lalsuite-7.26.2.dev20251218.data/scripts/lalinference_pipe +512 -0
  639. lalsuite-7.26.2.dev20251218.data/scripts/lalinference_pp_pipe +229 -0
  640. lalsuite-7.26.2.dev20251218.data/scripts/lalinference_review_test +362 -0
  641. lalsuite-7.26.2.dev20251218.data/scripts/lalinference_version +6 -0
  642. lalsuite-7.26.2.dev20251218.data/scripts/lalinspiral_injfind +206 -0
  643. lalsuite-7.26.2.dev20251218.data/scripts/lalinspiral_thinca +240 -0
  644. lalsuite-7.26.2.dev20251218.data/scripts/lalinspiral_version +6 -0
  645. lalsuite-7.26.2.dev20251218.data/scripts/lalmetaio_version +6 -0
  646. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_ComputeAntennaPattern +6 -0
  647. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_ComputeFstatBenchmark +6 -0
  648. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_ComputeFstatLatticeCount +6 -0
  649. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_ComputeFstatMCUpperLimit +6 -0
  650. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_ComputeFstatistic_v2 +6 -0
  651. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_ComputePSD +6 -0
  652. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_CopyPublicSFTs +216 -0
  653. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_DriveHoughMulti +6 -0
  654. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_FstatMetric_v2 +6 -0
  655. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_HierarchSearchGCT +6 -0
  656. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_HierarchicalSearch +6 -0
  657. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_MakeSFTDAG +1142 -0
  658. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_MakeSFTs +6 -0
  659. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_Makefakedata_v4 +6 -0
  660. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_Makefakedata_v5 +6 -0
  661. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_MoveSFTs +208 -0
  662. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_PiecewiseSearch +963 -0
  663. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_PredictFstat +6 -0
  664. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_PrintDetectorState +6 -0
  665. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_SFTclean +6 -0
  666. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_SFTvalidate +6 -0
  667. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_Weave +6 -0
  668. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_WeaveCompare +6 -0
  669. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_WeaveConcat +6 -0
  670. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_WeaveSetup +6 -0
  671. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_WriteSFTsfromSFDBs +6 -0
  672. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_compareFstats +6 -0
  673. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_compareSFTs +6 -0
  674. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_create_time_correction_ephemeris +6 -0
  675. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_crosscorr_v2 +6 -0
  676. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_dumpSFT +6 -0
  677. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_fits_header_getval +6 -0
  678. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_fits_header_list +6 -0
  679. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_fits_overview +6 -0
  680. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_fits_table_list +6 -0
  681. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_frequency_evolution +6 -0
  682. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_heterodyne +6 -0
  683. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_knope +145 -0
  684. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_knope_automation_script +731 -0
  685. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_knope_collate_results +675 -0
  686. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_knope_result_page +2977 -0
  687. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_parameter_estimation_nested +6 -0
  688. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_spec_avg +6 -0
  689. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_spec_avg_long +6 -0
  690. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_spec_coherence +6 -0
  691. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_splitSFTs +6 -0
  692. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_ssbtodetector +6 -0
  693. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_synthesizeBstatMC +6 -0
  694. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_synthesizeLVStats +6 -0
  695. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_synthesizeTransientStats +6 -0
  696. lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_version +6 -0
  697. lalsuite-7.26.2.dev20251218.data/scripts/lalsim-bh-qnmode +6 -0
  698. lalsuite-7.26.2.dev20251218.data/scripts/lalsim-bh-ringdown +6 -0
  699. lalsuite-7.26.2.dev20251218.data/scripts/lalsim-bh-sphwf +6 -0
  700. lalsuite-7.26.2.dev20251218.data/scripts/lalsim-burst +6 -0
  701. lalsuite-7.26.2.dev20251218.data/scripts/lalsim-detector-noise +6 -0
  702. lalsuite-7.26.2.dev20251218.data/scripts/lalsim-detector-strain +6 -0
  703. lalsuite-7.26.2.dev20251218.data/scripts/lalsim-inject +6 -0
  704. lalsuite-7.26.2.dev20251218.data/scripts/lalsim-inspiral +6 -0
  705. lalsuite-7.26.2.dev20251218.data/scripts/lalsim-ns-eos-table +6 -0
  706. lalsuite-7.26.2.dev20251218.data/scripts/lalsim-ns-mass-radius +6 -0
  707. lalsuite-7.26.2.dev20251218.data/scripts/lalsim-ns-params +6 -0
  708. lalsuite-7.26.2.dev20251218.data/scripts/lalsim-sgwb +6 -0
  709. lalsuite-7.26.2.dev20251218.data/scripts/lalsim-unicorn +6 -0
  710. lalsuite-7.26.2.dev20251218.data/scripts/lalsimulation_version +6 -0
  711. lalsuite-7.26.2.dev20251218.dist-info/METADATA +90 -0
  712. lalsuite-7.26.2.dev20251218.dist-info/RECORD +733 -0
  713. lalsuite-7.26.2.dev20251218.dist-info/WHEEL +5 -0
  714. lalsuite-7.26.2.dev20251218.dist-info/licenses/COPYING +339 -0
  715. lalsuite-7.26.2.dev20251218.dist-info/top_level.txt +9 -0
  716. lalsuite.libs/libcfitsio-729ee1b7.so.10.0.0 +0 -0
  717. lalsuite.libs/libfftw3-6b983104.so.3.5.5 +0 -0
  718. lalsuite.libs/libfftw3f-b4465a35.so.3.5.5 +0 -0
  719. lalsuite.libs/libframel-8cf74372.so.8.48.4 +0 -0
  720. lalsuite.libs/libgsl-e30be130.so.28.0.0 +0 -0
  721. lalsuite.libs/libgslcblas-460f042a.so.0.0.0 +0 -0
  722. lalsuite.libs/libhdf5-d02936e2.so.310.5.1 +0 -0
  723. lalsuite.libs/libhdf5_hl-0e40b553.so.310.0.6 +0 -0
  724. lalsuite.libs/liblal-bd4575d4.so.20.5.0 +0 -0
  725. lalsuite.libs/liblalburst-183caa97.so.8.0.0 +0 -0
  726. lalsuite.libs/liblalframe-b2539a8a.so.14.0.3 +0 -0
  727. lalsuite.libs/liblalinference-b273091a.so.23.1.7 +0 -0
  728. lalsuite.libs/liblalinspiral-37f93c6c.so.18.0.2 +0 -0
  729. lalsuite.libs/liblalmetaio-f04c856f.so.11.0.1 +0 -0
  730. lalsuite.libs/liblalpulsar-950e7dfd.so.30.1.1 +0 -0
  731. lalsuite.libs/liblalsimulation-abda47f7.so.37.2.0 +0 -0
  732. lalsuite.libs/liblalsupport-ad162801.so.14.4.0 +0 -0
  733. lalsuite.libs/libmetaio-abda72ec.so.1.1.0 +0 -0
@@ -0,0 +1,1142 @@
1
+ #!python
2
+ # Copyright (C) 2013, 2014, 2020--2024 Evan Goetz
3
+ # Copyright (C) 2011, 2021, 2022 Karl Wette
4
+ # Copyright (C) 2005, 2007 Gregory Mendell
5
+ #
6
+ # This program is free software; you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation; either version 2 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # This program is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with with program; see the file COPYING. If not, write to the
18
+ # Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
+ # MA 02110-1301 USA
20
+
21
+ ## \file
22
+ ## \ingroup lalpulsar_bin_SFTTools
23
+ """Creates DAGs to run jobs that generates SFTs"""
24
+
25
+ import math
26
+ import argparse
27
+ import os
28
+ import re
29
+ from pathlib import Path
30
+ from urllib.parse import urlparse
31
+
32
+ from gwdatafind import find_urls
33
+ from gwdatafind.utils import filename_metadata, file_segment
34
+
35
+ from igwn_segments import segment, segmentlist
36
+
37
+ from lalpulsar import (
38
+ git_version,
39
+ SFTFilenameSpec,
40
+ FillSFTFilenameSpecStrings,
41
+ BuildSFTFilenameFromSpec,
42
+ )
43
+
44
+ __author__ = "Evan Goetz <evan.goetz@ligo.org>, Greg Mendell"
45
+ __version__ = git_version.id
46
+ __date__ = git_version.date
47
+
48
+ cache_re = re.compile(r"^([A-Z])(\s+)(\w+)(\s+)(\d+)(\s+)(\d+)(\s+)(.+gwf)")
49
+
50
+
51
+ # REVISIONS:
52
+ # 12/02/05 gam; generate datafind.sub and MakeSFTs.sub as well as dag file in
53
+ # PWD, with log files based subLogPath and dag filename.
54
+ # 12/28/05 gam; Add option --make-gps-dirs, -D <num>, to make directory based
55
+ # on this many GPS digits.
56
+ # 12/28/05 gam; Add option --misc-desc, -X <string> giving misc. part of the
57
+ # SFT description field in the filename.
58
+ # 12/28/05 gam; Add options --start-freq -F and --band -B options to enter
59
+ # these.
60
+ # 12/28/05 gam; Add in --window-type, -w options; 0 = no window, 1 = default =
61
+ # Matlab style Tukey window; 2 = make_sfts.c Tukey window; 3 =
62
+ # Hann window.
63
+ # 12/28/05 gam; Add option --overlap-fraction -P (for use with windows; e.g.,
64
+ # use -P 0.5 with -w 3 Hann windows; default is 0.0)
65
+ # 12/28/05 gam; Add --sft-version, -v option to select output SFT version (1 =
66
+ # default is version 1 SFTs; 2 = version 2 SFTs.
67
+ # 12/28/05 gam; Add --comment-field, -c option, for comment for version 2 SFTs.
68
+ # 12/28/05 gam; Remove sample rate option
69
+ # 01/09/06 gam; Add -Z option; write SFT to .*.tmp file, then move to final
70
+ # file name.
71
+ # 01/14/07 gam; Add -u option to specify frame struct and type; add -i option
72
+ # to specify IFO name.
73
+ # 07/24/07 gam; Add in -q option to read in list of nodes on which to output
74
+ # SFTs, -Q option to give node path, and -R option for number of
75
+ # jobs per node.
76
+ # 04/XX/13 eag; Add -y option to synchronize the start times of SFTs.
77
+ # 07/24/14 eag; Change default to version 2 SFTs
78
+ # 12/2020 eag; Update script to conform to modern python3 and pep8
79
+ # 10/2020 kww; Pass args directly to writeToDag(), use Python f-strings
80
+ # 10/2022 kww; Deprecate options that have been removed from MakeSFTs
81
+ # 10/2022 kww; Parse window type as a string, parameter separated by colon
82
+ # 10/2022 kww; Merge -O and -o log path options to free up -O option
83
+ # 10/2022 kww; Implement public SFT file naming convention
84
+ # 11/2022 kww; -R command line option now used for --observing-revision
85
+ # instead of --output-jobs-per-node, which now uses -r
86
+ # 11/2022 kww; --datafind-path and --makesfts-path accept executable names
87
+ # 03/2023 eag; Allow user to pass a frame cache file --cache-file
88
+ # 04/2023 kww; Improve documentation of --window-type argument
89
+ # 05/2023 eag; Add the --gaps flag to gw_data_find
90
+ # 08/2023 eag; Allow for multiple channel names to be provided
91
+ # 09/2023 eag; Modify use of environment variables
92
+ # 01/2024 eag; Allow skipping of channels if not in frames or too low data
93
+ # rate
94
+ # 10/2024 eag; Modify workflow for version 3 SFTs and HTCondor file transfer
95
+ # workflow
96
+ # 12/2024 eag; Modify workflow to use lalpulsar_MoveSFTs script instead of
97
+ # remapping files
98
+ # 03/2025 eag; Rewrite to generate cache files running lalpulsar_MakeSFTDAG
99
+ # enabling frame files on /home or OSDF
100
+
101
+
102
+ def sft_name_from_vars(
103
+ obs,
104
+ gpsstart,
105
+ Tsft,
106
+ channel=None,
107
+ kind=None,
108
+ rev=None,
109
+ window="unknown",
110
+ par=None,
111
+ miscstr=None,
112
+ ):
113
+ """Create SFT file name from specification"""
114
+
115
+ spec = SFTFilenameSpec()
116
+
117
+ FillSFTFilenameSpecStrings(
118
+ spec=spec,
119
+ path=None,
120
+ extn=None,
121
+ detector=channel[:2],
122
+ window_type=window,
123
+ privMisc=miscstr,
124
+ pubObsKind=kind,
125
+ pubChannel=channel,
126
+ )
127
+ spec.pubObsRun = obs or 0
128
+ spec.pubRevision = rev or 0
129
+ spec.window_param = par or 0
130
+ spec.numSFTs = 1 # MakeSFTDAG will only ever generate 1 SFT per file
131
+ spec.SFTtimebase = Tsft
132
+ spec.gpsStart = gpsstart
133
+ spec.SFTspan = Tsft # MakeSFTDAG will only ever generate 1 SFT per file
134
+
135
+ return BuildSFTFilenameFromSpec(spec)
136
+
137
+
138
+ def get_urls(args):
139
+ """Get frame file URL list from gwdatafind or cache file"""
140
+
141
+ if not args.cache_file:
142
+ urls = find_urls(
143
+ site,
144
+ args.input_data_type,
145
+ segList[0][0],
146
+ segList[-1][-1],
147
+ match=args.datafind_match,
148
+ urltype=args.datafind_urltype,
149
+ )
150
+ else:
151
+ urls = []
152
+ with open(args.cache_file, "r") as f:
153
+ for line in f:
154
+ m = cache_re.match(line)
155
+ if m:
156
+ framefile = m.group(9)
157
+ urls.append(framefile)
158
+
159
+ # sort the urls by gps time since find_urls() may not return a sorted list
160
+ sorted_urls = sorted(urls, key=lambda x: file_segment(x)[0])
161
+
162
+ return sorted_urls
163
+
164
+
165
+ def make_cache(
166
+ urls,
167
+ job_seg,
168
+ ):
169
+ """Make a frame list and cache list from a list of URLs"""
170
+
171
+ cache = [] # list of lines for the cache file
172
+ frames = [] # list of frame filenames used in the job
173
+ for idx, url in enumerate(urls):
174
+ obs, desc, dataseg = filename_metadata(url)
175
+ dataseg = segment(dataseg)
176
+ if dataseg.disjoint(job_seg) < 0:
177
+ continue
178
+ if dataseg.disjoint(job_seg) > 0:
179
+ break
180
+ if dataseg.intersects(job_seg):
181
+ framefileurl = urlparse(url)
182
+ framefilepath = Path(framefileurl.path)
183
+
184
+ # list in cache file if files not visible on execute node
185
+ # otherwise use file url
186
+ if "/home" in str(framefilepath.parent) or "osdf" in framefileurl.scheme:
187
+ newcache = (
188
+ f"{obs}\t{desc}\t{dataseg[0]}\t{abs(dataseg)}\t{framefilepath.name}"
189
+ )
190
+ else:
191
+ newcache = f"{obs}\t{desc}\t{dataseg[0]}\t{abs(dataseg)}\t{url}"
192
+ cache.append(newcache)
193
+
194
+ if "/home" in str(framefilepath.parent):
195
+ frames.append(framefilepath)
196
+ else:
197
+ frames.append(url)
198
+
199
+ return frames, cache
200
+
201
+
202
+ def writeToDag(dagFID, nodeCount, startTimeThisNode, endTimeThisNode, urls, args):
203
+ """Write one job to DAG file"""
204
+
205
+ MakeSFTs = f"MakeSFTs_{nodeCount}"
206
+ tagStringOut = f"{args.tag_string}_{nodeCount}"
207
+
208
+ job_segment = segment(
209
+ startTimeThisNode - args.extra_datafind_time,
210
+ endTimeThisNode + args.extra_datafind_time,
211
+ )
212
+
213
+ frames, cache = make_cache(urls, job_segment)
214
+
215
+ obs, desc, dataseg = filename_metadata(urls[0])
216
+ cacheFile = args.cache_path / f"{obs}-{job_segment[0]}-{job_segment[1]}.cache"
217
+ with open(cacheFile, "w") as f:
218
+ for l in cache:
219
+ f.write(f"{l}\n")
220
+
221
+ argList = []
222
+ argList.append(f"-O {args.observing_run}")
223
+ if args.observing_run > 0:
224
+ argList.append(f"-K {args.observing_kind}")
225
+ argList.append(f"-R {args.observing_revision}")
226
+ elif args.misc_desc:
227
+ argList.append(f"-X {args.misc_desc}")
228
+ argList.append(f"-f {args.filter_knee_freq}")
229
+ argList.append(f"-t {args.time_baseline}")
230
+ # To work with the condor file transfer protocol, we save everything to the
231
+ # scratch directory because the files will have unique names. Since
232
+ # lalpulsar_MakeSFTs wants to have a path to save the file to, we provide .
233
+ argList.append(f"-p {','.join(['.' for p in args.output_sft_path])}")
234
+ # To work with the condor file transfer protocol, the cache file is saved
235
+ # to the scratch directory on transfer so we just need the name, not the
236
+ # full path
237
+ argList.append(f"-C {cacheFile.name}")
238
+ argList.append(f"-s {startTimeThisNode}")
239
+ argList.append(f"-e {endTimeThisNode}")
240
+ argList.append(f"-N {','.join(args.channel_name)}")
241
+ argList.append(f"-F {args.start_freq}")
242
+ argList.append(f"-B {args.band}")
243
+ if args.comment_field:
244
+ argList.append(f"-c {args.comment_field}")
245
+ if ":" in args.window_type:
246
+ window_type, window_param = args.window_type.split(":")
247
+ window_param = float(window_param)
248
+ argList.append(f"-w {window_type} -r {window_param}")
249
+ else:
250
+ window_type = args.window_type
251
+ window_param = None
252
+ argList.append(f"-w {window_type}")
253
+ if args.overlap_fraction:
254
+ argList.append(f"-P {args.overlap_fraction}")
255
+ if args.allow_skipping:
256
+ argList.append("--allow-skipping TRUE")
257
+ argStr = " ".join(argList)
258
+
259
+ # The files are going to go to specific directories, so we need to map
260
+ # the files to their output directories
261
+ outputfiles = []
262
+ remap = []
263
+ sft_start = startTimeThisNode
264
+ sft_end = sft_start + args.time_baseline
265
+ # loop over start times
266
+ while sft_end <= endTimeThisNode:
267
+ # loop over channels
268
+ for idx, c in enumerate(args.channel_name):
269
+ filename = sft_name_from_vars(
270
+ args.observing_run,
271
+ sft_start,
272
+ args.time_baseline,
273
+ c,
274
+ kind=args.observing_kind,
275
+ rev=args.observing_revision,
276
+ window=window_type,
277
+ par=window_param,
278
+ miscstr=args.misc_desc,
279
+ )
280
+ outputfiles.append(filename)
281
+ remap.append(f"{filename}={args.output_sft_path[idx]/filename}")
282
+
283
+ # update start and end times
284
+ if args.overlap_fraction:
285
+ sft_start += int(round((1 - args.overlap_fraction) * args.time_baseline))
286
+ else:
287
+ sft_start += args.time_baseline
288
+ sft_end = sft_start + args.time_baseline
289
+
290
+ # MakeSFT job
291
+ dagFID.write(f"JOB {MakeSFTs} {Path(dagFID.name).parent / 'MakeSFTs.sub'}\n")
292
+ dagFID.write(f"RETRY {MakeSFTs} 1\n")
293
+ dagFID.write(f'VARS {MakeSFTs} argList="{argStr}" cachefile="{cacheFile}" ')
294
+ if args.transfer_frame_files:
295
+ framefiles = ",".join([str(fr) for fr in frames])
296
+ dagFID.write(f'framefiles="{framefiles}" ')
297
+ dagFID.write(f'tagstring="{tagStringOut}"\n')
298
+
299
+
300
+ #
301
+ # MAIN CODE START HERE
302
+ #
303
+
304
+ parser = argparse.ArgumentParser(
305
+ description="This script creates MakeSFTs.sub, MoveSFTs.sub, and a dag \
306
+ file that generates SFTs based on the options given.",
307
+ fromfile_prefix_chars="@",
308
+ )
309
+
310
+ dag_group = parser.add_argument_group(
311
+ "DAG organization", "Options for workflow control"
312
+ )
313
+ datafind_group = parser.add_argument_group(
314
+ "Datafind", "Options for locating frame files"
315
+ )
316
+ makesfts_group = parser.add_argument_group(
317
+ "SFT creation", "Options for SFT creation and output"
318
+ )
319
+ deprecated_group = parser.add_argument_group("DEPRECATED")
320
+
321
+ dag_group.add_argument(
322
+ "-f",
323
+ "--dag-file",
324
+ required=True,
325
+ type=Path,
326
+ help="filename for .dag file (should end in .dag)",
327
+ )
328
+ dag_group.add_argument(
329
+ "-G",
330
+ "--tag-string",
331
+ required=True,
332
+ type=str,
333
+ help="tag string used in names of various files unique to \
334
+ jobs that will run under the DAG",
335
+ )
336
+ dag_group.add_argument(
337
+ "-a",
338
+ "--analysis-start-time",
339
+ type=int,
340
+ help="GPS start time of data from which to generate \
341
+ SFTs (optional and unused if a segment file is given)",
342
+ )
343
+ dag_group.add_argument(
344
+ "-b",
345
+ "--analysis-end-time",
346
+ type=int,
347
+ help="GPS end time of data from which to generate SFTs \
348
+ (optional and unused if a segment file is given)",
349
+ )
350
+ dag_group.add_argument(
351
+ "-L",
352
+ "--max-length-all-jobs",
353
+ type=int,
354
+ help="maximum total amount of data to process, in seconds \
355
+ (optional and unused if a segment file is given)",
356
+ )
357
+ dag_group.add_argument(
358
+ "-g",
359
+ "--segment-file",
360
+ type=Path,
361
+ help="alternative file with segments to use, rather than \
362
+ the input times",
363
+ )
364
+ dag_group.add_argument(
365
+ "-l",
366
+ "--min-seg-length",
367
+ type=int,
368
+ default=0,
369
+ help="minimum length segments to process in seconds (used \
370
+ only if a segment file is given)",
371
+ )
372
+ dag_group.add_argument(
373
+ "-y",
374
+ "--synchronize-start",
375
+ action="store_true",
376
+ help="synchronize the start times of the SFTs so that the \
377
+ start times are synchronized when there are gaps in the \
378
+ data",
379
+ )
380
+ dag_group.add_argument(
381
+ "-o",
382
+ "--log-path",
383
+ type=Path,
384
+ default="logs",
385
+ help="path to log, output, and error files (default \
386
+ is $PWD/logs; this directory is created if it does not \
387
+ exist and usually should be under a local file system)",
388
+ )
389
+ dag_group.add_argument(
390
+ "-m",
391
+ "--max-num-per-node",
392
+ type=int,
393
+ default=1,
394
+ help="maximum number of SFTs to generate on one node",
395
+ )
396
+ dag_group.add_argument(
397
+ "-J",
398
+ "--makesfts-path",
399
+ type=Path,
400
+ help="string specifying the lalpulsar_MakeSFTs executable, \
401
+ or a path to it; if not set, will use \
402
+ MAKESFTS_PATH env variable or system default (in that \
403
+ order)",
404
+ )
405
+ dag_group.add_argument(
406
+ "--movesfts-path",
407
+ type=Path,
408
+ help="string specifying the lalpulsar_MoveSFTs executable, \
409
+ or a path to it; if not set, will use \
410
+ MOVESFTS_PATH env variable or system default (in that \
411
+ order)",
412
+ )
413
+ dag_group.add_argument(
414
+ "-Y",
415
+ "--request-memory",
416
+ type=int,
417
+ default=4096,
418
+ help="memory allocation in MB to request from condor for \
419
+ lalpulsar_MakeSFTs step",
420
+ )
421
+ dag_group.add_argument(
422
+ "-s",
423
+ "--request-disk",
424
+ type=int,
425
+ default=4096,
426
+ help="disk space allocation in MB to request from condor \
427
+ for lalpulsar_MakeSFTs step",
428
+ )
429
+ dag_group.add_argument(
430
+ "-A",
431
+ "--accounting-group",
432
+ required=True,
433
+ type=str,
434
+ help="Condor tag for the production of SFTs",
435
+ )
436
+ dag_group.add_argument(
437
+ "-U",
438
+ "--accounting-group-user",
439
+ required=True,
440
+ type=str,
441
+ help="albert.einstein username (do not add @LIGO.ORG)",
442
+ )
443
+ dag_group.add_argument(
444
+ "-t",
445
+ "--transfer-frame-files",
446
+ action="store_true",
447
+ help="Transfer frame files via HTCondor file transfer system. \
448
+ This should be specified if frames are not visible to the \
449
+ compute node file system. Ex. this should be specified if \
450
+ frames are on /home or running on the open science grid. \
451
+ Usually frame files are visible on CIT, LHO, LLO clusters \
452
+ so that this does not need to be specified in that case.",
453
+ )
454
+
455
+ datafind_group.add_argument(
456
+ "-d",
457
+ "--input-data-type",
458
+ required=True,
459
+ type=str,
460
+ help="input data type for use with the gw_data_find --type \
461
+ option",
462
+ )
463
+ datafind_group.add_argument(
464
+ "-x",
465
+ "--extra-datafind-time",
466
+ type=int,
467
+ default=0,
468
+ help="extra time to subtract/add from/to start/end time \
469
+ arguments of gw_data_find",
470
+ )
471
+ datafind_group.add_argument(
472
+ "-M",
473
+ "--datafind-match",
474
+ type=str,
475
+ help="string to use with the gw_data_find --match option",
476
+ )
477
+ datafind_group.add_argument(
478
+ "--datafind-urltype",
479
+ type=str,
480
+ default="file",
481
+ choices=["file", "osdf"],
482
+ help="String for the gw_data_find --urltype option. \
483
+ Use 'file' if creating SFTs on a local LDG cluster. \
484
+ Use 'osdf' if creating SFTs on the open science grid",
485
+ )
486
+ datafind_group.add_argument(
487
+ "-e",
488
+ "--cache-file",
489
+ type=Path,
490
+ help="path and filename to frame cache file to use instead \
491
+ of gw_data_find",
492
+ )
493
+
494
+ makesfts_group.add_argument(
495
+ "-O",
496
+ "--observing-run",
497
+ required=True,
498
+ type=int,
499
+ help="For public SFTs, observing run data the SFTs are generated from, or \
500
+ (in the case of mock data challenge data) the observing \
501
+ run on which the data is most closely based",
502
+ )
503
+ makesfts_group.add_argument(
504
+ "-K",
505
+ "--observing-kind",
506
+ type=str,
507
+ choices=["RUN", "AUX", "SIM", "DEV"],
508
+ help='For public SFTs, one of: "RUN" for production SFTs of h(t) channels; \
509
+ "AUX" for SFTs of non-h(t) channels; \
510
+ "SIM" for mock data challenge or other simulated data; or \
511
+ "DEV" for development/testing purposes',
512
+ )
513
+ makesfts_group.add_argument(
514
+ "-R",
515
+ "--observing-revision",
516
+ type=int,
517
+ help="For public SFTs: revision number starts at 1, and should be incremented once \
518
+ SFTs have been widely distributed across clusters, advertised \
519
+ as being ready for use, etc. For example, if mistakes are found \
520
+ in the initial SFT production run after they have been published, \
521
+ regenerated SFTs should have a revision number of at least 2",
522
+ )
523
+ makesfts_group.add_argument(
524
+ "-X",
525
+ "--misc-desc",
526
+ type=str,
527
+ help="For private SFTs, miscellaneous part of the SFT \
528
+ description field in the filename",
529
+ )
530
+ makesfts_group.add_argument(
531
+ "-k",
532
+ "--filter-knee-freq",
533
+ required=True,
534
+ type=float,
535
+ help="high pass filter knee frequency used on time domain \
536
+ data before generating SFTs",
537
+ )
538
+ makesfts_group.add_argument(
539
+ "-T",
540
+ "--time-baseline",
541
+ required=True,
542
+ type=int,
543
+ help="time baseline of SFTs (e.g., 60 or 1800 seconds)",
544
+ )
545
+ makesfts_group.add_argument(
546
+ "-p",
547
+ "--output-sft-path",
548
+ nargs="+",
549
+ type=Path,
550
+ help="Path where to save the SFT files. Can specify multiple options, \
551
+ If specifying multiple options then it is required to specify the \
552
+ same number of output-sft-path options as the number of channels. \
553
+ The first listed channel will have the SFTs go into the first \
554
+ listed output-sft-path. Otherwise specify only one output path. \
555
+ If one path is specified and more than 1 channels are specified \
556
+ then --observing-run must be >= 1 and --observing-kind and \
557
+ --observing-revision must be set",
558
+ )
559
+ makesfts_group.add_argument(
560
+ "-C",
561
+ "--cache-path",
562
+ type=Path,
563
+ default="cache",
564
+ help="path to cache files that will be produced by \
565
+ gw_data_find (default is $PWD/cache; this directory is \
566
+ created if it does not exist and must agree with that \
567
+ given in .sub files)",
568
+ )
569
+ makesfts_group.add_argument(
570
+ "-N",
571
+ "--channel-name",
572
+ nargs="+",
573
+ type=str,
574
+ help="Name of input time-domain channel to read from frames. \
575
+ Can specify multiple options. The number of channels must be \
576
+ equal to the number of output-sft-path options given. The \
577
+ first listed channel will have the SFTs go to the first listed \
578
+ output-sft-path. Can only specify one channel when generating \
579
+ private SFTs (--observing-run=0)",
580
+ )
581
+ makesfts_group.add_argument(
582
+ "-c", "--comment-field", type=str, help="comment for SFT header"
583
+ )
584
+ makesfts_group.add_argument(
585
+ "-F", "--start-freq", type=int, default=10, help="start frequency of the SFTs"
586
+ )
587
+ makesfts_group.add_argument(
588
+ "-B", "--band", type=int, default=1990, help="frequency band of the SFTs"
589
+ )
590
+ makesfts_group.add_argument(
591
+ "-w",
592
+ "--window-type",
593
+ type=str,
594
+ default="tukey:0.001",
595
+ help='type of windowing of time-domain to do \
596
+ before generating SFTs, e.g. "rectangular", \
597
+ "hann", "tukey:<beta in [0,1], required>"; \
598
+ (default is "tukey:0.001", standard choice for LVK production SFTs)',
599
+ )
600
+ makesfts_group.add_argument(
601
+ "-P",
602
+ "--overlap-fraction",
603
+ type=float,
604
+ default=0,
605
+ help="overlap fraction (for use with windows; e.g., use \
606
+ --overlap-fraction 0.5 with --window-type hann windows)",
607
+ )
608
+ makesfts_group.add_argument(
609
+ "--allow-skipping",
610
+ action="store_true",
611
+ help="allow channels to be skipped if not in frames or too low sampling \
612
+ frequency",
613
+ )
614
+ makesfts_group.add_argument(
615
+ "--no-validate",
616
+ dest="validate",
617
+ action="store_false",
618
+ help="do not validate created SFTs",
619
+ )
620
+
621
+ ##### DEPRECATED OPTIONS #####
622
+ class DeprecateAction(argparse.Action):
623
+ def __call__(self, parser, namespace, values, option_string=None):
624
+ parser.error(
625
+ f"Argument {self.option_strings} has been deprecated in lalpulsar_MakeSFTs"
626
+ )
627
+
628
+
629
+ deprecated_group.add_argument(
630
+ "-u",
631
+ "--frame-struct-type",
632
+ nargs=0,
633
+ action=DeprecateAction,
634
+ help="DEPRECATED. No longer required; \
635
+ the frame channel type is determined automatically",
636
+ )
637
+ deprecated_group.add_argument(
638
+ "-H",
639
+ "--use-hoft",
640
+ nargs=0,
641
+ action=DeprecateAction,
642
+ help="DEPRECATED. No longer required; \
643
+ the frame channel type is determined automatically",
644
+ )
645
+ deprecated_group.add_argument(
646
+ "-i",
647
+ "--ifo",
648
+ nargs=0,
649
+ action=DeprecateAction,
650
+ help="DEPRECATED. No longer required; \
651
+ the detector prefix is deduced from the channel name",
652
+ )
653
+ deprecated_group.add_argument(
654
+ "-D",
655
+ "--make-gps-dirs",
656
+ nargs=0,
657
+ action=DeprecateAction,
658
+ help="DEPRECATED. No longer supported",
659
+ )
660
+ deprecated_group.add_argument(
661
+ "-Z",
662
+ "--make-tmp-file",
663
+ nargs=0,
664
+ action=DeprecateAction,
665
+ help="DEPRECATED. Default behaviour",
666
+ )
667
+ deprecated_group.add_argument(
668
+ "-v",
669
+ "--sft-version",
670
+ nargs=0,
671
+ action=DeprecateAction,
672
+ help="DEPRECATED. No longer supported",
673
+ )
674
+ deprecated_group.add_argument(
675
+ "-S",
676
+ "--use-single",
677
+ nargs=0,
678
+ action=DeprecateAction,
679
+ help="DEPRECATED. No longer supported",
680
+ )
681
+ deprecated_group.add_argument(
682
+ "-q",
683
+ "--list-of-nodes",
684
+ type=str,
685
+ action=DeprecateAction,
686
+ help="DEPCRECATED. No longer supported",
687
+ )
688
+ deprecated_group.add_argument(
689
+ "-Q",
690
+ "--node-path",
691
+ type=Path,
692
+ action=DeprecateAction,
693
+ help="DEPCRECATED. No longer supported",
694
+ )
695
+ deprecated_group.add_argument(
696
+ "-r",
697
+ "--output-jobs-per-node",
698
+ type=int,
699
+ default=0,
700
+ action=DeprecateAction,
701
+ help="DEPRECATED. No longer supported",
702
+ )
703
+
704
+ args = parser.parse_args()
705
+
706
+ # Some basic argument value checking
707
+ if args.observing_run < 0:
708
+ raise parser.error("--observing-run must be >= 0")
709
+
710
+ if args.observing_run > 0 and not args.observing_kind:
711
+ raise parser.error("--observing-run requires --observing-kind")
712
+
713
+ if args.observing_run > 0 and not args.observing_revision:
714
+ raise parser.error("--observing-run requires --observing-revision")
715
+
716
+ if args.observing_revision and args.observing_revision <= 0:
717
+ raise parser.error("--observing-revision must be > 0")
718
+
719
+ if args.observing_run > 0 and args.misc_desc:
720
+ raise parser.error(
721
+ f"--observing-run={args.observing_run} incompatible with --misc-desc"
722
+ )
723
+
724
+ if args.misc_desc and not re.compile(r"^[A-Za-z0-9]+$").match(args.misc_desc):
725
+ raise parser.error("--misc-desc may only contain A-Z, a-z, 0-9 characters")
726
+
727
+ if args.extra_datafind_time < 0:
728
+ raise parser.error("--extra-datafind-time must be >= 0")
729
+
730
+ if args.filter_knee_freq < 0:
731
+ raise parser.error("--filter-knee-freq must be >= 0")
732
+
733
+ if args.time_baseline <= 0:
734
+ raise parser.error("--time-baseline must be > 0")
735
+
736
+ if args.overlap_fraction < 0.0 or args.overlap_fraction >= 1.0:
737
+ raise parser.error("--overlap-fraction must be in the range [0,1)")
738
+
739
+ if args.start_freq < 0.0 or args.start_freq >= 7192.0:
740
+ raise parser.error("--start-freq must be in the range [0,7192)")
741
+
742
+ if args.band <= 0 or args.band >= 8192.0:
743
+ raise parser.error("--band must be in the range (0,8192)")
744
+
745
+ if args.start_freq + args.band >= 8192.0:
746
+ raise parser.error("--start-freq + --band must be < 8192")
747
+
748
+ if args.max_num_per_node <= 0:
749
+ raise parser.error("--max-num-per-node must be > 0")
750
+
751
+ if (
752
+ len(args.channel_name) != len(args.output_sft_path)
753
+ and len(args.output_sft_path) != 1
754
+ ):
755
+ raise parser.error(
756
+ "--channel-name and --output-sft-path must be the "
757
+ "same length or --output-sft-path must be length of 1"
758
+ )
759
+
760
+ if len(args.channel_name) > 1 and args.observing_run == 0:
761
+ raise parser.error(
762
+ "When creating SFTs from multiple channels, public SFT naming "
763
+ "convention must be used: --observing-run > 0 and set "
764
+ "--observing-kind and --observing-revision"
765
+ )
766
+
767
+ if args.datafind_urltype == "osdf" and not args.transfer_frame_files:
768
+ raise parser.error(
769
+ "--transfer-frame-files must be specified when --datafind-urltype=osdf"
770
+ )
771
+
772
+ # Set executables for lalpulsar_MakeSFTs, and lalpulsar_MoveSFTs
773
+ makeSFTsExe = "lalpulsar_MakeSFTs"
774
+ if args.makesfts_path:
775
+ if args.makesfts_path.is_file():
776
+ makeSFTsExe = args.makesfts_path
777
+ else:
778
+ makeSFTsExe = args.makesfts_path / makeSFTsExe
779
+ elif "MAKESFTS_PATH" in os.environ:
780
+ makeSFTsExe = Path("$ENV(MAKESFTS_PATH)") / makeSFTsExe
781
+ else:
782
+ makeSFTsExe = Path("/builds/lscsoft/lalsuite/wheel/build/inst/bin") / makeSFTsExe
783
+
784
+ moveSFTsExe = "lalpulsar_MoveSFTs"
785
+ if args.movesfts_path:
786
+ if args.movesfts_path.is_file():
787
+ moveSFTsExe = args.movesfts_path
788
+ else:
789
+ moveSFTsExe = args.movesfts_path / moveSFTsExe
790
+ elif "MOVESFTS_PATH" in os.environ:
791
+ moveSFTsExe = Path("$ENV(MOVESFTS_PATH)") / moveSFTsExe
792
+ else:
793
+ moveSFTsExe = Path("/builds/lscsoft/lalsuite/wheel/build/inst/bin") / moveSFTsExe
794
+
795
+ # make directories to store the cache files, job logs, and SFTs
796
+ args.log_path.mkdir(exist_ok=True)
797
+ args.cache_path.mkdir(exist_ok=True)
798
+ for p in args.output_sft_path:
799
+ p.mkdir(exist_ok=True)
800
+
801
+ # Check if segment file was given, else set up one segment from the command line
802
+ segList = segmentlist()
803
+ adjustSegExtraTime = False
804
+ if args.segment_file is not None:
805
+ if args.min_seg_length < 0:
806
+ raise parser.error("--min-seg-length must be >= 0")
807
+
808
+ # the next flag causes extra time that cannot be processes to be trimmed
809
+ # from the start and end of a segment
810
+ adjustSegExtraTime = True
811
+
812
+ with open(args.segment_file) as fp_segfile:
813
+ for idx, line in enumerate(fp_segfile):
814
+ splitLine = line.split()
815
+ oneSeg = segment(int(splitLine[0]), int(splitLine[1]))
816
+ if abs(oneSeg) >= args.min_seg_length:
817
+ segList.append(oneSeg)
818
+
819
+ if len(segList) < 1:
820
+ raise ValueError(f"No segments found in segment file: {args.segment_file}")
821
+ else:
822
+ if args.analysis_start_time is None:
823
+ raise parser.error(
824
+ "--analysis-start-time must be specified if no segment file is " "given"
825
+ )
826
+
827
+ if args.analysis_end_time is None:
828
+ raise parser.error(
829
+ "--analysis-start-time must be specified if no segment file is " "given"
830
+ )
831
+
832
+ if args.max_length_all_jobs is None:
833
+ raise parser.error(
834
+ "--max-length-all-jobs must be specified if no segment file is " "given"
835
+ )
836
+
837
+ # Make sure not to exceed maximum allow analysis
838
+ if args.analysis_end_time > (args.analysis_start_time + args.max_length_all_jobs):
839
+ args.analysis_end_time = args.analysis_start_time + args.max_length_all_jobs
840
+
841
+ oneSeg = segment(args.analysis_start_time, args.analysis_end_time)
842
+ segList.append(oneSeg)
843
+ # END if (args.segment_file != None)
844
+ segList.coalesce()
845
+
846
+ # Get the IFO site, which is the first letter of the channel name.
847
+ site = args.channel_name[0][0]
848
+
849
+ # Get the frame file URL list
850
+ urls = get_urls(args)
851
+
852
+ # Basic check that the frame file url list are traditionally visible on EPs
853
+ if not args.transfer_frame_files:
854
+ for f in urls:
855
+ if "/home" in f:
856
+ raise parser.error(
857
+ "--transfer-frame-files must be specified when frame files are in /home"
858
+ )
859
+
860
+ # data segments created from the list of frame URLs
861
+ dataSegs = segmentlist()
862
+ for url in urls:
863
+ dataSegs.append(file_segment(url))
864
+ dataSegs.coalesce()
865
+
866
+ # intersection of segList with dataSegs
867
+ segList &= dataSegs
868
+ segList.coalesce() # just in case
869
+
870
+ # initialize count of nodes
871
+ nodeCount = 0
872
+
873
+ # Create .sub files
874
+ path_to_dag_file = args.dag_file.parent
875
+ dag_filename = args.dag_file.name
876
+ makesfts_sub = path_to_dag_file / "MakeSFTs.sub"
877
+ movesfts_sub = path_to_dag_file / "MoveSFTs.sub"
878
+
879
+ # create MakeSFTs.sub
880
+ with open(makesfts_sub, "w") as MakeSFTsFID:
881
+ MakeSFTsLogFile = f"{args.log_path}/MakeSFTs_{dag_filename}.log"
882
+ MakeSFTsFID.write("universe = vanilla\n")
883
+ MakeSFTsFID.write(f"executable = {makeSFTsExe}\n")
884
+ MakeSFTsFID.write("arguments = $(argList)\n")
885
+ MakeSFTsFID.write(f"accounting_group = {args.accounting_group}\n")
886
+ MakeSFTsFID.write(f"accounting_group_user = {args.accounting_group_user}\n")
887
+ MakeSFTsFID.write(f"log = {MakeSFTsLogFile}\n")
888
+ MakeSFTsFID.write(f"error = {args.log_path}/MakeSFTs_$(tagstring).err\n")
889
+ MakeSFTsFID.write(f"output = {args.log_path}/MakeSFTs_$(tagstring).out\n")
890
+ MakeSFTsFID.write("notification = never\n")
891
+ MakeSFTsFID.write(f"request_memory = {args.request_memory}MB\n")
892
+ MakeSFTsFID.write(f"request_disk = {args.request_disk}MB\n")
893
+ MakeSFTsFID.write("RequestCpus = 1\n")
894
+ MakeSFTsFID.write("should_transfer_files = yes\n")
895
+ if args.transfer_frame_files:
896
+ MakeSFTsFID.write("transfer_input_files = $(cachefile),$(framefiles)\n")
897
+ else:
898
+ MakeSFTsFID.write("transfer_input_files = $(cachefile)\n")
899
+ if "MAKESFTS_PATH" in os.environ and not args.makesfts_path:
900
+ MakeSFTsFID.write("getenv = MAKESFTS_PATH\n")
901
+ if args.datafind_urltype == "osdf":
902
+ MakeSFTsFID.write("use_oauth_services = scitokens\n")
903
+ MakeSFTsFID.write(
904
+ "environment = BEARER_TOKEN_FILE=$$(CondorScratchDir)/.condor_creds/scitokens.use\n"
905
+ )
906
+ MakeSFTsFID.write("queue 1\n")
907
+
908
+ # create MoveSFTs.sub
909
+ with open(movesfts_sub, "w") as MoveSFTsFID:
910
+ MoveSFTsLogFile = f"{args.log_path}/MoveSFTs_{dag_filename}.log"
911
+ MoveSFTsFID.write("universe = local\n")
912
+ MoveSFTsFID.write(f"executable = {moveSFTsExe}\n")
913
+ MoveSFTsFID.write("arguments = ")
914
+ if not args.validate:
915
+ MoveSFTsFID.write("$(opts) ")
916
+ MoveSFTsFID.write("-s $(sourcedirectory) -c $(channels) -d $(destdirectory)\n")
917
+ MoveSFTsFID.write(f"accounting_group = {args.accounting_group}\n")
918
+ MoveSFTsFID.write(f"accounting_group_user = {args.accounting_group_user}\n")
919
+ MoveSFTsFID.write(f"log = {MoveSFTsLogFile}\n")
920
+ MoveSFTsFID.write(f"error = {args.log_path}/MoveSFTs.err\n")
921
+ MoveSFTsFID.write(f"output = {args.log_path}/MoveSFTs.out\n")
922
+ MoveSFTsFID.write("notification = never\n")
923
+ MoveSFTsFID.write(f"request_memory = 1GB\n")
924
+ MoveSFTsFID.write(f"request_disk = 10MB\n")
925
+ MoveSFTsFID.write("RequestCpus = 1\n")
926
+ if "MOVESFTS_PATH" in os.environ and not args.movesfts_path:
927
+ MoveSFTsFID.write("getenv = MOVESFTS_PATH\n")
928
+ MoveSFTsFID.write("queue 1\n")
929
+
930
+ # create the DAG file with the jobs to run
931
+ with open(args.dag_file, "w") as dagFID:
932
+ startTimeAllNodes = None
933
+ firstSFTstartTime = 0 # need this for the synchronized start option
934
+
935
+ # Loop over the segment list to generate the SFTs for each segment
936
+ for seg in segList:
937
+ # Each segment in the segList runs on one or more nodes;
938
+ # initialize the number SFTs produced by the current node:
939
+ numThisNode = 0
940
+ numThisSeg = 0
941
+
942
+ # Case 1: a segment file was given but the SFTs do not need their
943
+ # start times to be synchronized
944
+ if adjustSegExtraTime and not args.synchronize_start:
945
+ segStartTime = seg[0]
946
+ segEndTime = seg[1]
947
+
948
+ # First we figure out how much extra time is in the segment so that
949
+ # SFTs are fit within the segment:
950
+ # |..<SFT><SFT><SFT>..|
951
+ # where the .. represent the extra time in the segment
952
+ # The amount of extra time in a segment is given as the remainder
953
+ # of (total segment time) / (SFT time baseline)
954
+ segExtraTime = (segEndTime - segStartTime) % args.time_baseline
955
+
956
+ # If there is overlap of SFTs requested, then we compute the extra
957
+ # time as:
958
+ # the remainder of (end - start - Tsft) / (non-overlap time)
959
+ # provided there was at least one SFT that is in the segment
960
+ if args.overlap_fraction != 0.0:
961
+ if (segEndTime - segStartTime) > args.time_baseline:
962
+ segExtraTime = (
963
+ segEndTime - segStartTime - args.time_baseline
964
+ ) % int((1.0 - args.overlap_fraction) * args.time_baseline)
965
+
966
+ # We'll add half the extra time to the start of the SFTs to be
967
+ # created in this segment and half at the end
968
+ segExtraStart = int(segExtraTime / 2)
969
+ segExtraEnd = segExtraTime - segExtraStart
970
+ args.analysis_start_time = segStartTime + segExtraStart
971
+
972
+ # This shift may have pushed past the end time of the segment. In
973
+ # that case, just fix the start time to the end time of the segment
974
+ if args.analysis_start_time > segEndTime:
975
+ args.analysis_start_time = segEndTime
976
+
977
+ # shifting the end time by the other portion of the extra time
978
+ # amount ...
979
+ args.analysis_end_time = segEndTime - segExtraEnd
980
+
981
+ # Again, this shift could have pushed the end time beyond the start
982
+ # of the segment, so just fix the end time to the segment start
983
+ if args.analysis_end_time < segStartTime:
984
+ args.analysis_end_time = segStartTime
985
+
986
+ # Case 2: SFTs need a synchronized start. This is a special case for
987
+ # methods like TwoSpect, where signal periodicity spacing must be
988
+ # maintained
989
+ elif args.synchronize_start:
990
+ segStartTime = seg[0]
991
+ segEndTime = seg[1]
992
+
993
+ # If we haven't set the first SFT start time, then set it equal to
994
+ # the start time of the first segment
995
+ if firstSFTstartTime == 0:
996
+ firstSFTstartTime = segStartTime
997
+
998
+ # This is a tricky bit of math to set the start time based on when
999
+ # the first SFT start time of all the segments
1000
+ args.analysis_start_time = (
1001
+ int(
1002
+ round(
1003
+ math.ceil(
1004
+ (segStartTime - firstSFTstartTime)
1005
+ / ((1.0 - args.overlap_fraction) * args.time_baseline)
1006
+ )
1007
+ * (1.0 - args.overlap_fraction)
1008
+ * args.time_baseline
1009
+ )
1010
+ )
1011
+ + firstSFTstartTime
1012
+ )
1013
+
1014
+ # This shift may have pushed past the end time of the segment. In
1015
+ # that case, just fix the start time to the end time of the segment
1016
+ if args.analysis_start_time > segEndTime:
1017
+ args.analysis_start_time = segEndTime
1018
+
1019
+ # This is a tricky bit of math to set the end time based on when
1020
+ # the first SFT start time of all the segments
1021
+ args.analysis_end_time = (
1022
+ int(
1023
+ round(
1024
+ math.floor(
1025
+ (segEndTime - args.analysis_start_time - args.time_baseline)
1026
+ / ((1.0 - args.overlap_fraction) * args.time_baseline)
1027
+ )
1028
+ * (1.0 - args.overlap_fraction)
1029
+ * args.time_baseline
1030
+ )
1031
+ )
1032
+ + args.time_baseline
1033
+ + args.analysis_start_time
1034
+ )
1035
+
1036
+ # Again, this shift could have pushed the end time beyond the start
1037
+ # of the segment, so just fix the end time to the segment start
1038
+ if args.analysis_end_time < segStartTime:
1039
+ args.analysis_end_time = segStartTime
1040
+
1041
+ # If no segment file given and no synchronized starts, just set the
1042
+ # start time and end time to the segment start and end
1043
+ else:
1044
+ args.analysis_start_time = seg[0]
1045
+ args.analysis_end_time = seg[1]
1046
+
1047
+ # Loop through the analysis time; make sure no more than
1048
+ # args.max_num_per_node SFTs are produced by any one node
1049
+ startTimeThisNode = args.analysis_start_time
1050
+ endTimeThisNode = args.analysis_start_time
1051
+ endTimeAllNodes = args.analysis_start_time
1052
+ while endTimeAllNodes < args.analysis_end_time:
1053
+ # increment endTimeAllNodes by the args.time_baseline until we get
1054
+ # past the args.analysis_end_time
1055
+ if args.overlap_fraction != 0.0:
1056
+ # handle overlap
1057
+ if numThisSeg == 0:
1058
+ endTimeAllNodes = endTimeAllNodes + args.time_baseline
1059
+ else:
1060
+ endTimeAllNodes = endTimeAllNodes + int(
1061
+ (1.0 - args.overlap_fraction) * args.time_baseline
1062
+ )
1063
+ else:
1064
+ # default case, no overlap
1065
+ endTimeAllNodes = endTimeAllNodes + args.time_baseline
1066
+ if endTimeAllNodes <= args.analysis_end_time:
1067
+ # increment the number of SFTs output from this node, and
1068
+ # update the end time this node.
1069
+ numThisNode = numThisNode + 1
1070
+ numThisSeg = numThisSeg + 1
1071
+ endTimeThisNode = endTimeAllNodes
1072
+ if numThisNode < args.max_num_per_node:
1073
+ continue
1074
+ else:
1075
+ # write jobs to dag for this node
1076
+ nodeCount = nodeCount + 1
1077
+
1078
+ if nodeCount == 1:
1079
+ startTimeAllNodes = startTimeThisNode
1080
+ writeToDag(
1081
+ dagFID,
1082
+ nodeCount,
1083
+ startTimeThisNode,
1084
+ endTimeThisNode,
1085
+ urls,
1086
+ args,
1087
+ )
1088
+ # Update for next node
1089
+ numThisNode = 0
1090
+ if args.overlap_fraction != 0.0:
1091
+ # handle overlap
1092
+ startTimeThisNode = endTimeThisNode - int(
1093
+ (args.overlap_fraction) * args.time_baseline
1094
+ )
1095
+ else:
1096
+ # default case, no overlap
1097
+ startTimeThisNode = endTimeThisNode
1098
+ else:
1099
+ # we are at or past the args.analysis_end_time; output job for last
1100
+ # node if needed.
1101
+ if numThisNode > 0:
1102
+ # write jobs to dag for this node
1103
+ nodeCount = nodeCount + 1
1104
+
1105
+ if nodeCount == 1:
1106
+ startTimeAllNodes = startTimeThisNode
1107
+ writeToDag(
1108
+ dagFID, nodeCount, startTimeThisNode, endTimeThisNode, urls, args
1109
+ )
1110
+ # END while (endTimeAllNodes < args.analysis_end_time)
1111
+ # END for seg in segList
1112
+
1113
+ # Write the move SFTs job to the DAG
1114
+ # Move SFTs
1115
+ dagFID.write(f"JOB MoveSFTs {Path(dagFID.name).parent / 'MoveSFTs.sub'}\n")
1116
+ dagFID.write(f"RETRY MoveSFTs 1\n")
1117
+ dagFID.write(f"VARS MoveSFTs ")
1118
+ if not args.validate:
1119
+ dagFID.write('opts="--no-validate" ')
1120
+ dagFID.write(
1121
+ f'sourcedirectory="." '
1122
+ f"channels=\"{' '.join(args.channel_name)}\" "
1123
+ f"destdirectory=\"{' '.join([str(p) for p in args.output_sft_path])}\"\n"
1124
+ )
1125
+ dagFID.write(
1126
+ f"PARENT {' '.join([f'MakeSFTs_{n}' for n in range(1, nodeCount+1)])} CHILD MoveSFTs\n"
1127
+ )
1128
+
1129
+ # Close the DAG file
1130
+
1131
+ # Update actual end time of the last job and print out the times all jobs will run on:
1132
+ endTimeAllNodes = endTimeThisNode
1133
+
1134
+ if startTimeAllNodes is None:
1135
+ raise Exception("The startTimeAllNodes == none; the DAG file contains no jobs!")
1136
+
1137
+ if endTimeAllNodes <= startTimeAllNodes:
1138
+ raise Exception(
1139
+ "The endTimeAllNodes <= startTimeAllNodes; the DAG file contains no jobs!"
1140
+ )
1141
+
1142
+ print(startTimeAllNodes, endTimeAllNodes)