ATLAS Offline Software
Loading...
Searching...
No Matches
RpcCalibDBEntry.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3*/
4
8
9#include <stdlib.h>
10#include <iostream>
11#include <sstream>
12#include <algorithm>
13#include <stdexcept>
14
15namespace MuonCalib{
16
17
18 RpcCalibDBEntry::RpcCalibDBEntry(Identifier gapID, std::string_view payLoad)
19 : m_theGap(gapID)
20{
21 auto take_until = [&](std::string_view& sv) -> std::string_view {
22 const std::string_view delim = "END ";
23 const auto pos = sv.find(delim);
24 if (pos == std::string_view::npos) {
25 throw std::runtime_error("RpcCalibDBEntry: malformed payload (missing 'END ')");
26 }
27 auto out = sv.substr(0, pos);
28 sv.remove_prefix(pos + delim.size()); // avoids overflow math
29 return out;
30 };
31
32 const auto etaRec = take_until(payLoad);
33 const auto etaDet = take_until(payLoad);
34 const auto phiRec1 = take_until(payLoad);
35 const auto phiRec2 = take_until(payLoad);
36 const auto phiDet1 = take_until(payLoad);
37 const auto phiDet2 = take_until(payLoad);
38
39 initData(std::string(etaRec), std::string(etaDet),
40 std::string(phiRec1), std::string(phiRec2),
41 std::string(phiDet1), std::string(phiDet2));
42}
43
44 void RpcCalibDBEntry::initData(std::string etaRec, std::string etaDet, std::string phiRec1, std::string phiRec2, std::string phiDet1, std::string phiDet2){
45
46
47 unsigned long int pos = 0;
48 std::string::size_type start = etaRec.find_first_not_of(' ',pos);
49 if(start == std::string::npos) {
50 std::cout << "RpcCalibDBEntry::initData -- problems extracting m_nRecEta -- crashing." << std::endl;
51 std::abort();
52 }
53 std::string::size_type stop = etaRec.find_first_of(' ',start+1);
54 if (stop == std::string::npos) stop = etaRec.size();
55 m_nRecEta = std::stoi(etaRec.substr(start,stop-start),nullptr);
56 etaRec.erase(pos,stop-pos);
57
58 pos = 0;
59 start = phiRec1.find_first_not_of(' ',pos);
60 if(start == std::string::npos) {
61 std::cout << "RpcCalibDBEntry::initData -- problems extracting m_nRecPhi1 -- crashing." << std::endl;
62 std::abort();
63 }
64 stop = phiRec1.find_first_of(' ',start+1);
65 if (stop == std::string::npos) stop = phiRec1.size();
66 m_nRecPhi1 = std::stoi(phiRec1.substr(start,stop-start),nullptr);
67 phiRec1.erase(pos,stop-pos);
68
69 std::istringstream etaRec_str;
70 std::istringstream etaDet_str;
71 std::istringstream phiRec1_str;
72 std::istringstream phiRec2_str;
73 std::istringstream phiDet1_str;
74 std::istringstream phiDet2_str;
75
76 etaRec_str.str(etaRec);
77 etaDet_str.str(etaDet);
78 phiRec1_str.str(phiRec1);
79 phiRec2_str.str(phiRec2);
80 phiDet1_str.str(phiDet1);
81 phiDet2_str.str(phiDet2);
82
83 etaDet_str>>m_nDetEta;
84 phiRec2_str>>m_nRecPhi2;
85 phiDet1_str>>m_nDetPhi1;
86 phiDet2_str>>m_nDetPhi2;
87
88 float eff, errEff, res1, res2, resX, errRes1, errRes2, errResX, time, errTime, noise, errNoise, noiseC, errNoiseC, cs, errCs;
89
90 // start with eta processing, 41 strips
91
92 for(int k=0;k<m_nRecEta;k++){
93
94 etaRec_str>>eff>>errEff>>res1>>errRes1>>res2>>errRes2>>resX>>errResX>>time>>errTime;
95 etaDet_str>>noise>>errNoise>>noiseC>>errNoiseC>>cs>>errCs;
96
97 auto etaData= std::make_unique<RpcCalibData>();
98
99 etaData->setId(k);
100 etaData->setEff(eff);
101 etaData->setErrEff(errEff);
102 etaData->setRes1(res1);
103 etaData->setRes2(res2);
104 etaData->setResX(resX);
105 etaData->setErrRes1(errRes1);
106 etaData->setErrRes2(errRes2);
107 etaData->setErrResX(errResX);
108 etaData->setTime(time);
109 etaData->setErrTime(errTime);
110 etaData->setNoise(noise);
111 etaData->setNoiseC(noiseC);
112 etaData->setErrNoise(errNoise);
113 etaData->setErrNoiseC(errNoiseC);
114 etaData->setCs(cs);
115 etaData->setErrCs(errCs);
116
117 m_theEtaData.push_back(std::move(etaData));
118
119 }
120
121 // now phi
122
123 for(int k=0;k<m_nRecPhi1;k++){
124
125 phiRec1_str>>eff>>res1>>res2>>resX>>time;
126 phiRec2_str>>errEff>>errRes1>>errRes2>>errResX>>errTime;
127 phiDet1_str>>noise>>errNoise>>noiseC>>errNoiseC>>cs>>errCs;
128
129 auto phiData= std::make_unique<RpcCalibData>();
130
131 phiData->setId(k);
132 phiData->setEff(eff);
133 phiData->setErrEff(errEff);
134 phiData->setRes1(res1);
135 phiData->setRes2(res2);
136 phiData->setResX(resX);
137 phiData->setErrRes1(errRes1);
138 phiData->setErrRes2(errRes2);
139 phiData->setErrResX(errResX);
140 phiData->setTime(time);
141 phiData->setErrTime(errTime);
142 phiData->setNoise(noise);
143 phiData->setNoiseC(noiseC);
144 phiData->setErrNoise(errNoise);
145 phiData->setErrNoiseC(errNoiseC);
146 phiData->setCs(cs);
147 phiData->setErrCs(errCs);
148
149 m_thePhiData.push_back(std::move(phiData));
150
151 }
152
153
154 }
155
156 // initialize from db columns
157
158 RpcCalibDBEntry::RpcCalibDBEntry(Identifier gapID, const std::string& etaRec, const std::string& etaDet, const std::string& phiRec1, const std::string& phiRec2, const std::string& phiDet1, const std::string& phiDet2 ):m_nRecEta(0),m_nDetEta(0), m_nRecPhi1(0),m_nRecPhi2(0),m_nDetPhi1(0),m_nDetPhi2(0),m_theGap(gapID)
159 {
160
161 this->initData(etaRec, etaDet,phiRec1,phiRec2,phiDet1,phiDet2);
162
163
164 }
165
166
168 return m_theGap;
169
170 }
171
172 void RpcCalibDBEntry::getColumns(std::string &recEta, std::string &detEta,std::string &recPhi1, std::string &recPhi2, std::string &detPhi1,std::string &detPhi2) const{
173
174
175 std::ostringstream recEta_str,detEta_str,recPhi1_str,recPhi2_str,detPhi1_str,detPhi2_str;
176
177 float eff, errEff, res1, res2, resX, errRes1, errRes2, errResX, time, errTime, noise, errNoise, noiseC, errNoiseC, cs, errCs;
178
179 recEta_str<<m_nRecEta<<' ';
180 detEta_str<<m_nDetEta<<' ';
181
182 recPhi1_str<<m_nRecPhi1<<' ';
183 detPhi1_str<<m_nDetPhi1<<' ';
184
185 recPhi2_str<<m_nRecPhi2<<' ';
186 detPhi2_str<<m_nDetPhi2<<' ';
187
188
189
190 for(int k=0;k<m_nRecEta;k++){
191
192 const auto& theData = m_theEtaData[k];
193
194 eff=theData->getEff();
195 errEff=theData->getErrEff();
196 res1=theData->getRes1();
197 res2=theData->getRes2();
198 resX=theData->getResX();
199 errRes1=theData->getErrRes1();
200 errRes2=theData->getErrRes2();
201 errResX=theData->getErrResX();
202 time=theData->getTime();
203 errTime=theData->getErrTime();
204 noise=theData->getNoise();
205 noiseC=theData->getNoiseC();
206 errNoise=theData->getErrNoise();
207 errNoiseC=theData->getErrNoiseC();
208 cs=theData->getCs();
209 errCs=theData->getErrCs();
210
211 recEta_str<< eff<< ' '<<errEff<< ' '<<res1<< ' '<<errRes1<< ' '<<res2<< ' '<<errRes2<< ' '<<resX<< ' '<<errResX<< ' '<<time<< ' '<<errTime<< ' ';
212 detEta_str<<noise<< ' '<<errNoise<< ' '<<noiseC<< ' '<<errNoiseC<< ' '<<cs<< ' '<<errCs<< ' ';
213
214
215 }
216
217 for(int k=0;k<m_nRecPhi1;k++){
218
219 const auto& theData = m_thePhiData[k];
220
221 eff=theData->getEff();
222 errEff=theData->getErrEff();
223 res1=theData->getRes1();
224 res2=theData->getRes2();
225 resX=theData->getResX();
226 errRes1=theData->getErrRes1();
227 errRes2=theData->getErrRes2();
228 errResX=theData->getErrResX();
229 time=theData->getTime();
230 errTime=theData->getErrTime();
231 noise=theData->getNoise();
232 noiseC=theData->getNoiseC();
233 errNoise=theData->getErrNoise();
234 errNoiseC=theData->getErrNoiseC();
235 cs=theData->getCs();
236 errCs=theData->getErrCs();
237
238 recPhi1_str<<eff<<' ' <<res1<<' ' <<res2<<' ' <<resX<<' ' <<time<< ' ';
239 recPhi2_str<<errEff<<' ' <<errRes1<<' ' <<errRes2<<' ' <<errResX<<' ' <<errTime<< ' ';
240 detPhi1_str<<noise<<' ' <<errNoise<<' ' <<noiseC<<' ' <<errNoiseC<<' ' <<cs<<' ' <<errCs<< ' ';
241
242
243 }
244
245 // give back strings
246
247 recEta=recEta_str.str();
248 detEta=detEta_str.str();
249 recPhi1=recPhi1_str.str();
250 recPhi2=recPhi2_str.str();
251 detPhi1=detPhi1_str.str();
252 detPhi2=detPhi2_str.str();
253
254 }
255
256}// End namespace MuonCalib
const Identifier & getGapID() const
std::vector< std::unique_ptr< RpcCalibData > > m_thePhiData
void initData(std::string etaRec, std::string etaDet, std::string phiRec1, std::string phiRec2, std::string phiDet1, std::string phiDet2)
void getColumns(std::string &recEta, std::string &detEta, std::string &recPhi1, std::string &recPhi2, std::string &detPhi1, std::string &detPhi2) const
std::vector< std::unique_ptr< RpcCalibData > > m_theEtaData
CscCalcPed - algorithm that finds the Cathode Strip Chamber pedestals from an RDO.