Skip to content

SQ2.50 Procedural Framework: Part 7c (ExtractGroup)

sbodorkos edited this page Sep 5, 2019 · 4 revisions

After completing the "Part 7b" block on each Grouped-sample sheet, Ludwig plunges straight into the process of extracting coherent populations (based on the user-specified Group Date Type), via an automated process.

A note on confusing terminology: Ludwig was in the habit of referring to analyses subdivided and 'grouped' on the basis of a common spot-prefix (i.e. the basis for the tree structure in Squid3) as 'grouped-samples', and I have largely followed that usage. These 'grouped-samples' (i.e. shared-prefix analyses) should not be conflated with the 'Group' part of the upcoming 'Extract Group' subroutine, and its components. Within each grouped-sample, 'Extract Group' refers to the identification of (the largest possible) subset population of analyses (and uncertainties) for which Group Date Type values are sufficiently similar that calculating a WtdAv for the subset population yields A probability of equivalence higher than the user-specified threshold value. So essentially, "Extract Group" is an automated "P-hacking" process undertaken within each 'grouped-sample' dataset.

Recall that for reference, SQUID 2.50 retains a master-list of Group Date Types, indexed by the integer piGrpDateType as follows:

0 = Total 206Pb/238U Age (by default, this is not available to users)
1 = 204corr 206Pb/238U Age
2 = 207corr 206Pb/238U Age
3 = 208corr 206Pb/238U Age
4 = 204corr 207Pb/206Pb Age
5 = 204corr 208Pb/232Th Age
6 = 207corr 208Pb/232Th Age
7 = 208corr 207Pb/206Pb Age

Ludwig's code starts with a simple test to make sure the population of analyses for the grouped-sample is large enough for ExtractGroup to bother with:

plHdrRw = flHeaderRow --picks up index-number of column header-row.
--Note that Lrw is the index-number of the last row of data.

If (Lrw - plHdrRw) <= 3
  TooFew = TRUE --no attempt to ExtractGroup when n (population) < 4
Else
  TooFew = FALSE
End If

If (TooFew = FALSE) AND (pbExtractAgeGroups = TRUE)

  Set ar2 = frSr(Frw, GrpAgetypeCol, Lrw, 1 + GrpAgetypeCol)
  --This defines ar2 as a 2-column array comprising the user-specified Group Date Type,
  --its uncertainty (1sigma absolute), from first row to last **WITHIN** the 
  --'grouped-sample' population under consideration
  
  ExtractGroup False, pdMinProb, ar2, AgeResult:=AgeVal, TypeCol:=GrpAgetypeCol
  --Subroutine ExtractGroup to be documented separately
  
End If --(TooFew = FALSE) AND (pbExtractAgeGroups = TRUE)

2019-09-05 We have come back out of ExtractGroup, into top-level GroupThis. The next and possibly last segment of code is the following, which uses common-Pb corrected Tera-Wasserburg ratios and their 1sigma percentage errors in order to automate the calculation (with auto-rejections) of a Ludwig (1998) 'Concordia age'. In essence, this is a two-dimensional weighted mean (the mechanics of which are already described in LudwigLibrary), for which the input data is delineated via a process analogours to the recently-described subroutine FindCoherentGroup.

In SQUID 2.50, the code simply finds the 204Pb-corrected set of Tera-Wasserburg ratios (4 columns: 238U/206Pb*, its 1sigma %err, 207*/206*, and its 1sigma %err) and performs the Concordia Age calculation on those columns. In Squid3, for Prawn XML files where 208Pb has been measured (which is the vast majority of U-Th-Pb geochronology configurations), there is no reason why the following routine could/should not be repeated on the 208Pb-corrected set of Tera-Wasserburg ratios:

If (piPb46col > 0) AND (piPb76col > 0) AND (piPb6U8_totCol > 0)
--i.e. columns ["204/206"], ["207/206"] and ["Total 206Pb/238U"] all exist

  FindStr "238/206*", , Col, plHdrRw --Col is the index-number of the first column
  --containing "238/206*" in the header-row. In SQUID 2.50 practice, this means Col
  --locates the 204corr_238U_206Pb ratio-value. 

  If (Col > 0) --found the Tera-Wasserburg column-set

    If (AgeVal = 0) OR (AgeVal > 300) --interesting constraint, not previously known
    --Presumably Ludwig believed it was too difficult to measure concordant data on
    --populations with weighted mean dates between 0 Ma and 300 Ma, and that the
    --Concordia Age calculation was therefore not worthwhile. I think that belief is
    --contestable, and that attempting Concordia Age calculations for ALL AgeVals
    --"does no harm" - if Ludwig is right, I think it is more likely that the
    --calculation simply 'fails' (which is fine), rather than yielding an inaccurate
    --result (which would be more of a concern... but I don't think it would happen).

      ReDim inpdat[1 To 1, 1 To 5]  --Ludwig commented this line:
      --"If not DIMmed then sqConcAge crashes because WtdXYmean call becomes illegal"

      sqConcAge TRUE --subroutine to be documented separately

    End If --(AgeVal = 0) OR (AgeVal > 300); as above, consider removing this If
  
  End If --(Col > 0)

End If (piPb46col > 0) AND (piPb76col > 0) AND (piPb6U8_totCol > 0)

As far as I can tell, this represents the final stage of end-to-end data-processing. Part 7c, which is the final 'subpart' of Procedural Framework Part 7, terminates here. And there is no Part 8.

Clone this wiki locally