add missing resistance calculation update on the multi inheritance
%% Cell type:markdown id: tags: | %% Cell type:markdown id: tags: | ||
<h1><center>Analysis of PLI3.a5 HWC Test in an RQ Circuit</center></h1> | <h1><center>Analysis of PLI3.a5 HWC Test in an RQ Circuit</center></h1> | ||
<img src="https://gitlab.cern.ch/LHCData/lhc-sm-hwc/raw/master/figures/rq/RQ.png" width=75%> | <img src="https://gitlab.cern.ch/LHCData/lhc-sm-hwc/raw/master/figures/rq/RQ.png" width=75%> | ||
PLI3.A5 is a current cycle with 2 current levels (I_SM, I_INTERM_2) during TIME_INTERM_2 each. PLI3.A5 can be performed with calorimetric measurement (original purpose). In case of calorimetric measurement, the cryogenic cooling must be stable and maintained constant during the whole cycle. The aim of this test is to check the performance of the current leads, and, in case of calorimetric measurements, to detect abnormal heating in the magnets environment. | PLI3.A5 is a current cycle with 2 current levels (I_SM, I_INTERM_2) during TIME_INTERM_2 each. PLI3.A5 can be performed with calorimetric measurement (original purpose). In case of calorimetric measurement, the cryogenic cooling must be stable and maintained constant during the whole cycle. The aim of this test is to check the performance of the current leads, and, in case of calorimetric measurements, to detect abnormal heating in the magnets environment. | ||
The current to earth and the current error from the power convertor are checked during the sequence. | The current to earth and the current error from the power convertor are checked during the sequence. | ||
<img src="https://gitlab.cern.ch/LHCData/lhc-sm-hwc/raw/master/figures/rq/PLI3_current.png" width=75%> | <img src="https://gitlab.cern.ch/LHCData/lhc-sm-hwc/raw/master/figures/rq/PLI3_current.png" width=75%> | ||
The aim of this test is to check the performance of the QPS and EE systems and the correct current sharing in the different FWD. The current to earth and the current error from the PC are checked during the sequence. | The aim of this test is to check the performance of the QPS and EE systems and the correct current sharing in the different FWD. The current to earth and the current error from the PC are checked during the sequence. | ||
The required analysis and signatures are listed below. | The required analysis and signatures are listed below. | ||
|Responsible|Type of analysis|Criterion| | |Responsible|Type of analysis|Criterion| | ||
|-----------|----------------|---------| | |-----------|----------------|---------| | ||
|PC|Automatic analysis on earth current and error current|I_EARTH_PLI3_A5 < I_EARTH_MAX and I_ERR_PLI3_A5 < I_ERR_MAX| | |PC|Automatic analysis on earth current and error current|I_EARTH_PLI3_A5 < I_EARTH_MAX and I_ERR_PLI3_A5 < I_ERR_MAX| | ||
|MP3|Splice signals|R_bus<10 nOhm R_mag<50 nOhm| | |MP3|Splice signals|R_bus<10 nOhm R_mag<50 nOhm| | ||
|MP3|Current lead|46 < TT891A < 54K| | |MP3|Current lead|46 < TT891A < 54K| | ||
|MP3|Current lead|Abs(U_RES)< 40mV and no drift| | |MP3|Current lead|Abs(U_RES)< 40mV and no drift| | ||
|MP3|Current lead|Abs(U_HTS) < 0.5mV| | |MP3|Current lead|Abs(U_HTS) < 0.5mV| | ||
source: Powering Procedure and Acceptance Criteria for the 13 kA Quadrupole (RQD-RQF) Circuits, MP3 Procedure, <a href="https://edms.cern.ch/document/874714">https://edms.cern.ch/document/874714</a> (Please follow this link for the latest version) | source: Powering Procedure and Acceptance Criteria for the 13 kA Quadrupole (RQD-RQF) Circuits, MP3 Procedure, <a href="https://edms.cern.ch/document/874714">https://edms.cern.ch/document/874714</a> (Please follow this link for the latest version) | ||
%% Cell type:markdown id: tags: | %% Cell type:markdown id: tags: | ||
# Analysis Assumptions | # Analysis Assumptions | ||
- We consider standard analysis scenarios, i.e., all signals can be queried. Depending on what signal is missing, an analysis can raise a warning and continue or an error and abort the analysis. | - We consider standard analysis scenarios, i.e., all signals can be queried. Depending on what signal is missing, an analysis can raise a warning and continue or an error and abort the analysis. | ||
- It is recommended to execute each cell one after another. However, since the signals are queried prior to an analysis, any order of execution is allowed. In case an analysis cell is aborted, the following ones may not be executed (e.g. I\_MEAS not present). | - It is recommended to execute each cell one after another. However, since the signals are queried prior to an analysis, any order of execution is allowed. In case an analysis cell is aborted, the following ones may not be executed (e.g. I\_MEAS not present). | ||
# Plot Convention | # Plot Convention | ||
- Scales are labeled with signal name followed by a comma and a unit in the square bracket, e.g., I_MEAS, [A] | - Scales are labeled with signal name followed by a comma and a unit in the square bracket, e.g., I_MEAS, [A] | ||
- If a reference signal is present, it is represented with a dashed line | - If a reference signal is present, it is represented with a dashed line | ||
- If the main current is present, its axis is on the left. Remaining signals are attached to the axis on the right. The legend of these signals is located on the lower left and upper right, respectively. | - If the main current is present, its axis is on the left. Remaining signals are attached to the axis on the right. The legend of these signals is located on the lower left and upper right, respectively. | ||
- The grid comes from the left axis | - The grid comes from the left axis | ||
- Title contains timestamp, circuit name, signal name allowing for re-access the signal. | - Title contains timestamp, circuit name, signal name allowing for re-access the signal. | ||
- The plots assigned to the left scale got colors: blue (C0) and orange (C1). Plots presented on the right have colors red (C2) and green (C3). | - The plots assigned to the left scale got colors: blue (C0) and orange (C1). Plots presented on the right have colors red (C2) and green (C3). | ||
- Each plot has an individual time-synchronization mentioned explicitly in the description. | - Each plot has an individual time-synchronization mentioned explicitly in the description. | ||
- If an axis has a single signal, change color of the label to match the signal's color. Otherwise, the label color is black. | - If an axis has a single signal, change color of the label to match the signal's color. Otherwise, the label color is black. | ||
%% Cell type:markdown id: tags: | %% Cell type:markdown id: tags: | ||
# 0. Initialise Working Environment | # 0. Initialise Working Environment | ||
%% Cell type:code id: tags: | %% Cell type:code id: tags: | ||
``` python | ``` python | ||
# External libraries | # External libraries | ||
print('Loading (1/11)'); import sys; import pandas as pd | print('Loading (1/11)'); import sys; import pandas as pd | ||
print('Loading (2/11)'); from IPython.display import display, Javascript, clear_output | print('Loading (2/11)'); from IPython.display import display, Javascript, clear_output | ||
# Internal libraries | # Internal libraries | ||
print('Loading (3/11)'); import lhcsmapi | print('Loading (3/11)'); import lhcsmapi | ||
print('Loading (4/11)'); from lhcsmapi.Time import Time | print('Loading (4/11)'); from lhcsmapi.Time import Time | ||
print('Loading (5/11)'); from lhcsmapi.Timer import Timer | print('Loading (5/11)'); from lhcsmapi.Timer import Timer | ||
print('Loading (6/11)'); from lhcsmapi.analysis.RqCircuitQuery import RqCircuitQuery | print('Loading (6/11)'); from lhcsmapi.analysis.RqCircuitQuery import RqCircuitQuery | ||
print('Loading (7/11)'); from lhcsmapi.analysis.RqCircuitAnalysis import RqCircuitAnalysis | print('Loading (7/11)'); from lhcsmapi.analysis.RqCircuitAnalysis import RqCircuitAnalysis | ||
print('Loading (8/11)'); from lhcsmapi.analysis.report_template import apply_report_template | print('Loading (8/11)'); from lhcsmapi.analysis.report_template import apply_report_template | ||
print('Loading (9/11)'); from lhcsmapi.gui.hwc.HwcSearchModuleMediator import HwcSearchModuleMediator | print('Loading (9/11)'); from lhcsmapi.gui.hwc.HwcSearchModuleMediator import HwcSearchModuleMediator | ||
print('Loading (10/11)'); from lhcsmapi.pyedsl.PlotBuilder import create_hwc_plot_title_with_circuit_name | print('Loading (10/11)'); from lhcsmapi.pyedsl.PlotBuilder import create_hwc_plot_title_with_circuit_name | ||
print('Loading (11/11)'); from lhcsmapi.analysis.expert_input import get_expert_decision | print('Loading (11/11)'); from lhcsmapi.analysis.expert_input import get_expert_decision | ||
pd.set_option('display.max_columns', None) | pd.set_option('display.max_columns', None) | ||
pd.set_option('display.max_rows', None) | pd.set_option('display.max_rows', None) | ||
clear_output() | clear_output() | ||
lhcsmapi.get_lhcsmapi_version() | lhcsmapi.get_lhcsmapi_version() | ||
lhcsmapi.get_lhcsmhwc_version('../__init__.py') | lhcsmapi.get_lhcsmhwc_version('../__init__.py') | ||
print('Analysis performed by %s' % HwcSearchModuleMediator.get_user()) | print('Analysis performed by %s' % HwcSearchModuleMediator.get_user()) | ||
``` | ``` | ||
%% Cell type:markdown id: tags: | %% Cell type:markdown id: tags: | ||
# 1. User Input | # 1. User Input | ||
1. Copy code from AccTesting and paste into an empty cell below | 1. Copy code from AccTesting and paste into an empty cell below | ||
<img src="https://gitlab.cern.ch/LHCData/lhc-sm-hwc/-/raw/master/figures/swan-manual-acctesting-integration.png"> | <img src="https://gitlab.cern.ch/LHCData/lhc-sm-hwc/-/raw/master/figures/swan-manual-acctesting-integration.png"> | ||
- If you only want to test the notebook only for the copy&paste feature (without opening the AccTesting), please copy and execute the code below | - If you only want to test the notebook only for the copy&paste feature (without opening the AccTesting), please copy and execute the code below | ||
``` | ``` | ||
hwc_test = 'PLI3.a5' | hwc_test = 'PLI3.a5' | ||
circuit_name = 'RQD.A12' | circuit_name = 'RQD.A12' | ||
campaign = 'HWC_2017' | campaign = 'HWC_2017' | ||
t_start = '2017-04-24 07:05:31.332' | t_start = '2017-04-24 07:05:31.332' | ||
t_end = '2017-04-24 09:52:28.401' | t_end = '2017-04-24 09:52:28.401' | ||
``` | ``` | ||
2. To analyze a historical test with a browser GUI, copy and execute the following code in the cell below | 2. To analyze a historical test with a browser GUI, copy and execute the following code in the cell below | ||
``` | ``` | ||
circuit_type = 'RQ' | circuit_type = 'RQ' | ||
hwc_test = 'PLI3.a5' | hwc_test = 'PLI3.a5' | ||
hwcb = HwcSearchModuleMediator(circuit_type=circuit_type, hwc_test=hwc_test, hwc_summary_path='/eos/project/l/lhcsm/hwc/HWC_Summary.csv') | hwcb = HwcSearchModuleMediator(circuit_type=circuit_type, hwc_test=hwc_test, hwc_summary_path='/eos/project/l/lhcsm/hwc/HWC_Summary.csv') | ||
``` | ``` | ||
- After opening the browser GUI, choose a circuit name in order to display HWC test with, campaign name as well as start and end time | - After opening the browser GUI, choose a circuit name in order to display HWC test with, campaign name as well as start and end time | ||
%% Cell type:code id: tags: | %% Cell type:code id: tags: | ||
``` python | ``` python | ||
``` | ``` | ||
%% Cell type:code id: tags: | %% Cell type:code id: tags: | ||
``` python | ``` python | ||
print('hwc_test = \'%s\'\ncircuit_name = \'%s\'\ncampaign = \'%s\'\nt_start = \'%s\'\nt_end = \'%s\'' % (hwc_test, circuit_name, campaign, t_start, t_end)) | print('hwc_test = \'%s\'\ncircuit_name = \'%s\'\ncampaign = \'%s\'\nt_start = \'%s\'\nt_end = \'%s\'' % (hwc_test, circuit_name, campaign, t_start, t_end)) | ||
``` | ``` | ||
%% Cell type:markdown id: tags: | %% Cell type:markdown id: tags: | ||
# 2. Query All Signals Prior to Analysis | # 2. Query All Signals Prior to Analysis | ||
%% Cell type:code id: tags:skip_output | %% Cell type:code id: tags:skip_output | ||
``` python | ``` python | ||
circuit_type = 'RQ' | circuit_type = 'RQ' | ||
if 'hwcb' in locals(): | if 'hwcb' in locals(): | ||
circuit_name = hwcb.get_circuit_name() | circuit_name = hwcb.get_circuit_name() | ||
t_start = Time.to_unix_timestamp(hwcb.get_start_time()) | t_start = Time.to_unix_timestamp(hwcb.get_start_time()) | ||
t_end = Time.to_unix_timestamp(hwcb.get_end_time()) | t_end = Time.to_unix_timestamp(hwcb.get_end_time()) | ||
is_automatic = hwcb.is_automatic_mode() | is_automatic = hwcb.is_automatic_mode() | ||
else: | else: | ||
t_start = Time.to_unix_timestamp(t_start) | t_start = Time.to_unix_timestamp(t_start) | ||
t_end = Time.to_unix_timestamp(t_end) | t_end = Time.to_unix_timestamp(t_end) | ||
is_automatic = False | is_automatic = False | ||
circuit_names = [circuit_name if 'RQD' in circuit_name else circuit_name.replace('F', 'D'), | circuit_names = [circuit_name if 'RQD' in circuit_name else circuit_name.replace('F', 'D'), | ||
circuit_name if 'RQF' in circuit_name else circuit_name.replace('D', 'F')] | circuit_name if 'RQF' in circuit_name else circuit_name.replace('D', 'F')] | ||
rqd_query = RqCircuitQuery(circuit_type, circuit_names[0], max_executions=4) | rqd_query = RqCircuitQuery(circuit_type, circuit_names[0], max_executions=4) | ||
rqf_query = RqCircuitQuery(circuit_type, circuit_names[1], max_executions=4) | rqf_query = RqCircuitQuery(circuit_type, circuit_names[1], max_executions=4) | ||
rq_analysis = RqCircuitAnalysis(circuit_type, None, is_automatic=is_automatic) | rq_analysis = RqCircuitAnalysis(circuit_type, None, is_automatic=is_automatic) | ||
with Timer(): | with Timer(): | ||
# PC | # PC | ||