Line Code
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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
#if defined(__CINT__) && !defined(__MAKECINT__)
class loadFWLite {
public:
  loadFWLite() {
    gSystem->Load("libFWCoreFWLite");
    FWLiteEnabler::enable();
  }
};

static loadFWLite lfw;
#endif

#include "DataFormats/FWLite/interface/Handle.h"

#include <string>
#include <vector>
#include <iostream>

int triggernames_cint() {
  // TFile f1("prodmerge.root");
  // fwlite::Event ev(&f1);

  std::vector<std::string> files;
  files.push_back(std::string("prodmerge.root"));
  fwlite::ChainEvent ev(files);

  fwlite::Handle<edm::TriggerResults> hTriggerResults;

  int iEvent = 0;
  for (ev.toBegin(); !ev.atEnd(); ++ev) {
    ++iEvent;
    hTriggerResults.getByLabel(ev, "TriggerResults", "", "TEST");
    edm::TriggerNames const& triggerNames = ev.triggerNames(*hTriggerResults);

    std::vector<std::string> const& names = triggerNames.triggerNames();
    for (unsigned i = 0; i < triggerNames.size(); ++i) {
      std::cout << names[i] << "  " << triggerNames.triggerName(i) << std::endl;
    }
    std::cout << "size = " << triggerNames.size() << std::endl;
    std::cout << "index for p = " << triggerNames.triggerIndex("p") << std::endl;
    std::cout << "index for p1 = " << triggerNames.triggerIndex("p1") << std::endl;
    std::cout << "index for p2 = " << triggerNames.triggerIndex("p2") << std::endl;

    if (iEvent == 1) {
      if (triggerNames.size() != 3U || names[0] != "p" || names[1] != "p1" || names[2] != "p2" ||
          triggerNames.triggerName(0) != "p" || triggerNames.triggerName(1) != "p1" ||
          triggerNames.triggerName(2) != "p2" || triggerNames.triggerIndex("p") != 0 ||
          triggerNames.triggerIndex("p1") != 1 || triggerNames.triggerIndex("p2") != 2) {
        std::cout << "Trigger names do match expected values\n";
        std::cout << "In script triggernames_cint.C\n";
        return 1;
      }
    }

    /*
    // THIS DOES NOT WORK, I do not know why, but it's
    // probably something to do with dictionaries for the 
    // std::vector<std:string>::const_iterator subclass.
    // Or CINT just cannot handle such templated beasts.  I do not know.
    for (std::vector<std::string>::const_iterator iName = names.begin(),
	   iEnd = names.end();
         iName != iEnd; ++iName) {
      std::cout << *iName << std::endl;
    }
    */
  }
  return 0;
}