/** \file Declaration of class CloudResult \author Segev BenZvi \version $Id$ \date 15 Aug 2007 */ #ifndef _atm_CloudResult_h_ #define _atm_CloudResult_h_ #include #include namespace atm { /** \class CloudResult \brief Store the obscuration of an FD pixel by a cloud in the field of view The main component of this class is an FD pixel coverage fraction given by the lidars and IR cloud cameras. Note that the cloud cameras give pixel coverage without any information of the cloud height, making it impossible to distinguish a low-altitude stratus cloud which distorts shower light from a a high-altitude cirrus cloud which affects very few showers. If the coverage from an IR camera is combined with the cloud height from the lidar, very high-altitude clouds are be disregarded when determining pixel coverage. The "Coverage" property describes the fractional cloud coverage in a pixel, with or without lidar cloud height data. Cutting obscured pixels without lidar data should be considered a conservative cut since lidar data may result in readmission of a pixel that was tagged as obscured by the cloud cameras. \author Segev BenZvi \date 15 Aug 2007 \author Steffen Mueller \date 7 Sep 2010 \ingroup atm */ class CloudResult { public: CloudResult(); CloudResult(const float coverage, const bool hasLidar, const bool isValid = true); bool IsValid() const { return fIsValid; } bool HaveLidar() const { return fHaveLidar; } float GetCoverage() const { return fCloudCoverage; } std::string GetCoverageString() const; private: bool fIsValid; bool fHaveLidar; float fCloudCoverage; }; inline std::ostream& operator<<(std::ostream& os, const CloudResult& cr) { return os << cr.GetCoverageString(); } } #endif // _atm_CloudResult_h_