Esempio n. 1
0
def run_smd0():
    smd_dir = '/cds/data/drpsrcf/users/monarin/xtcdata/10M60n/xtcdata/smalldata'
    #smd_dir = '/cds/data/drpsrcf/users/monarin/tmoc00118/xtc/smalldata'
    filesize = 760057400
    n_files = int(sys.argv[1])
    filenames = [None] * n_files
    for i in range(n_files):
        filenames[i] = os.path.join(smd_dir,
                                    f'data-r0001-s{str(i).zfill(2)}.smd.xtc2')
        #filenames[i] = os.path.join(smd_dir,f'tmoc00118-r0463-s{str(i).zfill(3)}-c000.smd.xtc2')
        #filenames[i] = os.path.join(smd_dir,f'tmolv9418-r0175-s{str(i).zfill(3)}-c000.smd.xtc2')

    smd_fds = np.array(
        [os.open(filename, os.O_DIRECT) for filename in filenames],
        dtype=np.int32)

    st = time.time()
    prom_man = PrometheusManager(os.getpid())
    dsparms = DsParms(
        batch_size=1,  # bigdata batch size 
        max_events=max_events,
        filter=0,
        destination=0,
        prom_man=prom_man,
        max_retries=0,
        live=False,
        found_xtc2_callback=0,
        timestamps=np.empty(0, dtype=np.uint64))
    smdr_man = SmdReaderManager(smd_fds[:n_files], dsparms)
    for i_chunk in enumerate(smdr_man.chunks()):
        if not smdr_man.got_events: break
        found_endrun = smdr_man.smdr.found_endrun()
        if found_endrun:
            print(f'found EndRun')
            break

    print(f'total search time: {smdr_man.smdr.total_time}')
    en = time.time()
    processed_events = smdr_man.processed_events
    print(
        f"#Smdfiles: {n_files} #Events: {processed_events} Elapsed Time (s): {en-st:.2f} Rate (MHz): {processed_events/((en-st)*1e6):.2f} Bandwidth(GB/s):{filesize*n_files*1e-9/(en-st):.2f}"
    )
def run_smd0():
    filenames = glob.glob(
        '/gpfs/alpine/scratch/monarin/chm137/data/.tmp/smalldata/*.xtc2')

    fds = np.array([os.open(filename, os.O_RDONLY) for filename in filenames],
                   dtype=np.int32)

    run = Run(fds)
    smdr_man = SmdReaderManager(run)
    run.configs = smdr_man.get_next_dgrams()
    run.beginruns = smdr_man.get_next_dgrams(configs=run.configs)

    st = time.time()
    processed_events = 0
    for i, chunk in enumerate(smdr_man.chunks()):
        #for i, batch in enumerate(smdr_man):
        processed_events += smdr_man.got_events

    en = time.time()
    print("#Events: %d Elapsed Time (s): %f Rate (MHz): %f" %
          (processed_events, (en - st), processed_events / ((en - st) * 1e6)))