11 #include <top/dbobjects/TOPWavelengthFilter.h>
23 float TOPWavelengthFilter::getBulkTransmittance(
double lambda)
const
25 if (m_transmittances.empty())
return 1;
27 double dlam = lambda - m_lambdaFirst;
28 if (dlam < 0)
return 0;
29 if (dlam > (m_transmittances.size() - 1) * m_lambdaStep)
return m_transmittances.back();
30 unsigned i = int(dlam / m_lambdaStep);
31 if (i > m_transmittances.size() - 2)
return m_transmittances.back();
32 return m_transmittances[i] + (m_transmittances[i + 1] - m_transmittances[i]) / m_lambdaStep * (dlam - i * m_lambdaStep);
36 bool TOPWavelengthFilter::isConsistent()
const
38 if (getName().empty())
return true;
40 if (m_lambdaFirst <= 0)
return false;
41 if (m_lambdaStep <= 0)
return false;
42 if (m_transmittances.empty())
return false;
47 void TOPWavelengthFilter::print(
const std::string& title)
const
49 TOPGeoBase::printUnderlined(title);
50 cout <<
" first point: " << getLambdaFirst() <<
" nm";
51 cout <<
", step: " << getLambdaStep() <<
" nm" << endl;
52 cout <<
" bulk transmittances: [";
53 for (
const auto& trE : m_transmittances) cout << setprecision(3) << trE <<
", ";
55 if (getName().empty()) {
56 cout <<
"(Old geometry payload, filter transmittance is included in QE)" << endl;