diff --git a/macro/beamtime/hd2020/calib_batch.sh b/macro/beamtime/hd2020/calib_batch.sh
new file mode 100755
index 0000000000000000000000000000000000000000..a14e212a29f7f0f96e0c4ebd3cd8be9158d80370
--- /dev/null
+++ b/macro/beamtime/hd2020/calib_batch.sh
@@ -0,0 +1,85 @@
+#!/bin/bash
+#SBATCH -J calib
+#SBATCH -D /lustre/nyx/cbm/users/nh/CBM/cbmroot/trunk/macro/beamtime/hd2020
+#SBATCH --time=6-00:00:00
+#SBATCH --mem=4000
+#SBATCH --partition=long
+
+X=$((${SLURM_ARRAY_TASK_ID} - 0))
+XXX=$(printf "%03d" "$X")
+
+CalSet="$1"
+if [[ ${CalSet} = "" ]]; then
+  echo please specify CalSet!
+  return
+fi
+
+Sel2="$2"
+if [[ ${Sel2} = "" ]]; then
+  echo please specify Sel2!
+  return
+fi
+
+RunId="$3"
+if [[ ${RunId} = "" ]]; then
+RunList1=' 
+20161121_2133_run1_gdpb
+'
+    I=1
+    RunId=""
+    for RunId in $RunList1
+    do
+    #echo check $RunId
+     if (($I == $X)); then
+       echo found RunId $RunId
+       break
+     fi
+     ((I=$I+1))
+    done
+fi
+
+CalMode="$4"
+if [[ ${CalMode} = "" ]]; then
+#CalMode="_DT200_0x00005006"
+#CalMode="_DT50_0x00005006"
+#CalMode="_DT50_0x00000000"
+#CalMode="_DT50_0x00019026"
+#CalMode="_DT50_Req5"
+#CalMode="_DT50_Req0"
+#CalMode="_DT50000_Req-3"
+#CalMode="_DT50000_Req-4"
+#CalMode="_DT26000_Req-4"
+CalMode=".100.3" 
+#CalMode="_DT100_Req-4"
+#CalMode="_DT50_Req-3"
+#CalMode="_DT50_Req-2"
+fi
+
+RunIdMode=`echo $RunId$CalMode`
+Deadtime=50
+
+echo define root execution environment at I=$I for Run $RunId Mode $RunIdMode
+
+if [ -e /lustre/nyx ]; then
+source /lustre/nyx/cbm/users/nh/CBM/cbmroot/trunk/build/config.sh 
+wdir=/lustre/nyx/cbm/users/nh/CBM/cbmroot/trunk/macro/beamtime/hd2020
+outdir=/lustre/nyx/cbm/users/nh/CBM/cbmroot/trunk/macro/beamtime/hd2020/${RunId}
+else 
+wdir=`pwd`
+outdir=${wdir}/${RunId}
+fi
+mkdir ${outdir}
+
+cd  ${wdir}
+echo execute: ./init_calib.sh ${RunIdMode} ${CalSet} ${Deadtime}
+source ./init_calib.sh ${RunIdMode} ${CalSet} ${Deadtime}
+
+cd  ${wdir}
+#echo execute: ./iter_calib.sh ${RunIdMode} ${CalSet} ${Sel2} ${Deadtime}
+#source ./iter_calib.sh ${RunIdMode} ${CalSet} ${Sel2} ${Deadtime}
+
+cd  ${wdir}
+echo execute: ./gen_digi.sh ${RunIdMode} ${CalSet} ${Sel2} ${Deadtime}
+source ./gen_digi.sh ${RunIdMode} ${CalSet} ${Sel2} ${Deadtime}
+
+mv -v slurm-${SLURM_ARRAY_JOB_ID}_${SLURM_ARRAY_TASK_ID}.out ${outdir}/Calib_${RunIdMode}_${CalSet}_${Sel2}.out
diff --git a/macro/beamtime/hd2020/eval_tracks.sh b/macro/beamtime/hd2020/eval_tracks.sh
new file mode 100755
index 0000000000000000000000000000000000000000..e1c3e474675cb78dad4b74d3e52da2345c7cbdcb
--- /dev/null
+++ b/macro/beamtime/hd2020/eval_tracks.sh
@@ -0,0 +1,106 @@
+#!/bin/bash
+# shell script to iterate tracklet calibration histograms
+#SBATCH -J eval_tracks
+#SBATCH -D /lustre/cbm/users/nh/CBM/cbmroot/trunk/macro/beamtime/hd2020
+#SBATCH --time=1-00:00:00
+#SBATCH --mem=2000
+#SBATCH --partition=long
+
+X=$((${SLURM_ARRAY_TASK_ID} - 0))
+XXX=$(printf "%03d" "$X")
+
+cRun=$1
+iDut=$2; 
+iRef=$3; 
+iSel2=$4
+((iSel=$iDut*1000+$iRef))
+iTraSetup=$5
+
+cSet=$6
+if [[ ${cSet} = "" ]]; then
+    cSet="900920910_911"
+fi
+    
+CalIdMode=$7
+if [[ ${CalIdMode} = "" ]]; then
+    echo use native calibration file
+    cCalId=$cRun;
+else
+    cCalId=${CalIdMode}
+fi
+
+dDTres=10000000
+nEvt=100000
+
+cSel2=$iSel2;
+if [[ $iSel2 < 100 ]]; then
+    cSel2="0"$iSel2
+    if [[ $iSel2 < 10 ]]; then
+	cSel2="00"$iSel2
+    fi
+fi
+
+if [ -e /lustre/cbm ]; then
+source /lustre/cbm/users/nh/CBM/cbmroot/trunk/build/config.sh 
+wdir=/lustre/cbm/users/nh/CBM/cbmroot/trunk/macro/beamtime/hd2020
+outdir=/lustre/cbm/users/nh/CBM/cbmroot/trunk/macro/beamtime/hd2020/${cRun}
+else 
+wdir=`pwd`
+outdir=${wdir}/${cRun}
+fi
+
+# frange2 limits chi2
+fRange2=3.5
+
+#frange1 limits DT spectrum range 
+fRange1=1.1
+dDeadtime=50
+
+cd ${cRun}
+mkdir          Ana_${cSet}_${iSel}_${cSel2}_${iTraSetup}
+cp ../rootlogon.C Ana_${cSet}_${iSel}_${cSel2}_${iTraSetup}/
+cp ../.rootrc     Ana_${cSet}_${iSel}_${cSel2}_${iTraSetup}/
+cd Ana_${cSet}_${iSel}_${cSel2}_${iTraSetup}
+rm -v  *AnaTestBeam.hst.root
+cp -v ../../${cCalId}_tofFindTracks.hst.root .
+cSet9=${cSet:0:9}
+ln -s -v ../${cCalId}_set${cSet9}_93_1tofClust.hst.root  ${cCalId}_set${cSet9}_93_1tofClust.hst.root 
+
+while [[ $dDTres > 0 ]]; do
+
+for iCal in 1 2 3 5 6 7 8 1
+do
+
+root -b -q '../../ana_trks.C('$nEvt','$iSel',-1,"'$cRun'","'$cSet'",'$iSel2','$iTraSetup','$fRange1','$fRange2','$dDeadtime',"'$cCalId'",'$iCal')'
+mv -v tofAnaTestBeam.hst.root ${cRun}_TrkAnaTestBeam.hst.root
+rm all_*
+
+if (! (test -f Test.res)); then
+echo no resolution file available: return
+exit 1
+fi
+done
+
+Tres=`cat Test.res`
+dTdif=`echo "$dDTres - $Tres" | bc`
+dDTres=`echo "$dDTres - 0.005" | bc`
+compare_result=`echo "$Tres < $dDTres" | bc`
+
+echo got Tres = $Tres, compare to $dDTres, dTdif = $dTdif, compare_result = $compare_result
+
+if [[ $compare_result > 0 ]]; then
+dDTres=$Tres
+else
+dDTres=0
+fi
+
+done
+
+# final action -> scan full statistics 
+iCal=1
+root -b -q '../../ana_trks.C(-1,'$iSel',-1,"'$cRun'","'$cSet'",'$iSel2','$iTraSetup','$fRange1','$fRange2','$dDeadtime',"'$cCalId'",'$iCal')'
+rm all_*
+cd ../..
+
+#mv -v slurm-${SLURM_ARRAY_JOB_ID}_${SLURM_ARRAY_TASK_ID}.out ${outdir}/IterTrack_${cRun}_${cSet}.out
+mv -v slurm-${SLURM_JOB_ID}.out ${outdir}/EvalTrack_${cRun}_${cSet}_${iSel}_${iSel2}_${iTraSetup}.out
diff --git a/macro/beamtime/hd2020/gen_digi.sh b/macro/beamtime/hd2020/gen_digi.sh
new file mode 100755
index 0000000000000000000000000000000000000000..be5f26611c0ea10560c0dda351200a490e026b37
--- /dev/null
+++ b/macro/beamtime/hd2020/gen_digi.sh
@@ -0,0 +1,92 @@
+#!/bin/bash
+# shell script to apply clusterizer calibrations
+#SBATCH -J gen_digi
+#SBATCH -D /lustre/cbm/users/nh/CBM/cbmroot/trunk/macro/beamtime/hd2020
+#SBATCH --time=4:00:00
+#SBATCH --mem=2000
+##SBATCH --partition=long
+cRun=$1
+
+iCalSet=$2
+((iTmp  = $iCalSet ))
+((iBRef = $iTmp % 1000))
+((iTmp  = $iTmp - $iBRef))
+((iSet  = $iTmp / 1000))
+((iRef  = $iTmp % 1000000))
+((iRef  = $iRef / 1000))
+((iTmp  = $iTmp - $iRef))
+((iDut  = $iTmp / 1000000))
+
+iSel2=$3
+
+if((${iSel2}<0));then
+ ((iBRef=-$iSel2))
+fi
+
+cCalSet=$iCalSet
+if (( iCalSet<100000000 )); then 
+cCalSet="0"$iCalSet
+fi
+if (( iCalSet<10000000 )); then 
+cCalSet="00"$iCalSet
+fi
+if (( iCalSet<1000000 )); then 
+cCalSet="000"$iCalSet
+fi
+if (( iCalSet<100000 )); then 
+cCalSet="0000"$iCalSet
+fi
+echo cCalSet = $cCalSet
+
+Deadtime=$4
+if [[ ${Deadtime} = "" ]]; then
+Deadtime=50.
+fi
+
+CalIdMode=$5
+if [[ ${CalIdMode} = "" ]]; then
+ echo use native calibration file 
+ CalIdMode=${cRun}
+ CalFile=${cRun}_set${cCalSet}_93_1tofClust.hst.root
+else 
+ CalFile=${CalIdMode}_set${cCalSet}_93_1tofClust.hst.root
+ RunFile=${cRun}_set${cCalSet}_93_1tofClust.hst.root
+# rm ${RunFile}
+# ln -s ${CalFile} ${RunFile} 
+ echo use calibrations from  ${CalFile}
+fi
+
+CalIdSet=$6
+if [[ ${CalIdSet} = "" ]]; then
+    echo use native calibration file
+    CalIdSet=$cCalSet
+else
+    CalFile=${CalIdMode}_set${CalIdSet}_93_1tofClust.hst.root    
+fi
+
+echo gen_digi for $cRun with iDut=$iDut, iRef=$iRef, iSet=$iCalSet, iSel2=$iSel2, iBRef=$iBRef, Deadtime=$Deadtime, CalFile=$CalFile
+
+if [ -e /lustre/cbm ]; then
+source /lustre/cbm/users/nh/CBM/cbmroot/trunk/build/config.sh 
+wdir=/lustre/cbm/users/nh/CBM/cbmroot/trunk/macro/beamtime/mcbm2019
+outdir=/lustre/cbm/users/nh/CBM/cbmroot/trunk/macro/beamtime/mcbm2019/${cRun}
+else 
+wdir=`pwd`
+outdir=${wdir}/${cRun}
+fi
+
+cd $wdir
+mkdir $cRun
+cd    $cRun 
+cp    ../.rootrc .
+cp    ../rootlogon.C .
+cp -v ../${CalFile}  .
+#root -b -q './ana_digi.C(-1,93,1,'$iRef',1,"'$cRun'",'$iCalSet',1,'$iSel2','$Deadtime') '
+#root -b -q '../ana_digi_dev.C(-1,93,1,'$iRef',1,"'$cRun'",'$iCalSet',1,'$iSel2','$Deadtime',"'$CalIdMode'") '
+root -b -q '../ana_digi_cal.C(-1,93,1,'$iRef',1,"'$cRun'",'$iCalSet',1,'$iSel2','$Deadtime',"'$CalIdMode'") '
+#root -b -q '../ana_digi_cos.C(-1,93,1,'$iRef',1,"'$cRun'",'$iCalSet',1,'$iSel2','$Deadtime',"'$CalIdMode'") '
+#root -b -q '../ana_digi_star.C(-1,93,1,'$iRef',1,"'$cRun'",'$iCalSet',1,'$iSel2','$Deadtime',"'$CalIdMode'") '
+
+cd ..
+
+mv -v slurm-${SLURM_JOB_ID}.out ${outdir}/GenDigi_${cRun}_${iCalSet}_${iSel2}_${iCalIdMode}.out
diff --git a/macro/beamtime/hd2020/init_calib.sh b/macro/beamtime/hd2020/init_calib.sh
new file mode 100755
index 0000000000000000000000000000000000000000..3bbe437dd97fdadd4b06897310e6c3518be97edc
--- /dev/null
+++ b/macro/beamtime/hd2020/init_calib.sh
@@ -0,0 +1,130 @@
+#!/bin/bash
+# shell script to initialize clusterizer calibrations
+#SBATCH -J calall
+#SBATCH -D /lustre/cbm/users/nh/CBM/cbmroot/trunk/macro/beamtime/hd2020
+#SBATCH --time=6-00:00:00
+#SBATCH --mem=2000
+#SBATCH --partition=long
+cRun=$1
+
+echo 'Initialize clusterizer calibration for run '$cRun
+
+iCalSet=$2
+((iTmp  = $iCalSet ))
+((iBRef = $iTmp % 1000))
+((iTmp  = $iTmp - $iBRef))
+((iSet  = $iTmp / 1000))
+((iMRef = $iTmp % 1000000))
+((iMRef = $iMRef / 1000))
+((iTmp  = $iTmp - $iMRef))
+((iDut  = $iTmp / 1000000))
+echo Calib setup is ${iCalSet}, iSet=$iSet, iDut=$iDut, iMRef=$iMRef, iBRef=$iBRef
+cCalSet=$iCalSet
+if (( iCalSet<100000000 )); then 
+cCalSet="0"$iCalSet
+fi
+if (( iCalSet<10000000 )); then 
+cCalSet="00"$iCalSet
+fi
+if (( iCalSet<1000000 )); then 
+cCalSet="000"$iCalSet
+fi
+if (( iCalSet<100000 )); then 
+cCalSet="0000"$iCalSet
+fi
+echo cCalSet = $cCalSet
+#iSet=0
+#lastOpt=''
+nEvi0=100000  # start value
+nEvi1=10000    # increment 
+
+if [ -e /lustre ]; then
+source /lustre/cbm/users/nh/CBM/cbmroot/trunk/build6/config.sh 
+wdir=/lustre/cbm/users/nh/CBM/cbmroot/trunk/macro/beamtime/hd2020
+outdir=/lustre/cbm/users/nh/CBM/cbmroot/trunk/macro/beamtime/hd2020/${RunId}
+else 
+wdir=`pwd`
+outdir=${wdir}/${RunId}
+fi
+mkdir ${outdir}
+
+cd  ${wdir}
+mkdir ${cRun}
+cp rootlogon.C ${cRun}
+cp .rootrc ${cRun}
+cd ${cRun}
+
+# Global variables, for for-loops
+iRestart=0
+#iRestart=12
+iStep=0
+iStepLast=0
+iCalSel0=0
+iCalSel1=1
+# ************************** Starting while Loop ***************************** #
+
+(( nEvi = nEvi0 + 10*nEvi1 ))
+optList=""
+optList=`echo " $nEvi,93,1,$iMRef,0 "`$optList 
+icalmod=3
+for icallev in 8  6  4  2  
+do
+    (( nEvi = nEvi0 + (icallev-1)*nEvi1 ))
+    optList=`echo " $nEvi,$icallev$icalmod,$iCalSel0,$iDut,0 "`$optList
+    optList=`echo " $nEvi,$icallev$icalmod,$iCalSel1,$iMRef,0 "`$optList
+    optList=`echo " $nEvi,$icallev$icalmod,$iCalSel0,99,50 "`$optList 
+    #optList=`echo " $nEvi,$icallev$icalmod,$iCalSel1,99,50 "`$optList
+done
+ optList=`echo " $nEvi,0,0,99,50 "`$optList      # start Init1
+ echo optList:  $optList
+
+for inOpt in $optList
+do  
+    echo step ${iStep} with option $inOpt
+    ((iStepLast = ${iStep}))
+    ((iStep += 1))
+
+    mkdir Init${iStep}
+    cp rootlogon.C Init${iStep}
+    cp .rootrc Init${iStep}
+    cd Init${iStep}
+
+    if [[ ${lastOpt:+1} ]] ; then
+	# echo last round was done with $lastOpt, extract 2. and 3. word
+	i1=`expr index $inOpt , `
+	i2=($i1+3)
+	#echo `expr index $inOpt , ` = $i1
+	cMode=${inOpt:$i1:2}
+	cSel=${inOpt:$i2:1}
+	echo next iteration: cMode=$cMode, cSel=$cSel 
+	if [[ ${cSel} = "-" ]];then 
+	    cSel=${inOpt:$i2:2}
+	    echo cSel=$cSel 
+	    cSel="0"
+	fi
+	#copy calibration file 
+	if (($iStep > $iRestart)) ; then
+	    cp -v ../Init${iStepLast}/tofClust_${cRun}_set${cCalSet}.hst.root ${cRun}_set${cCalSet}_${cMode}_${cSel}tofClust.hst.root
+	fi
+    fi 
+
+    lastOpt=$inOpt
+    # generate new calibration file
+    if (($iStep > $iRestart)) ; then 
+	root -b -q '../../ana_digi_cal.C('$inOpt',"'${cRun}'",'${iCalSet}',0,'${iBRef}') '
+
+	cp -v tofClust_${cRun}_set${cCalSet}.hst.root ../${cRun}_set${cCalSet}_${cMode}_${cSel}tofClust.hst.root
+	cp *pdf ../
+	#./screenshot.sh
+	cd .. 
+	rm ../${cRun}_set${cCalSet}_${cMode}_${cSel}tofClust.hst.root
+	ln -s ./${cRun}/${cRun}_set${cCalSet}_${cMode}_${cSel}tofClust.hst.root ../${cRun}_set${cCalSet}_${cMode}_${cSel}tofClust.hst.root
+	echo Init step $iStep with mode ${cMode}, option $inOpt  finished
+    else 
+	cd ..
+	echo Init step $iStep with mode ${cMode}, option $inOpt  skipped
+    fi   
+done
+
+cd  ${wdir}
+mv -v slurm-${SLURM_JOB_ID}.out ${outdir}/InitCalib_${cRun}_${cCalSet}.out
diff --git a/macro/beamtime/hd2020/trk_cal_digi.sh b/macro/beamtime/hd2020/trk_cal_digi.sh
new file mode 100755
index 0000000000000000000000000000000000000000..2a74911b54b8268edeede1e9ec11d3ae34c31631
--- /dev/null
+++ b/macro/beamtime/hd2020/trk_cal_digi.sh
@@ -0,0 +1,221 @@
+#!/bin/bash
+# shell script to apply clusterizer calibrations
+#SBATCH -J trk_cal_digi
+#SBATCH -D /lustre/cbm/users/nh/CBM/cbmroot/trunk/macro/beamtime/hd2020
+#SBATCH --time=5-24:00:00
+#SBATCH --mem=4000
+#SBATCH --partition=long
+cRun=$1
+
+iCalSet=$2
+((iTmp  = $iCalSet ))
+((iBRef = $iTmp % 1000))
+((iTmp  = $iTmp - $iBRef))
+((iSet  = $iTmp / 1000))
+((iRef  = $iTmp % 1000000))
+((iRef  = $iRef / 1000))
+((iTmp  = $iTmp - $iRef))
+((iDut  = $iTmp / 1000000))
+
+iSel2=$3
+cSel2=$iSel2
+if (( iSel2<100 )); then 
+cSel2="0"$iSel2
+fi
+if (( iSel2<10 )); then 
+cSel2="00"$iSel2
+fi
+
+cCalSet=$iCalSet
+if (( iCalSet<100000000 )); then 
+cCalSet="0"$iCalSet
+fi
+if (( iCalSet<10000000 )); then 
+cCalSet="00"$iCalSet
+fi
+if (( iCalSet<1000000 )); then 
+cCalSet="000"$iCalSet
+fi
+if (( iCalSet<100000 )); then 
+cCalSet="0000"$iCalSet
+fi
+echo cCalSet = $cCalSet
+
+Deadtime=$4
+if [[ ${Deadtime} = "" ]]; then
+Deadtime=50.
+fi
+
+CalIdMode=$5
+if [[ ${CalIdMode} = "" ]]; then
+ echo use native calibration file 
+ CalIdMode=${cRun}
+ CalFile=${cRun}_set${cCalSet}_93_1tofClust.hst.root
+else 
+ CalFile=${CalIdMode}_set${cCalSet}_93_1tofClust.hst.root
+ RunFile=${cRun}_set${cCalSet}_93_1tofClust.hst.root
+# rm ${RunFile}
+# ln -s ${CalFile} ${RunFile} 
+ echo use calibrations from  ${CalFile}
+fi
+
+iCalOpt=$6
+if [[ ${iCalOpt} = "" ]]; then
+  iCalOpt=1	
+fi
+
+iTraSetup=$7
+if [[ $iTraSetup = "" ]]; then 
+  iTraSetup=11
+fi
+
+CalIdSet=$8
+if [[ ${CalIdSet} = "" ]]; then
+    echo use native calibration file
+    CalIdSet=$cCalSet
+else
+    CalFile=${CalIdMode}_set${CalIdSet}_93_1tofClust.hst.root    
+fi
+
+
+echo trk_cal_digi for $cRun with iDut=$iDut, iRef=$iRef, iSet=$iCalSet, iSel2=$iSel2, iBRef=$iBRef, Deadtime=$Deadtime, CalFile=$CalFile
+
+if [ -e /lustre/cbm ]; then
+source /lustre/cbm/users/nh/CBM/cbmroot/trunk/build/config.sh 
+wdir=/lustre/cbm/users/nh/CBM/cbmroot/trunk/macro/beamtime/hd2020
+outdir=/lustre/cbm/users/nh/CBM/cbmroot/trunk/macro/beamtime/hd2020/${cRun}
+else 
+wdir=`pwd`
+outdir=${wdir}/${cRun}
+fi
+
+nEvt=200000
+dDTres=100000
+dDTRMSres=100000
+iter=0;
+
+cd $wdir
+mkdir $cRun
+cd    $cRun 
+cp    ../.rootrc .
+cp    ../rootlogon.C .
+
+echo Execute in `pwd`: ./trk_cal_digi.sh $1 $2 $3 $4 $5 $6 $7 $8
+
+# get initial digi calibration 
+#cp -v  ./I*/${CalFile}  .
+ 
+# get latest tracker offsets
+# cp -v ../${cRun}_tofFindTracks.hst.root .
+
+rm -v TCalib.res
+nEvtMax=0
+(( nEvtMax = nEvt*10 ))
+
+#frange1 limits DT spectrum range 
+fRange1=2.
+# frange2 limits chi2
+fRange2=5.0
+TRange2Limit=3. 
+
+iSel=911921
+iGenCor=3
+cCalSet2=${cCalSet}_$cSel2
+
+case $iCalOpt in
+  1)   # TOff
+  ;;
+  2)   # Walk
+  (( nEvt *= 10 ))
+  (( nEvtMax *= 10 ))
+  ;;
+esac
+
+while [[ $dDTres > 0 ]]; do
+  nEvt=`echo "scale=0;$nEvt * 1./1." | bc`
+  #nEvt=`echo "scale=0;$nEvt * 1.1/1." | bc`
+  if [ $nEvt -gt $nEvtMax ]; then
+    nEvt=$nEvtMax
+  fi
+
+  fRange2=`echo "$fRange2 * 0.9" | bc`
+  compare_TRange2=`echo "$fRange2 < $TRange2Limit" | bc`
+  if  [[ $compare_TRange2 > 0 ]]; then
+   fRange2=$TRange2Limit
+  fi
+  
+  cd $wdir/$cRun
+  iCalAct=$iCalOpt
+  echo Enter while loop with $iCalAct in dir `pwd`
+  while [[ $iCalAct > 0 ]]; do  
+    if [[ $iCalOpt = 1 ]] || [[ $iCalAct > 1 ]]; then 
+      root -b -q '../ana_digi_cal.C('$nEvt',93,1,'$iRef',1,"'$cRun'",'$iCalSet',1,'$iSel2','$Deadtime',"'$CalIdMode'") '
+      # update calibration parameter file, will only be active in next iteration 
+      # cp -v tofClust_${cRun}_set${cCalSet}.hst.root ../${cRun}_set${cCalSet}_93_1tofClust.hst.root
+
+      root -b -q '../ana_trks.C('$nEvt','$iSel','$iGenCor',"'$cRun'","'$cCalSet2'",'$iSel2','$iTraSetup','$fRange1','$fRange2','$Deadtime',"'$CalIdMode'",1,1,'$iCalSet','$iCalAct')'
+      #root -l 'ana_trksi.C(-1,10,1,"385.50.5.0","000014500_020",20,1,1.90,7.60,50,"385.50.5.0",1,1)'
+  
+      cp -v New_${CalFile} ${CalFile}  
+
+    else 
+      cd $wdir
+      # store current status 
+      dLDTres=$dDTres
+      dLDTRMSres=$dDTRMSres
+      echo Store limits $dLDTres, $dLDTRMSres
+      echo exec in `pwd`: trk_cal_digi.sh $1 $2 $3 $4 $5 1 $7
+      ./trk_cal_digi.sh $1 $2 $3 $4 $5 1 $7
+      # restore old status
+      dDTres=$dLDTres
+      dDTRMSres=$dLDTRMSres
+      echo exec1done, resume with old status $dDTres, $dDTRMSres
+    fi
+    (( iCalAct -= 1 ))
+    echo Continue while loop with $iCalAct
+  done
+  
+  cd $wdir/$cRun
+  Tres=`cat TOffAvOff.res`
+  TRMSres=`cat TOffAvRMS.res`
+
+  if [[ $Tres = 0 ]]; then
+    Tres=1
+  fi
+  dTdif=`echo "$dDTres - $Tres" | bc`
+  compare_result=`echo "$Tres < $dDTres" | bc`
+
+  dTRMSdif=`echo "$dDTRMSres - $TRMSres" | bc`
+  compare_RMS=`echo "$TRMSres < $dDTRMSres" | bc`
+
+  echo at iter=$iter got TOff = $Tres, compare to $dDTres, dTdif = $dTdif, result = $compare_result, TRMS = $TRMSres, old $dDTRMSres, dif = $dTRMSdif, result = $compare_RMS 
+
+  ((compare_result += $compare_RMS))
+  echo CMPR result_summary: $compare_result 
+
+#  if [ $iter = 1 ]; then 
+#    exit 0  # for debugging 
+#  fi
+
+  if [[ $compare_result > 0 ]]; then
+    if [[ $Tres = 0 ]]; then
+      Tres=1
+    fi
+    dDTres=$Tres
+    dDTRMSres=$TRMSres
+    (( dDTRMSres -= 1 ))  # next attempt should be at least 1ps better for continuation
+    cp -v New_${CalFile} ${CalFile}  
+    cp -v New_${CalFile} ${CalFile}_$iter  
+  else
+    dDTres=0
+  fi
+  (( iter += 1 ))
+done
+
+cd $wdir/$cRun
+# generate full statistics digi file 
+root -b -q '../ana_digi_cal.C(-1,93,1,'$iRef',1,"'$cRun'",'$iCalSet',1,'$iSel2','$Deadtime',"'$CalIdMode'") '
+
+cd $wdir
+
+mv -v slurm-${SLURM_JOB_ID}.out ${outdir}/TrkCalDigi_${cRun}_${iCalSet}_${iSel2}_${iCalIdMode}.out
diff --git a/macro/beamtime/pl_XY_trk.C b/macro/beamtime/pl_XY_trk.C
index ea6a1c44df6d7ddc8c5a819ff4876add457ba54f..18194c2524717df345942a7ba6ec389e690b99c5 100644
--- a/macro/beamtime/pl_XY_trk.C
+++ b/macro/beamtime/pl_XY_trk.C
@@ -1,4 +1,4 @@
-void pl_XY_trk(Int_t NSt = 4, Double_t MinEff = 0.5, Double_t dThr = 0.01) {
+void pl_XY_trk(Int_t NSt = 4, Double_t MinEff = 0.5, Double_t dThr = 0.1) {
   //  TCanvas *can = new TCanvas("can22","can22");
   //  can->Divide(2,2);
   TCanvas* can = new TCanvas("can", "can", 50, 0, 800, 800);
diff --git a/macro/beamtime/pl_pull_trk.C b/macro/beamtime/pl_pull_trk.C
index 41368e5dcd1f82168a3b98b92614d78bd5fbcd2c..47627efb246f11377625d008239b1c7154f20f47 100644
--- a/macro/beamtime/pl_pull_trk.C
+++ b/macro/beamtime/pl_pull_trk.C
@@ -3,6 +3,7 @@ void pl_pull_trk(Int_t NSt = 8, Int_t iVar = 0, Int_t iFit = 0) {
   //  can->Divide(2,2);
   TCanvas* can = new TCanvas("can", "can", 50, 0, 800, 800);
   switch (NSt) {
+	case 7: can->Divide(3, 4); break;
     case 6:
     case 5:
     case 4: can->Divide(3, 3); break;