00001 #include "FWCore/Framework/interface/EDProducer.h" 00002 #include "DataFormats/Common/interface/Handle.h" 00003 #include "FWCore/Framework/interface/ESHandle.h" 00004 #include "SimMuon/RPCDigitizer/src/RPCDigiProducer.h" 00005 #include "SimMuon/RPCDigitizer/src/RPCDigitizer.h" 00006 #include "Geometry/Records/interface/MuonGeometryRecord.h" 00007 #include "SimDataFormats/CrossingFrame/interface/CrossingFrame.h" 00008 #include "SimDataFormats/CrossingFrame/interface/MixCollection.h" 00009 #include "DataFormats/Common/interface/Handle.h" 00010 #include "FWCore/Framework/interface/ESHandle.h" 00011 #include "Geometry/Records/interface/MuonGeometryRecord.h" 00012 #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" 00013 #include "SimDataFormats/CrossingFrame/interface/MixCollection.h" 00014 #include "FWCore/ServiceRegistry/interface/Service.h" 00015 #include "FWCore/Utilities/interface/RandomNumberGenerator.h" 00016 #include "FWCore/Framework/interface/Event.h" 00017 #include "FWCore/Framework/interface/EventSetup.h" 00018 #include "FWCore/ParameterSet/interface/ParameterSet.h" 00019 #include "SimDataFormats/TrackingHit/interface/PSimHitContainer.h" 00020 #include "SimMuon/RPCDigitizer/src/RPCSimSetUp.h" 00021 #include "DataFormats/MuonDetId/interface/RPCDetId.h" 00022 00023 #include <cmath> 00024 #include <math.h> 00025 #include <fstream> 00026 #include <sstream> 00027 #include <iostream> 00028 #include<cstring> 00029 #include<string> 00030 #include<vector> 00031 #include<stdlib.h> 00032 #include <utility> 00033 #include <map> 00034 00035 using namespace std; 00036 00037 RPCSimSetUp::RPCSimSetUp(const edm::ParameterSet& ps) { 00038 00039 _mapDetIdNoise.clear(); 00040 _mapDetIdEff.clear(); 00041 _bxmap.clear(); 00042 _clsMap.clear(); 00043 00044 } 00045 00046 void RPCSimSetUp::setRPCSetUp(std::vector<RPCStripNoises::NoiseItem> vnoise, std::vector<float> vcls){ 00047 00048 double sum = 0; 00049 unsigned int counter = 1; 00050 unsigned int row = 1; 00051 std::vector<double> sum_clsize; 00052 00053 for(unsigned int n = 0; n < vcls.size(); ++n){ 00054 00055 sum_clsize.push_back(vcls[n]); 00056 00057 if(counter == row*20) { 00058 00059 _clsMap[row] = sum_clsize; 00060 row++; 00061 sum = 0; 00062 sum_clsize.clear(); 00063 } 00064 counter++; 00065 } 00066 00067 unsigned int n = 0; 00068 uint32_t temp = 0; 00069 std::vector<float> veff, vvnoise; 00070 veff.clear(); 00071 vvnoise.clear(); 00072 00073 for(std::vector<RPCStripNoises::NoiseItem>::iterator it = vnoise.begin(); it != vnoise.end(); ++it){ 00074 00075 if(n%96 == 0) { 00076 if(n > 0 ){ 00077 _mapDetIdNoise[temp]= vvnoise; 00078 _mapDetIdEff[temp] = veff; 00079 _bxmap[RPCDetId(it->dpid)] = it->time; 00080 veff.clear(); 00081 vvnoise.clear(); 00082 vvnoise.push_back((it->noise)); 00083 veff.push_back((it->eff)); 00084 } 00085 else if(n == 0 ){ 00086 vvnoise.push_back((it->noise)); 00087 veff.push_back((it->eff)); 00088 _bxmap[RPCDetId(it->dpid)] = it->time; 00089 } 00090 } else if (n == vnoise.size()-1 ){ 00091 temp = it->dpid; 00092 vvnoise.push_back((it->noise)); 00093 veff.push_back((it->eff)); 00094 _mapDetIdNoise[temp]= vvnoise; 00095 _mapDetIdEff[temp] = veff; 00096 } else { 00097 temp = it->dpid; 00098 vvnoise.push_back((it->noise)); 00099 veff.push_back((it->eff)); 00100 } 00101 n++; 00102 } 00103 } 00104 00105 const std::vector<float>& RPCSimSetUp::getNoise(uint32_t id) 00106 { 00107 map<uint32_t,std::vector<float> >::iterator iter = _mapDetIdNoise.find(id); 00108 return iter->second; 00109 } 00110 00111 const std::vector<float>& RPCSimSetUp::getEff(uint32_t id) 00112 { 00113 map<uint32_t,std::vector<float> >::iterator iter = _mapDetIdEff.find(id); 00114 return iter->second; 00115 } 00116 00117 float RPCSimSetUp::getTime(uint32_t id) 00118 { 00119 RPCDetId rpcid(id); 00120 std::map<RPCDetId, float>::iterator iter = _bxmap.find(rpcid); 00121 return iter->second; 00122 } 00123 00124 const std::map< int, std::vector<double> >& RPCSimSetUp::getClsMap() 00125 { 00126 return _clsMap; 00127 } 00128 00129 RPCSimSetUp::~RPCSimSetUp(){}