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 "FWCore/ServiceRegistry/interface/Service.h"
00012 #include "FWCore/Framework/interface/Event.h"
00013 #include "FWCore/Framework/interface/EventSetup.h"
00014 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00015 #include "CalibMuon/RPCCalibration/interface/RPCCalibSetUp.h"
00016
00017 #include <cmath>
00018 #include <math.h>
00019 #include <fstream>
00020 #include <sstream>
00021 #include <iostream>
00022 #include<cstring>
00023 #include<string>
00024 #include<vector>
00025 #include<stdlib.h>
00026 #include <utility>
00027 #include <map>
00028
00029 using namespace std;
00030
00031 RPCCalibSetUp::RPCCalibSetUp(const edm::ParameterSet& ps) {
00032
00033 _mapDetIdNoise.clear();
00034 _mapDetIdEff.clear();
00035 _bxmap.clear();
00036
00037
00038
00039 edm::FileInPath fp1 = ps.getParameter<edm::FileInPath>("noisemapfile");
00040 std::ifstream _infile1(fp1.fullPath().c_str(), std::ios::in);
00041
00042 std::vector<float> vnoise;
00043
00044 int rpcdetid = 0;
00045 std::string buff;
00046
00047 std::vector< std::string > words;
00048
00049 int count = 0;
00050 while( getline(_infile1, buff, '\n') ){
00051
00052 words.clear();
00053 vnoise.clear();
00054
00055 stringstream ss;
00056 std::string chname;
00057 ss<<buff;
00058 ss>>chname>>rpcdetid;
00059
00060 std::string::size_type pos = 0, prev_pos = 0;
00061
00062 while ( (pos = buff.find(" ",pos)) != string::npos){
00063
00064 words.push_back(buff.substr(prev_pos, pos - prev_pos));
00065 prev_pos = ++pos;
00066 }
00067 words.push_back(buff.substr(prev_pos, pos - prev_pos));
00068
00069 for(unsigned int i = 2; i < words.size(); ++i){
00070 float value = atof( ((words)[i]).c_str() );
00071 vnoise.push_back(value);
00072 }
00073
00074 _mapDetIdNoise.insert(make_pair(static_cast<uint32_t>(rpcdetid),vnoise));
00075
00076 count++;
00077 }
00078 _infile1.close();
00079
00080
00081
00082 edm::FileInPath fp2 = ps.getParameter<edm::FileInPath>("effmapfile");
00083 std::ifstream _infile2(fp2.fullPath().c_str(), std::ios::in);
00084
00085 std::vector<float> veff ;
00086 rpcdetid = 0;
00087
00088 while( getline(_infile2, buff, '\n') ){
00089
00090 words.clear();
00091 veff.clear();
00092
00093 stringstream ss;
00094 std::string chname;
00095 ss<<buff;
00096 ss>>chname>>rpcdetid;
00097
00098 std::string::size_type pos = 0, prev_pos = 0;
00099 while ( (pos = buff.find(" ",pos)) != string::npos){
00100
00101 words.push_back(buff.substr(prev_pos, pos - prev_pos));
00102 prev_pos = ++pos;
00103 }
00104 words.push_back(buff.substr(prev_pos, pos - prev_pos));
00105
00106 for(unsigned int i = 2; i < words.size(); ++i){
00107 float value = atof(((words)[i]).c_str());
00108 veff.push_back(value);
00109 }
00110 _mapDetIdEff.insert(make_pair(static_cast<uint32_t>(rpcdetid),veff));
00111 }
00112 _infile2.close();
00113
00114
00115
00116 edm::FileInPath fp3 = ps.getParameter<edm::FileInPath>("timingMap");
00117 std::ifstream _infile3(fp3.fullPath().c_str(), std::ios::in);
00118
00119 uint32_t detUnit = 0;
00120 float timing = 0.;
00121 while(!_infile3.eof()){
00122 _infile3>>detUnit>>timing;
00123 _bxmap[RPCDetId(detUnit)] = timing;
00124 }
00125 _infile3.close();
00126
00127
00128
00129 edm::FileInPath fp4 = ps.getParameter<edm::FileInPath>("clsmapfile");
00130 std::ifstream _infile4(fp4.fullPath().c_str(), ios::in);
00131
00132 string buffer;
00133 double sum = 0;
00134 unsigned int counter = 1;
00135 unsigned int row = 1;
00136 std::vector<double> sum_clsize;
00137
00138 while ( _infile4 >> buffer ) {
00139 const char *buffer1 = buffer.c_str();
00140 double dato = atof(buffer1);
00141 sum += dato;
00142 sum_clsize.push_back(sum);
00143
00144 if(counter == row*20) {
00145 _clsMap[row] = sum_clsize;
00146 row++;
00147 sum = 0;
00148 sum_clsize.clear();
00149 }
00150 counter++;
00151 }
00152 _infile4.close();
00153
00154 }
00155
00156 std::vector<float> RPCCalibSetUp::getNoise(uint32_t id)
00157 {
00158 map<uint32_t,std::vector<float> >::iterator iter = _mapDetIdNoise.find(id);
00159 return (iter->second);
00160 }
00161
00162 std::vector<float> RPCCalibSetUp::getEff(uint32_t id)
00163 {
00164 map<uint32_t,std::vector<float> >::iterator iter = _mapDetIdEff.find(id);
00165 return iter->second;
00166 }
00167
00168 float RPCCalibSetUp::getTime(uint32_t id)
00169 {
00170 RPCDetId rpcid(id);
00171 std::map<RPCDetId, float>::iterator iter = _bxmap.find(rpcid);
00172 return iter->second;
00173 }
00174
00175 std::map< int, std::vector<double> > RPCCalibSetUp::getClsMap()
00176 {
00177 return _clsMap;
00178 }
00179
00180 RPCCalibSetUp::~RPCCalibSetUp(){}