emcCalibrationDataHelper.h

Go to the documentation of this file.
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   // get energy calibration for a given tower.
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   // To give access from ROOT prompt
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