AN_RB_PLI3.a5.ipynb 21.7 KB
Newer Older
1
2
3
4
{
 "cells": [
  {
   "cell_type": "markdown",
5
6
7
   "metadata": {
    "deletable": false
   },
8
9
   "source": [
    "<h1><center>Analysis of a PLI3.a5 HWC in an RB Circuit</center></h1>\n",
10
    "<img src=\"https://gitlab.cern.ch/LHCData/lhc-sm-hwc/raw/master/figures/rb/RB.png\" width=75%>\n",
11
12
13
    "\n",
    "PLI3.A2 is a simple current cycle at I_INTERM_2 during TIME_INTERM_2, while 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 also the splices resistance, and, in case of calorimetric measurements, to detect abnormal heating in the magnets environment.\n",
    "\n",
14
    "<img src=\"https://gitlab.cern.ch/LHCData/lhc-sm-hwc/raw/master/figures/rb/PLI3_current.png\" width=50%>\n",
15
16
17
18
19
    "\n",
    "The required analysis and signatures are listed below.\n",
    "\n",
    "|Responsible|Type of analysis|Criterion|\n",
    "|-----------|----------------|---------|\n",
20
21
22
    "|-|Automatic analysis on earth current and error current|I_EARTH_PLI2_S1 < I_EARTH_MAX and I_ERR_PLI2_S1 < I_ERR_MAX|\n",
    "|MP3|Splice signals|From board A and board B separately R_bus_max <3 nOhm. Individual R_splice_max<0.5nOhm R_mag<50 nOhm|\n",
    "|MP3|Current lead|46 < TT891A < 54K; Abs(U_RES)< 40mV; and no drift Abs(U_HTS) < 0.5mV|\n",
23
    "\n",
24
    "source: Powering Procedure and Acceptance Criteria for the 13 kA Dipole Circuits, MP3 Procedure, <a href=\"https://edms.cern.ch/document/874713\">https://edms.cern.ch/document/874713</a>"
25
26
27
28
   ]
  },
  {
   "cell_type": "markdown",
29
30
31
   "metadata": {
    "deletable": false
   },
32
33
   "source": [
    "# Analysis Assumptions\n",
34
35
    "- We consider standard analysis scenarios, i.e., all signals can be queried. If a signal is missing, an analysis can raise a warning and continue or an error and abort the analysis.\n",
    "- It is recommended to execute each cell one after another. However, since the signals are queried prior to 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). \n",
36
37
    "\n",
    "# Plot Convention\n",
38
39
    "- Scales are labeled with signal name followed by a comma and a unit in square brackets, e.g., I_MEAS, [A].\n",
    "- If a reference signal is present, it is represented with a dashed line.\n",
40
    "- 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.\n",
41
42
43
    "- The grid comes from the left axis.\n",
    "- The title contains timestamp, circuit name, and signal name allowing to re-access the signal.\n",
    "- The plots assigned to the left scale have colors: blue (C0) and orange (C1). Plots presented on the right have colors red (C2) and green (C3).\n",
44
    "- Each plot has an individual time-synchronization mentioned explicitly in the description.\n",
45
    "- If an axis has a single signal, then the color of the label matches the signal's color. Otherwise, the label color is black."
46
47
48
49
   ]
  },
  {
   "cell_type": "markdown",
50
51
52
   "metadata": {
    "deletable": false
   },
53
   "source": [
54
    "# 0. Initialise Working Environment"
55
56
57
58
   ]
  },
  {
   "cell_type": "code",
59
   "execution_count": null,
60
   "metadata": {
61
    "deletable": false,
62
63
    "scrolled": false
   },
64
   "outputs": [],
65
   "source": [
66
    "# External libraries\n",
67
    "print('Loading (1/11)'); import sys; import pandas as pd\n",
68
    "print('Loading (2/11)'); from IPython.display import display, Javascript, clear_output\n",
69
70
    "\n",
    "# Internal libraries\n",
71
72
73
74
75
76
77
78
79
    "print('Loading (3/11)'); import lhcsmapi\n",
    "print('Loading (4/11)'); from lhcsmapi.Time import Time\n",
    "print('Loading (5/11)'); from lhcsmapi.Timer import Timer\n",
    "print('Loading (6/11)'); from lhcsmapi.analysis.RbCircuitQuery import RbCircuitQuery\n",
    "print('Loading (7/11)'); from lhcsmapi.analysis.RbCircuitAnalysis import RbCircuitAnalysis\n",
    "print('Loading (8/11)'); from lhcsmapi.analysis.report_template import apply_report_template\n",
    "print('Loading (9/11)'); from lhcsmapi.gui.hwc.HwcSearchModuleMediator import HwcSearchModuleMediator\n",
    "print('Loading (10/11)'); from lhcsmapi.pyedsl.PlotBuilder import create_hwc_plot_title_with_circuit_name\n",
    "print('Loading (11/11)'); from lhcsmapi.analysis.expert_input import get_expert_decision\n",
80
    "\n",
81
82
83
    "pd.set_option('display.max_columns', None) \n",
    "pd.set_option('display.max_rows', None)\n",
    "\n",
84
85
    "clear_output()\n",
    "lhcsmapi.get_lhcsmapi_version()\n",
86
87
    "lhcsmapi.get_lhcsmhwc_version('../__init__.py')\n",
    "print('Analysis performed by %s' % HwcSearchModuleMediator.get_user())"
88
89
90
91
   ]
  },
  {
   "cell_type": "markdown",
92
93
94
   "metadata": {
    "deletable": false
   },
95
   "source": [
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
    "# 1. User Input\n",
    "1. Copy code from AccTesting and paste into an empty cell below\n",
    "<img src=\"https://gitlab.cern.ch/LHCData/lhc-sm-hwc/-/raw/master/figures/swan-manual-acctesting-integration.png\">\n",
    "\n",
    "    - 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\n",
    "    ```\n",
    "    hwc_test = 'PLI3.a5'\n",
    "    circuit_name = 'RB.A12'\n",
    "    campaign = 'HWC_2017'\n",
    "    t_start = '2017-04-22 08:57:30.399'\n",
    "    t_end = '2017-04-22 11:32:09.824'\n",
    "    ```\n",
    "\n",
    "2. To analyze a historical test with a browser GUI, copy and execute the following code in the cell below\n",
    "```\n",
    "circuit_type = 'RB'\n",
    "hwc_test = 'PLI3.a5'\n",
    "hwcb = HwcSearchModuleMediator(circuit_type=circuit_type, hwc_test=hwc_test, hwc_summary_path='/eos/project/l/lhcsm/hwc/HWC_Summary.csv')\n",
    "```\n",
    "\n",
    "    - 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"
117
118
119
120
   ]
  },
  {
   "cell_type": "code",
121
   "execution_count": null,
122
   "metadata": {
123
    "deletable": false,
Michal Maciejewski's avatar
Michal Maciejewski committed
124
    "scrolled": false
125
   },
126
   "outputs": [],
127
   "source": []
128
  },
129
130
131
132
133
134
135
136
137
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "print('hwc_test = \\'%s\\'\\ncircuit_name = \\'%s\\'\\ncampaign = \\'%s\\'\\nt_start = \\'%s\\'\\nt_end = \\'%s\\'' % (hwc_test, circuit_name, campaign, t_start, t_end))"
   ]
  },
138
139
  {
   "cell_type": "markdown",
140
141
142
   "metadata": {
    "deletable": false
   },
143
144
145
146
147
148
   "source": [
    "# 2. Query All Signals Prior to Analysis"
   ]
  },
  {
   "cell_type": "code",
149
   "execution_count": null,
150
   "metadata": {
151
    "deleteable": false,
152
    "scrolled": true,
153
154
155
156
    "tags": [
     "skip_output"
    ]
   },
157
   "outputs": [],
158
   "source": [
159
160
161
162
163
164
165
166
167
168
169
    "circuit_type = 'RB'\n",
    "if 'hwcb' in locals():\n",
    "    circuit_name = hwcb.get_circuit_name()\n",
    "    t_start = Time.to_unix_timestamp(hwcb.get_start_time())\n",
    "    t_end = Time.to_unix_timestamp(hwcb.get_end_time())\n",
    "    is_automatic = hwcb.is_automatic_mode()\n",
    "else:\n",
    "    t_start = Time.to_unix_timestamp(t_start)\n",
    "    t_end = Time.to_unix_timestamp(t_end)\n",
    "    is_automatic = False\n",
    "\n",
Michal Maciejewski's avatar
Michal Maciejewski committed
170
    "rb_query = RbCircuitQuery(circuit_type, circuit_name, max_executions=6)\n",
171
    "rb_analysis = RbCircuitAnalysis(circuit_type, None, is_automatic=is_automatic)\n",
172
173
    "\n",
    "with Timer():\n",
174
    "    # PC\n",
Michal Maciejewski's avatar
Michal Maciejewski committed
175
    "    i_meas_nxcals_df = rb_query.query_signal_nxcals(t_start, t_end, t0=t_start, system='PC', signal_names='I_MEAS', spark=spark)[0]\n",
176
    "    i_meas_raw_nxcals_df = rb_query.query_raw_signal_nxcals(t_start, t_end, system='PC', signal_names='I_MEAS', spark=spark)[0]\n",
Michal Maciejewski's avatar
Michal Maciejewski committed
177
    "    plateau_start, plateau_end = rb_analysis.find_plateau_start_and_end(i_meas_raw_nxcals_df, i_meas_threshold=0, min_duration_in_sec=360, time_shift_in_sec=(240, 60))\n",
178
179
    "\n",
    "    # BUSBAR\n",
180
    "    u_res_feature_df, i_meas_feature_df = rb_query.get_busbar_resistances(Time.to_unix_timestamp(t_start), Time.to_unix_timestamp(t_end), plateau_start, plateau_end, signal_name='U_RES', spark=spark)\n",
181
    "    res_busbar_row_df = rb_analysis.calculate_resistance(i_meas_feature_df, u_res_feature_df, 'U_RES', Time.to_unix_timestamp(t_start), circuit_name)\n",
182
    "    res_busbar_df = rb_analysis.convert_to_col(res_busbar_row_df, signal_name='U_RES')\n",
183
    "    \n",
184
    "    # MAGNET\n",
185
    "    u_mag_feature_df, i_meas_feature_df = rb_query.get_busbar_resistances(Time.to_unix_timestamp(t_start), Time.to_unix_timestamp(t_end), plateau_start, plateau_end, signal_name='U_MAG', spark=spark)\n",
186
    "    res_magnet_row_df = rb_analysis.calculate_resistance(i_meas_feature_df, u_mag_feature_df, 'U_MAG', Time.to_unix_timestamp(t_start), circuit_name)\n",
187
    "    res_magnet_df = rb_analysis.convert_to_col(res_magnet_row_df, signal_name='U_MAG')\n",
188
    "    \n",
189
    "    # LEADS\n",
Michal Maciejewski's avatar
Michal Maciejewski committed
190
191
    "    u_res_nxcals_dfs = rb_query.query_signal_nxcals(t_start, t_end, t0=t_start, system=['LEADS_EVEN', 'LEADS_ODD'], signal_names='U_RES', spark=spark)\n",
    "    u_hts_nxcals_dfs = rb_query.query_signal_nxcals(t_start, t_end, t0=t_start, system=['LEADS_EVEN', 'LEADS_ODD'], signal_names='U_HTS', spark=spark)\n",
192
    "\n",
193
194
195
    "    tt891a_nxcals_dfs = rb_query.query_dfb_signal_nxcals(t_start, t_end, system=['LEADS_EVEN_WINCCOA', 'LEADS_ODD_WINCCOA'], signal_names='TT891A', spark=spark)\n",
    "    tt893_nxcals_dfs = rb_query.query_dfb_signal_nxcals(t_start, t_end, system=['LEADS_EVEN_WINCCOA', 'LEADS_ODD_WINCCOA'], signal_names='TT893', spark=spark)\n",
    "    cv891_nxcals_dfs = rb_query.query_dfb_signal_nxcals(t_start, t_end, system=['LEADS_EVEN_WINCCOA', 'LEADS_ODD_WINCCOA'], signal_names='CV891', spark=spark)\n"
196
197
198
199
   ]
  },
  {
   "cell_type": "markdown",
200
201
202
   "metadata": {
    "deletable": false
   },
203
204
205
206
207
   "source": [
    "# 3. Power Converter\n",
    "## 3.1. Plot of the Power Converter Main Current\n",
    "\n",
    "*ANALYSIS*:\n",
208
    "\n",
209
210
    "- Calculation of the duration of current plateaus\n",
    "\n",
211
212
    "*GRAPHS*:\n",
    "\n",
213
214
    "- t = 0 s corresponds to the start of the test\n",
    "- Orange box(es) represent period(s) of time with constant current used for calculation of busbar resistance and DFB thresholds"
215
216
217
218
   ]
  },
  {
   "cell_type": "code",
219
   "execution_count": null,
220
   "metadata": {
221
    "deletable": false,
222
223
    "scrolled": false
   },
224
   "outputs": [],
225
   "source": [
226
227
228
229
230
231
    "import matplotlib as mpl\n",
    "mpl.rcParams['savefig.dpi'] = 80\n",
    "mpl.rcParams['figure.dpi'] = 80\n",
    "%matplotlib notebook\n",
    "title = '%s, %s: %s-%s' % (circuit_name, hwc_test, Time.to_string(t_start).split('.')[0], Time.to_string(t_end).split('.')[0])\n",
    "rb_analysis.plot_i_meas_with_current_plateau(i_meas_nxcals_df, t0=i_meas_raw_nxcals_df.index[0], plateau_start=plateau_start, plateau_end=plateau_end, title=title)"
232
233
234
235
   ]
  },
  {
   "cell_type": "markdown",
236
237
238
   "metadata": {
    "deletable": false
   },
239
240
241
242
243
   "source": [
    "# 4. Busbar\n",
    "## 4.1. Busbar Resistance\n",
    "\n",
    "*ANALYSIS*:\n",
244
    "\n",
Michal Maciejewski's avatar
Michal Maciejewski committed
245
    "- Calculation of the busbar resistance as the slope of a linear fit of U,I curve obtained from the corresponding mean values of the voltage and current\n",
246
    "\n",
247
248
249
250
251
252
    "*CRITERIA*:\n",
    "\n",
    "- Check if the busbar resistance is below 3 nOhm\n",
    "\n",
    "*GRAPHS*:\n",
    "\n",
253
    "- The busbar resistance, R\n",
254
    "- The green box denotes the validity region of the busbar resostance (0, 3] nOhm"
255
256
257
258
   ]
  },
  {
   "cell_type": "code",
259
   "execution_count": null,
260
261
262
   "metadata": {
    "deletable": false
   },
263
   "outputs": [],
264
   "source": [
265
    "res_busbar_outliers_df = rb_analysis.analyze_busbar_magnet_resistance(res_busbar_df, signal_name='R_RES', value_max=3e-9)"
266
267
268
269
   ]
  },
  {
   "cell_type": "code",
270
   "execution_count": null,
271
   "metadata": {
272
    "deletable": false
273
274
275
   },
   "outputs": [],
   "source": [
276
    "RbCircuitQuery.query_and_plot_outlier_voltage(res_busbar_outliers_df, t_start, t_end, i_meas_raw_nxcals_df.index[0], plateau_start, plateau_end, spark=spark)"
277
278
   ]
  },
279
280
281
282
283
284
285
286
287
288
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "busbar_metadata_resistance_df = rb_analysis.merge_busbar_metadata_with_resistance(res_busbar_df, circuit_type, circuit_name)\n",
    "rb_analysis.display_busbar_metadata_resistance_with_threshold(busbar_metadata_resistance_df, threshold=3e-9)"
   ]
  },
289
290
  {
   "cell_type": "markdown",
291
292
293
   "metadata": {
    "deletable": false
   },
294
295
296
297
   "source": [
    "## 4.2. Magnet Resistance\n",
    "\n",
    "*ANALYSIS*:\n",
298
    "\n",
299
    "- Calculation of the magnet resistance as the slope of a linear fit of U,I curve obtained from the corresponding mean alues of the voltage and current\n",
300
301
    "\n",
    "*CRITERIA*\n",
302
    "\n",
303
304
305
306
307
    "- Check if the resistance is below 50 nOhm\n",
    "\n",
    "*GRAPHS*:\n",
    "\n",
    "- The magnet resistance, R\n",
308
    "- The green box denotes the validity region of the magnet resistance (0, 50] nOhm\n"
309
310
311
312
   ]
  },
  {
   "cell_type": "code",
313
   "execution_count": null,
314
315
316
   "metadata": {
    "deletable": false
   },
317
   "outputs": [],
318
   "source": [
319
    "res_magnet_outliers_df = rb_analysis.analyze_busbar_magnet_resistance(res_magnet_df, signal_name='R_MAG', value_max=50e-9)"
320
321
322
323
   ]
  },
  {
   "cell_type": "code",
324
   "execution_count": null,
325
   "metadata": {
326
327
    "deletable": false,
    "scrolled": false
328
   },
329
330
   "outputs": [],
   "source": [
331
    "RbCircuitQuery.query_and_plot_outlier_voltage(res_magnet_outliers_df.reset_index(), t_start, t_end, i_meas_raw_nxcals_df.index[0], plateau_start, plateau_end, spark=spark)"
332
333
   ]
  },
334
335
336
337
338
339
340
341
342
343
344
345
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "scrolled": false
   },
   "outputs": [],
   "source": [
    "magnet_metadata_resistance_df = rb_analysis.merge_busbar_metadata_with_resistance(res_busbar_df, circuit_type, circuit_name)\n",
    "rb_analysis.display_busbar_metadata_resistance_with_threshold(magnet_metadata_resistance_df, threshold=50e-9)"
   ]
  },
346
347
  {
   "cell_type": "markdown",
348
349
350
   "metadata": {
    "deletable": false
   },
351
   "source": [
352
353
    "# 5. DFB\n",
    "## 5.1. DFB Voltage - U_RES\n",
354
    "\n",
355
356
    "*CRITERIA*:\n",
    "- Check if, at constant current, U_RES is constant (no drift < 2mV/h)\n",
357
    "\n",
358
    "*GRAPHS*:\n",
359
    "- t = 0 s corresponds to the start time of the test\n"
360
361
362
363
   ]
  },
  {
   "cell_type": "code",
364
   "execution_count": null,
365
   "metadata": {
366
    "deletable": false
367
   },
368
   "outputs": [],
369
   "source": [
370
    "RbCircuitAnalysis.assert_u_res_min_max_slope(u_res_nxcals_dfs, plateau_start, plateau_end, Time.to_unix_timestamp(t_start), slope_range=(-2, 2))"
371
372
373
374
   ]
  },
  {
   "cell_type": "markdown",
375
376
377
   "metadata": {
    "deletable": false
   },
378
   "source": [
379
    "## 5.2. DFB Voltage - U_HTS\n",
380
    "\n",
381
    "*CRITERIA*:  \n",
382
    "- Check if the voltage is below 50% of the threshold -> Abs(U_HTS) < 0.5 mV\n",
383
    "\n",
384
    "*GRAPHS*:\n",
385
    "- t = 0 s corresponds to the start time of the test"
386
387
388
389
   ]
  },
  {
   "cell_type": "code",
390
   "execution_count": null,
391
   "metadata": {
392
    "deletable": false,
393
394
    "scrolled": false
   },
395
   "outputs": [],
396
   "source": [
397
    "RbCircuitAnalysis.assert_u_hts_min_max_slope(u_hts_nxcals_dfs, plateau_start, plateau_end, Time.to_unix_timestamp(t_start), slope_range=(-0.5, 0.5))"
398
399
400
401
   ]
  },
  {
   "cell_type": "markdown",
402
403
404
   "metadata": {
    "deletable": false
   },
405
   "source": [
406
    "## 5.3. DFB Temperature - TT893.TEMPERATURECALC\n",
407
    "\n",
408
409
410
411
412
    "*CRITERIA*:\n",
    "\n",
    "- Check if the temperature is over the dew point, but not overheated -> 280 K < TT893 < 320 K, even without current\n",
    "\n",
    "*GRAPHS*:\n",
413
414
415
    "\n",
    "- Temperature at the top of the current lead on the right axis, TT893.TEMPERATURECALC\n",
    "- Green box denotes the temperature validity region [280, 320] K of the temperature at the top of the current lead\n",
416
    "- t = 0 s corresponds to the start time of the test"
417
418
419
420
   ]
  },
  {
   "cell_type": "code",
421
   "execution_count": null,
422
   "metadata": {
423
    "deletable": false,
424
425
    "scrolled": false
   },
426
   "outputs": [],
427
   "source": [
428
    "RbCircuitAnalysis.assert_tt893_min_max_value(tt893_nxcals_dfs, value_range=(280, 320))"
429
430
431
432
   ]
  },
  {
   "cell_type": "markdown",
433
434
435
   "metadata": {
    "deletable": false
   },
436
   "source": [
437
    "## 5.4. DFB Temperature - TT891A.TEMPERATURECALC\n",
438
    "\n",
439
440
441
442
443
    "*CRITERIA*:\n",
    "\n",
    "- Check if the temperature is regulated around 50 K -> 46 K < TT891A < 54 K, even without current\n",
    "\n",
    "*GRAPHS*:\n",
444
445
446
447
    "\n",
    "For odd and even leads\n",
    "- Main power converter current, I_MEAS\n",
    "- Temperature between the HTS and resistive part of the current lead on the right axis, TT891A.TEMPERATURECALC\n",
448
    "- t = 0 s corresponds to the start time of the test\n"
449
450
451
452
   ]
  },
  {
   "cell_type": "code",
453
   "execution_count": null,
454
   "metadata": {
455
    "deletable": false,
456
457
    "scrolled": false
   },
458
   "outputs": [],
459
   "source": [
460
    "RbCircuitAnalysis.assert_tt891a_min_max_value(tt891a_nxcals_dfs, value_range=(46, 54))"
461
462
463
464
   ]
  },
  {
   "cell_type": "markdown",
465
466
467
   "metadata": {
    "deletable": false
   },
468
   "source": [
469
    "## 5.5. DFB Valve Regulation - CV891.POSST\n",
470
    "\n",
471
472
473
474
475
476
    "*CRITERIA*:\n",
    "\n",
    "- Check if the valve is opened (>2%), but not fully (<50%)\n",
    "- Check if the valve variation (defined as difference between the maximum and minimum value) does not exceed 8% at constant current (the ramp of the current is excluded this criterion)\n",
    "\n",
    "*GRAPHS*:\n",
477
478
479
480
    "\n",
    "- Main power converter current, I_MEAS\n",
    "- Valve for regulation of TT891A, CV891.POSST\n",
    "- t = 0 s corresponds to the start time of the test\n",
481
    "- Green box denotes the valve opening validity region [2, 50] % of the TT891A temperature regulation"
482
483
484
485
   ]
  },
  {
   "cell_type": "code",
486
   "execution_count": null,
487
   "metadata": {
488
    "deletable": false,
489
490
    "scrolled": false
   },
491
   "outputs": [],
492
   "source": [
493
    "RbCircuitAnalysis.assert_cv891_min_max_value(cv891_nxcals_dfs, value_range=(2, 50))"
494
495
496
497
   ]
  },
  {
   "cell_type": "code",
498
   "execution_count": null,
499
   "metadata": {
500
    "deletable": false
501
   },
502
   "outputs": [],
503
   "source": [
504
    "RbCircuitAnalysis.assert_cv891_min_max_variation(cv891_nxcals_dfs, 8, plateau_start, plateau_end, Time.to_unix_timestamp(t_start))"
505
506
507
508
   ]
  },
  {
   "cell_type": "markdown",
509
510
511
   "metadata": {
    "deletable": false
   },
512
   "source": [
513
    "# 6. Signature Decision"
514
515
516
517
   ]
  },
  {
   "cell_type": "code",
518
   "execution_count": null,
519
520
521
   "metadata": {
    "deletable": false
   },
522
523
524
525
526
527
528
   "outputs": [],
   "source": [
    "signature = get_expert_decision('Expert Signature Decision: ', ['PASSED', 'FAILED'])"
   ]
  },
  {
   "cell_type": "markdown",
529
530
531
   "metadata": {
    "deletable": false
   },
532
533
534
535
536
537
538
   "source": [
    "# 7. Final Report"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
539
540
541
   "metadata": {
    "deletable": false
   },
542
   "outputs": [],
543
   "source": [
544
    "analysis_start_time = Time.get_analysis_start_time()\n",
545
    "apply_report_template()\n",
546
547
548
549
550
551
552
553
554
555
556
    "\n",
    "file_name_csv = '{}_{}-{}-{}_{}_BUSBAR_RESISTANCE.csv'.format(circuit_name, hwc_test, Time.to_datetime(t_start).strftime(\"%Y-%m-%d-%Hh%M\"), analysis_start_time, signature)\n",
    "full_path = '/eos/project/m/mp3/RB/{}/{}/{}'.format(circuit_name, hwc_test, file_name_csv)\n",
    "busbar_metadata_resistance_df.to_csv(full_path)\n",
    "print('Busbar resistance table saved to (Windows): ' + '\\\\\\\\cernbox-smb' + full_path.replace('/', '\\\\'))\n",
    "\n",
    "file_name_csv = '{}_{}-{}-{}_{}_MAGNET_RESISTANCE.csv'.format(circuit_name, hwc_test, Time.to_datetime(t_start).strftime(\"%Y-%m-%d-%Hh%M\"), analysis_start_time, signature)\n",
    "full_path = '/eos/project/m/mp3/RB/{}/{}/{}'.format(circuit_name, hwc_test, file_name_csv)\n",
    "magnet_metadata_resistance_df.to_csv(full_path)\n",
    "print('Magnet resistance table saved to (Windows): ' + '\\\\\\\\cernbox-smb' + full_path.replace('/', '\\\\'))\n",
    "\n",
557
558
559
    "file_name_html = '{}_{}-{}-{}_{}.html'.format(circuit_name, hwc_test, Time.to_datetime(t_start).strftime(\"%Y-%m-%d-%Hh%M\"), analysis_start_time, signature)\n",
    "full_path = '/eos/project/m/mp3/RB/{}/{}/{}'.format(circuit_name, hwc_test, file_name_html)\n",
    "!mkdir -p /eos/project/m/mp3/RB/$circuit_name/$hwc_test\n",
560
    "print('Compact notebook report saved to (Windows): ' + '\\\\\\\\cernbox-smb' + full_path.replace('/', '\\\\'))\n",
561
    "\n",
562
    "display(Javascript('IPython.notebook.save_notebook();'))\n",
563
    "Time.sleep(5)\n",
564
    "!{sys.executable} -m jupyter nbconvert --to html $'AN_RB_PLI3.a5.ipynb' --output /eos/project/m/mp3/RB/$circuit_name/$hwc_test/$file_name_html --TemplateExporter.exclude_input=True --TagRemovePreprocessor.remove_all_outputs_tags='[\"skip_output\"]'"
565
   ]
Michal Maciejewski's avatar
Michal Maciejewski committed
566
567
568
569
570
571
572
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
  }
 ],
 "metadata": {
  "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.6.5"
  },
  "sparkconnect": {
594
   "bundled_options": [],
Michal Maciejewski's avatar
Michal Maciejewski committed
595
   "list_of_options": []
596
597
598
599
600
601
602
603
604
605
606
607
608
  },
  "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
609
610
611
612
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
Michal Maciejewski's avatar
Michal Maciejewski committed
613
}