CMS 3D CMS Logo

L1TExtCondLegacyToStage2.cc
Go to the documentation of this file.
1 
10 
11 // system include files
12 #include <boost/shared_ptr.hpp>
13 
14 // user include files
15 
26 
30 
33 
34 //#include <vector>
35 
37 
39 
41 
42 using namespace std;
43 using namespace edm;
44 using namespace l1t;
45 
46 
47  //
48  // class declaration
49  //
50 
52  public:
53  explicit L1TExtCondLegacyToStage2(const ParameterSet&);
54  ~L1TExtCondLegacyToStage2() override;
55 
56  static void fillDescriptions(ConfigurationDescriptions& descriptions);
57 
58  private:
59  void produce(edm::Event&, const edm::EventSetup&) override;
60 
61  // ----------member data ---------------------------
62  //unsigned long long m_paramsCacheId; // Cache-ID from current parameters, to check if needs to be updated.
63  //boost::shared_ptr<const CaloParams> m_dbpars; // Database parameters for the trigger, to be updated as needed.
64  //boost::shared_ptr<const FirmwareVersion> m_fwv;
65  //boost::shared_ptr<FirmwareVersion> m_fwv; //not const during testing.
66 
67  // BX parameters
68  int bxFirst_;
69  int bxLast_;
70 
71  // Readout Record token
73 
74  unsigned long long m_l1GtMenuCacheID;
75  std::map<std::string, unsigned int> m_extBitMap;
76  };
77 
78  //
79  // constructors and destructor
80  //
82  bxFirst_ (iConfig.getParameter<int>("bxFirst")),
83  bxLast_ (iConfig.getParameter<int>("bxLast")),
84  gtReadoutRecordToken (consumes <L1GlobalTriggerReadoutRecord> (iConfig.getParameter<edm::InputTag>("LegacyGtReadoutRecord")))
85  {
86  // register what you produce
87  produces<GlobalExtBlkBxCollection>();
88 
89  m_l1GtMenuCacheID = 0ULL;
90  }
91 
92 
94  {
95  }
96 
97 
98 
99  //
100  // member functions
101  //
102 
103  // ------------ method called to produce the data ------------
104  void
106  {
107 
108  LogDebug("L1TExtCondLegacyToStage2") << "L1TExtCondLegacyToStage2::produce function called...\n";
109 
110  // get / update the trigger menu from the EventSetup
111  // local cache & check on cacheIdentifier
112  unsigned long long l1GtMenuCacheID = iSetup.get<L1TUtmTriggerMenuRcd>().cacheIdentifier();
113 
114  if (m_l1GtMenuCacheID != l1GtMenuCacheID) {
115 
117  iSetup.get< L1TUtmTriggerMenuRcd>().get(l1GtMenu) ;
118  const L1TUtmTriggerMenu* utml1GtMenu = l1GtMenu.product();
119 
120  // Instantiate Parser
121  TriggerMenuParser gtParser = TriggerMenuParser();
122 
123  std::map<std::string, unsigned int> extBitMap = gtParser.getExternalSignals(utml1GtMenu);
124 
125  m_l1GtMenuCacheID = l1GtMenuCacheID;
126  m_extBitMap = extBitMap;
127  }
128 
129  bool foundBptxAND = ( m_extBitMap.find("BPTX_plus_AND_minus.v0")!=m_extBitMap.end() );
130  bool foundBptxPlus = ( m_extBitMap.find("BPTX_plus.v0")!=m_extBitMap.end() );
131  bool foundBptxMinus = ( m_extBitMap.find("BPTX_minus.v0")!=m_extBitMap.end() );
132  bool foundBptxOR = ( m_extBitMap.find("BPTX_plus_OR_minus.v0")!=m_extBitMap.end() );
133 
134  unsigned int bitBptxAND = m_extBitMap["BPTX_plus_AND_minus.v0"];
135  unsigned int bitBptxPlus = m_extBitMap["BPTX_plus.v0"];
136  unsigned int bitBptxMinus = m_extBitMap["BPTX_minus.v0"];
137  unsigned int bitBptxOR = m_extBitMap["BPTX_plus_OR_minus.v0"];
138 
140  iEvent.getByToken(gtReadoutRecordToken, gtReadoutRecord);
141 
142 
143  // Setup vectors
144  GlobalExtBlk extCond_bx_m2;
145  GlobalExtBlk extCond_bx_m1;
146  GlobalExtBlk extCond_bx_0;
147  GlobalExtBlk extCond_bx_p1;
148  GlobalExtBlk extCond_bx_p2;
149 
150  if( gtReadoutRecord.isValid() ){
151  // L1GlobalTriggerReadoutRecord const & l1tResults = * gtReadoutRecord;
152 
153  // // select PSB#9 and bunch crossing 0
154  // const L1GtPsbWord & psb = l1tResults.gtPsbWord(0xbb09, 0);
155 
156  // // the four 16-bit words psb.bData(1), psb.aData(1), psb.bData(0) and psb.aData(0) yield
157  // // (in this sequence) the 64 technical trigger bits from most significant to least significant bit
158  // uint64_t psbTriggerWord = ( (uint64_t) psb.bData(1) << 48) |
159  // ((uint64_t) psb.aData(1) << 32) |
160  // ((uint64_t) psb.bData(0) << 16) |
161  // ((uint64_t) psb.aData(0));
162 
163  // std::cout << "psbTriggerWord = " << psbTriggerWord << std::endl;
164  // //
165 
166  for( int ibx = 0; ibx < 5; ibx++ ){
167  int useBx = ibx - 2;
168  if( useBx<bxFirst_ || useBx>bxLast_ ) continue;
169 
170  //std::cout << " BX = " << ibx - 2 << std::endl;
171 
172  // L1 technical
173  const TechnicalTriggerWord& gtTTWord = gtReadoutRecord->technicalTriggerWord(useBx);
174  int tbitNumber = 0;
175  TechnicalTriggerWord::const_iterator GTtbitItr;
176  bool passBptxAND = false;
177  bool passBptxPlus = false;
178  bool passBptxMinus = false;
179  bool passBptxOR = false;
180  for(GTtbitItr = gtTTWord.begin(); GTtbitItr != gtTTWord.end(); GTtbitItr++) {
181  int pass_l1t_tech = 0;
182  if (*GTtbitItr) pass_l1t_tech = 1;
183 
184  if( pass_l1t_tech==1 ){
185  if( tbitNumber==0 ) passBptxAND = true;
186  else if( tbitNumber==1 ) passBptxPlus = true;
187  else if( tbitNumber==2 ) passBptxMinus = true;
188  else if( tbitNumber==3 ) passBptxOR = true;
189  }
190 
191  tbitNumber++;
192  }
193 
194  if( useBx==-2 ){
195  if( passBptxAND && foundBptxAND ) extCond_bx_m2.setExternalDecision(bitBptxAND,true);
196  if( passBptxPlus && foundBptxPlus ) extCond_bx_m2.setExternalDecision(bitBptxPlus,true);
197  if( passBptxMinus && foundBptxMinus ) extCond_bx_m2.setExternalDecision(bitBptxMinus,true);
198  if( passBptxOR && foundBptxOR ) extCond_bx_m2.setExternalDecision(bitBptxOR,true);
199  }
200  else if( useBx==-1 ){
201  if( passBptxAND && foundBptxAND ) extCond_bx_m1.setExternalDecision(bitBptxAND,true);
202  if( passBptxPlus && foundBptxPlus ) extCond_bx_m1.setExternalDecision(bitBptxPlus,true);
203  if( passBptxMinus && foundBptxMinus ) extCond_bx_m1.setExternalDecision(bitBptxMinus,true);
204  if( passBptxOR && foundBptxOR ) extCond_bx_m1.setExternalDecision(bitBptxOR,true);
205  }
206  else if( useBx==0 ){
207  if( passBptxAND && foundBptxAND ) extCond_bx_0.setExternalDecision(bitBptxAND,true);
208  if( passBptxPlus && foundBptxPlus ) extCond_bx_0.setExternalDecision(bitBptxPlus,true);
209  if( passBptxMinus && foundBptxMinus ) extCond_bx_0.setExternalDecision(bitBptxMinus,true);
210  if( passBptxOR && foundBptxOR ) extCond_bx_0.setExternalDecision(bitBptxOR,true);
211  }
212  else if( useBx==1 ){
213  if( passBptxAND && foundBptxAND ) extCond_bx_p1.setExternalDecision(bitBptxAND,true);
214  if( passBptxPlus && foundBptxPlus ) extCond_bx_p1.setExternalDecision(bitBptxPlus,true);
215  if( passBptxMinus && foundBptxMinus ) extCond_bx_p1.setExternalDecision(bitBptxMinus,true);
216  if( passBptxOR && foundBptxOR ) extCond_bx_p1.setExternalDecision(bitBptxOR,true);
217  }
218  else if( useBx==2 ){
219  if( passBptxAND && foundBptxAND ) extCond_bx_p2.setExternalDecision(bitBptxAND,true);
220  if( passBptxPlus && foundBptxPlus ) extCond_bx_p2.setExternalDecision(bitBptxPlus,true);
221  if( passBptxMinus && foundBptxMinus ) extCond_bx_p2.setExternalDecision(bitBptxMinus,true);
222  if( passBptxOR && foundBptxOR ) extCond_bx_p2.setExternalDecision(bitBptxOR,true);
223  }
224  }
225  }
226  else {
227  LogWarning("MissingProduct") << "Input L1GlobalTriggerReadoutRecord collection not found\n";
228  }
229 
230  //outputs
231  std::unique_ptr<GlobalExtBlkBxCollection> extCond( new GlobalExtBlkBxCollection(0,bxFirst_,bxLast_));
232 
233  // Fill Externals
234  if( -2>=bxFirst_ && -2<=bxLast_ ) extCond->push_back(-2, extCond_bx_m2);
235  if( -1>=bxFirst_ && -1<=bxLast_ ) extCond->push_back(-1, extCond_bx_m1);
236  if( 0>=bxFirst_ && 0<=bxLast_ ) extCond->push_back(0, extCond_bx_0);
237  if( 1>=bxFirst_ && 1<=bxLast_ ) extCond->push_back(1, extCond_bx_p1);
238  if( 2>=bxFirst_ && 2<=bxLast_ ) extCond->push_back(2, extCond_bx_p2);
239 
240 
241  iEvent.put(std::move(extCond));
242 
243  }
244 
245  // ------------ method fills 'descriptions' with the allowed parameters for the module ------------
246  void
248  // l1GtExtCondLegacyToStage2
250  desc.add<int>("bxFirst", -2);
251  desc.add<int>("bxLast", 2);
252  desc.add<edm::InputTag>("LegacyGtReadoutRecord", edm::InputTag("unpackLegacyGtDigis"));
253  descriptions.add("l1GtExtCondLegacyToStage2", desc);
254  }
255 
256 
257 
258 //define this as a plug-in
#define LogDebug(id)
BXVector< GlobalExtBlk > GlobalExtBlkBxCollection
Definition: GlobalExtBlk.h:30
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:125
const TechnicalTriggerWord & technicalTriggerWord(int bxInEventValue) const
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:517
std::map< std::string, unsigned int > m_extBitMap
delete x;
Definition: CaloConfig.h:22
std::map< std::string, unsigned int > getExternalSignals(const L1TUtmTriggerMenu *utmMenu)
static void fillDescriptions(ConfigurationDescriptions &descriptions)
L1TExtCondLegacyToStage2(const ParameterSet &)
edm::EDGetTokenT< L1GlobalTriggerReadoutRecord > gtReadoutRecordToken
void produce(edm::Event &, const edm::EventSetup &) override
int iEvent
Definition: GenABIO.cc:224
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
std::vector< bool > TechnicalTriggerWord
technical trigger bits (64 bits)
ParameterDescriptionBase * add(U const &iLabel, T const &value)
bool isValid() const
Definition: HandleBase.h:74
void setExternalDecision(unsigned int bit, bool val)
Set decision bits.
Definition: GlobalExtBlk.cc:52
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
void add(std::string const &label, ParameterSetDescription const &psetDescription)
HLT enums.
T get() const
Definition: EventSetup.h:71
T const * product() const
Definition: ESHandle.h:86
def move(src, dest)
Definition: eostools.py:511