CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
readTestVector.cc
Go to the documentation of this file.
1 #include <iostream>
2 #include <iomanip>
3 #include <fstream>
4 #include <memory>
5 #include <map>
6 
12 
13 #include "L1Trigger/L1TGlobal/src/L1TMenuEditor/L1TriggerMenu.hxx"
14 
16 
17 #include <boost/program_options.hpp>
18 
19 #include "TH1.h"
20 #include "TFile.h"
21 
22 const int MAX_ALGO_BITS = 512;
23 
24 #ifndef M_PI
25 #define M_PI 3.14159265358979323846
26 #endif
27 
31 
32 std::vector<int> l1taccepts;
33 std::vector<std::string> l1tnames;
34 std::vector<int> l1taccepts_evt;
35 
36 void parseMuons( std::vector<std::string> muons, bool verbose );
37 void parseEGs( std::vector<std::string> egs, bool verbose );
38 void parseTaus( std::vector<std::string> taus, bool verbose );
39 void parseJets( std::vector<std::string> jets, bool verbose );
40 void parseEtSums(std::vector<std::string> etsums, bool verbose );
41 
42 void parseAlgo( std::string algo );
43 
49 
50 double convertPtFromHW( int hwPt, double max, double step );
51 double convertEtaFromHW( int hwEta, double max, double step, int hwMax );
52 double convertPhiFromHW( int hwPhi, double step );
53 
54 
55 TH1D* h_l1mu_pt_;
62 
67 
68 TH1D* h_l1eg_pt_;
73 
79 
80 TH1D* h_l1ht_;
81 TH1D* h_l1et_;
86 
87 
88 double MaxLepPt_ = 255;
89 double MaxJetPt_ = 1023;
90 double MaxEt_ = 2047;
91 
92 double MaxCaloEta_ = 5.0;
93 double MaxMuonEta_ = 2.45;
94 
95 double PhiStepCalo_ = 144;
96 double PhiStepMuon_ = 576;
97 
98 double EtaStepCalo_ = 230;
99 double EtaStepMuon_ = 450;
100 
101 double PtStep_ = 0.5;
102 
103 
104 // The application.
105 int main( int argc, char** argv ){
106  using namespace boost;
107  namespace po = boost::program_options;
108 
109  std::string vector_file;
110  std::string xml_file;
111  std::string histo_file;
112  bool dumpEvents;
113  int maxEvents;
114 
115  po::options_description desc("Main options");
116  desc.add_options()
117  ("vector_file,i", po::value<std::string>(&vector_file)->default_value(""), "Input file")
118  ("menu_file,m", po::value<std::string>(&xml_file)->default_value(""), "Menu file")
119  ("hist_file,o", po::value<std::string>(&histo_file)->default_value(""), "Output histogram file")
120  ("dumpEvents,d", po::value<bool>(&dumpEvents)->default_value(false), "Dump event-by-event information")
121  ("maxEvents,n", po::value<int>(&maxEvents)->default_value(-1), "Number of events (default is all)")
122  ("help,h", "Produce help message")
123  ;
124 
125  po::variables_map vm, vm0;
126 
127  // parse the first time, using only common options and allow unregistered options
128  try{
129  po::store(po::command_line_parser(argc, argv).options(desc).allow_unregistered().run(), vm0);
130  po::notify(vm0);
131  } catch(std::exception &ex) {
132  std::cout << "Invalid options: " << ex.what() << std::endl;
133  std::cout << "Use readTestVector --help to get a list of all the allowed options" << std::endl;
134  return 999;
135  } catch(...) {
136  std::cout << "Unidentified error parsing options." << std::endl;
137  return 1000;
138  }
139 
140  // if help, print help
141  if(vm0.count("help")) {
142  std::cout << "Usage: readTestVector [options]\n";
143  std::cout << desc;
144  return 0;
145  }
146 
147  if( vector_file=="" ){
148  std::cout << "No input file specified" << std::endl;
149  return 99;
150  }
151 
152  bool readXML = true;
153  if( xml_file=="" ){
154  readXML = false;
155  std::cout << "No menu file specified" << std::endl;
156  }
157 
158  bool output = true;
159  if( histo_file=="" ){
160  output = false;
161  }
162 
163  TFile* histofile = NULL;
164  if( output ){
165  histofile = new TFile(histo_file.c_str(),"RECREATE");
166  histofile->cd();
167  }
168 
169  l1taccepts.resize(MAX_ALGO_BITS);
171  for( unsigned int i=0; i<l1taccepts.size(); i++ ) l1taccepts[i] = 0;
172 
173  if( readXML ){
174  // Load XML.
175  std::auto_ptr<l1t::L1TriggerMenu> tm(l1t::l1TriggerMenu(xml_file));
176 
177  l1tnames.resize(MAX_ALGO_BITS);
178  l1t::AlgorithmList algorithms = tm->algorithms();
179  for( l1t::AlgorithmList::algorithm_const_iterator i = algorithms.algorithm().begin();
180  i != algorithms.algorithm().end(); ++i ){
181 
182  l1t::Algorithm algorithm = (*i);
183 
184  int index = algorithm.index();
185  std::string name = algorithm.name();
186 
187  l1tnames[index] = name;
188  }
189  }
190 
192  h_l1mu_pt_ = new TH1D("h_l1mu_pt", ";L1 #mu p_{T}", int((MaxLepPt_+PtStep_)/(PtStep_) + 1.001), 0, MaxLepPt_+PtStep_ );
193  h_l1mu_eta_ = new TH1D("h_l1mu_eta",";L1 #mu #eta", int(EtaStepMuon_/2+0.0001), -MaxMuonEta_, MaxMuonEta_ );
194  h_l1mu_phi_ = new TH1D("h_l1mu_phi",";L1 #mu #phi", PhiStepMuon_+1, 0, 2*M_PI );
195  h_l1mu_charge_ = new TH1D("h_l1mu_charge_",";L1 #mu charge", 2, 0, 2 );
196  h_l1mu_quality_ = new TH1D("h_l1mu_quality_",";L1 #mu quality", 16, 0, 16 );
197  h_l1mu_isolation_ = new TH1D("h_l1mu_isolation_",";L1 #mu isolation", 4, 0, 4 );
198  h_l1mu_num_ = new TH1D("h_l1mu_num",";L1 Number of #mu", 10, 0, 10 );
199 
200  h_l1jet_pt_ = new TH1D("h_l1jet_pt", ";L1 jet p_{T}", int((MaxJetPt_+PtStep_)/(4*PtStep_) + 1.001), 0, MaxJetPt_+PtStep_ );
201  h_l1jet_eta_ = new TH1D("h_l1jet_eta",";L1 jet #eta", int(EtaStepCalo_/2+0.0001), -MaxCaloEta_, MaxCaloEta_ );
202  h_l1jet_phi_ = new TH1D("h_l1jet_phi",";L1 jet #phi", PhiStepCalo_+1, 0, 2*M_PI );
203  h_l1jet_num_ = new TH1D("h_l1jet_num",";L1 Number of jets", 13, 0, 13 );
204 
205  h_l1eg_pt_ = new TH1D("h_l1eg_pt", ";L1 EG p_{T}", int((MaxLepPt_+PtStep_)/(PtStep_) + 1.001), 0, MaxLepPt_+PtStep_ );
206  h_l1eg_eta_ = new TH1D("h_l1eg_eta",";L1 EG #eta", int(EtaStepCalo_/2+0.0001), -MaxCaloEta_, MaxCaloEta_ );
207  h_l1eg_phi_ = new TH1D("h_l1eg_phi",";L1 EG #phi", PhiStepCalo_+1, 0, 2*M_PI );
208  h_l1eg_isolation_ = new TH1D("h_l1eg_isolation_",";L1 EG isolation", 4, 0, 4 );
209  h_l1eg_num_ = new TH1D("h_l1eg_num",";L1 Number of EGs", 13, 0, 13 );
210 
211  h_l1tau_pt_ = new TH1D("h_l1tau_pt", ";L1 #tau p_{T}", int((MaxLepPt_+PtStep_)/(PtStep_) + 1.001), 0, MaxLepPt_+PtStep_ );
212  h_l1tau_eta_ = new TH1D("h_l1tau_eta",";L1 #tau #eta", int(EtaStepCalo_/2+0.0001), -MaxCaloEta_, MaxCaloEta_ );
213  h_l1tau_phi_ = new TH1D("h_l1tau_phi",";L1 #tau #phi", PhiStepCalo_+1, 0, 2*M_PI );
214  h_l1tau_isolation_ = new TH1D("h_l1tau_isolation_",";L1 #tau isolation", 4, 0, 4 );
215  h_l1tau_num_ = new TH1D("h_l1tau_num",";L1 Number of #tau", 13, 0, 13 );
216 
217  h_l1ht_ = new TH1D("h_l1ht_", ";L1 #SigmaH_{T}", int((MaxEt_+PtStep_)/(16*PtStep_) + 1.001), 0, MaxEt_+PtStep_ );
218  h_l1et_ = new TH1D("h_l1et_", ";L1 #SigmaE_{T}", int((MaxEt_+PtStep_)/(16*PtStep_) + 1.001), 0, MaxEt_+PtStep_ );
219  h_l1htm_et_ = new TH1D("h_l1htm_et_", ";L1 Missing H_{T}", int((MaxEt_+PtStep_)/(16*PtStep_) + 1.001), 0, MaxEt_+PtStep_ );
220  h_l1etm_et_ = new TH1D("h_l1etm_et_", ";L1 Missing E_{T}", int((MaxEt_+PtStep_)/(16*PtStep_) + 1.001), 0, MaxEt_+PtStep_ );
221  h_l1htm_phi_ = new TH1D("h_l1htm_phi_", ";L1 Missing H_{T} #phi", PhiStepCalo_+1, 0, 2*M_PI );
222  h_l1etm_phi_ = new TH1D("h_l1etm_phi_", ";L1 Missing E_{T} #phi", PhiStepCalo_+1, 0, 2*M_PI );
223 
224 
225  std::ifstream file(vector_file);
227 
228  std::vector<std::string> mu;
229  std::vector<std::string> eg;
230  std::vector<std::string> tau;
231  std::vector<std::string> jet;
232  std::vector<std::string> etsum;
233  mu.resize(8);
234  eg.resize(12);
235  tau.resize(8);
236  jet.resize(12);
237  etsum.resize(4);
238 
239  std::string bx, ex, alg, fin;
240 
241  int evt=0;
242  int l1a=0;
243 
244  if( dumpEvents ) printf(" ==== Objects ===\n");
245 
246  while(std::getline(file, line)){
247  evt++;
248  std::stringstream linestream(line);
249  linestream >> bx
250  >> mu[0] >> mu[1] >> mu[2] >> mu[3] >> mu[4] >> mu[5] >> mu[6] >> mu[7]
251  >> eg[0] >> eg[1] >> eg[2] >> eg[3] >> eg[4] >> eg[5] >> eg[6] >> eg[7] >> eg[8] >> eg[9] >> eg[10] >> eg[11]
252  >> tau[0] >> tau[1] >> tau[2] >> tau[3] >> tau[4] >> tau[5] >> tau[6] >> tau[7]
253  >> jet[0] >> jet[1] >> jet[2] >> jet[3] >> jet[4] >> jet[5] >> jet[6] >> jet[7] >> jet[8] >> jet[9] >> jet[10] >> jet[11]
254  >> etsum[0] >> etsum[1] >> etsum[2] >> etsum[3]
255  >> ex >> alg >> fin;
256 
257  if( dumpEvents ) printf(" <==== BX = %s ====>\n",bx.c_str());
258  parseMuons(mu, dumpEvents);
259  parseEGs(eg, dumpEvents);
260  parseTaus(tau, dumpEvents);
261  parseJets(jet, dumpEvents);
262  parseEtSums(etsum, dumpEvents);
263 
264  parseAlgo(alg);
265 
266  int finOR = atoi( fin.c_str() );
267  l1a += finOR;
268 
269  if( dumpEvents ){
270  printf(" == Algos ==\n");
271  if( finOR ){
272  printf(" Triggers with non-zero accepts\n");
273  if( readXML && l1tnames.size()>0 ) printf("\t bit\t L1A\t Name\n");
274  else printf("\t bit\t L1A\n");
275 
276  for( int i=0; i<MAX_ALGO_BITS; i++ ){
277  if( l1taccepts_evt[i]>0 ){
278  if( readXML && l1tnames.size()>0 ) printf("\t %d \t %d \t %s\n", i, l1taccepts_evt[i], l1tnames[i].c_str());
279  else printf("\t %d \t %d\n", i, l1taccepts_evt[i] );
280  }
281  }
282  }
283  else{
284  printf("\n No triggers passed\n");
285  }
286  // extra spacing between bx
287  printf("\n\n");
288  }
289 
290  if( evt==maxEvents ) break;
291  }
292 
293  printf(" =========== Summary of results ==========\n");
294  printf(" There were %d L1A out of %d events (%.1f%%)\n", l1a, evt, float(l1a)/float(evt)*100);
295  printf("\n Triggers with non-zero accepts\n");
296  if( readXML && l1tnames.size()>0 ) printf("\t bit\t L1A\t Name\n");
297  else printf("\t bit\t L1A\n");
298 
299  for( int i=0; i<MAX_ALGO_BITS; i++ ){
300  if( l1taccepts[i]>0 ){
301  if( readXML && l1tnames.size()>0 ) printf("\t %d \t %d \t %s\n", i, l1taccepts[i], l1tnames[i].c_str());
302  else printf("\t %d \t %d\n", i, l1taccepts[i] );
303  }
304  }
305 
306 
307  if( output ){
308  histofile->Write();
309  histofile->Close();
310  }
311 
312 
313  return 0;
314 }
315 
316 
317 // Parse Objects
318 void parseMuons( std::vector<std::string> muons, bool verbose ){
319 
320  if( verbose) printf(" == Muons ==\n");
321  int nmu=0;
322  for( unsigned int i=0; i<muons.size(); i++ ){
323  std::string imu = muons[i];
324  if( imu==zeroes16 ) continue;
325  nmu++;
326  l1t::Muon mu = unpackMuons( imu );
327 
328  double pt = convertPtFromHW( mu.hwPt(), MaxLepPt_, PtStep_ );
329  double eta = convertEtaFromHW( mu.hwEta(), MaxMuonEta_, EtaStepMuon_, 0x1ff );
330  double phi = convertPhiFromHW( mu.hwPhi(), PhiStepMuon_ );
331 
332  int iso = mu.hwIso();
333  int qual = mu.hwQual();
334  int charge = mu.hwCharge();
335  int chargeValid = mu.hwChargeValid();
336 
337  h_l1mu_pt_->Fill( pt );
338  h_l1mu_eta_->Fill( eta );
339  h_l1mu_phi_->Fill( phi );
340  h_l1mu_charge_->Fill( charge );
341 
342  h_l1mu_quality_->Fill( qual );
343  h_l1mu_isolation_->Fill( iso );
344 
345  if( verbose) printf(" l1t::Muon %d:\t pt = %d (%.1f),\t eta = %d (%+.2f),\t phi = %d (%.2f),\t iso = %d,\t qual = %d,\t charge = %d,\t chargeValid = %d\n", i, mu.hwPt(), pt, mu.hwEta(), eta, mu.hwPhi(), phi, iso, qual, charge, chargeValid);
346  }
347  h_l1mu_num_->Fill(nmu);
348 
349  return;
350 }
351 void parseEGs( std::vector<std::string> egs, bool verbose ){
352 
353  if( verbose) printf(" == EGammas ==\n");
354  int neg=0;
355  for( unsigned int i=0; i<egs.size(); i++ ){
356  std::string ieg = egs[i];
357  if( ieg==zeroes8 ) continue;
358  neg++;
359  l1t::EGamma eg = unpackEGs( ieg );
360 
361  double pt = convertPtFromHW( eg.hwPt(), MaxLepPt_, PtStep_ );
362  double eta = convertEtaFromHW( eg.hwEta(), MaxCaloEta_, EtaStepCalo_, 0xff );
363  double phi = convertPhiFromHW( eg.hwPhi(), PhiStepCalo_ );
364 
365  h_l1eg_pt_->Fill( pt );
366  h_l1eg_eta_->Fill( eta );
367  h_l1eg_phi_->Fill( phi );
368  h_l1eg_isolation_->Fill( eg.hwIso() );
369 
370  if( verbose) printf(" l1t::EGamma %d:\t pt = %d (%.1f),\t eta = %d (%+.2f),\t phi = %d (%.2f),\t iso = %d\n", i, eg.hwPt(), pt, eg.hwEta(), eta, eg.hwPhi(), phi, eg.hwIso());
371  }
372  h_l1eg_num_->Fill(neg);
373 
374  return;
375 }
376 void parseTaus( std::vector<std::string> taus, bool verbose ){
377 
378  if( verbose) printf(" == Taus ==\n");
379  int ntau=0;
380  for( unsigned int i=0; i<taus.size(); i++ ){
381  std::string itau = taus[i];
382  if( itau==zeroes8 ) continue;
383  ntau++;
384  l1t::Tau tau = unpackTaus( itau );
385 
386  double pt = convertPtFromHW( tau.hwPt(), MaxLepPt_, PtStep_ );
387  double eta = convertEtaFromHW( tau.hwEta(), MaxCaloEta_, EtaStepCalo_, 0xff );
388  double phi = convertPhiFromHW( tau.hwPhi(), PhiStepCalo_ );
389 
390  h_l1tau_pt_->Fill( pt );
391  h_l1tau_eta_->Fill( eta );
392  h_l1tau_phi_->Fill( phi );
393  h_l1tau_isolation_->Fill( tau.hwIso() );
394 
395  if( verbose) printf(" l1t::Tau %d:\t pt = %d (%.1f),\t eta = %d (%+.2f),\t phi = %d (%.2f),\t iso = %d\n", i, tau.hwPt(), pt, tau.hwEta(), eta, tau.hwPhi(), phi, tau.hwIso());
396  }
397  h_l1tau_num_->Fill(ntau);
398 
399  return;
400 }
401 void parseJets( std::vector<std::string> jets, bool verbose ){
402 
403  if( verbose) printf(" == Jets ==\n");
404  int njet=0;
405  for( unsigned int i=0; i<jets.size(); i++ ){
406  std::string ijet = jets[i];
407  if( ijet==zeroes8 ) continue;
408  njet++;
409  l1t::Jet jet = unpackJets( ijet );
410 
411  double pt = convertPtFromHW( jet.hwPt(), MaxJetPt_, PtStep_ );
412  double eta = convertEtaFromHW( jet.hwEta(), MaxCaloEta_, EtaStepCalo_, 0xff );
413  double phi = convertPhiFromHW( jet.hwPhi(), PhiStepCalo_ );
414 
415  h_l1jet_pt_->Fill( pt );
416  h_l1jet_eta_->Fill( eta );
417  h_l1jet_phi_->Fill( phi );
418 
419  if( verbose) printf(" l1t::Jet %d:\t pt = %d (%.1f),\t eta = %d (%+.2f),\t phi = %d (%.2f)\n", i, jet.hwPt(), pt, jet.hwEta(), eta, jet.hwPhi(), phi);
420  }
421  h_l1jet_num_->Fill(njet);
422 
423  return;
424 }
425 void parseEtSums( std::vector<std::string> etsum, bool verbose ){
426 
427  if( verbose) printf(" == EtSums ==\n");
428 
429  //et sum
430  std::string iet = etsum[0];
431  if( iet!=zeroes8 ){
432  l1t::EtSum et = unpackEtSums( iet, l1t::EtSum::EtSumType::kTotalEt );
433  double pt = convertPtFromHW( et.hwPt(), MaxEt_, PtStep_ );
434  h_l1et_->Fill( pt );
435  if( verbose) printf(" l1t::EtSum TotalEt:\t Et = %d\n", et.hwPt());
436  }
437  //ht sum
438  std::string iht = etsum[1];
439  if( iht!=zeroes8 ){
440  l1t::EtSum ht = unpackEtSums( iht, l1t::EtSum::EtSumType::kTotalHt );
441  double pt = convertPtFromHW( ht.hwPt(), MaxEt_, PtStep_ );
442  h_l1ht_->Fill( pt );
443  if( verbose) printf(" l1t::EtSum TotalHt:\t Ht = %d\n", ht.hwPt());
444  }
445  //etm
446  std::string ietm = etsum[2];
447  if( ietm!=zeroes8 ){
448  l1t::EtSum etm = unpackEtSums( ietm, l1t::EtSum::EtSumType::kMissingEt );
449  double pt = convertPtFromHW( etm.hwPt(), MaxEt_, PtStep_ );
450  double phi = convertPhiFromHW( etm.hwPhi(), PhiStepCalo_ );
451  h_l1etm_et_->Fill( pt );
452  h_l1etm_phi_->Fill( phi );
453  if( verbose) printf(" l1t::EtSum MissingEt:\t Et = %d,\t phi = %d\n", etm.hwPt(), etm.hwPhi());
454  }
455  //htm
456  std::string ihtm = etsum[3];
457  if( ihtm!=zeroes8 ){
458  l1t::EtSum htm = unpackEtSums( ihtm, l1t::EtSum::EtSumType::kMissingHt );
459  double pt = convertPtFromHW( htm.hwPt(), MaxEt_, PtStep_ );
460  double phi = convertPhiFromHW( htm.hwPhi(), PhiStepCalo_ );
461  h_l1htm_et_->Fill( pt );
462  h_l1htm_phi_->Fill( phi );
463  if( verbose) printf(" l1t::EtSum MissingHt:\t Et = %d,\t phi = %d\n", htm.hwPt(), htm.hwPhi());
464  }
465 
466  return;
467 }
468 
469 
470 // Parse Algos
472 
473  // clear the algo per event
474  l1taccepts_evt.clear();
476 
477  // Return if no triggers fired
478  if( algo==zeroes128 ) return;
479 
480  std::stringstream ss;
481  std::string s;
482  int pos, algRes, accept;
483 
484  for( int i=0; i<MAX_ALGO_BITS; i++ ){
485  pos = 127 - int( i/4 );
486  std::string in(1,algo[pos]);
487  char* endPtr = (char*) in.c_str();
488  algRes = strtol( in.c_str(), &endPtr, 16 );
489  accept = ( algRes >> (i%4) ) & 1;
490  l1taccepts_evt[i] += accept;
491  l1taccepts[i] += accept;
492  }
493 
494  return;
495 
496 }
497 
498 // Unpack Objects
500 
501  char* endPtr = (char*) imu.c_str();
502  cms_uint64_t packedVal = strtoull( imu.c_str(), &endPtr, 16 );
503 
504  int pt = (packedVal>>10) & 0x1ff;
505  int eta = (packedVal>>23) & 0x1ff;
506  int phi = (packedVal>>0) & 0x3ff;
507  int iso = (packedVal>>32) & 0x3;
508  int qual= (packedVal>>19) & 0xf;
509  int charge = (packedVal>>34) & 0x1;
510  int chargeValid = (packedVal>>35) & 0x1;
511  int mip = 1;
512  int tag = 1;
513 
514  ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > *p4 = new ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> >();
515  l1t::Muon mu(*p4, pt, eta, phi, qual, charge, chargeValid, iso, mip, tag);
516 
517  return mu;
518 
519 }
521 
522  char* endPtr = (char*) ieg.c_str();
523  unsigned int packedVal = strtol( ieg.c_str(), &endPtr, 16 );
524 
525  int pt = (packedVal>>0) & 0x1ff;
526  int eta = (packedVal>>9) & 0xff;
527  int phi = (packedVal>>17) & 0xff;
528  int iso = (packedVal>>25) & 0x3;
529  int qual= (packedVal>>27) & 0x31;
530 
531  ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > *p4 = new ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> >();
532  l1t::EGamma eg(*p4, pt, eta, phi, qual, iso);
533 
534  return eg;
535 }
537 
538  char* endPtr = (char*) itau.c_str();
539  unsigned int packedVal = strtol( itau.c_str(), &endPtr, 16 );
540 
541  int pt = (packedVal>>0) & 0x1ff;
542  int eta = (packedVal>>9) & 0xff;
543  int phi = (packedVal>>17) & 0xff;
544  int iso = (packedVal>>25) & 0x3;
545  int qual= (packedVal>>27) & 0x31;
546 
547  ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > *p4 = new ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> >();
548  l1t::Tau tau(*p4, pt, eta, phi, qual, iso);
549 
550  return tau;
551 }
552 
554 
555  char* endPtr = (char*) ijet.c_str();
556  unsigned int packedVal = strtol( ijet.c_str(), &endPtr, 16 );
557 
558  int pt = (packedVal>>0) & 0x7ff;
559  int eta = (packedVal>>11) & 0xff;
560  int phi = (packedVal>>19) & 0xff;
561  int qual= (packedVal>>27) & 0x1;
562 
563  ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > *p4 = new ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> >();
564  l1t::Jet jet(*p4, pt, eta, phi, qual);
565 
566  return jet;
567 }
568 
570 
571  char* endPtr = (char*) ietsum.c_str();
572  unsigned int packedVal = strtol( ietsum.c_str(), &endPtr, 16 );
573 
574  int pt = (packedVal>>0) & 0xfff;
575  int phi = 0;
576  if( type==l1t::EtSum::EtSumType::kMissingEt ||
577  type==l1t::EtSum::EtSumType::kMissingHt ) phi = (packedVal>>12) & 0xff;
578 
579  ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > *p4 = new ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> >();
580  l1t::EtSum sum(*p4, type, pt, 0,phi, 0);
581 
582  return sum;
583 }
584 
585 // Conversion into physical coordinates from HW
586 double convertPtFromHW( int hwPt, double max, double step ){
587  double pt = double(hwPt) * step;
588  if( pt>max ) pt = max;
589  return pt;
590 }
591 
592 double convertEtaFromHW( int hwEta, double max, double step, int hwMax ){
593  hwMax++;
594  double binWidth = 2*max/step;
595  double eta = ( hwEta<int(hwMax/2+1.001) ) ? double(hwEta)*binWidth+0.5*binWidth : -(double(hwMax-hwEta)*binWidth -0.5*binWidth);
596  return eta;
597 }
598 double convertPhiFromHW( int hwPhi, double step ){
599  double phi = double(hwPhi)/step * 2 * M_PI;
600  return phi;
601 }
602 
603 
604 // eof
605 
type
Definition: HCALResponse.h:21
double MaxEt_
TH1D * h_l1mu_quality_
int i
Definition: DBlmapReader.cc:9
TH1D * h_l1et_
void parseEGs(std::vector< std::string > egs, bool verbose)
TH1D * h_l1eg_eta_
void parseEtSums(std::vector< std::string > etsums, bool verbose)
TH1D * h_l1mu_num_
TH1D * h_l1mu_charge_
std::string zeroes128
Definition: Tau.h:13
void parseMuons(std::vector< std::string > muons, bool verbose)
#define NULL
Definition: scimark2.h:8
std::vector< int > l1taccepts
int hwPhi() const
Definition: L1Candidate.cc:79
TH1D * h_l1eg_num_
TH1D * h_l1etm_et_
bool accept(const edm::Event &event, const edm::TriggerResults &triggerTable, const std::string &triggerPath)
Definition: TopDQMHelpers.h:25
int njet
Definition: HydjetWrapper.h:90
void parseTaus(std::vector< std::string > taus, bool verbose)
double MaxMuonEta_
TH1D * h_l1mu_pt_
int main(int argc, char **argv)
TH1D * h_l1tau_num_
int hwIso() const
Definition: L1Candidate.cc:84
Definition: Jet.h:13
TH1D * h_l1eg_pt_
l1t::Muon unpackMuons(std::string imu)
double MaxJetPt_
double PhiStepCalo_
double EtaStepMuon_
TH1D * h_l1etm_phi_
std::string zeroes16
string histofile
Definition: jetmet_cfg.py:4
l1t::EtSum unpackEtSums(std::string ietsum, l1t::EtSum::EtSumType type)
TH1D * h_l1ht_
TH1D * h_l1jet_phi_
double p4[4]
Definition: TauolaWrapper.h:92
vector< PseudoJet > jets
double convertPhiFromHW(int hwPhi, double step)
void parseJets(std::vector< std::string > jets, bool verbose)
double convertPtFromHW(int hwPt, double max, double step)
TH1D * h_l1mu_isolation_
void parseAlgo(std::string algo)
double PtStep_
double MaxCaloEta_
double PhiStepMuon_
const int mu
Definition: Constants.h:22
int hwEta() const
Definition: L1Candidate.cc:74
TH1D * h_l1tau_eta_
int hwQual() const
Definition: L1Candidate.cc:89
#define M_PI
const int MAX_ALGO_BITS
TH1D * h_l1eg_phi_
Definition: Muon.h:12
TH1D * h_l1jet_pt_
std::vector< int > l1taccepts_evt
TH1D * h_l1tau_pt_
double MaxLepPt_
int hwPt() const
Definition: L1Candidate.cc:69
TH1D * h_l1htm_phi_
tuple argc
Definition: dir2webdir.py:38
TH1D * h_l1jet_eta_
Geom::Phi< T > phi() const
tuple muons
Definition: patZpeak.py:38
double convertEtaFromHW(int hwEta, double max, double step, int hwMax)
TH1D * h_l1eg_isolation_
std::string zeroes8
tuple cout
Definition: gather_cfg.py:121
l1t::EGamma unpackEGs(std::string ieg)
TH1D * h_l1tau_phi_
unsigned long long cms_uint64_t
Definition: typedefs.h:17
TH1D * h_l1mu_eta_
int hwChargeValid() const
Definition: Muon.cc:54
l1t::Jet unpackJets(std::string ijet)
TH1D * h_l1jet_num_
TH1D * h_l1htm_et_
EtSumType
Definition: EtSum.h:17
TH1D * h_l1mu_phi_
l1t::Tau unpackTaus(std::string itau)
std::vector< std::string > l1tnames
TH1D * h_l1tau_isolation_
int hwCharge() const
Definition: Muon.cc:49
double EtaStepCalo_