@@ -165,7 +165,8 @@ Bool UseKnownColomn = False;
165165Bool UseMask = False;
166166int NbrKnownColumn = 0 ; // Number of column which are known in the mixing matrix (a priori)
167167fltarray MatKnownColumn; // Matrix containing the known column
168- type_gmca_threshold_decrease TypeThresholdDecrease = GMCA_THRES_MAD; // Select the decreasing threshold strategy
168+ // enum type_gmca_threshold_decrease {GMCA_THRES_LINEAR, GMCA_THRES_EXP, GMCA_THRES_MAD, GMCA_THRES_MOM};
169+ type_gmca_threshold_decrease TypeThresholdDecrease = GMCA_THRES_MAD; // Select the decreasing threshold strategy
169170Bool Inpainting = False; // If true, GMCA consider missing data, and apply an inpainting technique
170171fltarray Mask; // if Inpainting==True, Mask contains the available data Mask(i) = 1 or 0 (0 for no data).
171172Bool PositiveMatrix = False; // if True, the mixing matrice is assume to be positive
@@ -238,6 +239,13 @@ static void usage(char *argv[])
238239 fprintf (OUTMAN, " [-K Last K-Mad]\n " );
239240 fprintf (OUTMAN, " Last value of K for K-Mad Thresholding. \n " );
240241 fprintf (OUTMAN, " [-G Global Thresholding]\n " );
242+ fprintf (OUTMAN, " [-E ThresholdDecreasingMethod]\n " );
243+ fprintf (OUTMAN, " 1: Linear Thresholding. \n " );
244+ fprintf (OUTMAN, " 2: Exponential Thresholding. \n " );
245+ fprintf (OUTMAN, " 3: Residual MAD Thresholding. \n " );
246+ fprintf (OUTMAN, " 4: MOM Thresholding. \n " );
247+ fprintf (OUTMAN, " Default is 3. \n " );
248+
241249// fprintf(OUTMAN, " [-O]\n");
242250// fprintf(OUTMAN, " Orthogonalization of the spectra\n");
243251 verbose_usage ();
@@ -260,7 +268,7 @@ static void transinit(int argc, char *argv[])
260268#endif
261269
262270 /* get options */
263- while ((c = GetOpt (argc,argv," i:N:t:n:MS:PpI:A:ldm:L:DK:GUOvzZ:" )) != -1 )
271+ while ((c = GetOpt (argc,argv," E: i:N:t:n:MS:PpI:A:ldm:L:DK:GUOvzZ:" )) != -1 )
264272 {
265273 switch (c)
266274 {
@@ -338,6 +346,22 @@ static void transinit(int argc, char *argv[])
338346 exit (-1 );
339347 }
340348 break ;
349+ case ' E' :
350+ /* -d <type> type of transform */
351+ if (sscanf (OptArg," %d" ,&c ) != 1 )
352+ {
353+ fprintf (OUTMAN, " bad type of threshold decreasing method: %s\n " , OptArg);
354+ exit (-1 );
355+
356+ }
357+ if ((c > 0 ) && (c <= NRB_GMCA_THRES_DEC+1 ))
358+ TypeThresholdDecrease = (type_gmca_threshold_decrease) (c-1 );
359+ else
360+ {
361+ fprintf (OUTMAN, " bad type of threshold decreasing method: %s\n " , OptArg);
362+ exit (-1 );
363+ }
364+ break ;
341365 case ' M' : Normalize = (Normalize == True) ? False: True; break ;
342366 case ' v' : Verbose = True; break ;
343367 case ' n' :
@@ -374,6 +398,7 @@ static void transinit(int argc, char *argv[])
374398 exit (-1 );
375399 }
376400 break ;
401+
377402#ifdef LARGE_BUFF
378403 case ' z' :
379404 if (OptZ == True)
0 commit comments