CMS 3D CMS Logo

CMSSW_4_4_3_patch1/src/CalibTracker/SiPixelESProducers/plugins/SiPixelFakeGainOfflineESSource.cc

Go to the documentation of this file.
00001 // -*- C++ -*-
00002 //
00003 // Package:    SiPixelFakeGainOfflineESSource
00004 // Class:      SiPixelFakeGainOfflineESSource
00005 // 
00013 //
00014 // Original Author:  Vincenzo Chiochia
00015 //         Created:  Fri Apr 27 12:31:25 CEST 2007
00016 // $Id: SiPixelFakeGainOfflineESSource.cc,v 1.2 2008/04/22 12:36:49 friis Exp $
00017 //
00018 //
00019 
00020 // user include files
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 // constructors and destructor
00029 //
00030 SiPixelFakeGainOfflineESSource::SiPixelFakeGainOfflineESSource(const edm::ParameterSet& conf_) :
00031   fp_(conf_.getParameter<edm::FileInPath>("file"))
00032 {
00033  edm::LogInfo("SiPixelFakeGainOfflineESSource::SiPixelFakeGainOfflineESSource");
00034   //the following line is needed to tell the framework what
00035   // data is being produced
00036   setWhatProduced(this);
00037   findingRecord<SiPixelGainCalibrationOfflineRcd>();
00038 }
00039 
00040 SiPixelFakeGainOfflineESSource::~SiPixelFakeGainOfflineESSource()
00041 {
00042  
00043    // do anything here that needs to be done at desctruction time
00044    // (e.g. close files, deallocate resources etc.)
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    // Loop over detectors
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      // Loop over columns and rows
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) //compute the gain average after each ROC
00075          {
00076             float gain = totalGain/totalEntries;
00077             obj->setDataGain(gain, 80, theSiPixelGainCalibrationOffline);
00078             totalGain    = 0;
00079             totalEntries = 0.0;
00080          }
00081        }
00082      }
00083 
00084      //std::cout << "detid " << (*detit) << std::endl;
00085 
00086      SiPixelGainCalibrationOffline::Range range(theSiPixelGainCalibrationOffline.begin(),theSiPixelGainCalibrationOffline.end());
00087      // the 80 in the line below represents the number of columns averaged over.  
00088      if( !obj->put(*detit,range,detUnitDimensions.first) )
00089        edm::LogError("SiPixelFakeGainOfflineESSource")<<"[SiPixelFakeGainOfflineESSource::produce] detid already exists"<<std::endl;
00090    }
00091 
00092    //std::cout << "Modules = " << nmodules << " Channels " << nchannels << std::endl;
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 }