-
Notifications
You must be signed in to change notification settings - Fork 4
/
geant4lab2021.html
701 lines (657 loc) · 99.9 KB
/
geant4lab2021.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
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
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
<!doctype html>
<html>
<head>
<meta charset='UTF-8'><meta name='viewport' content='width=device-width initial-scale=1'>
<title>Laboratorio de física de partículas</title><style type='text/css'>html {overflow-x: initial !important;}:root { --bg-color: #ffffff; --text-color: #333333; --select-text-bg-color: #B5D6FC; --select-text-font-color: auto; --monospace: "Lucida Console",Consolas,"Courier",monospace; --title-bar-height: 20px; }
.mac-os-11 { --title-bar-height: 28px; }
html { font-size: 14px; background-color: var(--bg-color); color: var(--text-color); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; }
body { margin: 0px; padding: 0px; height: auto; bottom: 0px; top: 0px; left: 0px; right: 0px; font-size: 1rem; line-height: 1.42857143; overflow-x: hidden; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: inherit; tab-size: 4; background-position: inherit inherit; background-repeat: inherit inherit; }
iframe { margin: auto; }
a.url { word-break: break-all; }
a:active, a:hover { outline: 0px; }
.in-text-selection, ::selection { text-shadow: none; background: var(--select-text-bg-color); color: var(--select-text-font-color); }
#write { margin: 0px auto; height: auto; width: inherit; word-break: normal; word-wrap: break-word; position: relative; white-space: normal; overflow-x: visible; padding-top: 36px; }
#write.first-line-indent p { text-indent: 2em; }
#write.first-line-indent li p, #write.first-line-indent p * { text-indent: 0px; }
#write.first-line-indent li { margin-left: 2em; }
.for-image #write { padding-left: 8px; padding-right: 8px; }
body.typora-export { padding-left: 30px; padding-right: 30px; }
.typora-export .footnote-line, .typora-export li, .typora-export p { white-space: pre-wrap; }
.typora-export .task-list-item input { pointer-events: none; }
@media screen and (max-width: 500px) {
body.typora-export { padding-left: 0px; padding-right: 0px; }
#write { padding-left: 20px; padding-right: 20px; }
.CodeMirror-sizer { margin-left: 0px !important; }
.CodeMirror-gutters { display: none !important; }
}
#write li > figure:last-child { margin-bottom: 0.5rem; }
#write ol, #write ul { position: relative; }
img { max-width: 100%; vertical-align: middle; image-orientation: from-image; }
button, input, select, textarea { color: inherit; font-family: inherit; font-size: inherit; font-style: inherit; font-variant-caps: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; }
input[type="checkbox"], input[type="radio"] { line-height: normal; padding: 0px; }
*, ::after, ::before { box-sizing: border-box; }
#write h1, #write h2, #write h3, #write h4, #write h5, #write h6, #write p, #write pre { width: inherit; }
#write h1, #write h2, #write h3, #write h4, #write h5, #write h6, #write p { position: relative; }
p { line-height: inherit; }
h1, h2, h3, h4, h5, h6 { break-after: avoid-page; break-inside: avoid; orphans: 4; }
p { orphans: 4; }
h1 { font-size: 2rem; }
h2 { font-size: 1.8rem; }
h3 { font-size: 1.6rem; }
h4 { font-size: 1.4rem; }
h5 { font-size: 1.2rem; }
h6 { font-size: 1rem; }
.md-math-block, .md-rawblock, h1, h2, h3, h4, h5, h6, p { margin-top: 1rem; margin-bottom: 1rem; }
.hidden { display: none; }
.md-blockmeta { color: rgb(204, 204, 204); font-weight: 700; font-style: italic; }
a { cursor: pointer; }
sup.md-footnote { padding: 2px 4px; background-color: rgba(238, 238, 238, 0.7); color: rgb(85, 85, 85); border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; cursor: pointer; }
sup.md-footnote a, sup.md-footnote a:hover { color: inherit; text-transform: inherit; text-decoration: inherit; }
#write input[type="checkbox"] { cursor: pointer; width: inherit; height: inherit; }
figure { overflow-x: auto; margin: 1.2em 0px; max-width: calc(100% + 16px); padding: 0px; }
figure > table { margin: 0px; }
tr { break-inside: avoid; break-after: auto; }
thead { display: table-header-group; }
table { border-collapse: collapse; border-spacing: 0px; width: 100%; overflow: auto; break-inside: auto; text-align: left; }
table.md-table td { min-width: 32px; }
.CodeMirror-gutters { border-right-width: 0px; background-color: inherit; }
.CodeMirror-linenumber { }
.CodeMirror { text-align: left; }
.CodeMirror-placeholder { opacity: 0.3; }
.CodeMirror pre { padding: 0px 4px; }
.CodeMirror-lines { padding: 0px; }
div.hr:focus { cursor: none; }
#write pre { white-space: pre-wrap; }
#write.fences-no-line-wrapping pre { white-space: pre; }
#write pre.ty-contain-cm { white-space: normal; }
.CodeMirror-gutters { margin-right: 4px; }
.md-fences { font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; overflow: visible; white-space: pre; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: inherit; position: relative !important; background-position: inherit inherit; background-repeat: inherit inherit; }
.md-diagram-panel { width: 100%; margin-top: 10px; text-align: center; padding-top: 0px; padding-bottom: 8px; overflow-x: auto; }
#write .md-fences.mock-cm { white-space: pre-wrap; }
.md-fences.md-fences-with-lineno { padding-left: 0px; }
#write.fences-no-line-wrapping .md-fences.mock-cm { white-space: pre; overflow-x: auto; }
.md-fences.mock-cm.md-fences-with-lineno { padding-left: 8px; }
.CodeMirror-line, twitterwidget { break-inside: avoid; }
.footnotes { opacity: 0.8; font-size: 0.9rem; margin-top: 1em; margin-bottom: 1em; }
.footnotes + .footnotes { margin-top: 0px; }
.md-reset { margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: top; text-decoration: none; text-shadow: none; float: none; position: static; width: auto; height: auto; white-space: nowrap; cursor: inherit; line-height: normal; font-weight: 400; text-align: left; box-sizing: content-box; direction: ltr; background-position: 0px 0px; background-repeat: initial initial; }
li div { padding-top: 0px; }
blockquote { margin: 1rem 0px; }
li .mathjax-block, li p { margin: 0.5rem 0px; }
li blockquote { margin: 1rem 0px; }
li { margin: 0px; position: relative; }
blockquote > :last-child { margin-bottom: 0px; }
blockquote > :first-child, li > :first-child { margin-top: 0px; }
.footnotes-area { color: rgb(136, 136, 136); margin-top: 0.714rem; padding-bottom: 0.143rem; white-space: normal; }
#write .footnote-line { white-space: pre-wrap; }
@media print {
body, html { border: 1px solid transparent; height: 99%; break-after: avoid; break-before: avoid; font-variant-ligatures: no-common-ligatures; }
#write { margin-top: 0px; padding-top: 0px; border-color: transparent !important; }
.typora-export * { -webkit-print-color-adjust: exact; }
.typora-export #write { break-after: avoid; }
.typora-export #write::after { height: 0px; }
.is-mac table { break-inside: avoid; }
}
.footnote-line { margin-top: 0.714em; font-size: 0.7em; }
a img, img a { cursor: pointer; }
pre.md-meta-block { font-size: 0.8rem; min-height: 0.8rem; white-space: pre-wrap; background-color: rgb(204, 204, 204); display: block; overflow-x: hidden; background-position: initial initial; background-repeat: initial initial; }
p > .md-image:only-child:not(.md-img-error) img, p > img:only-child { display: block; margin: auto; }
#write.first-line-indent p > .md-image:only-child:not(.md-img-error) img { left: -2em; position: relative; }
p > .md-image:only-child { display: inline-block; width: 100%; }
#write .MathJax_Display { margin: 0.8em 0px 0px; }
.md-math-block { width: 100%; }
.md-math-block:not(:empty)::after { display: none; }
.MathJax_ref { fill: currentcolor; }
[contenteditable="true"]:active, [contenteditable="true"]:focus, [contenteditable="false"]:active, [contenteditable="false"]:focus { outline: 0px; box-shadow: none; }
.md-task-list-item { position: relative; list-style-type: none; }
.task-list-item.md-task-list-item { padding-left: 0px; }
.md-task-list-item > input { position: absolute; top: 0px; left: 0px; margin-left: -1.2em; margin-top: calc(1em - 10px); border: none; }
.math { font-size: 1rem; }
.md-toc { min-height: 3.58rem; position: relative; font-size: 0.9rem; border-top-left-radius: 10px; border-top-right-radius: 10px; border-bottom-right-radius: 10px; border-bottom-left-radius: 10px; }
.md-toc-content { position: relative; margin-left: 0px; }
.md-toc-content::after, .md-toc::after { display: none; }
.md-toc-item { display: block; color: rgb(65, 131, 196); }
.md-toc-item a { text-decoration: none; }
.md-toc-inner:hover { text-decoration: underline; }
.md-toc-inner { display: inline-block; cursor: pointer; }
.md-toc-h1 .md-toc-inner { margin-left: 0px; font-weight: 700; }
.md-toc-h2 .md-toc-inner { margin-left: 2em; }
.md-toc-h3 .md-toc-inner { margin-left: 4em; }
.md-toc-h4 .md-toc-inner { margin-left: 6em; }
.md-toc-h5 .md-toc-inner { margin-left: 8em; }
.md-toc-h6 .md-toc-inner { margin-left: 10em; }
@media screen and (max-width: 48em) {
.md-toc-h3 .md-toc-inner { margin-left: 3.5em; }
.md-toc-h4 .md-toc-inner { margin-left: 5em; }
.md-toc-h5 .md-toc-inner { margin-left: 6.5em; }
.md-toc-h6 .md-toc-inner { margin-left: 8em; }
}
a.md-toc-inner { font-size: inherit; font-style: inherit; font-weight: inherit; line-height: inherit; }
.footnote-line a:not(.reversefootnote) { color: inherit; }
.md-attr { display: none; }
.md-fn-count::after { content: "."; }
code, pre, samp, tt { font-family: var(--monospace); }
kbd { margin: 0px 0.1em; padding: 0.1em 0.6em; font-size: 0.8em; color: rgb(36, 39, 41); background-color: rgb(255, 255, 255); border: 1px solid rgb(173, 179, 185); border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; box-shadow: rgba(12, 13, 14, 0.2) 0px 1px 0px, rgb(255, 255, 255) 0px 0px 0px 2px inset; white-space: nowrap; vertical-align: middle; background-position: initial initial; background-repeat: initial initial; }
.md-comment { color: rgb(162, 127, 3); opacity: 0.8; font-family: var(--monospace); }
code { text-align: left; }
a.md-print-anchor { white-space: pre !important; border: none !important; display: inline-block !important; position: absolute !important; width: 1px !important; right: 0px !important; outline: 0px !important; text-shadow: initial !important; background-position: 0px 0px !important; background-repeat: initial initial !important; }
.md-inline-math .MathJax_SVG .noError { display: none !important; }
.html-for-mac .inline-math-svg .MathJax_SVG { vertical-align: 0.2px; }
.md-math-block .MathJax_SVG_Display { text-align: center; margin: 0px; position: relative; text-indent: 0px; max-width: none; max-height: none; min-height: 0px; min-width: 100%; width: auto; overflow-y: hidden; display: block !important; }
.MathJax_SVG_Display, .md-inline-math .MathJax_SVG_Display { width: auto; margin: inherit; display: inline-block !important; }
.MathJax_SVG .MJX-monospace { font-family: var(--monospace); }
.MathJax_SVG .MJX-sans-serif { font-family: sans-serif; }
.MathJax_SVG { display: inline; font-style: normal; font-weight: 400; line-height: normal; zoom: 90%; text-indent: 0px; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; padding: 0px; margin: 0px; }
.MathJax_SVG * { transition: none; }
.MathJax_SVG_Display svg { vertical-align: middle !important; margin-bottom: 0px !important; margin-top: 0px !important; }
.os-windows.monocolor-emoji .md-emoji { font-family: "Segoe UI Symbol", sans-serif; }
.md-diagram-panel > svg { max-width: 100%; }
[lang="flow"] svg, [lang="mermaid"] svg { max-width: 100%; height: auto; }
[lang="mermaid"] .node text { font-size: 1rem; }
table tr th { border-bottom-width: 0px; }
video { max-width: 100%; display: block; margin: 0px auto; }
iframe { max-width: 100%; width: 100%; border: none; }
.highlight td, .highlight tr { border: 0px; }
mark { background-color: rgb(255, 255, 0); color: rgb(0, 0, 0); background-position: initial initial; background-repeat: initial initial; }
.md-html-inline .md-plain, .md-html-inline strong, mark .md-inline-math, mark strong { color: inherit; }
mark .md-meta { color: rgb(0, 0, 0); opacity: 0.3 !important; }
@media print {
.typora-export h1, .typora-export h2, .typora-export h3, .typora-export h4, .typora-export h5, .typora-export h6 { break-inside: avoid; }
}
.md-diagram-panel .messageText { stroke: none !important; }
.md-diagram-panel .start-state { fill: var(--node-fill); }
.md-diagram-panel .edgeLabel rect { opacity: 1 !important; }
.md-require-zoom-fix foreignObject { font-size: var(--mermaid-font-zoom); }
.CodeMirror { height: auto; }
.CodeMirror.cm-s-inner { background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: inherit; background-position: inherit inherit; background-repeat: inherit inherit; }
.CodeMirror-scroll { overflow: auto hidden; z-index: 3; }
.CodeMirror-gutter-filler, .CodeMirror-scrollbar-filler { background-color: rgb(255, 255, 255); }
.CodeMirror-gutters { border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: inherit; white-space: nowrap; background-position: inherit inherit; background-repeat: inherit inherit; }
.CodeMirror-linenumber { padding: 0px 3px 0px 5px; text-align: right; color: rgb(153, 153, 153); }
.cm-s-inner .cm-keyword { color: rgb(119, 0, 136); }
.cm-s-inner .cm-atom, .cm-s-inner.cm-atom { color: rgb(34, 17, 153); }
.cm-s-inner .cm-number { color: rgb(17, 102, 68); }
.cm-s-inner .cm-def { color: rgb(0, 0, 255); }
.cm-s-inner .cm-variable { color: rgb(0, 0, 0); }
.cm-s-inner .cm-variable-2 { color: rgb(0, 85, 170); }
.cm-s-inner .cm-variable-3 { color: rgb(0, 136, 85); }
.cm-s-inner .cm-string { color: rgb(170, 17, 17); }
.cm-s-inner .cm-property { color: rgb(0, 0, 0); }
.cm-s-inner .cm-operator { color: rgb(152, 26, 26); }
.cm-s-inner .cm-comment, .cm-s-inner.cm-comment { color: rgb(170, 85, 0); }
.cm-s-inner .cm-string-2 { color: rgb(255, 85, 0); }
.cm-s-inner .cm-meta { color: rgb(85, 85, 85); }
.cm-s-inner .cm-qualifier { color: rgb(85, 85, 85); }
.cm-s-inner .cm-builtin { color: rgb(51, 0, 170); }
.cm-s-inner .cm-bracket { color: rgb(153, 153, 119); }
.cm-s-inner .cm-tag { color: rgb(17, 119, 0); }
.cm-s-inner .cm-attribute { color: rgb(0, 0, 204); }
.cm-s-inner .cm-header, .cm-s-inner.cm-header { color: rgb(0, 0, 255); }
.cm-s-inner .cm-quote, .cm-s-inner.cm-quote { color: rgb(0, 153, 0); }
.cm-s-inner .cm-hr, .cm-s-inner.cm-hr { color: rgb(153, 153, 153); }
.cm-s-inner .cm-link, .cm-s-inner.cm-link { color: rgb(0, 0, 204); }
.cm-negative { color: rgb(221, 68, 68); }
.cm-positive { color: rgb(34, 153, 34); }
.cm-header, .cm-strong { font-weight: 700; }
.cm-del { text-decoration: line-through; }
.cm-em { font-style: italic; }
.cm-link { text-decoration: underline; }
.cm-error { color: red; }
.cm-invalidchar { color: red; }
.cm-constant { color: rgb(38, 139, 210); }
.cm-defined { color: rgb(181, 137, 0); }
div.CodeMirror span.CodeMirror-matchingbracket { color: rgb(0, 255, 0); }
div.CodeMirror span.CodeMirror-nonmatchingbracket { color: rgb(255, 34, 34); }
.cm-s-inner .CodeMirror-activeline-background { background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: inherit; background-position: inherit inherit; background-repeat: inherit inherit; }
.CodeMirror { position: relative; overflow: hidden; }
.CodeMirror-scroll { height: 100%; outline: 0px; position: relative; box-sizing: content-box; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: inherit; background-position: inherit inherit; background-repeat: inherit inherit; }
.CodeMirror-sizer { position: relative; }
.CodeMirror-gutter-filler, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-vscrollbar { position: absolute; z-index: 6; display: none; }
.CodeMirror-vscrollbar { right: 0px; top: 0px; overflow: hidden; }
.CodeMirror-hscrollbar { bottom: 0px; left: 0px; overflow: hidden; }
.CodeMirror-scrollbar-filler { right: 0px; bottom: 0px; }
.CodeMirror-gutter-filler { left: 0px; bottom: 0px; }
.CodeMirror-gutters { position: absolute; left: 0px; top: 0px; padding-bottom: 30px; z-index: 3; }
.CodeMirror-gutter { white-space: normal; height: 100%; box-sizing: content-box; padding-bottom: 30px; margin-bottom: -32px; display: inline-block; }
.CodeMirror-gutter-wrapper { position: absolute; z-index: 4; border: none !important; background-position: 0px 0px !important; background-repeat: initial initial !important; }
.CodeMirror-gutter-background { position: absolute; top: 0px; bottom: 0px; z-index: 4; }
.CodeMirror-gutter-elt { position: absolute; cursor: default; z-index: 4; }
.CodeMirror-lines { cursor: text; }
.CodeMirror pre { border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; border-width: 0px; font-family: inherit; font-size: inherit; margin: 0px; white-space: pre; word-wrap: normal; color: inherit; z-index: 2; position: relative; overflow: visible; background-position: 0px 0px; background-repeat: initial initial; }
.CodeMirror-wrap pre { word-wrap: break-word; white-space: pre-wrap; word-break: normal; }
.CodeMirror-code pre { border-right-width: 30px; border-right-style: solid; border-right-color: transparent; width: fit-content; }
.CodeMirror-wrap .CodeMirror-code pre { border-right-style: none; width: auto; }
.CodeMirror-linebackground { position: absolute; left: 0px; right: 0px; top: 0px; bottom: 0px; z-index: 0; }
.CodeMirror-linewidget { position: relative; z-index: 2; overflow: auto; }
.CodeMirror-wrap .CodeMirror-scroll { overflow-x: hidden; }
.CodeMirror-measure { position: absolute; width: 100%; height: 0px; overflow: hidden; visibility: hidden; }
.CodeMirror-measure pre { position: static; }
.CodeMirror div.CodeMirror-cursor { position: absolute; visibility: hidden; border-right-style: none; width: 0px; }
.CodeMirror div.CodeMirror-cursor { visibility: hidden; }
.CodeMirror-focused div.CodeMirror-cursor { visibility: inherit; }
.cm-searching { background-color: rgba(255, 255, 0, 0.4); background-position: initial initial; background-repeat: initial initial; }
@media print {
.CodeMirror div.CodeMirror-cursor { visibility: hidden; }
}
/* Webfont: HKGrotesk-Light *//* Webfont: HKGrotesk-LightItalic *//* Webfont: HKGrotesk-Regular *//* Webfont: HKGrotesk-Italic *//* Webfont: HKGrotesk-Medium *//* Webfont: HKGrotesk-MediumItalic *//* Webfont: HKGrotesk-Bold *//* Webfont: HKGrotesk-BoldItalic *//* Webfont: OfficeCodePro-Light *//* Webfont: OfficeCodePro-LightItalic *//* Webfont: OfficeCodePro-Regular *//* Webfont: OfficeCodePro-Italic *//* Webfont: OfficeCodePro-Bold *//* Webfont: OfficeCodePro-BoldItalic */html {
background: #FFFFFF;
/* or
text-shadow: #fff 0px 1px 1px;*/
text-rendering: geometricPrecision;
}
body {
font-family: 'HKGrotesk', sans-serif;
font-weight: 300;
font-size: 1.275em;
letter-spacing: 0px;
color: #333333;
text-rendering: optimizeLegibility;
-webkit-font-smoothing: subpixel-antialiased;
/*-webkit-text-stroke: 0.45px;
// or*/
-webkit-text-stroke: 0.45px rgba(51, 51, 51, 0.97);
line-height: 1.6em;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
}
strong {
font-family: 'HKGrotesk', serif;
font-weight: 500;
color: #303336;
}
em {
font-family: 'HKGrotesk', serif;
font-weight: normal;
font-style: italic;
}
mark {
color: #000000;
background: #D3FFA4;
padding: 1px 1px 1px 1px;
}
div.md-toc {
font-family: 'HKGrotesk', serif;
font-size: 18px;
}
#write{
max-width: 710px;
margin: 0 auto;
padding: 20px 30px 40px 30px;
padding-top: 20px;
padding-bottom: 100px;
}
#write > ul:first-child,
#write > ol:first-child{
margin-top: 40px;
}
body > *:first-child {
margin-top: 0 !important;
}
body > *:last-child {
margin-bottom: 0 !important;
}
a {
color: #DD4C4F;
text-decoration: none;
text-rendering: optimizeLegibility;
-webkit-font-smoothing: subpixel-antialiased;
/*-webkit-text-stroke: 0.45px;
// or*/
-webkit-text-stroke: 0.55px rgba(221, 76, 79, 0.97);
}
h1,
h2,
h3,
h4,
h5,
h6 {
font-family: "HKGrotesk",sans-serif;
font-weight: bold;
letter-spacing: -0.45px;
word-spacing: 0.5px;
position: relative;
cursor: text;
}
h1:hover a.anchor,
h2:hover a.anchor,
h3:hover a.anchor,
h4:hover a.anchor,
h5:hover a.anchor,
h6:hover a.anchor {
/*background: url("file:///Users/pammac/Library/Application%20Support/images/modules/styleguide/para.png") no-repeat 10px center;*/
text-decoration: none;
}
h1 tt,
h1 code {
font-size: inherit;
}
h2 tt,
h2 code {
font-size: inherit;
}
h3 tt,
h3 code {
font-size: inherit;
}
h4 tt,
h4 code {
font-size: inherit;
}
h5 tt,
h5 code {
font-size: inherit;
}
h6 tt,
h6 code {
font-size: inherit;
}
h1 {
font-size: 2.4em;
margin-top: 1.2rem;
margin-bottom: 1.2rem;
padding-bottom: .3em;
line-height: 1.2;
letter-spacing: -0.45px;
word-spacing: 0.5px;
}
h2 {
font-size: 1.8em;
margin-top: 1.2rem;
margin-bottom: 1.2rem;
padding-bottom: .3em;
line-height: 1.2;
letter-spacing: -0.45px;
word-spacing: 0.5px;
}
h3 {
font-size: 1.5em;
margin-top: 1.2rem;
margin-bottom: 1.2rem;
padding-bottom: .3em;
line-height: 1.2;
letter-spacing: -0.45px;
word-spacing: 0.5px;
}
h4 {
font-size: 1.2em;
line-height: 1.2;
padding-bottom: .3em;
letter-spacing: -0.45px;
word-spacing: 0.5px;}
h5 {
font-size: 1.1em;
line-height: 1.2;
padding-bottom: .3em;
letter-spacing: -0.45px;
word-spacing: 0.5px;}
h6 {
font-size: 1.0em;
line-height: 1.2;
padding-bottom: .3em;
letter-spacing: -0.45px;
word-spacing: 0.5px;
}
h1 { color: #303336;}
h2,
h3,
h4,
h5,
h6 { color: #303336;}
p,
blockquote,
ul,
ol,
dl,
table{
list-style-type: disc
margin: 0.8em 0;
margin-top: 1.6rem;
margin-bottom: 1.6rem;
}
hr {
height: 4px;
padding: 0;
margin: 16px 0;
background-color: #FFFFFF;
border: 0 none;
overflow: hidden;
box-sizing: content-box;
border-bottom: 1px solid #ddd;
}
body > h2:first-child {
margin-top: 0;
padding-top: 0;
}
body > h1:first-child {
margin-top: 0;
padding-top: 0;
}
body > h1:first-child + h2 {
margin-top: 0;
padding-top: 0;
}
body > h3:first-child,
body > h4:first-child,
body > h5:first-child,
body > h6:first-child {
margin-top: 0;
padding-top: 0;
}
a:first-child h1,
a:first-child h2,
a:first-child h3,
a:first-child h4,
a:first-child h5,
a:first-child h6 {
margin-top: 0;
padding-top: 0;
}
h1 p,
h2 p,
h3 p,
h4 p,
h5 p,
h6 p {
margin-top: 0;
}
li p.first {
display: inline-block;
}
ul,
ol {
padding-left: 30px;
}
ul:first-child,
ol:first-child {
margin-top: 0;
}
ul:last-child,
ol:last-child {
margin-bottom: 0;
}
blockquote {
color: #26344A;
text-rendering: optimizeLegibility;
-webkit-font-smoothing: subpixel-antialiased;
/*-webkit-text-stroke: 0.45px;
// or*/
-webkit-text-stroke: 0.45px rgba(38, 52, 74, 0.97);
border-left: 3.5px solid #DD4C4F;
margin-left: -1em;
padding: 0.2em 1em;
padding-top: 2px;
padding-bottom: 2px;
}
blockquote blockquote {
padding-right: 0;
}
table {
padding: 0;
word-break: initial;
}
table tr {
border-top: 1px solid #cccccc;
margin: 0;
padding: 0;
}
table tr:nth-child(2n) {
background-color: #f8f8f8;
}
table tr th {
font-weight: bold;
border: 1px solid #cccccc;
text-align: left;
margin: 0;
padding: 6px 13px;
}
table tr td {
border: 1px solid #cccccc;
text-align: left;
margin: 0;
padding: 6px 13px;
}
table tr th:first-child,
table tr td:first-child {
margin-top: 0;
}
table tr th:last-child,
table tr td:last-child {
margin-bottom: 0;
}
.CodeMirror-gutters {
border-right: 1px solid #ddd;
}
.md-fences,
code,
tt {
border: 1px solid #ddd;
background: #f8f8f8;
padding: 0;
font-family: 'OfficeCodePro', monospace;
padding: 2px 4px 0px 4px;
font-size: 17px;
}
.md-fences {
font-family: 'OfficeCodePro', monospace;
margin-bottom: 15px;
margin-top: 15px;
padding: 0.2em 1em;
padding-top: 8px;
padding-bottom: 6px;
}
.task-list{
padding-left: 0;
}
.task-list-item {
padding-left:32px;
}
.task-list-item input {
top: 3px;
left: 8px;
}
@media screen and (min-width: 914px) {
/*body {
width: 854px;
margin: 0 auto;
}*/
}
@media print {
html {
font-size: 13px;
}
table,
pre {
page-break-inside: avoid;
}
pre {
word-wrap: break-word;
}
}
.md-fences {
background-color: #E5E7EA;
}
#write pre.md-meta-block {
padding: 1rem;
font-size: 85%;
line-height: 1.45;
background-color: #f7f7f7;
border: 0;
border-radius: 3px;
color: #777777;
margin-top: 0 !important;
}
.mathjax-block>.code-tooltip {
bottom: .375rem;
}
#write>h3.md-focus:before{
left: -1.5625rem;
top: .375rem;
}
#write>h4.md-focus:before{
left: -1.5625rem;
top: .285714286rem;
}
#write>h5.md-focus:before{
left: -1.5625rem;
top: .285714286rem;
}
#write>h6.md-focus:before{
left: -1.5625rem;
top: .285714286rem;
}
.md-image>.md-meta {
border: 1px solid #ddd;
border-radius: 3px;
font-family: Consolas, "Liberation Mono", Courier, monospace;
padding: 2px 4px 0px 4px;
font-size: 0.9em;
color: inherit;
}
.md-tag{
color: inherit;
}
.md-toc {
margin-top:20px;
padding-bottom:20px;
}
.sidebar-tabs {
border-bottom: none;
}
#typora-quick-open {
border: 1px solid #ddd;
background-color: #f8f8f8;
}
#typora-quick-open-item {
background-color: #FAFAFA;
border-color: #FEFEFE #e5e5e5 #e5e5e5 #eee;
border-style: solid;
border-width: 1px;
}
#md-notification:before {
top: 10px;
}
/** focus mode */
.on-focus-mode blockquote {
border-left-color: rgba(85, 85, 85, 0.12);
}
header, .context-menu, .megamenu-content, footer{
font-family: "Lyon Display", sans-serif;
}
.CodeMirror {
/* Set height, width, borders, and global font properties here */
text-rendering: optimizeLegibility;
-webkit-font-smoothing: subpixel-antialiased;
/*-webkit-text-stroke: 0.45px;
// or*/
font-family: 'OfficeCodePro', monospace;
font-size: 1.000em;
}
:root {--mermaid-font-zoom:1em ;}
</style>
</head>
<body class='typora-export'>
<div id='write' class=''><p><img src="https://pbs.twimg.com/media/CWhF64OXIAAtCa4.png" referrerpolicy="no-referrer"></p><p> </p><h1><a name="objetivo" class="md-header-anchor"></a><span>Objetivo</span></h1><p><span>Simular la interacción básica de partículas con ciertos medios gracias al software </span><a href='https://geant4.web.cern.ch/geant4/'><span>Geant4</span></a><span>, desarrollado por el </span><a href='http://home.cern'><span>CERN</span></a><span>.</span></p><p><span>En este laboratorio vamos a manejar una serie de </span><a href='https://www.docker.com'><span>contenedores </span><strong><span>Docker</span></strong></a><span> para </span><em><span>orquestar</span></em><span> una serie de servicios sencillos </span><em><span>virtualizados</span></em><span>. En lugar de instalar Docker en nuestra computadora (que podríamos hacerlo perfectamente), vamos usar el servicio gratuito </span><a href='https://labs.play-with-docker.com/'><span>Play with Docker</span></a><span>.</span></p><p><span>Este servicio no es más que un </span><em><span>playground</span></em><span> para que, quien quiera pueda explorar la creación y gestión de contenedores virtuales basados en </span><a href='https://www.docker.com'><span>Docker</span></a><span>. Vamos a ver en qué consiste.</span></p><p> </p><h1><a name="extensión" class="md-header-anchor"></a><span>Extensión</span></h1><p><span>5 páginas como mínimo.</span></p><p> </p><h1><a name="rúbrica" class="md-header-anchor"></a><span>Rúbrica</span></h1><ul><li><span>Se valorarán ejemplos gráficos de cada interacción propuesta. Peso 40%. </span></li><li><span>Se valorará una correcta descripción de la implementación técnica. Peso 30%. </span></li><li><span>Se responden a todas las cuestiones planteadas a lo largo del enunciado Peso 30%. </span></li></ul><p> </p><h1><a name="descripción" class="md-header-anchor"></a><span>Descripción</span></h1><p><strong><span>Guión de este documento</span></strong></p><div class='md-toc' mdtype='toc'><p class="md-toc-content" role="list"><span role="listitem" class="md-toc-item md-toc-h1" data-ref="n4"><a class="md-toc-inner" style="" href="#objetivo">Objetivo</a></span><span role="listitem" class="md-toc-item md-toc-h1" data-ref="n9"><a class="md-toc-inner" style="" href="#extensión">Extensión</a></span><span role="listitem" class="md-toc-item md-toc-h1" data-ref="n12"><a class="md-toc-inner" style="" href="#rúbrica">Rúbrica</a></span><span role="listitem" class="md-toc-item md-toc-h1" data-ref="n21"><a class="md-toc-inner" style="" href="#descripción">Descripción</a></span><span role="listitem" class="md-toc-item md-toc-h2" data-ref="n26"><a class="md-toc-inner" style="" href="#play-with-docker">Play with Docker</a></span><span role="listitem" class="md-toc-item md-toc-h2" data-ref="n39"><a class="md-toc-inner" style="" href="#software-a-instalar-localmente">Software a instalar localmente</a></span><span role="listitem" class="md-toc-item md-toc-h2" data-ref="n61"><a class="md-toc-inner" style="" href="#ejecución-del-laboratorio">Ejecución del laboratorio</a></span><span role="listitem" class="md-toc-item md-toc-h2" data-ref="n79"><a class="md-toc-inner" style="" href="#descarga-de-la-imagen-docker-del-laboratorio">Descarga de la imagen Docker del laboratorio</a></span><span role="listitem" class="md-toc-item md-toc-h2" data-ref="n118"><a class="md-toc-inner" style="" href="#ejecución-de-las-simulaciones">Ejecución de las simulaciones</a></span><span role="listitem" class="md-toc-item md-toc-h2" data-ref="n133"><a class="md-toc-inner" style="" href="#visualización-de-la-simulación">Visualización de la simulación</a></span><span role="listitem" class="md-toc-item md-toc-h3" data-ref="n144"><a class="md-toc-inner" style="" href="#visualización-con-estándares-web">Visualización con estándares web</a></span><span role="listitem" class="md-toc-item md-toc-h1" data-ref="n154"><a class="md-toc-inner" style="" href="#interacciones-de-partículas-con-la-materia">Interacciones de partículas con la materia</a></span><span role="listitem" class="md-toc-item md-toc-h3" data-ref="n157"><a class="md-toc-inner" style="" href="#efecto-fotoeléctrico">Efecto fotoeléctrico</a></span><span role="listitem" class="md-toc-item md-toc-h3" data-ref="n161"><a class="md-toc-inner" style="" href="#efecto-compton">Efecto Compton</a></span><span role="listitem" class="md-toc-item md-toc-h3" data-ref="n165"><a class="md-toc-inner" style="" href="#producción-de-pares">Producción de pares</a></span><span role="listitem" class="md-toc-item md-toc-h3" data-ref="n170"><a class="md-toc-inner" style="" href="#ionización">Ionización</a></span><span role="listitem" class="md-toc-item md-toc-h3" data-ref="n174"><a class="md-toc-inner" style="" href="#bremsstrahlung">Bremsstrahlung</a></span><span role="listitem" class="md-toc-item md-toc-h3" data-ref="n178"><a class="md-toc-inner" style="" href="#aniquilación-de-pares">Aniquilación de pares</a></span><span role="listitem" class="md-toc-item md-toc-h1" data-ref="n184"><a class="md-toc-inner" style="" href="#entregable-del-laboratorio">Entregable del laboratorio</a></span></p></div><hr /><p> </p><h2><a name="play-with-docker" class="md-header-anchor"></a><span>Play with Docker</span></h2><p><span>Play with Docker es un servicio </span><em><span>cloud</span></em><span> que nos permite </span><em><span>jugar</span></em><span> con Docker sin necesidad de instalar Docker localmente. Cada vez que accedemos a una sesión en </span><a href='https://labs.play-with-docker.com'><span>Play with Docker</span></a><span>, tenemos </span><strong><span>4 maravillosas horas</span></strong><span> para experimentar con Docker, hasta que esta se cierra automáticamente. Parece poco tiempo pero es el suficiente para llevar a cabo nuestro humilde y divertido laboratorio. Dicho de otra manera: tenemos acceso casi ilimitado (en recursos) a un super computador orientado a familiarizarnos con contenedores virtuales durante todo el periodo de duración de la clase/laboratorio. Para acceder a Play with Docker, sólo necesitamos una </span><a href='https://hub.docker.com/register/'><span>cuenta en Docker</span></a><span>. Como en la gran mayoría de servicios, este registro es gratuito, rápido y comporta los típicos pasos de selección de contraseña, envío de correo, confirmación de recepción de correo, etc.</span></p><p><span>Una vez que ya tenemos acceso a la consola de Play with Docker, podemos solicitar máquinas </span><em><span>reales</span></em><span> (en realidad siguen siendo virtuales, pero a efectos prácticos, las trataremos como si fueran reales) sobre las que ejecutar a su vez contenedores Docker gracias a su </span><a href='https://docs.docker.com/engine/reference/commandline/docker/#child-commands'><span>toolkit</span></a><span>. Al inicio no habrá ninguna, pero podemos crear la primera (y única que necesitamos) con el comando </span><strong><span>ADD NEW INSTANCE</span></strong><span> que se puede ver en la imagen.</span></p><p><img src="https://i.stack.imgur.com/y9qCI.png" referrerpolicy="no-referrer"></p><p><span>Cuando creamos una instancia, es como si accediéramos a una máquina </span><em><span>pseudo real</span></em><span> (o para lo que a todos los efectos, será una máquina real para nosotros). Se nos abrirá una </span><em><span>sesión de shell</span></em><span> de GNU Linux (Bash en este caso) justo al lado y sobre la que podemos introducir comados Unix </span><em><span>de toda la vida</span></em><span>, entre ellos los relacionados con Docker. En estas máquinas </span><em><span>cuasi-reales</span></em><span> ya está instalado todo el </span><em><span>stack</span></em><span> de Docker y podemos, a su vez, trabajar con contenedores virtuales basados en esta tecnología de vanguardia. En realidad Play with Docker hace uso de </span><a href='https://github.com/jpetazzo/dind'><span>DIND</span></a><span>. Esta tecnología permite albergar contenedores Docker dentro de un contenedor Docker (sí, algo así como </span><em><span>un sueño dentro de un sueño</span></em><span>). Es decir: las instancias en Play with Docker son en realidad… ¡contenedores Docker! </span></p><p><strong><span>Pregunta:</span></strong><span> ¿cuál es la diferencia entre una </span><em><span>imagen</span></em><span> y un </span><em><span>contenedor</span></em><span>? Un poco de </span><a href='https://medium.com/codingthesmartway-com-blog/docker-beginners-guide-part-1-images-containers-6f3507fffc98'><span>ayuda</span></a><span>.</span></p><p><span>Fíjate que la instancia que has creado en Play with Docker es como si se tratara de un ordenador tuyo que estuviera en red y en ese ordenador tuvieras instalado Docker. Así de sencillo. A partir de ese momento </span><strong><span>ya no necesitamos acceder a Play with Docker mediante en el navegador</span></strong><span> (aunque está bien que lo dejes </span><em><span>aparcado</span></em><span> a un lado en caso de necesidad). Usaremos </span><strong><span>VS Code</span></strong><span> y </span><strong><span>acceso SSH</span></strong><span> tradicional, concretamente mediante dos clientes SSH milenarios: </span><a href='https://www.openssh.com'><span>OpenSSH</span></a><span> y </span><a href='https://www.putty.org'><span>Putty</span></a><span>. El primero viene preinstalado típicamente en máquinas GNU/Linux y macOS y el segundo se tiene que descargar y hay versiones para todos los sistemas operativos (es el que se recomienda, por simplicidad, si estás en Windows). Este enunciado viene preparado para uses cualquiera de los dos, en cualquier sistema. </span></p><hr /><p><strong><span>Importante</span></strong><span>: tómate nota del usuario que te da Play with Docker y que empieza por </span><code>ip</code><span> y acaba en </span><code>@direct…</code><span> (Ejemplo: </span><code>ip172-18-0-27-bg3pvjs3uhdg008ir0fg</code><span>). Copia esa cadena de texto y guárdatela para futuros usos. A lo largo de este trabajo nos referiremos a ella con la variable de entorno </span><code>$usuariopwd</code><span>. También puedes regenerar el contenido de esta variable mediante este comando (a ejecutar en la consola web de Play with Docker):</span></p><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="bash"><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang="bash"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 4px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation"><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-builtin">echo</span> ip<span class="cm-quote">$(ifconfig eth1 | grep "inet " | awk -F'[: ]+' '{ print </span><span class="cm-def">$4</span><span class="cm-quote"> }' | sed 's/\./-/g')</span><span class="cm-attribute">-</span><span class="cm-def">$SESSION_ID</span></span></pre></div></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom-width: 0px; border-bottom-style: solid; border-bottom-color: transparent; top: 56px;"></div><div class="CodeMirror-gutters" style="display: none; height: 56px;"></div></div></div></pre><p><strong><span>Pregunta:</span></strong><span> ¿qué hace el comando anterior? ¿De qué subcomandos se compone y qué papel juegan (</span><code>ifconfig</code><span>, </span><code>grep</code><span>, </span><code>awk</code><span> y </span><code>sed</code><span>)?</span></p><hr /><p> </p><h2><a name="software-a-instalar-localmente" class="md-header-anchor"></a><span>Software a instalar localmente</span></h2><p><span>Estos son los distintos programas/paquetes que necesitas en tu sistema local:</span></p><ul><li><span>Visual Studio Code (</span><a href='https://code.visualstudio.com'><span>VS Code</span></a><span>, para los </span><em><span>amigos</span></em><span>).</span></li><li><a href='https://marketplace.visualstudio.com/items?itemName=ms-python.python'><span>Python</span></a><span>. ¡Ojo!, no es necesario instalar
ni vamos a trabajar con un intérprete de este lenguaje en nuestra máquina local. Sólo queremos esta extensión para que VS Code haga sintaxis de color de código Python (que será ejecutado por un contenedor Docker que crearemos en nuestra instancia </span><em><span>pseudoreal</span></em><span> en el servicio Play with Docker).</span></li><li><a href='https://github.com/YuichiNukiyama/vscode-preview-server'><span>Preview on Web Server</span></a><span>, de Yuichi Nuikiyama. Esta extensión nos permite visualizar las simulaciones 3D en un navegador. Con la combinación de teclas </span><code>Cntrl + Shift + L</code><span> se abrirá un navegador que estará atento a cambios en la página web donde se dibujen las escenas 3D representando la física que estamos simulando.</span></li><li><a href='https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html'><span>Putty</span></a><span>, un cliente SSH muy conocido en Windows. También puedes usar Putty en macOS. Te recomiendo que los instales mediante </span><a href='https://scoop.sh'><span>Scoop</span></a><span> o </span><a href='https://brew.sh'><span>Homebrew</span></a><span>, respectivamente.</span></li><li><a href='http://www.instantreality.org/downloads'><span>Instant Player</span></a><span> para visualizar las trazas de partículas. Se trata un visor de instrucciones </span><a href='https://en.wikipedia.org/wiki/VRML'><span>VWRL</span></a><span> disponible tanto para </span><a href='http://doc.instantreality.org/media/uploads/downloads/2.8.0/InstantPlayer-MacOS-10.10-x64-2.8.0.38619.dmg'><span>macOS</span></a><span>, </span><a href='http://doc.instantreality.org/media/uploads/downloads/2.8.0/InstantReality-Windows-vs2013-x64-2.8.0.38619.msi'><span>Windows</span></a><span>, </span><a href='http://doc.instantreality.org/media/uploads/downloads/2.8.0/InstantReality-Ubuntu-14.04-x64-2.8.0.38619.deb'><span>Ubuntu</span></a><span>, </span><a href='http://doc.instantreality.org/media/uploads/downloads/2.8.0/InstantReality-RedHat-7-x64-2.8.0.38619.rpm'><span>Red Hat</span></a><span> y </span><a href='http://doc.instantreality.org/media/uploads/downloads/2.8.0/InstantReality-SLES-12.1-x64-2.8.0.38937.rpm'><span>SUSE</span></a><span>. Para solucionar el problema de que </span><em><span>falta un archivo</span></em><span> </span><code>MSVCP110.dll</code><span> en el caso de algunas versiones de Windows, instalad el runtime mínimo de </span><em><span>Microsoft Visual C++ 2012 Redistributable</span></em><span> para 64 bit desde </span><a href='http://www.microsoft.com/en-au/download/confirmation.aspx?id=30679'><span>aquí</span></a><span>. </span><strong><span>Preguntas:</span></strong><span> ¿Qué otros formatos estándar de representación 3D conoces (Collada, Stanford, Wavefront, X3D Extensible, Standard Tessellation Language, x3dom, etc.)? ¿Quién desarrolla Instant Player qué contribuciones ha hecho al mundo de la tecnología?</span></li><li><a href='http://www.paraview.org'><span>ParaView</span></a><span>, de </span><a href='https://www.kitware.com'><span>Kitware</span></a><span>, pero sólo se recomienda su uso en el caso de que, por alguna razón Instant Player no funcione de ninguna manera (quizás en el caso de que tu arquitectura sea todavía 32 bit). Para ver las trazas de las partículas correctamente, elige el modo Wireframe (barra de herramientas). </span><strong><span>Pregunta:</span></strong><span> ¿en qué proyectos está involucrada la fundación Kitware y cómo han cambiado el mundo de la informática, la tecnología, la ciencia y la medicina? Pista: </span><a href='https://cmake.org/'><span>CMake</span></a><span>, </span><a href='http://vtk.org'><span>VTK</span></a><span>, </span><a href='https://itk.org'><span>ITK</span></a><span>, etc.</span></li><li><a href='https://castle-engine.io/view3dscene.php'><span>view3dscene</span></a><span>, de </span><a href='https://castle-engine.io/index.php'><span>Castle Game Engine</span></a><span>. Es otro visualizador 3D multiplataforma, parte de este conocidísimo motor de videojuegos (competencia directa de </span><a href='https://unity.com'><span>Unity</span></a><span>). </span></li><li><a href='https://www.docker.com'><span>Docker</span></a><span> ¡No! No es necesario instalar Docker, pero ya que estamos… </span><strong><span>Pregunta:</span></strong><span> ¿qué es Docker? ¿Qué son los </span><em><span>contenedores virtuales</span></em><span>? ¿Qué alternativas a Docker existen (</span><a href='https://openvz.org'><span>OpenVZ</span></a><span>, </span><a href='https://linuxcontainers.org'><span>LXC</span></a><span>, </span><a href='https://www.vagrantup.com'><span>Vagrant</span></a><span>, </span><a href='https://coreos.com/rkt/'><span>rkt</span></a><span>, </span><a href='https://sylabs.io'><span>Singularity</span></a><span>, etc.)? Resume brevemente la historia de Docker. ¿Por qué Docker se ha convertido en un software tan popular? </span><a href='https://www.youtube.com/watch?v=cYsVvV1aVss&t=1066s'><span>Aquí</span></a><span> tienes una pista. </span></li><li><a href='https://docs.microsoft.com/en-us/powershell/'><span>PowerShell</span></a><span>. En el caso de Windows (en incluso </span><a href='https://docs.microsoft.com/en-us/powershell/scripting/install/installing-powershell-core-on-linux?view=powershell-6'><span>Linux</span></a><span> y </span><a href='https://docs.microsoft.com/en-us/powershell/scripting/install/installing-powershell-core-on-macos?view=powershell-6'><span>macOS</span></a><span>), te recomiendo que uses PowerShell. Se trata de un shell de código abierto y multiplataforma creado por Microsoft. Todos los comandos de este manual vienen preparados para Bash y PowerShell. VS Code debería detectar que tienes PowerShell instalado y ofrecerte su uso como shell por defecto, pero si acaso no fuera así, consulta esta </span><a href='https://techcommunity.microsoft.com/t5/itops-talk-blog/configure-visual-studio-code-to-run-powershell-for-windows-and/ba-p/283258'><span>página de ayuda</span></a><span> de Microsoft.</span></li></ul><p> </p><h2><a name="ejecución-del-laboratorio" class="md-header-anchor"></a><span>Ejecución del laboratorio</span></h2><p><span>Como hemos comentado antes, no vamos a usar la web de Play with Docker. En su lugar, usaremos herramientas de vanguardia y de masivo uso en computación remota, como SSH (mediante un cliente de este protocolo: OpenSSH o Putty).</span></p><ul><li><span>Crea una instancia en Play with Docker si no lo has hecho ya (ADD NEW INSTANCE). Sólo hace falta una. </span></li></ul><ul><li><span>Abre una carpeta de trabajo (</span><em><span>workspace</span></em><span>) desde Visual Studio Code. En esta </span><strong><span>carpeta de trabajo</span></strong><span> es donde guardaremos los archivos </span><code>.key</code><span> y </span><code>.ppk</code><span> (de los que luego hablaremos) y desde donde lanzaremos los comandos a ejecutar remotamente en nuestra instancia Play with Docker. </span></li></ul><ul><li><p><span>Descárgate los archivos </span><code>geant4lab.ppk</code><span> y </span><code>geant4lab.key</code><span> desde </span><a href='https://github.com/pammacdotnet/FFRepo/raw/master/ppkkey.zip'><span>aquí</span></a><span>. Lo necesitaremos más adelante para lanzar la simulación si accedes a tu instancia PWD con Putty (ya sea desde Windows o desde macOS). </span><strong><span>Preguntas</span></strong><span>: ¿Qué es un fichero </span><code>ppk</code><span>? ¿Qué es una clave RSA público/privada (fichero </span><code>key</code><span>)?</span></p></li><li><p><span>Si estás en macOS o GNU/Linux, tienes que dar unos </span><a href='https://chmodcommand.com/chmod-400/'><span>permisos especiales</span></a><span> al archivo </span><code>key</code><span>:</span></p><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="bash"><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang="bash"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 4px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation"><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-builtin">chmod</span> <span class="cm-number">400</span> geant4lab.key</span></pre></div></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom-width: 0px; border-bottom-style: solid; border-bottom-color: transparent; top: 28px;"></div><div class="CodeMirror-gutters" style="display: none; height: 28px;"></div></div></div></pre></li></ul><p> </p><h2><a name="descarga-de-la-imagen-docker-del-laboratorio" class="md-header-anchor"></a><span>Descarga de la imagen Docker del laboratorio</span></h2><p><span>Lo primero que tenemos que hacer es descargarnos la imagen de la pila de contenedores que conforman una imagen con todo lo necesario para ejecutar Geant4. Esta imagen </span><a href='https://cloud.docker.com/u/pammacdotnet/repository/docker/pammacdotnet/geant4lab'><span>se encuentra ya en el Docker Hub</span></a><span>. </span><strong><span>Preguntas</span></strong><span>: ¿qué es el </span><a href='https://hub.docker.com'><span>Hub</span></a><span> de Docker? ¿Cuál es la diferencia entre una imagen y un contenedor?</span></p><p><span>Para enviar esta orden ejecutaremos una comando remoto por SSH (mediante sus implementaciones OpenSSH y/o Putty, a elegir). Estos comandos remotos los invocaremos directamente desde el terminal integrado de VS Code. </span><strong><span>Nunca salimos de VS Code</span></strong><span>, salvo que queramos ver las simulaciones 3D con un visualizador externo (Instant Player, ParaView, Blender, etc.). </span></p><p><span>En el caso de que uses una consola </span><a href='https://www.gnu.org/software/bash/'><span>Bash</span></a><span> o </span><a href='https://docs.microsoft.com/en-us/powershell/scripting/overview?view=powershell-6'><span>PowerShell</span></a><span>, también puedes guardar la cadena que identifica la conexión a PWD en una variable de entorno (por ejemplo: </span><code>$usuariopwd</code><span>) y hacer referencia a esta en las llamadas SSH. Vamos a repasar con un ejemplo cómo se usan estas variables de entorno tanto en Unix (Bash) como Windows (PowerShell, aunque </span><a href='https://github.com/PowerShell/PowerShell'><span>este shell de Microsoft</span></a><span> está disponible a su vez tanto para Linux y para macOS):</span></p><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="bash"><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang="bash"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 4px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation"><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-def">usuariopwd</span><span class="cm-operator">=</span><span class="cm-string">'ip172-18-0-87-bo8bss3jagq000bqatpg'</span> <span class="cm-comment"># Bash</span></span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-def">$usuariopwd</span><span class="cm-operator">=</span><span class="cm-string">'ip172-18-0-87-bo8bss3jagq000bqatpg'</span> <span class="cm-comment"># PowerShell</span></span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom-width: 0px; border-bottom-style: solid; border-bottom-color: transparent; top: 84px;"></div><div class="CodeMirror-gutters" style="display: none; height: 84px;"></div></div></div></pre><p><span>Por descontado, también puedes (y deberías usar) Bash sobre </span><a href='https://docs.microsoft.com/en-us/windows/wsl/wsl2-install'><span>WSL</span></a><span>. </span></p><p><span>En el caso de Windows, asegúrate de añadir previamente el directorio donde ha quedado Putty instalado (donde se encuentren los programas </span><code>putty.exe</code><span> y </span><code>plink.exe</code><span>) a la variable </span><code>path</code><span> de la configuración de VS Code (editando directamente el archivo </span><code>settings.json</code><span>):</span></p><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="json"><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang="json"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 4px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation"><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-string">"terminal.integrated.env.windows"</span>: { <span class="cm-string cm-property">"path"</span>: <span class="cm-string">"%path%;C:/carpeta/de/plink-y-putty"</span> }</span></pre></div></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom-width: 0px; border-bottom-style: solid; border-bottom-color: transparent; top: 56px;"></div><div class="CodeMirror-gutters" style="display: none; height: 56px;"></div></div></div></pre><p><span>Si habías añadido Putty a la </span><a href='https://www.computerhope.com/issues/ch000549.htm'><span>variable PATH del sistema</span></a><span>, este paso no es necesario. </span><a href='https://scoop.sh'><span>Scoop</span></a><span>, por ejemplo, hace esto por ti automáticamente. </span></p><p><span>Prueba a realizar una conexión de consola remota a la instancia Play with Docker que has creado anteriormente. Comprobarás que puedes ver los mismos archivos y directorios que si usaras la interfaz web.</span></p><ul><li><p><span>En el caso de OpenSSH:</span></p><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="bash"><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang="bash"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 4px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation"><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-builtin">ssh</span> <span class="cm-attribute">-l</span> <span class="cm-def">$usuariopwd</span> direct.labs.play-with-docker.com <span class="cm-attribute">-i</span> geant4lab.key</span></pre></div></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom-width: 0px; border-bottom-style: solid; border-bottom-color: transparent; top: 56px;"></div><div class="CodeMirror-gutters" style="display: none; height: 56px;"></div></div></div></pre></li><li><p><span>En el caso de Putty (te pedirá varias veces confirmación):</span></p><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="bash"><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang="bash"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 4px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation"><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">plink <span class="cm-attribute">-ssh</span> <span class="cm-attribute">-l</span> <span class="cm-def">$usuariopwd</span> direct.labs.play-with-docker.com <span class="cm-attribute">-i</span> geant4lab.ppk</span></pre></div></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom-width: 0px; border-bottom-style: solid; border-bottom-color: transparent; top: 56px;"></div><div class="CodeMirror-gutters" style="display: none; height: 56px;"></div></div></div></pre></li></ul><p><span>Ahora ya puedes descargar la imagen Docker con la que ejecutaremos la simulación. Sin embargo, en lugar de hacerlo mientras estamos conectados (como hemos hecho con el comando anterior) o desde la interfaz web, enviaremos este comando (</span><code>docker pull</code><span>) desde nuestra máquina local. </span></p><ul><li><p><span>En el caso de OpenSSH:</span></p><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="bash"><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang="bash"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 55.5px; left: 221.59375px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation"><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-builtin">ssh</span> <span class="cm-attribute">-l</span> <span class="cm-def">$usuariopwd</span> direct.labs.play-with-docker.com <span class="cm-attribute">-i</span> geant4lab.key <span class="cm-string">"/usr/local/bin/docker pull pammacdotnet/g4lpwd"</span></span></pre></div></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom-width: 0px; border-bottom-style: solid; border-bottom-color: transparent; top: 84px;"></div><div class="CodeMirror-gutters" style="display: none; height: 84px;"></div></div></div></pre></li></ul><ul><li><p><span>En el caso de Putty (fíjate que ahora hemos incluido la opción </span><code>-batch</code><span> para que ya no haga tantas preguntas):</span></p><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="powershell"><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang="powershell"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 55.5px; left: 526.234375px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation"><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-identifier">plink</span> <span class="cm-operator">-</span><span class="cm-identifier">batch</span> <span class="cm-operator">-</span><span class="cm-identifier">ssh</span> <span class="cm-operator">-</span><span class="cm-identifier">l</span> <span class="cm-variable-2">$usuariopwd</span> <span class="cm-identifier">direct</span><span class="cm-punctuation">.</span><span class="cm-identifier">labs</span><span class="cm-punctuation">.</span><span class="cm-identifier">play-with-docker</span><span class="cm-punctuation">.</span><span class="cm-identifier">com</span> <span class="cm-operator">-</span><span class="cm-identifier">i</span> <span class="cm-identifier">geant4lab</span><span class="cm-punctuation">.</span><span class="cm-identifier">ppk</span> <span class="cm-string">"/usr/local/bin/docker pull pammacdotnet/g4lpwd"</span></span></pre></div></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom-width: 0px; border-bottom-style: solid; border-bottom-color: transparent; top: 84px;"></div><div class="CodeMirror-gutters" style="display: none; height: 84px;"></div></div></div></pre></li></ul><p><span>Este comando Docker (</span><code>docker pull</code><span>) lo que hace es descargarse la imagen </span><code>geant4lab</code><span> del usuario </span><code>pammacdotnet</code><span> alojada en el </span><a href='http://hub.docker.com'><span>Hub de Docker</span></a><span>. La descarga se produce desde este </span><em><span>Hub</span></em><span> al disco de la instancia en Play with Docker (no en nuestra máquina local).</span></p><p><span>En una consola SSH o desde el interfaz web, descarga el fichero </span><code>simulation.py</code><span> desde </span><a href='https://raw.githubusercontent.com/pammacdotnet/FFRepo/master/simulation.py'><span>aquí</span></a><span> y guárdalo en en la carpeta de trabajo remota (típicamente será </span><code>/root</code><span>):</span></p><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="bash"><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang="bash"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 4px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation"><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-builtin">curl</span> https://raw.githubusercontent.com/pammacdotnet/FFRepo/master/simulation.py <span class="cm-attribute">-o</span> simulation.py <span class="cm-attribute">-s</span></span></pre></div></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom-width: 0px; border-bottom-style: solid; border-bottom-color: transparent; top: 84px;"></div><div class="CodeMirror-gutters" style="display: none; height: 84px;"></div></div></div></pre><p><span>Si VS Code te pide que selecciones un intérprete Python, puedes ignorarlo, ya que no vamos a trabajar con un Python local, sino con un intérprete remoto que, a su vez, reside en un contenedor Docker (instanciado a partir de la imagen que hemos descargado o </span><code>pull</code><span>-eado en el punto anterior).</span></p><p><span>De igual manera, descarga el fichero </span><code>wrl2html.py</code><span>, que servirá más tarde para generar versiones WebGL de las simulaciones:</span></p><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="bash"><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang="bash"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 4px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation"><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-builtin">curl</span> https://raw.githubusercontent.com/pammacdotnet/FFRepo/master/wrl2html.py <span class="cm-attribute">-o</span> wrl2html.py <span class="cm-attribute">-s</span></span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-builtin">chmod</span> <span class="cm-operator">+</span>x wrl2html.py </span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom-width: 0px; border-bottom-style: solid; border-bottom-color: transparent; top: 112px;"></div><div class="CodeMirror-gutters" style="display: none; height: 112px;"></div></div></div></pre><p> </p><p><span>Este código de la simulación describe un experimento de física de partículas cuya representación es más o menos esta:</span></p><p><img src="https://pbs.twimg.com/media/CYbab8dWAAA4CCi.png" referrerpolicy="no-referrer"></p><p><span>Se trata de un </span><em><span>universo</span></em><span> en forma de </span><em><span>cuboide</span></em><span> donde las partículas subatómicas son aceleradas (por los medios que sean) y son proyectadas con forma </span><em><span>cónica</span></em><span> contra un objetivo (un </span><em><span>target</span></em><span> o </span><em><span>fantoma</span></em><span>) de un material que podemos variar a nuestro antojo en composición, tamaño y posición. Nosotros no nos preocupamos sobre cómo esas partículas han cobrado esa energía, sino solamente por cómo interaccionan con la materia. </span><strong><span>Pregunta:</span></strong><span> ¿cómo se llama a este </span><a href='https://scholarsarchive.byu.edu/cgi/viewcontent.cgi?article=1605&=&context=facpub&=&sei-redir=1&referer=https%253A%252F%252Fscholar.google.com%252Fscholar%253Fhl%253Den%2526as_sdt%253D0%25252C5%2526q%253Dpencil%252Bbeam%2526btnG%253D#search=%22pencil%20beam%22'><span>tipo de haz</span></a><span> de partículas?</span></p><p> </p><hr /><p> </p><h2><a name="ejecución-de-las-simulaciones" class="md-header-anchor"></a><span>Ejecución de las simulaciones</span></h2><p><span>Ahora sólo tenemos que lanzar el comando de ejecución de la simulación (con opciones por defecto) desde el terminal integrado de VS Code:</span></p><ul><li><p><span>En el caso de OpenSSH:</span></p><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="bash"><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang="bash"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 55.5px; left: 363.03125px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation"><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-builtin">ssh</span> <span class="cm-attribute">-l</span> <span class="cm-def">$usuariopwd</span> direct.labs.play-with-docker.com <span class="cm-attribute">-i</span> geant4lab.key <span class="cm-string">"/usr/local/bin/docker run -v </span><span class="cm-def">\${PWD}</span><span class="cm-string">:/root pammacdotnet/g4lpwd"</span></span></pre></div></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom-width: 0px; border-bottom-style: solid; border-bottom-color: transparent; top: 84px;"></div><div class="CodeMirror-gutters" style="display: none; height: 84px;"></div></div></div></pre></li><li><p><span>En el caso de Putty:</span></p><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="powershell"><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang="powershell"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 83.5px; left: 4px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation"><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-identifier">plink</span> <span class="cm-operator">-</span><span class="cm-identifier">batch</span> <span class="cm-operator">-</span><span class="cm-identifier">ssh</span> <span class="cm-operator">-</span><span class="cm-identifier">l</span> <span class="cm-variable-2">$usuariopwd</span> <span class="cm-identifier">direct</span><span class="cm-punctuation">.</span><span class="cm-identifier">labs</span><span class="cm-punctuation">.</span><span class="cm-identifier">play-with-docker</span><span class="cm-punctuation">.</span><span class="cm-identifier">com</span> <span class="cm-operator">-</span><span class="cm-identifier">i</span> <span class="cm-identifier">geant4lab</span><span class="cm-punctuation">.</span><span class="cm-identifier">ppk</span> <span class="cm-string">"/usr/local/bin/docker run -v </span><span class="cm-variable-2">\${PWD}</span><span class="cm-string">:/root pammacdotnet/g4lpwd"</span></span></pre></div></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom-width: 0px; border-bottom-style: solid; border-bottom-color: transparent; top: 112px;"></div><div class="CodeMirror-gutters" style="display: none; height: 112px;"></div></div></div></pre></li></ul><p><span>Aparecerá un nuevo fichero en la instancia remota: </span><code>simulation.wrl</code><span>. Este fichero es un diagrama 3D que puedes ver con un visualizador externo. </span><strong><span>Pregunta:</span></strong><span> ¿Qué son los archivos </span><code>wrl</code><span>? ¿De qué estándar internacional se trata? ¡Ojo! Este fichero se encuentra en la instancia remota: todavía tenemos que descargarlo a nuestra máquina local.</span></p><p><span>Este comando que acabamos de comentar (</span><code>docker run</code><span>) crea un contenedor Docker que tiene </span><em><span>mapeada</span></em><span> la carpeta interna </span><code>/root</code><span> con el directorio personal (</span><em><span>home</span></em><span>) del usuario </span><em><span>root</span></em><span> en la instancia Play with Docker. Esto se consigue con la opción </span><code>-v</code><span> (más info </span><a href='https://docs.docker.com/storage/bind-mounts/#mount-into-a-non-empty-directory-on-the-container'><span>aquí</span></a><span>). Sí… suena un poco </span><em><span>mareante</span></em><span> y efectivamente así es. En realidad Play with Docker hace uso de </span><a href='https://github.com/jpetazzo/dind'><span>DIND</span></a><span>. Esta tecnología permite albergar contenedores Docker dentro de un contenedor Docker. </span></p><p><span>El contenedor anterior tiene como cometido ejecutar un único proceso (que no es otro que un intérprete Python que </span><em><span>interpreta</span></em><span> las instrucciones de </span><code>simulation.py</code><span>). Como las dos carpetas están enlazadas tanto para lectura como escritura, el fichero </span><code>simulation.wrl</code><span> estará disponible en </span><code>/root</code><span> de la instancia Play with Docker. </span></p><p><span>También puedes comprobar en cualquier momento que se ha generado correctamente ese fichero accediendo a la instancia Docker mediante la web de Play with Docker o, nuevamente, mediante consola/SSH interactiva a la máquina de Play With Docker. En ambos casos, el comando </span><code>ls</code><span> te listará los ficheros de la carpeta </span><em><span>home</span></em><span> (</span><code>/root</code><span>) del usuario por defecto (</span><code>root</code><span>).</span></p><p><span>Para entender el </span><strong><span>resto de opciones disponibles para la simulación</span></strong><span>, es recomendable que leas la guía que tienes disponible </span><a href='https://github.com/pammacdotnet/play-with-docker.github.io/raw/master/_posts/2020-02-23-geant4lab.markdown'><span>aquí</span></a><span>. También puedes visitar la </span><a href='https://training.play-with-docker.com/geant4lab/'><span>versión </span><em><span>live</span></em></a><span> en el </span><a href='http://training.play-with-docker.com'><span>sitio oficial de pruebas y formación</span></a><span> de Docker. </span></p><p> </p><h2><a name="visualización-de-la-simulación" class="md-header-anchor"></a><span>Visualización de la simulación</span></h2><p><span>Una vez que ya tenemos la simulación, sólo tenemos que visualizarla con Instant Player (o ParaView o view3dscene). Para ello, tenemos que </span><em><span>traer</span></em><span> (o mejor expresado, </span><em><span>descargar</span></em><span>). Lo podemos lograr gracias a lo comandos </span><code>scp</code><span> y </span><code>pscp</code><span>:</span></p><ul><li><p><span>En el caso de OpenSSH:</span></p><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="bash"><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang="bash"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 4px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation"><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">scp <span class="cm-attribute">-i</span> geant4lab.key <span class="cm-attribute">-o</span> <span class="cm-def">User</span><span class="cm-operator">=</span><span class="cm-def">$usuariopwd</span> direct.labs.play-with-docker.com:/root/simulacion.wrl simulacion.wrl</span></pre></div></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom-width: 0px; border-bottom-style: solid; border-bottom-color: transparent; top: 84px;"></div><div class="CodeMirror-gutters" style="display: none; height: 84px;"></div></div></div></pre></li><li><p><span>En el caso de Putty: </span></p><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="powershell"><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang="powershell"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 4px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation"><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-identifier">pscp</span> <span class="cm-operator">-</span><span class="cm-identifier">i</span> <span class="cm-identifier">geant4lab</span><span class="cm-punctuation">.</span><span class="cm-identifier">ppk</span> <span class="cm-operator">-</span><span class="cm-identifier">l</span> <span class="cm-variable-2">$usuariopwd</span> <span class="cm-identifier">direct</span><span class="cm-punctuation">.</span><span class="cm-identifier">labs</span><span class="cm-punctuation">.</span><span class="cm-identifier">play-with-docker</span><span class="cm-punctuation">.</span><span class="cm-identifier">com</span><span class="cm-operator">:/</span><span class="cm-identifier">root</span><span class="cm-operator">/</span><span class="cm-identifier">simulacion</span><span class="cm-punctuation">.</span><span class="cm-identifier">wrl</span> <span class="cm-identifier">simulation</span><span class="cm-punctuation">.</span><span class="cm-identifier">wrl</span></span></pre></div></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom-width: 0px; border-bottom-style: solid; border-bottom-color: transparent; top: 84px;"></div><div class="CodeMirror-gutters" style="display: none; height: 84px;"></div></div></div></pre></li></ul><p><span>Una vez descargada, abrimos el fichero con Instant Player o, si ya está el fichero abierto, puedes simplemente recargarlo (</span><code>File</code><span> ➡️ </span><code>Reload</code><span>). Lo que vemos en el visualizador son trazas de partículas, es decir, sólo vemos partículas que estén en movimiento. Las partículas o materia </span><em><span>paradas</span></em><span>, no se muestran. </span></p><p> </p><h3><a name="visualización-con-estándares-web" class="md-header-anchor"></a><span>Visualización con estándares web</span></h3><p><span>Pero quizás, la visualización más </span><em><span>developer-friendly</span></em><span> es la basada en HTML y estándares Web (WebGL). Luego ejecuta estos comandos (según uses OpenSSH o Putty) para convertir el archivo </span><code>*.wrl</code><span> a </span><code>*.html</code><span>.</span></p><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="bash"><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang="bash"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 4px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation"><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-builtin">ssh</span> <span class="cm-attribute">-l</span> <span class="cm-def">$usuariopwd</span> direct.labs.play-with-docker.com <span class="cm-attribute">-i</span> geant4lab.key <span class="cm-string">"/usr/bin/python3 /root/wrl2html.py"</span> <span class="cm-comment"># OpenSSH</span></span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span cm-text=""></span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">plink <span class="cm-attribute">-batch</span> <span class="cm-attribute">-ssh</span> <span class="cm-attribute">-l</span> <span class="cm-def">$usuariopwd</span> direct.labs.play-with-docker.com <span class="cm-attribute">-i</span> geant4lab.ppk <span class="cm-string">"/usr/bin/python3 /root/wrl2html.py"</span> <span class="cm-comment"># Putty</span></span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom-width: 0px; border-bottom-style: solid; border-bottom-color: transparent; top: 196px;"></div><div class="CodeMirror-gutters" style="display: none; height: 196px;"></div></div></div></pre><p><span>Esto generará el archivo </span><code>simulation.html</code><span> que, nuevamente, puedes copiar a tu carpeta de trabajo local (ya en tu disco duro) con los comandos </span><code>scp</code><span> y </span><code>pscp</code><span> que hemos visto anteriormente:</span></p><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="bash"><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang="bash"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 4px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation"><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">scp <span class="cm-attribute">-i</span> geant4lab.key <span class="cm-attribute">-o</span> <span class="cm-def">User</span><span class="cm-operator">=</span><span class="cm-def">$usuariopwd</span> direct.labs.play-with-docker.com:/root/simulation.html . <span class="cm-comment"># OpenSSH</span></span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span cm-text=""></span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">pscp <span class="cm-attribute">-i</span> geant4lab.ppk <span class="cm-attribute">-l</span> <span class="cm-def">$usuariopwd</span> direct.labs.play-with-docker.com:/root/simulation.html . <span class="cm-comment"># Putty</span></span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom-width: 0px; border-bottom-style: solid; border-bottom-color: transparent; top: 168px;"></div><div class="CodeMirror-gutters" style="display: none; height: 168px;"></div></div></div></pre><p><span>Abre esta página web con cualquier navegador o directamente en VS Code con la extensión </span><em><span>vscode-preview-server</span></em><span> (comando </span><code>Launch on browser</code><span>) que has instalado al principio. Cada vez que se reescriba este fichero, la visualización se actualizará. En principio, la extensión </span><code>preview-server</code><span> debería actualizarla sin que digamos nada, pero si no lo hace, puedes guardar cualquier fichero (</span><em><span>touch</span></em><span> al directorio) y así debería actualizarse. También puedes simplemente indicarle al navegador (si estas usando un navegador externo) que refresque la página web.</span></p><p><strong><span>Pregunta:</span></strong><span> ¿Cómo es posible que veamos figuras 3D en una página web? ¿Qué estándares, alternativas, consorcios e instituciones están implicados? ¿Qué alternativa estamos usando en este ejercicio (</span><a href='https://www.web3d.org'><span>pista</span></a><span>) y qué gran centro de investigación en matemáticas estuvo implicado (</span><a href='https://dl.acm.org/doi/10.1145/1559764.1559784'><span>pista</span></a><span>)?</span></p><p><span>Por último: también sería posible visualizar los ficheros </span><code>wrl</code><span> con </span><a href='https://www.blender.org'><span>Blender</span></a><span>, ParaView, view3dscene y muchos otros.</span></p><p> </p><p> </p><h1><a name="interacciones-de-partículas-con-la-materia" class="md-header-anchor"></a><span>Interacciones de partículas con la materia</span></h1><p><span>Vamos a describir las más habituales y que deberías de poder encontrar tú mismo en tus simulaciones. Tienes esta misma información, pero con algo más de detalle, en la </span><a href='https://training.play-with-docker.com/geant4lab/'><span>versión </span><em><span>live</span></em></a><span> de este laboratorio. </span></p><p> </p><h3><a name="efecto-fotoeléctrico" class="md-header-anchor"></a><span>Efecto fotoeléctrico</span></h3><p><span>El efecto fotoeléctrico se produce cuando tiene lugar una interacción entre un fotón (partícula incidente) y un átomo. La consecuencia de una interacción fotoeléctrica es la emisión de electrones (fotoelectrones), debido a la absorción total de la energía del fotón por el electrón ligado. El fotón es absorbido completamente y </span><em><span>desaparece</span></em><span> de la escena. </span></p><p><img src="https://pammachome.files.wordpress.com/2018/12/fe.jpg" referrerpolicy="no-referrer" alt="Efecto fotoeléctrico"></p><p> </p><h3><a name="efecto-compton" class="md-header-anchor"></a><span>Efecto Compton</span></h3><p><span>El efecto Compton tiene lugar en la interacción de un fotón (partícula incidente) y un electrón poco ligado al átomo. Se produce entonces una colisión </span><em><span>casi elástica</span></em><span>. Al colisionar el fotón con el electrón este es desviado, y el fotón original también. Puede asemejarse a un </span><em><span>choque de bolas de billar</span></em><span>. A veces si la energía del fotón incidente es muy justa, el electrón (o electrones, en el caso de una colisión múltiple) desviado apenas avanza (su traza es muy pequeña, casi imperceptible) y da la sensación de que el fotón (que, recordamos, no es más que luz) está </span><em><span>zigzagueando</span></em><span>. </span><strong><span>Pregunta</span></strong><span>: ¿cuánto tiempo puede estar </span><em><span>serpenteando</span></em><span> un fotón que </span><em><span>nace</span></em><span> en el centro del Sol hasta llegar a la retina de cualquiera de tus ojos?</span></p><p><img src="https://pammachome.files.wordpress.com/2018/12/compton.jpg" referrerpolicy="no-referrer"></p><p> </p><h3><a name="producción-de-pares" class="md-header-anchor"></a><span>Producción de pares</span></h3><p><span>El efecto de creación de pares tiene lugar con fotones de alta energía (> 1.1 MeV), y representa un </span><strong><span>proceso de materialización de energía</span></strong><span> en el sentido de la Mecánica Relativista. El fenómeno que tiene lugar es la desaparición del fotón en el campo del núcleo, y la creación en su lugar de un par positrón-electrón (materia y antimateria). </span><strong><span>Pregunta</span></strong><span>: ¿qué es un positrón? ¿Quién postuló su existencia teórica y cuándo y cómo se descubrió experimentalmente?</span></p><p><img src="https://pammachome.files.wordpress.com/2018/12/pair.jpg" referrerpolicy="no-referrer" alt="Producción de pares"></p><p><img src="https://pbs.twimg.com/media/DUpWfBBWAAA4OQa.jpg" referrerpolicy="no-referrer"></p><p> </p><h3><a name="ionización" class="md-header-anchor"></a><span>Ionización</span></h3><p><span>Si en los choques de una partícula cargada con los electrones atómicos, la energía transferida es superior a la energía de enlace del electrón que </span><em><span>recibe el impacto</span></em><span>, este abandona el átomo y en consecuencia se crea un ion positivo. El electrón expulsado puede a continuación zigzaguear hasta ser capturado por un átomo del entorno (la traza deja de verse porque, como hemos comentado, el electrón se </span><em><span>para</span></em><span>). </span></p><p><img src="https://pammachome.files.wordpress.com/2018/12/ionization.jpg" referrerpolicy="no-referrer" alt="Ionización"></p><p> </p><h3><a name="bremsstrahlung" class="md-header-anchor"></a><span>Bremsstrahlung</span></h3><p><span>Cuando una partícula incidente con masa y carga eléctrica interacciona con un núcleo atómico, puede sufrir una variación súbita de su velocidad, emite radiación electromagnética (un fotón).</span></p><p><img src="https://pammachome.files.wordpress.com/2018/12/bremsstrahlung.jpg" referrerpolicy="no-referrer" alt="Bremsstrahlung"></p><p> </p><h3><a name="aniquilación-de-pares" class="md-header-anchor"></a><span>Aniquilación de pares</span></h3><p><span>Si un positrón y un electrón se encuentran, se </span><em><span>aniquilan</span></em><span> creando dos fotones que son emitidos en direcciones opuestas. </span><strong><span>Pregunta</span></strong><span>: ¿qué relación tiene la modalidad radiológica PET con la aniquilación de pares electrón-positrón? ¿Cómo se </span><em><span>trasladan</span></em><span> positrones hasta el interior de las células cancerígenas?</span></p><p><img src="https://pammachome.files.wordpress.com/2018/12/aniquilacion.jpg" referrerpolicy="no-referrer" alt="Aniquilación"></p><p> </p><hr /><p> </p><h1><a name="entregable-del-laboratorio" class="md-header-anchor"></a><span>Entregable del laboratorio</span></h1><p><span>Se pide un informe técnico personal, elegante y bien presentado de todas las tareas necesarias para la ejecución de la actividad. Es decir, reproducid en vuestro escenario todos los pasos realizados y que más o menos imiten a los que ya vienen descritos en este documento (instalación de software, configuración, accesos remotos, etc.).</span></p><p><span>Contestad a todas las preguntas intermedias que se proponen.</span></p><p><span>Buscad e identificad todos los tipos de interacciones de partículas con la materia posibles, modificando para ello todos los parámetros de la simulación. Comenta claramente el </span><em><span>setup</span></em><span> experimental definido en cada caso (energía de las partículas, si se trata de fotones, electrones o positrones, posición del haz, tipo de fantoma, material del mismo, etc.). Ejemplifica cada interacción con un captura de pantalla bien explicada del fenómeno físico que se pueda apreciar. A continuación tienes un resumen de las interacciones más básicas a estas energías. </span></p><p><span>El documento final debe tener formato PDF o HTML inline (todos los recursos incrustados en </span><strong><span>único fichero</span></strong><span>). Para generar el HTML inline puedes exportar primero a HTML desde Typora (esto creará un fichero HTML y un subdirectorio con todas las imágenes que hayas incluido en tu fichero original Markdown) y luego condensar todos los recursos en un único documento. Para llevar a cabo esta labor de </span><em><span>condensación</span></em><span> tienes a tu disposición varias herramientas basadas en Node.js/npm. Las mejores son </span><a href='https://www.npmjs.com/package/inline-assets'><span>inline assets</span></a><span> y </span><a href='https://github.com/Y2Z/monolith'><span>monolith</span></a><span> (esta última no requiere Node) con las que podrás fusionar todos los recursos de una web en un único documento HTML</span></p></div>
</body>
</html>