Hi John,
Wow, you guys are really "drilling down"! Good for you!
The output you describe is only used to calculate the variances for the on and off-peak intensities. Because as you know, in order to calculate the variances, the intensities must first be expressed as raw photons. Perhaps the best way to explain the output you are seeing is to provide the code for those calculations.
Sub TypeCalculateOneSigma(mode As Integer, ii As Integer, jj As Integer, tAverage As TypeAverage, sample() As TypeSample)
' Adjust square roots because the counts are normalized to cps
' mode = 1 calculate 1 sigmas for on-peak counts
' mode = 2 calculate 1 sigmas for hi-peak counts
' mode = 3 calculate 1 sigmas for lo-peak counts
ierror = False
On Error GoTo TypeCalculateOneSigmaError
Dim i As Integer
Dim onaverage As TypeAverage
Dim hiaverage As TypeAverage
Dim loaverage As TypeAverage
Dim bmaverage As TypeAverage
Dim ctaverage As TypeAverage
' Calculate average count times
If mode% = 1 Then
Call MathArrayAverage(onaverage, sample(1).OnTimeData!(), sample(1).Datarows%, sample(1).LastElm%, sample())
If ierror Then Exit Sub
End If
If mode% = 2 Then
Call MathArrayAverage(hiaverage, sample(1).HiTimeData!(), sample(1).Datarows%, sample(1).LastElm%, sample())
If ierror Then Exit Sub
End If
If mode% = 3 Then
Call MathArrayAverage(loaverage, sample(1).LoTimeData!(), sample(1).Datarows%, sample(1).LastElm%, sample())
If ierror Then Exit Sub
End If
' Calculate average beam currents for each element
If Not sample(1).CombinedConditionsFlag Then
Call MathAverage(bmaverage, sample(1).OnBeamCounts!(), sample(1).Datarows%, sample())
If ierror Then Exit Sub
Else
Call MathArrayAverage(bmaverage, sample(1).OnBeamCountsArray!(), sample(1).Datarows%, sample(1).LastElm%, sample())
If ierror Then Exit Sub
End If
' Calculate average count data
If mode% = 1 Then
Call MathArrayAverage(ctaverage, sample(1).OnPeakCounts!(), sample(1).Datarows%, sample(1).LastElm%, sample())
If ierror Then Exit Sub
End If
If mode% = 2 Then
Call MathArrayAverage(ctaverage, sample(1).HiPeakCounts!(), sample(1).Datarows%, sample(1).LastElm%, sample())
If ierror Then Exit Sub
End If
If mode% = 3 Then
Call MathArrayAverage(ctaverage, sample(1).LoPeakCounts!(), sample(1).Datarows%, sample(1).LastElm%, sample())
If ierror Then Exit Sub
End If
' Denormalize counts for beam drift and deadtime
For i% = ii% To jj%
If UseBeamDriftCorrectionFlag Then
If Not sample(1).CombinedConditionsFlag Then
Call DataCorrectDataBeamDrift2(ctaverage.averags!(i%), bmaverage.averags!(1)) ' de-normalize for beam
If ierror Then Exit Sub
Else
Call DataCorrectDataBeamDrift2(ctaverage.averags!(i%), bmaverage.averags!(i%)) ' de-normalize for beam
If ierror Then Exit Sub
End If
End If
If UseDeadtimeCorrectionFlag And sample(1).CrystalNames$(i%) <> EDS_CRYSTAL$ Then
Call DataCorrectDataDeadTime2(ctaverage.averags!(i%), sample(1).DeadTimes!(i%)) ' de-normalize for deadtime
If ierror Then Exit Sub
End If
Next i%
' Denormalize average counts for average count time
For i% = ii% To jj%
If mode% = 1 Then ctaverage.averags!(i%) = ctaverage.averags!(i%) * onaverage.averags!(i%)
If mode% = 2 Then ctaverage.averags!(i%) = ctaverage.averags!(i%) * hiaverage.averags!(i%)
If mode% = 3 Then ctaverage.averags!(i%) = ctaverage.averags!(i%) * loaverage.averags!(i%)
Next i%
' Type out debug data
If VerboseMode Then
msg$ = vbCrLf & "ELEM: "
For i% = ii% To jj%
msg$ = msg$ & Format$(sample(1).Elsyms$(i%) & " " & sample(1).Xrsyms$(i%), a80$)
Next i%
Call IOWriteLog(msg$)
If mode% = 1 Then msg$ = "AVGON:"
If mode% = 2 Then msg$ = "AVGHI:"
If mode% = 3 Then msg$ = "AVGLO:"
For i% = ii% To jj%
If mode% = 1 Then msg$ = msg$ & MiscAutoFormat$(onaverage.averags!(i%))
If mode% = 2 Then msg$ = msg$ & MiscAutoFormat$(hiaverage.averags!(i%))
If mode% = 3 Then msg$ = msg$ & MiscAutoFormat$(loaverage.averags!(i%))
Next i%
Call IOWriteLog(msg$)
' Type average beam currents
msg$ = "AVGBM:"
For i% = ii% To jj%
If Not sample(1).CombinedConditionsFlag Then
msg$ = msg$ & MiscAutoFormat$(bmaverage.averags!(1))
Else
msg$ = msg$ & MiscAutoFormat$(bmaverage.averags!(i%))
End If
Next i%
Call IOWriteLog(msg$)
' Type current raw counts
msg$ = "COUNTS"
For i% = ii% To jj%
msg$ = msg$ & MiscAutoFormat$(ctaverage.averags!(i%))
Next i%
Call IOWriteLog(msg$)
End If
' Now calculate the square root on the actual raw data
For i% = ii% To jj%
If ctaverage.averags!(i%) > 0# Then
tAverage.Sqroots!(i%) = Sqr(ctaverage.averags!(i%))
Else
tAverage.Sqroots!(i%) = 0#
End If
Next i%
' Type current square roots
If VerboseMode Then
msg$ = "SQRT1:"
For i% = ii% To jj%
msg$ = msg$ & MiscAutoFormat$(tAverage.Sqroots!(i%))
Next i%
Call IOWriteLog(msg$)
End If
' Now normalize to count time
For i% = ii% To jj%
If mode% = 1 And onaverage.averags!(i%) <> 0# Then
tAverage.Sqroots!(i%) = tAverage.Sqroots!(i%) / onaverage.averags!(i%)
End If
If mode% = 2 And hiaverage.averags!(i%) <> 0# Then
tAverage.Sqroots!(i%) = tAverage.Sqroots!(i%) / hiaverage.averags!(i%)
End If
If mode% = 3 And loaverage.averags!(i%) <> 0# Then
tAverage.Sqroots!(i%) = tAverage.Sqroots!(i%) / loaverage.averags!(i%)
End If
Next i%
' Type current square roots
If VerboseMode Then
msg$ = "SQRT2:"
For i% = ii% To jj%
msg$ = msg$ & MiscAutoFormat$(tAverage.Sqroots!(i%))
Next i%
Call IOWriteLog(msg$)
End If
' Now normalize to deadtime and beam
For i% = ii% To jj%
If UseDeadtimeCorrectionFlag And sample(1).CrystalNames$(i%) <> EDS_CRYSTAL$ Then
Call DataCorrectDataDeadTime(tAverage.Sqroots!(i%), sample(1).DeadTimes!(i%)) ' normalize for deadtime
If ierror Then Exit Sub
End If
If UseBeamDriftCorrectionFlag Then
If Not sample(1).CombinedConditionsFlag Then
Call DataCorrectDataBeamDrift(tAverage.Sqroots!(i%), bmaverage.averags!(1)) ' normalize for beam
If ierror Then Exit Sub
Else
Call DataCorrectDataBeamDrift(tAverage.Sqroots!(i%), bmaverage.averags!(i%)) ' normalize for beam
If ierror Then Exit Sub
End If
End If
Next i%
' Type current square roots
If VerboseMode Then
msg$ = "SQRT3:"
For i% = ii% To jj%
msg$ = msg$ & MiscAutoFormat$(tAverage.Sqroots!(i%))
Next i%
Call IOWriteLog(msg$)
Call IOWriteLog(vbNullString)
End If
If you see anything amiss please let me know.
john