00001 #ifndef SETUPNAVIGATOR_H_ 00002 #define SETUPNAVIGATOR_H_ 00003 00004 #include "CommandLine.h" 00005 #include "IdSource.h" 00006 #include "AlcapExcept.h" 00007 00008 #include <TSQLiteServer.h> 00009 00010 #include <iostream> 00011 #include <vector> 00012 #include <utility> 00013 #include <map> 00014 00015 MAKE_EXCEPTION(SetupNavigator, Base) 00016 MAKE_EXCEPTION(NoCalibDB, SetupNavigator) 00017 MAKE_EXCEPTION(MissingTable, SetupNavigator) 00018 MAKE_EXCEPTION(UncalibratedRun, SetupNavigator) 00019 MAKE_EXCEPTION(InvalidDetector, SetupNavigator) 00020 00021 class SetupNavigator{ 00022 SetupNavigator(); 00025 ~SetupNavigator(); 00026 public: 00027 static SetupNavigator* Instance(); 00028 00029 void Close(); 00030 00033 void SetCommandLineArgs(const ARGUMENTS& args){fCommandLineArgs = args;} 00034 00035 int GetRunNumber()const{return fCommandLineArgs.run;}; 00036 std::string GetBank(const IDs::channel&)const; 00037 00040 void CacheCalibDB(); 00041 00044 double GetPedestal(const IDs::channel& channel) const; 00047 double GetNoise(const IDs::channel& channel) const ; 00048 double GetCoarseTimeOffset( IDs::source src) const ; 00051 std::pair<double,double> GetEnergyCalibrationConstants(const IDs::channel&) const; 00052 00053 double GetAdcToEnergyGain(const IDs::channel& ch) const{return GetEnergyCalibrationConstants(ch).first;} 00054 double GetAdcToEnergyConstant(const IDs::channel& ch) const{return GetEnergyCalibrationConstants(ch).second;} 00055 00056 void SetPedestalAndNoise(const IDs::channel& channel, double pedestal, double noise); 00057 void SetCoarseTimeOffset(const IDs::source& src, double dt); 00058 00059 private: 00060 00063 bool ReadPedestalAndNoiseValues(); 00066 bool ReadCoarseTimeOffsetValues(); 00069 std::vector<std::string> GetCoarseTimeOffsetColumns(); 00072 bool ReadEnergyCalibrationConstants(); 00073 void OutputCalibCSV(); 00074 00075 bool IsCalibRun() const {return fCommandLineArgs.calib;} 00076 00077 private: 00078 static SetupNavigator* fThis; 00079 ARGUMENTS fCommandLineArgs; 00080 00083 const std::string fSQLiteFilename; 00084 TSQLiteServer* fServer; 00085 const std::string fPedestalNoiseTableName; 00086 const std::string fCoarseTimeOffsetTableName; 00087 const std::string fEnergyCalibrationConstantsTableName; 00088 00091 static std::map<IDs::channel, double> fPedestalValues; 00094 static std::map<IDs::channel, double> fNoiseValues; 00097 static std::map<IDs::source, double> fCoarseTimeOffset; 00100 typedef std::pair<double,double> EnergyCalibRow_t; 00101 static std::map< IDs::channel, EnergyCalibRow_t > fEnergyCalibrationConstants; 00102 00103 }; 00104 00105 inline SetupNavigator* SetupNavigator::Instance(){ 00106 if(!fThis) fThis=new SetupNavigator(); 00107 return fThis; 00108 } 00109 00110 #endif //SETUPNAVIGATOR_H_