AN_RB_PLI3.a5.ipynb 19.9 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
68
    "print('Loading (1/11)'); import sys\n",
    "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
81
82
    "\n",
    "clear_output()\n",
    "lhcsmapi.get_lhcsmapi_version()\n",
83
84
    "lhcsmapi.get_lhcsmhwc_version('../__init__.py')\n",
    "print('Analysis performed by %s' % HwcSearchModuleMediator.get_user())"
85
86
87
88
   ]
  },
  {
   "cell_type": "markdown",
89
90
91
   "metadata": {
    "deletable": false
   },
92
   "source": [
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
    "# 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"
114
115
116
117
   ]
  },
  {
   "cell_type": "code",
118
   "execution_count": null,
119
   "metadata": {
120
    "deletable": false,
Michal Maciejewski's avatar
Michal Maciejewski committed
121
    "scrolled": false
122
   },
123
   "outputs": [],
124
   "source": []
125
  },
126
127
128
129
130
131
132
133
134
  {
   "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))"
   ]
  },
135
136
  {
   "cell_type": "markdown",
137
138
139
   "metadata": {
    "deletable": false
   },
140
141
142
143
144
145
   "source": [
    "# 2. Query All Signals Prior to Analysis"
   ]
  },
  {
   "cell_type": "code",
146
   "execution_count": null,
147
   "metadata": {
148
    "deleteable": false,
149
    "scrolled": true,
150
151
152
153
    "tags": [
     "skip_output"
    ]
   },
154
   "outputs": [],
155
   "source": [
156
157
158
159
160
161
162
163
164
165
166
    "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
167
    "rb_query = RbCircuitQuery(circuit_type, circuit_name, max_executions=6)\n",
168
    "rb_analysis = RbCircuitAnalysis(circuit_type, None, is_automatic=is_automatic)\n",
169
170
    "\n",
    "with Timer():\n",
171
    "    # PC\n",
Michal Maciejewski's avatar
Michal Maciejewski committed
172
    "    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",
173
    "    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
174
    "    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",
175
176
    "\n",
    "    # BUSBAR\n",
177
    "    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",
178
    "    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",
179
    "    res_busbar_df = rb_analysis.convert_to_col(res_busbar_row_df, signal_name='U_RES')\n",
180
    "    \n",
181
    "    # MAGNET\n",
182
    "    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",
183
    "    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",
184
    "    res_magnet_df = rb_analysis.convert_to_col(res_magnet_row_df, signal_name='U_MAG')\n",
185
    "    \n",
186
    "    # LEADS\n",
Michal Maciejewski's avatar
Michal Maciejewski committed
187
188
    "    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",
189
    "\n",
190
191
192
    "    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"
193
194
195
196
   ]
  },
  {
   "cell_type": "markdown",
197
198
199
   "metadata": {
    "deletable": false
   },
200
201
202
203
204
   "source": [
    "# 3. Power Converter\n",
    "## 3.1. Plot of the Power Converter Main Current\n",
    "\n",
    "*ANALYSIS*:\n",
205
    "\n",
206
207
    "- Calculation of the duration of current plateaus\n",
    "\n",
208
209
    "*GRAPHS*:\n",
    "\n",
210
211
    "- 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"
212
213
214
215
   ]
  },
  {
   "cell_type": "code",
216
   "execution_count": null,
217
   "metadata": {
218
    "deletable": false,
219
220
    "scrolled": false
   },
221
   "outputs": [],
222
   "source": [
223
224
225
226
227
228
    "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)"
229
230
231
232
   ]
  },
  {
   "cell_type": "markdown",
233
234
235
   "metadata": {
    "deletable": false
   },
236
237
238
239
240
   "source": [
    "# 4. Busbar\n",
    "## 4.1. Busbar Resistance\n",
    "\n",
    "*ANALYSIS*:\n",
241
    "\n",
Michal Maciejewski's avatar
Michal Maciejewski committed
242
    "- 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",
243
    "\n",
244
245
246
247
248
249
    "*CRITERIA*:\n",
    "\n",
    "- Check if the busbar resistance is below 3 nOhm\n",
    "\n",
    "*GRAPHS*:\n",
    "\n",
250
    "- The busbar resistance, R\n",
251
    "- The green box denotes the validity region of the busbar resostance (0, 3] nOhm"
252
253
254
255
   ]
  },
  {
   "cell_type": "code",
256
   "execution_count": null,
257
258
259
   "metadata": {
    "deletable": false
   },
260
   "outputs": [],
261
   "source": [
262
    "res_busbar_outliers_df = rb_analysis.analyze_busbar_magnet_resistance(res_busbar_df, signal_name='R_RES', value_max=3e-9)"
263
264
265
266
   ]
  },
  {
   "cell_type": "code",
267
   "execution_count": null,
268
   "metadata": {
269
    "deletable": false
270
271
272
   },
   "outputs": [],
   "source": [
273
    "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)"
274
275
   ]
  },
276
277
  {
   "cell_type": "markdown",
278
279
280
   "metadata": {
    "deletable": false
   },
281
282
283
284
   "source": [
    "## 4.2. Magnet Resistance\n",
    "\n",
    "*ANALYSIS*:\n",
285
    "\n",
286
    "- 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",
287
288
    "\n",
    "*CRITERIA*\n",
289
    "\n",
290
291
292
293
294
    "- Check if the resistance is below 50 nOhm\n",
    "\n",
    "*GRAPHS*:\n",
    "\n",
    "- The magnet resistance, R\n",
295
    "- The green box denotes the validity region of the magnet resistance (0, 50] nOhm\n"
296
297
298
299
   ]
  },
  {
   "cell_type": "code",
300
   "execution_count": null,
301
302
303
   "metadata": {
    "deletable": false
   },
304
   "outputs": [],
305
   "source": [
306
    "res_magnet_outliers_df = rb_analysis.analyze_busbar_magnet_resistance(res_magnet_df, signal_name='R_MAG', value_max=50e-9)"
307
308
309
310
   ]
  },
  {
   "cell_type": "code",
311
   "execution_count": null,
312
313
314
   "metadata": {
    "deletable": false
   },
315
316
   "outputs": [],
   "source": [
317
    "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)"
318
319
   ]
  },
320
321
  {
   "cell_type": "markdown",
322
323
324
   "metadata": {
    "deletable": false
   },
325
   "source": [
326
327
    "# 5. DFB\n",
    "## 5.1. DFB Voltage - U_RES\n",
328
    "\n",
329
330
    "*CRITERIA*:\n",
    "- Check if, at constant current, U_RES is constant (no drift < 2mV/h)\n",
331
    "\n",
332
    "*GRAPHS*:\n",
333
    "- t = 0 s corresponds to the start time of the test\n"
334
335
336
337
   ]
  },
  {
   "cell_type": "code",
338
   "execution_count": null,
339
   "metadata": {
340
    "deletable": false
341
   },
342
   "outputs": [],
343
   "source": [
344
    "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))"
345
346
347
348
   ]
  },
  {
   "cell_type": "markdown",
349
350
351
   "metadata": {
    "deletable": false
   },
352
   "source": [
353
    "## 5.2. DFB Voltage - U_HTS\n",
354
    "\n",
355
    "*CRITERIA*:  \n",
356
    "- Check if the voltage is below 50% of the threshold -> Abs(U_HTS) < 0.5 mV\n",
357
    "\n",
358
    "*GRAPHS*:\n",
359
    "- t = 0 s corresponds to the start time of the test"
360
361
362
363
   ]
  },
  {
   "cell_type": "code",
364
   "execution_count": null,
365
   "metadata": {
366
    "deletable": false,
367
368
    "scrolled": false
   },
369
   "outputs": [],
370
   "source": [
371
    "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))"
372
373
374
375
   ]
  },
  {
   "cell_type": "markdown",
376
377
378
   "metadata": {
    "deletable": false
   },
379
   "source": [
380
    "## 5.3. DFB Temperature - TT893.TEMPERATURECALC\n",
381
    "\n",
382
383
384
385
386
    "*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",
387
388
389
    "\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",
390
    "- t = 0 s corresponds to the start time of the test"
391
392
393
394
   ]
  },
  {
   "cell_type": "code",
395
   "execution_count": null,
396
   "metadata": {
397
    "deletable": false,
398
399
    "scrolled": false
   },
400
   "outputs": [],
401
   "source": [
402
    "RbCircuitAnalysis.assert_tt893_min_max_value(tt893_nxcals_dfs, value_range=(280, 320))"
403
404
405
406
   ]
  },
  {
   "cell_type": "markdown",
407
408
409
   "metadata": {
    "deletable": false
   },
410
   "source": [
411
    "## 5.4. DFB Temperature - TT891A.TEMPERATURECALC\n",
412
    "\n",
413
414
415
416
417
    "*CRITERIA*:\n",
    "\n",
    "- Check if the temperature is regulated around 50 K -> 46 K < TT891A < 54 K, even without current\n",
    "\n",
    "*GRAPHS*:\n",
418
419
420
421
    "\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",
422
    "- t = 0 s corresponds to the start time of the test\n"
423
424
425
426
   ]
  },
  {
   "cell_type": "code",
427
   "execution_count": null,
428
   "metadata": {
429
    "deletable": false,
430
431
    "scrolled": false
   },
432
   "outputs": [],
433
   "source": [
434
    "RbCircuitAnalysis.assert_tt891a_min_max_value(tt891a_nxcals_dfs, value_range=(46, 54))"
435
436
437
438
   ]
  },
  {
   "cell_type": "markdown",
439
440
441
   "metadata": {
    "deletable": false
   },
442
   "source": [
443
    "## 5.5. DFB Valve Regulation - CV891.POSST\n",
444
    "\n",
445
446
447
448
449
450
    "*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",
451
452
453
454
    "\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",
455
    "- Green box denotes the valve opening validity region [2, 50] % of the TT891A temperature regulation"
456
457
458
459
   ]
  },
  {
   "cell_type": "code",
460
   "execution_count": null,
461
   "metadata": {
462
    "deletable": false,
463
464
    "scrolled": false
   },
465
   "outputs": [],
466
   "source": [
467
    "RbCircuitAnalysis.assert_cv891_min_max_value(cv891_nxcals_dfs, value_range=(2, 50))"
468
469
470
471
   ]
  },
  {
   "cell_type": "code",
472
   "execution_count": null,
473
   "metadata": {
474
    "deletable": false
475
   },
476
   "outputs": [],
477
   "source": [
478
    "RbCircuitAnalysis.assert_cv891_min_max_variation(cv891_nxcals_dfs, 8, plateau_start, plateau_end, Time.to_unix_timestamp(t_start))"
479
480
481
482
   ]
  },
  {
   "cell_type": "markdown",
483
484
485
   "metadata": {
    "deletable": false
   },
486
   "source": [
487
    "# 6. Signature Decision"
488
489
490
491
   ]
  },
  {
   "cell_type": "code",
492
   "execution_count": null,
493
494
495
   "metadata": {
    "deletable": false
   },
496
497
498
499
500
501
502
   "outputs": [],
   "source": [
    "signature = get_expert_decision('Expert Signature Decision: ', ['PASSED', 'FAILED'])"
   ]
  },
  {
   "cell_type": "markdown",
503
504
505
   "metadata": {
    "deletable": false
   },
506
507
508
509
510
511
512
   "source": [
    "# 7. Final Report"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
513
514
515
   "metadata": {
    "deletable": false
   },
516
   "outputs": [],
517
   "source": [
518
    "analysis_start_time = Time.get_analysis_start_time()\n",
519
    "apply_report_template()\n",
520
521
522
    "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",
523
524
    "print('Compact notebook report saved to (Windows): ' + '\\\\\\\\cernbox-smb' + full_path.replace('/', '\\\\'))\n",
    "display(Javascript('IPython.notebook.save_notebook();'))\n",
525
    "Time.sleep(5)\n",
526
    "!{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\"]'"
527
   ]
Michal Maciejewski's avatar
Michal Maciejewski committed
528
529
530
531
532
533
534
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
  }
 ],
 "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": {
   "bundled_options": [
    "SparkMetrics",
    "NXCALS"
   ],
Michal Maciejewski's avatar
Michal Maciejewski committed
560
   "list_of_options": []
561
562
563
564
565
566
567
568
569
570
571
572
573
  },
  "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
574
575
576
577
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
Michal Maciejewski's avatar
Michal Maciejewski committed
578
}