@@ -56,8 +56,10 @@ def __init__(self, config: dict, verbose: bool = True) -> None:
5656 set_verbosity (logger , self ._verbose )
5757
5858 self .instrument : str = self ._config ["core" ].get ("instrument" , "hextof" ) # default is hextof
59+ self .beamtime_dir : str = None
5960 self .raw_dir : str = None
6061 self .processed_dir : str = None
62+ self .meta_dir : str = None
6163
6264 @property
6365 def verbose (self ) -> bool :
@@ -94,9 +96,14 @@ def _initialize_dirs(self) -> None:
9496 # Only raw_dir is necessary, processed_dir can be based on raw_dir, if not provided
9597 if "paths" in self ._config ["core" ]:
9698 raw_dir = Path (self ._config ["core" ]["paths" ].get ("raw" , "" ))
99+ print (raw_dir )
97100 processed_dir = Path (
98101 self ._config ["core" ]["paths" ].get ("processed" , raw_dir .joinpath ("processed" )),
99102 )
103+ meta_dir = Path (
104+ self ._config ["core" ]["paths" ].get ("meta" , raw_dir .joinpath ("meta" )),
105+ )
106+ beamtime_dir = Path (raw_dir ).parent
100107
101108 else :
102109 try :
@@ -130,11 +137,14 @@ def _initialize_dirs(self) -> None:
130137 raw_dir = raw_paths [0 ].resolve ()
131138
132139 processed_dir = beamtime_dir .joinpath ("processed" )
140+ meta_dir = beamtime_dir .joinpath ("meta/fabtrack/" )
133141
134142 processed_dir .mkdir (parents = True , exist_ok = True )
135143
144+ self .beamtime_dir = str (beamtime_dir )
136145 self .raw_dir = str (raw_dir )
137146 self .processed_dir = str (processed_dir )
147+ self .meta_dir = str (meta_dir )
138148
139149 @property
140150 def available_runs (self ) -> list [int ]:
@@ -209,7 +219,7 @@ def get_files_from_run_id( # type: ignore[override]
209219 # Return the list of found files
210220 return [str (file .resolve ()) for file in files ]
211221
212- def parse_metadata (self , token : str = None ) -> dict :
222+ def parse_scicat_metadata (self , token : str = None ) -> dict :
213223 """Uses the MetadataRetriever class to fetch metadata from scicat for each run.
214224
215225 Returns:
@@ -225,6 +235,23 @@ def parse_metadata(self, token: str = None) -> dict:
225235
226236 return metadata
227237
238+ def parse_local_metadata (self ) -> dict :
239+ """Uses the MetadataRetriever class to fetch metadata from local folder for each run.
240+
241+ Returns:
242+ dict: Metadata dictionary
243+ """
244+ metadata_retriever = MetadataRetriever (self ._config ["metadata" ])
245+ metadata = metadata_retriever .get_local_metadata (
246+ beamtime_id = self ._config ["core" ]["beamtime_id" ],
247+ beamtime_dir = self .beamtime_dir ,
248+ meta_dir = self .meta_dir ,
249+ runs = self .runs ,
250+ metadata = self .metadata ,
251+ )
252+
253+ return metadata
254+
228255 def get_count_rate (
229256 self ,
230257 fids : Sequence [int ] = None , # noqa: ARG002
@@ -403,7 +430,12 @@ def read_dataframe(
403430 filter_timed_by_electron = filter_timed_by_electron ,
404431 )
405432
406- self .metadata .update (self .parse_metadata (token ) if collect_metadata else {})
433+ if len (self .parse_scicat_metadata (token )) == 0 :
434+ print ("No SciCat metadata available, checking local folder" )
435+ self .metadata .update (self .parse_local_metadata ())
436+ else :
437+ print ("Metadata taken from SciCat" )
438+ self .metadata .update (self .parse_scicat_metadata (token ) if collect_metadata else {})
407439 self .metadata .update (bh .metadata )
408440
409441 print (f"loading complete in { time .time () - t0 : .2f} s" )
0 commit comments