diff --git a/macro/run/run_tests.sh b/macro/run/run_tests.sh
index c47077addfe4b33f6440d75395384e710ba76467..9c0984e1dab0cdbd9299c5c1264174a3980c512d 100644
--- a/macro/run/run_tests.sh
+++ b/macro/run/run_tests.sh
@@ -10,51 +10,147 @@
 # Also no dpendencies are available. The macros are executed in the
 # given sequence
 
-nEvents=3
-nBeam=$((nEvents*3))
-setup=sis100_electron
-sname=sis100e
-
-
-# Testing the transport macros
-input=${VMCWORKDIR}/input/urqmd.auau.10gev.centr.root
-root -l -q -b "run_tra_file.C(\"${input}\", ${nEvents}, \"data/${sname}_coll\", \"${setup}\")"
-
-
-input=${VMCWORKDIR}/input/pluto.auau.8gev.omega.mpmm.0001.root
-root -l -b -q "run_tra_file.C(\"${input}\", ${nEvents}, \"data/${sname}_sign\", \"${setup}\")"
-
-root -l -b -q "run_tra_beam.C(${nBeam}, \"Au\", 10, -1, \"data/${sname}_beam\", \"${setup}\")"
-
-root -l -b -q run_transport_json_config.C
-
-
-# Testing the digitization macros
-root -l -b -q run_digi_json_config.C
-
-root -l -b -q "run_digi.C(\"data/${sname}_coll\", -1, \"data/${sname}_ev\", -1.)"
-
-eventrate=1.e7
-beamrate=1.e9
-tslength=1.e6
-root -l -b -q "run_digi.C(\"data/${sname}_coll\", -1, \"data/${sname}_ts\", \
-                          ${eventrate}, ${tslength}, \"data/${sname}_sign\", \
-                          \"data/${sname}_beam\", ${beamrate})"
-
-
-# Testing the reconstruction macros 
-root -l -b -q "run_reco.C(\"data/${sname}_ev\", -1, 0, \"data/${sname}_eb_eb_ideal\", \
-                         \"Ideal\", \"${setup}\", \"data/${sname}_coll\")"
-
-root -l -b -q "run_reco.C(\"data/${sname}_ev\", -1, 0, \"data/${sname}_eb_eb_real\", \
-                          \"Real\", \"${setup}\", \"data/${sname}_coll\")"
-
-root -l -b -q "run_reco.C(\"data/${sname}_ts\", -1, 0, \"data/${sname}_ts_eb_ideal\", \
-                          \"Ideal\", \"${setup}\", \"data/${sname}_coll\")"
-
-root -l -b -q "run_reco.C(\"data/${sname}_ts\", -1, 0, \"data/${sname}_ts_eb_real\", \
-                          \"Real\", \"${setup}\", \"data/${sname}_coll\")"
-
-root -l -b -q "run_reco.C(\"data/${sname}_ts\", -1, 0, \"data/${sname}_ts_tb\", \
-                          \"\", \"${setup}\", \"data/${sname}_coll\")"
 
+main () {
+  nEvents=3
+  nBeam=$((nEvents*3))
+  setup=sis100_electron
+  sname=sis100e
+
+  echo ""
+
+  # Testing the transport macros
+  log_file_name=data/run_tra_file_urqmd.log
+  check_string="Macro finished successfully"
+
+  input=${VMCWORKDIR}/input/urqmd.auau.10gev.centr.root
+  execute_macro "run_tra_file.C(\"${input}\", ${nEvents}, \"data/${sname}_coll\", \"${setup}\")" \
+                $log_file_name \
+                $check_string
+     
+  
+  log_file_name=data/run_tra_file_pluto.log
+  check_string="Macro finished successfully"
+  
+  input=${VMCWORKDIR}/input/pluto.auau.8gev.omega.mpmm.0001.root
+  execute_macro "run_tra_file.C(\"${input}\", ${nEvents}, \"data/${sname}_sign\", \"${setup}\")" \
+                $log_file_name \
+                $check_string
+ 
+
+  log_file_name=data/run_tra_beam.log
+  check_string="Macro finished successfully"
+
+  execute_macro "run_tra_beam.C(${nBeam}, \"Au\", 10, -1, \"data/${sname}_beam\", \"${setup}\")" \
+                $log_file_name \
+                $check_string
+
+  log_file_name=data/run_tra_json.log
+  check_string="Macro finished successfully"
+
+  execute_macro "run_transport_json_config.C" \
+                $log_file_name \
+                $check_string
+ 
+  # Testing the digitization macros
+  log_file_name=data/run_digi_json.log
+  check_string="Macro finished successfully"
+
+  execute_macro "run_digi_json_config.C" \
+                $log_file_name \
+                $check_string
+
+
+  log_file_name=data/run_digi_eb.log
+  check_string="Macro finished successfully"
+  execute_macro "run_digi.C(\"data/${sname}_coll\", -1, \"data/${sname}_ev\", -1.)" \
+                $log_file_name \
+                $check_string
+
+
+  log_file_name=data/run_digi_tb.log
+  check_string="Macro finished successfully"
+
+  eventrate=1.e7
+  beamrate=1.e9
+  tslength=1.e6
+  execute_macro "run_digi.C(\"data/${sname}_coll\", -1, \"data/${sname}_ts\", \
+                            ${eventrate}, ${tslength}, \"data/${sname}_sign\", \
+                            \"data/${sname}_beam\", ${beamrate})" \
+                $log_file_name \
+                $check_string
+
+  # Testing the reconstruction macros 
+  log_file_name=data/run_reco_eb_eb_ideal.log
+  check_string="Macro finished successfully"
+
+  execute_macro "run_reco.C(\"data/${sname}_ev\", -1, 0, \"data/${sname}_eb_eb_ideal\", \
+                            \"Ideal\", \"${setup}\", \"data/${sname}_coll\")" \
+                $log_file_name \
+                $check_string
+
+  log_file_name=data/run_reco_eb_eb_real.log
+  check_string="Macro finished successfully"
+
+  execute_macro "run_reco.C(\"data/${sname}_ev\", -1, 0, \"data/${sname}_eb_eb_real\", \
+                            \"Real\", \"${setup}\", \"data/${sname}_coll\")" \
+                $log_file_name \
+                $check_string
+
+  log_file_name=data/run_reco_ts_eb_ideal.log
+  check_string="Macro finished successfully"
+
+  execute_macro "run_reco.C(\"data/${sname}_ts\", -1, 0, \"data/${sname}_ts_eb_ideal\", \
+                            \"Ideal\", \"${setup}\", \"data/${sname}_coll\")" \
+                $log_file_name \
+                $check_string
+
+  log_file_name=data/run_reco_ts_eb_real.log
+  check_string="Macro finished successfully"
+
+   execute_macro "run_reco.C(\"data/${sname}_ts\", -1, 0, \"data/${sname}_ts_eb_real\", \
+                            \"Real\", \"${setup}\", \"data/${sname}_coll\")" \
+                 $log_file_name \
+                 $check_string
+
+  log_file_name=data/run_reco_ts_tb.log
+  check_string="Macro finished successfully"
+
+  execute_macro "run_reco.C(\"data/${sname}_ts\", -1, 0, \"data/${sname}_ts_tb\", \
+                            \"\", \"${setup}\", \"data/${sname}_coll\")" \
+                 $log_file_name \
+                 $check_string
+
+  exit 0
+}
+
+check_result () {
+  result=$1
+  check_string=$2
+  logfile=$3
+  string_compare=$(grep "$check_string" $logfile)
+  string_result=$?
+#  if [[ ( $result -ne 0 ) || ( $string_result -ne 0 ) ]]; then
+  if [[ ( $string_result -ne 0 ) ]]; then
+    echo "Running the macro has failed"
+    echo "See the error below"
+    echo ""
+    cat $logfile
+    exit 1
+  else
+    echo "Macro finished successfuly"
+    echo ""
+  fi
+}
+
+execute_macro () {
+  macro_info=$1
+  log_file_name=$2
+  check_string=$3
+  echo "Executing macro $macro_info"
+  root -l -q -b "$macro_info" &> $log_file_name
+  result=$?
+  check_result $result "$check_string" $log_file_name
+}
+
+main "$@"