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  printf(" =========== Dump of results ==========\n");
308  for( int i=0; i<MAX_ALGO_BITS; i++ ){
309  printf("%d\n", l1taccepts[i]);
310  }
311  */
312 
313 
314  /*
315  int NSet=13;
316  printf("# <algo_id>");
317  for( int iSet=0; iSet<NSet; iSet++ ){
318  printf(", <set_%d>",iSet+1);
319  }
320  printf("\n");
321 
322  printf("-1");
323  for( int iSet=0; iSet<NSet; iSet++ ){
324  int useSet = 0;
325  if( iSet==0 ) useSet = -3;
326  else if( iSet==1 ) useSet = -2;
327  else useSet = iSet-1;
328  printf(", %d",useSet);
329  }
330  printf("\n");
331 
332  for( int i=0; i<MAX_ALGO_BITS; i++ ){
333  printf("%d",i);
334  for( int iSet=0; iSet<NSet; iSet++ ){
335  int prescale = 1;
336  if( iSet==0 ) prescale = 0;
337  else if( iSet==1 ) prescale = 1;
338  else if( iSet==2 ) prescale = 1;
339  else if( iSet==3 ) prescale = 2;
340  else if( iSet==4 ) prescale = 10;
341  else if( iSet==5 && i<MAX_ALGO_BITS/2 ) prescale = 2;
342  else if( iSet==6 && i>MAX_ALGO_BITS/2 ) prescale = 5;
343  else if( iSet==7 && i%2==0 ) prescale = 3;
344  else if( iSet==8 && i%2==1 ) prescale = 6;
345  else if( iSet==9 && i%3==0 ) prescale = 4;
346  else if( iSet==10 ) prescale = 10;
347  else if( iSet==11 ) prescale = 2;
348  else if( iSet==12 ) prescale = 1;
349 
350  printf(", %d",prescale);
351  }
352  printf("\n");
353  }
354  */
355 
356  if( output ){
357  histofile->Write();
358  histofile->Close();
359  }
360 
361 
362  return 0;
363 }
364 
365 
366 // Parse Objects
367 void parseMuons( std::vector<std::string> muons, bool verbose ){
368 
369  if( verbose) printf(" == Muons ==\n");
370  int nmu=0;
371  for( unsigned int i=0; i<muons.size(); i++ ){
372  std::string imu = muons[i];
373  if( imu==zeroes16 ) continue;
374  nmu++;
375  l1t::Muon mu = unpackMuons( imu );
376 
377  double pt = convertPtFromHW( mu.hwPt(), MaxLepPt_, PtStep_ );
378  double eta = convertEtaFromHW( mu.hwEta(), MaxMuonEta_, EtaStepMuon_, 0x1ff );
379  double phi = convertPhiFromHW( mu.hwPhi(), PhiStepMuon_ );
380 
381  int iso = mu.hwIso();
382  int qual = mu.hwQual();
383  int charge = mu.hwCharge();
384  int chargeValid = mu.hwChargeValid();
385 
386  h_l1mu_pt_->Fill( pt );
387  h_l1mu_eta_->Fill( eta );
388  h_l1mu_phi_->Fill( phi );
389  h_l1mu_charge_->Fill( charge );
390 
391  h_l1mu_quality_->Fill( qual );
392  h_l1mu_isolation_->Fill( iso );
393 
394  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);
395  }
396  h_l1mu_num_->Fill(nmu);
397 
398  return;
399 }
400 void parseEGs( std::vector<std::string> egs, bool verbose ){
401 
402  if( verbose) printf(" == EGammas ==\n");
403  int neg=0;
404  for( unsigned int i=0; i<egs.size(); i++ ){
405  std::string ieg = egs[i];
406  if( ieg==zeroes8 ) continue;
407  neg++;
408  l1t::EGamma eg = unpackEGs( ieg );
409 
410  double pt = convertPtFromHW( eg.hwPt(), MaxLepPt_, PtStep_ );
411  double eta = convertEtaFromHW( eg.hwEta(), MaxCaloEta_, EtaStepCalo_, 0xff );
412  double phi = convertPhiFromHW( eg.hwPhi(), PhiStepCalo_ );
413 
414  h_l1eg_pt_->Fill( pt );
415  h_l1eg_eta_->Fill( eta );
416  h_l1eg_phi_->Fill( phi );
417  h_l1eg_isolation_->Fill( eg.hwIso() );
418 
419  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());
420  }
421  h_l1eg_num_->Fill(neg);
422 
423  return;
424 }
425 void parseTaus( std::vector<std::string> taus, bool verbose ){
426 
427  if( verbose) printf(" == Taus ==\n");
428  int ntau=0;
429  for( unsigned int i=0; i<taus.size(); i++ ){
430  std::string itau = taus[i];
431  if( itau==zeroes8 ) continue;
432  ntau++;
433  l1t::Tau tau = unpackTaus( itau );
434 
435  double pt = convertPtFromHW( tau.hwPt(), MaxLepPt_, PtStep_ );
436  double eta = convertEtaFromHW( tau.hwEta(), MaxCaloEta_, EtaStepCalo_, 0xff );
437  double phi = convertPhiFromHW( tau.hwPhi(), PhiStepCalo_ );
438 
439  h_l1tau_pt_->Fill( pt );
440  h_l1tau_eta_->Fill( eta );
441  h_l1tau_phi_->Fill( phi );
442  h_l1tau_isolation_->Fill( tau.hwIso() );
443 
444  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());
445  }
446  h_l1tau_num_->Fill(ntau);
447 
448  return;
449 }
450 void parseJets( std::vector<std::string> jets, bool verbose ){
451 
452  if( verbose) printf(" == Jets ==\n");
453  int njet=0;
454  for( unsigned int i=0; i<jets.size(); i++ ){
455  std::string ijet = jets[i];
456  if( ijet==zeroes8 ) continue;
457  njet++;
458  l1t::Jet jet = unpackJets( ijet );
459 
460  double pt = convertPtFromHW( jet.hwPt(), MaxJetPt_, PtStep_ );
461  double eta = convertEtaFromHW( jet.hwEta(), MaxCaloEta_, EtaStepCalo_, 0xff );
462  double phi = convertPhiFromHW( jet.hwPhi(), PhiStepCalo_ );
463 
464  h_l1jet_pt_->Fill( pt );
465  h_l1jet_eta_->Fill( eta );
466  h_l1jet_phi_->Fill( phi );
467 
468  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);
469  }
470  h_l1jet_num_->Fill(njet);
471 
472  return;
473 }
474 void parseEtSums( std::vector<std::string> etsum, bool verbose ){
475 
476  if( verbose) printf(" == EtSums ==\n");
477 
478  //et sum
479  std::string iet = etsum[0];
480  if( iet!=zeroes8 ){
482  double pt = convertPtFromHW( et.hwPt(), MaxEt_, PtStep_ );
483  h_l1et_->Fill( pt );
484  if( verbose) printf(" l1t::EtSum TotalEt:\t Et = %d\n", et.hwPt());
485  }
486  //ht sum
487  std::string iht = etsum[1];
488  if( iht!=zeroes8 ){
490  double pt = convertPtFromHW( ht.hwPt(), MaxEt_, PtStep_ );
491  h_l1ht_->Fill( pt );
492  if( verbose) printf(" l1t::EtSum TotalHt:\t Ht = %d\n", ht.hwPt());
493  }
494  //etm
495  std::string ietm = etsum[2];
496  if( ietm!=zeroes8 ){
498  double pt = convertPtFromHW( etm.hwPt(), MaxEt_, PtStep_ );
499  double phi = convertPhiFromHW( etm.hwPhi(), PhiStepCalo_ );
500  h_l1etm_et_->Fill( pt );
501  h_l1etm_phi_->Fill( phi );
502  if( verbose) printf(" l1t::EtSum MissingEt:\t Et = %d,\t phi = %d\n", etm.hwPt(), etm.hwPhi());
503  }
504  //htm
505  std::string ihtm = etsum[3];
506  if( ihtm!=zeroes8 ){
508  double pt = convertPtFromHW( htm.hwPt(), MaxEt_, PtStep_ );
509  double phi = convertPhiFromHW( htm.hwPhi(), PhiStepCalo_ );
510  h_l1htm_et_->Fill( pt );
511  h_l1htm_phi_->Fill( phi );
512  if( verbose) printf(" l1t::EtSum MissingHt:\t Et = %d,\t phi = %d\n", htm.hwPt(), htm.hwPhi());
513  }
514 
515  return;
516 }
517 
518 
519 // Parse Algos
521 
522  // clear the algo per event
523  l1taccepts_evt.clear();
525 
526  // Return if no triggers fired
527  if( algo==zeroes128 ) return;
528 
529  std::stringstream ss;
530  std::string s;
531  int pos, algRes, accept;
532 
533  for( int i=0; i<MAX_ALGO_BITS; i++ ){
534  pos = 127 - int( i/4 );
535  std::string in(1,algo[pos]);
536  char* endPtr = (char*) in.c_str();
537  algRes = strtol( in.c_str(), &endPtr, 16 );
538  accept = ( algRes >> (i%4) ) & 1;
539  l1taccepts_evt[i] += accept;
540  l1taccepts[i] += accept;
541  }
542 
543  return;
544 
545 }
546 
547 // Unpack Objects
549 
550  char* endPtr = (char*) imu.c_str();
551  cms_uint64_t packedVal = strtoull( imu.c_str(), &endPtr, 16 );
552 
553  int pt = (packedVal>>10) & 0x1ff;
554  int eta = (packedVal>>23) & 0x1ff;
555  int phi = (packedVal>>0) & 0x3ff;
556  int iso = (packedVal>>32) & 0x3;
557  int qual= (packedVal>>19) & 0xf;
558  int charge = (packedVal>>34) & 0x1;
559  int chargeValid = (packedVal>>35) & 0x1;
560  int mip = 1;
561  int tag = 1;
562 
563  ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > *p4 = new ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> >();
564  l1t::Muon mu(*p4, pt, eta, phi, qual, charge, chargeValid, iso, mip, tag);
565 
566  return mu;
567 
568 }
570 
571  char* endPtr = (char*) ieg.c_str();
572  unsigned int packedVal = strtol( ieg.c_str(), &endPtr, 16 );
573 
574  int pt = (packedVal>>0) & 0x1ff;
575  int eta = (packedVal>>9) & 0xff;
576  int phi = (packedVal>>17) & 0xff;
577  int iso = (packedVal>>25) & 0x3;
578  int qual= (packedVal>>27) & 0x31;
579 
580  ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > *p4 = new ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> >();
581  l1t::EGamma eg(*p4, pt, eta, phi, qual, iso);
582 
583  return eg;
584 }
586 
587  char* endPtr = (char*) itau.c_str();
588  unsigned int packedVal = strtol( itau.c_str(), &endPtr, 16 );
589 
590  int pt = (packedVal>>0) & 0x1ff;
591  int eta = (packedVal>>9) & 0xff;
592  int phi = (packedVal>>17) & 0xff;
593  int iso = (packedVal>>25) & 0x3;
594  int qual= (packedVal>>27) & 0x31;
595 
596  ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > *p4 = new ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> >();
597  l1t::Tau tau(*p4, pt, eta, phi, qual, iso);
598 
599  return tau;
600 }
601 
603 
604  char* endPtr = (char*) ijet.c_str();
605  unsigned int packedVal = strtol( ijet.c_str(), &endPtr, 16 );
606 
607  int pt = (packedVal>>0) & 0x7ff;
608  int eta = (packedVal>>11) & 0xff;
609  int phi = (packedVal>>19) & 0xff;
610  int qual= (packedVal>>27) & 0x1;
611 
612  ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > *p4 = new ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> >();
613  l1t::Jet jet(*p4, pt, eta, phi, qual);
614 
615  return jet;
616 }
617 
619 
620  char* endPtr = (char*) ietsum.c_str();
621  unsigned int packedVal = strtol( ietsum.c_str(), &endPtr, 16 );
622 
623  int pt = (packedVal>>0) & 0xfff;
624  int phi = 0;
626  type==l1t::EtSum::EtSumType::kMissingHt ) phi = (packedVal>>12) & 0xff;
627 
628  ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > *p4 = new ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> >();
629  l1t::EtSum sum(*p4, type, pt, 0,phi, 0);
630 
631  return sum;
632 }
633 
634 // Conversion into physical coordinates from HW
635 double convertPtFromHW( int hwPt, double max, double step ){
636  double pt = double(hwPt) * step;
637  if( pt>max ) pt = max;
638  return pt;
639 }
640 
641 double convertEtaFromHW( int hwEta, double max, double step, int hwMax ){
642  hwMax++;
643  double binWidth = 2*max/step;
644  double eta = ( hwEta<int(hwMax/2+1.001) ) ? double(hwEta)*binWidth+0.5*binWidth : -(double(hwMax-hwEta)*binWidth -0.5*binWidth);
645  return eta;
646 }
647 double convertPhiFromHW( int hwPhi, double step ){
648  double phi = double(hwPhi)/step * 2 * M_PI;
649  return phi;
650 }
651 
652 
653 // eof
654 
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:16
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:30
int njet
Definition: HydjetWrapper.h:95
void parseTaus(std::vector< std::string > taus, bool verbose)
double MaxMuonEta_
TH1D * h_l1mu_pt_
TH1D * h_l1tau_num_
int hwIso() const
Definition: L1Candidate.cc:84
Definition: Jet.h:16
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:16
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:145
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:142
l1t::Jet unpackJets(std::string ijet)
TH1D * h_l1jet_num_
TH1D * h_l1htm_et_
EtSumType
Definition: EtSum.h:20
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:136
double EtaStepCalo_