CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_6_2_7/src/TopQuarkAnalysis/TopJetCombination/src/TtSemiLRJetCombObservables.cc

Go to the documentation of this file.
00001 //
00002 // Author:  Jan Heyninck
00003 // Created: Tue Apr  3 17:33:23 PDT 2007
00004 //
00005 // $Id: TtSemiLRJetCombObservables.cc,v 1.17 2013/05/17 18:17:27 vadler Exp $
00006 //
00007 #include "TopQuarkAnalysis/TopJetCombination/interface/TtSemiLRJetCombObservables.h"
00008 #include "DataFormats/PatCandidates/interface/Jet.h"
00009 #include "DataFormats/Math/interface/deltaR.h"
00010 #include "DataFormats/Math/interface/deltaPhi.h"
00011 #include "DataFormats/Common/interface/Handle.h"
00012 #include "AnalysisDataFormats/TopObjects/interface/TtGenEvent.h"
00013 
00014 // constructor with path; default should not be used
00015 TtSemiLRJetCombObservables::TtSemiLRJetCombObservables() {}
00016 
00017 
00018 // destructor
00019 TtSemiLRJetCombObservables::~TtSemiLRJetCombObservables() {}
00020 
00021 std::vector< TtSemiLRJetCombObservables::IntBoolPair >
00022 TtSemiLRJetCombObservables::operator() (TtSemiEvtSolution &solution, const edm::Event & iEvent, bool matchOnly)
00023 {
00024   bool debug=false;
00025 
00026   evtselectVarVal.clear();
00027   evtselectVarMatch.clear();
00028 
00029   // Check whether the objects are matched:
00030 //  bool matchHadt = false; //commented out since gcc461 complained that this variable was set but unused
00031 //  bool matchLept = false; //commented out since gcc461 complained that this variable was set but unused
00032 //  bool matchHadW = false; //commented out since gcc461 complained that this variable was set but unused
00033 //  bool matchLepW = false; //commented out since gcc461 complained that this variable was set but unused
00034   bool matchHadb = false;
00035   bool matchLepb = false;
00036   bool matchHadp = false;
00037   bool matchHadq = false;
00038   bool matchHadpq = false;
00039   bool matchHadqp = false;
00040   bool matchLepl = false;
00041   bool matchLepn = false;
00042 
00043   if(debug) std::cout << "== start matching the objects " << std::endl;
00044 
00045   double drLepl=0, drLepn=0, drHadb=0, drLepb=0, drHadp=0, drHadq=0, drHadpq=0, drHadqp=0; // drHadt=0, drLept=0, drLepW=0, drHadW=0;
00046 
00047   edm::Handle<TtGenEvent> genEvent;
00048   iEvent.getByLabel ("genEvt",genEvent);
00049 
00050   if (genEvent.failedToGet()) {
00051     if(debug) std::cout << "== not found genEvent " << std::endl;
00052   } else if (genEvent.isValid()) {
00053     if(debug) std::cout << "== found genEvent " << std::endl;
00054 
00055     if (genEvent->isSemiLeptonic() && genEvent->numberOfBQuarks() == 2) {
00056 
00057       //if(debug) std::cout << "== genEvent->quarkFromAntiTop() " << genEvent->quarkFromAntiTop()->pt() << std::endl;
00058       if(debug) std::cout << "== genEvent->isSemiLeptonic() && genEvent->numberOfBQuarks() == 2 " << std::endl;
00059       if(debug) std::cout << "== solution.getDecay() == " <<solution.getDecay()<< std::endl;
00060       if(debug) std::cout << "== solution.getRecLepm().pt() = " <<solution.getRecLepm().pt()  << std::endl;
00061       //if(debug) if(solution.getGenLepl() == 0) std::cout << "solution.getGenLepl() == NULL" << std::endl;
00062       if(debug) std::cout << "== *(solution.getGenLept())" << solution.getGenLept()->pt() << std::endl;
00063       if(debug) std::cout << "== *(solution.getGenLepl())" << solution.getGenLepl()->pt() << std::endl;
00064       // std::cout << "Semilepton:\n";
00065       // Match the lepton by deltaR
00066       if (solution.getDecay() == "muon")     drLepl = DeltaR<pat::Particle, reco::GenParticle>()(solution.getRecLepm(), *(solution.getGenLepl()));
00067       if(debug) std::cout << "== matching lepton " << std::endl;
00068       if (solution.getDecay() == "electron") drLepl = DeltaR<pat::Particle, reco::GenParticle>()(solution.getRecLepe(), *(solution.getGenLepl()));
00069       matchLepl = (drLepl < 0.3);
00070 
00071       if(debug) std::cout << "== lepton is matched " << std::endl;
00072       // Match the neutrino by deltaR
00073       drLepn = DeltaR<pat::Particle, reco::GenParticle>()(solution.getRecLepn(), *(solution.getGenLepn()));
00074       matchLepn = (drLepn < 0.3);
00075 
00076       // Match the hadronic b by deltaR
00077       drHadb = DeltaR<pat::Jet, reco::GenParticle>()(solution.getRecHadb(), *(solution.getGenHadb()));
00078       matchHadb = (drHadb < 0.3);
00079 
00080       // Match the hadronicleptonic b by deltaR
00081       drLepb = DeltaR<pat::Jet, reco::GenParticle>()(solution.getRecLepb(), *(solution.getGenLepb()));
00082       matchLepb = (drLepb < 0.3);
00083 
00084       // Match the hadronic p by deltaR
00085       drHadp = DeltaR<pat::Jet, reco::GenParticle>()(solution.getRecHadp(), *(solution.getGenHadp()));
00086       matchHadp = (drHadp < 0.3);
00087 
00088       // Match the hadronic pq by deltaR
00089       drHadpq = DeltaR<pat::Jet, reco::GenParticle>()(solution.getRecHadp(), *(solution.getGenHadq()));
00090       matchHadpq = (drHadpq < 0.3);
00091 
00092       // Match the hadronic q by deltaR
00093       drHadq = DeltaR<pat::Jet, reco::GenParticle>()(solution.getRecHadq(), *(solution.getGenHadq()));
00094       matchHadq = (drHadq < 0.3);
00095 
00096       // Match the hadronic qp by deltaR
00097       drHadqp = DeltaR<pat::Jet, reco::GenParticle>()(solution.getRecHadq(), *(solution.getGenHadp()));
00098       matchHadqp = (drHadqp < 0.3);
00099 
00100       //commented out since gcc461 complained that these variables were set but unused!
00101       /*
00102       // Match the hadronic W by deltaR
00103       drHadW = DeltaR<reco::Particle, reco::GenParticle>()(solution.getRecHadW(), *(solution.getGenHadW()));
00104       matchHadW = (drHadW < 0.3);
00105 
00106       // Match the leptonic W by deltaR
00107       drLepW = DeltaR<reco::Particle, reco::GenParticle>()(solution.getRecLepW(), *(solution.getGenLepW()));
00108       matchLepW = (drLepW < 0.3);
00109 
00110       // Match the hadronic t by deltaR
00111       drHadt = DeltaR<reco::Particle, reco::GenParticle>()(solution.getRecHadt(), *(solution.getGenHadt()));
00112       matchHadt = (drHadt < 0.3);
00113 
00114       // Match the leptonic t by deltaR
00115       drLept = DeltaR<reco::Particle, reco::GenParticle>()(solution.getRecLept(), *(solution.getGenLept()));
00116       matchLept = (drLept < 0.3);
00117       */
00118     }
00119   } else {
00120     if(debug) std::cout << "== nothing " << std::endl;
00121   }
00122 
00123   if(debug) std::cout << "== objects matched" <<std::endl;
00124 
00125   edm::Handle<std::vector<pat::Jet> > jets;
00126   iEvent.getByLabel(jetSource_, jets);
00127 
00128   if(debug) std::cout << "== start calculating observables" << std::endl;
00129 
00130 
00131   //obs1 : pt(had top)
00132   double AverageTop =((solution.getHadb().p4()+solution.getHadq().p4()+solution.getHadp().p4()).pt()+(solution.getLepb().p4()+solution.getHadq().p4()+solution.getHadp().p4()).pt()+(solution.getHadb().p4()+solution.getLepb().p4()+solution.getHadp().p4()).pt()+(solution.getHadb().p4()+solution.getHadq().p4()+solution.getLepb().p4()).pt())/4.;
00133   double Obs1 = ((solution.getHadb().p4()+solution.getHadq().p4()+solution.getHadp().p4()).pt())/AverageTop;
00134   evtselectVarVal.push_back(IntDblPair(1,Obs1));
00135   evtselectVarMatch.push_back(IntBoolPair(1, ((matchHadq&&matchHadp)||(matchHadpq&&matchHadqp))&&matchHadb));
00136 
00137   if(debug) std::cout << "== observable 1 " << Obs1 << std::endl;
00138 
00139   //obs2 : (pt_b1 + pt_b2)/(sum jetpt)
00140   double Obs2 = (solution.getHadb().pt()+solution.getLepb().pt())/(solution.getHadp().pt()+solution.getHadq().pt());
00141   evtselectVarVal.push_back(IntDblPair(2,Obs2));
00142   evtselectVarMatch.push_back(IntBoolPair(2,((matchHadp&&matchHadq)||(matchHadpq&&matchHadqp))&&matchHadb&&matchLepb));
00143 
00144   if(debug) std::cout << "== observable 2 " << Obs2 << std::endl;
00145 
00146   //obs3: delta R between lep b and lepton
00147   double Obs3 = -999;
00148   if (solution.getDecay() == "muon")     Obs3 = ROOT::Math::VectorUtil::DeltaR( solution.getLepb().p4(),solution.getRecLepm().p4() );
00149   if (solution.getDecay() == "electron") Obs3 = ROOT::Math::VectorUtil::DeltaR( solution.getLepb().p4(),solution.getRecLepe().p4() );
00150   evtselectVarVal.push_back(IntDblPair(3,Obs3));
00151   evtselectVarMatch.push_back(IntBoolPair(3,matchLepb&&matchLepl));
00152 
00153   if(debug) std::cout << "== observable 3 " << Obs3 << std::endl;
00154 
00155    //obs4 : del R ( had b, had W)
00156   double Obs4 = ROOT::Math::VectorUtil::DeltaR( solution.getHadb().p4(), solution.getHadq().p4()+solution.getHadp().p4() );
00157   evtselectVarVal.push_back(IntDblPair(4,Obs4));
00158   evtselectVarMatch.push_back(IntBoolPair(4,matchHadb&&((matchHadp&&matchHadp)||(matchHadpq&&matchHadqp))));
00159 
00160   if(debug) std::cout << "== observable 4 " << Obs4 << std::endl;
00161 
00162   //obs5 : del R between light quarkssolution.getHadp().phi(
00163   double Obs5 = ROOT::Math::VectorUtil::DeltaR( solution.getHadq().p4(),solution.getHadp().p4() );
00164   evtselectVarVal.push_back(IntDblPair(5,Obs5));
00165   evtselectVarMatch.push_back(IntBoolPair(5,(matchHadp&&matchHadq)||(matchHadpq&&matchHadqp)));
00166 
00167   if(debug) std::cout << "== observable 5 " << Obs5 << std::endl;
00168 
00169   //obs6 : b-tagging information
00170   double Obs6 = 0;
00171   if ( fabs(solution.getHadb().bDiscriminator("trackCountingJetTags") +10) < 0.0001 || fabs(solution.getLepb().bDiscriminator("trackCountingJetTags") +10)< 0.0001 ){
00172     Obs6 = -10.;
00173   } else {
00174     Obs6 = (solution.getHadb().bDiscriminator("trackCountingJetTags")+solution.getLepb().bDiscriminator("trackCountingJetTags"));
00175   }
00176   evtselectVarVal.push_back(IntDblPair(6,Obs6));
00177   evtselectVarMatch.push_back(IntBoolPair(6,1));
00178 
00179   if(debug) std::cout << "== observable 6 " << Obs6 << std::endl;
00180 
00181   //obs7 : chi2 value of kinematical fit with W-mass constraint
00182   double Obs7 =0;
00183   if(solution.getProbChi2() <0){Obs7 = -0;} else { Obs7 = log10(solution.getProbChi2()+.00001);}
00184   evtselectVarVal.push_back(IntDblPair(7,Obs7));
00185   evtselectVarMatch.push_back(IntBoolPair(7,((matchHadp&&matchHadq)||(matchHadpq&&matchHadqp))));
00186 
00187   if(debug) std::cout << "== observable 7 " << Obs7 << std::endl;
00188 
00189   //obs8(=7+1)
00190   double Obs8 =  solution.getCalHadt().p4().pt();
00191   evtselectVarVal.push_back(IntDblPair(8,Obs8));
00192   evtselectVarMatch.push_back(IntBoolPair(8, matchHadb&&((matchHadp&&matchHadq)||(matchHadpq&&matchHadqp))));
00193 
00194   if(debug) std::cout << "== observable 8 " << Obs8 << std::endl;
00195 
00196   //obs9
00197   double Obs9  = fabs(solution.getCalHadt().p4().eta());
00198   evtselectVarVal.push_back(IntDblPair(9,Obs9));
00199   evtselectVarMatch.push_back(IntBoolPair(9, matchHadb&&((matchHadp&&matchHadq)||(matchHadpq&&matchHadqp))));
00200 
00201   if(debug) std::cout << "== observable 9 " << Obs9 << std::endl;
00202 
00203   //obs10
00204   double Obs10  = solution.getCalHadt().p4().theta();
00205   evtselectVarVal.push_back(IntDblPair(10,Obs10));
00206   evtselectVarMatch.push_back(IntBoolPair(10, matchHadb&&((matchHadp&&matchHadq)||(matchHadpq&&matchHadqp))));
00207 
00208   if(debug) std::cout << "== observable 10 " << Obs10 << std::endl;
00209 
00210   //obs11
00211   double Obs11  = solution.getCalHadW().p4().pt();
00212   evtselectVarVal.push_back(IntDblPair(11,Obs11));
00213   evtselectVarMatch.push_back(IntBoolPair(11, (matchHadp&&matchHadq)||(matchHadpq&&matchHadqp)));
00214 
00215   if(debug) std::cout << "== observable 11 " << Obs11 << std::endl;
00216 
00217   //obs12
00218   double Obs12  = fabs(solution.getCalHadW().p4().eta());
00219   evtselectVarVal.push_back(IntDblPair(12,Obs12));
00220   evtselectVarMatch.push_back(IntBoolPair(12, (matchHadp&&matchHadq)||(matchHadpq&&matchHadqp)));
00221 
00222   if(debug) std::cout << "== observable 12 " << Obs12 << std::endl;
00223 
00224   //obs13
00225   double Obs13  = solution.getCalHadW().p4().theta();
00226   evtselectVarVal.push_back(IntDblPair(13,Obs13));
00227   evtselectVarMatch.push_back(IntBoolPair(13, (matchHadp&&matchHadq)||(matchHadpq&&matchHadqp)));
00228 
00229   if(debug) std::cout << "== observable 13 " << Obs13 << std::endl;
00230 
00231   //obs14
00232   double Obs14  = solution.getCalHadb().p4().pt();
00233   evtselectVarVal.push_back(IntDblPair(14,Obs14));
00234   evtselectVarMatch.push_back(IntBoolPair(14, matchHadb));
00235 
00236   if(debug) std::cout << "== observable 14 " << Obs14 << std::endl;
00237 
00238   //obs15
00239   double Obs15  = fabs(solution.getCalHadb().p4().eta());
00240   evtselectVarVal.push_back(IntDblPair(15,Obs15));
00241   evtselectVarMatch.push_back(IntBoolPair(15, matchHadb));
00242 
00243   if(debug) std::cout << "== observable 15 " << Obs15 << std::endl;
00244 
00245   //obs16
00246   double Obs16  = solution.getCalHadb().p4().theta();
00247   evtselectVarVal.push_back(IntDblPair(16,Obs16));
00248   evtselectVarMatch.push_back(IntBoolPair(16, matchHadb));
00249 
00250   if(debug) std::cout << "== observable 16 " << Obs16 << std::endl;
00251 
00252   //obs17
00253   double Obs17  = solution.getCalHadp().p4().pt();
00254   evtselectVarVal.push_back(IntDblPair(17,Obs17));
00255   evtselectVarMatch.push_back(IntBoolPair(17, matchHadp));
00256 
00257   if(debug) std::cout << "== observable 17 " << Obs17 << std::endl;
00258 
00259   //obs18
00260   double Obs18  = fabs(solution.getCalHadp().p4().eta());
00261   evtselectVarVal.push_back(IntDblPair(18,Obs18));
00262   evtselectVarMatch.push_back(IntBoolPair(18, matchHadp));
00263 
00264   if(debug) std::cout << "== observable 18 " << Obs18 << std::endl;
00265 
00266   //obs19
00267   double Obs19  = solution.getCalHadp().p4().theta();
00268   evtselectVarVal.push_back(IntDblPair(19,Obs19));
00269   evtselectVarMatch.push_back(IntBoolPair(19, matchHadp));
00270 
00271   if(debug) std::cout << "== observable 19 " << Obs19 << std::endl;
00272 
00273   //obs20
00274   double Obs20  = solution.getCalHadq().p4().pt();
00275   evtselectVarVal.push_back(IntDblPair(20,Obs20));
00276   evtselectVarMatch.push_back(IntBoolPair(20, matchHadq));
00277 
00278   if(debug) std::cout << "== observable 20 " << Obs20 << std::endl;
00279 
00280   //obs21
00281   double Obs21  = fabs(solution.getCalHadq().p4().eta());
00282   evtselectVarVal.push_back(IntDblPair(21,Obs21));
00283   evtselectVarMatch.push_back(IntBoolPair(21, matchHadq));
00284 
00285   if(debug) std::cout << "== observable 21 " << Obs21 << std::endl;
00286 
00287   //obs22
00288   double Obs22  = solution.getCalHadq().p4().theta();
00289   evtselectVarVal.push_back(IntDblPair(22,Obs22));
00290   evtselectVarMatch.push_back(IntBoolPair(22, matchHadq));
00291 
00292   if(debug) std::cout << "== observable 22 " << Obs22 << std::endl;
00293 
00294   //obs23
00295   double Obs23  = solution.getCalLept().p4().pt();
00296   evtselectVarVal.push_back(IntDblPair(23,Obs23));
00297   evtselectVarMatch.push_back(IntBoolPair(23, matchLepl&&matchLepn&&matchLepb));
00298 
00299   if(debug) std::cout << "== observable 23 " << Obs23 << std::endl;
00300 
00301   //obs24
00302   double Obs24  = fabs(solution.getCalLept().p4().eta());
00303   evtselectVarVal.push_back(IntDblPair(24,Obs24));
00304   evtselectVarMatch.push_back(IntBoolPair(24, matchLepl&&matchLepn&&matchLepb));
00305 
00306   if(debug) std::cout << "== observable 24 " << Obs24 << std::endl;
00307 
00308   //obs25
00309   double Obs25  = solution.getCalLept().p4().theta();
00310   evtselectVarVal.push_back(IntDblPair(25,Obs25));
00311   evtselectVarMatch.push_back(IntBoolPair(25, matchLepl&&matchLepn&&matchLepb));
00312 
00313   if(debug) std::cout << "== observable 25 " << Obs25 << std::endl;
00314 
00315   //obs26
00316   double Obs26  = solution.getRecLepW().p4().pt();
00317   evtselectVarVal.push_back(IntDblPair(26,Obs26));
00318   evtselectVarMatch.push_back(IntBoolPair(26, matchLepl&&matchLepn));
00319 
00320   if(debug) std::cout << "== observable 26 " << Obs26 << std::endl;
00321 
00322   //obs27
00323   double Obs27  = fabs(solution.getRecLepW().p4().eta());
00324   evtselectVarVal.push_back(IntDblPair(27,Obs27));
00325   evtselectVarMatch.push_back(IntBoolPair(27, matchLepl&&matchLepn));
00326 
00327   if(debug) std::cout << "== observable 27 " << Obs27 << std::endl;
00328 
00329   //obs28
00330   double Obs28  = solution.getRecLepW().p4().theta();
00331   evtselectVarVal.push_back(IntDblPair(28,Obs28));
00332   evtselectVarMatch.push_back(IntBoolPair(28, matchLepl&&matchLepn));
00333 
00334   if(debug) std::cout << "== observable 28 " << Obs28 << std::endl;
00335 
00336   //obs29
00337   double Obs29  = solution.getCalLepb().p4().pt();
00338   evtselectVarVal.push_back(IntDblPair(29,Obs29));
00339   evtselectVarMatch.push_back(IntBoolPair(29, matchLepb));
00340 
00341   if(debug) std::cout << "== observable 29 " << Obs29 << std::endl;
00342 
00343   //obs30
00344   double Obs30  = fabs(solution.getCalLepb().p4().eta());
00345   evtselectVarVal.push_back(IntDblPair(30,Obs30));
00346   evtselectVarMatch.push_back(IntBoolPair(30, matchLepb));
00347 
00348   if(debug) std::cout << "== observable 30 " << Obs30 << std::endl;
00349 
00350   //obs31
00351   double Obs31  = solution.getCalLepb().p4().theta();
00352   evtselectVarVal.push_back(IntDblPair(31,Obs31));
00353   evtselectVarMatch.push_back(IntBoolPair(31, matchLepb));
00354 
00355   if(debug) std::cout << "== observable 31 " << Obs31 << std::endl;
00356 
00357   //obs32
00358   double Obs32 = -999.;
00359   if (solution.getDecay() == "muon") Obs32 = solution.getRecLepm().p4().pt();
00360   if (solution.getDecay() == "electron") Obs32 = solution.getRecLepe().p4().pt();
00361   evtselectVarVal.push_back(IntDblPair(32,Obs32));
00362   evtselectVarMatch.push_back(IntBoolPair(32, matchLepl));
00363 
00364   if(debug) std::cout << "== observable 32 " << Obs32 << std::endl;
00365 
00366   //obs33
00367   double Obs33 = -999.;
00368   if (solution.getDecay() == "muon") Obs33 = fabs(solution.getRecLepm().p4().eta());
00369   if (solution.getDecay() == "electron") Obs33 = fabs(solution.getRecLepe().p4().eta());
00370   evtselectVarVal.push_back(IntDblPair(33,Obs33));
00371   evtselectVarMatch.push_back(IntBoolPair(33, matchLepl));
00372 
00373   if(debug) std::cout << "== observable 33 " << Obs33 << std::endl;
00374 
00375   //obs34
00376   double Obs34 = -999.;
00377   if (solution.getDecay() == "muon") Obs34 = fabs(solution.getRecLepm().p4().theta());
00378   if (solution.getDecay() == "electron") Obs34 = fabs(solution.getRecLepe().p4().theta());
00379   evtselectVarVal.push_back(IntDblPair(34,Obs34));
00380   evtselectVarMatch.push_back(IntBoolPair(34, matchLepl));
00381 
00382   if(debug) std::cout << "== observable 34 " << Obs34 << std::endl;
00383 
00384   //obs35
00385   double Obs35  = solution.getFitLepn().p4().pt();
00386   evtselectVarVal.push_back(IntDblPair(35,Obs35));
00387   evtselectVarMatch.push_back(IntBoolPair(35, matchLepn));
00388 
00389   if(debug) std::cout << "== observable 35 " << Obs35 << std::endl;
00390 
00391   //obs36
00392   double Obs36  = fabs(solution.getFitLepn().p4().eta());
00393   evtselectVarVal.push_back(IntDblPair(36,Obs36));
00394   evtselectVarMatch.push_back(IntBoolPair(36, matchLepn));
00395 
00396   if(debug) std::cout << "== observable 36 " << Obs36 << std::endl;
00397 
00398   //obs37
00399   double Obs37  = solution.getFitLepn().p4().theta();
00400   evtselectVarVal.push_back(IntDblPair(37,Obs37));
00401   evtselectVarMatch.push_back(IntBoolPair(37, matchLepn));
00402 
00403   if(debug) std::cout << "== observable 37 " << Obs37 << std::endl;
00404 
00405   // 2 particle kinematics
00406   //obs38
00407   double Obs38  = fabs(solution.getCalHadW().p4().phi()- solution.getRecLepW().p4().phi());
00408   if (Obs38 > 3.1415927)  Obs38 =  2*3.1415927 - Obs31;
00409   if (Obs38 < -3.1415927) Obs38 = -2*3.1415927 - Obs31;
00410   evtselectVarVal.push_back(IntDblPair(38,Obs38));
00411   evtselectVarMatch.push_back(IntBoolPair(38, matchLepl&&matchLepn&&((matchHadp&&matchHadq)||(matchHadpq&&matchHadqp))));
00412 
00413   if(debug) std::cout << "== observable 38 " << Obs38 << std::endl;
00414 
00415   //obs39
00416   double Obs39  = fabs(solution.getCalHadW().p4().eta()- solution.getRecLepW().p4().eta());
00417   evtselectVarVal.push_back(IntDblPair(39,Obs39));
00418   evtselectVarMatch.push_back(IntBoolPair(39, matchLepl&&matchLepn&&((matchHadp&&matchHadq)||(matchHadpq&&matchHadqp))));
00419 
00420   if(debug) std::cout << "== observable 39 " << Obs39 << std::endl;
00421 
00422   //obs40
00423   double Obs40  = fabs(solution.getCalHadW().p4().theta()- solution.getRecLepW().p4().theta());
00424   evtselectVarVal.push_back(IntDblPair(40,Obs40));
00425   evtselectVarMatch.push_back(IntBoolPair(40, matchLepl&&matchLepn&&((matchHadp&&matchHadq)||(matchHadpq&&matchHadqp))));
00426 
00427   if(debug) std::cout << "== observable 40 " << Obs40 << std::endl;
00428 
00429   //obs41
00430   double Obs41  = ROOT::Math::VectorUtil::DeltaR(solution.getCalHadW().p4(), solution.getRecLepW().p4());
00431   evtselectVarVal.push_back(IntDblPair(41,Obs41));
00432   evtselectVarMatch.push_back(IntBoolPair(41, matchLepl&&matchLepn&&((matchHadp&&matchHadq)||(matchHadpq&&matchHadqp))));
00433 
00434   if(debug) std::cout << "== observable 41 " << Obs41 << std::endl;
00435 
00436   //obs42
00437   double Obs42  = fabs(solution.getCalHadb().p4().phi()- solution.getCalLepb().p4().phi());
00438   if (Obs42 > 3.1415927)  Obs42 =  2*3.1415927 - Obs42;
00439   if (Obs42 < -3.1415927) Obs42 = -2*3.1415927 - Obs42;
00440   evtselectVarVal.push_back(IntDblPair(42,Obs42));
00441   evtselectVarMatch.push_back(IntBoolPair(42, matchHadb&&matchLepb));
00442 
00443   if(debug) std::cout << "== observable 42 " << Obs42 << std::endl;
00444 
00445   //obs43
00446   double Obs43  = fabs(solution.getCalHadb().p4().eta()- solution.getCalLepb().p4().eta());
00447   evtselectVarVal.push_back(IntDblPair(43,Obs43));
00448   evtselectVarMatch.push_back(IntBoolPair(43, matchHadb&&matchLepb));
00449 
00450   if(debug) std::cout << "== observable 43 " << Obs43 << std::endl;
00451 
00452   //obs44
00453   double Obs44 = fabs(solution.getCalHadb().p4().theta()- solution.getCalLepb().p4().theta());
00454   evtselectVarVal.push_back(IntDblPair(44,Obs44));
00455   evtselectVarMatch.push_back(IntBoolPair(44, matchHadb&&matchLepb));
00456 
00457   if(debug) std::cout << "== observable 44 " << Obs44 << std::endl;
00458 
00459   //obs45
00460   double Obs45  = ROOT::Math::VectorUtil::DeltaR(solution.getCalHadb().p4(), solution.getCalLepb().p4());
00461   evtselectVarVal.push_back(IntDblPair(45,Obs45));
00462   evtselectVarMatch.push_back(IntBoolPair(45, matchHadb&&matchLepb));
00463 
00464   if(debug) std::cout << "== observable 45 " << Obs45 << std::endl;
00465 
00466   //obs46
00467   double Obs46  = fabs(solution.getCalHadb().p4().phi()- solution.getCalHadW().p4().phi());
00468   if (Obs46 > 3.1415927)  Obs46 =  2*3.1415927 - Obs46;
00469   if (Obs46 < -3.1415927) Obs46 = -2*3.1415927 - Obs46;
00470   evtselectVarVal.push_back(IntDblPair(46,Obs46));
00471   evtselectVarMatch.push_back(IntBoolPair(46, matchHadb&&((matchHadq&&matchHadp)||(matchHadpq&&matchHadqp))));
00472 
00473   if(debug) std::cout << "== observable 46 " << Obs46 << std::endl;
00474 
00475   //obs47
00476   double Obs47  = fabs(solution.getCalHadb().p4().eta()- solution.getCalHadW().p4().eta());
00477   evtselectVarVal.push_back(IntDblPair(47,Obs47));
00478   evtselectVarMatch.push_back(IntBoolPair(47, matchHadb&&((matchHadp&&matchHadq)||(matchHadpq&&matchHadqp))));
00479 
00480   if(debug) std::cout << "== observable 47 " << Obs47 << std::endl;
00481 
00482   //obs48
00483   double Obs48  = fabs(solution.getCalHadb().p4().theta()- solution.getCalHadW().p4().theta());
00484   evtselectVarVal.push_back(IntDblPair(48,Obs48));
00485   evtselectVarMatch.push_back(IntBoolPair(48, matchHadb&&((matchHadp&&matchHadq)||(matchHadpq&&matchHadqp))));
00486 
00487   if(debug) std::cout << "== observable 48 " << Obs48 << std::endl;
00488 
00489   //obs49
00490   double Obs49  = ROOT::Math::VectorUtil::DeltaR(solution.getCalHadb().p4(), solution.getCalHadW().p4());
00491   evtselectVarVal.push_back(IntDblPair(49,Obs49));
00492   evtselectVarMatch.push_back(IntBoolPair(49, matchHadb&&((matchHadp&&matchHadq)||(matchHadpq&&matchHadqp))));
00493 
00494   if(debug) std::cout << "== observable 49 " << Obs49 << std::endl;
00495 
00496   //obs50
00497   double Obs50  = fabs(solution.getCalLepb().p4().phi()- solution.getRecLepW().p4().phi());
00498   if (Obs50 > 3.1415927)  Obs50 =  2*3.1415927 - Obs50;
00499   if (Obs50 < -3.1415927) Obs50 = -2*3.1415927 - Obs50;
00500   evtselectVarVal.push_back(IntDblPair(50,Obs50));
00501   evtselectVarMatch.push_back(IntBoolPair(50, matchLepb&&matchLepn&&matchLepl));
00502 
00503   if(debug) std::cout << "== observable 50 " << Obs50 << std::endl;
00504 
00505   //obs51
00506   double Obs51  = fabs(solution.getCalLepb().p4().eta()- solution.getRecLepW().p4().eta());
00507   evtselectVarVal.push_back(IntDblPair(51,Obs51));
00508   evtselectVarMatch.push_back(IntBoolPair(51, matchLepb&&matchLepn&&matchLepl));
00509 
00510   if(debug) std::cout << "== observable 51 " << Obs51 << std::endl;
00511 
00512   //obs52
00513   double Obs52  = fabs(solution.getCalLepb().p4().theta()- solution.getRecLepW().p4().theta());
00514   evtselectVarVal.push_back(IntDblPair(52,Obs52));
00515   evtselectVarMatch.push_back(IntBoolPair(52, matchLepb&&matchLepn&&matchLepl));
00516 
00517   if(debug) std::cout << "== observable 52 " << Obs52 << std::endl;
00518 
00519   //obs53
00520   double Obs53  = ROOT::Math::VectorUtil::DeltaR(solution.getCalLepb().p4(), solution.getRecLepW().p4());
00521   evtselectVarVal.push_back(IntDblPair(53,Obs53));
00522   evtselectVarMatch.push_back(IntBoolPair(53, matchLepb&&matchLepn&&matchLepl));
00523 
00524   if(debug) std::cout << "== observable 53 " << Obs53 << std::endl;
00525 
00526   //obs54
00527   double Obs54 = fabs(solution.getCalHadp().p4().phi()- solution.getCalHadq().p4().phi());
00528   if (Obs54 > 3.1415927)  Obs54 =  2*3.1415927 - Obs54;
00529   if (Obs54 < -3.1415927) Obs54 = -2*3.1415927 - Obs54;
00530   evtselectVarVal.push_back(IntDblPair(54,Obs54));
00531   evtselectVarMatch.push_back(IntBoolPair(54, (matchHadp&&matchHadq)||(matchHadpq&&matchHadqp)));
00532 
00533   if(debug) std::cout << "== observable 54 " << Obs54 << std::endl;
00534 
00535   //obs55
00536   double Obs55 = fabs(solution.getCalHadp().p4().eta()- solution.getCalHadq().p4().eta());
00537   evtselectVarVal.push_back(IntDblPair(55,Obs55));
00538   evtselectVarMatch.push_back(IntBoolPair(55, (matchHadp&&matchHadq)||(matchHadpq&&matchHadqp)));
00539 
00540   if(debug) std::cout << "== observable 55 " << Obs55 << std::endl;
00541 
00542   //obs56
00543   double Obs56  = fabs(solution.getCalHadp().p4().theta()- solution.getCalHadq().p4().theta());
00544   evtselectVarVal.push_back(IntDblPair(56,Obs56));
00545   evtselectVarMatch.push_back(IntBoolPair(56, (matchHadp&&matchHadq)||(matchHadpq&&matchHadqp)));
00546 
00547   if(debug) std::cout << "== observable 56 " << Obs56 << std::endl;
00548 
00549   //obs57
00550   double Obs57  = ROOT::Math::VectorUtil::DeltaR(solution.getCalHadp().p4(), solution.getCalHadq().p4());
00551   evtselectVarVal.push_back(IntDblPair(57,Obs57));
00552   evtselectVarMatch.push_back(IntBoolPair(57, (matchHadp&&matchHadq)||(matchHadpq&&matchHadqp)));
00553 
00554   if(debug) std::cout << "== observable 57 " << Obs57 << std::endl;
00555 
00556   //obs58
00557   double Obs58 = -999.;
00558   if (solution.getDecay() == "muon") Obs58  = fabs(solution.getRecLepm().p4().phi()- solution.getRecLepn().p4().phi());
00559   if (solution.getDecay() == "electron") Obs58 = fabs(solution.getRecLepe().p4().phi()- solution.getRecLepn().p4().phi());
00560   if (Obs58 > 3.1415927)  Obs58 =  2*3.1415927 - Obs58;
00561   if (Obs58 < -3.1415927) Obs58 = -2*3.1415927 - Obs58;
00562   evtselectVarVal.push_back(IntDblPair(58,Obs58));
00563   evtselectVarMatch.push_back(IntBoolPair(58, matchLepl&&matchLepn));
00564 
00565   if(debug) std::cout << "== observable 58 " << Obs58 << std::endl;
00566 
00567   //obs59
00568   double Obs59 = -999.;
00569   if (solution.getDecay() == "muon") Obs59 = fabs(solution.getRecLepm().p4().eta()- solution.getRecLepn().p4().eta());
00570   if (solution.getDecay() == "electron") Obs59 = fabs(solution.getRecLepe().p4().eta()- solution.getRecLepn().p4().eta());
00571   evtselectVarVal.push_back(IntDblPair(59,Obs59));
00572   evtselectVarMatch.push_back(IntBoolPair(59, matchLepl&&matchLepn));
00573 
00574   if(debug) std::cout << "== observable 59 " << Obs59 << std::endl;
00575 
00576   //obs60
00577   double Obs60 = -999.;
00578   if (solution.getDecay() == "muon") Obs60  = fabs(solution.getRecLepm().p4().theta()- solution.getRecLepn().p4().theta());
00579   if (solution.getDecay() == "electron") Obs60  = fabs(solution.getRecLepe().p4().theta()- solution.getRecLepn().p4().theta());
00580   evtselectVarVal.push_back(IntDblPair(60,Obs60));
00581   evtselectVarMatch.push_back(IntBoolPair(60, matchLepl&&matchLepn));
00582 
00583   if(debug) std::cout << "== observable 60 " << Obs60 << std::endl;
00584 
00585   //obs61
00586   double Obs61 = -999.;
00587   if (solution.getDecay() == "muon") Obs61 = ROOT::Math::VectorUtil::DeltaR(solution.getRecLepm().p4(), solution.getRecLepn().p4());
00588   if (solution.getDecay() == "electron") Obs61 = ROOT::Math::VectorUtil::DeltaR(solution.getRecLepe().p4(), solution.getRecLepn().p4());
00589   evtselectVarVal.push_back(IntDblPair(61,Obs61));
00590   evtselectVarMatch.push_back(IntBoolPair(61, matchLepl&&matchLepn));
00591 
00592   if(debug) std::cout << "== observable 61 " << Obs61 << std::endl;
00593 
00594   // miscellaneous event variables
00595 
00596 
00597   //obs62
00598   double Obs62  = ((jets->size() > 4 && (*jets)[3].p4().Et() > 0.00001) ? (*jets)[4].p4().Et() / (*jets)[3].p4().Et() : 1.0);
00599   //double Obs62 = 1;
00600   evtselectVarVal.push_back(IntDblPair(62,Obs62));
00601   evtselectVarMatch.push_back(IntBoolPair(62, ((matchHadp&&matchHadq)||(matchHadpq&&matchHadqp))&&matchHadb&&matchLepb));
00602 
00603   if(debug) std::cout << "== observable 62 " << Obs62 << std::endl;
00604 
00605   float calJetsSumEt = 0;
00606   for (unsigned int i = 4; i < jets->size(); i++) {
00607     calJetsSumEt += (*jets)[i].p4().Et();
00608   }
00609 
00610   //obs63
00611   double Obs63_den = (jets->size() > 4) ? ((*jets)[0].p4().Et()+(*jets)[1].p4().Et()+(*jets)[2].p4().Et()+(*jets)[3].p4().Et()+(*jets)[4].p4().Et()) : 0.0;
00612   double Obs63  = (Obs63_den > 0.00001) ? calJetsSumEt / Obs63_den : 1.0;
00613   //double Obs63 =1;
00614   evtselectVarVal.push_back(IntDblPair(63,Obs63));
00615   evtselectVarMatch.push_back(IntBoolPair(63, ((matchHadp&&matchHadq)||(matchHadpq&&matchHadqp))&&matchHadb&&matchLepb));
00616 
00617   if(debug) std::cout << "== observable 63 " << Obs63 << std::endl;
00618 
00619   //obs64
00620   double Obs64  = solution.getProbChi2();
00621   evtselectVarVal.push_back(IntDblPair(64,Obs64));
00622   evtselectVarMatch.push_back(IntBoolPair(64, ((matchHadp&&matchHadq)||(matchHadpq&&matchHadqp))&&matchHadb&&matchLepb));
00623 
00624   if(debug) std::cout << "== observable 64 " << Obs64 << std::endl;
00625 
00626   //obs65
00627   double Obs65  = solution.getFitHadt().p4().mass() - solution.getCalHadt().p4().mass();
00628   evtselectVarVal.push_back(IntDblPair(65,Obs65));
00629   evtselectVarMatch.push_back(IntBoolPair(65, ((matchHadp&&matchHadq)||(matchHadpq&&matchHadqp))&&matchHadb&&matchLepb));
00630 
00631   if(debug) std::cout << "== observable 65 " << Obs65 << std::endl;
00632 
00633   //obs66
00634   double Obs66  = solution.getFitLept().p4().mass() - solution.getCalLept().p4().mass();
00635   evtselectVarVal.push_back(IntDblPair(66,Obs66));
00636   evtselectVarMatch.push_back(IntBoolPair(66, ((matchHadp&&matchHadq)||(matchHadpq&&matchHadqp))&&matchHadb&&matchLepb));
00637 
00638   if(debug) std::cout << "observables calculated" << std::endl;
00639 
00640   if (!matchOnly) solution.setLRJetCombObservables(evtselectVarVal);
00641   return evtselectVarMatch;
00642 }