]> Creatis software - clitk.git/commitdiff
Change N formula
authortbaudier <thomas.baudier@creatis.insa-lyon.fr>
Tue, 27 Nov 2018 14:56:54 +0000 (15:56 +0100)
committertbaudier <thomas.baudier@creatis.insa-lyon.fr>
Tue, 27 Nov 2018 14:56:54 +0000 (15:56 +0100)
N is the number of primaries and is determine using the value of std, edep and squared edep. If it is null, we look for the next line, etc...

cluster_tools/gate_power_merge.sh
cluster_tools/mergeDoseByRegions.sh

index b2ced88862b9f61b4f6cd20ab4c45006502b68ac..43d90d02c496d6dba5c3f696a88b195c4b535f0c 100755 (executable)
@@ -218,12 +218,14 @@ function merge_doseByRegions {
         then
             update_bar ${count} "copying first partial result ${partial}"
             cp "${partial}" "${merged}"
+            copyFirstPartialResult -i "${merged}" -o "${merged}" 2> /dev/null > /dev/null || warning "error while calling ${doseMerger}"
             continue
         fi
 
         update_bar ${count} "adding ${partial}"
         addToPartialResult -i "${merged}" -j "${partial}" -o "${merged}" 2> /dev/null > /dev/null || warning "error while calling ${doseMerger}"
     done
+    divideUncertaintyResult -i "${merged}" -o "${merged}" 2> /dev/null > /dev/null || warning "error while calling ${doseMerger}"
     end_bar
     echo "  ${indent}merged ${count} files"
 }
index ad0b5bcccdea804c8870c2b86fdceb9deddf7e6e..b9303aac008b3b3a55a77bf4808531ad1c9e56b6 100755 (executable)
@@ -25,6 +25,44 @@ function addToPartialResult {
     exit 1
   fi
 
+  # Find the number of primaries for this job (the same for all line and different of 0)
+  # Get the number of primaries from edep and square_edep to determine the std.
+  nbPrimary=0
+  for i in $(seq 2 $nblines); do
+    #Get the line
+    file2=`sed -n "${i}p" < ${IN2}`
+
+    edep2=$(echo ${file2} | cut -f3 -d' ')
+    stdEdep2=$(echo ${file2} | cut -f4 -d' ')
+    sqEdep2=$(echo ${file2} | cut -f5 -d' ')
+    nbPrimary=$(python <<EOP
+if ($edep2 == 0 or $sqEdep2 == 0):
+  print(0)
+else:
+  temp=pow($edep2,2)*(pow($stdEdep2,2)-1)/(pow($stdEdep2*$edep2,2)-$sqEdep2)
+  print(int(round(temp)))
+EOP
+    )
+    if [ $nbPrimary -ne 0 ]; then
+      break
+    fi
+
+    dose2=$(echo ${file2} | cut -f6 -d' ')
+    stdDose2=$(echo ${file2} | cut -f7 -d' ')
+    sqDose2=$(echo ${file2} | cut -f8 -d' ')
+    nbPrimary=$(python <<EOP
+if ($dose2 == 0 or $sqDose2 == 0):
+  print(0)
+else:
+  temp=pow($dose2,2)*(pow($stdDose2,2)-1)/(pow($stdDose2*$dose2,2)-$sqDose2)
+  print(int(round(temp)))
+EOP
+    )
+    if [ $nbPrimary -ne 0 ]; then
+      break
+    fi
+  done
+
   #Copy the 1st line in output
   line1=`sed -n "1p" < ${RESULT}`
   echo "${line1}" >> ${TMP}
@@ -51,6 +89,16 @@ function addToPartialResult {
     sqEdep3=${sqEdep3/#./0.}
     file3=$(echo $file3 |awk -v r=${sqEdep3} '{$5=r}1')
 
+    # Get the number of primaries from edep and square_edep to determine the std.
+    # Sum the number of primaries with the latter ones
+    nbPrimaryEdep1=$(echo ${file1} | cut -f4 -d' ')
+    nbPrimaryEdep3=$(python <<EOP
+print($nbPrimary+$nbPrimaryEdep1)
+EOP
+    )
+    nbPrimaryEdep3=${nbPrimaryEdep3/#./0.}
+    file3=$(echo $file3 |awk -v r=${nbPrimaryEdep3} '{$4=r}1')
+
     # sum dose: get the 2 values, sum them and replace it in the file3
     dose1=$(echo ${file1} | cut -f6 -d' ')
     dose2=$(echo ${file2} | cut -f6 -d' ')
@@ -65,6 +113,17 @@ function addToPartialResult {
     sqDose3=${sqDose3/#./0.}
     file3=$(echo $file3 |awk -v r=${sqDose3} '{$8=r}1')
 
+    # Get the number of primaries from dose and square_dose to determine the std.
+    # Sum the number of primaries with the latter ones
+    nbPrimaryDose1=$(echo ${file1} | cut -f7 -d' ')
+    stdDose2=$(echo ${file2} | cut -f7 -d' ')
+    nbPrimaryDose3=$(python <<EOP
+print($nbPrimary+$nbPrimaryDose1)
+EOP
+    )
+    nbPrimaryDose3=${nbPrimaryDose3/#./0.}
+    file3=$(echo $file3 |awk -v r=${nbPrimaryDose3} '{$7=r}1')
+
     # sum n_hits: get the 2 values, sum them and replace it in the file3
     hit1=$(echo ${file1} | cut -f9 -d' ')
     hit2=$(echo ${file2} | cut -f9 -d' ')
@@ -83,10 +142,79 @@ function addToPartialResult {
   mv -f ${TMP} ${RESULT}
 }
 
+function copyFirstPartialResult {
+  IN1=$2
+  RESULT=$4
+
+  TMP="$(mktemp)"
+
+  # check if all 2 text files have the same number of lines
+  nblines=`cat ${IN1} | wc -l`
+  nb3=`cat ${RESULT} | wc -l`
+
+  if [ $nblines -ne $nb3 ]; then
+    echo "Files does not have the same size"
+    exit 1
+  fi
+  # Find the number of primaries for this job (the same for all line and different of 0)
+  # Get the number of primaries from edep and square_edep to determine the std.
+  nbPrimary=0
+  for i in $(seq 2 $nblines); do
+    #Get the line
+    file2=`sed -n "${i}p" < ${IN1}`
+
+    edep2=$(echo ${file2} | cut -f3 -d' ')
+    stdEdep2=$(echo ${file2} | cut -f4 -d' ')
+    sqEdep2=$(echo ${file2} | cut -f5 -d' ')
+    nbPrimary=$(python <<EOP
+if ($edep2 == 0 or $sqEdep2 == 0):
+  print(0)
+else:
+  temp=pow($edep2,2)*(pow($stdEdep2,2)-1)/(pow($stdEdep2*$edep2,2)-$sqEdep2)
+  print(int(round(temp)))
+EOP
+    )
+    if [ $nbPrimary -ne 0 ]; then
+      break
+    fi
+
+    dose2=$(echo ${file2} | cut -f6 -d' ')
+    stdDose2=$(echo ${file2} | cut -f7 -d' ')
+    sqDose2=$(echo ${file2} | cut -f8 -d' ')
+    nbPrimary=$(python <<EOP
+if ($dose2 == 0 or $sqDose2 == 0):
+  print(0)
+else:
+  temp=pow($dose2,2)*(pow($stdDose2,2)-1)/(pow($stdDose2*$dose2,2)-$sqDose2)
+  print(int(round(temp)))
+EOP
+    )
+    if [ $nbPrimary -ne 0 ]; then
+      break
+    fi
+  done
+
+  #Copy the 1st line in output
+  line1=`sed -n "1p" < ${RESULT}`
+  echo "${line1}" >> ${TMP}
+  # for all lines (except the 1st), split according tab
+  # write the number of primaries
+  for i in $(seq 2 $nblines); do
+    #Get the lines
+    file3=`sed -n "${i}p" < ${RESULT}`
+
+    file3=$(echo $file3 |awk -v r=${nbPrimary} '{$4=r}1')
+    file3=$(echo $file3 |awk -v r=${nbPrimary} '{$7=r}1')
+
+    #Write the output
+    echo "${file3}" >> ${TMP}
+  done
+  mv -f ${TMP} ${RESULT}
+}
+
 function divideUncertaintyResult {
   IN1=$2
-  value=$4
-  RESULT=$6
+  RESULT=$4
 
   TMP="$(mktemp)"
 
@@ -111,11 +239,15 @@ function divideUncertaintyResult {
 
     # Divide uncertainty and replace it in the file3
     edep1=$(echo ${file1} | cut -f3 -d' ')
+    nbPrimaryEdep1=$(echo ${file1} | cut -f4 -d' ')
     sqEdep1=$(echo ${file1} | cut -f5 -d' ')
     stdEdep3=$(python <<EOP
 import math
-temp=math.sqrt(($sqEdep1/$value-pow($edep1/$value, 2))/($value-1))/$edep1/$value
-print(temp)
+if ($edep1 == 0 or $sqEdep1 == 0):
+  print(1.0)
+else:
+  temp=math.sqrt(($sqEdep1/$nbPrimaryEdep1-pow($edep1/$nbPrimaryEdep1, 2))/($nbPrimaryEdep1-1))/($edep1/$nbPrimaryEdep1)
+  print(temp)
 EOP
     )
     stdEdep3=${stdEdep3/#./0.}
@@ -123,11 +255,15 @@ EOP
 
     # Divide uncertainty and replace it in the file3
     dose1=$(echo ${file1} | cut -f6 -d' ')
+    nbPrimaryDose1=$(echo ${file1} | cut -f7 -d' ')
     sqDose1=$(echo ${file1} | cut -f8 -d' ')
     stdDose3=$(python <<EOP
 import math
-temp=math.sqrt(($sqDose1/$value-pow($dose1/$value, 2))/($value-1))/$dose1/$value
-print(temp)
+if ($edep1 == 0 or $sqEdep1 == 0):
+  print(1.0)
+else:
+  temp=math.sqrt(($sqDose1/$nbPrimaryDose1-pow($dose1/$nbPrimaryDose1, 2))/($nbPrimaryDose1-1))/($dose1/$nbPrimaryDose1)
+  print(temp)
 EOP
     )
     stdDose3=${stdDose3/#./0.}