Page History
...
Code Block |
---|
% we'll read evr data from the first calib cycle of a tutorial file: evrData = h5read('/reg/d/psdm/xpp/xpptut13/hdf5/xpptut13-r0179.h5','/Configure:0000/Run:0000/CalibCycle:0000/EvrData::DataV3/NoDetector.0:Evr.0/data'); % evrData is a struct with one element - fifoEvents. fifoEvents is a cell array with one entry per event in the CalibCycle fifoEvents = evrData.fifoEvents; numberOfEvents = length(fifoEvents); % numberOfEvents is 483 % let's identify the smallest and largest event code codes in this calib cycle minEventCode=99999; maxEventCode=0; for eventIdx = 1:numEventsnumOfEvents; maxEventCode = max(maxEventCode, max(fifoEvents{eventIdx}.eventCode)); end; for eventIdx = 1:numEventsnumOfEvents; minEventCode = min(minEventCode, min(fifoEvents{eventIdx}.eventCode)); end; assert(minEventCode>0, 'unexpected - minimum event code should be greater than 0. matlab uses 1-up array indexing, 0 will not work with below code'); % lets fill out a flat Array, each row is an event, and column k is 1 only if eventCode k occurred in that event eventCodesFlat = int8(zeros(numberOfEvents, maxEventCode)); for i=1:numberOfEvents; eventCode = fifoEvents{i}.eventCode; for ec=eventCode; eventCodesFlat(i,ec)=1; end; end; % here is an example of how you might work with the flat array numberOfEventsWithEventCode42 = sum(eventCodesFlat(:,42)); % there are 121 events with event code 42 % lets say we want to average over the cspad data for just those 121 events. % The below code is easy to write, although it uses quite a bit of memory: cspad = h5read('/reg/d/psdm/xpp/xpptut13/hdf5/xpptut13-r0179.h5','/Configure:0000/Run:0000/CalibCycle:0000/CsPad::ElementV2/XppGon.0:Cspad.0/data'); % That reads in 2GB - 483 events * 2 bytes per element * 32 * 185 * 388. % cspad's size is 388 185 32 483 eventsWith42 = eventCodesFlat(:,42)==1; assert(length(eventsWith42)==length(cspad), 'number of events with cspad != number of events with evr data, even if equal, should do more and check that all entries in time datasets are the same'); Â cspadEventCode42 = cspad(:,:,:,eventsWith42); % size(cspadEventCode42) returns 388 185 32 121 cspadAverageEventCode42 = mean(cspadEventCode42,4); |
...
Overview
Content Tools