9 #include <det/Detector.h>
11 #include <fdet/FDetector.h>
13 #include <fdet/Telescope.h>
14 #include <fdet/Pixel.h>
16 #include <atm/AerosolDB.h>
17 #include <atm/OverallQualityDB.h>
18 #include <atm/AerosolZone.h>
19 #include <atm/AttSlice.h>
20 #include <atm/PFSlice.h>
21 #include <atm/MolecularZone.h>
22 #include <atm/LidarDB.h>
23 #include <atm/LidarZone.h>
24 #include <atm/VAODSlice.h>
25 #include <atm/MolecularIds.h>
26 #include <atm/MolecularDB.h>
27 #include <atm/GOESDB.h>
29 #include <fwk/CentralConfig.h>
31 #include <utl/ErrorLogger.h>
32 #include <utl/AugerUnits.h>
33 #include <utl/AugerException.h>
34 #include <utl/Point.h>
35 #include <fwk/CoordinateSystemRegistry.h>
37 #include <cppunit/extensions/HelperMacros.h>
38 #include <tst/Verify.h>
58 const double gNCloudProbabilityLevels = 5;
66 CPPUNIT_TEST(testGOESDB);
74 CPPUNIT_TEST(testAerosolDB);
77 CPPUNIT_TEST(testAttSlice);
80 CPPUNIT_TEST(testPFSlice);
92 CPPUNIT_TEST(testMolecularLayer);
95 CPPUNIT_TEST(testMolecularDBNotFound);
98 CPPUNIT_TEST(testAerosolDBNotFound);
101 CPPUNIT_TEST(testOverallQualityDB);
105 CPPUNIT_TEST(testLidarDB);
108 CPPUNIT_TEST(testVAODSlice);
119 CPPUNIT_TEST_SUITE_END();
125 CentralConfig::GetInstance(BOOTSTRAPFILE);
135 Detector& det = Detector::GetInstance();
140 int numZonesAerosol1 = 0;
142 zIt != aerosol1.
ZonesEnd(); ++zIt) {
144 if (zIt->GetName() ==
"Coihueco") {
145 CPPUNIT_ASSERT(Verify<CloseTo>(zIt->GetNorthing(), 6114141.8*
meter));
146 CPPUNIT_ASSERT(Verify<CloseTo>(zIt->GetEasting(), 445346.*
meter));
150 if (zIt->GetName() ==
"twilightZone") {
151 CPPUNIT_ASSERT(Verify<CloseTo>(zIt->GetNorthing(), 144924.*
meter));
152 CPPUNIT_ASSERT(Verify<CloseTo>(zIt->GetEasting(), 1233122.*
meter));
156 if (zIt->GetName() ==
"Los Morados") {
157 CPPUNIT_ASSERT(Verify<CloseTo>(zIt->GetNorthing(), 6094571.*
meter));
158 CPPUNIT_ASSERT(Verify<CloseTo>(zIt->GetEasting(), 498885.*
meter));
163 CPPUNIT_ASSERT(Verify<Equal>(numZonesAerosol1, 3));
169 int numZonesAerosol2 = 0;
173 CPPUNIT_ASSERT(Verify<Equal>(numZonesAerosol2, 2));
179 Detector& det = Detector::GetInstance();
185 zIt != aerosolDB.
ZonesEnd(); ++zIt) {
187 double bogusValue = 0;
188 int iSliceNumber = 1;
192 attIt != zIt->AttSlicesEnd(); ++attIt) {
194 if (zIt->GetName() ==
"Coihueco") {
195 CPPUNIT_ASSERT(Verify<CloseTo>(attIt->GetMinHeight(), bogusValue*
meter));
196 CPPUNIT_ASSERT(Verify<CloseTo>(attIt->GetMaxHeight(), (bogusValue+10.)*
meter));
198 CPPUNIT_ASSERT(Verify<CloseTo>(attIt->GetVAOD(), (bogusValue+11.)));
199 CPPUNIT_ASSERT(Verify<CloseTo>(attIt->GetMinVAOD(), (bogusValue+12.)));
200 CPPUNIT_ASSERT(Verify<CloseTo>(attIt->GetMaxVAOD(), (bogusValue+13.)));
202 CPPUNIT_ASSERT(Verify<CloseTo>(attIt->GetAttAlpha(), (77.0 + bogusValue)/
meter));
203 CPPUNIT_ASSERT(Verify<CloseTo>(attIt->GetMinAttAlpha(), (0.77 - bogusValue/100.)/
meter));
204 CPPUNIT_ASSERT(Verify<CloseTo>(attIt->GetMaxAttAlpha(), (0.77 + bogusValue/100.)/
meter));
206 CPPUNIT_ASSERT(Verify<CloseTo>(attIt->GetAttLambda(), 78.0 + bogusValue));
207 CPPUNIT_ASSERT(Verify<CloseTo>(attIt->GetMinAttLambda(), 0.78 - bogusValue/100.));
208 CPPUNIT_ASSERT(Verify<CloseTo>(attIt->GetMaxAttLambda(), 0.77 + bogusValue/100.));
211 if (zIt->GetName() ==
"twilightZone") {
212 CPPUNIT_ASSERT(Verify<CloseTo>(attIt->GetMinHeight(), 0.*
m));
213 CPPUNIT_ASSERT(Verify<CloseTo>(attIt->GetMaxHeight(), 10000.*
m));
214 CPPUNIT_ASSERT(Verify<CloseTo>(attIt->GetVAOD(), 10000.));
215 CPPUNIT_ASSERT(Verify<CloseTo>(attIt->GetMinVAOD(), 10.));
216 CPPUNIT_ASSERT(Verify<CloseTo>(attIt->GetMaxVAOD(), 10.));
219 CPPUNIT_ASSERT(Verify<CloseTo>(attIt->GetAttAlpha(), 10./
m));
220 CPPUNIT_ASSERT(Verify<CloseTo>(attIt->GetMinAttAlpha(), 1./
m));
221 CPPUNIT_ASSERT(Verify<CloseTo>(attIt->GetMaxAttAlpha(), 2./
m));
223 CPPUNIT_ASSERT(Verify<CloseTo>(attIt->GetAttLambda(), 20.0));
224 CPPUNIT_ASSERT(Verify<CloseTo>(attIt->GetMinAttLambda(), 2.));
225 CPPUNIT_ASSERT(Verify<CloseTo>(attIt->GetMaxAttLambda(), 3.));
228 if (zIt->GetName() ==
"Los Morados") {
229 CPPUNIT_ASSERT(Verify<CloseTo>(attIt->GetMinHeight(), 0.*
meter));
230 CPPUNIT_ASSERT(Verify<CloseTo>(attIt->GetMaxHeight(), 1000.*
meter));
231 CPPUNIT_ASSERT(Verify<CloseTo>(attIt->GetVAOD(), 1000. ));
232 CPPUNIT_ASSERT(Verify<CloseTo>(attIt->GetMinVAOD(), 10.));
233 CPPUNIT_ASSERT(Verify<CloseTo>(attIt->GetMaxVAOD(), 10.));
235 CPPUNIT_ASSERT(Verify<CloseTo>(attIt->GetAttAlpha(), 100./
m));
236 CPPUNIT_ASSERT(Verify<CloseTo>(attIt->GetMinAttAlpha(), 10./
m));
237 CPPUNIT_ASSERT(Verify<CloseTo>(attIt->GetMaxAttAlpha(), 11./
m));
239 CPPUNIT_ASSERT(Verify<CloseTo>(attIt->GetAttLambda(), 200.));
240 CPPUNIT_ASSERT(Verify<CloseTo>(attIt->GetMinAttLambda(), 20.));
241 CPPUNIT_ASSERT(Verify<CloseTo>(attIt->GetMaxAttLambda(), 21.));
253 Detector& theDet = Detector::GetInstance();
261 zIt != aerosolDB.
ZonesEnd(); ++zIt) {
264 pfIt != zIt->PFSlicesEnd(); ++pfIt) {
266 if (zIt->GetName() ==
"Coihueco") {
267 CPPUNIT_ASSERT(Verify<CloseTo>(pfIt->GetMinHeight(), 0.*
meter));
268 CPPUNIT_ASSERT(Verify<CloseTo>(pfIt->GetMaxHeight(), 10000.*
meter));
270 CPPUNIT_ASSERT(Verify<CloseTo>(pfIt->GetF(), 1.0));
271 CPPUNIT_ASSERT(Verify<CloseTo>(pfIt->GetFError(), 0.2));
272 CPPUNIT_ASSERT(Verify<CloseTo>(pfIt->GetG(), 2.0));
273 CPPUNIT_ASSERT(Verify<CloseTo>(pfIt->GetGError(), 0.3));
275 CPPUNIT_ASSERT(Verify<CloseTo>(pfIt->GetFLambda(), 4.));
276 CPPUNIT_ASSERT(Verify<CloseTo>(pfIt->GetFLambdaError(), 0.4));
277 CPPUNIT_ASSERT(Verify<CloseTo>(pfIt->GetGLambda(), 5.));
278 CPPUNIT_ASSERT(Verify<CloseTo>(pfIt->GetGLambdaError(), 0.5));
281 if (zIt->GetName() ==
"twilightZone") {
282 CPPUNIT_ASSERT(Verify<CloseTo>(pfIt->GetMinHeight(), 0.*
m));
283 CPPUNIT_ASSERT(Verify<CloseTo>(pfIt->GetMaxHeight(), 11000.*
m));
285 CPPUNIT_ASSERT(Verify<CloseTo>(pfIt->GetF(), 66.));
286 CPPUNIT_ASSERT(Verify<CloseTo>(pfIt->GetFError(), 0.66));
287 CPPUNIT_ASSERT(Verify<CloseTo>(pfIt->GetG(), 77.));
288 CPPUNIT_ASSERT(Verify<CloseTo>(pfIt->GetGError(), 0.77));
290 CPPUNIT_ASSERT(Verify<CloseTo>(pfIt->GetFLambda(), 88.));
291 CPPUNIT_ASSERT(Verify<CloseTo>(pfIt->GetFLambdaError(), 0.88));
292 CPPUNIT_ASSERT(Verify<CloseTo>(pfIt->GetGLambda(), 99.));
293 CPPUNIT_ASSERT(Verify<CloseTo>(pfIt->GetGLambdaError(), 0.99));
296 if (zIt->GetName() ==
"Los Morados") {
297 CPPUNIT_ASSERT(Verify<CloseTo>(pfIt->GetMinHeight(), 0.*
m));
298 CPPUNIT_ASSERT(Verify<CloseTo>(pfIt->GetMaxHeight(), 1100.*
m));
300 CPPUNIT_ASSERT(Verify<CloseTo>(pfIt->GetF(), 66.));
301 CPPUNIT_ASSERT(Verify<CloseTo>(pfIt->GetFError(), 0.66));
302 CPPUNIT_ASSERT(Verify<CloseTo>(pfIt->GetG(), 77.));
303 CPPUNIT_ASSERT(Verify<CloseTo>(pfIt->GetGError(), 0.77));
305 CPPUNIT_ASSERT(Verify<CloseTo>(pfIt->GetFLambda(), 88.));
306 CPPUNIT_ASSERT(Verify<CloseTo>(pfIt->GetFLambdaError(), 0.88));
307 CPPUNIT_ASSERT(Verify<CloseTo>(pfIt->GetGLambda(), 99.));
308 CPPUNIT_ASSERT(Verify<CloseTo>(pfIt->GetGLambdaError(), 0.99));
317 Detector& det = Detector::GetInstance();
323 int numZonesMolecular1 = 0;
325 zIt != molecular1.
ZonesEnd(); ++zIt) {
327 if (zIt->GetName() ==
"CLF") {
328 CPPUNIT_ASSERT(Verify<CloseTo>(zIt->GetNorthing(), 6095769.0*
meter));
329 CPPUNIT_ASSERT(Verify<CloseTo>(zIt->GetEasting(), 469378.0*
meter));
331 ++numZonesMolecular1;
334 CPPUNIT_ASSERT(Verify<Equal>(numZonesMolecular1, 1));
340 int numZonesMolecular2 = 0;
342 zIt != molecular2.
ZonesEnd(); ++zIt)
343 ++numZonesMolecular2;
345 CPPUNIT_ASSERT(Verify<Equal>(numZonesMolecular2, 2));
352 CPPUNIT_ASSERT(m1.
GetProfileName() == string(
"Malargue January model"));
354 CPPUNIT_ASSERT(m2.GetProfileName() == string(
"Malargue February model"));
356 CPPUNIT_ASSERT(m3.GetProfileName() == string(
"Malargue March model"));
358 CPPUNIT_ASSERT(m4.GetProfileName() == string(
"Malargue April model"));
360 CPPUNIT_ASSERT(m5.GetProfileName() == string(
"Malargue May model"));
362 CPPUNIT_ASSERT(m6.GetProfileName() == string(
"Malargue June model"));
364 CPPUNIT_ASSERT(m7.GetProfileName() == string(
"Malargue July model"));
366 CPPUNIT_ASSERT(m8.GetProfileName() == string(
"Malargue August model"));
368 CPPUNIT_ASSERT(m9.GetProfileName() == string(
"Malargue September model"));
370 CPPUNIT_ASSERT(m10.GetProfileName() == string(
"Malargue October model"));
372 CPPUNIT_ASSERT(m11.GetProfileName() == string(
"Malargue November model"));
374 CPPUNIT_ASSERT(m12.GetProfileName() == string(
"Malargue December model"));
380 Detector& det = Detector::GetInstance();
386 zIt != molecularDB.
ZonesEnd(); ++zIt) {
388 [[maybe_unused]]
double bogusValue = 0;
389 int iLayerNumber = 1;
393 sIt != zIt->LayersEnd(); ++sIt) {
395 if (zIt->GetName() ==
"Coihueco") {
397 const double dummy = iLayerNumber;
398 const double dummy_err = dummy/10.;
400 CPPUNIT_ASSERT(Verify<CloseTo>(sIt->GetHeight(), dummy*
meter));
401 CPPUNIT_ASSERT(Verify<CloseTo>(sIt->GetHeightError(), dummy_err*
meter));
402 CPPUNIT_ASSERT(Verify<CloseTo>(sIt->GetDepth(), dummy*
g/
cm2));
403 CPPUNIT_ASSERT(Verify<CloseTo>(sIt->GetDepthError(), dummy_err*
g/
cm2));
404 CPPUNIT_ASSERT(Verify<CloseTo>(sIt->GetPressure(), dummy*100.*
pascal));
405 CPPUNIT_ASSERT(Verify<CloseTo>(sIt->GetPressureError(), dummy_err*100.*
pascal));
406 CPPUNIT_ASSERT(Verify<CloseTo>(sIt->GetTemperature(), dummy*
kelvin));
407 CPPUNIT_ASSERT(Verify<CloseTo>(sIt->GetTemperatureError(), dummy_err*
kelvin));
408 CPPUNIT_ASSERT(Verify<CloseTo>(sIt->GetHumidity(), dummy*
percent));
409 CPPUNIT_ASSERT(Verify<CloseTo>(sIt->GetHumidityError(), dummy_err*
percent));
410 CPPUNIT_ASSERT(Verify<CloseTo>(sIt->GetWindSpeed(), dummy*
m/
s));
411 CPPUNIT_ASSERT(Verify<CloseTo>(sIt->GetWindSpeedError(), dummy_err*
m/
s));
412 CPPUNIT_ASSERT(Verify<CloseTo>(sIt->GetAirDensity(), dummy*
kg/
m3));
413 CPPUNIT_ASSERT(Verify<CloseTo>(sIt->GetAirDensityError(), dummy_err*
kg/
m3));
416 if (zIt->GetName() ==
"twilightZone") {
417 CPPUNIT_ASSERT(Verify<CloseTo>(sIt->GetHeight(), 1.*
m));
418 CPPUNIT_ASSERT(Verify<CloseTo>(sIt->GetHeightError(), .1*
m));
419 CPPUNIT_ASSERT(Verify<CloseTo>(sIt->GetDepth(), 2.*
g/
cm2));
420 CPPUNIT_ASSERT(Verify<CloseTo>(sIt->GetDepthError(), .2*
g/
cm2));
421 CPPUNIT_ASSERT(Verify<CloseTo>(sIt->GetPressure(), 3.*100.*
pascal));
422 CPPUNIT_ASSERT(Verify<CloseTo>(sIt->GetPressureError(), .3*100.*
pascal));
423 CPPUNIT_ASSERT(Verify<CloseTo>(sIt->GetTemperature(), 4.*
kelvin));
424 CPPUNIT_ASSERT(Verify<CloseTo>(sIt->GetTemperatureError(), .4*
kelvin));
425 CPPUNIT_ASSERT(Verify<CloseTo>(sIt->GetHumidity(), 5.*
percent));
426 CPPUNIT_ASSERT(Verify<CloseTo>(sIt->GetHumidityError(), .5*
percent));
427 CPPUNIT_ASSERT(Verify<CloseTo>(sIt->GetWindSpeed(), 6.*
m/
s));
428 CPPUNIT_ASSERT(Verify<CloseTo>(sIt->GetWindSpeedError(), .6*
m/
s));
429 CPPUNIT_ASSERT(Verify<CloseTo>(sIt->GetAirDensity(), 7.*
kg/
m3));
430 CPPUNIT_ASSERT(Verify<CloseTo>(sIt->GetAirDensityError(), .7*
kg/
m3));
433 if (zIt->GetName() ==
"Los Morados") {
434 CPPUNIT_ASSERT(Verify<CloseTo>(sIt->GetHeight(), 11.*
m));
435 CPPUNIT_ASSERT(Verify<CloseTo>(sIt->GetHeightError(), 1.*
m));
436 CPPUNIT_ASSERT(Verify<CloseTo>(sIt->GetDepth(), 12.*
g/
cm2));
437 CPPUNIT_ASSERT(Verify<CloseTo>(sIt->GetDepthError(), 2.*
g/
cm2));
438 CPPUNIT_ASSERT(Verify<CloseTo>(sIt->GetPressure(), 0.*100.*
pascal));
439 CPPUNIT_ASSERT(Verify<CloseTo>(sIt->GetPressureError(), 0.*100.*
pascal));
440 CPPUNIT_ASSERT(Verify<CloseTo>(sIt->GetTemperature(), 0.*
kelvin));
441 CPPUNIT_ASSERT(Verify<CloseTo>(sIt->GetTemperatureError(), 0.*
kelvin));
442 CPPUNIT_ASSERT(Verify<CloseTo>(sIt->GetHumidity(), 0.));
443 CPPUNIT_ASSERT(Verify<CloseTo>(sIt->GetHumidityError(), 0.));
444 CPPUNIT_ASSERT(Verify<CloseTo>(sIt->GetWindSpeed(), 0.*
m/
s));
445 CPPUNIT_ASSERT(Verify<CloseTo>(sIt->GetWindSpeedError(), 0.*
m/
s));
446 CPPUNIT_ASSERT(Verify<CloseTo>(sIt->GetAirDensity(), 0.*
kg/
m3));
447 CPPUNIT_ASSERT(Verify<CloseTo>(sIt->GetAirDensityError(), 0.*
kg/
m3));
458 Detector& det = Detector::GetInstance();
465 zIt != molecular1.
ZonesEnd(); ++zIt)
468 CPPUNIT_ASSERT(Verify<Equal>(nzones, 0));
474 Detector& det = Detector::GetInstance();
486 CPPUNIT_ASSERT(Verify<Equal>(nzones, 0));
492 Detector& det = Detector::GetInstance();
513 Detector& det = Detector::GetInstance();
525 Detector& det = Detector::GetInstance();
530 int numLidarZones = 0;
535 if (zIt->GetName() ==
"Coihueco") {
536 CPPUNIT_ASSERT(Verify<CloseTo>(zIt->GetNorthing(), 6114141.8*
meter));
537 CPPUNIT_ASSERT(Verify<CloseTo>(zIt->GetEasting(), 445346.*
meter));
539 CPPUNIT_ASSERT(Verify<CloseTo>(zIt->GetCloudCoverage(), .2));
540 CPPUNIT_ASSERT(Verify<CloseTo>(zIt->GetLowestCloudHeight(), 2482*
meter));
541 CPPUNIT_ASSERT(Verify<CloseTo>(zIt->GetLowestCloudThickness(), 449*
meter));
542 CPPUNIT_ASSERT(Verify<CloseTo>(zIt->GetLowestCloudVAOD(), 0.168));
543 CPPUNIT_ASSERT(Verify<CloseTo>(zIt->GetLidarMaxHeight(), 8000*
meter));
548 if (zIt->GetName() ==
"myZone") {
549 CPPUNIT_ASSERT(Verify<CloseTo>(zIt->GetNorthing(), 6083819*
meter));
550 CPPUNIT_ASSERT(Verify<CloseTo>(zIt->GetEasting(), 464292.5*
meter));
552 CPPUNIT_ASSERT(Verify<CloseTo>(zIt->GetCloudCoverage(), .3));
553 CPPUNIT_ASSERT(Verify<CloseTo>(zIt->GetLowestCloudHeight(), 1000*
meter));
554 CPPUNIT_ASSERT(Verify<CloseTo>(zIt->GetLowestCloudThickness(), 200*
meter));
555 CPPUNIT_ASSERT(Verify<CloseTo>(zIt->GetLowestCloudVAOD(), 0.2));
560 CPPUNIT_ASSERT(Verify<Equal>(numLidarZones, 2));
566 Detector& det = Detector::GetInstance();
575 double bogusValue = 0.;
576 int iSliceNumber = 1;
580 vaodIt != zIt->VAODSlicesEnd(); ++vaodIt) {
582 if (zIt->GetName() ==
"Coihueco") {
583 CPPUNIT_ASSERT(Verify<CloseTo>(vaodIt->GetMinHeight(), bogusValue*
meter));
584 CPPUNIT_ASSERT(Verify<CloseTo>(vaodIt->GetMaxHeight(), (bogusValue+10.)*
meter));
585 CPPUNIT_ASSERT(Verify<CloseTo>(vaodIt->GetVAOD() , bogusValue+11.));
586 CPPUNIT_ASSERT(Verify<CloseTo>(vaodIt->GetMinVAOD() , bogusValue+12.));
587 CPPUNIT_ASSERT(Verify<CloseTo>(vaodIt->GetMaxVAOD() , bogusValue+13.));
590 if (zIt->GetName() ==
"myZone") {
591 CPPUNIT_ASSERT(Verify<CloseTo>(vaodIt->GetMinHeight(), 1.*
meter));
592 CPPUNIT_ASSERT(Verify<CloseTo>(vaodIt->GetMaxHeight(), 1000.*
meter));
593 CPPUNIT_ASSERT(Verify<CloseTo>(vaodIt->GetVAOD(), 0.5));
594 CPPUNIT_ASSERT(Verify<CloseTo>(vaodIt->GetMinVAOD(), 0.4));
595 CPPUNIT_ASSERT(Verify<CloseTo>(vaodIt->GetMaxVAOD(), 0.6));
607 Detector& det = Detector::GetInstance();
629 Detector& det = Detector::GetInstance();
634 CPPUNIT_ASSERT(Verify<Equal>(goesdb.
HasData(0),
false));
643 for (
unsigned int idx = 0; idx <= 100; ++idx) {
645 CPPUNIT_ASSERT(Verify<Equal>(cloudP,
int(idx*4/100)/gNCloudProbabilityLevels));
649 for (
unsigned int idx = 0; idx <= 100; ++idx) {
651 CPPUNIT_ASSERT(Verify<Equal>(cloudP,
int(idx*4/100)/gNCloudProbabilityLevels));
661 for (
unsigned int idx = 0; idx <= 100; ++idx) {
663 CPPUNIT_ASSERT(Verify<Equal>(cloudP, 3./gNCloudProbabilityLevels));
676 vector<unsigned int> pixelId;
682 Reader r(TESTGOES, Reader::eNONE);
688 for (vector<unsigned int>::iterator i = pixelId.begin(); i != pixelId.end(); ++i) {
689 CPPUNIT_ASSERT(Verify<Equal>(prob[*i]/gNCloudProbabilityLevels, goesDB.
GetCloudProbability(*i)));
696 CPPUNIT_ASSERT(Verify<Equal>(goesDB.
GetCloudProbability(pCLF), 2./gNCloudProbabilityLevels));
709 const int fgNumEasting = 30;
710 const double fgStartEasting = 553.2;
711 const double fgStartNorthing = 9736.34;
712 const double fgDeltaEasting = 2394.9;
713 const double fgDeltaNorthing = 5493.03;
718 int northPosition = 0;
719 for (vector<unsigned int>::iterator i = pixelId.begin(); i != pixelId.end(); ++i) {
720 const double eastPosition = *i % fgNumEasting;
728 const double x = eastPosition*fgDeltaEasting + fgStartEasting + fgDeltaEasting/6.1;
729 const double y = northPosition*fgDeltaNorthing + fgStartNorthing + fgDeltaNorthing/2;
730 const Point p(x, y, 0, csDetectorSite);
735 CPPUNIT_ASSERT(Verify<Equal>(cloudP4, prob[*i]/gNCloudProbabilityLevels));
736 CPPUNIT_ASSERT(Verify<Equal>(cloudP3, prob[*i]/gNCloudProbabilityLevels));
738 if (eastPosition == fgNumEasting - 1) {
748 const double distance = (pXLF - pCLF).GetMag();
749 double currDistance = 0;
750 double maxPropBetweenCLFandXLF = 0;
751 while (currDistance < distance) {
753 if (currProb > maxPropBetweenCLFandXLF)
754 maxPropBetweenCLFandXLF = currProb;
755 currDistance += 10*
m;
759 CPPUNIT_ASSERT(Verify<Equal>(cloudProbCLFXLF, maxPropBetweenCLFandXLF));
763 CPPUNIT_ASSERT(Verify<Equal>(cloudProbCLFXLF, cloudProbXLFCLF));
770 Detector& det = Detector::GetInstance();
780 Detector& det = Detector::GetInstance();
793 Detector& det = Detector::GetInstance();
boost::transform_iterator< InternalZoneFunctor, InternalZoneIterator, const LidarZone & > ZoneIterator
ZoneIterator returns a pointer to an LidarZone.
ZoneIterator ZonesBegin() const
Beginning of the collection of valid Zones.
void Update(const utl::TimeStamp &time, const bool invData=true, const bool invComp=true, const bool forceRadio=false)
Update detector: deletes currently constructed stations and sets new time.
Top of the interface to Atmosphere information.
boost::transform_iterator< InternalZoneFunctor, InternalZoneIterator, const MolecularZone & > ZoneIterator
ZoneIterator returns a pointer to a MolecularZone.
void testOverallQualityDBNotFound()
Detector description interface for GOES cloud data.
const OverallQualityDB & GetOverallQualityDB() const
low-level interface to portion of the database summarizing overall quality
bool HasCloudFraction() const
ZoneIterator ZonesEnd() const
End of the collection of valid Zones.
void testOverallQualityDB()
ZoneIterator ZonesEnd() const
End of the collection of valid Zones.
Detector description interface for data in the Atm_Molecular database.
void testMolecularDBNotFound()
Base class for exceptions trying to access non-existing components.
void testMolecularLayer()
Branch GetChild(const std::string &childName) const
Get child of this Branch by child name.
utl::CoordinateSystemPtr GetSiteCoordinateSystem() const
Get the coordinate system for the site.
CPPUNIT_TEST_SUITE_REGISTRATION(testAiresShowerFile)
const Pixel & GetPixel(const unsigned int pixelId) const
Get Pixel by id, throw utl::NonExistentComponentException if n.a.
Branch GetTopBranch() const
Get the top Branch (represents same entity as document node)
void testGOESDBNotFound3()
boost::indirect_iterator< InternalVAODSliceIterator, const VAODSlice & > VAODSliceIterator
VAODSlice iterator returns a pointer to the attenuation data slice for this zone. ...
const atm::Atmosphere & GetAtmosphere() const
boost::transform_iterator< InternalZoneFunctor, InternalZoneIterator, const AerosolZone & > ZoneIterator
ZoneIterator returns a pointer to an AerosolZone.
boost::shared_ptr< const CoordinateTransformer > CoordinateSystemPtr
Shared pointer for coordinate systems.
Utility for parsing XML files.
Class representing a document branch.
Exception to use in case requested data not found in the database with detailed printout.
Class for loading and storing a collection of aerosol data.
double GetCloudProbability(const unsigned int pixelId) const
Get cloud probability from the pixel id.
const GOESDB & GetGOESDB() const
low-level interface to the cloud information from the GOES database
Top of the hierarchy of the detector description interface.
double GetMaximumCloudProbability(const utl::Point &pos1, const utl::Point &pos2) const
Get max. cloud probability along line of sight between pos1 and pos2.
const MolecularDB & GetMolecularDB(const MolecularIds::ProfileId &id) const
Low-level interface to portion of the database with molecular information.
void testAerosolDBNotFound()
void GetData(bool &b) const
Overloads of the GetData member template function.
double GetMinCloudBase() const
const Telescope & GetTelescope() const
Access the telescope this Pixel belongs to.
AxialVector Normalized(const AxialVector &v)
boost::indirect_iterator< InternalAttSliceIterator, const AttSlice & > AttSliceIterator
AttSlice iterator returns a pointer to the attenuation data slice for this zone.
ZoneIterator ZonesBegin() const
Beginning of the collection of valid Zones.
std::string GetProfileName() const
Return the name of profile type for this MolecularDB.
September Malargue model.
float GetCloudFraction() const
how much of pixel is obscured by clouds
boost::indirect_iterator< InternalLayerIterator, const MolecularLayer & > LayerIterator
Layer iterator returns a pointer to the molecular data slice for this zone.
Detector description interface for LidarDB-realted data.
ZoneIterator ZonesEnd() const
End of the collection of valid Zones.
const AerosolDB & GetAerosolDB() const
Low-level interface to portion of the database with aerosol information.
void testGOESDBNotFound1()
double GetCloudCoverage() const
utl::CoordinateSystemPtr Get(const std::string &id)
Get a well-known Coordinate System.
bool HasData(const unsigned int pixelId) const
Check if cloud probability data exists for a given pixel at the current time.
Access to database describing overall atmospheric quality.
void testGOESDBNotFound2()
boost::indirect_iterator< InternalPFSliceIterator, const PFSlice & > PFSliceIterator
PFSlice Iterator returns a pointer to the phase function data slice for this zone.
const LidarDB & GetLidarDB() const
low-level interface to portion of the database with cloud data from lidar analysis ...
double GetHorizontalUniformity() const
ZoneIterator ZonesBegin() const
Beginning of the collection of valid Zones.