MATLAB /matlab_tools/Converted/kkmegaclip.m

Language MATLAB Lines 355
MD5 Hash 0955eddaac4b7dc885c6f0a759a94aa7
Repository git://github.com/aludnam/MATLAB.git View Raw File View Project SPDX
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
%kkmegaclip 'Clip the Range of Values in Data Object'
% This MatLab function was automatically generated by a converter (KhorosToMatLab) from the Khoros kmegaclip.pane file
%
% Parameters: 
% InputFile: i 'Input ', required: 'Input file'
% OutputFile: o 'Output ', required: 'output file'
% InputFile: ilc 'Lower Cutoff Values File', optional: 'File containing lower cutoff values'
% InputFile: iuc 'Upper Cutoff Values File', optional: 'File containing upper cutoff values'
%
% Example: o = kkmegaclip({i, ilc, iuc}, {'i','';'o','';'ilc','';'iuc',''})
%
% Khoros helpfile follows below:
%
%  PROGRAM
% kmegaclip - Clip the Range of Values in Data Object
%
%  DESCRIPTION
% The "MegaClip" operator (kmegaclip) performs clipping on the Input 
% data object (i), limiting the range of values in the object.  Upper and 
% lower cutoff values can be specified as either single constant values 
% (lc, uc), or sets of values passed in as data objects (ilc, iuc).  It is 
% not necessary to specify both the Upper Cutoff and the Lower Cutoff. 
% 
% All data values in the Input object that are LESS THAN the Lower Cutoff 
% are set to the Lower Cutoff in the resulting Output object, unless the 
% alternate "Lower Cutoff Output Value" (fval) is explicitly provided.  If 
% this value is provided, clipped data are set to that value instead of the 
% Lower Cutoff.  Likewise, data values GREATER THAN the Upper Cutoff are set 
% to the Upper Cutoff, unless the alternate "Upper Cutoff Output Value" is 
% explicitly provided.  All other data remain the same.  
% "Exception":  Any time that both the upper and lower cutoff values are 
% provided, and the upper cutoff is LESS THAN the lower cutoff, then data 
% values between the two cutoffs are always set equal to the "Lower Cutoff 
% Output Value" (fval).
% 
% The following four diagrams illustrate how the data is clipped for different 
% combinations of upper and lower cutoffs.  The plots are example data 
% histograms.  Clipping output assignment rules are given following the diagrams.
% .KS
% 
%  "\fBLower Cutoff Only:"" 5
% 
% 
% \f(CW
%      lower cutoff result:       |<-F->|<----T---->|
%                                 |     | :     .   |
%                                 |    .:.:.  .:::  |
%                                 |:. .::::::.::::: |
%                                 |::::::::::::::::.|
%                                 ------|------------
%                                       lower cutoff (lc)
% 
%         if value <  lc  cutoff result = False
%         if value >= lc  cutoff result = True
% "
% 
% .KE
% .KS
% 
%  "\fBUpper Cutoff Only:"" 5
% 
% 
% \f(CW
%         upper cutoff result:    |<----T---->|<-F->|
%                                 |       :   | .   |
%                                 |    .:.:.  .:::  |
%                                 |:. .::::::.::::: |
%                                 |::::::::::::::::.|
%                                 ------------|------
%                                             upper cutoff (uc)
% 
%         if value >  uc  cutoff result = False
%         if value <= uc  cutoff result = True
% "
% 
% .KE
% .KS
% 
%  "\fBUpper Cutoff is Greater than Lower Cutoff:""  5
% When both upper and lower cutoff values are specified, and the upper cutoff
% is GREATER THAN the lower cutoff, the combined cutoff result is the logical 
% AND of the individual results.
% 
% 
% \f(CW
%         lower cutoff result:    |<-F->|<----T---->|
%         upper cutoff result:    |<----T---->|<-F->|
% 
%         combined cutoff result: |<-F->|<-T->|<-F->|
%                                 |     | :   | .   |
%                                 |    .:.:.  .:::  |
%                                 |:. .::::::.::::: |
%                                 |::::::::::::::::.|
%                                 ------|-----|------
%                                      lc     uc
% 
%         if value <  lc OR  value >  uc  cutoff result = False
%         if value >= lc AND value <= uc  cutoff result = True
% "
% 
% .KE
% .KS
% 
%  "\fBUpper Cutoff is Less than Lower Cutoff:""  5
% When both upper and lower cutoff values are specified, but the upper cutoff
% is LESS THAN the lower cutoff, the combined cutoff result is the logical 
% OR of the individual results.  (Specifying the lower cutoff to be greater
% than the upper cutoff inverts the operation.)
% In this case, the false value assigned to the output will always be fval.
% 
% 
% \f(CW
%         upper cutoff result:    |<-T->|<----F---->|
%         lower cutoff result:    |<----F---->|<-T->|
% 
%         combined cutoff result: |<-T->|<-F->|<-T->|
%                                 |     | :   | .   |
%                                 |    .:.:.  .:::  |
%                                 |:. .::::::.::::: |
%                                 |::::::::::::::::.|
%                                 ------|-----|------
%                                      uc     lc
% 
%         if value <  lc AND value >  uc  cutoff result = False
%         if value >= lc OR  value <= uc  cutoff result = True
% "
% 
% .KE
% 
% Clipping results are assigned according to the following rules.  ("Lower
% result" and "upper result" are either the clipping values or fval and 
% tval - see discussion above.)
% 
%  "1.  When lower cutoff < upper cutoff" 5
% If the data value is less than the lower cutoff, set the
% output value to "lower result".
% If the data value is greater than the upper cutoff, set
% the output value to "upper result".
% Otherwise, the data value remains the same.
% 
%  "2.  When upper cutoff < lower cutoff" 5
% If the data value is less than the upper cutoff and
% it is greater than the lower cutoff, set output
% value to the "lower result".
% Otherwise, the data value remains the same.
% 
% When upper and lower cutoff values are equal, the only data values that
% are evaluated as TRUE are those that are equal to the cutoff values.
% 
%  "Data Type" 5
% .cI $DATAMANIP/repos/shared/man/sections/value_type_1input
% 
%  "Data Objects of Different Sizes" 5
% If, in addition to the input data object (i), upper or lower cutoff
% objects (ilc, iuc) are supplied,
% the source objects can be of different sizes.  If the sizes are different,
% the size of the destination object's data will be the the same as that of
% the input data object.  When resizing the cutoff objects, the data is
% zero padded, or truncated to the size of the input object.
% Alignment between the input files will always be the upper-left hand corner,
% position (0,0,0,0,0).
% 
%  "Map Data - Single Input" 5
% .cI $DATAMANIP/repos/shared/man/sections/map_1input
% 
%  "Map Data - Multiple Input Objects" 5
% .cI $DATAMANIP/repos/shared/man/sections/map_2input
% 
%  "Validity Mask - Single Input" 5
% .cI $DATAMANIP/repos/shared/man/sections/mask_1input
% 
%  "Validity Mask - Multiple Input Objects" 5
% .cI $DATAMANIP/repos/shared/man/sections/mask_2input
% 
%  "Explicit Location and Time Data - Single Input" 5
% .cI $DATAMANIP/repos/shared/man/sections/loc_and_time_1input
% 
%  "Explicit Location and Time Data - Two Input Objects" 5
% .cI $DATAMANIP/repos/shared/man/sections/loc_and_time_2input
% 
%  "Failure Modes - Single Input"
% .cI $DATAMANIP/repos/shared/man/sections/fail_1input
% 
%  "Failure Modes - Two Input Objects"
% .cI $DATAMANIP/repos/shared/man/sections/fail_2input
% 
% Executing "MegaClip" runs the program \fIkclip\fP with the -thresh 
% option set to FALSE (-thresh 0).
%
%  
%
%  EXAMPLES
%
%  "SEE ALSO"
% DATAMANIP::kclipabove, DATAMANIP::kclipbelow, DATAMANIP::kclipin, 
% DATAMANIP::kclipout, DATAMANIP::kclip
%
%  RESTRICTIONS 
%
%  REFERENCES 
%
%  COPYRIGHT
% Copyright (C) 1993 - 1997, Khoral Research, Inc. ("KRI")  All rights reserved.
% 


function varargout = kkmegaclip(varargin)
if nargin ==0
  Inputs={};arglist={'',''};
elseif nargin ==1
  Inputs=varargin{1};arglist={'',''};
elseif nargin ==2
  Inputs=varargin{1}; arglist=varargin{2};
else error('Usage: [out1,..] = kkmegaclip(Inputs,arglist).');
end
if size(arglist,2)~=2
  error('arglist must be of form {''ParameterTag1'',value1;''ParameterTag2'',value2}')
 end
narglist={'i', '__input';'o', '__output';'ilc', '__input';'iuc', '__input'};
maxval={0,0,1,1};
minval={0,0,1,1};
istoggle=[0,0,1,1];
was_set=istoggle * 0;
paramtype={'InputFile','OutputFile','InputFile','InputFile'};
% identify the input arrays and assign them to the arguments as stated by the user
if ~iscell(Inputs)
Inputs = {Inputs};
end
NumReqOutputs=1; nextinput=1; nextoutput=1;
  for ii=1:size(arglist,1)
  wasmatched=0;
  for jj=1:size(narglist,1)
   if strcmp(arglist{ii,1},narglist{jj,1})  % a given argument was matched to the possible arguments
     wasmatched = 1;
     was_set(jj) = 1;
     if strcmp(narglist{jj,2}, '__input')
      if (nextinput > length(Inputs)) 
        error(['Input ' narglist{jj,1} ' has no corresponding input!']); 
      end
      narglist{jj,2} = 'OK_in';
      nextinput = nextinput + 1;
     elseif strcmp(narglist{jj,2}, '__output')
      if (nextoutput > nargout) 
        error(['Output nr. ' narglist{jj,1} ' is not present in the assignment list of outputs !']); 
      end
      if (isempty(arglist{ii,2}))
        narglist{jj,2} = 'OK_out';
      else
        narglist{jj,2} = arglist{ii,2};
      end

      nextoutput = nextoutput + 1;
      if (minval{jj} == 0)  
         NumReqOutputs = NumReqOutputs - 1;
      end
     elseif isstr(arglist{ii,2})
      narglist{jj,2} = arglist{ii,2};
     else
        if strcmp(paramtype{jj}, 'Integer') & (round(arglist{ii,2}) ~= arglist{ii,2})
            error(['Argument ' arglist{ii,1} ' is of integer type but non-integer number ' arglist{ii,2} ' was supplied']);
        end
        if (minval{jj} ~= 0 | maxval{jj} ~= 0)
          if (minval{jj} == 1 & maxval{jj} == 1 & arglist{ii,2} < 0)
            error(['Argument ' arglist{ii,1} ' must be bigger or equal to zero!']);
          elseif (minval{jj} == -1 & maxval{jj} == -1 & arglist{ii,2} > 0)
            error(['Argument ' arglist{ii,1} ' must be smaller or equal to zero!']);
          elseif (minval{jj} == 2 & maxval{jj} == 2 & arglist{ii,2} <= 0)
            error(['Argument ' arglist{ii,1} ' must be bigger than zero!']);
          elseif (minval{jj} == -2 & maxval{jj} == -2 & arglist{ii,2} >= 0)
            error(['Argument ' arglist{ii,1} ' must be smaller than zero!']);
          elseif (minval{jj} ~= maxval{jj} & arglist{ii,2} < minval{jj})
            error(['Argument ' arglist{ii,1} ' must be bigger than ' num2str(minval{jj})]);
          elseif (minval{jj} ~= maxval{jj} & arglist{ii,2} > maxval{jj})
            error(['Argument ' arglist{ii,1} ' must be smaller than ' num2str(maxval{jj})]);
          end
        end
     end
     if ~strcmp(narglist{jj,2},'OK_out') &  ~strcmp(narglist{jj,2},'OK_in') 
       narglist{jj,2} = arglist{ii,2};
     end
   end
   end
   if (wasmatched == 0 & ~strcmp(arglist{ii,1},''))
        error(['Argument ' arglist{ii,1} ' is not a valid argument for this function']);
   end
end
% match the remaining inputs/outputs to the unused arguments and test for missing required inputs
 for jj=1:size(narglist,1)
     if  strcmp(paramtype{jj}, 'Toggle')
        if (narglist{jj,2} ==0)
          narglist{jj,1} = ''; 
        end;
        narglist{jj,2} = ''; 
     end;
     if  ~strcmp(narglist{jj,2},'__input') && ~strcmp(narglist{jj,2},'__output') && istoggle(jj) && ~ was_set(jj)
          narglist{jj,1} = ''; 
          narglist{jj,2} = ''; 
     end;
     if strcmp(narglist{jj,2}, '__input')
      if (minval{jj} == 0)  % meaning this input is required
        if (nextinput > size(Inputs)) 
           error(['Required input ' narglist{jj,1} ' has no corresponding input in the list!']); 
        else
          narglist{jj,2} = 'OK_in';
          nextinput = nextinput + 1;
        end
      else  % this is an optional input
        if (nextinput <= length(Inputs)) 
          narglist{jj,2} = 'OK_in';
          nextinput = nextinput + 1;
        else 
          narglist{jj,1} = '';
          narglist{jj,2} = '';
        end;
      end;
     else 
     if strcmp(narglist{jj,2}, '__output')
      if (minval{jj} == 0) % this is a required output
        if (nextoutput > nargout & nargout > 1) 
           error(['Required output ' narglist{jj,1} ' is not stated in the assignment list!']); 
        else
          narglist{jj,2} = 'OK_out';
          nextoutput = nextoutput + 1;
          NumReqOutputs = NumReqOutputs-1;
        end
      else % this is an optional output
        if (nargout - nextoutput >= NumReqOutputs) 
          narglist{jj,2} = 'OK_out';
          nextoutput = nextoutput + 1;
        else 
          narglist{jj,1} = '';
          narglist{jj,2} = '';
        end;
      end
     end
  end
end
if nargout
   varargout = cell(1,nargout);
else
  varargout = cell(1,1);
end
global KhorosRoot
if exist('KhorosRoot') && ~isempty(KhorosRoot)
w=['"' KhorosRoot];
else
if ispc
  w='"C:\Program Files\dip\khorosBin\';
else
[s,w] = system('which cantata');
w=['"' w(1:end-8)];
end
end
[varargout{:}]=callKhoros([w 'kclip"  -thresh'],Inputs,narglist);
Back to Top