function [export_file_name] = main_analyse_distribution [X,Y] = xlsread('file.xlsx',1);%list of data to be analyzed DATA = load('file.mat');%data to be analyzed load(['distribution.mat']);%A{1},B{1} in 'distribution.mat' are distributions of 1600 ¦Ìm-chip [ll,~] = size(X);%the total number of data that need to be processed diagonal_y1_distribution = cell(1,1); diagonal_y2_distribution = cell(1,1); centre = ceil(((1600/40+2)/2)*sqrt(2)); sample_name1 = X(1,4:12); sample_name2 = Y{2,2}; sn = 1; num = size(A{1},1); diagonal_y1_distribution{1} = zeros(num,centre(1)-4); diagonal_y2_distribution{1} = zeros(num,centre(1)-4); for i2=1:num if A{1}(i2,2) ~= 0 d1 = A{1}(i2,3); d2 = A{1}(i2,4); delta1 = A{1}(i2,5); delta2 = A{1}(i2,6); y1_start = A{1}(i2,3)-A{1}(i2,5)-3; y2_start = A{1}(i2,4)-A{1}(i2,6)-3; y1_end = y1_start+delta1-1; y2_end = y2_start+delta2-1; diagonal_y1_distribution{1}(i2,y1_start:y1_end) = 1; diagonal_y2_distribution{1}(i2,y2_start:y2_end) = 1; diagonal_y1_distribution{1}(i2,y1_start:y1_end) = diagonal_y1_distribution{1}(i2,y1_start:y1_end)/sum(diagonal_y1_distribution{1}(i2,y1_start:y1_end)); diagonal_y2_distribution{1}(i2,y2_start:y2_end) = diagonal_y2_distribution{1}(i2,y2_start:y2_end)/sum(diagonal_y2_distribution{1}(i2,y2_start:y2_end)); end end for i = 1:ll if ~(all(X(i,4:12)== sample_name1) && isequal(Y{i+1,2},sample_name2)) sn = sn+1; sample_name1 = X(i,4:12); sample_name2 = Y{i+1,2}; end end rfp = zeros(5,sn,15); rfp_back = zeros(5,sn,15); rfp_dist = zeros(5,sn,15,26); rfp_dist_raw = zeros(5,sn,15,26); rfp_dist_por = zeros(5,sn,15,26); rfp_r = zeros(5,sn,15); gfp = zeros(5,sn,15); gfp_back = zeros(5,sn,15); gfp_dist = zeros(5,sn,15,26); gfp_dist_raw = zeros(5,sn,15,26); gfp_dist_por = zeros(5,sn,15,26); gfp_r = zeros(5,sn,15); sum_gfp_dist = zeros(5,sn,15,26); sum_rfp_dist = zeros(5,sn,15,26); info1 = zeros(5,sn,15,20); info2 = cell(5,sn,15,5); time = zeros(5,sn,15); size = zeros(5,sn,15); distribution1 = zeros(5,sn,15); bad= zeros(5,sn,15); for cn = 1:5 sample_name1 = X(1,4:12); sample_name2 = Y{2,2}; sn=1; for i = 1:ll if ~(all(X(i,4:12)== sample_name1) && isequal(Y{i+1,2},sample_name2) ) sn = sn+1; sample_name1 = X(i,4:12); sample_name2 = Y{i+1,2}; end bacteria = X(i,4); if bacteria == 1 || bacteria == 3 %only the bacteria labeled RFP are used tn = length(rfp(rfp(cn,sn,:)~=0))+1; elseif bacteria == 2 || bacteria == 4 || bacteria == 5 %only the bacteria labeled GFP are used tn = length(gfp(gfp(cn,sn,:)~=0))+1; elseif bacteria == 0 %blank control if strcmp(Y{i+1,2},'blank_gfp') tn = length(gfp(gfp(cn,sn,:)~=0))+1; else tn = length(rfp(rfp(cn,sn,:)~=0))+1; end else tn = length(rfp(rfp(cn,sn,:)~=0))+1; end info1(cn,sn,tn,1:13) = [X(i,1:12),sn]; info2{cn,sn,tn,2} = Y{i+1,2}; info2{cn,sn,tn,3} = Y{i+1,3}; time(cn,sn,tn) = X(i,13); size(cn,sn,tn) = X(i,6); bad(cn,sn,tn) = X(i,22); i2 = X(i,1); rfp_back(cn,sn,tn) = DATA.rfp_back(i2,cn); rfp(cn,sn,tn) = (DATA.rfp(i2,cn))./DATA.rfp_back(i2,cn); rfp_dist_raw(cn,sn,tn,:) = DATA.rfp_dist(i2,cn,:); gfp_back(cn,sn,tn) = DATA.gfp_back(i2,cn); gfp(cn,sn,tn) = (DATA.gfp(i2,cn))./DATA.gfp_back(i2,cn); gfp_dist_raw(cn,sn,tn,:) = DATA.gfp_dist(i2,cn,:); gfp_dist_raw(cn,sn,tn,24:26) = gfp_dist_raw(cn,sn,tn,23); rfp_dist_raw(cn,sn,tn,24:26) = rfp_dist_raw(cn,sn,tn,23); end for i = 1:sn tn = length(rfp(rfp(cn,i,:,1)~=0)); if tn==0 tn = length(gfp(gfp(cn,i,:,1)~=0)); end [~,index] = sort(time(cn,i,1:tn)); gfp_dist_raw(cn,i,1:tn,:) = gfp_dist_raw(cn,i,index,:); rfp_dist_raw(cn,i,1:tn,:) = rfp_dist_raw(cn,i,index,:); gfp_dist_raw(cn,i,1,:) = gfp_dist_raw(cn,i,2,:); rfp_dist_raw(cn,i,1,:) = rfp_dist_raw(cn,i,2,:); time(cn,i,1:tn) = time(cn,i,index); rfp(cn,i,1:tn) = rfp(cn,i,index); rfp1 = rfp(cn,i,1:tn); rfp1(rfp1<0) = 0.000001; rfp(cn,i,1:tn) = rfp1; rfp_back(cn,i,1:tn) = rfp_back(cn,i,index); gfp(cn,i,1:tn) = gfp(cn,i,index); gfp1 = gfp(cn,i,1:tn); gfp1(gfp1<0) = 0.000001; gfp(cn,i,1:tn) = gfp1; gfp_back(cn,i,1:tn) = gfp_back(cn,i,index); rfp_r(cn,i,1:tn) = rfp(cn,i,1:tn)./(rfp(cn,i,1)); gfp_r(cn,i,1:tn) = gfp(cn,i,1:tn)./(gfp(cn,i,1)); rfp_dist_t(1,:) = rfp_dist_raw(cn,i,1,:); gfp_dist_t(1,:) = gfp_dist_raw(cn,i,1,:); rfp_dist_back(:,:) = spcrv([[1 1:1:26 26];[rfp_dist_t(1,1) rfp_dist_t(1,1:26) rfp_dist_t(1,26)]]); gfp_dist_back(:,:) = spcrv([[1 1:1:26 26];[gfp_dist_t(1,1) gfp_dist_t(1,1:26) gfp_dist_t(1,26)]]); rfp_dist_back_meanratio(1,:) = (rfp_dist_back(2,[1 6:4:98 103]))./mean(rfp_dist_back(2,[1 6:4:98 103])); gfp_dist_back_meanratio(1,:) = (gfp_dist_back(2,[1 6:4:98 103]))./mean(gfp_dist_back(2,[1 6:4:98 103])); for j=1:tn rfp_dist_t(1,:) = rfp_dist_raw(cn,i,j,:); plot_dist_t(:,:) = spcrv([[1 1:1:26 26];[rfp_dist_t(1,1) rfp_dist_t(1,1:26) rfp_dist_t(1,26)]]); rfp_dist_t(1,:) = plot_dist_t(2,[1 6:4:98 103]); plot_dist(1,:) = (rfp_dist_t(1,:)./(rfp_dist_back_meanratio(1,:))-rfp_back(cn,i,j))./rfp_back(cn,i,j); if j == 1 plot_dist_0h = plot_dist; end rfp_dist(cn,i,j,:) = plot_dist(1,:)-min(plot_dist)+(max(plot_dist_0h)-min(plot_dist_0h)); end for j=1:tn gfp_dist_t(1,:) = gfp_dist_raw(cn,i,j,:); plot_dist_t(:,:) = spcrv([[1 1:1:26 26];[gfp_dist_t(1,1) gfp_dist_t(1,1:26) gfp_dist_t(1,26)]]); gfp_dist_t(1,:) = plot_dist_t(2,[1 6:4:98 103]); plot_dist(1,:) = (gfp_dist_t(1,:)./(gfp_dist_back_meanratio(1,:))-gfp_back(cn,i,j))./gfp_back(cn,i,j); if j == 1 plot_dist_0h = plot_dist; end gfp_dist(cn,i,j,:) = plot_dist(1,:)-min(plot_dist)+(max(plot_dist_0h)-min(plot_dist_0h)); end gfp_dist1 = gfp_dist(cn,i,1:tn,:); gfp_dist1(gfp_dist1<0) = 0.0000001; gfp_dist(cn,i,1:tn,:) = gfp_dist1; rfp_dist1 = rfp_dist(cn,i,1:tn,:); rfp_dist1(rfp_dist1<0) = 0.0000001; rfp_dist(cn,i,1:tn,:) = rfp_dist1; end for i = 1:sn tn = length(rfp(rfp(cn,i,:,1)~=0)); if tn==0 tn = length(gfp(gfp(cn,i,:,1)~=0)); end for j=1:tn sum_gfp_dist(cn,i,j,:) = gfp_dist(cn,i,j,:); sum_gfp_dist1 = sum_gfp_dist(cn,i,j,:); sum_gfp_dist1(sum_gfp_dist1<((max(gfp_dist(cn,i,j,:)))./3)) = 0; sum_gfp_dist1(sum_gfp_dist1>=((max(gfp_dist(cn,i,j,:))).*2./3)) = 1; sum_gfp_dist1(((max(gfp_dist(cn,i,j,:)))./3)<=sum_gfp_dist1) = 0.5; sum_gfp_dist(cn,i,j,:) = sum_gfp_dist1; end for j=1:tn sum_rfp_dist(cn,i,j,:) = rfp_dist(cn,i,j,:); sum_rfp_dist1 = sum_rfp_dist(cn,i,j,:); sum_rfp_dist1(sum_rfp_dist1<((max(rfp_dist(cn,i,j,:)))./3)) = 0; sum_rfp_dist1(sum_rfp_dist1>=((max(rfp_dist(cn,i,j,:))).*2./3)) = 1; sum_rfp_dist1(((max(rfp_dist(cn,i,j,:)))./3)<=sum_rfp_dist1) = 0.5; sum_rfp_dist(cn,i,j,:) = sum_rfp_dist1; end for j=1:tn if sum(sum_gfp_dist(cn,i,j,:))>0 gfp_dist_por(cn,i,j,:) = sum_gfp_dist(cn,i,j,:)./sum(sum_gfp_dist(cn,i,j,:)); else gfp_dist_por(cn,i,j,:) = 1/26; end if sum(sum_rfp_dist(cn,i,j,:))>0 rfp_dist_por(cn,i,j,:) = sum_rfp_dist(cn,i,j,:)./sum(sum_rfp_dist(cn,i,j,:)); else rfp_dist_por(cn,i,j,:) = 1/26; end end distribution = zeros(tn,1); for j=1:tn if sum(rfp_dist_por(cn,i,j,:)) > 0 && sum(gfp_dist_por(cn,i,j,:)) > 0 l = length(diagonal_y1_distribution{1}(1,:)); difference_y1 = zeros(1,num); difference_y2 = zeros(1,num); difference_y12 = zeros(1,num); gfp_dist_por1(1,1:l) = gfp_dist_por(cn,i,j,1:l); rfp_dist_por1(1,1:l) = rfp_dist_por(cn,i,j,1:l); for i5 = 1:num difference_y1(i5) = sum((diagonal_y1_distribution{1}(i5,1:l)-rfp_dist_por1(1,1:l)).^2); difference_y2(i5) = sum((diagonal_y2_distribution{1}(i5,1:l)-gfp_dist_por1(1,1:l)).^2); difference_y12(i5) = difference_y1(i5)+difference_y2(i5) ; end dist = find( difference_y12 == min(difference_y12)); distribution_all(j,1:length(dist)) = dist; distribution(j,1) = A{1}(distribution_all(j,1),1); end if distribution(j,1)==0 continue; end distribution1(cn,i,j) = distribution(j,1); end end export_data = zeros(sn*11,15); export_data_info1 = zeros(sn*11,13); export_data_info2 = cell(sn*11,2); export_data_info3 = cell(sn*11,1); for i = 0:(sn-1) export_data(i*11+1,:) = time(cn,i+1,1:15); export_data(i*11+2,:) = rfp(cn,i+1,1:15); export_data(i*11+3,:) = gfp(cn,i+1,1:15); export_data(i*11+4,:) = rfp_back(cn,i+1,1:15); export_data(i*11+5,:) = gfp_back(cn,i+1,1:15); export_data(i*11+6,:) = log2(rfp_r(cn,i+1,1:15)); export_data(i*11+7,:) = log2(gfp_r(cn,i+1,1:15)); export_data(i*11+8,:) = log2(rfp_r(cn,i+1,1:15)./gfp_r(cn,i+1,1:15)); export_data(i*11+9,:) = log2((gfp_r(cn,i+1,1:15)+rfp_r(cn,i+1,1:15))./2); export_data(i*11+10,:) = distribution1(cn,i+1,1:15); export_data(i*11+11,:) = bad(cn,i+1,1:15); export_data_info1(i*11+1:i*11+11,:) = repmat(info1(cn,i+1,1,1:13),11,1); export_data_info2(i*11+1:i*11+11,:) = repmat(info2(cn,i+1,1,2:3),11,1); export_data_info3(i*11+1,1) = {'time'}; export_data_info3(i*11+2,1) = {'rfp'}; export_data_info3(i*11+3,1) = {'gfp'}; export_data_info3(i*11+4,1) = {'rfp_back'}; export_data_info3(i*11+5,1) = {'gfp_back'}; export_data_info3(i*11+6,1) = {'log2(rfp_ratio)'}; export_data_info3(i*11+7,1) = {'log2(gfp_ratio)'}; export_data_info3(i*11+8,1) = {'log2(rfp_gfp_ratio)'}; export_data_info3(i*11+9,1) = {'log2((rfp_ratio+gfp_ratio)/2)'}; export_data_info3(i*11+10,1) = {'distribution'}; export_data_info3(i*11+11,1) = {'bad'}; end export_file_name = 'output.xlsx'; rtn = xlswrite(export_file_name,cellstr('num'),cn,'A1'); rtn = xlswrite(export_file_name,cellstr('condition'),cn,'B1'); rtn = xlswrite(export_file_name,cellstr('filename'),cn,'C1'); rtn = xlswrite(export_file_name,cellstr('bacterial strain'),cn,'D1'); rtn = xlswrite(export_file_name,cellstr('cs'),cn,'E1'); rtn = xlswrite(export_file_name,cellstr('size'),cn,'F1'); rtn = xlswrite(export_file_name,cellstr('OD'),cn,'G1'); rtn = xlswrite(export_file_name,cellstr('other'),cn,'H1'); rtn = xlswrite(export_file_name,cellstr('amplification'),cn,'1'); rtn = xlswrite(export_file_name,cellstr('date'),cn,'J1'); rtn = xlswrite(export_file_name,cellstr('ratio'),cn,'K1'); rtn = xlswrite(export_file_name,cellstr('sample number'),cn,'L1'); rtn = xlswrite(export_file_name,cellstr('data'),cn,'M1'); rtn = xlswrite(export_file_name,export_data_info1,cn,'A2'); rtn = xlswrite(export_file_name,cellstr(export_data_info2),cn,'B2'); rtn = xlswrite(export_file_name,cellstr(export_data_info3),cn,'N2'); rtn = xlswrite(export_file_name,export_data,cn,'O2'); end