Go to the documentation of this file.00001
00002
00003
00004
00005
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "CalibTracker/SiPixelESProducers/interface/SiPixelFakeGainOfflineESSource.h"
00023 #include "CalibTracker/SiPixelESProducers/interface/SiPixelDetInfoFileReader.h"
00024 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
00025 #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
00026 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00027
00028
00029
00030 SiPixelFakeGainOfflineESSource::SiPixelFakeGainOfflineESSource(const edm::ParameterSet& conf_) :
00031 fp_(conf_.getParameter<edm::FileInPath>("file"))
00032 {
00033 edm::LogInfo("SiPixelFakeGainOfflineESSource::SiPixelFakeGainOfflineESSource");
00034
00035
00036 setWhatProduced(this);
00037 findingRecord<SiPixelGainCalibrationOfflineRcd>();
00038 }
00039
00040 SiPixelFakeGainOfflineESSource::~SiPixelFakeGainOfflineESSource()
00041 {
00042
00043
00044
00045
00046 }
00047
00048 std::auto_ptr<SiPixelGainCalibrationOffline> SiPixelFakeGainOfflineESSource::produce(const SiPixelGainCalibrationOfflineRcd & )
00049 {
00050
00051 using namespace edm::es;
00052 unsigned int nmodules = 0;
00053 uint32_t nchannels = 0;
00054 SiPixelGainCalibrationOffline * obj = new SiPixelGainCalibrationOffline(25.,30., 2.,3.);
00055 SiPixelDetInfoFileReader reader(fp_.fullPath());
00056 const std::vector<uint32_t> DetIds = reader.getAllDetIds();
00057
00058
00059 for(std::vector<uint32_t>::const_iterator detit=DetIds.begin(); detit!=DetIds.end(); detit++) {
00060 nmodules++;
00061 std::vector<char> theSiPixelGainCalibrationOffline;
00062 const std::pair<int, int> & detUnitDimensions = reader.getDetUnitDimensions(*detit);
00063
00064
00065 for(int i=0; i<detUnitDimensions.first; i++) {
00066 float totalGain = 0.0;
00067 float totalEntries = 0.0;
00068 for(int j=0; j<detUnitDimensions.second; j++) {
00069 nchannels++;
00070 totalGain += 2.8;
00071 float ped = 28.2;
00072 totalEntries += 1.0;
00073 obj->setDataPedestal(ped, theSiPixelGainCalibrationOffline);
00074 if ((j + 1) % 80 == 0)
00075 {
00076 float gain = totalGain/totalEntries;
00077 obj->setDataGain(gain, 80, theSiPixelGainCalibrationOffline);
00078 totalGain = 0;
00079 totalEntries = 0.0;
00080 }
00081 }
00082 }
00083
00084
00085
00086 SiPixelGainCalibrationOffline::Range range(theSiPixelGainCalibrationOffline.begin(),theSiPixelGainCalibrationOffline.end());
00087
00088 if( !obj->put(*detit,range,detUnitDimensions.first) )
00089 edm::LogError("SiPixelFakeGainOfflineESSource")<<"[SiPixelFakeGainOfflineESSource::produce] detid already exists"<<std::endl;
00090 }
00091
00092
00093
00094
00095
00096 return std::auto_ptr<SiPixelGainCalibrationOffline>(obj);
00097
00098
00099 }
00100
00101 void SiPixelFakeGainOfflineESSource::setIntervalFor( const edm::eventsetup::EventSetupRecordKey&,
00102 const edm::IOVSyncValue& iosv,
00103 edm::ValidityInterval& oValidity ) {
00104 edm::ValidityInterval infinity( iosv.beginOfTime(), iosv.endOfTime() );
00105 oValidity = infinity;
00106 }