MinimumBiasFilter

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
//
// Original Author:  Filippo Ambroglini
//         Created:  Fri Sep 29 17:10:41 CEST 2006
//

#include "FWCore/AbstractServices/interface/RandomNumberGenerator.h"
#include "FWCore/Framework/interface/Frameworkfwd.h"
#include "FWCore/Framework/interface/global/EDFilter.h"
#include "FWCore/Framework/interface/MakerMacros.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "FWCore/ServiceRegistry/interface/Service.h"
#include "CLHEP/Random/RandomEngine.h"
#include "CLHEP/Random/RandFlat.h"

class MinimumBiasFilter : public edm::global::EDFilter<> {
public:
  MinimumBiasFilter(const edm::ParameterSet&);

  bool filter(edm::StreamID, edm::Event&, const edm::EventSetup&) const override;

private:
  const double theEventFraction;
};

MinimumBiasFilter::MinimumBiasFilter(const edm::ParameterSet& iConfig)
    : theEventFraction(iConfig.getUntrackedParameter<double>("EventFraction")) {}

bool MinimumBiasFilter::filter(edm::StreamID streamID, edm::Event&, const edm::EventSetup&) const {
  /**
   * Wainting the real trigger for the
   * MB we have developped
   * a random one
  */
  edm::Service<edm::RandomNumberGenerator> rng;
  CLHEP::HepRandomEngine& engine = rng->getEngine(streamID);
  double rnd = CLHEP::RandFlat::shoot(&engine, 0., 1.);

  return (rnd <= theEventFraction);
}

DEFINE_FWK_MODULE(MinimumBiasFilter);