Go to the documentation of this file.00001
00002
00003
00004
00005 #ifndef ECALDCCWEIGHTBUILDER_CC
00006 #define ECALDCCWEIGHTBUILDER_CC
00007
00008
00009 #include "FWCore/Framework/interface/EDAnalyzer.h"
00010 #include "SimCalorimetry/EcalSimAlgos/interface/EBShape.h"
00011 #include "SimCalorimetry/EcalSimAlgos/interface/EEShape.h"
00012 #include "DataFormats/EcalDetId/interface/EBDetId.h"
00013 #include "DataFormats/EcalDetId/interface/EEDetId.h"
00014 #include "CondFormats/EcalObjects/interface/EcalIntercalibConstants.h"
00015 #include "FWCore/Framework/interface/EventSetup.h"
00016 #include "FWCore/Framework/interface/ESHandle.h"
00017 #include "Geometry/CaloGeometry/interface/CaloGeometry.h"
00018
00019 #include <vector>
00020 #include <map>
00021 #include <inttypes.h>
00022
00023
00024 class EcalElectronicsMapping;
00025
00028 class EcalDccWeightBuilder: public edm::EDAnalyzer {
00029 private:
00030 enum mode_t { WEIGHTS_FROM_CONFIG, COMPUTE_WEIGHTS};
00031
00032
00033 public:
00037 EcalDccWeightBuilder(edm::ParameterSet const& ps);
00038
00041 virtual ~EcalDccWeightBuilder(){};
00042
00043
00044 public:
00045
00050 void analyze(const edm::Event& event, const edm::EventSetup& es);
00051
00052 private:
00053
00067 void
00068 computeWeights(const EcalShapeBase& shape,
00069 int binOfMax, double timePhase,
00070 int iFirst0, int nWeights, int iSkip0,
00071 std::vector<double>& result);
00072
00073 void computeAllWeights(bool withIntercalib);
00074
00075 int encodeWeight(double w);
00076
00077 double decodeWeight(int W);
00078
00079 void unbiasWeights(std::vector<double>& weights,
00080 std::vector<int32_t>* encodedWeigths);
00081
00086 double intercalib(const DetId& detId);
00087
00088 void writeWeightToAsciiFile();
00089 void writeWeightToRootFile();
00090 void writeWeightToDB();
00091
00092
00093 void dbId(const DetId& detId, int& fedId, int& smId, int& ruId,
00094 int& xtalId) const;
00095
00102 template<class T>
00103 void sort(const std::vector<T>& a,
00104 std::vector<int>& s,
00105 bool decreasingOrder = false);
00106
00107
00108
00109 protected:
00110 private:
00111 int dcc1stSample_;
00112 int sampleToSkip_;
00113 int nDccWeights_;
00116 std::vector<double> inputWeights_;
00117 std::string mode_;
00118 mode_t imode_;
00119 bool dccWeightsWithIntercalib_;
00120 bool writeToDB_;
00121 bool writeToAsciiFile_;
00122 bool writeToRootFile_;
00123 std::string asciiOutputFileName_;
00124 std::string rootOutputFileName_;
00125 std::string dbSid_;
00126 std::string dbUser_;
00127 std::string dbPassword_;
00128 std::string dbTag_;
00129 int dbVersion_;
00130 bool sqlMode_;
00131
00132 edm::ESHandle<CaloGeometry> geom_;
00133
00134 EcalIntercalibConstantMap& calibMap_;
00135 EcalIntercalibConstantMap emptyCalibMap_;
00136 std::map<DetId, std::vector<int> > encodedWeights_;
00137
00138 static const double weightScale_;
00139 const EcalElectronicsMapping* ecalElectronicsMap_;
00140
00141 static const int ecalDccFedIdMin = 601;
00142 static const int ecalDccFedIdMax = 654;
00143 static const int nDccs = ecalDccFedIdMax-ecalDccFedIdMin+1;
00144 };
00145
00146 #endif //ECALDCCWEIGHTBUILDER_CC not defined