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.
- lal/__init__.py +145 -0
- lal/_lal.cpython-314t-x86_64-linux-gnu.so +0 -0
- lal/_lal_swig.py +12 -0
- lal/antenna.py +1200 -0
- lal/git_version.py +64 -0
- lal/gpstime.py +233 -0
- lal/iterutils.py +408 -0
- lal/pipeline.py +3139 -0
- lal/rate.py +2455 -0
- lal/series.py +244 -0
- lal/utils/__init__.py +29 -0
- lal/utils/cache.py +379 -0
- lal/utils/series.py +277 -0
- lalapps/__init__.py +26 -0
- lalapps/bin/lal_cache +0 -0
- lalapps/bin/lal_fftw_wisdom +0 -0
- lalapps/bin/lal_fftwf_wisdom +0 -0
- lalapps/bin/lal_simd_detect +0 -0
- lalapps/bin/lal_tconvert +0 -0
- lalapps/bin/lal_version +0 -0
- lalapps/bin/lalapps_ComputeAntennaPattern +16 -0
- lalapps/bin/lalapps_ComputeFstatBenchmark +16 -0
- lalapps/bin/lalapps_ComputeFstatLatticeCount +16 -0
- lalapps/bin/lalapps_ComputeFstatMCUpperLimit +16 -0
- lalapps/bin/lalapps_ComputeFstatistic_v2 +16 -0
- lalapps/bin/lalapps_ComputePSD +16 -0
- lalapps/bin/lalapps_CopySFTs +16 -0
- lalapps/bin/lalapps_DistanceVsMass +0 -0
- lalapps/bin/lalapps_DriveHoughMulti +16 -0
- lalapps/bin/lalapps_FstatMetric_v2 +16 -0
- lalapps/bin/lalapps_HierarchSearchGCT +16 -0
- lalapps/bin/lalapps_HierarchicalSearch +16 -0
- lalapps/bin/lalapps_MakeSFTDAG +16 -0
- lalapps/bin/lalapps_MakeSFTs +16 -0
- lalapps/bin/lalapps_Makefakedata_v4 +16 -0
- lalapps/bin/lalapps_Makefakedata_v5 +16 -0
- lalapps/bin/lalapps_PredictFstat +16 -0
- lalapps/bin/lalapps_PrintDetectorState +16 -0
- lalapps/bin/lalapps_SFTclean +16 -0
- lalapps/bin/lalapps_SFTvalidate +16 -0
- lalapps/bin/lalapps_StringAddFrame +0 -0
- lalapps/bin/lalapps_StringSearch +0 -0
- lalapps/bin/lalapps_Weave +16 -0
- lalapps/bin/lalapps_WeaveCompare +16 -0
- lalapps/bin/lalapps_WeaveConcat +16 -0
- lalapps/bin/lalapps_WeaveSetup +16 -0
- lalapps/bin/lalapps_WriteSFTsfromSFDBs +16 -0
- lalapps/bin/lalapps_animate +0 -0
- lalapps/bin/lalapps_binj +0 -0
- lalapps/bin/lalapps_blindinj +0 -0
- lalapps/bin/lalapps_cache +16 -0
- lalapps/bin/lalapps_calfacs +0 -0
- lalapps/bin/lalapps_cbc_stochasticbank +0 -0
- lalapps/bin/lalapps_chirplen +0 -0
- lalapps/bin/lalapps_coh_PTF_inspiral +0 -0
- lalapps/bin/lalapps_coinj +0 -0
- lalapps/bin/lalapps_combine_crosscorr_toplists +16 -0
- lalapps/bin/lalapps_compareFstats +16 -0
- lalapps/bin/lalapps_compareSFTs +16 -0
- lalapps/bin/lalapps_create_time_correction_ephemeris +16 -0
- lalapps/bin/lalapps_dumpSFT +16 -0
- lalapps/bin/lalapps_effdist +0 -0
- lalapps/bin/lalapps_exc_resp +0 -0
- lalapps/bin/lalapps_fftw_wisdom +16 -0
- lalapps/bin/lalapps_fftwf_wisdom +16 -0
- lalapps/bin/lalapps_fits_header_getval +16 -0
- lalapps/bin/lalapps_fits_header_list +16 -0
- lalapps/bin/lalapps_fits_overview +16 -0
- lalapps/bin/lalapps_fits_table_list +16 -0
- lalapps/bin/lalapps_fr_ninja +0 -0
- lalapps/bin/lalapps_frextr +0 -0
- lalapps/bin/lalapps_frinfo +0 -0
- lalapps/bin/lalapps_frjoin +0 -0
- lalapps/bin/lalapps_frread +0 -0
- lalapps/bin/lalapps_frview +0 -0
- lalapps/bin/lalapps_gwf2xml +0 -0
- lalapps/bin/lalapps_heterodyne_pulsar +16 -0
- lalapps/bin/lalapps_inspawgfile +0 -0
- lalapps/bin/lalapps_inspfrinj +0 -0
- lalapps/bin/lalapps_inspinj +0 -0
- lalapps/bin/lalapps_inspiralDistance +0 -0
- lalapps/bin/lalapps_knope +16 -0
- lalapps/bin/lalapps_knope_automation_script +16 -0
- lalapps/bin/lalapps_knope_collate_results +16 -0
- lalapps/bin/lalapps_knope_result_page +16 -0
- lalapps/bin/lalapps_makeblindinj +85 -0
- lalapps/bin/lalapps_makeblindinj_himass +67 -0
- lalapps/bin/lalapps_ninja +0 -0
- lalapps/bin/lalapps_path2cache +16 -0
- lalapps/bin/lalapps_power +0 -0
- lalapps/bin/lalapps_pulsar_crosscorr_v2 +16 -0
- lalapps/bin/lalapps_pulsar_frequency_evolution +16 -0
- lalapps/bin/lalapps_pulsar_parameter_estimation_nested +16 -0
- lalapps/bin/lalapps_random_bank +0 -0
- lalapps/bin/lalapps_randombank +0 -0
- lalapps/bin/lalapps_run_pulsar_crosscorr_v2 +16 -0
- lalapps/bin/lalapps_searchsum2cache +16 -0
- lalapps/bin/lalapps_spec_avg +16 -0
- lalapps/bin/lalapps_spec_avg_long +16 -0
- lalapps/bin/lalapps_spec_coherence +16 -0
- lalapps/bin/lalapps_spininj +0 -0
- lalapps/bin/lalapps_splitSFTs +16 -0
- lalapps/bin/lalapps_splitbank +0 -0
- lalapps/bin/lalapps_ssbtodetector +16 -0
- lalapps/bin/lalapps_synthesizeBstatMC +16 -0
- lalapps/bin/lalapps_synthesizeLVStats +16 -0
- lalapps/bin/lalapps_synthesizeTransientStats +16 -0
- lalapps/bin/lalapps_tconvert +16 -0
- lalapps/bin/lalapps_tmpltbank +0 -0
- lalapps/bin/lalapps_version +0 -0
- lalapps/bin/lalapps_xtefitstoframe +0 -0
- lalapps/bin/lalburst_version +0 -0
- lalapps/bin/lalfr-cat +0 -0
- lalapps/bin/lalfr-cksum +0 -0
- lalapps/bin/lalfr-cut +0 -0
- lalapps/bin/lalfr-dump +0 -0
- lalapps/bin/lalfr-fmt +0 -0
- lalapps/bin/lalfr-paste +0 -0
- lalapps/bin/lalfr-print +0 -0
- lalapps/bin/lalfr-split +0 -0
- lalapps/bin/lalfr-stat +0 -0
- lalapps/bin/lalfr-stream +0 -0
- lalapps/bin/lalfr-vis +0 -0
- lalapps/bin/lalframe_version +0 -0
- lalapps/bin/lalinference_bench +0 -0
- lalapps/bin/lalinference_burst +0 -0
- lalapps/bin/lalinference_datadump +0 -0
- lalapps/bin/lalinference_injectedlike +0 -0
- lalapps/bin/lalinference_mpi_wrapper +59 -0
- lalapps/bin/lalinference_nest +0 -0
- lalapps/bin/lalinference_version +0 -0
- lalapps/bin/lalinspiral_version +0 -0
- lalapps/bin/lalmetaio_version +0 -0
- lalapps/bin/lalpulsar_ComputeAntennaPattern +0 -0
- lalapps/bin/lalpulsar_ComputeFstatBenchmark +0 -0
- lalapps/bin/lalpulsar_ComputeFstatLatticeCount +0 -0
- lalapps/bin/lalpulsar_ComputeFstatMCUpperLimit +0 -0
- lalapps/bin/lalpulsar_ComputeFstatistic_v2 +0 -0
- lalapps/bin/lalpulsar_ComputePSD +0 -0
- lalapps/bin/lalpulsar_DriveHoughMulti +0 -0
- lalapps/bin/lalpulsar_FstatMetric_v2 +0 -0
- lalapps/bin/lalpulsar_HierarchSearchGCT +0 -0
- lalapps/bin/lalpulsar_HierarchicalSearch +0 -0
- lalapps/bin/lalpulsar_MakeSFTs +0 -0
- lalapps/bin/lalpulsar_Makefakedata_v4 +0 -0
- lalapps/bin/lalpulsar_Makefakedata_v5 +0 -0
- lalapps/bin/lalpulsar_PredictFstat +0 -0
- lalapps/bin/lalpulsar_PrintDetectorState +0 -0
- lalapps/bin/lalpulsar_SFTclean +0 -0
- lalapps/bin/lalpulsar_SFTvalidate +0 -0
- lalapps/bin/lalpulsar_Weave +0 -0
- lalapps/bin/lalpulsar_WeaveCompare +0 -0
- lalapps/bin/lalpulsar_WeaveConcat +0 -0
- lalapps/bin/lalpulsar_WeaveSetup +0 -0
- lalapps/bin/lalpulsar_WriteSFTsfromSFDBs +0 -0
- lalapps/bin/lalpulsar_compareFstats +0 -0
- lalapps/bin/lalpulsar_compareSFTs +0 -0
- lalapps/bin/lalpulsar_create_time_correction_ephemeris +0 -0
- lalapps/bin/lalpulsar_crosscorr_v2 +0 -0
- lalapps/bin/lalpulsar_dumpSFT +0 -0
- lalapps/bin/lalpulsar_fits_header_getval +0 -0
- lalapps/bin/lalpulsar_fits_header_list +0 -0
- lalapps/bin/lalpulsar_fits_overview +0 -0
- lalapps/bin/lalpulsar_fits_table_list +0 -0
- lalapps/bin/lalpulsar_frequency_evolution +0 -0
- lalapps/bin/lalpulsar_heterodyne +0 -0
- lalapps/bin/lalpulsar_parameter_estimation_nested +0 -0
- lalapps/bin/lalpulsar_spec_avg +0 -0
- lalapps/bin/lalpulsar_spec_avg_long +0 -0
- lalapps/bin/lalpulsar_spec_coherence +0 -0
- lalapps/bin/lalpulsar_splitSFTs +0 -0
- lalapps/bin/lalpulsar_ssbtodetector +0 -0
- lalapps/bin/lalpulsar_synthesizeBstatMC +0 -0
- lalapps/bin/lalpulsar_synthesizeLVStats +0 -0
- lalapps/bin/lalpulsar_synthesizeTransientStats +0 -0
- lalapps/bin/lalpulsar_version +0 -0
- lalapps/bin/lalsim-bh-qnmode +0 -0
- lalapps/bin/lalsim-bh-ringdown +0 -0
- lalapps/bin/lalsim-bh-sphwf +0 -0
- lalapps/bin/lalsim-burst +0 -0
- lalapps/bin/lalsim-detector-noise +0 -0
- lalapps/bin/lalsim-detector-strain +0 -0
- lalapps/bin/lalsim-inject +0 -0
- lalapps/bin/lalsim-inspiral +0 -0
- lalapps/bin/lalsim-ns-eos-table +0 -0
- lalapps/bin/lalsim-ns-mass-radius +0 -0
- lalapps/bin/lalsim-ns-params +0 -0
- lalapps/bin/lalsim-sgwb +0 -0
- lalapps/bin/lalsim-unicorn +0 -0
- lalapps/bin/lalsimulation_version +0 -0
- lalapps/cosmicstring.py +691 -0
- lalapps/data/BNSMasses.dat +65022 -0
- lalapps/data/CorrelationMatrix.csv +15 -0
- lalapps/data/LALSimNeutronStarEOS_ABHT_QMC_RMF1_META.dat +1882 -0
- lalapps/data/LALSimNeutronStarEOS_ABHT_QMC_RMF2_META.dat +1939 -0
- lalapps/data/LALSimNeutronStarEOS_ABHT_QMC_RMF3_META.dat +1784 -0
- lalapps/data/LALSimNeutronStarEOS_ABHT_QMC_RMF4_META.dat +2074 -0
- lalapps/data/LALSimNeutronStarEOS_ALF1.dat +435 -0
- lalapps/data/LALSimNeutronStarEOS_ALF2.dat +453 -0
- lalapps/data/LALSimNeutronStarEOS_ALF3.dat +441 -0
- lalapps/data/LALSimNeutronStarEOS_ALF4.dat +441 -0
- lalapps/data/LALSimNeutronStarEOS_AP1.dat +212 -0
- lalapps/data/LALSimNeutronStarEOS_AP2.dat +212 -0
- lalapps/data/LALSimNeutronStarEOS_AP3.dat +212 -0
- lalapps/data/LALSimNeutronStarEOS_AP4.dat +210 -0
- lalapps/data/LALSimNeutronStarEOS_APR.dat +500 -0
- lalapps/data/LALSimNeutronStarEOS_APR4_EPP.dat +1447 -0
- lalapps/data/LALSimNeutronStarEOS_BBB2.dat +84 -0
- lalapps/data/LALSimNeutronStarEOS_BGN1H1.dat +123 -0
- lalapps/data/LALSimNeutronStarEOS_BHF_BBB2.dat +499 -0
- lalapps/data/LALSimNeutronStarEOS_BL_CHIRAL_META.dat +1534 -0
- lalapps/data/LALSimNeutronStarEOS_BPAL12.dat +61 -0
- lalapps/data/LALSimNeutronStarEOS_BSK19.dat +310 -0
- lalapps/data/LALSimNeutronStarEOS_BSK20.dat +310 -0
- lalapps/data/LALSimNeutronStarEOS_BSK21.dat +310 -0
- lalapps/data/LALSimNeutronStarEOS_ENG.dat +108 -0
- lalapps/data/LALSimNeutronStarEOS_FPS.dat +129 -0
- lalapps/data/LALSimNeutronStarEOS_GMSR_BSK14_BSK24.dat +1010 -0
- lalapps/data/LALSimNeutronStarEOS_GMSR_DHSL59_BSK24.dat +1009 -0
- lalapps/data/LALSimNeutronStarEOS_GMSR_DHSL69_BSK24.dat +1009 -0
- lalapps/data/LALSimNeutronStarEOS_GMSR_F0_BSK24.dat +1010 -0
- lalapps/data/LALSimNeutronStarEOS_GMSR_H1_BSK24.dat +1009 -0
- lalapps/data/LALSimNeutronStarEOS_GMSR_H2_BSK24.dat +1010 -0
- lalapps/data/LALSimNeutronStarEOS_GMSR_H3_BSK24.dat +1010 -0
- lalapps/data/LALSimNeutronStarEOS_GMSR_H4_BSK24.dat +1010 -0
- lalapps/data/LALSimNeutronStarEOS_GMSR_H5_BSK24.dat +1009 -0
- lalapps/data/LALSimNeutronStarEOS_GMSR_LN55_BSK24.dat +1010 -0
- lalapps/data/LALSimNeutronStarEOS_GMSR_SLY5_BSK24.dat +1010 -0
- lalapps/data/LALSimNeutronStarEOS_GNH3.dat +71 -0
- lalapps/data/LALSimNeutronStarEOS_GPPVA_DD2_BSK24.dat +1009 -0
- lalapps/data/LALSimNeutronStarEOS_GPPVA_DDME2_BSK24.dat +1010 -0
- lalapps/data/LALSimNeutronStarEOS_GPPVA_FSU2H_BSK24.dat +1009 -0
- lalapps/data/LALSimNeutronStarEOS_GPPVA_FSU2_BSK24.dat +1010 -0
- lalapps/data/LALSimNeutronStarEOS_GPPVA_NL3WRL55_BSK24.dat +1010 -0
- lalapps/data/LALSimNeutronStarEOS_GS1.dat +136 -0
- lalapps/data/LALSimNeutronStarEOS_GS2.dat +100 -0
- lalapps/data/LALSimNeutronStarEOS_H1.dat +114 -0
- lalapps/data/LALSimNeutronStarEOS_H2.dat +114 -0
- lalapps/data/LALSimNeutronStarEOS_H3.dat +98 -0
- lalapps/data/LALSimNeutronStarEOS_H4.dat +664 -0
- lalapps/data/LALSimNeutronStarEOS_H5.dat +703 -0
- lalapps/data/LALSimNeutronStarEOS_H6.dat +509 -0
- lalapps/data/LALSimNeutronStarEOS_H7.dat +703 -0
- lalapps/data/LALSimNeutronStarEOS_HQC18.dat +388 -0
- lalapps/data/LALSimNeutronStarEOS_KDE0V.dat +500 -0
- lalapps/data/LALSimNeutronStarEOS_KDE0V1.dat +500 -0
- lalapps/data/LALSimNeutronStarEOS_KDE0V1_BSK24.dat +1388 -0
- lalapps/data/LALSimNeutronStarEOS_KDE0V_BSK24.dat +1398 -0
- lalapps/data/LALSimNeutronStarEOS_MPA1.dat +102 -0
- lalapps/data/LALSimNeutronStarEOS_MS1.dat +122 -0
- lalapps/data/LALSimNeutronStarEOS_MS1B.dat +126 -0
- lalapps/data/LALSimNeutronStarEOS_MS1B_PP.dat +1447 -0
- lalapps/data/LALSimNeutronStarEOS_MS1_PP.dat +1447 -0
- lalapps/data/LALSimNeutronStarEOS_MS2.dat +48 -0
- lalapps/data/LALSimNeutronStarEOS_PAL6.dat +148 -0
- lalapps/data/LALSimNeutronStarEOS_PCL2.dat +134 -0
- lalapps/data/LALSimNeutronStarEOS_PCP_BSK24_BSK24.dat +1010 -0
- lalapps/data/LALSimNeutronStarEOS_PS.dat +165 -0
- lalapps/data/LALSimNeutronStarEOS_QMC700.dat +117 -0
- lalapps/data/LALSimNeutronStarEOS_RG_SLY4_BSK24.dat +1010 -0
- lalapps/data/LALSimNeutronStarEOS_RS.dat +500 -0
- lalapps/data/LALSimNeutronStarEOS_RS_BSK24.dat +1356 -0
- lalapps/data/LALSimNeutronStarEOS_SK255.dat +500 -0
- lalapps/data/LALSimNeutronStarEOS_SK255_BSK24.dat +1066 -0
- lalapps/data/LALSimNeutronStarEOS_SK272.dat +500 -0
- lalapps/data/LALSimNeutronStarEOS_SKA.dat +500 -0
- lalapps/data/LALSimNeutronStarEOS_SKA_BSK24.dat +1433 -0
- lalapps/data/LALSimNeutronStarEOS_SKB.dat +500 -0
- lalapps/data/LALSimNeutronStarEOS_SKB_BSK24.dat +1373 -0
- lalapps/data/LALSimNeutronStarEOS_SKI2.dat +500 -0
- lalapps/data/LALSimNeutronStarEOS_SKI2_BSK24.dat +1348 -0
- lalapps/data/LALSimNeutronStarEOS_SKI3.dat +500 -0
- lalapps/data/LALSimNeutronStarEOS_SKI3_BSK24.dat +1355 -0
- lalapps/data/LALSimNeutronStarEOS_SKI4.dat +497 -0
- lalapps/data/LALSimNeutronStarEOS_SKI4_BSK24.dat +1348 -0
- lalapps/data/LALSimNeutronStarEOS_SKI5.dat +500 -0
- lalapps/data/LALSimNeutronStarEOS_SKI6.dat +500 -0
- lalapps/data/LALSimNeutronStarEOS_SKI6_BSK24.dat +1358 -0
- lalapps/data/LALSimNeutronStarEOS_SKMP.dat +498 -0
- lalapps/data/LALSimNeutronStarEOS_SKOP.dat +500 -0
- lalapps/data/LALSimNeutronStarEOS_SKOP_BSK24.dat +1373 -0
- lalapps/data/LALSimNeutronStarEOS_SLY.dat +99 -0
- lalapps/data/LALSimNeutronStarEOS_SLY2.dat +500 -0
- lalapps/data/LALSimNeutronStarEOS_SLY230A.dat +500 -0
- lalapps/data/LALSimNeutronStarEOS_SLY230A_BSK24.dat +1116 -0
- lalapps/data/LALSimNeutronStarEOS_SLY2_BSK24.dat +1106 -0
- lalapps/data/LALSimNeutronStarEOS_SLY4.dat +100 -0
- lalapps/data/LALSimNeutronStarEOS_SLY9.dat +498 -0
- lalapps/data/LALSimNeutronStarEOS_SLY9_BSK24.dat +1083 -0
- lalapps/data/LALSimNeutronStarEOS_SQM1.dat +176 -0
- lalapps/data/LALSimNeutronStarEOS_SQM2.dat +180 -0
- lalapps/data/LALSimNeutronStarEOS_SQM3.dat +176 -0
- lalapps/data/LALSimNeutronStarEOS_WFF1.dat +109 -0
- lalapps/data/LALSimNeutronStarEOS_WFF2.dat +109 -0
- lalapps/data/LALSimNeutronStarEOS_WFF3.dat +107 -0
- lalapps/data/LALSimNeutronStarEOS_XMLSLZ_DDLZ1_BSK24.dat +1227 -0
- lalapps/data/LALSimNeutronStarEOS_XMLSLZ_DDME2_BSK24.dat +1272 -0
- lalapps/data/LALSimNeutronStarEOS_XMLSLZ_DDMEX_BSK24.dat +1280 -0
- lalapps/data/LALSimNeutronStarEOS_XMLSLZ_GM1_BSK24.dat +1288 -0
- lalapps/data/LALSimNeutronStarEOS_XMLSLZ_MTVTC_BSK24.dat +1288 -0
- lalapps/data/LALSimNeutronStarEOS_XMLSLZ_NL3_BSK24.dat +1230 -0
- lalapps/data/LALSimNeutronStarEOS_XMLSLZ_PKDD_BSK24.dat +1288 -0
- lalapps/data/LALSimNeutronStarEOS_XMLSLZ_TM1_BSK24.dat +1288 -0
- lalapps/data/LALSimNeutronStarEOS_XMLSLZ_TW99_BSK24.dat +1288 -0
- lalapps/data/LIGO-P1200087-v18-AdV_BNS_OPTIMIZED.txt +3000 -0
- lalapps/data/LIGO-P1200087-v18-AdV_DESIGN.txt +3000 -0
- lalapps/data/LIGO-P1200087-v18-AdV_EARLY_HIGH.txt +3000 -0
- lalapps/data/LIGO-P1200087-v18-AdV_EARLY_LOW.txt +3000 -0
- lalapps/data/LIGO-P1200087-v18-AdV_LATE_HIGH.txt +3000 -0
- lalapps/data/LIGO-P1200087-v18-AdV_LATE_LOW.txt +3000 -0
- lalapps/data/LIGO-P1200087-v18-AdV_MID_HIGH.txt +3000 -0
- lalapps/data/LIGO-P1200087-v18-AdV_MID_LOW.txt +3000 -0
- lalapps/data/LIGO-P1200087-v18-aLIGO_BNS_OPTIMIZED.txt +3000 -0
- lalapps/data/LIGO-P1200087-v18-aLIGO_DESIGN.txt +3000 -0
- lalapps/data/LIGO-P1200087-v18-aLIGO_EARLY_HIGH.txt +3000 -0
- lalapps/data/LIGO-P1200087-v18-aLIGO_EARLY_LOW.txt +3000 -0
- lalapps/data/LIGO-P1200087-v18-aLIGO_LATE_HIGH.txt +3000 -0
- lalapps/data/LIGO-P1200087-v18-aLIGO_LATE_LOW.txt +3000 -0
- lalapps/data/LIGO-P1200087-v18-aLIGO_MID_HIGH.txt +3000 -0
- lalapps/data/LIGO-P1200087-v18-aLIGO_MID_LOW.txt +3000 -0
- lalapps/data/LIGO-P1600143-v18-CE.txt +3000 -0
- lalapps/data/LIGO-P1600143-v18-CE_Pessimistic.txt +3000 -0
- lalapps/data/LIGO-P1600143-v18-CE_Wideband.txt +3000 -0
- lalapps/data/LIGO-P1600143-v18-ET_D.txt +3000 -0
- lalapps/data/LIGO-T0900288-v3-BHBH_20deg.txt +3000 -0
- lalapps/data/LIGO-T0900288-v3-High_Freq.txt +3000 -0
- lalapps/data/LIGO-T0900288-v3-NO_SRM.txt +3000 -0
- lalapps/data/LIGO-T0900288-v3-NSNS_Opt.txt +3000 -0
- lalapps/data/LIGO-T0900288-v3-ZERO_DET_high_P.txt +3000 -0
- lalapps/data/LIGO-T0900288-v3-ZERO_DET_low_P.txt +3000 -0
- lalapps/data/LIGO-T1600593-v1-KAGRA_Design.txt +4000 -0
- lalapps/data/LIGO-T1600593-v1-KAGRA_Early.txt +4000 -0
- lalapps/data/LIGO-T1600593-v1-KAGRA_Late.txt +4000 -0
- lalapps/data/LIGO-T1600593-v1-KAGRA_Mid.txt +4000 -0
- lalapps/data/LIGO-T1600593-v1-KAGRA_Opening.txt +4000 -0
- lalapps/data/LIGO-T1800042-v5-aLIGO_APLUS.txt +3000 -0
- lalapps/data/LIGO-T1800044-v5-aLIGO_DESIGN.txt +3000 -0
- lalapps/data/LIGO-T1800545-v1-AdV_O3low.txt +3000 -0
- lalapps/data/LIGO-T1800545-v1-AdV_O4.txt +3000 -0
- lalapps/data/LIGO-T1800545-v1-AdV_O4intermediate.txt +3000 -0
- lalapps/data/LIGO-T1800545-v1-KAGRA_128Mpc.txt +1000 -0
- lalapps/data/LIGO-T1800545-v1-KAGRA_25Mpc.txt +1000 -0
- lalapps/data/LIGO-T1800545-v1-KAGRA_80Mpc.txt +1000 -0
- lalapps/data/LIGO-T1800545-v1-aLIGO_140Mpc.txt +1000 -0
- lalapps/data/LIGO-T1800545-v1-aLIGO_175Mpc.txt +2792 -0
- lalapps/data/LIGO-T1800545-v1-aLIGO_O3low.txt +2792 -0
- lalapps/data/bimodalMeans.csv +3 -0
- lalapps/data/config_tiger_example.ini +150 -0
- lalapps/data/fiducialBBH.xml +67 -0
- lalapps/data/fiducialBNS.xml +67 -0
- lalapps/data/inspsrcs100Mpc.errors +38735 -0
- lalapps/data/lalinference_pipe_example.ini +573 -0
- lalapps/data/lib_pipe_example.ini +303 -0
- lalapps/data/power_pipe.ini +129 -0
- lalapps/data/unimodalMeans.csv +2 -0
- lalapps/git_version.py +64 -0
- lalburst/SimBurstUtils.py +324 -0
- lalburst/SnglBurstUtils.py +367 -0
- lalburst/__init__.py +7 -0
- lalburst/_lalburst.cpython-314t-x86_64-linux-gnu.so +0 -0
- lalburst/_lalburst_swig.py +16 -0
- lalburst/binjfind.py +824 -0
- lalburst/bucluster.py +409 -0
- lalburst/burca.py +315 -0
- lalburst/burca_tailor.py +349 -0
- lalburst/cafe.py +579 -0
- lalburst/calc_likelihood.py +145 -0
- lalburst/cs_gamma.cpython-314t-x86_64-linux-gnu.so +0 -0
- lalburst/date.py +118 -0
- lalburst/git_version.py +64 -0
- lalburst/offsetvector.py +278 -0
- lalburst/packing.py +170 -0
- lalburst/power.py +1457 -0
- lalburst/snglcluster.py +136 -0
- lalburst/snglcoinc.py +2637 -0
- lalburst/stringutils.py +607 -0
- lalburst/timeslides.py +236 -0
- lalframe/__init__.py +7 -0
- lalframe/_lalframe.cpython-314t-x86_64-linux-gnu.so +0 -0
- lalframe/_lalframe_swig.py +14 -0
- lalframe/frread.py +324 -0
- lalframe/git_version.py +64 -0
- lalframe/utils/__init__.py +25 -0
- lalframe/utils/frtools.py +61 -0
- lalinference/__init__.py +7 -0
- lalinference/_bayespputils.cpython-314t-x86_64-linux-gnu.so +0 -0
- lalinference/_lalinference.cpython-314t-x86_64-linux-gnu.so +0 -0
- lalinference/_lalinference_swig.py +19 -0
- lalinference/bayespputils.py +7479 -0
- lalinference/bayestar/__init__.py +2 -0
- lalinference/bayestar/deprecation.py +72 -0
- lalinference/git_version.py +64 -0
- lalinference/imrtgr/__init__.py +0 -0
- lalinference/imrtgr/imrtgrutils.py +168 -0
- lalinference/imrtgr/nrutils.py +1366 -0
- lalinference/imrtgr/pneqns.py +250 -0
- lalinference/io/__init__.py +31 -0
- lalinference/io/hdf5.py +365 -0
- lalinference/lalinference_pipe_utils.py +3617 -0
- lalinference/nest2pos.py +151 -0
- lalinference/plot/__init__.py +34 -0
- lalinference/plot/spindisk.py +104 -0
- lalinference/tiger/__init__.py +0 -0
- lalinference/tiger/make_injtimes.py +634 -0
- lalinference/tiger/omegascans_dag.py +691 -0
- lalinference/tiger/postproc.py +1338 -0
- lalinference/wrapper.py +231 -0
- lalinspiral/__init__.py +7 -0
- lalinspiral/_lalinspiral.cpython-314t-x86_64-linux-gnu.so +0 -0
- lalinspiral/_lalinspiral_swig.py +18 -0
- lalinspiral/_thinca.cpython-314t-x86_64-linux-gnu.so +0 -0
- lalinspiral/git_version.py +64 -0
- lalinspiral/inspinjfind.py +485 -0
- lalinspiral/thinca.py +509 -0
- lalmetaio/__init__.py +7 -0
- lalmetaio/_lalmetaio.cpython-314t-x86_64-linux-gnu.so +0 -0
- lalmetaio/_lalmetaio_swig.py +14 -0
- lalmetaio/git_version.py +64 -0
- lalpulsar/NstarTools.py +259 -0
- lalpulsar/PulsarParametersWrapper.py +938 -0
- lalpulsar/__init__.py +7 -0
- lalpulsar/_lalpulsar.cpython-314t-x86_64-linux-gnu.so +0 -0
- lalpulsar/_lalpulsar_swig.py +17 -0
- lalpulsar/git_version.py +64 -0
- lalpulsar/knope_utils.py +6497 -0
- lalpulsar/lineFileParser.py +264 -0
- lalpulsar/metric_utils.py +78 -0
- lalpulsar/piecewise_model/__init__.py +7 -0
- lalpulsar/piecewise_model/basis_functions.py +156 -0
- lalpulsar/piecewise_model/class_definitions.py +323 -0
- lalpulsar/piecewise_model/errors.py +37 -0
- lalpulsar/piecewise_model/estimating_knots.py +833 -0
- lalpulsar/piecewise_model/gte_and_other_methods.py +189 -0
- lalpulsar/piecewise_model/mols_for_gte.py +269 -0
- lalpulsar/piecewise_model/pw_fstat.py +813 -0
- lalpulsar/piecewise_model/pw_model_simulations.py +156 -0
- lalpulsar/piecewise_model/sampling_methods.py +186 -0
- lalpulsar/piecewise_model/semicoherent_metric_methods.py +375 -0
- lalpulsar/piecewise_model/tbank_estimates.py +293 -0
- lalpulsar/public_sft_directory.py +82 -0
- lalpulsar/pulsarhtmlutils.py +1395 -0
- lalpulsar/pulsarpputils.py +3638 -0
- lalpulsar/simulateCW.py +602 -0
- lalpulsar/simulateHeterodynedCW.py +591 -0
- lalsimulation/__init__.py +7 -0
- lalsimulation/_lalsimulation.cpython-314t-x86_64-linux-gnu.so +0 -0
- lalsimulation/_lalsimulation_swig.py +14 -0
- lalsimulation/git_version.py +64 -0
- lalsimulation/gwsignal/__init__.py +9 -0
- lalsimulation/gwsignal/core/__init__.py +2 -0
- lalsimulation/gwsignal/core/conditioning_subroutines.py +196 -0
- lalsimulation/gwsignal/core/errors.py +136 -0
- lalsimulation/gwsignal/core/gw.py +206 -0
- lalsimulation/gwsignal/core/parameter_conventions.py +122 -0
- lalsimulation/gwsignal/core/utils.py +329 -0
- lalsimulation/gwsignal/core/waveform.py +725 -0
- lalsimulation/gwsignal/core/waveform_conditioning.py +455 -0
- lalsimulation/gwsignal/models/__init__.py +29 -0
- lalsimulation/gwsignal/models/pyseobnr_model.py +452 -0
- lalsimulation/nrfits/NRSur3dq8Remnant.py +92 -0
- lalsimulation/nrfits/NRSur7dq4Remnant.py +469 -0
- lalsimulation/nrfits/__init__.py +1 -0
- lalsimulation/nrfits/eval_fits.py +364 -0
- lalsimulation/nrfits/nrfits.py +78 -0
- lalsimulation/nrfits/pn_spin_evolution_wrapper.py +92 -0
- lalsimulation/nrfits/quaternion_utils.py +74 -0
- lalsimulation/tilts_at_infinity/__init__.py +2 -0
- lalsimulation/tilts_at_infinity/calc_tilts_prec_avg_regularized.py +1424 -0
- lalsimulation/tilts_at_infinity/hybrid_spin_evolution.py +461 -0
- lalsimulation/tilts_at_infinity/tilts_at_infinity_utils.py +167 -0
- lalsuite-7.26.2.dev20251218.data/scripts/cbcBayesBurstPPAnalysis +305 -0
- lalsuite-7.26.2.dev20251218.data/scripts/cbcBayesBurstPostProc +1364 -0
- lalsuite-7.26.2.dev20251218.data/scripts/cbcBayesCombinePTMCMCh5s +100 -0
- lalsuite-7.26.2.dev20251218.data/scripts/cbcBayesCombinePosteriors +235 -0
- lalsuite-7.26.2.dev20251218.data/scripts/cbcBayesCompPos +1121 -0
- lalsuite-7.26.2.dev20251218.data/scripts/cbcBayesDIEvidence +68 -0
- lalsuite-7.26.2.dev20251218.data/scripts/cbcBayesGraceDBinfo +182 -0
- lalsuite-7.26.2.dev20251218.data/scripts/cbcBayesMCMC2pos +314 -0
- lalsuite-7.26.2.dev20251218.data/scripts/cbcBayesPPAnalysis +322 -0
- lalsuite-7.26.2.dev20251218.data/scripts/cbcBayesPlotSpinDisk +42 -0
- lalsuite-7.26.2.dev20251218.data/scripts/cbcBayesPosToSimBurst +227 -0
- lalsuite-7.26.2.dev20251218.data/scripts/cbcBayesPosToSimInspiral +307 -0
- lalsuite-7.26.2.dev20251218.data/scripts/cbcBayesPostProc +1345 -0
- lalsuite-7.26.2.dev20251218.data/scripts/cbcBayesThermoInt +107 -0
- lalsuite-7.26.2.dev20251218.data/scripts/imrtgr_imr_consistency_test +796 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lal_cache +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lal_fftw_wisdom +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lal_fftwf_wisdom +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lal_path2cache +148 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lal_searchsum2cache +172 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lal_simd_detect +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lal_tconvert +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lal_version +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_ComputeAntennaPattern +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_ComputeFstatBenchmark +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_ComputeFstatLatticeCount +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_ComputeFstatMCUpperLimit +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_ComputeFstatistic_v2 +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_ComputePSD +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_CopySFTs +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_DistanceVsMass +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_DriveHoughMulti +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_FstatMetric_v2 +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_HierarchSearchGCT +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_HierarchicalSearch +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_MakeSFTDAG +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_MakeSFTs +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_Makefakedata_v4 +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_Makefakedata_v5 +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_PredictFstat +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_PrintDetectorState +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_SFTclean +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_SFTvalidate +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_StringAddFrame +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_StringSearch +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_Weave +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_WeaveCompare +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_WeaveConcat +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_WeaveSetup +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_WriteSFTsfromSFDBs +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_animate +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_binj +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_blindinj +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_cache +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_cafe +99 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_calfacs +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_cbc_stochasticbank +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_chirplen +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_coh_PTF_inspiral +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_coinj +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_combine_crosscorr_toplists +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_compareFstats +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_compareSFTs +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_cosmicstring_pipe +525 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_create_time_correction_ephemeris +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_dumpSFT +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_effdist +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_exc_resp +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_fftw_wisdom +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_fftwf_wisdom +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_fits_header_getval +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_fits_header_list +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_fits_overview +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_fits_table_list +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_fr_ninja +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_frextr +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_frinfo +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_frjoin +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_frread +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_frview +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_gwf2xml +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_heterodyne_pulsar +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_inspawgfile +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_inspfrinj +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_inspinj +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_inspiralDistance +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_knope +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_knope_automation_script +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_knope_collate_results +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_knope_result_page +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_makeblindinj +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_makeblindinj_himass +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_ninja +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_path2cache +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_power +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_power_likelihood_pipe +219 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_power_pipe +417 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_pulsar_crosscorr_v2 +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_pulsar_frequency_evolution +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_pulsar_parameter_estimation_nested +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_random_bank +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_randombank +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_run_pulsar_crosscorr_v2 +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_searchsum2cache +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_spec_avg +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_spec_avg_long +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_spec_coherence +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_spininj +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_splitSFTs +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_splitbank +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_ssbtodetector +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_string_apply_vetoes +171 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_string_calc_likelihood +172 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_string_contour_plotter +141 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_string_contour_plotter_largeloops +133 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_string_cs_gamma +110 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_string_cs_gamma_largeloops +119 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_string_final +1064 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_string_meas_likelihood +264 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_string_plot_binj +543 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_string_plot_likelihood +380 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_synthesizeBstatMC +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_synthesizeLVStats +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_synthesizeTransientStats +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_tconvert +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_tmpltbank +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_version +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalapps_xtefitstoframe +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalburst_cluster +156 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalburst_coinc +224 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalburst_cut +425 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalburst_gen_timeslides +254 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalburst_inj_pic +254 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalburst_injfind +170 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalburst_plot_tisi +165 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalburst_power_calc_likelihood +182 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalburst_power_final +1369 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalburst_power_meas_likelihood +206 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalburst_power_plot_binj +934 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalburst_power_plot_binjtf +302 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalburst_version +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalfr-cat +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalfr-cksum +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalfr-cut +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalfr-dump +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalfr-fmt +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalfr-paste +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalfr-print +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalfr-split +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalfr-stat +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalfr-stream +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalfr-vis +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalframe_version +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalinference_bench +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalinference_burst +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalinference_burst_pp_pipe +220 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalinference_coherence_test +139 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalinference_compute_roq_weights +404 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalinference_cpnest +58 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalinference_datadump +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalinference_evolve_spins_and_append_samples +202 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalinference_injectedlike +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalinference_merge_posteriors +57 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalinference_mpi_wrapper +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalinference_multi_pipe +144 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalinference_nest +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalinference_nest2pos +286 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalinference_pipe +512 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalinference_pp_pipe +229 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalinference_review_test +362 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalinference_version +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalinspiral_injfind +206 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalinspiral_thinca +240 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalinspiral_version +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalmetaio_version +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_ComputeAntennaPattern +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_ComputeFstatBenchmark +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_ComputeFstatLatticeCount +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_ComputeFstatMCUpperLimit +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_ComputeFstatistic_v2 +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_ComputePSD +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_CopyPublicSFTs +216 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_DriveHoughMulti +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_FstatMetric_v2 +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_HierarchSearchGCT +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_HierarchicalSearch +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_MakeSFTDAG +1142 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_MakeSFTs +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_Makefakedata_v4 +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_Makefakedata_v5 +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_MoveSFTs +208 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_PiecewiseSearch +963 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_PredictFstat +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_PrintDetectorState +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_SFTclean +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_SFTvalidate +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_Weave +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_WeaveCompare +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_WeaveConcat +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_WeaveSetup +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_WriteSFTsfromSFDBs +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_compareFstats +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_compareSFTs +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_create_time_correction_ephemeris +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_crosscorr_v2 +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_dumpSFT +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_fits_header_getval +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_fits_header_list +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_fits_overview +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_fits_table_list +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_frequency_evolution +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_heterodyne +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_knope +145 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_knope_automation_script +731 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_knope_collate_results +675 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_knope_result_page +2977 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_parameter_estimation_nested +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_spec_avg +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_spec_avg_long +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_spec_coherence +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_splitSFTs +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_ssbtodetector +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_synthesizeBstatMC +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_synthesizeLVStats +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_synthesizeTransientStats +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalpulsar_version +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalsim-bh-qnmode +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalsim-bh-ringdown +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalsim-bh-sphwf +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalsim-burst +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalsim-detector-noise +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalsim-detector-strain +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalsim-inject +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalsim-inspiral +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalsim-ns-eos-table +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalsim-ns-mass-radius +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalsim-ns-params +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalsim-sgwb +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalsim-unicorn +6 -0
- lalsuite-7.26.2.dev20251218.data/scripts/lalsimulation_version +6 -0
- lalsuite-7.26.2.dev20251218.dist-info/METADATA +90 -0
- lalsuite-7.26.2.dev20251218.dist-info/RECORD +733 -0
- lalsuite-7.26.2.dev20251218.dist-info/WHEEL +5 -0
- lalsuite-7.26.2.dev20251218.dist-info/licenses/COPYING +339 -0
- lalsuite-7.26.2.dev20251218.dist-info/top_level.txt +9 -0
- lalsuite.libs/libcfitsio-729ee1b7.so.10.0.0 +0 -0
- lalsuite.libs/libfftw3-6b983104.so.3.5.5 +0 -0
- lalsuite.libs/libfftw3f-b4465a35.so.3.5.5 +0 -0
- lalsuite.libs/libframel-8cf74372.so.8.48.4 +0 -0
- lalsuite.libs/libgsl-e30be130.so.28.0.0 +0 -0
- lalsuite.libs/libgslcblas-460f042a.so.0.0.0 +0 -0
- lalsuite.libs/libhdf5-d02936e2.so.310.5.1 +0 -0
- lalsuite.libs/libhdf5_hl-0e40b553.so.310.0.6 +0 -0
- lalsuite.libs/liblal-bd4575d4.so.20.5.0 +0 -0
- lalsuite.libs/liblalburst-183caa97.so.8.0.0 +0 -0
- lalsuite.libs/liblalframe-b2539a8a.so.14.0.3 +0 -0
- lalsuite.libs/liblalinference-b273091a.so.23.1.7 +0 -0
- lalsuite.libs/liblalinspiral-37f93c6c.so.18.0.2 +0 -0
- lalsuite.libs/liblalmetaio-f04c856f.so.11.0.1 +0 -0
- lalsuite.libs/liblalpulsar-950e7dfd.so.30.1.1 +0 -0
- lalsuite.libs/liblalsimulation-abda47f7.so.37.2.0 +0 -0
- lalsuite.libs/liblalsupport-ad162801.so.14.4.0 +0 -0
- lalsuite.libs/libmetaio-abda72ec.so.1.1.0 +0 -0
|
@@ -0,0 +1,731 @@
|
|
|
1
|
+
#!python
|
|
2
|
+
## \file
|
|
3
|
+
## \ingroup lalpulsar_bin_HeterodyneSearch
|
|
4
|
+
"""
|
|
5
|
+
The KNOwn Pulsar pipelinE - lalpulsar_knope_automation_script
|
|
6
|
+
|
|
7
|
+
Script to be setup and launch a cron job for the automated running of the known pulsar analysis.
|
|
8
|
+
|
|
9
|
+
The script requires an initial configuration file. Each time the script will be re-run by cron it will itself
|
|
10
|
+
automatically update the times in the configuration file.
|
|
11
|
+
|
|
12
|
+
(C) Matthew Pitkin 2015
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
# make print statements python 3-proof
|
|
16
|
+
from __future__ import print_function, division
|
|
17
|
+
|
|
18
|
+
import sys
|
|
19
|
+
import os
|
|
20
|
+
import ast
|
|
21
|
+
import calendar
|
|
22
|
+
import numpy as np
|
|
23
|
+
import subprocess as sp
|
|
24
|
+
import socket
|
|
25
|
+
import smtplib
|
|
26
|
+
import stat
|
|
27
|
+
|
|
28
|
+
import argparse
|
|
29
|
+
from configparser import RawConfigParser
|
|
30
|
+
|
|
31
|
+
from lalpulsar import git_version
|
|
32
|
+
|
|
33
|
+
# try importing astropy
|
|
34
|
+
try:
|
|
35
|
+
from astropy.time import Time
|
|
36
|
+
except ImportError:
|
|
37
|
+
print(
|
|
38
|
+
"Could not import astropy: make sure astropy is installed (e.g. 'pip install astropy') and in the PYTHONPATH",
|
|
39
|
+
file=sys.stderr,
|
|
40
|
+
)
|
|
41
|
+
sys.exit(1)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
# try import python-crontab
|
|
45
|
+
try:
|
|
46
|
+
from crontab import CronTab
|
|
47
|
+
except ImportError:
|
|
48
|
+
print(
|
|
49
|
+
"Could not import python-crontab: make sure it is installed (e.g. 'pip install python-crontab') and in the PYTHONPATH",
|
|
50
|
+
file=sys.stderr,
|
|
51
|
+
)
|
|
52
|
+
sys.exit(1)
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
__author__ = "Matthew Pitkin <matthew.pitkin@ligo.org>"
|
|
56
|
+
__version__ = "git id %s" % git_version.id
|
|
57
|
+
__date__ = git_version.date
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
# number of seconds for each allowed time step value
|
|
61
|
+
tsdic = {
|
|
62
|
+
"hourly": 1440.0,
|
|
63
|
+
"daily": 86400.0,
|
|
64
|
+
"weekly": 7.0 * 86400.0,
|
|
65
|
+
"monthly": 86400.0
|
|
66
|
+
* calendar.monthrange(Time.now().datetime.year, Time.now().datetime.month)[1],
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
# function to remove crontab job
|
|
71
|
+
def remove_cron(cronid):
|
|
72
|
+
try:
|
|
73
|
+
cron = CronTab(user=True)
|
|
74
|
+
cron.remove_all(comment=cronid)
|
|
75
|
+
cron.write()
|
|
76
|
+
except:
|
|
77
|
+
print("Warning... count not remove crontab job with comment ID '%s'" % cronid)
|
|
78
|
+
|
|
79
|
+
return
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
# function to send an email
|
|
83
|
+
def send_email(FROM, TO, SUBJECT, MESSAGE, server, quitserver=True):
|
|
84
|
+
# set a notication email template
|
|
85
|
+
emailtemplate = "From: {0}\nTo: {1}\nSubject: {2}\n\n{3}"
|
|
86
|
+
message = emailtemplate.format(FROM, TO, SUBJECT, MESSAGE)
|
|
87
|
+
|
|
88
|
+
try:
|
|
89
|
+
server.sendmail(FROM, TO, message)
|
|
90
|
+
except:
|
|
91
|
+
print("Warning... unable to send email.")
|
|
92
|
+
|
|
93
|
+
if quitserver:
|
|
94
|
+
server.quit()
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
# main function
|
|
98
|
+
if __name__ == "__main__":
|
|
99
|
+
description = """This script will setup and run a cron job for an automated known pulsar pipeline.
|
|
100
|
+
A configuration .ini file is required.
|
|
101
|
+
"""
|
|
102
|
+
|
|
103
|
+
parser = argparse.ArgumentParser(description=description)
|
|
104
|
+
parser.add_argument("--version", action="version", version=__version__)
|
|
105
|
+
parser.add_argument("inifile", help="The configuration (.ini) file")
|
|
106
|
+
|
|
107
|
+
# parse input options
|
|
108
|
+
opts = parser.parse_args()
|
|
109
|
+
|
|
110
|
+
inifile = opts.inifile
|
|
111
|
+
|
|
112
|
+
# check that inifile contains full absolute path
|
|
113
|
+
if not os.path.isabs(inifile):
|
|
114
|
+
print(
|
|
115
|
+
"Error... must supply the full absolute path of the configuration file.",
|
|
116
|
+
file=sys.stderr,
|
|
117
|
+
)
|
|
118
|
+
sys.exit(1)
|
|
119
|
+
|
|
120
|
+
startcron = False # variable to say whether to create the crontab (if this is the first time the script is run then this will be changed to True later)
|
|
121
|
+
cronid = "knopeJob" # default ID for the crontab job
|
|
122
|
+
|
|
123
|
+
# open and parse config file
|
|
124
|
+
cp = RawConfigParser()
|
|
125
|
+
try:
|
|
126
|
+
cp.read(inifile)
|
|
127
|
+
except:
|
|
128
|
+
print(
|
|
129
|
+
"Error... cannot parse configuration file '%s'" % inifile, file=sys.stderr
|
|
130
|
+
)
|
|
131
|
+
sys.exit(1)
|
|
132
|
+
|
|
133
|
+
# if configuration file has previous_endtimes option then the cronjob must have started
|
|
134
|
+
if not cp.has_option(
|
|
135
|
+
"times", "previous_endtimes"
|
|
136
|
+
): # make sure to start the crontab job
|
|
137
|
+
startcron = True
|
|
138
|
+
|
|
139
|
+
# open and parse the run configuration file
|
|
140
|
+
if cp.has_option("configuration", "file"):
|
|
141
|
+
runconfig = cp.get(
|
|
142
|
+
"configuration", "file"
|
|
143
|
+
) # Get main configuration ini template for the run
|
|
144
|
+
|
|
145
|
+
if not os.path.isfile(runconfig):
|
|
146
|
+
print(
|
|
147
|
+
"Error... run configuration file '%s' does not exist!" % runconfig,
|
|
148
|
+
file=sys.stderr,
|
|
149
|
+
)
|
|
150
|
+
if not startcron:
|
|
151
|
+
remove_cron(cronid) # remove cron job
|
|
152
|
+
sys.exit(1)
|
|
153
|
+
else:
|
|
154
|
+
print("Error... must specify a run configuration '.ini' file", file=sys.stderr)
|
|
155
|
+
if startcron:
|
|
156
|
+
remove_cron(cronid)
|
|
157
|
+
sys.exit(1)
|
|
158
|
+
|
|
159
|
+
# check for cron ID
|
|
160
|
+
if cp.has_option("configuration", "cronid"):
|
|
161
|
+
cronid = cp.get("configuration", "cronid")
|
|
162
|
+
|
|
163
|
+
# check for kerberos keytab and certificate
|
|
164
|
+
keytab = None
|
|
165
|
+
if cp.has_option("kerberos", "keytab"):
|
|
166
|
+
keytab = cp.get("kerberos", "keytab")
|
|
167
|
+
|
|
168
|
+
if cp.has_option("kerberos", "certificate"):
|
|
169
|
+
certificate = cp.get("kerberos", "certificate")
|
|
170
|
+
|
|
171
|
+
if cp.has_option("kerberos", "auth_princ"):
|
|
172
|
+
authprinc = cp.get("kerberos", "auth_princ")
|
|
173
|
+
else:
|
|
174
|
+
raise RuntimeError("No kerberos authentication principle")
|
|
175
|
+
else:
|
|
176
|
+
raise RuntimeError("Problem with kerberos certificate")
|
|
177
|
+
|
|
178
|
+
cprun = RawConfigParser()
|
|
179
|
+
try:
|
|
180
|
+
cprun.read(runconfig)
|
|
181
|
+
except:
|
|
182
|
+
print("Error... could not read run configuration '.ini' file", file=sys.stderr)
|
|
183
|
+
sys.exit(1)
|
|
184
|
+
|
|
185
|
+
# get the time increment for re-running the pipeline on (can be "hourly", "daily", "weekly" or "monthly")
|
|
186
|
+
if cp.has_option("times", "steps"):
|
|
187
|
+
timestep = cp.get("times", "steps")
|
|
188
|
+
|
|
189
|
+
if timestep not in ["hourly", "daily", "weekly", "monthly"]:
|
|
190
|
+
errmsg = "Error... 'steps' value in '[times'] must be 'hourly', 'daily', 'weekly' or 'monthly'"
|
|
191
|
+
print(errmsg, file=sys.stderr)
|
|
192
|
+
sys.exit(1)
|
|
193
|
+
else:
|
|
194
|
+
errmsg = "Error... must specify a time step 'steps' value in '[times]'"
|
|
195
|
+
print(errmsg, file=sys.stderr)
|
|
196
|
+
sys.exit(1)
|
|
197
|
+
|
|
198
|
+
# try getting email address information (for notifications of e.g. job failures, re-running rescue DAGs, etc)
|
|
199
|
+
email = None
|
|
200
|
+
server = None
|
|
201
|
+
if cp.has_option("notification", "email"):
|
|
202
|
+
try:
|
|
203
|
+
email = cp.get("notification", "email")
|
|
204
|
+
except:
|
|
205
|
+
print(
|
|
206
|
+
"Warning... could not get email address from configuration file. No notifications will be sent."
|
|
207
|
+
)
|
|
208
|
+
|
|
209
|
+
if "@" not in email:
|
|
210
|
+
print(
|
|
211
|
+
"Warning... '%s' is not a valid email address. No notifications will be sent."
|
|
212
|
+
)
|
|
213
|
+
email = None
|
|
214
|
+
|
|
215
|
+
# set email server
|
|
216
|
+
if email != None:
|
|
217
|
+
try:
|
|
218
|
+
server = smtplib.SMTP("localhost")
|
|
219
|
+
except:
|
|
220
|
+
print(
|
|
221
|
+
"Warning... could not get SMTP server. No notication emails will be sent."
|
|
222
|
+
)
|
|
223
|
+
email = None
|
|
224
|
+
|
|
225
|
+
# set email sender (if this fails maybe just hardcode sender to be 'matthew.pitkin@ligo.org')
|
|
226
|
+
FROM = None
|
|
227
|
+
if email != None:
|
|
228
|
+
try:
|
|
229
|
+
HOST = socket.getfqdn()
|
|
230
|
+
USER = os.environ["USER"]
|
|
231
|
+
FROM = USER + "@" + HOST
|
|
232
|
+
except:
|
|
233
|
+
FROM = "matthew.pitkin@ligo.org"
|
|
234
|
+
|
|
235
|
+
# Get the current time
|
|
236
|
+
now = Time.now()
|
|
237
|
+
gpsnow = int(now.replicate("gps").value)
|
|
238
|
+
|
|
239
|
+
# check for DAG completion in previous analyses
|
|
240
|
+
prevdags = None
|
|
241
|
+
rescuedags = None
|
|
242
|
+
try:
|
|
243
|
+
rundir = cprun.get(
|
|
244
|
+
"analysis", "run_dir"
|
|
245
|
+
) # get run directory where DAG will have been created
|
|
246
|
+
except:
|
|
247
|
+
rundir = (
|
|
248
|
+
os.getcwd()
|
|
249
|
+
) # if 'run_dir' was not set then the current working directory will have been used
|
|
250
|
+
if not startcron:
|
|
251
|
+
try:
|
|
252
|
+
prevdags = ast.literal_eval(cp.get("configuration", "previous_dags"))
|
|
253
|
+
except:
|
|
254
|
+
errmsg = "Error... no previous DAG file(s) have been set."
|
|
255
|
+
print(errmsg, file=sys.stderr)
|
|
256
|
+
remove_cron(cronid) # remove cron job
|
|
257
|
+
if email != None:
|
|
258
|
+
subject = sys.argv[0] + ": Error message"
|
|
259
|
+
send_email(FROM, email, subject, errmsg, server)
|
|
260
|
+
sys.exit(1)
|
|
261
|
+
|
|
262
|
+
# check if the last dag has completed yet
|
|
263
|
+
lockfile = prevdags[-1] + ".lock"
|
|
264
|
+
if os.path.isfile(lockfile):
|
|
265
|
+
# DAG has not yet complete, so wait before trying again (by updating the crontab entry)
|
|
266
|
+
try:
|
|
267
|
+
# reset to run again later
|
|
268
|
+
if timestep in [
|
|
269
|
+
"hourly",
|
|
270
|
+
"daily",
|
|
271
|
+
]: # if hourly or daily just wait until the next run
|
|
272
|
+
print("Previous DAG not finished. Re-running later")
|
|
273
|
+
os._exit(
|
|
274
|
+
0
|
|
275
|
+
) # don't use sys.exit(0) as this throws an exception that is caught by "except": https://stackoverflow.com/a/173323/1862861
|
|
276
|
+
else: # add a day to the crontab job and re-run then
|
|
277
|
+
cron = CronTab(user=True)
|
|
278
|
+
for job in cron.find_comment(cronid):
|
|
279
|
+
thisjob = job # cron job
|
|
280
|
+
|
|
281
|
+
# get a detlaT for a day
|
|
282
|
+
t1 = Time("2010-01-01 00:00:00")
|
|
283
|
+
t2 = Time("2010-01-02 00:00:00")
|
|
284
|
+
dt = t2 - t1
|
|
285
|
+
newcrontime = now + dt
|
|
286
|
+
if timestep == "weekly":
|
|
287
|
+
thisjob.dow.on(
|
|
288
|
+
newcrontime.datetime.strftime("%a").upper()
|
|
289
|
+
) # get new day of the week
|
|
290
|
+
else:
|
|
291
|
+
thisjob.day.on(
|
|
292
|
+
newcrontime.datetime.day
|
|
293
|
+
) # get new month of the year
|
|
294
|
+
cron.write()
|
|
295
|
+
os._exit(
|
|
296
|
+
0
|
|
297
|
+
) # don't use sys.exit(0) as this throws an exception that is caught by "except": https://stackoverflow.com/a/173323/1862861
|
|
298
|
+
except:
|
|
299
|
+
errmsg = (
|
|
300
|
+
"Error... could not reset the crontab to wait for DAG completion."
|
|
301
|
+
)
|
|
302
|
+
print(errmsg, file=sys.stderr)
|
|
303
|
+
remove_cron(cronid)
|
|
304
|
+
if email != None:
|
|
305
|
+
subject = sys.argv[0] + ": Error message"
|
|
306
|
+
send_email(FROM, email, subject, errmsg, server)
|
|
307
|
+
sys.exit(1)
|
|
308
|
+
|
|
309
|
+
# get any previous rescue DAGs - held in a dictionary and keyed to the original DAG name
|
|
310
|
+
try:
|
|
311
|
+
rescuedags = ast.literal_eval(cp.get("configuration", "rescue_dags"))
|
|
312
|
+
Nrescues = rescuedags[prevdags[-1]] # get previous number of rescue DAGs
|
|
313
|
+
except:
|
|
314
|
+
rescuedags = None
|
|
315
|
+
Nrescues = 0 # previous number of rescues
|
|
316
|
+
|
|
317
|
+
# check if there is a rescue DAG, and if so run it, and wait
|
|
318
|
+
rescuefile = prevdags[-1] + ".rescue"
|
|
319
|
+
if os.path.basename(rescuefile + "%03d" % (Nrescues + 1)) in os.listdir(
|
|
320
|
+
os.path.dirname(prevdags[-1])
|
|
321
|
+
):
|
|
322
|
+
# if 2 rescue DAGs have already been run then just abort as there's probably some problem
|
|
323
|
+
if Nrescues == 3:
|
|
324
|
+
errmsg = "Error... rescue DAG has been run twice and there are still failures. Automation code is aborting. Fix the problem and then retry"
|
|
325
|
+
print(errmsg, file=sys.stderr)
|
|
326
|
+
remove_cron(cronid) # remove cron job
|
|
327
|
+
if email != None:
|
|
328
|
+
subject = sys.argv[0] + ": Error message"
|
|
329
|
+
send_email(FROM, email, subject, errmsg, server)
|
|
330
|
+
sys.exit(1)
|
|
331
|
+
|
|
332
|
+
# update number of previous rescues
|
|
333
|
+
if Nrescues == 0:
|
|
334
|
+
rescuedags = {}
|
|
335
|
+
rescuedags[prevdags[-1]] = Nrescues + 1
|
|
336
|
+
|
|
337
|
+
# run rescue DAG
|
|
338
|
+
from subprocess import Popen
|
|
339
|
+
|
|
340
|
+
x = Popen(["condor_submit_dag", prevdags[-1]])
|
|
341
|
+
x.wait()
|
|
342
|
+
if x.returncode != 0:
|
|
343
|
+
errmsg = (
|
|
344
|
+
"Error... unable to submit rescue DAG for '%s'. Automation code is aborting."
|
|
345
|
+
% prevdags[-1]
|
|
346
|
+
)
|
|
347
|
+
remove_cron(cronid) # remove cron job
|
|
348
|
+
if email != None:
|
|
349
|
+
subject = sys.argv[0] + ": Error message"
|
|
350
|
+
send_email(FROM, email, subject, errmsg, server)
|
|
351
|
+
sys.exit(1)
|
|
352
|
+
|
|
353
|
+
# add number of rescue DAGs to configuration file
|
|
354
|
+
cp.set("configuration", "rescue_dags", str(rescuedags))
|
|
355
|
+
|
|
356
|
+
# Write out updated configuration file
|
|
357
|
+
fc = open(inifile, "w")
|
|
358
|
+
cp.write(fc)
|
|
359
|
+
fc.close()
|
|
360
|
+
|
|
361
|
+
# wait until re-running
|
|
362
|
+
try:
|
|
363
|
+
# reset to run again later
|
|
364
|
+
if timestep in [
|
|
365
|
+
"hourly",
|
|
366
|
+
"daily",
|
|
367
|
+
]: # if hourly or daily just wait until the next run
|
|
368
|
+
print("Running rescue DAG")
|
|
369
|
+
os._exit(
|
|
370
|
+
0
|
|
371
|
+
) # don't use sys.exit(0) as this throws an exception that is caught by "except": https://stackoverflow.com/a/173323/1862861
|
|
372
|
+
else: # add a day to the crontab job and re-run then
|
|
373
|
+
cron = CronTab(user=True)
|
|
374
|
+
for job in cron.find_comment(cronid):
|
|
375
|
+
thisjob = job # cron job
|
|
376
|
+
|
|
377
|
+
# get a detlaT for a day
|
|
378
|
+
t1 = Time("2010-01-01 00:00:00")
|
|
379
|
+
t2 = Time("2010-01-02 00:00:00")
|
|
380
|
+
dt = t2 - t1
|
|
381
|
+
newcrontime = now + dt
|
|
382
|
+
if timestep == "weekly":
|
|
383
|
+
thisjob.dow.on(
|
|
384
|
+
newcrontime.datetime.strftime("%a").upper()
|
|
385
|
+
) # get new day of the week
|
|
386
|
+
else:
|
|
387
|
+
thisjob.day.on(
|
|
388
|
+
newcrontime.datetime.day
|
|
389
|
+
) # get new month of the year
|
|
390
|
+
cron.write()
|
|
391
|
+
os._exit(
|
|
392
|
+
0
|
|
393
|
+
) # don't use sys.exit(0) as this throws an exception that is caught by "except": https://stackoverflow.com/a/173323/1862861
|
|
394
|
+
except:
|
|
395
|
+
errmsg = "Error... could not reset the crontab to wait for rescue DAG completion."
|
|
396
|
+
print(errmsg, file=sys.stderr)
|
|
397
|
+
remove_cron(cronid)
|
|
398
|
+
if email != None:
|
|
399
|
+
subject = sys.argv[0] + ": Error message"
|
|
400
|
+
send_email(FROM, email, subject, errmsg, server)
|
|
401
|
+
sys.exit(1)
|
|
402
|
+
|
|
403
|
+
# Get the start time of the automated analysis - if not present default to the current time
|
|
404
|
+
if cp.has_option("times", "starttime"):
|
|
405
|
+
try:
|
|
406
|
+
starttime = cp.getint("times", "starttime")
|
|
407
|
+
except:
|
|
408
|
+
errmsg = "Error... could not parse 'starttime' in '[times]'. A start time is required."
|
|
409
|
+
print(errmsg, file=sys.stderr)
|
|
410
|
+
if email != None:
|
|
411
|
+
subject = sys.argv[0] + ": Error message"
|
|
412
|
+
send_email(FROM, email, subject, errmsg, server)
|
|
413
|
+
if not startcron:
|
|
414
|
+
remove_cron(cronid)
|
|
415
|
+
sys.exit(1)
|
|
416
|
+
|
|
417
|
+
# check start time is in the past
|
|
418
|
+
if starttime >= gpsnow:
|
|
419
|
+
errmsg = "Error... start time (%f) must be in the past!" % starttime
|
|
420
|
+
print(errmsg, file=sys.stderr)
|
|
421
|
+
if email != None:
|
|
422
|
+
subject = sys.argv[0] + ": Error message"
|
|
423
|
+
send_email(FROM, email, subject, errmsg, server)
|
|
424
|
+
if not startcron:
|
|
425
|
+
remove_cron(cronid)
|
|
426
|
+
sys.exit(1)
|
|
427
|
+
|
|
428
|
+
# Get the end time of the automated analysis - if not present default to infinity (never stop!)
|
|
429
|
+
if cp.has_option("times", "endtime"):
|
|
430
|
+
try:
|
|
431
|
+
endtime = cp.getint("times", "endtime")
|
|
432
|
+
except:
|
|
433
|
+
print(
|
|
434
|
+
"Warning... could not parse 'endtime' in '[times]'. Defaulting to Infinity."
|
|
435
|
+
)
|
|
436
|
+
endtime = np.inf
|
|
437
|
+
else:
|
|
438
|
+
# defaulting to infinity
|
|
439
|
+
endtime = np.inf
|
|
440
|
+
|
|
441
|
+
# check end time is after start time
|
|
442
|
+
if endtime <= starttime:
|
|
443
|
+
errmsg = "Error... start time is after end time!"
|
|
444
|
+
print(errmsg, file=sys.stderr)
|
|
445
|
+
if not startcron:
|
|
446
|
+
remove_cron(cronid) # remove cron job
|
|
447
|
+
if email != None:
|
|
448
|
+
subject = sys.argv[0] + ": Error message"
|
|
449
|
+
send_email(FROM, email, subject, errmsg, server)
|
|
450
|
+
sys.exit(1)
|
|
451
|
+
|
|
452
|
+
# get a lag time (this will add a lag to gpsnow - if there is a lag between data creation and replication on the various sites a lag may be required, so that the data exists)
|
|
453
|
+
if cp.has_option("times", "lag"):
|
|
454
|
+
try:
|
|
455
|
+
timelag = cp.getint("times", "lag")
|
|
456
|
+
except:
|
|
457
|
+
timelag = 0
|
|
458
|
+
else:
|
|
459
|
+
timelag = 0 # default to no lag
|
|
460
|
+
|
|
461
|
+
# check if this is not the first run of the script
|
|
462
|
+
if not startcron:
|
|
463
|
+
try:
|
|
464
|
+
prev_ends = ast.literal_eval(cp.get("times", "previous_endtimes"))
|
|
465
|
+
except:
|
|
466
|
+
errmsg = "Error... cannot parse previous end times list"
|
|
467
|
+
print(errmsg, file=sys.stderr)
|
|
468
|
+
if startcron:
|
|
469
|
+
remove_cron(cronid) # remove cron job
|
|
470
|
+
if email != None:
|
|
471
|
+
subject = sys.argv[0] + ": Error message"
|
|
472
|
+
send_email(FROM, email, subject, errmsg, server)
|
|
473
|
+
sys.exit(1)
|
|
474
|
+
|
|
475
|
+
# update start time in the configuration file to the previous end time
|
|
476
|
+
newstart = prev_ends[-1]
|
|
477
|
+
|
|
478
|
+
# if new start time is after end time stop the cronjob and exit
|
|
479
|
+
if newstart >= endtime:
|
|
480
|
+
remove_cron(cronid)
|
|
481
|
+
sys.exit(0) # end the script
|
|
482
|
+
|
|
483
|
+
newend = newstart + int(tsdic[timestep])
|
|
484
|
+
|
|
485
|
+
# check if new end time is past the overall end time
|
|
486
|
+
if newend >= endtime:
|
|
487
|
+
newend = endtime
|
|
488
|
+
else:
|
|
489
|
+
# check if the current time is later than the new end time
|
|
490
|
+
if newend < gpsnow - timelag:
|
|
491
|
+
newend = gpsnow - timelag # set end time to now
|
|
492
|
+
|
|
493
|
+
prev_ends.append(newend)
|
|
494
|
+
|
|
495
|
+
cp.set(
|
|
496
|
+
"times",
|
|
497
|
+
"previous_endtimes",
|
|
498
|
+
"[" + ", ".join(str(z) for z in prev_ends) + "]",
|
|
499
|
+
) # output as list
|
|
500
|
+
else: # create previous end times
|
|
501
|
+
newstart = starttime
|
|
502
|
+
newend = newstart + int(tsdic[timestep])
|
|
503
|
+
|
|
504
|
+
# check if the current time is later than the new end time
|
|
505
|
+
if newend >= endtime:
|
|
506
|
+
newend = endtime
|
|
507
|
+
else:
|
|
508
|
+
if newend < gpsnow - timelag:
|
|
509
|
+
newend = gpsnow - timelag # set end time to now
|
|
510
|
+
|
|
511
|
+
cp.set("times", "previous_endtimes", "[" + str(newend) + "]")
|
|
512
|
+
|
|
513
|
+
# Get the script for running the full pipeline
|
|
514
|
+
if cp.has_option("configuration", "exec"):
|
|
515
|
+
runscript = cp.get("configuration", "exec")
|
|
516
|
+
|
|
517
|
+
if not (os.path.isfile(runscript) and os.access(runscript, os.X_OK)):
|
|
518
|
+
errmsg = (
|
|
519
|
+
"Error... run script '%s' does not exist or is not executable"
|
|
520
|
+
% runscript
|
|
521
|
+
)
|
|
522
|
+
print(errmsg, file=sys.stderr)
|
|
523
|
+
if email != None:
|
|
524
|
+
subject = sys.argv[0] + ": Error message"
|
|
525
|
+
send_email(FROM, email, subject, errmsg, server)
|
|
526
|
+
sys.exit(1)
|
|
527
|
+
else:
|
|
528
|
+
errmsg = "Error... a run script executable 'exec' is required in the '[configuration]' section."
|
|
529
|
+
print(errmsg, file=sys.stderr)
|
|
530
|
+
if not startcron:
|
|
531
|
+
remove_cron(cronid) # remove cron job
|
|
532
|
+
if email != None:
|
|
533
|
+
subject = sys.argv[0] + ": Error message"
|
|
534
|
+
send_email(FROM, email, subject, errmsg, server)
|
|
535
|
+
sys.exit(1)
|
|
536
|
+
|
|
537
|
+
# edit start and end times for the main run configuration script
|
|
538
|
+
if cprun.has_section("analysis"):
|
|
539
|
+
cprun.set("analysis", "starttime", str(newstart)) # set start time
|
|
540
|
+
cprun.set("analysis", "endtime", str(newend)) # set end time
|
|
541
|
+
cprun.set("analysis", "autonomous", "True") # set 'autonomous' to true
|
|
542
|
+
cprun.set(
|
|
543
|
+
"analysis", "submit_dag", "True"
|
|
544
|
+
) # set to make sure Condor DAG is submitted
|
|
545
|
+
|
|
546
|
+
# create file name for DAG
|
|
547
|
+
dagname = "automated_run_%s-%s" % (str(newstart), str(newend))
|
|
548
|
+
cprun.set(
|
|
549
|
+
"analysis", "dag_name", dagname
|
|
550
|
+
) # add this dag file name to the automation code configuration script (to be used to check for DAG completion)
|
|
551
|
+
|
|
552
|
+
if prevdags != None:
|
|
553
|
+
# add on new DAG file to list
|
|
554
|
+
prevdags.append(os.path.join(rundir, dagname + ".dag"))
|
|
555
|
+
cp.set(
|
|
556
|
+
"configuration",
|
|
557
|
+
"previous_dags",
|
|
558
|
+
"[" + ", ".join(['"%s"' % z for z in prevdags]) + "]",
|
|
559
|
+
) # output as list
|
|
560
|
+
else: # output DAG file to previous_dags list
|
|
561
|
+
cp.set(
|
|
562
|
+
"configuration",
|
|
563
|
+
"previous_dags",
|
|
564
|
+
'["' + os.path.join(rundir, dagname + ".dag") + '"]',
|
|
565
|
+
)
|
|
566
|
+
|
|
567
|
+
# add the initial start time
|
|
568
|
+
cprun.set("analysis", "autonomous_initial_start", str(starttime))
|
|
569
|
+
|
|
570
|
+
# write updated parameters to the file
|
|
571
|
+
fc = open(runconfig, "w")
|
|
572
|
+
cprun.write(fc)
|
|
573
|
+
fc.close()
|
|
574
|
+
else:
|
|
575
|
+
errmsg = (
|
|
576
|
+
"Error... run configuration file '%s' has no '[analysis]' section!"
|
|
577
|
+
% runconfig
|
|
578
|
+
)
|
|
579
|
+
print(errmsg, file=sys.stderr)
|
|
580
|
+
if not startcron:
|
|
581
|
+
remove_cron(cronid)
|
|
582
|
+
if email != None:
|
|
583
|
+
subject = sys.argv[0] + ": Error message"
|
|
584
|
+
send_email(FROM, email, subject, errmsg, server)
|
|
585
|
+
sys.exit(1)
|
|
586
|
+
|
|
587
|
+
# create crontab job
|
|
588
|
+
if startcron:
|
|
589
|
+
# check for a virtual environment to run code under
|
|
590
|
+
wov = ""
|
|
591
|
+
if cp.has_option(
|
|
592
|
+
"configuration", "virtualenv"
|
|
593
|
+
): # assumes using virtualenvwrapper.sh
|
|
594
|
+
virtualenv = cp.get("configuration", "virtualenv")
|
|
595
|
+
try:
|
|
596
|
+
woh = os.environ["WORKON_HOME"]
|
|
597
|
+
if not os.path.isdir(os.path.join(woh, virtualenv)):
|
|
598
|
+
print(
|
|
599
|
+
"Error... if specifying a virtualenv the environment must exist",
|
|
600
|
+
file=sys.stderr,
|
|
601
|
+
)
|
|
602
|
+
sys.exit(1)
|
|
603
|
+
else:
|
|
604
|
+
wov = "workon " + virtualenv
|
|
605
|
+
except:
|
|
606
|
+
print(
|
|
607
|
+
"Error... if specifying a virtualenv the 'WORKON_HOME' environment must exist",
|
|
608
|
+
file=sys.stderr,
|
|
609
|
+
)
|
|
610
|
+
sys.exit(1)
|
|
611
|
+
elif cp.has_option("configuration", "conda"): # assumes using conda
|
|
612
|
+
virtualenv = cp.get("configuration", "conda")
|
|
613
|
+
wov = "conda activate {}".format(virtualenv)
|
|
614
|
+
|
|
615
|
+
# check for .bash_profile, or similar file, to invoke
|
|
616
|
+
profile = None
|
|
617
|
+
if cp.has_option("configuration", "profile"):
|
|
618
|
+
profile = cp.get("configuration", "profile")
|
|
619
|
+
else:
|
|
620
|
+
# default to ${HOME}/.bash_profile
|
|
621
|
+
profile = os.path.join(os.environ["HOME"], ".bash_profile")
|
|
622
|
+
if not os.path.isfile(profile):
|
|
623
|
+
print("Error... no profile file is given", file=sys.stderr)
|
|
624
|
+
sys.exit(1)
|
|
625
|
+
|
|
626
|
+
if keytab is not None:
|
|
627
|
+
krbcert = "export KRB5CCNAME={}".format(certificate)
|
|
628
|
+
kinit = "/usr/bin/kinit -a -P -F -k -t {} {}".format(keytab, authprinc)
|
|
629
|
+
ligoproxyinit = "/usr/bin/ligo-proxy-init -k"
|
|
630
|
+
else:
|
|
631
|
+
krbcert = ""
|
|
632
|
+
kinit = ""
|
|
633
|
+
ligoproxyinit = ""
|
|
634
|
+
|
|
635
|
+
# output wrapper script
|
|
636
|
+
try:
|
|
637
|
+
# set the cron wrapper script (which will re-run this script)
|
|
638
|
+
cronwrapperscript = os.path.splitext(inifile)[0] + ".sh"
|
|
639
|
+
cronwrapper = (
|
|
640
|
+
"""#!/bin/bash
|
|
641
|
+
source {0} # source profile
|
|
642
|
+
{1} # enable virtual environment (assumes you have virtualenvwrapper.sh/conda)
|
|
643
|
+
{2} # export kerberos certificate location (if required)
|
|
644
|
+
{3} # generate kerberos certificate (if required)
|
|
645
|
+
{4} # create proxy (if required)
|
|
646
|
+
%s {5} # re-run this script
|
|
647
|
+
"""
|
|
648
|
+
% sys.argv[0]
|
|
649
|
+
)
|
|
650
|
+
|
|
651
|
+
fp = open(cronwrapperscript, "w")
|
|
652
|
+
fp.write(
|
|
653
|
+
cronwrapper.format(profile, wov, krbcert, kinit, ligoproxyinit, inifile)
|
|
654
|
+
)
|
|
655
|
+
fp.close()
|
|
656
|
+
os.chmod(
|
|
657
|
+
cronwrapperscript, stat.S_IRWXU | stat.S_IRWXG | stat.S_IXOTH
|
|
658
|
+
) # make executable
|
|
659
|
+
except:
|
|
660
|
+
print(
|
|
661
|
+
"Error... could not output cron wrapper script '%s'."
|
|
662
|
+
% cronwrapperscript,
|
|
663
|
+
file=sys.stderr,
|
|
664
|
+
)
|
|
665
|
+
sys.exit(1)
|
|
666
|
+
|
|
667
|
+
try:
|
|
668
|
+
cron = CronTab(user=True)
|
|
669
|
+
job = cron.new(command=cronwrapperscript, comment=cronid)
|
|
670
|
+
|
|
671
|
+
# set job time - this will start at the next time step (as we've just run the first step)
|
|
672
|
+
day = now.datetime.day
|
|
673
|
+
month = now.datetime.month
|
|
674
|
+
year = now.datetime.year
|
|
675
|
+
hour = now.datetime.hour
|
|
676
|
+
minute = now.datetime.minute
|
|
677
|
+
dow = now.datetime.strftime("%a").upper() # day of the week
|
|
678
|
+
|
|
679
|
+
if timestep == "hourly": # required for 'hourly'
|
|
680
|
+
job.minute.on(minute)
|
|
681
|
+
elif timestep == "daily": # required for 'daily'
|
|
682
|
+
job.minute.on(minute)
|
|
683
|
+
job.hour.on(hour)
|
|
684
|
+
elif timestep == "weekly": # required for 'weekly'
|
|
685
|
+
job.minute.on(minute)
|
|
686
|
+
job.hour.on(hour)
|
|
687
|
+
job.dow.on(dow)
|
|
688
|
+
elif timestep == "monthly": # required for 'monthly'
|
|
689
|
+
job.minute.on(minute)
|
|
690
|
+
job.hour.on(hour)
|
|
691
|
+
job.day.on(day)
|
|
692
|
+
else:
|
|
693
|
+
print(
|
|
694
|
+
"Error... unrecognised 'timestep' option '%s'" % timestep,
|
|
695
|
+
file=sys.stderr,
|
|
696
|
+
)
|
|
697
|
+
sys.exit(1)
|
|
698
|
+
|
|
699
|
+
cron.write()
|
|
700
|
+
except:
|
|
701
|
+
errmsg = "Error... could not create crontab job"
|
|
702
|
+
print(errmsg, file=sys.stderr)
|
|
703
|
+
if email != None:
|
|
704
|
+
subject = sys.argv[0] + ": Error message"
|
|
705
|
+
send_email(FROM, email, subject, errmsg, server)
|
|
706
|
+
sys.exit(1)
|
|
707
|
+
|
|
708
|
+
### RUN ANALYSIS SCRIPT ###
|
|
709
|
+
p = sp.Popen("{0} {1}".format(runscript, runconfig), shell=True)
|
|
710
|
+
out, err = p.communicate()
|
|
711
|
+
if p.returncode != 0:
|
|
712
|
+
errmsg = "Error... problem running main script '%s'.: %s, %s" % (
|
|
713
|
+
runscript,
|
|
714
|
+
out,
|
|
715
|
+
err,
|
|
716
|
+
)
|
|
717
|
+
print(errmsg, file=sys.stderr)
|
|
718
|
+
if not startcron:
|
|
719
|
+
remove_cron(cronid)
|
|
720
|
+
if email != None:
|
|
721
|
+
subject = sys.argv[0] + ": Error message"
|
|
722
|
+
send_email(FROM, email, subject, errmsg, server)
|
|
723
|
+
sys.exit(1)
|
|
724
|
+
###########################
|
|
725
|
+
|
|
726
|
+
# Write out updated configuration file
|
|
727
|
+
fc = open(inifile, "w")
|
|
728
|
+
cp.write(fc)
|
|
729
|
+
fc.close()
|
|
730
|
+
|
|
731
|
+
sys.exit(0)
|