Go to the documentation of this file.00001 #include "L1TriggerConfig/L1ScalesProducers/interface/L1CaloInputScalesGenerator.h"
00002
00003
00004 #include <memory>
00005 #include <iostream>
00006 using std::cout;
00007 using std::endl;
00008 #include <iomanip>
00009 using std::setprecision;
00010 #include <fstream>
00011 using std::ofstream;
00012
00013
00014
00015 #include "FWCore/Framework/interface/Frameworkfwd.h"
00016
00017 #include "FWCore/Framework/interface/MakerMacros.h"
00018 #include "FWCore/Framework/interface/EventSetup.h"
00019 #include "FWCore/Framework/interface/ESHandle.h"
00020
00021 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00022
00023 #include "CalibFormats/CaloTPG/interface/CaloTPGTranscoder.h"
00024 #include "CalibFormats/CaloTPG/interface/CaloTPGRecord.h"
00025 #include "CalibCalorimetry/EcalTPGTools/interface/EcalTPGScale.h"
00026 #include "DataFormats/EcalDetId/interface/EcalTrigTowerDetId.h"
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040 L1CaloInputScalesGenerator::L1CaloInputScalesGenerator(const edm::ParameterSet& iConfig)
00041
00042 {
00043
00044
00045 }
00046
00047
00048 L1CaloInputScalesGenerator::~L1CaloInputScalesGenerator()
00049 {
00050
00051
00052
00053
00054 }
00055
00056
00057
00058
00059
00060
00061
00062 void
00063 L1CaloInputScalesGenerator::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup)
00064 {
00065 using namespace edm;
00066
00067
00068 ESHandle<CaloTPGTranscoder> caloTPGTranscoder;
00069 iSetup.get<CaloTPGRecord>().get(caloTPGTranscoder);
00070
00071 EcalTPGScale* ecalTPGScale = new EcalTPGScale();
00072 ecalTPGScale->setEventSetup(iSetup);
00073
00074 double output;
00075 ofstream scalesFile("L1CaloInputScales_cfi.py");
00076
00077
00078
00079
00080 scalesFile << "import FWCore.ParameterSet.Config as cms\n" <<endl;
00081
00082 scalesFile << "L1CaloInputScalesProducer =cms.ESProducer(\"L1CaloInputScalesProducer\"," << endl;
00083 scalesFile << "L1EcalEtThresholdsPositiveEta = cms.vdouble(" << endl;
00084
00085
00086
00087 int nEntries = 0;
00088
00089
00090
00091
00092 for (unsigned short absIeta = 1; absIeta <= 28; absIeta++)
00093 {
00094 EcalSubdetector subdet = ( absIeta <= 17 ) ? EcalBarrel : EcalEndcap ;
00095
00096 for (unsigned short input = 0; input <= 0xFF; input++)
00097 {
00098 output = ecalTPGScale->getTPGInGeV( (unsigned int) input,
00099 EcalTrigTowerDetId(1, subdet,
00100 absIeta, 1));
00101 scalesFile << setprecision (8) << output;
00102 nEntries++;
00103
00104 if (absIeta == 28 && input == 0xFF)
00105 {
00106 scalesFile << "),";
00107 }
00108 else if(nEntries>254)
00109 {
00110 scalesFile <<")+cms.vdouble(";
00111 nEntries=0;
00112 }
00113 else
00114 {
00115 scalesFile << ", ";
00116 }
00117 }
00118 scalesFile << endl;
00119 }
00120
00121
00122
00123 scalesFile << endl << "\tL1EcalEtThresholdsNegativeEta = cms.vdouble(" << endl;
00124
00125 nEntries=0;
00126
00127 for (unsigned short absIeta = 1; absIeta <= 28; absIeta++)
00128 {
00129 EcalSubdetector subdet = ( absIeta <= 17 ) ? EcalBarrel : EcalEndcap ;
00130
00131 for (unsigned short input = 0; input <= 0xFF; input++)
00132 {
00133
00134 output = ecalTPGScale->
00135 getTPGInGeV( (unsigned int) input, EcalTrigTowerDetId(-1, subdet,
00136 absIeta, 2));
00137 scalesFile << setprecision (8) << output;
00138 nEntries++;
00139
00140
00141
00142 if (absIeta == 28 && input == 0xFF)
00143 {
00144 scalesFile << "),";
00145 }
00146 else if(nEntries>254)
00147 {
00148 scalesFile <<")+cms.vdouble(";
00149 nEntries=0;
00150 }
00151 else
00152 {
00153 scalesFile << ", ";
00154 }
00155 }
00156 scalesFile << endl;
00157 }
00158
00159
00160
00161 scalesFile << endl << "\tL1HcalEtThresholdsPositiveEta = cms.vdouble(" << endl;
00162
00163
00164
00165 nEntries=0;
00166 for (unsigned short absIeta = 1; absIeta <= 32; absIeta++)
00167 {
00168 for (unsigned short input = 0; input <= 0xFF; input++)
00169 {
00170 output = caloTPGTranscoder->hcaletValue(absIeta, input);
00171 scalesFile << setprecision (8) << output ;
00172 nEntries++;
00173
00174
00175 if (absIeta == 32 && input == 0xFF)
00176 {
00177 scalesFile << "),";
00178 }
00179 else if(nEntries>254)
00180 {
00181 scalesFile <<")+cms.vdouble(";
00182 nEntries=0;
00183 }
00184 else
00185 {
00186 scalesFile << ", ";
00187 }
00188 }
00189 scalesFile << endl;
00190 }
00191
00192
00193
00194 scalesFile << endl << "\tL1HcalEtThresholdsNegativeEta = cms.vdouble(" << endl;
00195
00196 nEntries=0;
00197
00198 for (unsigned short absIeta = 1; absIeta <= 32; absIeta++)
00199 {
00200 for (unsigned short input = 0; input <= 0xFF; input++)
00201 {
00202 output = caloTPGTranscoder->hcaletValue(-absIeta, input);
00203 scalesFile << setprecision (8) << output ;
00204 nEntries++;
00205
00206
00207 if (absIeta == 32 && input == 0xFF)
00208 {
00209 scalesFile << ")";
00210 }
00211 else if(nEntries>254)
00212 {
00213 scalesFile <<")+cms.vdouble(";
00214 nEntries=0;
00215 }
00216 else
00217 {
00218 scalesFile << ", ";
00219 }
00220 }
00221 scalesFile << endl;
00222 }
00223
00224
00225 scalesFile << ")" << endl;
00226
00227 scalesFile.close();
00228 }
00229
00230
00231
00232 void
00233 L1CaloInputScalesGenerator::beginJob()
00234 {
00235 }
00236
00237
00238 void
00239 L1CaloInputScalesGenerator::endJob() {
00240 }
00241