function get_hits(fname, levels, delta, deleteFirst, isTimeSeries, isIncremental) % hitting times, points and subcrossings for continuous process % % fname: input file name without extension, x(t(n)) and t(n) in files fname.dat and fname.tim % levels: for each level in levels crossings will be calculated at scale delta*2^level % delta: if not 0 then is used as base scale, o/w use stddev(diff(x)) % deleteFirst: if 1 then delete first crossing at each level % isTimeSeries: if 1 then t(n) = n and fname.tim not used % isIncremental: if 1 then fname.dat contains x(n) - x(n-1), assumes isTimeSeries == 1 % % hitting times and points are written to file fname.hit % subcrossings are written to file fname.sub % % Y.Shen 12.2002, O.D.Jones 7.2003 % hitting times and points eval(['load ' fname '.dat;']); eval(['x = ' fname '(:,1);']); if isTimeSeries if isIncremental x = [0; cumsum(x)]; end lx = length(x); t = 0:lx-1; else lx = length(x); eval(['load ' fname '.tim;']); eval(['t = ' fname '(:,1);']); end if delta == 0 delta = std(diff(x)); end for n = levels if n < 10 output_file = sprintf('%s_0%d.hit', fname, n); else output_file = sprintf('%s_%d.hit', fname, n); end fid = fopen(output_file, 'w'); scale = 2^n; y = (x - x(1))/delta/scale; if deleteFirst last_hit = 0; else last_hit = 1; end for i = 2:lx if y(i-1) ~= y(i) if y(i-1) < y(i) x_init = ceil(y(i-1)); x_final = floor(y(i)); step = 1; else x_init = floor(y(i-1)); x_final = ceil(y(i)); step = -1; end for j = x_init:step:x_final if j ~= last_hit hit_time = t(i-1) + (j - y(i-1))/(y(i) - y(i-1))*(t(i) - t(i-1)); hit_point = j*delta*scale + x(1); fprintf(fid, '%.4f\t%.4f', hit_time, hit_point); fprintf(fid, '\n'); last_hit = j; end end end end fclose(fid); end % subcrossing numbers levels = levels(2:end); level = levels(1) - 1; if level < 10 fnameXX = sprintf('%s_0%d', fname, level); else fnameXX = sprintf('%s_%d', fname, level); end eval(['load ' fnameXX '.hit;']); eval(['hit0 = ' fnameXX ';']); for level = levels(1:end) if level < 10 fnameXX = sprintf('%s_0%d', fname, level); else fnameXX = sprintf('%s_%d', fname, level); end eval(['load ' fnameXX '.hit;']); eval(['hit1 = ' fnameXX ';']); fid = fopen([fnameXX '.sub'], 'w'); if ~isempty(hit1) j0 = 1; while hit0(j0,1) ~= hit1(1,1), j0 = j0 + 1; end for i = 2:size(hit1,1) j1 = j0 + 1; while hit0(j1,1) ~= hit1(i,1), j1 = j1 + 1; end fprintf(fid, '%d\n', j1 - j0); j0 = j1; end end fclose(fid); hit0 = hit1; end