File indexing completed on 2024-04-06 11:59:33
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021 #include "CalibTracker/SiPixelESProducers/interface/SiPixelFakeGainOfflineESSource.h"
0022 #include "CalibTracker/SiPixelESProducers/interface/SiPixelDetInfoFileReader.h"
0023 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
0024 #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
0025 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0026
0027
0028
0029 SiPixelFakeGainOfflineESSource::SiPixelFakeGainOfflineESSource(const edm::ParameterSet& conf_)
0030 : fp_(conf_.getParameter<edm::FileInPath>("file")) {
0031 edm::LogInfo("SiPixelFakeGainOfflineESSource::SiPixelFakeGainOfflineESSource");
0032
0033
0034 setWhatProduced(this);
0035 findingRecord<SiPixelGainCalibrationOfflineRcd>();
0036 }
0037
0038 SiPixelFakeGainOfflineESSource::~SiPixelFakeGainOfflineESSource() {
0039
0040
0041 }
0042
0043 std::unique_ptr<SiPixelGainCalibrationOffline> SiPixelFakeGainOfflineESSource::produce(
0044 const SiPixelGainCalibrationOfflineRcd&) {
0045 using namespace edm::es;
0046 SiPixelGainCalibrationOffline* obj = new SiPixelGainCalibrationOffline(25., 30., 2., 3.);
0047 SiPixelDetInfoFileReader reader(fp_.fullPath());
0048 const std::vector<uint32_t>& DetIds = reader.getAllDetIds();
0049
0050
0051 for (std::vector<uint32_t>::const_iterator detit = DetIds.begin(); detit != DetIds.end(); detit++) {
0052 std::vector<char> theSiPixelGainCalibrationOffline;
0053 const std::pair<int, int>& detUnitDimensions = reader.getDetUnitDimensions(*detit);
0054
0055
0056 for (int i = 0; i < detUnitDimensions.first; i++) {
0057 float totalGain = 0.0;
0058 float totalEntries = 0.0;
0059 for (int j = 0; j < detUnitDimensions.second; j++) {
0060 totalGain += 2.8;
0061 float ped = 28.2;
0062 totalEntries += 1.0;
0063 obj->setDataPedestal(ped, theSiPixelGainCalibrationOffline);
0064 if ((j + 1) % 80 == 0)
0065 {
0066 float gain = totalGain / totalEntries;
0067 obj->setDataGain(gain, 80, theSiPixelGainCalibrationOffline);
0068 totalGain = 0;
0069 totalEntries = 0.0;
0070 }
0071 }
0072 }
0073
0074
0075
0076 SiPixelGainCalibrationOffline::Range range(theSiPixelGainCalibrationOffline.begin(),
0077 theSiPixelGainCalibrationOffline.end());
0078
0079 if (!obj->put(*detit, range, detUnitDimensions.first))
0080 edm::LogError("SiPixelFakeGainOfflineESSource")
0081 << "[SiPixelFakeGainOfflineESSource::produce] detid already exists" << std::endl;
0082 }
0083
0084
0085 return std::unique_ptr<SiPixelGainCalibrationOffline>(obj);
0086 }
0087
0088 void SiPixelFakeGainOfflineESSource::setIntervalFor(const edm::eventsetup::EventSetupRecordKey&,
0089 const edm::IOVSyncValue& iosv,
0090 edm::ValidityInterval& oValidity) {
0091 edm::ValidityInterval infinity(iosv.beginOfTime(), iosv.endOfTime());
0092 oValidity = infinity;
0093 }