00001 #include <iostream>
00002 #include "caf_util/EMJetMatching.hpp"
00003 #include "cafe/Config.hpp"
00004 #include "kinem_util/AnglesUtil.hpp"
00005 #include "jetcorr/CalTool.hpp"
00006
00007 using namespace cafe;
00008 using namespace std;
00009
00010 namespace caf_util {
00011
00012 EMJetMatching::EMJetMatching(const char *name) : cafe::SelectUserObjects<TMBJet>(name), _event(0), _vars("_CalDetectorPhi","_CalDetectorEta")
00013 {
00014 cafe::Config config(name);
00015 _jetBranch = config.get("From","");
00016 _electronBranch = config.get("electronBranch","EMscone");
00017 _dR_Jet_EM = config.get("DR_Jet_EM",0.4);
00018 _debug = config.get("Debug", 0);
00019 }
00020
00021 bool EMJetMatching::processEvent(cafe::Event &event)
00022 {
00023 _event = &event ;
00024 SelectUserObjects<TMBJet>::processEvent(event) ;
00025 return true ;
00026 }
00027
00028 bool EMJetMatching::selectObject(const TMBJet &jet)
00029 {
00030 return true ;
00031 }
00032
00033 void EMJetMatching::after(cafe::Collection<TMBJet>& input, cafe::Collection<TMBJet>& rejected)
00034 {
00035 Collection<TMBEMCluster> emcol(_event->getCollection<TMBEMCluster>(_electronBranch.c_str(),_vars));
00036 static const float phiConv = std::acos(-1.)/32.;
00037
00038 for (Collection<TMBJet>::iterator it_jet = input.begin() ;
00039 it_jet != input.end() ; ++ it_jet) {
00040
00041
00042 float dRmin = kinem::TWOPI;
00043
00044 for (Collection<TMBEMCluster>::const_iterator it_em = emcol.begin() ;
00045 it_em != emcol.end() ; ++ it_em) {
00046
00047 float dphi = kinem::delta_phi(phiConv*it_jet->detPhi(), it_em->CalDetectorPhi());
00048 float deta = fabs(CalTool::EtaDToEtaDet(it_jet->detEta()) - it_em->CalDetectorEta());
00049 float dR = sqrt(dphi*dphi + deta*deta);
00050 if (dR < dRmin) dRmin = dR;
00051
00052 }
00053
00054 if ( dRmin < _dR_Jet_EM ) it_jet->SetFlag(it_jet->isGood(), it_jet->isL1Conf(), it_jet->isBad(),
00055 it_jet->isNoise(), true, it_jet->hasMU(),
00056 it_jet->isSmeared(), it_jet->isSmearedMU());
00057 else it_jet->SetFlag(it_jet->isGood(), it_jet->isL1Conf(), it_jet->isBad(),
00058 it_jet->isNoise(), false, it_jet->hasMU(),
00059 it_jet->isSmeared(), it_jet->isSmearedMU());
00060
00061 }
00062
00063 }
00064
00065 }
00066
00067 ClassImp(caf_util::EMJetMatching);
00068