CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_6_2_5/src/CalibTracker/SiPixelESProducers/plugins/SiPixelFakeGainForHLTESSource.cc

Go to the documentation of this file.
00001 // -*- C++ -*-
00002 //
00003 // Package:    SiPixelFakeGainForHLTESSource
00004 // Class:      SiPixelFakeGainForHLTESSource
00005 // 
00013 //
00014 // Original Author:  Vincenzo Chiochia
00015 //         Created:  Fri Apr 27 12:31:25 CEST 2007
00016 // $Id: SiPixelFakeGainForHLTESSource.cc,v 1.3 2008/04/22 12:36:49 friis Exp $
00017 //
00018 //
00019 
00020 // user include files
00021 
00022 #include "CalibTracker/SiPixelESProducers/interface/SiPixelFakeGainForHLTESSource.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 SiPixelFakeGainForHLTESSource::SiPixelFakeGainForHLTESSource(const edm::ParameterSet& conf_) :
00031   fp_(conf_.getParameter<edm::FileInPath>("file"))
00032 {
00033  edm::LogInfo("SiPixelFakeGainForHLTESSource::SiPixelFakeGainForHLTESSource");
00034   //the following line is needed to tell the framework what
00035   // data is being produced
00036   setWhatProduced(this);
00037   findingRecord<SiPixelGainCalibrationForHLTRcd>();
00038 }
00039 
00040 SiPixelFakeGainForHLTESSource::~SiPixelFakeGainForHLTESSource()
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<SiPixelGainCalibrationForHLT> SiPixelFakeGainForHLTESSource::produce(const SiPixelGainCalibrationForHLTRcd & )
00049 {
00050 
00051    using namespace edm::es;
00052    unsigned int nmodules = 0;
00053    uint32_t nchannels = 0;
00054    SiPixelGainCalibrationForHLT * obj = new SiPixelGainCalibrationForHLT(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> theSiPixelGainCalibration;
00062      const std::pair<int, int> & detUnitDimensions = reader.getDetUnitDimensions(*detit);
00063 
00064      // Loop over columns and rows
00065  
00066      for(int i=0; i<detUnitDimensions.first; i++) {
00067        float totalGain  = 0.0;
00068        float totalPed   = 0.0; 
00069        float totalEntries=0.0;
00070        for(int j=0; j<detUnitDimensions.second; j++) {
00071          nchannels++;
00072          totalGain      += 2.8;
00073          totalPed       += 28.2;
00074          totalEntries   ++;
00075          if((j+1)%80==0){
00076            float gain       = totalGain/totalEntries;
00077            float ped        = totalPed/totalEntries;
00078            
00079            obj->setData(ped,gain, theSiPixelGainCalibration);    
00080            totalGain=0.;
00081            totalPed=0.;
00082            totalEntries=0.;
00083          }
00084        }
00085      }
00086 
00087      //std::cout << "detid " << (*detit) << std::endl;
00088 
00089      SiPixelGainCalibrationForHLT::Range range(theSiPixelGainCalibration.begin(),theSiPixelGainCalibration.end());
00090      int nCols = detUnitDimensions.first;
00091      if( !obj->put(*detit,range,nCols) )
00092        edm::LogError("SiPixelFakeGainForHLTESSource")<<"[SiPixelFakeGainForHLTESSource::produce] detid already exists"<<std::endl;
00093    }
00094 
00095    //std::cout << "Modules = " << nmodules << " Channels " << nchannels << std::endl;
00096    
00097 
00098    // 
00099    return std::auto_ptr<SiPixelGainCalibrationForHLT>(obj);
00100 
00101 
00102 }
00103 
00104 void SiPixelFakeGainForHLTESSource::setIntervalFor( const edm::eventsetup::EventSetupRecordKey&, 
00105                                                     const edm::IOVSyncValue& iosv, 
00106                                                     edm::ValidityInterval& oValidity ) {
00107   edm::ValidityInterval infinity( iosv.beginOfTime(), iosv.endOfTime() );
00108   oValidity = infinity;  
00109 }