File indexing completed on 2024-04-06 12:03:15
0001 #include "CondTools/RPC/interface/RPCDBSimSetUp.h"
0002 #include "DataFormats/MuonDetId/interface/RPCDetId.h"
0003
0004 #include <cmath>
0005 #include <cmath>
0006 #include <fstream>
0007 #include <sstream>
0008 #include <iostream>
0009 #include <cstring>
0010 #include <string>
0011 #include <vector>
0012 #include <cstdlib>
0013 #include <utility>
0014 #include <map>
0015
0016 using namespace std;
0017
0018 RPCDBSimSetUp::RPCDBSimSetUp(const edm::ParameterSet& ps) {
0019 _mapDetIdNoise.clear();
0020 _mapDetIdEff.clear();
0021 _bxmap.clear();
0022
0023
0024
0025 edm::FileInPath fp1 = ps.getParameter<edm::FileInPath>("noisemapfile");
0026 std::ifstream _infile1(fp1.fullPath().c_str(), std::ios::in);
0027
0028 std::vector<float> vnoise;
0029
0030 int rpcdetid = 0;
0031 std::string buff;
0032
0033 std::vector<std::string> words;
0034
0035 while (getline(_infile1, buff, '\n')) {
0036 words.clear();
0037 vnoise.clear();
0038
0039 stringstream ss;
0040 std::string chname;
0041 ss << buff;
0042 ss >> chname >> rpcdetid;
0043
0044 std::string::size_type pos = 0, prev_pos = 0;
0045
0046 while ((pos = buff.find(" ", pos)) != string::npos) {
0047 words.push_back(buff.substr(prev_pos, pos - prev_pos));
0048 prev_pos = ++pos;
0049 }
0050 words.push_back(buff.substr(prev_pos, pos - prev_pos));
0051
0052 for (unsigned int i = 2; i < words.size(); ++i) {
0053 float value = atof(((words)[i]).c_str());
0054 vnoise.push_back(value);
0055 }
0056
0057 _mapDetIdNoise.insert(make_pair(static_cast<uint32_t>(rpcdetid), vnoise));
0058 }
0059 _infile1.close();
0060
0061
0062
0063 edm::FileInPath fp2 = ps.getParameter<edm::FileInPath>("effmapfile");
0064 _infile2 = new ifstream(fp2.fullPath().c_str(), std::ios::in);
0065
0066 std::vector<float> veff;
0067 rpcdetid = 0;
0068
0069 while (getline(*_infile2, buff, '\n')) {
0070 words.clear();
0071 veff.clear();
0072
0073 stringstream ss;
0074 std::string chname;
0075 ss << buff;
0076 ss >> chname >> rpcdetid;
0077
0078 std::string::size_type pos = 0, prev_pos = 0;
0079 while ((pos = buff.find(" ", pos)) != string::npos) {
0080 words.push_back(buff.substr(prev_pos, pos - prev_pos));
0081 prev_pos = ++pos;
0082 }
0083 words.push_back(buff.substr(prev_pos, pos - prev_pos));
0084
0085 for (unsigned int i = 2; i < words.size(); ++i) {
0086 float value = atof(((words)[i]).c_str());
0087 veff.push_back(value);
0088 }
0089 _mapDetIdEff.insert(make_pair(static_cast<uint32_t>(rpcdetid), veff));
0090 }
0091 _infile2->close();
0092
0093
0094
0095 edm::FileInPath fp3 = ps.getParameter<edm::FileInPath>("timingMap");
0096 _infile3 = new ifstream(fp3.fullPath().c_str(), std::ios::in);
0097
0098 uint32_t detUnit = 0;
0099 float timing = 0.;
0100 while (!_infile3->eof()) {
0101 *_infile3 >> detUnit >> timing;
0102 _bxmap[RPCDetId(detUnit)] = timing;
0103 }
0104 _infile3->close();
0105
0106
0107
0108 edm::FileInPath fp4 = ps.getParameter<edm::FileInPath>("clsmapfile");
0109 _infile4 = new ifstream(fp4.fullPath().c_str(), ios::in);
0110
0111 string buffer;
0112 double sum = 0;
0113 unsigned int counter = 1;
0114 unsigned int row = 1;
0115 std::vector<double> sum_clsize;
0116
0117 while (*_infile4 >> buffer) {
0118 const char* buffer1 = buffer.c_str();
0119 double dato = atof(buffer1);
0120 sum += dato;
0121 sum_clsize.push_back(sum);
0122
0123 if (counter == row * 20) {
0124 _clsMap[row] = sum_clsize;
0125 row++;
0126 sum = 0;
0127 sum_clsize.clear();
0128 }
0129 counter++;
0130 }
0131 _infile4->close();
0132 }
0133
0134 std::vector<float> RPCDBSimSetUp::getNoise(uint32_t id) {
0135 map<uint32_t, std::vector<float> >::iterator iter = _mapDetIdNoise.find(id);
0136 return (iter->second);
0137 }
0138
0139 std::vector<float> RPCDBSimSetUp::getEff(uint32_t id) {
0140 map<uint32_t, std::vector<float> >::iterator iter = _mapDetIdEff.find(id);
0141 return iter->second;
0142 }
0143
0144 float RPCDBSimSetUp::getTime(uint32_t id) {
0145 RPCDetId rpcid(id);
0146 std::map<RPCDetId, float>::iterator iter = _bxmap.find(rpcid);
0147 return iter->second;
0148 }
0149
0150 std::map<int, std::vector<double> > RPCDBSimSetUp::getClsMap() { return _clsMap; }
0151
0152 RPCDBSimSetUp::~RPCDBSimSetUp() {
0153 delete _infile1;
0154 delete _infile2;
0155 delete _infile3;
0156 delete _infile4;
0157 }