classdef LSMEventList
  %LSMEVENTLIST Class representation of a EventList in LSM files
  %
  % AUTHOR: Stefano Masneri
  % Date: 14.3.2017
  
  
  properties
    size;
    numberEvents;
    eventEntries;   % array of structure representing events
                    % The type field of each event entry can be a number
                    % between 0 and 4, where
                    % 0 = Experimental annotation (EV_TYPE_MARKER)
                    % 1 = The time interval has changed (EV_TYPE_TIMER_CHANGE)
                    % 2 = Start of a bleach operation (V_TYPE_BLEACH_START)
                    % 3 = End of a bleach operation (EV_TYPE_BLEACH_STOP)
                    % 4 = trigger signal was detected on the user port of
                    %   the electronic module (EV_TYPE_TRIGGER)
  end
  
  methods
    function obj = LSMEventList(lsmPtr, byteOrder)
    %LSMEVENTLIST Constructor
    % Assumes the file pointer in the correct position already
      obj.size = fread(lsmPtr, 1, 'int32', byteOrder);
      obj.numberEvents = fread(lsmPtr, 1, 'int32', byteOrder);
      if obj.numberEvents > 0
        tmp = struct('size', 0, 'time', 0.0, 'type', 0, 'description', '');
        obj.eventEntries(obj.numberEvents) = tmp; %initialize struct array
        for k = 1:obj.numberEvents
          obj.eventEntries(k).size = fread(lsmPtr, 1, 'uint32', byteOrder);
          obj.eventEntries(k).time = fread(lsmPtr, 1, 'double', byteOrder);
          obj.eventEntries(k).type = fread(lsmPtr, 1, 'uint32', byteOrder);
          textToRead = obj.eventEntries(k).size - 16;
          obj.eventEntries(k).description = fread(lsmPtr, textToRead, '*char')';
        end
      end
    end
  end
  
end