{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "

Analysis of a QH discharge in an IPQ Circuit

" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 0. Initialise Working Environment" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# External libraries\n", "print('Loading (1/16)'); import sys; import pandas as pd\n", "print('Loading (2/16)'); from multiprocessing import Pool\n", "print('Loading (3/16)'); from IPython.display import display, HTML, Javascript, clear_output\n", "\n", "# Internal libraries\n", "print('Loading (4/16)'); import lhcsmapi\n", "print('Loading (5/16)'); from lhcsmapi.Time import Time\n", "print('Loading (6/16)'); from lhcsmapi.Timer import Timer\n", "print('Loading (7/16)'); from lhcsmapi.analysis.IpqCircuitQuery import IpqCircuitQuery\n", "print('Loading (8/16)'); from lhcsmapi.analysis.IpqCircuitAnalysis import IpqCircuitAnalysis\n", "print('Loading (9/16)'); from lhcsmapi.analysis.expert_input import check_show_next, get_expert_decision\n", "print('Loading (10/16)'); from lhcsmapi.analysis.qh.QuenchHeaterQuery import QuenchHeaterQuery\n", "print('Loading (11/16)'); from lhcsmapi.analysis.report_template import apply_report_template\n", "print('Loading (12/16)'); from lhcsmapi.gui.DateTimeBaseModule import DateTimeBaseModule\n", "print('Loading (13/16)'); from lhcsmapi.gui.hwc.HwcSearchModuleMediator import HwcSearchModuleMediator\n", "print('Loading (14/16)'); from lhcsmapi.gui.qh.QhPmSearchModuleMediator import QhPmSearchModuleMediator\n", "print('Loading (15/16)'); from lhcsmapi.metadata.SignalMetadata import SignalMetadata\n", "print('Loading (16/16)'); from lhcsmnb.parameters import are_all_parameters_injected, get_source_timestamp_df, NbType\n", "\n", "\n", "clear_output()\n", "lhcsmapi.get_lhcsmapi_version()\n", "lhcsmapi.get_lhcsmhwc_version('../__init__.py')\n", "print('Analysis performed by %s' % HwcSearchModuleMediator.get_user())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 1. Find QH Post Mortem Entries" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [ "parameters" ] }, "outputs": [], "source": [ "circuit_type = 'IPQ'" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "with Timer():\n", " if not are_all_parameters_injected(NbType.QH, locals()):\n", " qh_pm_search = QhPmSearchModuleMediator(DateTimeBaseModule(start_date_time='2021-01-12 00:00:00+01:00', end_date_time=Time.to_string(Time.now())), circuit_type=circuit_type)\n", " else:\n", " circuit_sub_type = SignalMetadata.get_circuit_type_for_circuit_name(circuit_name)\n", " source_timestamp_df = QuenchHeaterQuery(circuit_sub_type, circuit_name).find_source_timestamp_qh_with_pattern('*', start_time, end_time)\n", " display(HTML(source_timestamp_df.to_html()))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 2. Query All Signals Prior to Analysis" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "with Timer():\n", " if not are_all_parameters_injected(NbType.QH, locals()):\n", " circuit_name = qh_pm_search.get_circuit_name()\n", " discharge_level = qh_pm_search.get_discharge_level()\n", " source_timestamp_df = qh_pm_search.source_timestamp_df\n", " is_automatic = qh_pm_search.is_automatic_mode()\n", " \n", " ipq_query = IpqCircuitQuery(circuit_type, circuit_name)\n", " ipq_analysis = IpqCircuitAnalysis(circuit_type, None, circuit_name=circuit_name)\n", " \n", " u_hds_dfss = ipq_query.query_qh_pm(source_timestamp_df, signal_names=['U_HDS'])\n", " u_hds_ref_dfss = ipq_query.query_qh_pm(source_timestamp_df, signal_names=['U_HDS'], is_ref=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 3. Quench Heaters\n", "\n", "*CRITERIA*:\n", "- all characteristic times of an exponential decay calculated with the 'charge' approach for voltage is +/- 5 ms from the reference ones\n", "- the initial voltage should be between 810 V and 1000 V\n", "- the final voltage should be between 0 V and 10 V\n", "\n", "*GRAPHS*: \n", "- t = 0 s corresponds to the start of the pseudo-exponential decay\n", "\n", "Voltage view (linear and log)\n", "- the queried and filtered quench heater voltage on the left axis (actual signal continuous, reference dashed), U_HDS" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "scrolled": false }, "outputs": [], "source": [ "index = 0\n", "for u_hds_dfs, u_hds_ref_dfs in zip(u_hds_dfss, u_hds_ref_dfss):\n", " print(index, source_timestamp_df.loc[index, 'timestamp'])\n", " if u_hds_dfs:\n", " ipq_analysis.analyze_single_qh_voltage_with_ref(circuit_name, source_timestamp_df.loc[index, 'timestamp'], u_hds_dfs, u_hds_ref_dfs, nominal_voltage=discharge_level)\n", " else:\n", " print(f\"No Quench Heater Discharges!\")\n", " index += 1" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "ignore" ] }, "source": [ "# 4. Signature Decision" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "ignore" ] }, "source": [ "# 5. Final Report" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [ "ignore" ] }, "outputs": [], "source": [ "if not source_timestamp_df.empty:\n", " analysis_start_time = Time.get_analysis_start_time()\n", " prefix_circuit_name = circuit_name.split('.')[0]\n", " date_time_qh = Time.to_datetime(source_timestamp_df.loc[0, 'timestamp']).strftime(\"%Y-%m-%d-%Hh%M\")\n", "\n", " apply_report_template()\n", " !mkdir -p /eos/project/m/mp3/IPQ/$prefix_circuit_name/$circuit_name/QHDA\n", " file_name_html = \"{}_QHDA-{}-{}_{}.html\".format(circuit_name, date_time_qh, analysis_start_time, signature)\n", " full_path = '/eos/project/m/mp3/IPQ/{}/{}/QHDA/{}'.format(prefix_circuit_name, circuit_name, file_name_html)\n", " print('Compact notebook report saved to (Windows): ' + '\\\\\\\\cernbox-smb' + full_path.replace('/', '\\\\'))\n", " display(Javascript('IPython.notebook.save_notebook();'))\n", " Time.sleep(5)\n", " !{sys.executable} -m jupyter nbconvert --to html $'HWC_IPQ_QHDA.ipynb' --output /eos/project/m/mp3/IPQ/$prefix_circuit_name/$circuit_name/QHDA/$file_name_html --TemplateExporter.exclude_input=True --TagRemovePreprocessor.remove_all_outputs_tags='[\"skip_output\"]' --TagRemovePreprocessor.remove_cell_tags='[\"skip_cell\"]'" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "ignore" ] }, "source": [ "# 6. Save Timestamps in Reference Format (if update needed)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [ "ignore" ] }, "outputs": [], "source": [ "if not source_timestamp_df.empty:\n", " analysis_start_time = Time.get_analysis_start_time()\n", " prefix_circuit_name = circuit_name.split('.')[0]\n", " !mkdir -p /eos/project/m/mp3/IPQ/$prefix_circuit_name/$circuit_name/QHDA\n", " file_name = \"{}_QHDA-{}-{}_Reference\".format(circuit_name, date_time_qh, analysis_start_time)\n", " csv_full_path = '/eos/project/m/mp3/IPQ/{}/{}/QHDA/{}.csv'.format(prefix_circuit_name, circuit_name, file_name)\n", " cell_datetime_timestamp = pd.DataFrame(source_timestamp_df.rename(columns={'source': 'Cell'})['Cell'])\n", " cell_datetime_timestamp['Timestamp String'] = source_timestamp_df['timestamp'].apply(lambda col: Time.to_string_short(col, n_dec_digits=9))\n", " cell_datetime_timestamp['Timestamp'] = source_timestamp_df['timestamp']\n", " cell_datetime_timestamp.to_csv(csv_full_path, index=False)\n", " print('Reference timestamp table saved to (Windows): ' + '\\\\\\\\cernbox-smb' + csv_full_path.replace('/', '\\\\'))" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [ "result" ] }, "outputs": [], "source": [ "ipq_analysis.get_status()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [ "result" ] }, "outputs": [], "source": [ "ipq_analysis.get_analysis_result()" ] } ], "metadata": { "celltoolbar": "Tags", "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.6" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": false, "sideBar": false, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 4 }