Wiki source code of DEMO - Working with FLASH data

Last modified by sndueste on 2025/03/20 12:32

Show last authors
1 Experimental data is recorded as HDF files[[~[link~]>>doc:FLASHUSER.Data Acquisition and controls.DAQ and controls overview.Offline data analysis (DAQ).The FLASH HDF5 structure.WebHome]] on the GPFS file system[[~[link~]>>https://docs.desy.de/asap3/]]. The access rights are linked to the user's DESY account and can be managed by the PI via the GAMMA portal[[~[link~]>>url:https://gamma-portal.desy.de/||shape="rect"]]. The experimental data can be downloaded via the GAMMA portal, but it is advised to use the DESY computing infrastructure. Access point are via ssh, Maxwell-Display Server[[~[link~]>>url:https://confluence.desy.de/display/MXW/Maxwell+Cluster||shape="rect"]] or JuyterHub[[~[link~]>>url:https://confluence.desy.de/display/MXW/JupyterHub+on+Maxwell||shape="rect"]]. We recommend using the JupyterHub for data exploration and the SLURM resources for high performances computing - see FAB for easy usage of the infrastructure.
2
3 {{info title="How to login JupyterHub"}}
4 === ===
5
6 {{view-file att--filename="tmp.mp4" height="150"/}}
7 {{/info}}
8
9 {{info}}
10 === There are different options that help you to work with the FLASH HDF5 data in Python ===
11
12 * The currently developed option for large data sets: [[the FAB package>>url:https://hasfcpkg.desy.de/fab/fab.html||shape="rect"]] ... see below
13 * and for smaller projects:  (% class="Object" %)[[https:~~/~~/gitlab.desy.de/christopher.passow/flash-daq-hdf>>url:https://gitlab.desy.de/christopher.passow/flash-daq-hdf||shape="rect"]]
14
15 (% class="Object" %)See also the collection of Demo data and sample scripts : [[doc:FLASHUSER.Data Acquisition and controls.DAQ and controls overview.Offline data analysis (DAQ).Collection of HDF5 sample data from different beamlines.WebHome]]
16 {{/info}}
17
18
19 [[~[~[image:attach:image2023-9-29_11-1-37.png~]~]>>url:https://hasfcpkg.desy.de/fab/fab.html||shape="rect"]]
20
21 {{expand title="older ideas ..."}}
22 (% class="Object" %)(object oriented) [[https:~~/~~/gitlab.desy.de/christopher.passow/fdh-builder>>url:https://gitlab.desy.de/christopher.passow/fdh-builder.git||shape="rect"]]
23
24 ----
25
26 === TODO ===
27
28 (% class="task-list" %)
29 (((
30 {{task reference="/Tasks/Task_18" status="InProgress"}}
31 Short descriptions including Links:   → as Text
32
33 (% class="task-list" %)
34 (((
35
36
37 {{task reference="/Tasks/Task_19" status="InProgress"}}
38 GPFS
39 {{/task}}
40
41 {{task reference="/Tasks/Task_40" status="InProgress"}}
42 Access rights
43 {{/task}}
44
45 {{task reference="/Tasks/Task_41" status="InProgress"}}
46 Gamma Portal
47 {{/task}}
48
49 {{task reference="/Tasks/Task_42" status="InProgress"}}
50 Maxwell
51 {{/task}}
52
53 {{task reference="/Tasks/Task_20" status="InProgress"}}
54 JupyterHub
55 {{/task}}
56
57 {{task reference="/Tasks/Task_21" status="InProgress"}}
58 conda ?
59 {{/task}}
60
61 {{task reference="/Tasks/Task_36" status="InProgress"}}
62 explain install from channel instead of fixed environment, but can use environment file from example repository
63 {{/task}}
64 )))
65 {{/task}}
66 )))
67
68
69 (% class="task-list" %)
70 (((
71 {{task reference="/Tasks/Task_22" status="InProgress"}}
72 distribution
73
74 (% class="task-list" %)
75 (((
76
77
78 {{task reference="/Tasks/Task_23" status="InProgress"}}
79 channel  (where to host?)
80 {{/task}}
81
82 {{task reference="/Tasks/Task_24" status="InProgress"}}
83 environment file (repository with examples)
84 {{/task}}
85 )))
86 {{/task}}
87 )))
88
89
90 (% class="task-list" %)
91 (((
92 {{task reference="/Tasks/Task_25" status="InProgress"}}
93 Documentation
94
95 (% class="task-list" %)
96 (((
97
98
99 {{task reference="/Tasks/Task_26" status="InProgress"}}
100 here VS repository VS sphinx
101 {{/task}}
102 )))
103 {{/task}}
104 )))
105
106
107 (% class="task-list" %)
108 (((
109 {{task reference="/Tasks/Task_27" status="InProgress"}}
110 Binder
111
112 (% class="task-list" %)
113 (((
114
115
116 {{task reference="/Tasks/Task_28" status="InProgress"}}
117 examples with Stefan
118 {{/task}}
119 )))
120 {{/task}}
121 )))
122
123
124 (% class="task-list" %)
125 (((
126 {{task reference="/Tasks/Task_29" status="InProgress"}}
127 Screencast
128
129 (% class="task-list" %)
130 (((
131
132
133 {{task reference="/Tasks/Task_30" status="InProgress"}}
134 login in jupyter hub
135 {{/task}}
136
137 {{task reference="/Tasks/Task_31" status="InProgress"}}
138 login maxwell display
139 {{/task}}
140
141 {{task reference="/Tasks/Task_32" status="InProgress"}}
142 use slix
143 {{/task}}
144
145 {{task reference="/Tasks/Task_33" status="InProgress"}}
146 use hdfview plugin in jupterLab
147 {{/task}}
148
149 {{task reference="/Tasks/Task_34" status="InProgress"}}
150 create conda env with flashh5
151 {{/task}}
152 )))
153 {{/task}}
154 )))
155
156
157
158 ----
159
160 ==== under review ====
161
162
163 {{code language="bash"}}
164 conda create -n flashh5 python=3.10 # 3.10 not necessary, but would prefer 3.8 or higher
165 source activate flashh5
166 conda install ipython numpy pandas #TODO: fix dependcies
167 conda install -c https://www.desy.de/~cpassow/condarepo/ flashh5
168
169 ## on jhub
170 conda install ipykernel
171 python -m ipykernel install --user --name flashh5 --display-name "flashh5"
172
173
174 ## to remove on jhub
175 ## delete from: /home/$USER/.local/share/jupyter/kernels/
176 {{/code}}
177
178 {{code language="py" title="
179 moved to repository?"}}
180 class RunDirectory:
181
182 def get_run_table(): # more or less information? RunComment | Number of Files | start & stop time ?
183 ...
184
185 def get_run(daq, run_number): # daq is not needed!
186
187 ...
188
189
190 class Run: # constructor optional without RunDirectory or use there self.path
191
192 def get_files():
193 ...
194
195 def get_channels(): # of file #1
196 ...
197
198 def get_start_time(): # better as attribute?
199 ...
200
201 def get_stop_time(): # which? | better as attribute?
202 ...
203
204 def to_df(daq_map): # to_df(daq_map, slice) slice=[0:4] -> throw Exception
205 ...
206
207 def to_series(channel):
208 ...
209
210 def to_array(channel):
211 ...
212 {{/code}}
213
214 {{code language="py" title="ideas"}}
215 run.to_df(daq_map)
216 run.to_series(daq_adr or daq_map) # on channel only?
217 run.to_array(daq_adr) # on channel only?
218
219 ## interesting?
220 # run.to_dask(daq_map)
221 # run.to_xarray(daq_map)
222 {{/code}}
223
224
225
226 {{/expand}}