User Tools

Site Tools


processing:indexing_with_grainspotter

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
processing:indexing_with_grainspotter [2019/06/07 08:52]
matthias [Indexing grains]
processing:indexing_with_grainspotter [2023/03/16 12:10] (current)
smerkel
Line 1: Line 1:
 ====== Grain indexing with GrainSpotter ====== ====== Grain indexing with GrainSpotter ======
  
-At this point, you should have a [[processing:​compute_gvectors|computed all experimental G-vectors]]. You are now ready for indexing grains with [[software:​grainspotter|GrainSpotter]].+At this point, you should have a [[processing:​compute_gvectors|computed all experimental G-vectors]]. You are now ready for indexing grains. This page shows you the indexing procedure ​with [[software:​grainspotter|GrainSpotter]]. For an alternative way of indexing, check out [[processing:​indexing_with_imaged11|Indexing with ImageD11]].
  
-GrainSpotter first generates a number of random grain orientations and, for each, calculates the corresponding theoretical G-vectors. For each grain orientation,​ GrainSpotter looks for a possible match between the theoretical G-vectors and those found in the experiment. If the convergence criteria are met (see details +GrainSpotter first generates a number of random grain orientations and, for each, calculates the corresponding theoretical G-vectors. For each grain orientation,​ GrainSpotter looks for a possible match between the theoretical G-vectors and those found in the experiment. If the convergence criteria are met (see details below), the grain is assigned.
-below), the grain is assigned.+
  
 ==== Estimation of the uncertainties ==== ==== Estimation of the uncertainties ====
Line 12: Line 11:
 In Fabian, load your peaks from the peaksearch and overlap them with the diffraction data (''​CrystTools''​ > ''​Peaks''​ > ''​read''​). In ImageD11, display your peaks as 2θ/η plot. You can then evaluate the maximum δ2θ, δη, and δω ranges you can use to avoid mixing up peaks. In Fabian, load your peaks from the peaksearch and overlap them with the diffraction data (''​CrystTools''​ > ''​Peaks''​ > ''​read''​). In ImageD11, display your peaks as 2θ/η plot. You can then evaluate the maximum δ2θ, δη, and δω ranges you can use to avoid mixing up peaks.
  
-ImageD11 is not a good tool for evaluating δη and δω as all peaks extracted for all ω are stacked on the same plot. It is the only tool, however, ​that will allow you to evaluate δ2θ.+ImageD11 is not a good tool for evaluating δη and δω as all peaks extracted for all ω are stacked on the same plot. It is appropriate, however, to evaluate δ2θ.
  
-[{{:​fabian.png?​nolink&​300 | Result of a peak search displayed in Fabian. Red circles are peaks. Using Fabian you can estimate the maximum δη interval (azimuthal coordinate on the detector plane) that can be used without confusing peaks. By moving from one image to the next, you can also estimate the maximum value of δω interval that can be used while avoiding confusion between peaks.}}] +[{{:​fabian.png?​nolink&​250 | Result of a peak search displayed in Fabian. Red circles are peaks. Using Fabian you can estimate the maximum δη interval (azimuthal coordinate on the detector plane) that can be used without confusing peaks. By moving from one image to the next, you can also estimate the maximum value of δω interval that can be used while avoiding confusion between peaks.}}] 
-[{{ :​imaged11_plotttheta_500.png?​nolink&​250| 2θ/η plot in ImageD11. This can be used to assign a maximum δ2θ interval that will avoid confusion between the diffraction lines. Pay attention to this step. If your 2θ uncertainty is too large, ​this indexing will be completely wrong.}}] ​+[{{ :​imaged11_plotttheta_500.png?​nolink&​250| 2θ/η plot in ImageD11. This can be used to assign a maximum δ2θ interval that will avoid confusion between the diffraction lines. Pay attention to this step. If your 2θ uncertainty is too large, ​the indexing will be completely wrong.}}] ​
  
  
Line 32: Line 31:
 Changing the 2θ range allow you to exclude some domains where the peaks are not well defined. Changing the 2θ range allow you to exclude some domains where the peaks are not well defined.
  
-You should play on the cut and the uncertainties to found the settings with the best indexation. Increasing the minimum of measurements allow to decrease ​the number of erroneous indexed grains but it limits the number of indexed grains found. The uniqueness and the completeness do not have a great importance on the indexation (I set both to zero in my best indexation scenario). For defining the uncertainties,​ use the plot from fabian and ImageD11.+You should play on the //cut// and //uncertainties// to optimize ​the parameters that will lead to the best results.
  
-Increasing random number increase the number of grains indexed but slow a bit the calculation. +When your input file is ready, type either ​
- +
-When your input file is ready, type +
    ​GrainSpotter.0.90 index.ini    ​GrainSpotter.0.90 index.ini
 or or
Line 42: Line 39:
 or  or 
    ​grainspotter index.ini    ​grainspotter index.ini
- 
-The command you need depends on which version you use. There shouldn'​t be any differences but still, we don't know for sure. 
-======Grain indexing with ImageD11====== 
- 
-First, get a gve file from ImageD11 as seen before. 
- 
-Then go in ImageD11 > Indexing > load gve and call your gve file. 
-Use Assign peaks to powder rings. This command will show all the theoretical peaks of the unit cell (for the phase you define in trnasformation > parameters) and the measured peaks it assign at each theoretical peaks. ​ 
- 
-Hit generate trial orientation then score trial orientation. ==Should a button somwhere to define the indexing parameters...== 
- 
-===indexing the peaks=== 
- 
-use :  ​ 
- 
- 
-python idx_0.py 
- 
- 
-in that script, you need to load your gve file (from ImageD11), your parameters file (from ImageD11) and your flt file (from peaksearch). Don't forget to specify the name of the ouput file. In the line myindexer.parameterobject.set_parameters,​ you can set the indexing parameters (mainly minpks and hkl_tol). To specify ​ the rings you want to use for the indexation, copy the list of peaks from Assign peaks to powder rings in the bloc below rings = [] and enter in that rings = [] list the index of the rings you want to use. 
-This script will pair every ring with all the other to index the peaks in grains. ​ 
-At the end, it will give you the number of grains it found. Once it is finish, the indexed grains are stored in a ubi file and you can get back the not indexed grains to run idx.py again with more generous parameters and try to found more grains with the left peaks. 
-To end the indexing, we use : 
- 
- 
-makemap.py -p parameters.prm -f peaks_to.flt -u to.ubi -U t0.map --omega_slope=.25 -t .03 
- 
- 
- To have a look at what you indexed, you can plot different things :  (command for plot were written in a Xterm terminal) 
- 
--the number of peaks in grains vs the error :  
- 
--the number of peaks in a grain vs the intensity :  
-from ImageD11.columnfile import * 
-c = columnfile("​peaks_t0.flt.new"​) 
-c.parameters.loadparameters("​parameters.prm"​) 
-c.updateGeometry() 
-clf() 
-c.filter(c.tth<​13) ​ % we only keep the rings below 13° cause after it's too low intensity 
-plot(c.tth[~(c.labels>​=0)],​ log(c.sum_intensity[~(c.labels>​=0)]),","​) 
-or :  plot(c.labels,​ log(c.sum_intensity),","​) 
-to save it  :  c.writefile("​t0la.flt"​) 
- 
--plot tth vs intensity :  
-plot(d.tth, d.sum_intensity,"​o",​ms=5) ​   (with d the variable containing the peaks) 
- 
--?? 
- 
-plotgrainhist.py peaks_t0.flt parameters.prm t0.map .05 10 .25 
  
  
-===Using only the best rings===+======Sample GrainSpotter input file======
  
-We run into the problem ​that in simulated datasetsa large number of peaks have an intensity below 1 and when saving the imagesthese intensities are rounded at 0. Consequentlythese peaks are not detected anymore ​by the software.+Below is a sample GrainSpotter input file that we actually used: 
 +  * lines started with ''​!''​ are commented out and will not be used, 
 +  * we define several 2theta ranges in which we actually look for peaks (other changes were polluted by an additional phase, 
 +  * images were acquired with ω in the [-28°;+28] range in steps of 0., 
 +  * the GVE file to start from is ''​peaks-I-Want-To-Index.gve'',​ 
 +  * results will be saved in ''​grains-I-found.log''​ 
 +  * cuts are as follow 
 +       * 15 peaks, minimum per grain, 
 +       * 30% completeness minimum, which is quite low but diamond anvil cells have shadows, peaks may be hidden ​by the pressure medium, etcIf the completeness restriction is too high, you will not find enough grains, 
 +       * 50% uniqueness: has no effect in the experiments we performed,​ 
 +   * uncertainties:​ 0.02° in 2θ, 1° in η and 2° in ω, which are all multiplied by a nσ of 2 (line below) 
 +   * tries for 10000 random orientations and stops,
  
-To resolve this issuewe want to consider only peaks with large intensitySoto select ​the rings we want to  +<​code>​ 
-use +spacegroup 62                ! spacegroup [space group nr] 
 +! dsrange 0 0.34                         ! dsrange [min max]d-spacing range, multiple ranges can be specified 
 +tthrange 3.0 7.15                          ! tthrange [min max]multiple ranges can be specified 
 +tthrange 7.35 10.2                          ! tthrange [min max], multiple ranges can be specified 
 +tthrange 10.3 12.5                          ! tthrange [min max], multiple ranges can be specified 
 +tthrange 12.65 14.5                          ! tthrange [min max], multiple ranges can be specified 
 +etarange 0 360                ! etarange [min max], multiple ranges can be specified 
 +domega 0.5                        ! domega [stepsize] in omega, degrees 
 +omegarange -28 28 ! omegarange [min max] degrees, multiple ranges can be specified 
 +filespecs peaks-I-Want-To-Index.gve grains-I-found.log ! filespecs [gvecsfile grainsfile] 
 +cuts 15 0.3 0.5                ! cuts [min_measuments min_completeness min_uniqueness] 
 +eulerstep 5                ! eulerstep [stepsize] : angle step size in Euler space 
 +uncertainties 0.02 1 2    ! 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 
 +</​code>​
  
- ​python pickrings.py ../​Simulation/​simu_FoCIF_omega-28-28_1000grains.flt parameters.prm fewr_ideal.flt+======Loops with GrainSpotter======
  
-After that, run again the indexation (idx_0.py) with your new flt file.+It can be efficients to run multiple loops of grainspotter indexingsThe underlying concept is as follow 
 +  * Step 1: 
 +    * run grainspotter ​with a given set of specifications,​ remove all indexed peaks from the GVE file
 +    * repeat the above operation X times, 
 +    * this will provide a first set of grains, which should be the most reliable 
 +  * Step 2: 
 +    * Lower the tolerance, and repeat X loops of indexings, remove indexed peaks at each step 
 +    * this will provide a second set of grains, which may have to be checked 
 +  * Repeat steps above, lowering tolerances progressively in order to optimize the number of indexed grains, while making sure that all indexed grains make sense 
 +  * Combined the results of all indexings into one main log file, with all indexed files from the loop.
  
-For now, we still miss grains...+There are several TIMEleSS tools to help you with this process 
 +  * [[processing:​remove-used-gve-updated|timelessClearGVEGrains]] 
 +  * [[processing:​grainspotter-merge|Merge GrainSpotter output files]] 
 +  * [[processing:​extracteulerangles|ExtractEulerAngles.py]]
  
 +An example of a GrainSpotter loop is provided in a [[processing:​advanced_indexing_with_grainspotter|dedicated page]].
processing/indexing_with_grainspotter.1559897546.txt.gz · Last modified: 2019/06/07 08:52 by matthias