Пример #1
0
void evSelTest (PathSpecifiers const & ps, TrigResults const & tr, bool ans) 
{
  ParameterSet pset;
  pset.addParameter<Strings>("SelectEvents",ps.path);
  pset.registerIt();

  // There are 3 different ways to build the EventSelector.  All
  // should give the same result.  We exercise all 3 here.
  EventSelector select_based_on_pset(pset, trigger_path_names);
  EventSelector select_based_on_path_specifiers_and_names 
  					(ps.path, trigger_path_names);
  EventSelector select_based_on_path_specifiers_only(ps.path);

  int number_of_trigger_paths = 0;
  std::vector<unsigned char> bitArray;

  HLTGlobalStatus bm(tr.bit.size());
  for(unsigned int b=0;b<tr.bit.size();++b) {
    bm[b] = (tr.bit[b]);
    // There is an alternate version of the function acceptEvent
    // that takes an array of characters as an argument instead
    // of a TriggerResults object.  These next few lines build
    // that array so we can test that also.
    if ( (number_of_trigger_paths % 4) == 0) bitArray.push_back(0);
    int byteIndex = number_of_trigger_paths / 4;
    int subIndex = number_of_trigger_paths % 4;
    bitArray[byteIndex] |= (static_cast<unsigned char>(bm[b].state())) << (subIndex * 2);
    ++number_of_trigger_paths;
  }

  TriggerResults results(bm,trigger_path_names);

  bool a  = select_based_on_pset.acceptEvent(results);
  bool b  = select_based_on_path_specifiers_and_names.acceptEvent(results);
  bool c  = select_based_on_path_specifiers_only.acceptEvent(results);
  bool ab = select_based_on_pset.acceptEvent(&(bitArray[0]), 
  		number_of_trigger_paths);
  bool bb = select_based_on_path_specifiers_and_names.acceptEvent
  		(&(bitArray[0]), number_of_trigger_paths);
  // select_based_on_path_specifiers_only.acceptEvent(&(bitArray[0]), 
  //                                     number_of_trigger_paths);
  // is not a valid way to use acceptEvent.

  if (a  != ans || b  != ans || c != ans || 
      ab != ans || bb != ans  )
    {
      std::cerr << "failed to compare path specifiers with trigger results: "
	   << "correct=" << ans << " "
	   << "results=" << a  << "  " << b  << "  " << c  << "  " 
	                 << ab << "  " << bb <<  "\n"
	   << "pathspecs = " << ps.path << "\n"
	   << "trigger results = " << tr << "\n";
      abort();
    }

  // Repeat putting the list of trigger names in the pset
  // registry

  ParameterSet trigger_pset;
  trigger_pset.addParameter<Strings>("@trigger_paths", trigger_path_names);
  trigger_pset.registerIt();

  TriggerResults results_id(bm, trigger_pset.id());

  bool x = select_based_on_pset.acceptEvent(results_id);
  bool y = select_based_on_path_specifiers_and_names.acceptEvent(results_id);
  bool z = select_based_on_path_specifiers_only.acceptEvent(results_id);

  if (x != ans || y != ans || z != ans)
    {
      std::cerr << "failed to compare pathspecs with trigger results using pset ID: "
	   << "correct=" << ans << " "
	   << "results=" << x << "  " << y << "  " << z << "\n"
	   << "pathspecs =" << ps.path << "\n"
	   << "trigger results = " << tr << "\n";
      abort();
    }

}
Пример #2
0
void testone(const Strings& paths,
	     const Strings& pattern,
	     const Bools& mask,
	     bool answer,
             int jmask)
{
  ParameterSet pset; //, parent;
  pset.addParameter<Strings>("SelectEvents", pattern);
  //parent.addUntrackedParameter<ParameterSet>("SelectEvents",pset);
  pset.registerIt();

  // There are 3 different ways to build the EventSelector.  All
  // should give the same result.  We exercise all 3 here.
  EventSelector select(pset, paths);
  EventSelector select1(pattern, paths);
  EventSelector select2(pattern);

  int number_of_trigger_paths = 0;
  std::vector<unsigned char> bitArray;

  HLTGlobalStatus bm(mask.size());
  const HLTPathStatus pass  = HLTPathStatus(edm::hlt::Pass);
  const HLTPathStatus fail  = HLTPathStatus(edm::hlt::Fail);
  const HLTPathStatus ex    = HLTPathStatus(edm::hlt::Exception);
  const HLTPathStatus ready = HLTPathStatus(edm::hlt::Ready);
  for(unsigned int b=0;b<mask.size();++b) {
    bm[b] = (mask[b]? pass : fail);

    // There is an alternate version of the function acceptEvent
    // that takes an array of characters as an argument instead
    // of a TriggerResults object.  These next few lines build
    // that array so we can test that also.
    if ( (number_of_trigger_paths % 4) == 0) bitArray.push_back(0);
    int byteIndex = number_of_trigger_paths / 4;
    int subIndex = number_of_trigger_paths % 4;
    bitArray[byteIndex] |= (mask[b]? edm::hlt::Pass : edm::hlt::Fail) << (subIndex * 2);
    ++number_of_trigger_paths;
  }

  if (jmask == 8 && mask.size() > 4) {
    bm[0] = ready;
    bm[4] = ex;
    bitArray[0] = (bitArray[0] & 0xfc) | edm::hlt::Ready;
    bitArray[1] = (bitArray[1] & 0xfc) | edm::hlt::Exception;
  }

  TriggerResults results(bm,paths);

//        std::cerr << "pattern=" << pattern 
//	 	  << "mask=" << mask << "\n";  // DBG

//  	std:: cerr << "a \n";
  bool a = select.acceptEvent(results);
//  	std:: cerr << "a1 \n";
  bool a1 = select1.acceptEvent(results);
//  	std:: cerr << "a2 \n";
  bool a2 = select2.acceptEvent(results);
//  	std:: cerr << "b2 \n";
  bool b2 = select2.acceptEvent(results);
//  	std:: cerr << "c1 \n";
  bool c1 = select1.acceptEvent(&(bitArray[0]), number_of_trigger_paths);

  if (a!=answer || a1 != answer || a2 != answer || b2 != answer || c1 != answer)
    {
      std::cerr << "failed to compare pattern with mask: "
	   << "correct=" << answer << " "
	   << "results=" << a << "  " << a1 << "  " << a2 
	   		      << "  " << b2 << "  " << c1 << "\n"
	   << "pattern=" << pattern << "\n"
	   << "mask=" << mask << "\n"
           << "jmask = " << jmask << "\n"; 
      abort();
    }

  // Repeat putting the list of trigger names in the pset
  // registry

  ParameterSet trigger_pset;
  trigger_pset.addParameter<Strings>("@trigger_paths", paths);
  trigger_pset.registerIt();

  TriggerResults results_id(bm, trigger_pset.id());

//  	std:: cerr << "a11 \n";
  bool a11 = select.acceptEvent(results_id);
//  	std:: cerr << "a12 \n";
  bool a12 = select1.acceptEvent(results_id);
//  	std:: cerr << "a13 \n";
  bool a13 = select2.acceptEvent(results_id);
//  	std:: cerr << "a14 \n";
  bool a14 = select2.acceptEvent(results_id);

  if (a11 != answer || a12 != answer || a13 != answer || a14 != answer)
    {
      std::cerr << "failed to compare pattern with mask using pset ID: "
	   << "correct=" << answer << " "
	   << "results=" << a11 << "  " << a12 << "  " << a13 << "  " << a14 << "\n"
	   << "pattern=" << pattern << "\n"
	   << "mask=" << mask << "\n"
           << "jmask = " << jmask << "\n"; 
      abort();
    }
}