COMCIFS / Powder_Dictionary

CIF definitions for powder diffraction
4 stars 4 forks source link

PD_PEAK needs diffractogram_id? and some musings on it's use in PD_AMORPHOUS #129

Open rowlesmr opened 1 year ago

rowlesmr commented 1 year ago

This might be a little "stream of conciousness"y. .

From rereading #23 and the definition of PD_PEAK, I have two questions:

_pd_peak.id is also used in PD_AMORPHOUS, PD_BACKGROUND and REFLN. PD_AMORPHOUS is keyed on peak_id and phase_id. PD_BACKGROUND is keyed on id and diffractogram_id. REFLN is keyed on _refln.index_h|k|l and _pd_refln.phase_id.

Consider a simple example of a synthetic mixture of CRYST_PHASE and AMOR_PHASE (think quartz and silica fume) as below (ignore data_diffraction_pattern_2 for now...). CRYST_PHASE is a bog-standard normal crystal structure. AMOR_PHASE is defined by some peaks. How does AMOR_PHASE know where to go to get it's peaks?

.

I also stumbled upon another issue: Consider the same phases in a second synthetic mixture (now unignore data_diffraction_pattern_2 ), where it is the exact same materials but in different amounts . Also assume I do a constrained refinement, so other parameters that should be the same, are the same.

It makes sense to have a single AMOR_PHASE, as it literally is the same material. But I don't think we can point the same phase to two different diffraction patterns which have different PD_PEAK parameters (in this case, intensity). We need a way to designate relative intensities in the amorphous phase. Also, in the case of multiple diffraction patterns, how can we point to different diffractogram_ids.

data_cryst_phase
  _pd_phase.id   CRYST_PHASE
  # this is a normal structure data block

data_amor_phase
  _pd_phase.id   AMOR_PHASE

  loop_
  _pd_amorphous.peak_id  # How does it know where to get the peaks from?
  1 
  2

data_diffraction_pattern_1
  _pd_diffractogram.id   DIFFRACTOGRAM_A

  loop_
  _pd_background.id
  _pd_background.peak_id
  a   3
  b   4

  loop_
  _pd_peak.id
  _pd_peak.2theta_centroid
  _pd_peak.width_2theta
  _pd_peak.intensity
  1   23.43   0.45    123
  2   24.59   0.34    234
  3   15.34   5.23   1003
  4   39.54   8.42   5923

  loop_
  _pd_phase_mass.phase.id
  _pd_phase_mass.percent
  CRYST_PHASE   50
  AMOR_PHASE    30
  STANDARD      20

  _pd_qpa_internal_std.mass_percent   20
  _pd_qpa_internal_std.phase_id       STANDARD
  _pd_qpa_overall.method              ZMV

  loop_
  _pd_meas.2theta
  _pd_meas.intensity_total
  _pd_calc.intensity_total
  5.00   1223   1234
  5.02   1324   1235
  #...

data_diffraction_pattern_2
  _pd_diffractogram.id   DIFFRACTOGRAM_B

  loop_
  _pd_background.id
  _pd_background.peak_id
  a   3
  b   4

  loop_
  _pd_peak.id
  _pd_peak.2theta_centroid
  _pd_peak.width_2theta
  _pd_peak.intensity
  1   23.43   0.45    246
  2   24.59   0.34    468
  3   16.54   6.43    500
  4   41.03   7.54   2300

  loop_
  _pd_phase_mass.phase.id
  _pd_phase_mass.percent
  CRYST_PHASE   20
  AMOR_PHASE    60
  STANDARD      20

  _pd_qpa_internal_std.mass_percent   20
  _pd_qpa_internal_std.phase_id       STANDARD
  _pd_qpa_overall.method              ZMV

  loop_
  _pd_meas.2theta
  _pd_meas.intensity_total
  _pd_calc.intensity_total
  5.00   643   640
  5.02   656   641
  #...

The PD_PEAK category description, just FYi

save_PD_PEAK

    _definition.id                PD_PEAK
    _definition.scope             Category
    _definition.class             Loop
    _definition.update            2014-06-20
    _description.text
;
    This section contains peak information extracted from the
    measured or, if present, the processed diffractogram. Each
    peak in this table will have a unique label (see _pd_peak.id).
    The reflections and phases associated with each peak will be
    specified in other sections (see REFLN and PD_PHASE).

    Note that peak positions are customarily determined from the
    processed diffractogram and thus corrections for position
    and intensity will have been previously applied.
;
    _name.category_id             PD_GROUP
    _name.object_id               PD_PEAK
    _category_key.name            '_pd_peak.id'

save_

I need to have a think.

rowlesmr commented 1 year ago

If PD_AMORPHOUS gets its own peak info, positions would have to be in d, and intensities be relative, a la Le Bail.

rowlesmr commented 1 year ago

Consider the setup in the data below.

There are two diffractograms, each with two phases - one normal crystalline, one be amorphous. Each diffractogram has been modelled with the same two phases, so there are only two data blocks containing phase information.

How do we indicate that the peaks in each of the diffractograms actually belong to the same amorphous phase, and that the peaks in the amorphous phase are represented by two different sets of peak?

data_amor_phase
  _pd_phase.id   AMOR_PHASE

# what goes here?

data_cryst_phase
  _pd_phase.id   CRYST_PHASE
  # this is a normal structure data block

data_diffraction_pattern_1
  _pd_diffractogram.id   DIFFRACTOGRAM_A

  loop_
  _pd_peak.id   # all of these peaks belong to the amorphous phase
  _pd_peak.2theta_centroid
  _pd_peak.width_2theta
  _pd_peak.intensity
  1   23.39   0.25   1246
  2   37.37   0.57   1258
  3   42.51   0.76   1942

  loop_
  _pd_phase_mass.phase.id
  _pd_phase_mass.percent
  CRYST_PHASE   40
  AMOR_PHASE    60

  loop_
  _pd_meas.2theta
  _pd_meas.intensity_total
  _pd_calc.intensity_total
  5.00   1223   1234
  5.02   1324   1235
  #...

data_diffraction_pattern_2
  _pd_diffractogram.id   DIFFRACTOGRAM_B

  loop_
  _pd_peak.id   # all of these peaks belong to the amorphous phase
  _pd_peak.2theta_centroid
  _pd_peak.width_2theta
  _pd_peak.intensity   # the intensities are halved, as there is half the amount of amorphous phase present
  a   23.39   0.25   623
  b   37.37   0.57   629
  c   42.51   0.76   971

  loop_
  _pd_phase_mass.phase.id
  _pd_phase_mass.percent
  CRYST_PHASE   70
  AMOR_PHASE    30

  loop_
  _pd_meas.2theta
  _pd_meas.intensity_total
  _pd_calc.intensity_total
  5.00   643   640
  5.02   656   641
  #...

Some ideas (of course, suggestions for better names are more than welcome):

data_amor_phase
  _pd_phase.id   AMOR_PHASE

  loop_
  _pd_amorphous_peak.id
  _pd_amorphous_peak.d_spacing
  _pd_amorphous_peak.rel_intensity
  _pd_amorphous_peak.corresponding_peaks
  i     4.413   0.642   [ [ 1 DIFFRACTOGRAM_A ] [ a DIFFRACTOGRAM_B ] ]
  ii    2.792   0.648   [ [ 2 DIFFRACTOGRAM_A ] [ b DIFFRACTOGRAM_B ] ]
  iii   2.467   1       [ [ 3 DIFFRACTOGRAM_A ] [ c DIFFRACTOGRAM_B ] ]

where _pd_amorphous_peak.corresponding_peaks is a list of _pd_peak.id and _pd_peak.diffractogram_id couplets, which go on as long as there are more diffractograms to add. Or maybe, rather than a list of couplets, just a list of alternating values: [ 1 DIFFRACTOGRAM_A a DIFFRACTOGRAM_B ]

Similar, but split up

data_amor_phase
  _pd_phase.id   AMOR_PHASE

  loop_
  _pd_amorphous_peak.id
  _pd_amorphous_peak.d_spacing
  _pd_amorphous_peak.rel_intensity
  _pd_amorphous_peak.peak_ids
  _pd_amorphous_peak.diffractograms_ids
  i     4.413   0.642   [ 1 a ]   [ DIFFRACTOGRAM_A DIFFRACTOGRAM_B ]
  ii    2.792   0.648   [ 2 b ]   [ DIFFRACTOGRAM_A DIFFRACTOGRAM_B ]
  iii   2.467   1       [ 3 c ]   [ DIFFRACTOGRAM_A DIFFRACTOGRAM_B ]

where _pd_amorphous_peak.peak_ids is a list of _pd_peak.ids and _pd_amorphous_peak.diffractograms_ids is a list of _pd_peak.diffractogram_ids, where the nth entry is each list are a pair.

A more CIF1.1-style solution

data_amor_phase
  _pd_phase.id   AMOR_PHASE

  loop_
  _pd_amorphous_peak.id
  _pd_amorphous_peak.d_spacing
  _pd_amorphous_peak.rel_intensity
  i     4.413   0.642   
  ii    2.792   0.648  
  iii   2.467   1  

  loop_
  _pd_amorphous_lookup.peak_id
  _pd_amorphous_lookup.diffractogram_id
  _pd_amorphous_lookup.amorphous_peak_id
  1   DIFFRACTOGRAM_A   i  
  2   DIFFRACTOGRAM_A   ii 
  3   DIFFRACTOGRAM_A   iii
  a   DIFFRACTOGRAM_B   i  
  b   DIFFRACTOGRAM_B   ii 
  c   DIFFRACTOGRAM_B   iii

.

In all of these, _pd_amorphous_peak.d_spacing gives the peak position of an amorphous peak (in angstroms), and _pd_amorphous_peak.rel_intensity gives an intensity in units that are consistent with |F|^2, inasmuch as they need to be acted upon by things such as the LP factor in order to match the intensities in the diffractogram. The intensities are also relative, so you can have peaks from the same phase in different diffractograms with different observed intensities, but the same relative intensities.