27 inputTag_ (iConfig.getParameter<edm::InputTag>(
"inputTag")),
28 inputMetTag_ (iConfig.getParameter<edm::InputTag>(
"inputMetTag")){
34 produces<std::vector<double> >();
62 std::auto_ptr<std::vector<double> >
result(
new std::vector<double>);
64 if (hemispheres.isValid() && inputMet.isValid() && hemispheres->size() > 1){
66 TLorentzVector ja(hemispheres->at(0).x(),hemispheres->at(0).y(),hemispheres->at(0).z(),hemispheres->at(0).t());
67 TLorentzVector jb(hemispheres->at(1).x(),hemispheres->at(1).y(),hemispheres->at(1).z(),hemispheres->at(1).t());
69 std::vector<math::XYZTLorentzVector> muonVec;
70 const double MR =
CalcMR(ja,jb);
71 const double R =
CalcR(MR,ja,jb,inputMet,muonVec);
72 result->push_back(MR);
81 if(ja.Pt()<=0.1)
return -1;
83 ja.SetPtEtaPhiM(ja.Pt(),ja.Eta(),ja.Phi(),0.0);
84 jb.SetPtEtaPhiM(jb.Pt(),jb.Eta(),jb.Phi(),0.0);
86 if(ja.Pt() > jb.Pt()){
87 TLorentzVector
temp = ja;
97 jaT.SetXYZ(ja.Px(),ja.Py(),0.0);
98 jbT.SetXYZ(jb.Px(),jb.Py(),0.0);
99 double ATBT = (jaT+jbT).Mag2();
101 double MR =
sqrt((A+B)*(A+B)-(az+bz)*(az+bz)-
102 (jbT.Dot(jbT)-jaT.Dot(jaT))*(jbT.Dot(jbT)-jaT.Dot(jaT))/(jaT+jbT).Mag2());
104 double mybeta = (jbT.Dot(jbT)-jaT.Dot(jaT))/
105 sqrt(ATBT*((A+B)*(A+B)-(az+bz)*(az+bz)));
107 double mygamma = 1./
sqrt(1.-mybeta*mybeta);
117 met.SetPtEtaPhi((inputMet->front()).
pt(),0.0,(inputMet->front()).
phi());
119 std::vector<math::XYZTLorentzVector>::const_iterator muonIt;
120 for(muonIt = muons.begin(); muonIt!=muons.end(); muonIt++){
122 tmp.SetPtEtaPhi(muonIt->pt(),0,muonIt->phi());
126 double MTR =
sqrt(0.5*(met.Mag()*(ja.Pt()+jb.Pt()) - met.Dot(ja.Vect()+jb.Vect())));
129 return float(MTR)/float(MR);
T getParameter(std::string const &) const
RazorVarProducer(const edm::ParameterSet &)
tuple met
____________________________________________________________________________||
bool getByToken(EDGetToken token, Handle< PROD > &result) const
#define DEFINE_FWK_MODULE(type)
double CalcMR(TLorentzVector ja, TLorentzVector jb)
edm::InputTag inputMetTag_
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
edm::EDGetTokenT< reco::CaloMETCollection > inputMetTagToken_
virtual void produce(edm::Event &, const edm::EventSetup &)
double CalcR(double MR, const TLorentzVector &ja, const TLorentzVector &jb, edm::Handle< reco::CaloMETCollection > met, const std::vector< math::XYZTLorentzVector > &muons)
std::vector< std::vector< double > > tmp
edm::EDGetTokenT< std::vector< math::XYZTLorentzVector > > inputTagToken_