CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
PFRecoTauDiscriminationAgainstMuon.cc
Go to the documentation of this file.
1 /*
2  * class PFRecoTauDiscriminationAgainstMuon
3  * created : May 07 2008,
4  * revised : ,
5  * Authors : Sho Maruyama
6  */
7 
9 
12 #include <string>
13 
14 using namespace reco;
15 
17  public:
19  discriminatorOption_ = iConfig.getParameter<std::string>("discriminatorOption");
20  a = iConfig.getParameter<double>("a");
21  b = iConfig.getParameter<double>("b");
22  c = iConfig.getParameter<double>("c");
23  }
24 
26 
27  double discriminate(const PFTauRef& pfTau);
28 
29  private:
30  std::string discriminatorOption_;
31  double a;
32  double b;
33  double c;
34 };
35 
37 {
38  bool decision = true;
39 
40  if((*thePFTauRef).hasMuonReference() ){
41 
42  MuonRef muonref = (*thePFTauRef).leadPFChargedHadrCand()->muonRef();
43  if (discriminatorOption_ == "noSegMatch") {
44  if ( muonref ->numberOfMatches() > 0 ) {
45  decision = false;
46  }
47  }
48  else if (discriminatorOption_ == "twoDCut") {
49  double seg = muon::segmentCompatibility(*muonref);
50  double calo= muonref->caloCompatibility();
51  double border = calo * a + seg * b +c;
52  if ( border > 0 ) {
53  decision = false;
54  }
55  }
56  else if (discriminatorOption_ == "merePresence") decision = false;
57  else if (discriminatorOption_ == "combined") { // testing purpose only
58  unsigned int muType = 0;
59  if(muonref->isGlobalMuon()) muType = 1;
60  else if(muonref->isCaloMuon()) muType = 2;
61  else if(muonref->isTrackerMuon()) muType = 3;
62  double muonEnergyFraction = (*thePFTauRef).pfTauTagInfoRef()->pfjetRef()->chargedMuEnergyFraction();
63  bool eta_veto = false;
64  bool phi_veto = false;
65  if(fabs(muonref->eta()) > 2.3 || (fabs(muonref->eta()) > 1.4 && fabs(muonref->eta()) < 1.6)) eta_veto = true;
66  if(muonref->phi() < 0.1 && muonref->phi() > -0.1) phi_veto = true;
67  if( muType != 1 || muonref ->numberOfMatches() > 0 || eta_veto || phi_veto || muonEnergyFraction > 0.9 ) decision = false; // as place holder
68  }
69  else{
70  throw edm::Exception(edm::errors::UnimplementedFeature) << " Invalid Discriminator Option! Please check cfi file \n";
71  }
72  } // valid muon ref
73 
74  return (decision ? 1. : 0.);
75 }
76 
T getParameter(std::string const &) const
float segmentCompatibility(const reco::Muon &muon, reco::Muon::ArbitrationType arbitrationType=reco::Muon::SegmentAndTrackArbitration)
DEFINE_FWK_MODULE(CosmicTrackingParticleSelector)
double b
Definition: hdecay.h:120
PFRecoTauDiscriminationAgainstMuon(const edm::ParameterSet &iConfig)
double a
Definition: hdecay.h:121