14 #include "MuCalDecode/CalibEvent.h"
15 #include "MuCalDecode/CalibUti.h"
21 const std::string&
name,
41 return StatusCode::SUCCESS;
52 std::string
name = m_calBufferName;
53 name +=
"_"+m_algInstanceName;
55 if ( m_circ ==
nullptr ) {
64 <<
name <<
" buffer size=" << calBufferSize);
67 ATH_MSG_INFO(
"Opening muon calibration stream. Buffer name: "
68 <<
name <<
" buffer size: " << calBufferSize);
71 return StatusCode::SUCCESS;
83 std::string
name = m_calBufferName+
"_"+m_algInstanceName;
92 return StatusCode::SUCCESS;
111 std::vector<uint32_t>& localBuffer,
113 const EventContext& ctx)
const
119 unsigned int totalHits = mdtHits.size()+rpcHits.size()+tgcHits.size();
120 if ( totalHits > 500 ) {
122 return StatusCode::SUCCESS;
128 return StatusCode::FAILURE;
138 uint32_t lvl1Id = eventInfo->extendedLevel1ID();
142 float eta = (
float) track.etaVtx;
143 float phi = (
float) track.phiVtx;
148 std::vector<uint32_t> robIdList_MDT;
149 double etaMin = roi->eta()-0.05;
150 double etaMax = roi->eta()+0.05;
151 double phi_roi = roi->phi();
152 double phiMin = roi->phi()-0.05;
153 double phiMax = roi->phi()+0.05;
154 if( phi_roi < 0 ) phi_roi += 2*
M_PI;
155 if( phiMin < 0 ) phiMin += 2*
M_PI;
156 if( phiMax < 0 ) phiMax += 2*
M_PI;
161 m_regSel_MDT->lookup( ctx )->ROBIDList(*iroi,robIdList_MDT);
164 ATH_MSG_DEBUG(
"Size of the MDT rob list: " << robIdList_MDT.size());
165 int isize = robIdList_MDT.size()<5 ? robIdList_MDT.size() : 4;
166 for (
int ii = 0 ; ii<isize ; ++ii ) {
167 ATH_MSG_DEBUG(
"robId: 0x" << std::hex << robIdList_MDT.at(ii) << std::dec);
168 mrods[ii] = robIdList_MDT.at(ii);
172 std::vector<uint32_t> robIdList_TGC;
173 m_regSel_TGC->lookup(ctx)->ROBIDList(*iroi,robIdList_TGC);
174 ATH_MSG_DEBUG(
"Size of the TGC rob list: " << robIdList_TGC.size());
177 LVL2_MUON_CALIBRATION::CalibEvent
event(1,
runId,lvl1Id,1,1,mrods,
name().c_str(),eta,phi,
pt);
178 LVL2_MUON_CALIBRATION::MdtCalibFragment mdtFragment;
181 if ( mdtHits.size()>0 ) {
182 ATH_CHECK( createMdtFragment(mdtHits,mdtFragment,phi) );
185 event << mdtFragment;
189 return StatusCode::SUCCESS;
193 if ( rpcHits.size() > 0 ) {
194 LVL2_MUON_CALIBRATION::RpcCalibFragment rpcFragment;
196 if ( createRpcFragment(roi, rpcFragment, ctx) != StatusCode::SUCCESS ) {
197 ATH_MSG_WARNING(
"Could not create the Rpc fragment of the calibration stream");
200 ATH_MSG_DEBUG(
"Adding the RPC fragment to the calibration stream");
201 event << rpcFragment;
205 if ( tgcHits.size() > 0 ) {
206 LVL2_MUON_CALIBRATION::TgcCalibFragment tgcFragment;
208 if ( createTgcFragment(robIdList_TGC,tgcFragment) != StatusCode::SUCCESS ) {
209 ATH_MSG_ERROR(
"Could not create the Tgc fragment of the calibration stream");
212 ATH_MSG_DEBUG(
"Adding the TGC fragment to the calibration stream");
213 event << tgcFragment;
223 m_circ->dumpToCirc (
event);
227 if (doDataScouting) {
229 uint16_t eventSize_ds =
event.size();
230 if (eventSize_ds>1000)
return StatusCode::SUCCESS;
232 std::unique_ptr<uint8_t[]> buff_ds = std::make_unique<uint8_t[]>(eventSize_ds);
235 uint16_t eventSize8bits = eventSize_ds;
236 uint16_t eventSize32bits = eventSize8bits/4;
237 event.dumpWords(buff_ds.get(),eventSize_ds);
242 ATH_MSG_DEBUG(
"Size of the DATASCOUTING buffer in 32 bits words: " << eventSize32bits);
250 uint32_t dataWord = (byte4 << 24) + (byte3 << 16) + (byte2 << 8) + byte1 ;
252 ATH_MSG_DEBUG(
"Data word " <<
words <<
" = " << std::hex <<
"0x" << dataWord << std::dec);
254 localBuffer.push_back(dataWord);
260 return StatusCode::SUCCESS;
267 LVL2_MUON_CALIBRATION::MdtCalibFragment& mdtFragment,
271 TrigL2MuonSA::MdtHits::const_iterator
it = mdtHits.begin();
272 for ( ;
it != mdtHits.end() ; ++
it ) {
275 int stationEta = (*it).StationEta;
276 int stationPhi = (*it).StationPhi;
277 int multilayer = (*it).Multilayer;
278 int layer = (*it).TubeLayer;
279 int tube = (*it).Tube;
282 stationEta,stationPhi,multilayer,
layer,
tube);
284 uint16_t leadingCoarseTime = (*it).LeadingCoarseTime;
285 uint16_t leadingFineTime = (*it).LeadingFineTime;
286 uint16_t trailingCoarseTime = (*it).TrailingCoarseTime;
287 uint16_t trailingFineTime = (*it).TrailingFineTime;
290 LVL2_MUON_CALIBRATION::MdtCalibData mdt(
ID,leadingCoarseTime,leadingFineTime,
291 trailingCoarseTime,trailingFineTime,
adc
300 return StatusCode::SUCCESS;
309 LVL2_MUON_CALIBRATION::RpcCalibFragment& rpcFragment,
const EventContext& ctx)
const
314 if ( roi->
getSource() != 0 )
return StatusCode::SUCCESS;
329 unsigned int padIdHash;
330 if (readCdo->give_PAD_address(
side, sector,
roiNumber, padIdHash)) {
333 if( itPad==
nullptr ) {
335 return StatusCode::FAILURE;
337 const RpcPad* rpcPad = itPad;
340 uint16_t sysId = (sector<32)? 0x66 : 0x65;
346 LVL2_MUON_CALIBRATION::RpcCalibFragment frag(sysId,secId,padId,
status,
error);
349 for (; it3!=rpcPad->
end() ; ++it3) {
357 LVL2_MUON_CALIBRATION::RpcCalibData
matrix(cmaId,fel1Id,febcId,crc);
361 for (; it5 != (*it3)->end() ; ++it5) {
381 ATH_MSG_WARNING(
"Can't get the pad address from the RpcCablingCondData");
382 return StatusCode::FAILURE;
385 return StatusCode::SUCCESS;
394 LVL2_MUON_CALIBRATION::TgcCalibFragment& tgcFragment)
const
398 if ( robIdList_TGC.size()<1 ) {
400 return StatusCode::SUCCESS;
406 uint16_t subSystemId = ( (robIdList_TGC.at(0) & 0xff0000) >> 16 );
407 uint16_t rdoId = ( robIdList_TGC.at(0) & 0xff );
411 tgcFragment = LVL2_MUON_CALIBRATION::TgcCalibFragment(
systemId,subSystemId,rdoId,
roiNumber);
417 return StatusCode::FAILURE;
425 LVL2_MUON_CALIBRATION::TgcCalibData tgc_payload;
428 for ( ;
it != tgcRdoContainer->
end() ; ++
it ) {
436 for ( ; itRaw != (*it)->end() ; ++itRaw ) {
439 LVL2_MUON_CALIBRATION::TGC_BYTESTREAM_READOUTHIT roh;
440 LVL2_MUON_CALIBRATION::TGC_BYTESTREAM_READOUTTRIPLETSTRIP tps;
441 LVL2_MUON_CALIBRATION::TGC_BYTESTREAM_READOUTTRACKLET rot;
442 LVL2_MUON_CALIBRATION::TGC_BYTESTREAM_HIPT hpt;
443 LVL2_MUON_CALIBRATION::TGC_BYTESTREAM_SL sl;
446 switch (raw->
type()) {
449 roh.channel = raw->
channel()-40;
450 roh.sbId = raw->
slbId();
453 roh.ldbId = raw->
sswId();
465 tps.sbId = raw->
slbId();
466 tps.ldbId = raw->
sswId();
476 rot.delta = raw->
delta();
477 rot.sbId = raw->
slbId();
478 rot.ldbId = raw->
sswId();
488 hpt.delta = raw->
delta();
489 hpt.hitId = raw->
hitId();
491 hpt.cand = raw->
index();
492 hpt.chip = raw->
chip();
493 hpt.sector = raw->
sector();
505 sl.cand = raw->
index();
506 sl.sector = raw->
sector();
515 return StatusCode::FAILURE;
519 tgc_payload.getHit(roh,tps,rot,hpt,sl);
524 tgcFragment << tgc_payload;
526 return StatusCode::SUCCESS;