77{
79 LArDigit * scDigit=0 ;
80
81
82 uint32_t nData = robFrag->rod_ndata();
84 if (nData < 3) {
86 << "Empty ROD block (less than 3 words) for source ID " << robFrag->rod_source_id() );
87 return;
88 }
89 else
90 robFrag->rod_source_id();
91 unsigned int n = robFrag->payload_size_word();
92
93 std::vector<std::string> string;
96 for(
unsigned int s=1;
s<
n-13;
s+=6) {
98 for (
unsigned int k=0;
k<6;++
k){
100 std::ostringstream oss;
101 oss << std::hex <<
x;
102 if (oss.str().size() == 7){
104 }
106 }
107 string.push_back(std::move(
ss));
108 }
109
110
111
112constexpr int nFibers = 20;
113constexpr int nchannels = 8;
114constexpr int Nabbachannels = nFibers * nchannels;
115
116constexpr int fiberSeq[16] = {0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1};
117constexpr int adcSeq[16] = {1,0,1,0,3,2,3,2,5,4,5,4,7,6,7,6};
118
119std::vector< std::vector< std::vector<int> > > abbasamples;
120abbasamples.resize(nFibers);
121
122std::vector<std::vector<short>> abba_channel_samples;
123abba_channel_samples.resize(Nabbachannels);
124
125for (int fib=0;fib < nFibers; ++fib){
126 abbasamples[fib].resize(nchannels);
127 for (
int ch = 0;
ch < nchannels; ++
ch){
128 abbasamples[fib][
ch].resize(nsamples);
129 int Nchannel = fib*8 +
ch;
130 abba_channel_samples[Nchannel].resize(nsamples);
131 }
132 }
133
134 for (int fib=0;fib < nFibers; fib+=2){
135 for (
int sam=0; sam <
nsamples; sam++){
136 int zx = sam + (fib/2)*nsamples;
137 const std::string &wx = string[zx];
139 for (
int m = 0;
m < 16; ++
m){
140 int fiber_number = fiberSeq[
m];
141 int adc_number = adcSeq[
m];
143 std::stringstream
ss;
144 char mysample[3];
145 for (
int j = idx;
j <
idx+3; ++
j){
148 }
150 short mysample_int;
151 ss >> std::hex >> mysample_int;
152 int fb = fiber_number+fib;
154 int abbachannel = fb*8+
ch;
156 abbasamples[fb][
ch][sam] = mysample_int;
157 abba_channel_samples[abbachannel][sam] = mysample_int;
158 }
159 }
160 }
161
162std::map<int, HWIdentifier> abba_mapping;
163
164
165int iphi = 0;
166switch (robFrag->rod_source_id())
167{
168case 0x410511:
169 iphi=19;
170 break;
172case 0x410512:
173 iphi=18;
174 break;
175case 0x410521:
176 iphi=20;
177 break;
178case 0x410522:
179 iphi=21;
180 break;
181
182default:
183msg(MSG::ERROR) <<
"ROD_source_id not found" <<
endmsg;
184}
185
186
188
189
190for (std::size_t index_abba_channel_samples = 0; index_abba_channel_samples < abba_channel_samples.size(); ++index_abba_channel_samples) {
191 auto abba_mapping_search = abba_mapping.find(index_abba_channel_samples);
192 if (abba_mapping_search == abba_mapping.end()) {
193 msg(MSG::WARNING) <<
"No mapping for index_abba_channel_samples: "<<std::dec<<index_abba_channel_samples <<
endmsg;
194 continue;
195 }
196
197 HWIdentifier channelID = (*abba_mapping_search).second;
198 std::vector<short> adcValues = abba_channel_samples[index_abba_channel_samples];
199 scDigit=new LArDigit(channelID,dummyGain,std::move(adcValues));
200
202 }
203
204abbasamples.clear();
205
206 return;
207
208
209}
static void fill(std::map< int, HWIdentifier > *toFill, int iphi)
value_type push_back(value_type pElem)
Add an element to the end of the collection.
float j(const xAOD::IParticle &, const xAOD::TrackMeasurementValidation &hit, const Eigen::Matrix3d &jab_inv)