This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
examples:gs_loop_olivine [2019/12/05 10:19] smerkel |
examples:gs_loop_olivine [2023/12/09 22:21] (current) smerkel ↷ Page moved from restricted:gs_loop_olivine to examples:gs_loop_olivine |
||
---|---|---|---|
Line 10: | Line 10: | ||
The loop can run //nLoops// indexings (typically 3). For each, the loop runs | The loop can run //nLoops// indexings (typically 3). For each, the loop runs | ||
- | * 6 iterations of 100000 GrainSpotter orientation searches with the following thresholds (min<sub>NPeaks</sub>=20, min<sub>Completeness</sub>=0.5, Δ<sub>2θ</sub>=0.06°, Δ<sub>η</sub>=1°, Δ<sub>ω</sub>=1°, maximum deviation n<sub>σ</sub>=2) | + | * 6 iterations of 100000 GrainSpotter orientation searches with the following threshold |
+ | <WRAP center indent 60%> | ||
+ | * min<sub>NPeaks</sub> = 20 | ||
+ | * min<sub>Completeness</sub> = 0.5 | ||
+ | * Δ<sub>2θ</sub> = 0.06° | ||
+ | * Δ<sub>η</sub> = 1° | ||
+ | * Δ<sub>ω</sub> = 1° | ||
+ | * maximum deviation n<sub>σ</sub> = 2 | ||
+ | </WRAP> | ||
+ | * 5 iterations of 100000 GrainSpotter orientation searches with | ||
+ | <WRAP center indent 60%> | ||
+ | * min<sub>NPeaks</sub> = 20 | ||
+ | * min<sub>Completeness</sub> = 0.5 | ||
+ | * Δ<sub>2θ</sub> = 0.06° | ||
+ | * Δ<sub>η</sub> = 2° | ||
+ | * Δ<sub>ω</sub> = 2° | ||
+ | * maximum deviation n<sub>σ</sub> = 2 | ||
+ | </WRAP> | ||
+ | * 5 iterations of 100000 GrainSpotter orientation searches with | ||
+ | <WRAP center indent 60%> | ||
+ | * min<sub>NPeaks</sub> = 20 | ||
+ | * min<sub>Completeness</sub> = 0.3 | ||
+ | * Δ<sub>2θ</sub> = 0.06° | ||
+ | * Δ<sub>η</sub> = 2° | ||
+ | * Δ<sub>ω</sub> = 2° | ||
+ | * maximum deviation n<sub>σ</sub> = 2 | ||
+ | </WRAP> | ||
+ | * 5 iterations of 100000 GrainSpotter orientation searches with | ||
+ | <WRAP center indent 60%> | ||
+ | * min<sub>NPeaks</sub> = 20 | ||
+ | * min<sub>Completeness</sub> = 0.3 | ||
+ | * Δ<sub>2θ</sub> = 0.06° | ||
+ | * Δ<sub>η</sub> = 3° | ||
+ | * Δ<sub>ω</sub> = 3° | ||
+ | * maximum deviation n<sub>σ</sub> = 2 | ||
+ | </WRAP> | ||
+ | * 5 iterations of 100000 GrainSpotter orientation searches with | ||
+ | <WRAP center indent 60%> | ||
+ | * min<sub>NPeaks</sub> = 20 | ||
+ | * min<sub>Completeness</sub> = 0.3 | ||
+ | * Δ<sub>2θ</sub> = 0.10° | ||
+ | * Δ<sub>η</sub> = 3° | ||
+ | * Δ<sub>ω</sub> = 3° | ||
+ | * maximum deviation n<sub>σ</sub> = 2 | ||
+ | </WRAP> | ||
+ | |||
+ | At the end of the loop, all results for the corresponding loop number are saved in a folder called ''Indexing-$loop'', where ''$loop'' is the loop number. Merged grains are in a file called ''merge-grains.log'' and their Euler angles in ''merge-grains-euler.txt''. | ||
+ | |||
+ | ===== Getting some idea on indexing capabilities ===== | ||
+ | |||
+ | There is now a dedicated TIMEleSS tool to [[evaluation:evaluate_indexing_statistics|evaluate your indexing performance]]. | ||
+ | |||
+ | ===== The loop ===== | ||
+ | |||
+ | You wanted it?! Here is the source code for the loop above | ||
+ | |||
+ | <code bash gsLoop.sh> | ||
+ | #!/bin/bash | ||
+ | |||
+ | # Starting GVE file | ||
+ | startGVE=../LTC_05_01_s26_t50_ol-seb-edit.gve | ||
+ | # Starting GVE file | ||
+ | crystalSymmetryCode=3 | ||
+ | # Number of indexings | ||
+ | nLoops=3 | ||
+ | |||
+ | # Update parameters above as well as in | ||
+ | # - create_GS_init | ||
+ | # - fine details in indexing_loop | ||
+ | |||
+ | # Location of executables | ||
+ | GrainSpotter=/usr/local/bin/GrainSpotter.0.90 | ||
+ | clearGVE=/usr/bin/timelessClearGVEGrains | ||
+ | mergeGrains=/usr/bin/timelessGrainSpotterMerge | ||
+ | extractEuler=timelessExtractEulerAngles | ||
+ | |||
+ | # Global parameter. Used to pass list of files between functions | ||
+ | grainlist="" | ||
+ | |||
+ | #----------------------------------------------------------------------------------------------- | ||
+ | # | ||
+ | # Call to create GrainSpotter input | ||
+ | # 3 parameters | ||
+ | # - first: name of GrainSpotter output file | ||
+ | # - second: name gve file | ||
+ | # - third: name of grain output file | ||
+ | # - forth : min_measurments | ||
+ | # - fifth : min_completeness | ||
+ | # - sixth : sigma_tth | ||
+ | # - seventh : sigma_eta | ||
+ | # - eighth : sigma_omega | ||
+ | # | ||
+ | #----------------------------------------------------------------------------------------------- | ||
+ | create_GS_init () { | ||
+ | cat > $1 <<- EOM | ||
+ | spacegroup 62 ! spacegroup [space group nr] | ||
+ | ! dsrange 0 0.34 ! dsrange [min max], d-spacing range, multiple ranges can be specified | ||
+ | tthrange 2 10.2 ! tthrange [min max], multiple ranges can be specified | ||
+ | ! tthrange 2 8.8 ! tthrange [min max], multiple ranges can be specified | ||
+ | ! tthrange 9 10.2 ! tthrange [min max], multiple ranges can be specified | ||
+ | tthrange 10.5 14.4 ! tthrange [min max], multiple ranges can be specified | ||
+ | ! tthrange 14.6 17 ! tthrange [min max], multiple ranges can be specifie | ||
+ | etarange 0 360 ! etarange [min max], multiple ranges can be specified | ||
+ | domega 0.5 ! domega [stepsize] in omega, degrees | ||
+ | omegarange -21 13 ! omegarange [min max] degrees, multiple ranges can be specified | ||
+ | filespecs $2 $3 ! filespecs [gvecsfile grainsfile] | ||
+ | cuts $4 $5 0.5 ! cuts [min_measuments min_completeness min_uniqueness] | ||
+ | eulerstep 5 ! eulerstep [stepsize] : angle step size in Euler space | ||
+ | uncertainties $6 $7 $8 ! uncertainties [sigma_tth sigma_eta sigma_omega] in degrees | ||
+ | nsigmas 2 ! nsigmas [Nsig] : maximal deviation in sigmas | ||
+ | ! minfracg 1 ! stop search when minfracg (0..1) of the gvectors have been assigned to grains | ||
+ | ! Nhkls_in_indexing 15 ! Nhkls_in_indexing [Nfamilies] : use first Nfamilies in indexing | ||
+ | random 100000 ! use randomly chosen orientation seeds #trials | ||
+ | ! positionfit ! fit the position of the grain | ||
+ | ! genhkl ! generate list of hkl's based on space group and cell parameters in gve file | ||
+ | EOM | ||
+ | } | ||
+ | |||
+ | |||
+ | #----------------------------------------------------------------------------------------------- | ||
+ | # | ||
+ | # Actual indexing loop | ||
+ | # Runs tens of GrainSpotter iterations with decreasing tolerances | ||
+ | # Runs in the current folder | ||
+ | # | ||
+ | #----------------------------------------------------------------------------------------------- | ||
+ | |||
+ | indexing_loop () { | ||
+ | |||
+ | echo "#" | ||
+ | echo "#" | ||
+ | echo "# Running first GS iteration. Starting from $startGVE, GS parameters in index-0.ini, grains saved in grains0.log" | ||
+ | echo "#" | ||
+ | echo "#" | ||
+ | create_GS_init index-0.ini $startGVE grains-0.log 20 0.5 0.06 1 1 | ||
+ | $GrainSpotter index-0.ini | ||
+ | echo "#" | ||
+ | echo "#" | ||
+ | echo "# Done with iteration 0. New list of GVE will be peaks_after_step-0.gve" | ||
+ | echo "#" | ||
+ | echo "#" | ||
+ | $clearGVE grains-0.log $startGVE peaks_after_step-0.gve | ||
+ | grainlist="grains-0.log" | ||
+ | |||
+ | for i in {1..5} | ||
+ | do | ||
+ | j="$((i - 1))" | ||
+ | echo "#" | ||
+ | echo "#" | ||
+ | echo "# Running GS iteration $i. Starting from peaks_after_step-$j.gve, GS parameters in index$i.ini, grains saved in grains-$i.log" | ||
+ | echo "#" | ||
+ | echo "#" | ||
+ | # Use from previous step and create grains$i.log | ||
+ | create_GS_init index-$i.ini peaks_after_step-$j.gve grains-$i.log 20 0.5 0.06 1 1 | ||
+ | $GrainSpotter index-$i.ini | ||
+ | echo "#" | ||
+ | echo "#" | ||
+ | echo "# Done with iteration $i. New list of GVE will be peaks_after_step-$i.gve" | ||
+ | echo "#" | ||
+ | echo "#" | ||
+ | $clearGVE grains-$i.log peaks_after_step-$j.gve peaks_after_step-$i.gve | ||
+ | grainlist="$grainlist grains-$i.log" | ||
+ | done | ||
+ | |||
+ | for i in {6..10} | ||
+ | do | ||
+ | j="$((i - 1))" | ||
+ | echo "#" | ||
+ | echo "#" | ||
+ | echo "# Running GS iteration $i. Starting from peaks_after_step-$j.gve, GS parameters in index$i.ini, grains saved in grain-$i.log" | ||
+ | echo "#" | ||
+ | echo "#" | ||
+ | create_GS_init index-$i.ini peaks_after_step-$j.gve grains-$i.log 20 0.5 0.06 2 2 | ||
+ | $GrainSpotter index-$i.ini | ||
+ | echo "#" | ||
+ | echo "#" | ||
+ | echo "# Done with iteration $i. New list of GVE will be peaks_after_step-$i.gve" | ||
+ | echo "#" | ||
+ | echo "#" | ||
+ | # Remove peaks that have been indexed | ||
+ | $clearGVE grains-$i.log peaks_after_step-$j.gve peaks_after_step-$i.gve | ||
+ | grainlist="$grainlist grains-$i.log" | ||
+ | done | ||
+ | |||
+ | for i in {11..15} | ||
+ | do | ||
+ | j="$((i - 1))" | ||
+ | echo "#" | ||
+ | echo "#" | ||
+ | echo "# Running GS iteration $i. Starting from peaks_after_step-$j.gve, GS parameters in index$i.ini, grains saved in grains-$i.log" | ||
+ | echo "#" | ||
+ | echo "#" | ||
+ | create_GS_init index-$i.ini peaks_after_step-$j.gve grains-$i.log 20 0.3 0.06 2 2 | ||
+ | $GrainSpotter index-$i.ini | ||
+ | echo "#" | ||
+ | echo "#" | ||
+ | echo "# Done with iteration $i. New list of GVE will be peaks_after_step-$i.gve" | ||
+ | echo "#" | ||
+ | echo "#" | ||
+ | # Remove peaks that have been indexed | ||
+ | $clearGVE grains-$i.log peaks_after_step-$j.gve peaks_after_step-$i.gve | ||
+ | grainlist="$grainlist grains-$i.log" | ||
+ | done | ||
+ | |||
+ | |||
+ | for i in {16..20} | ||
+ | do | ||
+ | j="$((i - 1))" | ||
+ | echo "#" | ||
+ | echo "#" | ||
+ | echo "# Running GS iteration $i. Starting from peaks_after_step-$j.gve, GS parameters in index$i.ini, grains saved in grains-$i.log" | ||
+ | echo "#" | ||
+ | echo "#" | ||
+ | # Use from previous step and create grains$i.log | ||
+ | create_GS_init index-$i.ini peaks_after_step-$j.gve grains-$i.log 20 0.3 0.06 3 3 | ||
+ | $GrainSpotter index-$i.ini | ||
+ | # Remove peaks that have been indexed | ||
+ | echo "#" | ||
+ | echo "#" | ||
+ | echo "# Done with iteration $i. New list of GVE will be peaks_after_step-$i.gve" | ||
+ | echo "#" | ||
+ | echo "#" | ||
+ | $clearGVE grains-$i.log peaks_after_step-$j.gve peaks_after_step-$i.gve | ||
+ | grainlist="$grainlist grains-$i.log" | ||
+ | done | ||
+ | |||
+ | for i in {21..25} | ||
+ | do | ||
+ | j="$((i - 1))" | ||
+ | echo "#" | ||
+ | echo "#" | ||
+ | echo "# Running GS iteration $i. Starting from peaks_after_step-$j.gve, GS parameters in index$i.ini, grains saved in grains-$i.log" | ||
+ | echo "#" | ||
+ | echo "#" | ||
+ | # Use from previous step and create grains$i.log | ||
+ | create_GS_init index-$i.ini peaks_after_step-$j.gve grains-$i.log 20 0.3 0.1 3 3 | ||
+ | $GrainSpotter index-$i.ini | ||
+ | # Remove peaks that have been indexed | ||
+ | echo "#" | ||
+ | echo "#" | ||
+ | echo "# Done with iteration $i. New list of GVE will be peaks_after_step-$i.gve" | ||
+ | echo "#" | ||
+ | echo "#" | ||
+ | $clearGVE grains-$i.log peaks_after_step-$j.gve peaks_after_step-$i.gve | ||
+ | grainlist="$grainlist grains-$i.log" | ||
+ | done | ||
+ | |||
+ | } | ||
+ | |||
+ | #----------------------------------------------------------------------------------------------- | ||
+ | # | ||
+ | # Indexing loop, runs tens of GrainSpotter iterations with decreasing tolerances | ||
+ | # Runs in the current folder | ||
+ | # | ||
+ | #----------------------------------------------------------------------------------------------- | ||
+ | |||
+ | for (( loop=1; loop<=$nLoops; loop++ )) | ||
+ | do | ||
+ | echo "#----------------------------------------------------------------------------------------" | ||
+ | echo "#" | ||
+ | echo "# Full indexing loop number $loop" | ||
+ | echo "# Data saved in folder: Indexing-$loop" | ||
+ | echo "#" | ||
+ | echo "#----------------------------------------------------------------------------------------" | ||
+ | echo "" | ||
+ | folder="Indexing-$loop" | ||
+ | \rm -rf $folder | ||
+ | mkdir $folder | ||
+ | |||
+ | grainlist="" | ||
+ | indexing_loop | ||
+ | $mergeGrains -c $crystalSymmetryCode -o merge $grainlist | ||
+ | $extractEuler -o merge-grains-euler.txt merge-grains.log | ||
+ | mv grains-* $folder | ||
+ | mv peaks_after_step* $folder | ||
+ | mv merge-* $folder | ||
+ | mv index-*.ini $folder | ||
+ | |||
+ | echo "" | ||
+ | echo "" | ||
+ | echo "#----------------------------------------------------------------------------------------" | ||
+ | echo "#" | ||
+ | echo "# Done with indexing loop number $loop" | ||
+ | echo "# Data saved in folder: Indexing-$loop" | ||
+ | echo "#" | ||
+ | echo "#----------------------------------------------------------------------------------------" | ||
+ | echo "" | ||
+ | echo "" | ||
+ | done | ||
+ | |||
+ | exit | ||
+ | </code> |