1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
#include "EventFilter/L1TRawToDigi/interface/OmtfMuonUnpacker.h"
#include "FWCore/MessageLogger/interface/MessageLogger.h"
#include "EventFilter/L1TRawToDigi/interface/OmtfMuonDataWord64.h"
namespace omtf {
void MuonUnpacker::unpack(unsigned int fed,
unsigned int amc,
const MuonDataWord64 &data,
l1t::RegionalMuonCandBxCollection *producedMuonDigis) {
LogTrace("") << "OMTF->MUON " << std::endl;
LogTrace("") << data << std::endl;
l1t::tftype overlap = (fed == 1380) ? l1t::tftype::omtf_neg : l1t::tftype::omtf_pos;
unsigned int iProcessor = amc - 1; //0-5
l1t::RegionalMuonCand digi;
digi.setHwPt(data.pT());
digi.setHwEta(data.eta());
digi.setHwPhi(data.phi());
digi.setHwSign(data.ch());
digi.setHwSignValid(data.vch());
digi.setHwQual(data.quality());
std::map<int, int> trackAddr;
trackAddr[0] = data.layers();
trackAddr[1] = 0;
trackAddr[2] = data.weight_lowBits();
digi.setTrackAddress(trackAddr);
digi.setTFIdentifiers(iProcessor, overlap);
int bx = data.bxNum() - 3;
LogTrace("") << "OMTF Muon, BX=" << bx << ", hwPt=" << digi.hwPt() << ", link: " << digi.link() << std::endl;
// add digi to collection, keep fixed ascending link orderi (insert in proper place)
l1t::RegionalMuonCandBxCollection::const_iterator itb = producedMuonDigis->begin(bx);
l1t::RegionalMuonCandBxCollection::const_iterator ite = producedMuonDigis->end(bx);
unsigned int indeks = 0;
while (indeks < ite - itb) {
if (digi.link() < (itb + indeks)->link())
break;
indeks++;
}
producedMuonDigis->insert(bx, indeks, digi);
}
} // namespace omtf
|