From 9843c760825349fb20cb0fcd3a67bd698aca46ca Mon Sep 17 00:00:00 2001 From: Rong Li Lab Date: Fri, 26 May 2017 19:46:20 -0400 Subject: [PATCH] done flexible parameters --- Db/Mouse.parameters.xml | 36 +++++++++++ blastAbundantRNA.m | 41 ++++++------- blastOtherSteps.m | 37 ++++++------ generateProbeList.m | 43 ++++++------- main.m | 6 +- oligosParse.m | 2 +- readParameters.m | 60 +++++++++++++++++++ .../blastOneTranscript.m | 59 +++++++++--------- utilities/findSeqDelete.m | 12 ++-- utilities/getDbSize.m | 3 +- utilities/randomizeProbeList.m | 4 +- 11 files changed, 200 insertions(+), 103 deletions(-) rename blastOneTranscript.m => utilities/blastOneTranscript.m (53%) diff --git a/Db/Mouse.parameters.xml b/Db/Mouse.parameters.xml index 5d78b8f..20965c4 100644 --- a/Db/Mouse.parameters.xml +++ b/Db/Mouse.parameters.xml @@ -117,4 +117,40 @@ CCGCAACATCCAGCATCGTG + + + + ENS\w*T\d* + 22 + 50 + -S 2 + -S 3 + CCGCAACATCCAGCATCGTG + CCCTATAGTGAGTCGTATTA + AGAGTGAGTAGTAGTGGAGT + GATGATGTAGTAGTAAGGGT + TGTGATGGAAGTTAGAGGGT + GGAGTAGTTGGTTGTTAGGA + + + + + + ENS\w*T\d* + 1000 + 30 + 73 + 200000 + -S 2 + 0 + + + + + + ENS\w*T\d* + 48 + C:\FISHerMan\Db\Mouse.STList.fas + + diff --git a/blastAbundantRNA.m b/blastAbundantRNA.m index ffdb1c7..245890c 100644 --- a/blastAbundantRNA.m +++ b/blastAbundantRNA.m @@ -3,15 +3,15 @@ % homology of 15 nt or more. function [Header,Sequence,nonSequence,nonSequence2]... - =blastAbundantRNA(adapterList,Header,Sequence,nonSequence,nonSequence2,varargin) + =blastAbundantRNA(adapterList,Header,Sequence,nonSequence,nonSequence2,params) -if length(varargin) >= 1 - params = varargin{1}; -else - params = struct('species','Mouse','verbose',1,... - 'thres',30,'querySize',73,'DbSize',2*10^5,'seqNum',1000,... - 'blastArgs','-S 2','parallel', 0); -end +% if length(varargin) >= 1 +% params = varargin{1}; +% else +% params = struct('species','Mouse','verbose',1,... +% 'seqNum',1000,'thres',30,'querySize',73,'DbSize',200000,... +% 'blastArgs','-S 2','parallel', 0); +% end if isempty(nonSequence) nonSequence = Sequence; @@ -21,28 +21,29 @@ nonSequence2 = Sequence; end -if params.verbose +if params(1).verbose disp('removing non-specific probes against the abundant rna database'); end %% Split one giant fasta file into smaller ones, so that parallel computing is possible -if params.verbose +if params(1).verbose disp(' spliting fasta files for parallel computing'); end -filePathList = blastFileSplit(Header, Sequence, params.seqNum); +filePathList = blastFileSplit(Header, Sequence, params(1).seqNum, params); fileNum = length(filePathList); %% Blast mouse oligos against abundant rna -eValue = bitScore2eValue(params.thres, params.querySize, params.DbSize); +DbPath = [params(1).species '.abundantrnaDb.fas']; +params(1).DbSize = getDbSize(DbPath); -DbPath = [params.species '.abundantrnaDb.fas']; -blastArgs = [params.blastArgs ' -e ' num2str(eValue)]; +eValue = bitScore2eValue(params(1).thres, params(1).querySize, params(1).DbSize); +blastArgs = [params(1).blastArgs ' -e ' num2str(eValue)]; blastData = {}; -if params.parallel +if params(1).parallel poolobj = parpool; - verbose = params.verbose; + verbose = params(1).verbose; parfor k = 1:fileNum if verbose disp([' blasting temporary file no. ' num2str(k)]); @@ -57,12 +58,12 @@ delete(poolobj); else for k = 1:fileNum - if params.verbose + if params(1).verbose disp([' blasting temporary file no. ' num2str(k)]); startTime = tic; end blastData{k,1} = blastOp(filePathList{k}, DbPath, blastArgs); - if params.verbose + if params(1).verbose totalTime = toc(startTime); disp([' elapsed time is ' num2str(totalTime) ' seconds']); end @@ -95,8 +96,8 @@ nonSequence2(seqDelete)= []; %% Check how many transcripts are left after this step of screening -[geneNumLeft,geneNumDelete]=checkTranscriptsLeft(adapterList,Header); -if params.verbose +[geneNumLeft,geneNumDelete]=checkTranscriptsLeft(adapterList,Header,params); +if params(1).verbose disp([num2str(geneNumDelete) ' out of ' num2str(geneNumLeft+geneNumDelete)... ' FISH escaped FISHerMan''s net']); end diff --git a/blastOtherSteps.m b/blastOtherSteps.m index 1c47b7c..259bcf3 100644 --- a/blastOtherSteps.m +++ b/blastOtherSteps.m @@ -1,17 +1,18 @@ function [probeHeader,probeSequence,probeSequence3Seg,probeSequenceCore]... - =blastOtherSteps(adapterList,probeHeader,probeSequence,probeSequence3Seg,probeSequenceCore,varargin) - -if length(varargin) >= 1 - params = varargin{1}; -else - params = struct('species','Mouse','verbose',1,'keys','ENS\w*T\d*',... - 'thres',22,'querySize',50,'blastArgs','',... - 'grr','CCGCAACATCCAGCATCGTG','T7r','CCCTATAGTGAGTCGTATTA',... - 'rRr','AGAGTGAGTAGTAGTGGAGT','rGr','GATGATGTAGTAGTAAGGGT',... - 'rBr','TGTGATGGAAGTTAGAGGGT','rIRr','GGAGTAGTTGGTTGTTAGGA'); -end - -if params.verbose + =blastOtherSteps(adapterList,probeHeader,probeSequence,probeSequence3Seg,probeSequenceCore,params) + +% if length(varargin) >= 1 +% params = varargin{1}; +% else +% params = struct('species','Mouse','verbose',1,'keys','ENS\w*T\d*',... +% 'thres',22,'querySize',50,... +% 'blastArgs1','-S 2','blastArgs2','-S 3',... +% 'grr','CCGCAACATCCAGCATCGTG','T7r','CCCTATAGTGAGTCGTATTA',... +% 'rRr','AGAGTGAGTAGTAGTGGAGT','rGr','GATGATGTAGTAGTAAGGGT',... +% 'rBr','TGTGATGGAAGTTAGAGGGT','rIRr','GGAGTAGTTGGTTGTTAGGA'); +% end + +if params(1).verbose disp('removing probes that non-specifically bind to 2nd PCR primers and other probes'); end @@ -21,17 +22,17 @@ simpleHeader = probeHeader; for n = 1:length(probeHeader) - pos = regexp(probeHeader{n,1}, params.keys, 'end'); + pos = regexp(probeHeader{n,1}, params(1).keys, 'end'); simpleHeader{n,1} = probeHeader{n,1}(1:pos); end seqDelete = []; for n = 1:length(adapterHeader) - if params.verbose% && mod(n, 1000) == 1 + if params(1).verbose% && mod(n, 1000) == 1 disp([' working on trancript ' adapterHeader{n,1}]); end temp... - =blastOneTranscript(adapterHeader{n,1},adapterSequence{n,1},simpleHeader,probeSequenceCore); + =blastOneTranscript(adapterHeader{n,1},adapterSequence{n,1},simpleHeader,probeSequenceCore,params); seqDelete = [seqDelete temp]; end @@ -41,8 +42,8 @@ probeSequenceCore(seqDelete)= []; %% Check how many transcripts are left after this step of screening -[geneNumLeft,geneNumDelete]=checkTranscriptsLeft(adapterList,probeHeader); -if params.verbose +[geneNumLeft,geneNumDelete]=checkTranscriptsLeft(adapterList,probeHeader,params); +if params(1).verbose disp([num2str(geneNumDelete) ' out of ' num2str(geneNumLeft+geneNumDelete)... ' FISH escaped FISHerMan''s net']); end diff --git a/generateProbeList.m b/generateProbeList.m index b69e5ee..ad4b569 100644 --- a/generateProbeList.m +++ b/generateProbeList.m @@ -1,19 +1,19 @@ -function probeList=generateProbeList(adapterList,probeHeader,probeSequence,varargin) +function probeList=generateProbeList(adapterList,probeHeader,probeSequence,params) -if length(varargin) >= 1 - params = varargin{1}; -else - params = struct('species','Mouse','verbose',1,'number',48,... - 'keys','ENS\w*T\d*'); -end +% if length(varargin) >= 1 +% params = varargin{1}; +% else +% params = struct('species','Mouse','verbose',1,'keys','ENS\w*T\d*',... +% 'number',48,'specialTranscripts','C:\FISHerMan\Db\Mouse.STList.fas'); +% end %% Remove transcripts without enough probes -if params.verbose +if params(1).verbose disp('generating the list of probes to order'); disp(' removing transcripts without enough probes'); end -pos = regexp(probeHeader, params.keys, 'end'); +pos = regexp(probeHeader, params(1).keys, 'end'); trimHeader = {}; for n = 1:length(probeHeader) trimHeader{end+1} = probeHeader{n,1}(1:pos{n,1}); @@ -24,11 +24,12 @@ indexTotal = zeros(length(trimHeader),1); for n = 1:length(uniqueHeader) index = ismember(trimHeader, uniqueHeader{n,1}); - if sum(index) < params.number && checkSpecialTranscripts(uniqueHeader{n,1}) % for Bin's special sequences + if sum(index) < params(1).number &&... + checkSpecialTranscripts(uniqueHeader{n,1},params) % for Bin's special sequences indexTotal = indexTotal+index; - if params.verbose + if params(1).verbose disp([' transcript ' uniqueHeader{n,1} ... - ' has less than ' num2str(params.number) ' probes']); + ' has less than ' num2str(params(1).number) ' probes']); end end end @@ -43,9 +44,9 @@ indexTotal = []; for n = 1:length(uniqueHeader) index = ismember(trimHeader, uniqueHeader{n,1}); - if sum(index) > params.number + if sum(index) > params(1).number index=find(index>0); - index=index(params.number+1:end); + index=index(params(1).number+1:end); indexTotal=[indexTotal;index]; end end @@ -53,19 +54,19 @@ probeHeader(indexTotal) = []; probeSequence(indexTotal) = []; -disp(' randomizing and saving the list of probes'); -indexTotal = randperm(length(probeHeader))'; -probeHeader = probeHeader(indexTotal); -probeSequence = probeSequence(indexTotal); -probeList = [params.species '.probes.fas']; +% disp(' randomizing and saving the list of probes'); +% indexTotal = randperm(length(probeHeader))'; +% probeHeader = probeHeader(indexTotal); +% probeSequence = probeSequence(indexTotal); +probeList = [params(1).species '.probes.nr.fas']; if exist(probeList, 'file') delete(probeList); end fastawrite(probeList,probeHeader,probeSequence); %% Check how many transcripts are left after this step of screening -[geneNumLeft,geneNumDelete]=checkTranscriptsLeft(adapterList,probeHeader); -if params.verbose +[geneNumLeft,geneNumDelete]=checkTranscriptsLeft(adapterList,probeHeader,params); +if params(1).verbose disp([num2str(geneNumDelete) ' out of ' num2str(geneNumLeft+geneNumDelete)... ' FISH escaped FISHerMan''s net']); end diff --git a/main.m b/main.m index 3f714aa..446efd5 100644 --- a/main.m +++ b/main.m @@ -65,14 +65,14 @@ %% Save the probes of each transcripts into individual files [probeHeader,probeSequence,probeSequence3Seg,probeSequenceCore]... - =blastOtherSteps(adapterList,probeHeader,probeSequence,probeSequence3Seg,probeSequenceCore); + =blastOtherSteps(adapterList,probeHeader,probeSequence,probeSequence3Seg,probeSequenceCore,params.otherSteps); %% Remove non-specific probes against the abundant rna database [probeHeader,probeSequence3Seg,probeSequence,probeSequenceCore]... - =blastAbundantRNA(adapterList,probeHeader,probeSequence3Seg,probeSequence,probeSequenceCore); + =blastAbundantRNA(adapterList,probeHeader,probeSequence3Seg,probeSequence,probeSequenceCore,params.arna); %% Generate the list of probes -probeList=generateProbeList(adapterList,probeHeader,probeSequence); +probeList=generateProbeList(adapterList,probeHeader,probeSequence,params.probeList); disp('done designing FISH probes'); disp('FISHerMan is at rest'); diff --git a/oligosParse.m b/oligosParse.m index 7022a46..81a8867 100644 --- a/oligosParse.m +++ b/oligosParse.m @@ -114,7 +114,7 @@ indexTotal = zeros(length(trimNames),1); for n = 1:length(uniqueNames) index = ismember(trimNames, uniqueNames{n,1}); - if sum(index) < params(1).number &&... + if sum(index) < params(1).number &&... checkSpecialTranscripts(uniqueNames{n,1},params) % for Bin's special sequences indexTotal = indexTotal+index; if params(1).verbose diff --git a/readParameters.m b/readParameters.m index 994b5d4..109450f 100644 --- a/readParameters.m +++ b/readParameters.m @@ -23,6 +23,9 @@ oligos=xmlParse(parameters, 'parameters', 'oligos'); adapters=xmlParse(parameters, 'parameters', 'adapters'); onePCR=xmlParse(parameters, 'parameters', 'onePCR'); +otherSteps=xmlParse(parameters, 'parameters', 'otherSteps'); +arna=xmlParse(parameters, 'parameters', 'arna'); +probeList=xmlParse(parameters, 'parameters', 'probeList'); %% Parse general parameters verbose=xmlParse(general, 'general', 'verbose'); @@ -180,3 +183,60 @@ 'gf',char(gf.getFirstChild.getData),... 'grr',char(grr.getFirstChild.getData)); +%% Parse parameters for otherSteps +key1=xmlParse(otherSteps, 'otherSteps', 'key1'); +thres=xmlParse(otherSteps, 'otherSteps', 'thres'); +querySize=xmlParse(otherSteps, 'otherSteps', 'querySize'); +blastArgs1=xmlParse(otherSteps, 'otherSteps', 'blastArgs1'); +blastArgs2=xmlParse(otherSteps, 'otherSteps', 'blastArgs2'); +grr=xmlParse(otherSteps, 'otherSteps', 'grr'); +T7r=xmlParse(otherSteps, 'otherSteps', 'T7r'); +rRr=xmlParse(otherSteps, 'otherSteps', 'rRr'); +rGr=xmlParse(otherSteps, 'otherSteps', 'rGr'); +rBr=xmlParse(otherSteps, 'otherSteps', 'rBr'); +rIRr=xmlParse(otherSteps, 'otherSteps', 'rIRr'); + +params.otherSteps = struct('species',species,... + 'verbose',str2double(verbose.getFirstChild.getData),... + 'keys',char(key1.getFirstChild.getData),... + 'thres',str2double(thres.getFirstChild.getData),... + 'querySize',str2double(querySize.getFirstChild.getData),... + 'blastArgs1',char(blastArgs1.getFirstChild.getData),... + 'blastArgs2',char(blastArgs2.getFirstChild.getData),... + 'grr',char(grr.getFirstChild.getData),... + 'T7r',char(T7r.getFirstChild.getData),... + 'rRr',char(rRr.getFirstChild.getData),... + 'rGr',char(rGr.getFirstChild.getData),... + 'rBr',char(rBr.getFirstChild.getData),... + 'rIRr',char(rIRr.getFirstChild.getData)); + +%% Parse parameters for arna +key1=xmlParse(arna, 'arna', 'key1'); +seqNum=xmlParse(arna, 'arna', 'seqNum'); +thres=xmlParse(arna, 'arna', 'thres'); +querySize=xmlParse(arna, 'arna', 'querySize'); +DbSize=xmlParse(arna, 'arna', 'DbSize'); +blastArgs=xmlParse(arna, 'arna', 'blastArgs'); +parallel=xmlParse(arna, 'arna', 'parallel'); + +params.arna = struct('species',species,... + 'verbose',str2double(verbose.getFirstChild.getData),... + 'keys',char(key1.getFirstChild.getData),... + 'seqNum',str2double(seqNum.getFirstChild.getData),... + 'thres',str2double(thres.getFirstChild.getData),... + 'querySize',str2double(querySize.getFirstChild.getData),... + 'DbSize',str2double(DbSize.getFirstChild.getData),... + 'blastArgs',char(blastArgs.getFirstChild.getData),... + 'parallel',str2double(parallel.getFirstChild.getData)); + +%% Parse parameters for probeList +key1=xmlParse(probeList, 'probeList', 'key1'); +num=xmlParse(probeList, 'probeList', 'number'); +dir1=xmlParse(probeList, 'probeList', 'dir1'); + +params.probeList = struct('species',species,... + 'verbose',str2double(verbose.getFirstChild.getData),... + 'keys',char(key1.getFirstChild.getData),... + 'number',str2double(num.getFirstChild.getData),... + 'specialTranscripts',char(dir1.getFirstChild.getData)); + diff --git a/blastOneTranscript.m b/utilities/blastOneTranscript.m similarity index 53% rename from blastOneTranscript.m rename to utilities/blastOneTranscript.m index 982f9eb..2322eca 100644 --- a/blastOneTranscript.m +++ b/utilities/blastOneTranscript.m @@ -1,15 +1,16 @@ function seqDelete... - =blastOneTranscript(OTAdapterHeader,OTAdapterSequence,probeHeader,probeSequenceCore,varargin) - -if length(varargin) >= 1 - params = varargin{1}; -else - params = struct('species','Mouse','verbose',1,... - 'thres',22,'querySize',50,'blastArgs','',... - 'grr','CCGCAACATCCAGCATCGTG','T7r','CCCTATAGTGAGTCGTATTA',... - 'rRr','AGAGTGAGTAGTAGTGGAGT','rGr','GATGATGTAGTAGTAAGGGT',... - 'rBr','TGTGATGGAAGTTAGAGGGT','rIRr','GGAGTAGTTGGTTGTTAGGA'); -end + =blastOneTranscript(OTAdapterHeader,OTAdapterSequence,probeHeader,probeSequenceCore,params) + +% if length(varargin) >= 1 +% params = varargin{1}; +% else +% params = struct('species','Mouse','verbose',1,... +% 'thres',22,'querySize',50,... +% 'blastArgs1','-S 2','blastArgs2','-S 3',... +% 'grr','CCGCAACATCCAGCATCGTG','T7r','CCCTATAGTGAGTCGTATTA',... +% 'rRr','AGAGTGAGTAGTAGTGGAGT','rGr','GATGATGTAGTAGTAAGGGT',... +% 'rBr','TGTGATGGAAGTTAGAGGGT','rIRr','GGAGTAGTTGGTTGTTAGGA'); +% end index = ismember(probeHeader, OTAdapterHeader); temp = 1:length(probeHeader); @@ -18,8 +19,8 @@ OTSequenceCore = probeSequenceCore(index); %% Generate database files for Blast -OTDb1 = [params.species '.' OTAdapterHeader '.Db1.fas']; -OTDb2 = [params.species '.' OTAdapterHeader '.Db2.fas']; +OTDb1 = [params(1).species '.' OTAdapterHeader '.Db1.fas']; +OTDb2 = [params(1).species '.' OTAdapterHeader '.Db2.fas']; % MatLab's use of blastlocal requires short entry names for n = 1:length(OTHeader) @@ -27,15 +28,15 @@ end Header{1,1} = 'ENSPRIMERT10'; -Sequence{1,1} = strcat(params.rRr,OTAdapterSequence); +Sequence{1,1} = strcat(params(1).rRr,OTAdapterSequence); Header{2,1} = 'ENSPRIMERT11'; -Sequence{2,1} = strcat(params.rGr,OTAdapterSequence); +Sequence{2,1} = strcat(params(1).rGr,OTAdapterSequence); Header{3,1} = 'ENSPRIMERT12'; -Sequence{3,1} = strcat(params.rBr,OTAdapterSequence); +Sequence{3,1} = strcat(params(1).rBr,OTAdapterSequence); Header{4,1} = 'ENSPRIMERT13'; -Sequence{4,1} = strcat(params.rIRr,OTAdapterSequence); +Sequence{4,1} = strcat(params(1).rIRr,OTAdapterSequence); Header{5,1} = 'ENSPRIMERT14'; -Sequence{5,1} = strcat(params.grr,params.T7r); +Sequence{5,1} = strcat(params(1).grr,params(1).T7r); if exist(OTDb1, 'file') delete([OTDb1 '*']); @@ -51,29 +52,27 @@ blastformat('Inputdb', OTDb2,... 'FormatArgs', '-o T -p F'); -params.DbSize1 = getDbSize(OTDb1); -params.DbSize2 = getDbSize(OTDb2); - %% Generate a temporary probe list file for blast -filePathList = blastFileSplit(OTHeader, OTSequenceCore, length(OTHeader)); +filePathList = blastFileSplit(OTHeader, OTSequenceCore, length(OTHeader), params); %% Blast probes against 2nd PCR primers and other probes -eValue1 = bitScore2eValue(params.thres, params.querySize, params.DbSize1); -eValue2 = bitScore2eValue(params.thres, params.querySize, params.DbSize2); - DbPath1 = OTDb1; -blastArgs1 = [params.blastArgs ' -e ' num2str(eValue1) ' -b ' num2str(length(OTHeader)) ' -S 2']; - DbPath2 = OTDb2; -blastArgs2 = [params.blastArgs ' -e ' num2str(eValue2) ' -b ' num2str(length(OTHeader))]; +params(1).DbSize1 = getDbSize(DbPath1); +params(1).DbSize2 = getDbSize(DbPath2); + +eValue1 = bitScore2eValue(params(1).thres, params(1).querySize, params(1).DbSize1); +eValue2 = bitScore2eValue(params(1).thres, params(1).querySize, params(1).DbSize2); +blastArgs1 = [params(1).blastArgs1 ' -e ' num2str(eValue1) ' -b ' num2str(length(OTHeader))]; +blastArgs2 = [params(1).blastArgs2 ' -e ' num2str(eValue2) ' -b ' num2str(length(OTHeader))]; -if params.verbose +if params(1).verbose disp(' blasting the temporary probe list file'); startTime = tic; end blastData{1,1} = blastOp(filePathList{1}, DbPath1, blastArgs1); blastData{2,1} = blastOp(filePathList{1}, DbPath2, blastArgs2); -if params.verbose +if params(1).verbose totalTime = toc(startTime); disp([' elapsed time is ' num2str(totalTime) ' seconds']); end diff --git a/utilities/findSeqDelete.m b/utilities/findSeqDelete.m index 9362d03..f4699be 100644 --- a/utilities/findSeqDelete.m +++ b/utilities/findSeqDelete.m @@ -1,10 +1,10 @@ -function seqDelete=findSeqDelete(data,varargin) +function seqDelete=findSeqDelete(data) -if length(varargin) >= 1 - params = varargin{1}; -else - params = struct('species','Mouse','verbose',1); -end +% if length(varargin) >= 1 +% params = varargin{1}; +% else +% params = struct('species','Mouse','verbose',1); +% end %% Delete probes that non-specifically bind 2nd PCR primers seqDelete = []; diff --git a/utilities/getDbSize.m b/utilities/getDbSize.m index c8e4cf3..3292098 100644 --- a/utilities/getDbSize.m +++ b/utilities/getDbSize.m @@ -5,8 +5,7 @@ if length(varargin) >= 1 params = varargin{1}; else - params = struct('species','Mouse','verbose',1,... - 'thres',40,'querySize',20,'DbSize',10^8,'blastArgs','-S 1'); + params = struct('thres',40,'querySize',20,'DbSize',10^8,'blastArgs','-S 1'); end eValue = bitScore2eValue(params.thres, params.querySize, params.DbSize); diff --git a/utilities/randomizeProbeList.m b/utilities/randomizeProbeList.m index 08757cc..82ad443 100644 --- a/utilities/randomizeProbeList.m +++ b/utilities/randomizeProbeList.m @@ -1,11 +1,11 @@ -[probeHeader,probeSequence]=fastaread('C:\FISHerMan\Mouse\Mouse.probestemp.fas'); +probeList = 'C:\FISHerMan\Mouse\Mouse.probes.selected.fas'; +[probeHeader,probeSequence]=fastaread(probeList); probeHeader=probeHeader'; probeSequence=probeSequence'; indexTotal = randperm(length(probeHeader))'; probeHeaderRandom = probeHeader(indexTotal); probeSequenceRandom = probeSequence(indexTotal); -probeList = 'C:\FISHerMan\Mouse\Mouse.probes.selected.fas'; if exist(probeList, 'file') delete(probeList); end