00001 #ifndef __EMCCALIBRATIONDATAHELPER_H__
00002 #define __EMCCALIBRATIONDATAHELPER_H__
00003
00004 #include <map>
00005 #include <set>
00006 #include <string>
00007 #include <vector>
00008
00009 #ifndef __PHTIMESTAMP_H__
00010 #include "PHTimeStamp.h"
00011 #endif
00012 #ifndef __EMCMANAGEABLE_H__
00013 #include "emcManageable.h"
00014 #endif
00015
00016 class emcCalFEM;
00017 class emcCalibrationData;
00018 class emcFEMList;
00019
00038 class emcCalibrationDataHelper
00039 {
00040 public:
00043 emcCalibrationDataHelper(int runnumber, bool initall=true,
00044 emcManageable::EStorage source=emcManageable::kDB_Pg,
00045 const char* emcalparts="emcal");
00046
00050 emcCalibrationDataHelper(int runnumber, const PHTimeStamp& ts,
00051 bool initall=true,
00052 emcManageable::EStorage source=emcManageable::kDB_Pg,
00053 const char* emcalparts="emcal");
00054
00055 ~emcCalibrationDataHelper();
00056
00057 #ifndef __CINT__
00058
00060 const emcCalFEM* getCalibration(int femAbsolutePosition,
00061 const std::string& whatKind);
00062
00065 const emcCalFEM* getCalibrationFast(int femAbsolutePosition,
00066 const std::string& whatKind);
00067
00069 const emcCalibrationData* getCalibrationData(const std::string& what,
00070 size_t number=0);
00071
00072 #endif
00073
00074 const emcCalFEM* getCalibration(int femAbsolutePosition,
00075 const char* whatKind);
00076
00079 const emcCalFEM* getCalibrationFast(int femAbsolutePosition,
00080 const char* whatKind);
00081
00082 const emcCalibrationData* getCalibrationData(const char* what,
00083 size_t number=0);
00084
00085
00086
00087 float getEnergyCalibration(int towerid);
00088 float getEnergyCalibrationFast(int towerid);
00089
00106 float getGainBaseLine(int isector,
00107 const char* what="value",
00108 const char* details="0:xmax:-3:-9:-15:0",
00109 bool reallySilent=false);
00110
00111 const char* gainBaseLineCalculationDetails(int isector) const;
00112
00113 int runNumber(void) const { return fRunNumber; }
00114
00115 PHTimeStamp timeStamp(void) const { return fTimeStamp; }
00116
00118 emcFEMList* femlist() const { return fFemList; }
00119
00120 private:
00121
00122 void ctor(int runnumber,
00123 const PHTimeStamp& ts,
00124 bool initall,
00125 emcManageable::EStorage source,
00126 const char* parts);
00127
00128 emcCalFEM* collect(int femAbsolutePosition, const std::string& whatKind);
00129 emcCalibrationData* collectCalibData(const std::string& what,
00130 size_t number);
00131
00132 void initAll(void);
00133 void initECalAtT0(bool normalizationON);
00134
00135 void patch(emcCalFEM& calfem, const std::string& how);
00136
00137 public:
00138
00139 void initGainBaseLine(int isector, const char* details);
00140
00141
00142 emcManageable::EStorage source(const char* what)
00143 { return source(std::string(what)); }
00144
00145 emcManageable::EStorage source(const std::string& what);
00146
00147 bool setSource(const char* what, emcManageable::EStorage datasource)
00148 { return setSource(std::string(what),datasource); }
00149
00150 bool setSource(const std::string& what, emcManageable::EStorage datasource);
00151
00152 private:
00153
00154 emcCalibrationDataHelper(const emcCalibrationDataHelper&);
00155 emcCalibrationDataHelper& operator=(const emcCalibrationDataHelper&);
00156
00157 #ifndef __CINT__
00158 private:
00159 typedef std::map<std::string, std::vector<emcCalFEM*> > TMAP;
00160 typedef std::map<std::string, std::vector<emcCalFEM*> >::iterator TMAPITER;
00161 typedef std::map<std::string, std::vector<emcCalibrationData*> > TCMAP;
00162 typedef std::map<std::string,
00163 std::vector<emcCalibrationData*> >::iterator TCMAPITER;
00164
00165 TMAP fData;
00166 TCMAP fCalibData;
00167 PHTimeStamp fTimeStamp;
00168 std::map<std::string,emcManageable::EStorage> fSources;
00169 class Flavour
00170 {
00171 public:
00172 typedef std::set<int>::const_iterator const_iterator;
00173
00174 Flavour(const std::string& name) :
00175 fName(name) {}
00176
00177 void append(int ifem) { fFems.insert(ifem); }
00178 std::string name() const { return fName; }
00179 const_iterator begin() const { return fFems.begin(); }
00180 const_iterator end() const { return fFems.end(); }
00181 size_t size() const { return fFems.size(); }
00182
00183 private:
00184 std::string fName;
00185 std::set<int> fFems;
00186 };
00187
00188 std::vector<Flavour> fKnownFlavours;
00189 std::vector<float> fECalAtT0;
00190
00191 emcFEMList* fFemList;
00192
00193 class BaseLine
00194 {
00195 public:
00196 BaseLine(float value=0, float error=0, float skew=0, float kurt=0)
00197 : fValue(value), fError(error), fSkewness(skew), fKurtosis(kurt) {}
00198
00199 float value() const { return fValue; }
00200 float error() const { return fError; }
00201 float skewness() const { return fSkewness; }
00202 float kurtosis() const { return fKurtosis; }
00203
00204 private:
00205 float fValue;
00206 float fError;
00207 float fSkewness;
00208 float fKurtosis;
00209 };
00210
00211 typedef std::map<int,BaseLine> TBLMAP;
00212 typedef std::map<int,BaseLine>::iterator TBLMAPITER;
00213
00214 TBLMAP fGainBaseLine;
00215 std::map<int,std::string> fGainBaseLineCalculationDetails;
00216 bool fInitAll;
00217
00218 #endif
00219 int fRunNumber;
00220 int fMaxNumberOfFEMs;
00221 };
00222
00223 #endif