/** \file \brief Description of a camera. \author L. Prado Jr \author S. Argiro \version $Id: Camera.h 19165 2011-05-11 11:53:54Z mabl $ \date 29 Jun 2003 */ #ifndef _fdet_Camera_h_ #define _fdet_Camera_h_ #include namespace fevt { class Pixel; class Channel; } namespace fdet { class Telescope; class Pixel; class Channel; /** \class Camera \brief Description of a camera. \author L. Prado Jr \author S. Argiro \version $Id: Camera.h 19165 2011-05-11 11:53:54Z mabl $ \date 29 Jun 2003 \ingroup fdet */ class Camera { public: unsigned int GetEyeId() const { return fEyeId; } unsigned int GetTelescopeId() const { return fTelescopeId; } /// Average efficiency of the Mercedes double GetMercedesEfficiency() const; /// Average number of reflections from Mercedes double GetMercedesReflections() const; /// Variable to model the Mercedes surface imperfection double GetSigmaNormal() const; /// Radius of focal surface of the camera double GetRadiusFocal() const; /// Base of the Mercedes double GetMercedesBase() const; /// Height of the Mercedes double GetMercedesHeight() const; /// Camera angular pixel spacing double GetEta() const; // electronics parameters int GetSLTTraceLength() const; double GetSLTBinSize() const; int GetSLTTriggerBin() const; int GetFADCTraceLength() const; double GetFADCBinSize() const; int GetFLTBoxcarSumLength() const; int GetFLTProlongation() const; double GetCutoffFrequency() const; double GetGainVariance() const; double GetElectronicNoiseVariance() const; int GetADCDynamicRange() const; double GetElectronicsGain() const; double GetVirtualChannelGainRatio() const; double GetFieldOfView() const; // channel pixel mapping unsigned int GetChannelId(const unsigned int pixelId) const; unsigned int GetChannelId(const fdet::Pixel& pixel) const; unsigned int GetChannelId(const fevt::Pixel& pixel) const; unsigned int GetPixelId(const unsigned int channelId) const; unsigned int GetPixelId(const fdet::Channel& channel) const; unsigned int GetPixelId(const fevt::Channel& channel) const; unsigned int GetFirstRow() const { return 1; } unsigned int GetFirstColumn() const { return 1; } unsigned int GetLastRow() const; unsigned int GetLastColumn() const; void Update(); private: unsigned int fEyeId; unsigned int fTelescopeId; std::string fPhysicalEyeIdString; std::string fPhysicalTelescopeIdString; Camera(const unsigned int eyeId, const unsigned int telId, const std::string& physEyeIdString, const std::string& physTelIdString); ~Camera(); Camera(const Camera&); Camera& operator=(const Camera&); template inline const T& GetCameraData(T*& requestedData, const std::string& property, const std::string& component, const std::string& errorMsg) const; template inline void GetCameraData(T& requestedData, const std::string& property, const std::string& component, const std::string& errorMsg) const; template inline const T& GetCameraDataDiaphragm(T*& requestedData, const std::string& property, const std::string& component, const std::string& errorMsg) const; template inline void GetCameraDataDiaphragm(T& requestedData, const std::string& property, const std::string& component, const std::string& errorMsg) const; template inline void GetCameraChannelData(T& requestedData, const std::string& property, const std::string& component, const std::string& errorMsg, const unsigned int channelId) const; template inline void GetCameraPixelData(T& requestedData, const std::string& property, const std::string& component, const std::string& errorMsg, const unsigned int pixelId) const; // Quantities filled by lazy evaluation // ------------------------------------ mutable double* fRadiusFocal; mutable double* fMercedesBase; mutable double* fMercedesHeight; mutable double* fSigmaNormal; mutable double* fMercedesEfficiency; mutable double* fMercedesReflections; mutable double* fPixelEta; mutable double* fFieldOfView; mutable int* fSLTTriggerBin; //< bin to issue the SLT mutable int* fSLTTraceLenth; //< length of SLT trace mutable double* fSLTBinSize; //< binning of SLT trace mutable int* fFADCTraceLenth; //< length of FADC trace mutable double* fFADCBinSize; //< binning of FADC trace mutable int* fFLTBoxCarmSumLength; mutable int* fFLTProlongation; mutable double* fCutoffFrequency; //< electronics filter characteristics mutable double* fGainVar; //< additional Gaussian fluctuantion to Poisson fluctuations mutable double* fElectNoiseVar; //< Electronic noise variance mutable int * fADCDynamicRange; mutable double* fElecGain; mutable double* fVirtualChannelGainRatio; mutable int* fNRows; //< number of pixel rows in camera mutable int* fNColumns; //< number of pixel columns in camera friend class Telescope; }; } #endif //_fdet_Camera_h_ // Configure (x)emacs for this file ... // Local Variables: // mode: c++ // compile-command: "make -C .. FDetector/Camera.o -k" // End: