def _patch_om_init(take_only): """ temp patch since om = straxen.OnlineMonitor() does not work with utilix """ header = 'RunDB' user = straxen.uconfig.get(header, 'pymongo_user') pwd = straxen.uconfig.get(header, 'pymongo_password') url = straxen.uconfig.get(header, 'pymongo_url').split(',')[-1] uri = f"mongodb://{user}:{pwd}@{url}" return straxen.OnlineMonitor(uri=uri, take_only=take_only)
def xenonnt_online(output_folder='./strax_data', we_are_the_daq=False, _minimum_run_number=7157, _database_init=True, **kwargs): """XENONnT online processing and analysis""" context_options = {**straxen.contexts.common_opts, **kwargs} st = strax.Context(config=straxen.contexts.xnt_common_config, **context_options) st.register_all(have_nT_plugins) st.register([straxen.DAQReader, straxen.LEDCalibration]) st.storage = [ straxen.RunDB(readonly=not we_are_the_daq, minimum_run_number=_minimum_run_number, runid_field='number', new_data_path=output_folder, rucio_path='/dali/lgrandi/rucio/') ] if _database_init else [] if not we_are_the_daq: st.storage += [ strax.DataDirectory('/dali/lgrandi/xenonnt/raw', readonly=True, take_only=straxen.DAQReader.provides), strax.DataDirectory('/dali/lgrandi/xenonnt/processed', readonly=True) ] if output_folder: st.storage.append(strax.DataDirectory(output_folder)) st.context_config[ 'forbid_creation_of'] = straxen.daqreader.DAQReader.provides + ( 'records', ) # Only the online monitor backend for the DAQ elif _database_init: st.storage += [ straxen.OnlineMonitor(readonly=not we_are_the_daq, take_only=( 'veto_intervals', 'online_peak_monitor', 'online_veto_monitor', )) ] # Remap the data if it is before channel swap (because of wrongly cabled # signal cable connectors) These are runs older than run 8797. Runs # newer than 8796 are not affected. See: # https://github.com/XENONnT/straxen/pull/166 and # https://xe1t-wiki.lngs.infn.it/doku.php?id=xenon:xenonnt:dsg:daq:sector_swap st.set_context_config( {'apply_data_function': (straxen.common.remap_old, )}) return st
def xenonnt_online(output_folder='./strax_data', we_are_the_daq=False, _minimum_run_number=7157, _maximum_run_number=None, _database_init=True, _forbid_creation_of=None, _rucio_path='/dali/lgrandi/rucio/', _raw_path='/dali/lgrandi/xenonnt/raw', _processed_path='/dali/lgrandi/xenonnt/processed', _add_online_monitor_frontend=False, _context_config_overwrite=None, **kwargs): """ XENONnT online processing and analysis :param output_folder: str, Path of the strax.DataDirectory where new data can be stored :param we_are_the_daq: bool, if we have admin access to upload data :param _minimum_run_number: int, lowest number to consider :param _maximum_run_number: Highest number to consider. When None (the default) consider all runs that are higher than the minimum_run_number. :param _database_init: bool, start the database (for testing) :param _forbid_creation_of: str/tuple, of datatypes to prevent form being written (raw_records* is always forbidden). :param _rucio_path: str, path of rucio :param _raw_path: str, common path of the raw-data :param _processed_path: str. common path of output data :param _context_config_overwrite: dict, overwrite config :param _add_online_monitor_frontend: bool, should we add the online monitor storage frontend. :param kwargs: dict, context options :return: strax.Context """ context_options = { **straxen.contexts.xnt_common_opts, **kwargs} st = strax.Context( config=straxen.contexts.xnt_common_config, **context_options) st.register([straxen.DAQReader, straxen.LEDCalibration]) st.storage = [ straxen.RunDB( readonly=not we_are_the_daq, minimum_run_number=_minimum_run_number, maximum_run_number=_maximum_run_number, runid_field='number', new_data_path=output_folder, rucio_path=_rucio_path, )] if _database_init else [] if not we_are_the_daq: st.storage += [ strax.DataDirectory( _raw_path, readonly=True, take_only=straxen.DAQReader.provides), strax.DataDirectory( _processed_path, readonly=True, )] if output_folder: st.storage.append( strax.DataDirectory(output_folder)) st.context_config['forbid_creation_of'] = straxen.daqreader.DAQReader.provides if _forbid_creation_of is not None: st.context_config['forbid_creation_of'] += strax.to_str_tuple(_forbid_creation_of) # Only the online monitor backend for the DAQ if _database_init and (_add_online_monitor_frontend or we_are_the_daq): st.storage += [straxen.OnlineMonitor( readonly=not we_are_the_daq, take_only=('veto_intervals', 'online_peak_monitor', 'event_basics',))] # Remap the data if it is before channel swap (because of wrongly cabled # signal cable connectors) These are runs older than run 8797. Runs # newer than 8796 are not affected. See: # https://github.com/XENONnT/straxen/pull/166 and # https://xe1t-wiki.lngs.infn.it/doku.php?id=xenon:xenonnt:dsg:daq:sector_swap st.set_context_config({'apply_data_function': (straxen.remap_old,)}) if _context_config_overwrite is not None: st.set_context_config(_context_config_overwrite) return st