function CAL_toDirectionCosineMatrix(eulerAngles) result(matrix)
use CalTypes
type(EulerAngles321) :: eulerAngles
real(kind=double), dimension(:,:), pointer :: matrix
end function
| (1) |
![]() |
(2) |
Please note: The first index of the array returned by
this function indicates the row number of the corresponding boresight
matrix, not the column number. Although this adheres to the usual convention,
it is opposite to the sense of the arrays returned by
OAL_toAttitudeMatrix (see oal)
in which the first index of the array is the column number.
In other words, to translate for example the matrix equation
| (3) |
call CAL_getBoresightMatrix(timestamp, BSM)
call OAL_toAttitudeMatrix(att, ASC)
ASC_trans = transpose(ASC)
INS_trans = matmul(BSM, ASC_trans)
This leaves the array INS_trans adhering to the usual convention, i.e.
the first index of the array INS_trans represents the row number of
the matrix.
| (4) |
function CAL_getEffectiveArea(Efrom, Eto, theta, phi) result(area)
use types
real(kind=double), intent(in) :: Efrom, Eto, &
theta, phi
real(kind=double) :: area
end function
function CAL_getFilterTransmission(Efrom, Eto, theta, phi) &
result(transmission)
use types
real(kind=double), intent(in) :: Efrom, Eto, &
theta, phi
real(kind=double) :: transmission
end function
| accuracyLevel | scheme | description |
| ACCURACY_LOW | analytic | the PSF is constructed using an analytic expressions involving energy/field-angle dependent parameters which are available in the CCF. This mode is supposedly the fastest way to compute the PSF. Please note that the accuracy of this model is very limited and should therefore merely be used if the detailed shape of the PSF does not matter. Consult the Calibration Access and Data Handbook for more information on this especially limitations concerning the evaluation of encircled energies with this model. |
| ACCURACY_MEDIUM | tabular | the PSF is constructed from tabulated data in the CCF, i.e., small maps of PSFs at various fixed energies and off-axis angles; interpolation in E and/or theta is carried out as required; for details please consult the Calibration Access and Data Handbook. |
| ACCURACY_EXTENDED | analytic | the PSF is constructed using an analytic King-Gauss description; see Calibration Access and Data Handbook for details. |
| ACCURACY_HIGH | analytic | the PSF is constructed using a superposition of multiple Gaussians modified by azimuthal terms; see Calibration Access and Data Handbook for details. |
subroutine CAL_psfSetBinSize(psf, binSize)
use CalTypes
type(PsfT) :: psf
type(PsfBinSizeT) :: binSize
end subroutine
function CAL_psfBinSize(psf) result(binSize)
use CalTypes
type(PsfT) :: psf
type(PsfBinSizeT) :: binSize
end function

| (5) |
function CAL_getQuantumEfficiency(Efrom, Eto, rawX, rawY, patternId) &
result(quantumEff)
use types
integer(kind=int16), intent(in) :: rawX, rawY
real(kind=double), intent(in) :: Efrom, Eto
integer(kind=int32), intent(in), optional :: patternId
real(kind=double) :: quantumEff
end function
function CAL_getLargePatterns(Efrom, Eto) &
result(largePatts)
use types
real(kind=double), intent(in) :: Efrom, Eto
real(kind=double) :: largePatts
end function
function CAL_curveWeightedIntegralOver(curve, &
fromValue, toValue) result(value)
use CalTypes
type(CurveT), intent(in) :: curve
real(kind=double), intent(in) :: fromValue, &
toValue
real(kind=double) :: value
end function
subroutine CAL_getRedistribution(eIn, eAxisLoBounds, eAxisHiBounds, &
response, eventType, peakChannel)
use types
real(kind=double), intent(in) :: eIn
real(kind=double), dimension(0:), intent(in) :: eAxisLoBounds,&
eAxisHiBounds
real(kind=double), dimension(:), pointer :: response
integer(kind=int32), intent(in), optional :: eventType
integer(kind=int16), intent(out), optional :: peakChannel
end subroutine