function Z = avapower(Ms,bin_size,reps)
%Main avalanche script

En=full(sum(Ms));                                       %size of event at each timepoint
En([1:find(~En,1,'first') find(~En,1,'last'):end])=0;   %remove clipped avalanches
Eind=find(En);                                          %indices of event occurence

Astart=Eind;
Afinit=Eind;
Astart([false Eind(2:end)-1==Eind(1:end-1)])=[];        %commencement of avalanches
Afinit([Eind(1:end-1)+1==Eind(2:end) false])=[];        %termination of avalanches

N=zeros(size(Astart));
for i=1:length(Astart)
    N(i)=sum(En(Astart(i):Afinit(i)));                  %size of avalanches
end
L=bin_size*(Afinit-Astart+1);                           %duration of avalanches
T=bin_size*(Astart(2:end)-Afinit(1:end-1)-1);           %period between avalanches

%m=max(size(Ms,1),max(N));
[dN alphN xminN xmaxN pvalN gammN xmineN VN pvalRN]=powerlaw_pval(N,reps,max(N));
[dL alphL xminL xmaxL pvalL gammL xmineL VL pvalRL]=powerlaw_pval(L,reps,max(L));
[dT alphT xminT xmaxT pvalT gammT xmineT VT pvalRT]=powerlaw_pval(T,reps,max(T));

Z.N=int32(N);
Z.L=int32(L);
Z.T=int32(T);
Z.d   =[   dN    dL    dT];
Z.alph=[alphN alphL alphT];
Z.xmin=[xminN xminL xminT];
Z.xmax=[xmaxN xmaxL xmaxT];
Z.n   =[nnz(N>=xminN) nnz(L>=xminL) nnz(T>=xminT)];
Z.pval=[pvalN pvalL pvalT];

Z.v=[VN VL VT];
Z.pvalr=[pvalRN pvalRL pvalRT];
Z.gamm=[gammN gammL gammT];
Z.xmine=[xmineN xmineL xmineT];