CMS 3D CMS Logo

List of all members | Public Member Functions | Private Attributes
CSCTFPacker Class Reference

#include <CSCTFPacker.h>

Inheritance diagram for CSCTFPacker:
edm::one::EDProducer<> edm::one::EDProducerBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

 CSCTFPacker (const edm::ParameterSet &conf)
 
void produce (edm::Event &e, const edm::EventSetup &c) override
 
 ~CSCTFPacker (void) override
 
- Public Member Functions inherited from edm::one::EDProducer<>
 EDProducer ()=default
 
SerialTaskQueueglobalLuminosityBlocksQueue () final
 
SerialTaskQueueglobalRunsQueue () final
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
bool wantsGlobalLuminosityBlocks () const final
 
bool wantsGlobalRuns () const final
 
- Public Member Functions inherited from edm::one::EDProducerBase
 EDProducerBase ()
 
ModuleDescription const & moduleDescription () const
 
bool wantsStreamLuminosityBlocks () const
 
bool wantsStreamRuns () const
 
 ~EDProducerBase () override
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts (BranchType iBranchType) const
 
 ProducerBase ()
 
std::vector< edm::ProductResolverIndex > const & putTokenIndexToProductResolverIndex () const
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription const &)> registrationCallback () const
 used by the fwk to register list of products More...
 
void resolvePutIndicies (BranchType iBranchType, ModuleToResolverIndicies const &iIndicies, std::string const &moduleLabel)
 
 ~ProducerBase () noexcept(false) override
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ESProxyIndex const * esGetTokenIndices (edm::Transition iTrans) const
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProxyIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

Private Attributes

unsigned short activeSectors
 
int central_lct_bx
 
int central_sp_bx
 
edm::EDGetTokenT< CSCCorrelatedLCTDigiCollectionCSCCDC_Tok
 
edm::EDGetTokenT< CSCTriggerContainer< csctf::TrackStub > > CSCTC_Tok
 
FILE * file
 
edm::EDGetTokenT< L1CSCTrackCollectionL1CSCTr_Tok
 
edm::InputTag lctProducer
 
int m_maxBX
 
int m_minBX
 
edm::InputTag mbProducer
 
unsigned short nTBINs
 
bool putBufferToEvent
 
bool swapME1strips
 
edm::InputTag trackProducer
 
bool zeroSuppression
 

Additional Inherited Members

- Public Types inherited from edm::one::EDProducerBase
typedef EDProducerBase ModuleType
 
- Public Types inherited from edm::ProducerBase
using ModuleToResolverIndicies = std::unordered_multimap< std::string, std::tuple< edm::TypeID const *, const char *, edm::ProductResolverIndex >>
 
typedef ProductRegistryHelper::TypeLabelList TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Static Public Member Functions inherited from edm::one::EDProducerBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 
- Protected Member Functions inherited from edm::ProducerBase
ProducesCollector producesCollector ()
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes ()
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Detailed Description

Definition at line 18 of file CSCTFPacker.h.

Constructor & Destructor Documentation

CSCTFPacker::CSCTFPacker ( const edm::ParameterSet conf)
explicit

Definition at line 22 of file CSCTFPacker.cc.

References activeSectors, central_lct_bx, central_sp_bx, CSCCDC_Tok, CSCTC_Tok, file, edm::ParameterSet::getParameter(), HLT_2018_cff::InputTag, edm::InputTag::instance(), createfilelist::int, L1CSCTr_Tok, edm::InputTag::label(), lctProducer, m_maxBX, m_minBX, mbProducer, nTBINs, download_sqlite_cfg::outputFile, putBufferToEvent, AlCaHLTBitMon_QueryRunRegistry::string, swapME1strips, trackProducer, and zeroSuppression.

23  // "Readout" configuration
24  zeroSuppression = conf.getParameter<bool>("zeroSuppression");
25  nTBINs = conf.getParameter<int>("nTBINs");
26  activeSectors = conf.getParameter<int>("activeSectors");
27 
28  // Configuration that controls CMSSW specific stuff
29  putBufferToEvent = conf.getParameter<bool>("putBufferToEvent");
30  std::string outputFile = conf.getParameter<std::string>("outputFile");
31  lctProducer = conf.getParameter<edm::InputTag>("lctProducer");
32  mbProducer = conf.getParameter<edm::InputTag>("mbProducer");
33  trackProducer = conf.getParameter<edm::InputTag>("trackProducer");
34 
35  // Swap: if(swapME1strips && me1b && !zplus) strip = 65 - strip; // 1-64 -> 64-1 :
36  swapME1strips = conf.getParameter<bool>("swapME1strips");
37 
38  file = nullptr;
39  if (outputFile.length() && (file = fopen(outputFile.c_str(), "wt")) == nullptr)
40  throw cms::Exception("OutputFile ") << "CSCTFPacker: cannot open output file (errno=" << errno
41  << "). Try outputFile=\"\"";
42 
43  // BX window bounds in CMSSW:
44  m_minBX = conf.getParameter<int>("MinBX"); //3
45  m_maxBX = conf.getParameter<int>("MaxBX"); //9
46 
47  // Finds central LCT BX
48  // assumes window is odd number of bins
49  central_lct_bx = (m_maxBX + m_minBX) / 2;
50  // Find central SP BX
51  // assumes window is odd number of bins
52  central_sp_bx = int(nTBINs / 2);
53 
54  produces<FEDRawDataCollection>("CSCTFRawData");
55 
56  CSCTC_Tok =
57  consumes<CSCTriggerContainer<csctf::TrackStub> >(edm::InputTag(mbProducer.label(), mbProducer.instance()));
58  CSCCDC_Tok = consumes<CSCCorrelatedLCTDigiCollection>(edm::InputTag(lctProducer.label(), lctProducer.instance()));
59  L1CSCTr_Tok = consumes<L1CSCTrackCollection>(edm::InputTag(trackProducer.label(), trackProducer.instance()));
60 }
T getParameter(std::string const &) const
edm::EDGetTokenT< CSCTriggerContainer< csctf::TrackStub > > CSCTC_Tok
Definition: CSCTFPacker.h:34
edm::InputTag trackProducer
Definition: CSCTFPacker.h:20
bool putBufferToEvent
Definition: CSCTFPacker.h:25
unsigned short activeSectors
Definition: CSCTFPacker.h:24
bool zeroSuppression
Definition: CSCTFPacker.h:22
edm::InputTag lctProducer
Definition: CSCTFPacker.h:20
bool swapME1strips
Definition: CSCTFPacker.h:27
edm::EDGetTokenT< CSCCorrelatedLCTDigiCollection > CSCCDC_Tok
Definition: CSCTFPacker.h:33
std::string const & label() const
Definition: InputTag.h:36
edm::InputTag mbProducer
Definition: CSCTFPacker.h:20
int central_sp_bx
Definition: CSCTFPacker.h:31
int central_lct_bx
Definition: CSCTFPacker.h:31
FILE * file
Definition: CSCTFPacker.h:29
unsigned short nTBINs
Definition: CSCTFPacker.h:23
std::string const & instance() const
Definition: InputTag.h:37
edm::EDGetTokenT< L1CSCTrackCollection > L1CSCTr_Tok
Definition: CSCTFPacker.h:35
CSCTFPacker::~CSCTFPacker ( void  )
override

Definition at line 62 of file CSCTFPacker.cc.

References file.

62  {
63  if (file)
64  fclose(file);
65 }
FILE * file
Definition: CSCTFPacker.h:29

Member Function Documentation

void CSCTFPacker::produce ( edm::Event e,
const edm::EventSetup c 
)
override

std::cout<<"Front data station: "<<station<<" sector: "<<sector<<" subSector: "<<subSector<<" tbin: "<<tbin<<" cscId: "<<cscId<<" fpga: "<<fpga<<" LCT_qual="<<lct->getQuality()<<" LCT_strip="<<lct->getStrip()<<" LCT_wire="<<lct->getKeyWG()<<std::endl;

Definition at line 67 of file CSCTFPacker.cc.

References activeSectors, CSCSPRecord::af_bits, CSCSP_MEblock::aligment_fifo_empty, CSCSP_MEblock::aligment_fifo_full, CSCSP_MEblock::bc0_, CSCSP_MBblock::bc0_, CSCSP_SPblock::bc0_, CSCSP_MEblock::bx0_, CSCSPRecord::bx_bits, CSCSP_MBblock::bxn0_, CSCSP_SPblock::bxn0_, CSCSP_MBblock::bxn1_, CSCSP_MBblock::cal_, central_lct_bx, central_sp_bx, CSCSP_SPblock::charge_, CSCSP_MEblock::clct_pattern_id, CSCSP_MEblock::clct_pattern_number, evf::compute_crc(), filterCSVwithJSON::copy, CSCSP_MEblock::csc_id, CSCCDC_Tok, CSCTC_Tok, CSCSPHeader::csr_dfc, data, CSCSP_SPblock::deltaPhi12_, CSCSP_SPblock::deltaPhi23_, dt, CSCSP_MEblock::err_prop_cnt, CSCSP_SPblock::eta_, edm::EventID::event(), l1t_dqm_sourceclient-live_cfg::fedRawData, file, CSCSP_MBblock::flag_, CSCSP_SPblock::front_rear, edm::Event::getByToken(), CSCSP_SPblock::halo_, RecoTauValidation_cfi::header, CSCSPHeader::header_mark_1, CSCSPHeader::header_mark_2, CSCSPHeader::header_mark_3, CSCSPHeader::header_mark_4, CSCSPHeader::header_mark_5, CSCSPHeader::header_mark_6, CSCSPHeader::header_mark_7, CSCSPHeader::header_mark_8, edm::EventBase::id(), CSCSP_MBblock::id_, CSCSP_SPblock::id_, edm::HandleBase::isValid(), L1CSCTr_Tok, edm::InputTag::label(), CSCSP_MEblock::left_right, MainPageGenerator::link, CSCSP_MEblock::link_id, CSCSP_MBblock::mb_bxn_, CSCSP_SPblock::mb_id, CSCSP_SPblock::mb_tbin, mbProducer, CSCSP_SPblock::me1_id, CSCSP_SPblock::me1_tbin, CSCSP_SPblock::me2_id, CSCSP_SPblock::me2_tbin, CSCSP_SPblock::me3_id, CSCSP_SPblock::me3_tbin, CSCSP_SPblock::me4_id, CSCSP_SPblock::me4_tbin, CSCSP_MEblock::me_bxn, FEDNumbering::MINCSCTFFEDID, CSCSPRecord::mode1, CSCSPRecord::mode2, CSCSPRecord::mode3, eostools::move(), CSCSP_MEblock::mpc_id, CSCSP_SPblock::ms_id, nTBINs, CSCSP_SPblock::phi_, CSCSP_MBblock::phi_, CSCSP_MBblock::phi_bend_, edm::Handle< T >::product(), edm::Event::put(), putBufferToEvent, CSCSP_MBblock::quality_, CSCSP_MEblock::quality_, CSCSP_MEblock::receiver_status_dv1, CSCSP_MEblock::receiver_status_dv2, CSCSP_MEblock::receiver_status_er1, CSCSP_MEblock::receiver_status_er2, CSCSP_SPblock::se, CSCSPRecord::se_bits, FEDHeader::set(), FEDTrailer::set(), CSCSP_SPblock::sign_, CSCSPHeader::skip, CSCSPRecord::sm_bits, CSCSPHeader::sp_ersv, CSCSPHeader::sp_trigger_sector, CSCSPRecord::spare_1, relativeConstraints::station, swapME1strips, trackProducer, PDWG_EXOHSCP_cff::tracks, CSCSPTrailer::trailer_mark_1, CSCSPTrailer::trailer_mark_10, CSCSPTrailer::trailer_mark_2, CSCSPTrailer::trailer_mark_3, CSCSPTrailer::trailer_mark_4, CSCSPTrailer::trailer_mark_5, CSCSPTrailer::trailer_mark_6, CSCSPTrailer::trailer_mark_7, CSCSPTrailer::trailer_mark_8, CSCSPTrailer::trailer_mark_9, CSCTriggerNumbering::triggerSubSectorFromLabels(), CSCSP_MEblock::valid_pattern, CSCSPRecord::vp_bits, CSCSPRecord::vq_a, CSCSPRecord::vq_b, CSCSP_MEblock::wire_group_id, testProducerWithPsetDescEmpty_cfi::x1, and zeroSuppression.

Referenced by JSONExport.JsonExport::export(), HTMLExport.HTMLExport::export(), and HTMLExport.HTMLExportStatic::export().

67  {
69  e.getByToken(CSCCDC_Tok, corrlcts);
70 
71  CSCSP_MEblock meDataRecord[12][7][5][9][2]; // LCT in sector X, tbin Y, station Z, csc W, and lct I
72  bzero(&meDataRecord, sizeof(meDataRecord));
73  CSCSPRecord meDataHeader[12][7]; // Data Block Header for sector X and tbin Y
74  bzero(&meDataHeader, sizeof(meDataHeader));
75 
77  csc != corrlcts.product()->end();
78  csc++) {
79  CSCCorrelatedLCTDigiCollection::Range range1 = corrlcts.product()->get((*csc).first);
80  int lctId = 0;
81  for (CSCCorrelatedLCTDigiCollection::const_iterator lct = range1.first; lct != range1.second; lct++, lctId++) {
82  int station = (*csc).first.station() - 1;
83  int cscId = (*csc).first.triggerCscId() - 1;
84  int sector = (*csc).first.triggerSector() - 1 + ((*csc).first.endcap() == 1 ? 0 : 6);
85  int subSector = CSCTriggerNumbering::triggerSubSectorFromLabels((*csc).first);
86  int tbin = lct->getBX() - (central_lct_bx - central_sp_bx); // Shift back to hardware BX window definition
87  if (tbin > 6 || tbin < 0) {
88  edm::LogError("CSCTFPacker|produce") << " LCT's BX=" << tbin << " is out of 0-6 window";
89  continue;
90  }
91  int fpga = (subSector ? subSector - 1 : station + 1);
93 
94  // If Det Id is within range
95  if (sector < 0 || sector > 11 || station < 0 || station > 3 || cscId < 0 || cscId > 8 || lctId < 0 || lctId > 1) {
96  edm::LogInfo("CSCTFPacker: CSC digi are out of range: ")
97  << "sector=" << sector << ", station=" << station << ", cscId=" << cscId << ", lctId=" << lctId;
98  continue;
99  }
100 
101  meDataRecord[sector][tbin][fpga][cscId][lctId].clct_pattern_number = lct->getPattern();
102  meDataRecord[sector][tbin][fpga][cscId][lctId].quality_ = lct->getQuality();
103  meDataRecord[sector][tbin][fpga][cscId][lctId].wire_group_id = lct->getKeyWG();
104 
105  meDataRecord[sector][tbin][fpga][cscId][lctId].clct_pattern_id =
106  (swapME1strips && cscId < 3 && station == 0 && (*csc).first.endcap() == 2 && lct->getStrip() < 65
107  ? 65 - lct->getStrip()
108  : lct->getStrip());
109  meDataRecord[sector][tbin][fpga][cscId][lctId].csc_id = (*csc).first.triggerCscId();
110  meDataRecord[sector][tbin][fpga][cscId][lctId].left_right = lct->getBend();
111  meDataRecord[sector][tbin][fpga][cscId][lctId].bx0_ = 0; //?;
112  meDataRecord[sector][tbin][fpga][cscId][lctId].bc0_ = 0; //?;
113 
114  meDataRecord[sector][tbin][fpga][cscId][lctId].me_bxn = 0; //?
115  meDataRecord[sector][tbin][fpga][cscId][lctId].receiver_status_er1 = 0; // dummy
116  meDataRecord[sector][tbin][fpga][cscId][lctId].receiver_status_dv1 = 0; // dummy
117  meDataRecord[sector][tbin][fpga][cscId][lctId].aligment_fifo_full = 0; // dummy
118 
119  meDataRecord[sector][tbin][fpga][cscId][lctId].link_id = lct->getMPCLink();
120  meDataRecord[sector][tbin][fpga][cscId][lctId].mpc_id = 0; // Join with above?
121  meDataRecord[sector][tbin][fpga][cscId][lctId].err_prop_cnt = 0; // dummy
122  meDataRecord[sector][tbin][fpga][cscId][lctId].receiver_status_er2 = 0; // dummy
123  meDataRecord[sector][tbin][fpga][cscId][lctId].receiver_status_dv2 = 0; // dummy
124  meDataRecord[sector][tbin][fpga][cscId][lctId].aligment_fifo_empty = 0; // dummy
125 
126  if (lct->isValid()) {
127  switch ((meDataHeader[sector][tbin].vp_bits >> (fpga * 3)) & 0x7) {
128  case 0x0:
129  meDataHeader[sector][tbin].vp_bits |= (0x1 << (fpga * 3));
130  break;
131  case 0x1:
132  meDataHeader[sector][tbin].vp_bits |= (0x3 << (fpga * 3));
133  break;
134  case 0x3:
135  meDataHeader[sector][tbin].vp_bits |= (0x7 << (fpga * 3));
136  break;
137  default:
138  edm::LogInfo("CSCTFPacker: more than 3 LCTs from a single MPC in one BX!!!");
139  continue;
140  break;
141  }
142  meDataRecord[sector][tbin][fpga][cscId][lctId].valid_pattern = 1; // for later use
143  }
144  meDataHeader[sector][tbin].vq_a = 0; // no digi yet?
145  meDataHeader[sector][tbin].vq_b = 0; // no digi yet?
146  meDataHeader[sector][tbin].se_bits = 0; // dummy
147  meDataHeader[sector][tbin].sm_bits = 0; // dummy
148  meDataHeader[sector][tbin].af_bits = 0; // dummy
149  meDataHeader[sector][tbin].bx_bits = 0; //(lct->getBX()&??<< (fpga*3));
150 
151  meDataHeader[sector][tbin].spare_1 = 0; // for later use
152  }
153  }
154 
155  CSCSP_MBblock mbDataRecord[12][2][7]; // LCT in sector X, subsector Z, tbin Y
156  bzero(&mbDataRecord, sizeof(mbDataRecord));
158  if (mbProducer.label() != "null") {
159  e.getByToken(CSCTC_Tok, barrelStubs);
160  if (barrelStubs.isValid()) {
161  std::vector<csctf::TrackStub> stubs = barrelStubs.product()->get();
162  for (std::vector<csctf::TrackStub>::const_iterator dt = stubs.begin(); dt != stubs.end(); dt++) {
163  int sector = dt->sector() - 1 + (dt->endcap() == 1 ? 0 : 6);
164  int subSector = dt->subsector() - 1;
165  int tbin = dt->getBX() - (central_lct_bx - central_sp_bx); // Shift back to hardware BX window definition
166  if (tbin < 0 || tbin > 6 || sector < 0 || sector > 11 || subSector < 0 || subSector > 11) {
167  edm::LogInfo("CSCTFPacker: CSC DT digi are out of range: ")
168  << " sector=" << sector << " subSector=" << subSector << " tbin=" << tbin;
169  continue;
170  }
171  mbDataRecord[sector][subSector][tbin].quality_ = dt->getQuality();
172  mbDataRecord[sector][subSector][tbin].phi_bend_ = dt->getBend();
173  mbDataRecord[sector][subSector][tbin].flag_ = dt->getStrip();
174  mbDataRecord[sector][subSector][tbin].cal_ = dt->getKeyWG();
175  mbDataRecord[sector][subSector][tbin].phi_ = dt->phiPacked();
176  mbDataRecord[sector][subSector][tbin].bxn1_ = (dt->getBX0() >> 1) & 0x1;
177  mbDataRecord[sector][subSector][tbin].bxn0_ = dt->getBX0() & 0x1;
178  mbDataRecord[sector][subSector][tbin].bc0_ = dt->getPattern();
179  mbDataRecord[sector][subSector][tbin].mb_bxn_ = dt->getCSCID();
180  switch (subSector) {
181  case 0:
182  meDataHeader[sector][tbin].vq_a = 1;
183  break;
184  case 1:
185  meDataHeader[sector][tbin].vq_b = 1;
186  break;
187  default:
188  edm::LogInfo("CSCTFPacker: subSector=") << subSector;
189  break;
190  }
191  mbDataRecord[sector][subSector][tbin].id_ = dt->getMPCLink(); // for later use
192  }
193  }
194  }
195 
196  CSCSP_SPblock spDataRecord[12][7][3]; // Up to 3 tracks in sector X and tbin Y
197  bzero(&spDataRecord, sizeof(spDataRecord));
198  int nTrk[12][7];
199  bzero(&nTrk, sizeof(nTrk));
200 
202  if (trackProducer.label() != "null") {
203  e.getByToken(L1CSCTr_Tok, tracks);
204 
205  for (L1CSCTrackCollection::const_iterator trk = tracks->begin(); trk != tracks->end(); trk++) {
206  int sector = 6 * (trk->first.endcap() - 1) + trk->first.sector() - 1;
207  int tbin = trk->first.BX() + central_sp_bx; // Shift back to hardware BX window definition
208  //std::cout<<"Track["<<nTrk[sector][tbin]<<"] sector: "<<sector<<" tbin: "<<tbin<<std::endl;
209  if (tbin > 6 || tbin < 0) {
210  edm::LogError("CSCTFPacker|analyze") << " Track's BX=" << tbin << " is out of 0-6 window";
211  continue;
212  }
213  if (sector < 0 || sector > 11) {
214  edm::LogError("CSCTFPacker|analyze") << " Track's sector=" << sector << " is out of range";
215  continue;
216  }
217  spDataRecord[sector][tbin][nTrk[sector][tbin]].phi_ = trk->first.localPhi();
218  spDataRecord[sector][tbin][nTrk[sector][tbin]].sign_ = (trk->first.ptLUTAddress() >> 20) & 0x1;
219  spDataRecord[sector][tbin][nTrk[sector][tbin]].front_rear = trk->first.front_rear();
220  spDataRecord[sector][tbin][nTrk[sector][tbin]].charge_ = trk->first.charge_packed(); //
221  spDataRecord[sector][tbin][nTrk[sector][tbin]].eta_ = trk->first.eta_packed();
222 
223  spDataRecord[sector][tbin][nTrk[sector][tbin]].halo_ = trk->first.finehalo_packed();
224  spDataRecord[sector][tbin][nTrk[sector][tbin]].se = 0; // dummy
225  spDataRecord[sector][tbin][nTrk[sector][tbin]].deltaPhi12_ = trk->first.ptLUTAddress() & 0xFF;
226  spDataRecord[sector][tbin][nTrk[sector][tbin]].deltaPhi23_ = (trk->first.ptLUTAddress() >> 8) & 0xF;
227  spDataRecord[sector][tbin][nTrk[sector][tbin]].bxn0_ = 0; //dummy
228  spDataRecord[sector][tbin][nTrk[sector][tbin]].bc0_ = 0; //dummy
229 
230  spDataRecord[sector][tbin][nTrk[sector][tbin]].me1_id = trk->first.me1ID();
231  spDataRecord[sector][tbin][nTrk[sector][tbin]].me2_id = trk->first.me2ID();
232  spDataRecord[sector][tbin][nTrk[sector][tbin]].me3_id = trk->first.me3ID();
233  spDataRecord[sector][tbin][nTrk[sector][tbin]].me4_id = trk->first.me4ID();
234  spDataRecord[sector][tbin][nTrk[sector][tbin]].mb_id = trk->first.mb1ID();
235  spDataRecord[sector][tbin][nTrk[sector][tbin]].ms_id = 0; // don't care winner()
236 
237  // Warning, digi copying was broken for <= CMSSW_3_8_x! The 5 lines of code below will give problems there:
238  spDataRecord[sector][tbin][nTrk[sector][tbin]].me1_tbin = trk->first.me1Tbin();
239  spDataRecord[sector][tbin][nTrk[sector][tbin]].me2_tbin = trk->first.me2Tbin();
240  spDataRecord[sector][tbin][nTrk[sector][tbin]].me3_tbin = trk->first.me3Tbin();
241  spDataRecord[sector][tbin][nTrk[sector][tbin]].me4_tbin = trk->first.me4Tbin();
242  spDataRecord[sector][tbin][nTrk[sector][tbin]].mb_tbin = trk->first.mb1Tbin();
243  // As the MB stubs are not saved in simulation, we want to introduce an artificial ids
244  if (trk->first.mb1ID()) {
245  int subSector = (trk->first.mb1ID() - 1) % 2;
246  int MBtbin = tbin - spDataRecord[sector][tbin][nTrk[sector][tbin]].mb_tbin;
247  if (subSector < 0 || subSector > 1 || MBtbin < 0 || MBtbin > 7 || !mbDataRecord[sector][subSector][MBtbin].id_)
248  spDataRecord[sector][tbin][nTrk[sector][tbin]].mb_id = (subSector ? 6 : 5);
249  }
250  spDataRecord[sector][tbin][nTrk[sector][tbin]].id_ = nTrk[sector][tbin] + 1; // for later use
251 
252  nTrk[sector][tbin]++;
253  switch (nTrk[sector][tbin]) {
254  case 1:
255  meDataHeader[sector][tbin].mode1 = (trk->first.ptLUTAddress() >> 16) & 0xF;
256  break;
257  case 2:
258  meDataHeader[sector][tbin].mode2 = (trk->first.ptLUTAddress() >> 16) & 0xF;
259  break;
260  case 3:
261  meDataHeader[sector][tbin].mode3 = (trk->first.ptLUTAddress() >> 16) & 0xF;
262  break;
263  default:
264  edm::LogInfo("More than 3 tracks from one SP in the BX");
265  continue;
266  break;
267  }
268  }
269  }
270 
272  bzero(&header, sizeof(header));
273 
274  header.header_mark_1 = 0x9;
275  header.header_mark_2 = 0x9;
276  header.header_mark_3 = 0x9;
277  header.header_mark_4 = 0x9;
278 
279  header.header_mark_5 = 0xA;
280  header.header_mark_6 = 0xA;
281  header.header_mark_7 = 0xA;
282  header.header_mark_8 = 0xA;
283 
284  header.csr_dfc = nTBINs;
285  header.csr_dfc |= (zeroSuppression ? 0x8 : 0x0);
286  header.csr_dfc |= 0x7F0; // All FPGAs are active
287  header.skip = 0;
288  header.sp_ersv = 2; // Format version with block of counters
289 
290  CSCSPCounters counters;
291  bzero(&counters, sizeof(counters));
292 
293  CSCSPTrailer trailer;
294  bzero(&trailer, sizeof(trailer));
295 
296  trailer.trailer_mark_1 = 0xF;
297  trailer.trailer_mark_2 = 0xF;
298  trailer.trailer_mark_3 = 0x7;
299  trailer.trailer_mark_4 = 0xF;
300  trailer.trailer_mark_5 = 0xF;
301  trailer.trailer_mark_6 = 0xF;
302  trailer.trailer_mark_7 = 0xE;
303  trailer.trailer_mark_8 = 0xE;
304  trailer.trailer_mark_9 = 0xE;
305  trailer.trailer_mark_10 = 0xE;
306 
307  unsigned short spDDUrecord[700 * 12], *pos = spDDUrecord; // max length
308  bzero(&spDDUrecord, sizeof(spDDUrecord));
309  int eventNumber = e.id().event();
310  *pos++ = 0x0000;
311  *pos++ = 0x0000;
312  *pos++ = 0xFFFF & eventNumber;
313  *pos++ = 0x5000 | (eventNumber >> 16);
314  *pos++ = 0x0000;
315  *pos++ = 0x8000;
316  *pos++ = 0x0001;
317  *pos++ = 0x8000;
318  *pos++ = 0x0000;
319  *pos++ = 0x0000;
320  *pos++ = 0x0000;
321  *pos++ = 0x0000;
322 
323  for (int sector = 0; sector < 12; sector++) {
324  if (!(activeSectors & (1 << sector)))
325  continue;
326  header.sp_trigger_sector = sector + 1;
327  memcpy(pos, &header, 16);
328  pos += 8;
329  memcpy(pos, &counters, 8);
330  pos += 4;
331 
332  for (int tbin = 0; tbin < nTBINs; tbin++) {
333  memcpy(pos, &meDataHeader[sector][tbin], 16);
334  pos += 8;
335  for (int fpga = 0; fpga < 5; fpga++) {
336  int nLCTs = 0;
337  for (int link = 0; link < 3; link++) {
338  for (int cscId = 0; cscId < 9; cscId++)
339  for (int lctId = 0; lctId < 2; lctId++)
340  // Only 3 LCT per BX from the same fpga are allowed (to be valid):
341  if (meDataRecord[sector][tbin][fpga][cscId][lctId].valid_pattern &&
342  meDataRecord[sector][tbin][fpga][cscId][lctId].link_id == link + 1) {
343  memcpy(pos, &meDataRecord[sector][tbin][fpga][cscId][lctId], 8);
344  pos += 4;
345  nLCTs++;
346  }
347  }
348  if (!zeroSuppression)
349  pos += 4 * (3 - nLCTs);
350  }
351  for (int subSector = 0; subSector < 2; subSector++)
352  if (!zeroSuppression || (subSector == 0 && meDataHeader[sector][tbin].vq_a) ||
353  (subSector == 1 && meDataHeader[sector][tbin].vq_b)) {
354  memcpy(pos, &mbDataRecord[sector][subSector][tbin], 8);
355  pos += 4;
356  }
357  for (int trk = 0; trk < 3; trk++) {
358  if (!zeroSuppression || spDataRecord[sector][tbin][trk].id_) {
359  memcpy(pos, &spDataRecord[sector][tbin][trk], 8);
360  pos += 4;
361  }
362  }
363  }
364  memcpy(pos, &trailer, 16);
365  pos += 8;
366  }
367 
368  *pos++ = 0x8000;
369  *pos++ = 0x8000;
370  *pos++ = 0xFFFF;
371  *pos++ = 0x8000;
372  *pos++ = 0x0000;
373  *pos++ = 0x0000;
374  *pos++ = 0x0000;
375  *pos++ = 0x0000;
376  *pos++ = 0x0000;
377  *pos++ = 0x0000;
378  *pos++ = 0x0000;
379  *pos++ = 0x0000;
380 
381  if (putBufferToEvent) {
382  auto data = std::make_unique<FEDRawDataCollection>();
383  FEDRawData& fedRawData = data->FEDData((unsigned int)FEDNumbering::MINCSCTFFEDID);
384  fedRawData.resize((pos - spDDUrecord) * sizeof(unsigned short));
385  std::copy((unsigned char*)spDDUrecord, (unsigned char*)pos, fedRawData.data());
386  FEDHeader csctfFEDHeader(fedRawData.data());
387  csctfFEDHeader.set(fedRawData.data(), 0, e.id().event(), 0, FEDNumbering::MINCSCTFFEDID);
388  FEDTrailer csctfFEDTrailer(fedRawData.data() + (fedRawData.size() - 8));
389  csctfFEDTrailer.set(fedRawData.data() + (fedRawData.size() - 8),
390  fedRawData.size() / 8,
391  evf::compute_crc(fedRawData.data(), fedRawData.size()),
392  0,
393  0);
394  e.put(std::move(data), "CSCTFRawData");
395  }
396 
397  if (file)
398  fwrite(spDDUrecord, 2, pos - spDDUrecord, file);
399 }
unsigned header_mark_8
Definition: CSCSPHeader.h:64
unsigned sp_trigger_sector
Definition: CSCSPHeader.h:28
unsigned me1_id
Definition: CSCSP_SPblock.h:28
EventNumber_t event() const
Definition: EventID.h:40
unsigned bx_bits
Definition: CSCSPRecord.h:34
unsigned phi_
Definition: CSCSP_MBblock.h:17
float dt
Definition: AMPTWrapper.h:136
unsigned deltaPhi23_
Definition: CSCSP_SPblock.h:22
unsigned eta_
Definition: CSCSP_SPblock.h:15
unsigned trailer_mark_10
Definition: CSCSPTrailer.h:43
unsigned me_bxn
Definition: CSCSP_MEblock.h:23
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:131
unsigned mb_tbin
Definition: CSCSP_SPblock.h:40
unsigned front_rear
Definition: CSCSP_SPblock.h:13
unsigned trailer_mark_2
Definition: CSCSPTrailer.h:13
unsigned trailer_mark_4
Definition: CSCSPTrailer.h:17
unsigned aligment_fifo_empty
Definition: CSCSP_MEblock.h:36
unsigned spare_1
Definition: CSCSPRecord.h:21
unsigned skip
Definition: CSCSPHeader.h:63
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:525
unsigned trailer_mark_6
Definition: CSCSPTrailer.h:28
unsigned clct_pattern_number
Definition: CSCSP_MEblock.h:10
unsigned mb_id
Definition: CSCSP_SPblock.h:32
unsigned me3_tbin
Definition: CSCSP_SPblock.h:38
unsigned bx0_
Definition: CSCSP_MEblock.h:19
unsigned aligment_fifo_full
Definition: CSCSP_MEblock.h:27
unsigned trailer_mark_3
Definition: CSCSPTrailer.h:14
unsigned trailer_mark_7
Definition: CSCSPTrailer.h:32
unsigned af_bits
Definition: CSCSPRecord.h:31
unsigned sign_
Definition: CSCSP_SPblock.h:12
unsigned me2_id
Definition: CSCSP_SPblock.h:29
unsigned bc0_
Definition: CSCSP_MBblock.h:20
unsigned csc_id
Definition: CSCSP_MEblock.h:17
unsigned left_right
Definition: CSCSP_MEblock.h:18
unsigned deltaPhi12_
Definition: CSCSP_SPblock.h:21
edm::EDGetTokenT< CSCTriggerContainer< csctf::TrackStub > > CSCTC_Tok
Definition: CSCTFPacker.h:34
unsigned mode2
Definition: CSCSPRecord.h:17
unsigned cal_
Definition: CSCSP_MBblock.h:14
unsigned flag_
Definition: CSCSP_MBblock.h:13
unsigned header_mark_7
Definition: CSCSPHeader.h:45
unsigned bxn1_
Definition: CSCSP_MBblock.h:18
unsigned me2_tbin
Definition: CSCSP_SPblock.h:37
unsigned header_mark_6
Definition: CSCSPHeader.h:30
unsigned clct_pattern_id
Definition: CSCSP_MEblock.h:16
unsigned halo_
Definition: CSCSP_SPblock.h:16
unsigned header_mark_1
Definition: CSCSPHeader.h:10
unsigned receiver_status_dv2
Definition: CSCSP_MEblock.h:34
edm::InputTag trackProducer
Definition: CSCTFPacker.h:20
unsigned receiver_status_dv1
Definition: CSCSP_MEblock.h:25
unsigned header_mark_2
Definition: CSCSPHeader.h:13
unsigned trailer_mark_1
Definition: CSCSPTrailer.h:11
unsigned short compute_crc(unsigned char *buffer, unsigned int bufSize)
Definition: CRC16.h:46
unsigned receiver_status_er2
Definition: CSCSP_MEblock.h:33
unsigned sp_ersv
Definition: CSCSPHeader.h:26
unsigned phi_bend_
Definition: CSCSP_MBblock.h:11
unsigned int id_
Definition: CSCSP_MBblock.h:39
unsigned trailer_mark_8
Definition: CSCSPTrailer.h:35
unsigned bc0_
Definition: CSCSP_MEblock.h:20
unsigned receiver_status_er1
Definition: CSCSP_MEblock.h:24
bool isValid() const
Definition: HandleBase.h:70
unsigned header_mark_4
Definition: CSCSPHeader.h:19
Definition: L1Track.h:19
unsigned me3_id
Definition: CSCSP_SPblock.h:30
unsigned header_mark_5
Definition: CSCSPHeader.h:23
unsigned int id_
Definition: CSCSP_SPblock.h:57
unsigned charge_
Definition: CSCSP_SPblock.h:14
bool putBufferToEvent
Definition: CSCTFPacker.h:25
unsigned short activeSectors
Definition: CSCTFPacker.h:24
unsigned trailer_mark_5
Definition: CSCSPTrailer.h:25
bool zeroSuppression
Definition: CSCTFPacker.h:22
T const * product() const
Definition: Handle.h:69
unsigned csr_dfc
Definition: CSCSPHeader.h:62
unsigned mode3
Definition: CSCSPRecord.h:18
std::pair< const_iterator, const_iterator > Range
unsigned header_mark_3
Definition: CSCSPHeader.h:16
bool swapME1strips
Definition: CSCTFPacker.h:27
std::vector< DigiType >::const_iterator const_iterator
static int triggerSubSectorFromLabels(int station, int chamber)
edm::EDGetTokenT< CSCCorrelatedLCTDigiCollection > CSCCDC_Tok
Definition: CSCTFPacker.h:33
std::string const & label() const
Definition: InputTag.h:36
edm::InputTag mbProducer
Definition: CSCTFPacker.h:20
edm::EventID id() const
Definition: EventBase.h:59
int central_sp_bx
Definition: CSCTFPacker.h:31
unsigned mode1
Definition: CSCSPRecord.h:16
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:79
int central_lct_bx
Definition: CSCTFPacker.h:31
unsigned quality_
Definition: CSCSP_MEblock.h:11
unsigned wire_group_id
Definition: CSCSP_MEblock.h:12
unsigned vq_a
Definition: CSCSPRecord.h:19
unsigned mpc_id
Definition: CSCSP_MEblock.h:31
unsigned me4_tbin
Definition: CSCSP_SPblock.h:39
unsigned bxn0_
Definition: CSCSP_MBblock.h:19
unsigned err_prop_cnt
Definition: CSCSP_MEblock.h:32
unsigned se_bits
Definition: CSCSPRecord.h:24
static void set(unsigned char *header, uint8_t triggerType, uint32_t lvl1ID, uint16_t bxID, uint16_t sourceID, uint8_t version=0, bool moreHeaders=false)
Set all fields in the header.
Definition: FEDHeader.cc:25
FILE * file
Definition: CSCTFPacker.h:29
unsigned vq_b
Definition: CSCSPRecord.h:20
unsigned mb_bxn_
Definition: CSCSP_MBblock.h:23
unsigned trailer_mark_9
Definition: CSCSPTrailer.h:39
unsigned short nTBINs
Definition: CSCTFPacker.h:23
unsigned bc0_
Definition: CSCSP_SPblock.h:25
unsigned int valid_pattern
Definition: CSCSP_MEblock.h:52
unsigned bxn0_
Definition: CSCSP_SPblock.h:24
unsigned phi_
Definition: CSCSP_SPblock.h:11
def move(src, dest)
Definition: eostools.py:511
unsigned link_id
Definition: CSCSP_MEblock.h:30
unsigned ms_id
Definition: CSCSP_SPblock.h:33
unsigned me1_tbin
Definition: CSCSP_SPblock.h:36
unsigned sm_bits
Definition: CSCSPRecord.h:28
unsigned quality_
Definition: CSCSP_MBblock.h:9
edm::EDGetTokenT< L1CSCTrackCollection > L1CSCTr_Tok
Definition: CSCTFPacker.h:35
unsigned vp_bits
Definition: CSCSPRecord.h:13
unsigned me4_id
Definition: CSCSP_SPblock.h:31

Member Data Documentation

unsigned short CSCTFPacker::activeSectors
private

Definition at line 24 of file CSCTFPacker.h.

Referenced by CSCTFPacker(), and produce().

int CSCTFPacker::central_lct_bx
private

Definition at line 31 of file CSCTFPacker.h.

Referenced by CSCTFPacker(), and produce().

int CSCTFPacker::central_sp_bx
private

Definition at line 31 of file CSCTFPacker.h.

Referenced by CSCTFPacker(), and produce().

edm::EDGetTokenT<CSCCorrelatedLCTDigiCollection> CSCTFPacker::CSCCDC_Tok
private

Definition at line 33 of file CSCTFPacker.h.

Referenced by CSCTFPacker(), and produce().

edm::EDGetTokenT<CSCTriggerContainer<csctf::TrackStub> > CSCTFPacker::CSCTC_Tok
private

Definition at line 34 of file CSCTFPacker.h.

Referenced by CSCTFPacker(), and produce().

FILE* CSCTFPacker::file
private

Definition at line 29 of file CSCTFPacker.h.

Referenced by CSCTFPacker(), produce(), and ~CSCTFPacker().

edm::EDGetTokenT<L1CSCTrackCollection> CSCTFPacker::L1CSCTr_Tok
private

Definition at line 35 of file CSCTFPacker.h.

Referenced by CSCTFPacker(), and produce().

edm::InputTag CSCTFPacker::lctProducer
private

Definition at line 20 of file CSCTFPacker.h.

Referenced by CSCTFPacker().

int CSCTFPacker::m_maxBX
private

Definition at line 31 of file CSCTFPacker.h.

Referenced by CSCTFPacker().

int CSCTFPacker::m_minBX
private

Definition at line 31 of file CSCTFPacker.h.

Referenced by CSCTFPacker().

edm::InputTag CSCTFPacker::mbProducer
private

Definition at line 20 of file CSCTFPacker.h.

Referenced by CSCTFPacker(), and produce().

unsigned short CSCTFPacker::nTBINs
private

Definition at line 23 of file CSCTFPacker.h.

Referenced by CSCTFPacker(), and produce().

bool CSCTFPacker::putBufferToEvent
private

Definition at line 25 of file CSCTFPacker.h.

Referenced by CSCTFPacker(), and produce().

bool CSCTFPacker::swapME1strips
private

Definition at line 27 of file CSCTFPacker.h.

Referenced by CSCTFPacker(), and produce().

edm::InputTag CSCTFPacker::trackProducer
private

Definition at line 20 of file CSCTFPacker.h.

Referenced by CSCTFPacker(), and produce().

bool CSCTFPacker::zeroSuppression
private

Definition at line 22 of file CSCTFPacker.h.

Referenced by CSCTFPacker(), and produce().