scopeinpython.fluspect
FLUSPECT-B-Cx, the SCOPE variant (getFluspect.Cx.SCOPE) that SCOPE’s
own leaf-optics pipeline actually calls – not the same function as
toolsrtm.fluspect_cx despite very similar code. Direct port of
SCOPEinR/R/fluspect_Cx_forSCOPE.R.
Key differences from toolsrtm.fluspect_cx:
A caller-configurable
step(nm) controls theMb/Mfexcitation-emission matrix resolution. SCOPE’s own defaultstep=5gives 53x71 matrices;step=1gives 211x351 (like the non-SCOPE version, but see below – still not numerically identical).The SIF response is scaled by
stepitself, not a fixed constant (the non-SCOPE version always usesint=5regardless of its own fixed 1 nm grid).A single combined
Mb/Mfpair (onephispectrum), same as the non-SCOPE Cx version.Uses
match()(correct) for locating excitation/emission wavelengths within the full grid – does not have theintersect()indexing bug documented intoolsrtm.fluspect.fluspect_cx().Uses
SCOPEinR::optipar2021.Pro.CXas its real default optical parameter table (optipar2017.ProspectDis missingKp/Kcbcdata needed for the PROSPECT-PRO/CxKallformula).
FLUSPECT-B-Cx leaf model, SCOPE variant: like toolsrtm.fluspect_cx,
but with a caller-configurable step (nm) for the excitation/emission
wavelength grids used to build the Mb/Mf fluorescence matrices
(default step=5 -> 53x71 matrices, vs. the non-SCOPE version’s fixed 1 nm
-> 211x351), and a single combined Mb/Mf pair (using one phi
spectrum) rather than separate PSI/PSII matrices.
Direct port of SCOPEinR/R/fluspect_Cx_forSCOPE.R (getFluspect.Cx.SCOPE),
the function SCOPE’s own leaf-optics pipeline (fluspect_mSCOPE.R)
actually calls – not the same function as ToolsRTM::getFluspect.Cx
(toolsrtm.fluspect_cx), despite very similar code: the two diverge in
the wavelength-grid construction (step-parameterized here) and the SIF
scaling constant (step here vs. a fixed int=5 there). Confirmed via
direct inspection this SCOPE variant uses match() for Iwlf (not the
intersect() bug in ToolsRTM::getFluspect.Cx), so it does not
reproduce that bug – it doesn’t have it in the first place.
Reuses toolsrtm.fluspect._prospect_mesophyll() for the shared
PROSPECT-with-interfaces-removed core (identical math to the non-SCOPE
Cx path).
- class scopeinpython.fluspect.FluspectCxScopeResult(lambda_: 'np.ndarray', refl: 'np.ndarray', tran: 'np.ndarray', kChlrel: 'np.ndarray', kCarrel: 'np.ndarray', Mb: 'np.ndarray', Mf: 'np.ndarray')[source]
Bases:
object- Parameters:
- scopeinpython.fluspect.get_fluspect_cx_scope(Cab, Car, EWT, LMA, Cs, N, fqe, Cx, Prot, CBC, Anth, step=5.0)[source]
FLUSPECT-B-Cx (SCOPE variant). Direct port of
SCOPEinR::getFluspect.Cx.SCOPE. ReturnsNoneiffqe <= 0(same reasoning astoolsrtm.fluspect_cx: the R source’sMb/Mf– and everything else – are only ever returned inside itsif (fqe_ > 0) {...}block).- Parameters:
Cab (float)
Car (float)
EWT (float)
LMA (float)
Cs (float)
N (float)
fqe (float)
Cx (float)
Prot (float)
CBC (float)
Anth (float)
step (float)
- Return type:
FluspectCxScopeResult | None