13 MsgStream & log)
const
15 log<<MSG::DEBUG<<
" LArCaliWaveSubsetCNV_p1 begin persToTrans"<<
endmsg;
21 log<<MSG::DEBUG<<
"Total febs:"<<nfebids<<
endmsg;
23 unsigned int waveIndex = 0;
24 unsigned int chIndex = 0;
26 unsigned int ifebWithData = 0;
29 for (
unsigned int i = 0; i < nfebids; ++i, ++subsetIt){
32 unsigned int febid = subsetIt->first;
35 bool hasSparseData =
false;
36 unsigned int chansSet = 0;
37 unsigned int chansOffset = 0;
49 for (
unsigned int j = 0; j < nChannelsPerFeb; ++j){
50 bool copyChannel =
true;
54 if (!(chansSet & (1 << (j - chansOffset)))) {
60 if (j%32 == 31 && j < nChannelsPerFeb-2) {
70 double time =persObj->
m_dt[chIndex];
71 unsigned int f =persObj->
m_flag[chIndex];
72 int dac =(persObj->
m_DAC[chIndex])&0xFFFF;
73 int pulsed =(persObj->
m_DAC[chIndex])>>16;
75 std::vector<double> val;
76 std::vector<double> err;
78 for (
unsigned int k = 0; k < persObj->
m_samples; ++k){
80 err.push_back(persObj->
m_vErrors[waveIndex]);
102 for (
unsigned int i = 0; i < ncorrs; ++i){
104 if (chIndex >= persObj->
m_dt.size()) {
106 <<
"LArCaliWaveSubsetCnv_p1::persToTrans - CaliWave index too large: WaveIndex/sizeInFile "
107 << chIndex <<
" " << persObj->
m_dt.size() <<
" "
116 double time = persObj->
m_dt[chIndex];
117 unsigned int f = persObj->
m_flag[chIndex];
118 int dac = (persObj->
m_DAC[chIndex])&0xFFFF;
119 int pulsed =(persObj->
m_DAC[chIndex])>>16;
121 std::vector<double> val;
122 std::vector<double> err;
123 std::vector<int> tri;
124 for (
unsigned int k = 0; k < persObj->
m_samples; ++k){
126 log << MSG::ERROR <<
"Persistent LArCaliWave object is inconsistent. i=" << i <<
" WaveIndes="
129 err.push_back(persObj->
m_vErrors[waveIndex]);
146 log<< MSG::DEBUG <<
"CaliWave p1 done reading"<<
endmsg;
153 log<<MSG::DEBUG<<
"LArCaliWaveSubsetCNV_p1 begin transToPers"<<
endmsg;
160 unsigned int nsubsetsNotEmpty = 0;
161 unsigned int nchans = 0;
166 std::vector<unsigned int> febsWithSparseData;
168 const auto subsetEnd = transObj->
subsetEnd();
170 subsetIt != subsetEnd;
173 unsigned int nfebChans = subsetIt->second.size();
176 if (nfebChans != 0 && nfebChans != nChannelsPerFeb) {
177 log << MSG::ERROR <<
"LArCaliWaveSubsetCnv_p1::transToPers - found incorrect number of channels per feb: " << nfebChans<<
endmsg;
181 if (nfebChans) ++nsubsetsNotEmpty;
183 bool isSparse =
false;
184 for (
unsigned int j = 0; j < nfebChans; ++j) {
187 if (!isSparse && CWV.size() == 0) {
189 febsWithSparseData.push_back(subsetIt->first);
210 if (febsWithSparseData.size())
213 persObj->
m_dt.reserve(nchans);
217 persObj->
m_flag.reserve(nchans);
222 subsetIt != subsetEnd;
225 unsigned int nfebChans = subsetIt->second.size();
227 if (nfebChans == 0)
continue;
229 unsigned int febid = subsetIt->first;
233 if (counterSparse < (
int)febsWithSparseData.size() && febid == febsWithSparseData[counterSparse]){
239 unsigned int chansSet = 0;
240 unsigned int chansOffset = 0;
241 for (
unsigned int j = 0; j < nfebChans; ++j){
243 bool saveAmplitudes=
true;
246 if (subsetIt->second[j].size() > 0) {
248 assert (j >= chansOffset && (j - chansOffset) <= 31);
249 chansSet |= (1 << (j - chansOffset));
254 saveAmplitudes =
false;
259 if (j == (chansOffset + 31)) {
267 if (saveAmplitudes) {
269 const std::vector<double>& w=CWV[0].getWave();
270 const std::vector<double>& e=CWV[0].getErrors();
271 const std::vector<int>& t=CWV[0].getTriggers();
272 persObj->
m_dt.push_back(CWV[0].getDt());
273 persObj->
m_flag.push_back(CWV[0].getFlag());
274 persObj->
m_DAC.push_back(CWV[0].getDAC() | (CWV[0].getIsPulsedInt()<<16));
275 for (
unsigned int k = 0; k< w.size(); ++k){
295 if (CWV.empty())
continue;
298 const std::vector<double>& w=CWV[0].getWave();
299 const std::vector<double>& e=CWV[0].getErrors();
300 const std::vector<int>& t=CWV[0].getTriggers();
301 persObj->
m_dt.push_back(CWV[0].getDt());
302 persObj->
m_flag.push_back(CWV[0].getFlag());
303 persObj->
m_DAC.push_back(CWV[0].getDAC() | (CWV[0].getIsPulsedInt()<<16));
305 for (
unsigned int k = 0; k< w.size(); ++k){
316 log<< MSG::DEBUG <<
"CaliWave p1 written down."<<
endmsg;