Minimalistic SimFit example

From Remeis-Wiki
Jump to navigation Jump to search


The aim of this example is to demonstrate the functionality of the SimFit routines with a minimalistic Example.


require("isisscripts");

% Define Data
Minimum_Stat_Err = 1e-20;
seed_random(1);

variable N = 30;
variable bin_lo = [1:2:#N+1][[:-2]];
variable bin_hi = [1:2:#N+1][[1:]];

variable data1 = struct{
  bin_lo = bin_lo,
  bin_hi = bin_hi,
  value  = (30+5*sin(2*PI*bin_lo) + grand(N)-0.5) * (bin_hi-bin_lo),
  err  = (9e-1*[1.:1.:#N]) * (bin_hi-bin_lo)
};
variable data2 = struct{
  bin_lo = bin_lo,
  bin_hi = bin_hi,
  value  = (35+10*sin(2*PI*bin_lo) + grand(N)-0.5) * (bin_hi-bin_lo),
  err    = (10e-1*[1.:1.:#N]) * (bin_hi-bin_lo)
};
variable data3 = struct{
  bin_lo = bin_lo,
  bin_hi = bin_hi,
  value  = (35+10*sin(2*PI*bin_lo) + grand(N)-0.5) * (bin_hi-bin_lo),
  err    = (10e-1*[1.:1.:#N]) * (bin_hi-bin_lo)
};
fancy_plot_unit("A"); % Nur zum plotten, falls Daten kein Spektrum sind!
%
% Initialize sim fit
variable sfit = simultaneous_fit();
% Add data
() = sfit.add_data(data1);
() = sfit.add_data([data2,data3]);


% Set fit function
sfit.fit_fun("sinwave2(%)");

% Define global Parameter: Tie parameter sinwave2(%).c of all groups to
% that of group 1
sfit.set_global("sinwave2(%).b");
sfit.set_global("sinwave2(%).c");
sfit.set_par("sinwave2(%).d",1,0,0,1e6);

% load Parameter:
variable file_org = "simpi";
variable file_new = "simpi_new";

variable file;
if( wherefirst(__argv == "org") != NULL ){
  file = file_org;
}
else{
  file = file_new;
}
vmessage("\n Loading %s.par & %s.model.",file,file);
load_par(file+".par");
sfit.load_model(file+".model");


define save_newpar(){
  vmessage("\n SAVING %s.par & %s.model.\n",file_new,file_new);
  save_par(file_new+".par");
  %sfit.save_model(file_new+".model");
};

if( wherefirst(__argv == "run") != NULL ){
  variable runjob = sfit.fit_pars_run_job("simpi_0000.job", ["simpi_0001.job", "simpi_0002.job"],
                                          "simpi_fitpars/*.fits", &save_newpar;
                                          agree,maxiter=3,wait=10);
}
#!/bin/bash
#
#PBS -S /bin/bash -V
#PBS -l nodes=2
#PBS -l arch=x86_64
#PBS -l walltime=00:01:00
#PBS -N simpi_fitpars_0000
#PBS -o /home/falkner/Public/simpi_fitpars/simpi_fitpars/simpi_fitpars_0000.out
#PBS -e /home/falkner/Public/simpi_fitpars/simpi_fitpars/simpi_fitpars_0000.err

cd /home/falkner/Public/simpi_fitpars
COMMAND="mpiexec isis-script simpi_fitpars.sl 0"
/usr/bin/nice -n +15 ${COMMAND}
#!/bin/bash
#
#PBS -S /bin/bash -V
#PBS -l nodes=2
#PBS -l arch=x86_64
#PBS -l walltime=00:01:00
#PBS -N simpi_fitpars_0001
#PBS -o /home/falkner/Public/simpi_fitpars/simpi_fitpars/simpi_fitpars_0001.out
#PBS -e /home/falkner/Public/simpi_fitpars/simpi_fitpars/simpi_fitpars_0001.err

cd /home/falkner/Public/simpi_fitpars
COMMAND="mpiexec isis-script simpi_fitpars.sl 1"
/usr/bin/nice -n +15 ${COMMAND}
#!/bin/bash
#
#PBS -S /bin/bash -V
#PBS -l nodes=2
#PBS -l arch=x86_64
#PBS -l walltime=00:01:00
#PBS -N simpi_fitpars_0002
#PBS -o /home/falkner/Public/simpi_fitpars/simpi_fitpars/simpi_fitpars_0002.out
#PBS -e /home/falkner/Public/simpi_fitpars/simpi_fitpars/simpi_fitpars_0002.err

cd /home/falkner/Public/simpi_fitpars
COMMAND="mpiexec isis-script simpi_fitpars.sl 2"
/usr/bin/nice -n +15 ${COMMAND}
require("isisscripts");
_traceback=1;

% TIME LOG
tic;vmessage("%s : Calling: '%s'",time,strjoin(__argv," "));

%%% initialize the simultaneous fit, adding the %%%
%%% data and defining/loading the model here    %%%

()=evalfile ("simpi.sl");

% get command line arguments (last argument has to be the group index!)
variable grp = atoi(__argv[-1]);

%%% set the directory for the output fits-files here %%%
%%% make sure that this directory exists!            %%%
variable parpath = "/home/falkner/Public/simpi_fitpars/simpi_fitpars";
% check on existence of parpath
if (access(parpath, F_OK) != 0) {
  vmessage("error: directory %s does not exist, aborting...", parpath);
  exit;
}

% calculate uncertainties
%%% replace 'simfit' by the name of your simultaneous-fit-structure %%%
variable fpars = sfit.mpi_fit_pars( grp ;
                                    dir=parpath,
                                    basefilename = sprintf("simpi_fitpars_%04d", grp)
                                  );

% TIME LOG
variable elaptime = toc;
vmessage("%s : Finished '%s' after %d s < %d %s",
time,strjoin(__argv," "),nint(elaptime),time_array(elaptime)[-1]+1,
["sec","min","h","d","y"][length(time_array(elaptime))-1]  );