Package: lisainstrument
LISA InstrumentPython package package simulating instrumental noises, the propagation of laser beams, the measurements and the on-board processing.The default HDF5 measurement file has the following structure,|- ISI beatnote frequency (total, offsets, fluctuations), of shape (N), in Hz
  |  - isi_carrier_offsets
  |  - isi_carrier_fluctuations
  |  - isi_carriers
  |  - isi_usb_offsets
  |  - isi_usb_fluctuations
  |  - isi_usbs
  |
  |- ISI DWS measurements (in yaw and pitch), of shape (N), in rad
  |  - isi_dws_phis
  |  - isi_dws_etas
  |
  |- Measured pseudo-ranges (MPRs), of shape (N), in s
  |  - mprs
  |
  |- TMI beatnote frequency (total, offsets, fluctuations), of shape (N), in Hz
  |  - tmi_carrier_offsets
  |  - tmi_carrier_fluctuations
  |  - tmi_carriers
  |  - tmi_usb_offsets
  |  - tmi_usb_fluctuations
  |  - tmi_usbs
  |
  |- RFI beatnote frequency (total, offsets, fluctuations), of shape (N), in Hz
  |  - rfi_carrier_offsets
  |  - rfi_carrier_fluctuations
  |  - rfi_carriers
  |  - rfi_usb_offsets
  |  - rfi_usb_fluctuations
  |  - rfi_usbs
  |If thekeep_alloption is set toTrue, the HDF5 measurement file also contains intermediary simulated quantities. Refer toInstrument.write()for more information.Metadata are saved as attributes of the measurement file.Please read carefully this README for more information. Documentation is available as docstringfor instrumental simulation,for noise generation,for DSP tools, andfor container classes.UsageRun a simulationMake sure that Python 3.7 or newer is available, and installlisaconstantsandlisainstrumentusingpip,pipinstallgit+https://gitlab.in2p3.fr/lisa-simulation/constants.git@latest
pipinstallgit+https://gitlab.in2p3.fr/lisa-simulation/instrument.git@latestYou can run a simulation by creating an Instrument object and callingsimulate().fromlisainstrumentimportInstrumentinstrument=Instrument()instrument.simulate()You can parametrize the simulation by setting the desired arguments when instantiating your instrument, or by using the convenience methods,instrument=Instrument(aafilter=None,dt=0.25,size=10000)instrument.disable_all_noises(but='laser')instrument.disable_dopplers()instrument.simulate()Setkeep_alltoTrueto keep in memory intermediary simulated quantities,instrument.simulate(keep_all=True)Write to a measurement fileYou can write the results of a simulation to a measurement file (note thatsimulate()will be called before writing to disk if the simulation has not run yet),instrument=Instrument()instrument.write()You can specify a path to the measurement file, and setkeep_alltoTrueto save intermediary simulated quantities,instrument.write('my-file.h5',keep_all=True)Plot measurementsOnce the simulation has been run, can use convenience methods to plot all beatnote frequency offsets, beatnote frequency fluctuations, beatnote total frequencies, MPRs, or DWS measurements.instrument.plot_offsets()instrument.plot_fluctuations()instrument.plot_totals()instrument.plot_mprs()instrument.plot_dws()You can skip a number of samples at the beginning, and save the figures to disk,instrument.plot_fluctuations(output='my-fluctuations.pdf',skip=500)To plot quantities for all spacecraft or MOSAs, use theplot()method,instrument.isi_carrier_fluctuations.plot(output='my-figure.png',title='ISI Carrier Fluctuations')or use the usual Matplotlib functions with a single timeseries,importmatplotlib.pyplotaspltplt.plot(instrument.t,instrument.isi_carrier_fluctuations['12'])plt.show()ContributingReport an issueWe use the issue-tracking management system associated with the project provided by Gitlab. If you want to report a bug or request a feature, open an issue athttps://gitlab.in2p3.fr/lisa-simulation/instrument/-/issues. You may also thumb-up or comment on existing issues.Development environmentWe strongly recommend to usePython virtual environments.To setup the development environment, use the following commands:gitclonegit@gitlab.in2p3.fr:lisa-simulation/instrument.gitcdinstrument
python-mvenv.source./bin/activate
python-mpipinstall--upgradepip
python-mpipinstall-rrequirements.txtWorkflowThe project's development workflow is based on the issue-tracking system provided by Gitlab, as well as peer-reviewed merge requests. This ensures high-quality standards.Issues are solved by creating branches and opening merge requests. Only the assignee of the related issue and merge request can push commits on the branch. Once all the changes have been pushed, the "draft" specifier on the merge request is removed, and the merge request is assigned to a reviewer. He can push new changes to the branch, or request changes to the original author by re-assigning the merge request to them. When the merge request is accepted, the branch is merged onto master, deleted, and the associated issue is closed.Pylint and unittestWe enforcePEP 8 (Style Guide for Python Code)with Pylint syntax checking, and correction of the code using the unittest testing framework. Both are implemented in the continuous integration system.You can run them locallypylintlisainstrument
python-mpytestAuthorsJean-Baptiste Bayle (j2b.bayle@gmail.com)Olaf Hartwig (olaf.hartwig@obspm.fr)Martin Staab (martin.staab@aei.mpg.de)AcknowledgmentWe are thankful to J. Waldmann for sharing his implementation of long power-law noise time series generators, based onPlaszczynski, S. (2005). Generating long streams of 1/f^alpha noise. J. Waldmann's pyplnoise module has been included in this project as a submodule. You can find the original project athttps://github.com/janwaldmann/pyplnoise.