{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import importlib\nimport logging\nfrom typing import Optional\nimport os\nimport lalpulsar\nimport pyfstat\n\nlogger = logging.getLogger(__name__)\n\nimport numpy as np\n\nhome = '/home/jon'\n\ndef make_sft_from_arrays(\n        #sftfilepatternH: str = '/home/jon/kaggle/contgrav/H-1440_H1_1800SFT_simulated_signal-1000000000-2592000*.sft',\n        #sftfilepatternL: str = '/home/jon/kaggle/contgrav/H-1440_L1_1800SFT_simulated_signal-1000000000-2592000*.sft',\n        sftfilepatternH: str = '/home/jon/kaggle/contgrav/H-1_H1_1800SFT_simulated_signal-1000000000-1800.sft',\n        sftfilepatternL: str = '/home/jon/kaggle/contgrav/L-1_L1_1800SFT_simulated_signal-1000000000-1800.sft',\n        hdfpath: str = '/home/jongpu/kaggle/contgrav_data/test/',\n        #idx='fffa17f67',\n        #idx='9f5acbd94',\n        #idx='00f226552',\n        idx='fb1e0df09',\n        which='test',\n        fMin: Optional[float] = None,\n        fMax: Optional[float] = None,\n        constraints: Optional[lalpulsar.SFTConstraints] = None,\n):\n    # load data\n    gensig = importlib.import_module('3_generating_signals')\n\n    f1, t1, a1, f2, t2, a2 = gensig.get_hdf5_data(which=which, name=idx, i=None, scale=1.0, verbose=False)\n\n    basepath = '/home/jon/kaggle/contgrav/sfts_%s' % idx\n    os.makedirs(basepath, exist_ok=True)\n\n    duration1 = t1[-1] - t1[0]\n    np.savez(os.path.join(basepath, 'H1.meta.npy'), duration1=duration1, fb=f1[0], fe=f1[-1], tb=t1[0], te=t1[-1])\n    last_t1 = 0\n    for ii in range(a1.shape[1]):\n        make_sft_from_arrays1(\n            sftfilepattern=sftfilepatternH,\n            hdfpath=hdfpath,\n            idx=idx,\n            ii=ii,\n            which=which,\n            fMin=fMin,\n            fMax=fMax,\n            constraints=constraints,\n            f1=f1[0] - 2*360 * 0.2/360 + np.arange(0, 360*5) * 0.2/360,\n            t1=t1[ii],\n            a1=np.hstack([a1[:, ii]]*5),\n            det='H1',\n            basepath=basepath,\n        )\n        print(\"t1: %s diff: %s\" % (t1[ii], (t1[ii] - last_t1)))\n        last_t1 = t1[ii]\n\n    duration2 = t2[-1] - t2[0]\n    np.savez(os.path.join(basepath, 'L1.meta.npy'), duration1=duration2, fb=f2[0], fe=f2[-1], tb=t2[0], te=t2[-1])\n    for ii in range(a2.shape[1]):\n        make_sft_from_arrays1(\n            sftfilepattern=sftfilepatternL,\n            hdfpath=hdfpath,\n            idx=idx,\n            ii=ii,\n            which=which,\n            fMin=fMin,\n            fMax=fMax,\n            constraints=constraints,\n            f1=f2[0] - 2*360 * 0.2/360 + np.arange(0, 360*5) * 0.2/360,\n            t1=t2[ii],\n            a1=np.hstack([a2[:, ii]]*5),\n            det='L1',\n            basepath=basepath,\n        )\n\n\ndef make_sft_from_arrays1(\n        sftfilepattern: str = '/home/jon/kaggle/contgrav/H-4800_H1_1800SFT_misc-1000000000-8640000*.sft',\n        hdfpath: str = '/home/jongpu/kaggle/contgrav_data/test/',\n        idx='fffa17f67',\n        ii=0,\n        which='test',\n        fMin: Optional[float] = None,\n        fMax: Optional[float] = None,\n        constraints: Optional[lalpulsar.SFTConstraints] = None,\n        f1=None, t1=None, a1=None, det='UN',\n        basepath='./',\n        ):\n    constraints = constraints or lalpulsar.SFTConstraints()\n    if fMin is None and fMax is None:\n        fMin = fMax = -1\n    elif fMin is None or fMax is None:\n        raise ValueError(\"Need either none or both of fMin, fMax.\")\n\n    sft_catalog = lalpulsar.SFTdataFind(sftfilepattern, constraints)\n    ifo_labels = lalpulsar.ListIFOsInCatalog(sft_catalog)\n\n    logger.info(\n        f\"Loading {sft_catalog.length} SFTs from {', '.join(ifo_labels.data)}...\"\n    )\n    multi_sfts = lalpulsar.LoadMultiSFTs(sft_catalog, fMin, fMax)\n    logger.debug(\"done!\")\n\n    times = {}\n    amplitudes = {}\n\n    for ind, ifo in enumerate(ifo_labels.data):\n\n        #sfts = multi_sfts.data[ind]\n        #times[ifo] = np.array([sft.epoch.gpsSeconds for sft in sfts.data])\n        #amplitudes[ifo] = np.array([sft.data.data for sft in sfts.data]).T\n\n        # modify\n        # f1=None, f2=None, t1=None, t2=None, a1=None, a2=None,\n        assert multi_sfts.data[0].data[0].data.data.shape[0] == 360 * 5\n        assert a1.shape[0] == 360 * 5\n        assert f1.shape[0] == 360 * 5\n        assert isinstance(t1, np.int64)\n        #np.array([multi_sfts.data[0].data[0]])\n        #multi_sfts.data[0].data[0].data.data[0] = 0\n        #multi_sfts.data[0].data[0]\n        #multi_sfts.data[0].data[0].data.data =\n        multi_sfts.data[0].data[0].data.data = np.complex64(a1)\n        multi_sfts.data[0].data[0].f0 = f1[0]  # e.g. 29.9 for F0=30.0 and band=0.2\n        assert multi_sfts.data[0].data[0].name == det\n        multi_sfts.data[0].data[0].epoch = t1\n\n        # write single vector (COMPLEX8FrequencySeriesVector_sftVect)\n        lalpulsar.WriteSFTVector2File(multi_sfts.data[0], basepath, 'comment', '%s_%s_%s' % (which, idx, ii))\n\n\nmake_sft_from_arrays()\n","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"execution_count":null,"outputs":[]}]}