CMS 3D CMS Logo

TtFullHadSignalSel.cc
Go to the documentation of this file.
5 #include "TLorentzVector.h"
6 #include "TVector3.h"
7 
9 
10 std::vector<math::XYZVector> makeVecForEventShape(std::vector<pat::Jet> jets,
11  bool only6Jets = true,
12  ROOT::Math::Boost boost = ROOT::Math::Boost(0., 0., 0.)) {
13  std::vector<math::XYZVector> p;
14  bool doBoost = (boost == ROOT::Math::Boost(0., 0., 0.)) ? false : true;
15  for (std::vector<pat::Jet>::const_iterator jet = jets.begin(); jet != jets.end(); ++jet) {
16  math::XYZVector Vjet;
17  if (doBoost) {
18  ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > Ljet(jet->px(), jet->py(), jet->pz(), jet->energy());
19  Vjet = math::XYZVector(boost(Ljet).Px(), boost(Ljet).Py(), boost(Ljet).Pz());
20  } else
21  Vjet = math::XYZVector(jet->px(), jet->py(), jet->pz());
22  p.push_back(Vjet);
23  if (only6Jets && jet - jets.begin() == 5)
24  break;
25  }
26  return p;
27 }
28 
29 TtFullHadSignalSel::TtFullHadSignalSel(const std::vector<pat::Jet>& jets) {
30  H_ = -1.;
31  Ht_ = -1.;
32  Ht123_ = -1.;
33  Ht3jet_ = -1.;
34  Et56_ = -1.;
35  sqrt_s_ = -1.;
36  M3_ = -1.;
37 
38  TCHE_Bjets_ = 0.;
39  TCHP_Bjets_ = 0.;
40  SSVHE_Bjets_ = 0.;
41  SSVHP_Bjets_ = 0.;
42  CSV_Bjets_ = 0.;
43  CSVMVA_Bjets_ = 0.;
44  SM_Bjets_ = 0.;
45 
46  jets_etaetaMoment_ = 0.;
47  jets_etaphiMoment_ = 0.;
48  jets_phiphiMoment_ = 0.;
49 
53 
57 
58  aplanarity_ = -1.;
59  sphericity_ = -1.;
60  circularity_ = -1.;
61  isotropy_ = -1.;
62  C_ = -1.;
63  D_ = -1.;
64 
65  aplanarityAll_ = -1.;
66  sphericityAll_ = -1.;
67  circularityAll_ = -1.;
68  isotropyAll_ = -1.;
69  CAll_ = -1.;
70  DAll_ = -1.;
71 
72  aplanarityAllCMS_ = -1.;
73  sphericityAllCMS_ = -1.;
74  circularityAllCMS_ = -1.;
75  isotropyAllCMS_ = -1.;
76  CAllCMS_ = -1.;
77  DAllCMS_ = -1.;
78 
79  thrust_ = -1.;
80  thrustCMS_ = -1.;
81 
82  TCHE_BJet_Discs_ = std::vector<double>(0);
83  TCHP_BJet_Discs_ = std::vector<double>(0);
84  SSVHE_BJet_Discs_ = std::vector<double>(0);
85  SSVHP_BJet_Discs_ = std::vector<double>(0);
86  CSV_BJet_Discs_ = std::vector<double>(0);
87  CSVMVA_BJet_Discs_ = std::vector<double>(0);
88  SM_BJet_Discs_ = std::vector<double>(0);
89 
90  pts_ = std::vector<double>(0);
91  EtSin2Thetas_ = std::vector<double>(0);
92  thetas_ = std::vector<double>(0);
93  thetaStars_ = std::vector<double>(0);
94  EtStars_ = std::vector<double>(0);
95 
96  EtSin2Theta3jet_ = 0.;
97  theta3jet_ = 0.;
98  thetaStar3jet_ = 0.;
99  sinTheta3jet_ = 0.;
100  sinThetaStar3jet_ = 0.;
101  EtStar3jet_ = 0.;
102 
103  etaetaMoments_ = std::vector<double>(0);
104  etaphiMoments_ = std::vector<double>(0);
105  phiphiMoments_ = std::vector<double>(0);
106 
107  etaetaMomentsLogEt_ = std::vector<double>(0);
108  etaphiMomentsLogEt_ = std::vector<double>(0);
109  phiphiMomentsLogEt_ = std::vector<double>(0);
110 
111  etaetaMomentsMoment_ = std::vector<double>(0);
112  etaphiMomentsMoment_ = std::vector<double>(0);
113  phiphiMomentsMoment_ = std::vector<double>(0);
114 
115  etaetaMomentsMomentLogEt_ = std::vector<double>(0);
116  etaphiMomentsMomentLogEt_ = std::vector<double>(0);
117  phiphiMomentsMomentLogEt_ = std::vector<double>(0);
118 
119  etaetaMomentsNoB_ = std::vector<double>(0);
120  etaphiMomentsNoB_ = std::vector<double>(0);
121  phiphiMomentsNoB_ = std::vector<double>(0);
122 
123  dR_ = std::vector<double>(0);
124  dRMass_ = std::vector<double>(0);
125  dRAngle_ = std::vector<double>(0);
126 
127  dR3Jets_ = std::vector<double>(0);
128  dR3JetsMass_ = std::vector<double>(0);
129 
130  massDiffMWCands_ = std::vector<double>(0);
131 
132  ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > totalSystem(0., 0., 0., 0.);
133 
134  std::vector<std::pair<double, std::vector<unsigned short> > > dRs(0);
135  std::vector<std::pair<double, std::vector<unsigned short> > > dRs3Jets(0);
136 
137  std::vector<std::pair<double, std::vector<unsigned short> > > M3s(0);
138 
139  std::vector<ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > > fourVectors(0);
140 
141  unsigned short nonBJets = 0;
142  for (std::vector<pat::Jet>::const_iterator jet = jets.begin(); jet != jets.end(); ++jet) {
143  H_ += jet->energy();
144  Ht_ += jet->et();
145 
146  if (jet - jets.begin() < 3) {
147  Ht123_ += jet->et();
148  }
149  if (jet - jets.begin() == 4 || jet - jets.begin() == 5)
150  Et56_ += jet->et();
151 
152  if (jet - jets.begin() > 1) {
153  Ht3jet_ += jet->et();
154  EtSin2Theta3jet_ += jet->et() * pow(sin(jet->theta()), 2);
155  theta3jet_ += (jet->theta() > M_PI / 2.) ? (M_PI - jet->theta()) : jet->theta();
156  sinTheta3jet_ += sin(jet->theta());
157  }
158 
159  TCHE_BJet_Discs_.push_back(jet->bDiscriminator("trackCountingHighEffBJetTags"));
160  TCHP_BJet_Discs_.push_back(jet->bDiscriminator("trackCountingHighPurBJetTags"));
161  SSVHE_BJet_Discs_.push_back(jet->bDiscriminator("simpleSecondaryVertexHighEffBJetTags"));
162  SSVHP_BJet_Discs_.push_back(jet->bDiscriminator("simpleSecondaryVertexHighPurBJetTags"));
163  CSV_BJet_Discs_.push_back(jet->bDiscriminator("combinedSecondaryVertexBJetTags"));
164  CSVMVA_BJet_Discs_.push_back(jet->bDiscriminator("combinedSecondaryVertexMVABJetTags"));
165  SM_BJet_Discs_.push_back(jet->bDiscriminator("softMuonBJetTags"));
166 
167  pts_.push_back(jet->pt());
168  EtSin2Thetas_.push_back(jet->et() * pow(sin(jet->theta()), 2));
169  thetas_.push_back((jet->theta() > M_PI / 2.) ? (M_PI - jet->theta()) : jet->theta());
170 
171  fourVectors.push_back(jet->p4());
172 
173  if (jet->bDiscriminator("trackCountingHighEffBJetTags") > 3.3)
174  ++TCHE_Bjets_;
175  if (jet->bDiscriminator("trackCountingHighPurBJetTags") > 3.41)
176  ++TCHP_Bjets_;
177  if (jet->bDiscriminator("simpleSecondaryVertexHighEffBJetTags") > 1.74)
178  ++SSVHE_Bjets_;
179  if (jet->bDiscriminator("simpleSecondaryVertexHighPurBJetTags") > 2.0)
180  ++SSVHP_Bjets_;
181  if (jet->bDiscriminator("combinedSecondaryVertexBJetTags") > 0.75)
182  ++CSV_Bjets_;
183  if (jet->bDiscriminator("combinedSecondaryVertexMVABJetTags") > 0.75)
184  ++CSVMVA_Bjets_;
185  if (jet->bDiscriminator("softMuonBJetTags") > 0.3)
186  ++SM_Bjets_;
187 
188  if (jet->nConstituents() > 0) {
189  //if( jet->daughterPtr(0).productGetter()->getIt(jet->daughterPtr(0).id()) != 0 ){
190  etaetaMoments_.push_back(jet->etaetaMoment());
191  etaphiMoments_.push_back(std::abs(jet->etaphiMoment()));
192  phiphiMoments_.push_back(jet->phiphiMoment());
193 
194  jets_etaetaMoment_ += jet->etaetaMoment();
195  jets_etaphiMoment_ += std::abs(jet->etaphiMoment());
196  jets_phiphiMoment_ += jet->phiphiMoment();
197 
198  etaetaMomentsLogEt_.push_back(jet->etaetaMoment() * log(jet->et()));
199  etaphiMomentsLogEt_.push_back(std::abs(jet->etaphiMoment()) * log(jet->et()));
200  phiphiMomentsLogEt_.push_back(jet->phiphiMoment() * log(jet->et()));
201 
202  jets_etaetaMomentLogEt_ += jet->etaetaMoment() * log(jet->et());
203  jets_etaphiMomentLogEt_ += std::abs(jet->etaphiMoment()) * log(jet->et());
204  jets_phiphiMomentLogEt_ += jet->phiphiMoment() * log(jet->et());
205 
206  if (jet->bDiscriminator("trackCountingHighEffBJetTags") < 3.3 &&
207  jet->bDiscriminator("trackCountingHighPurBJetTags") < 1.93 &&
208  jet->bDiscriminator("simpleSecondaryVertexHighEffBJetTags") < 1.74 &&
209  jet->bDiscriminator("simpleSecondaryVertexHighPurBJetTags") < 2.0) {
210  ++nonBJets;
211 
212  etaetaMomentsNoB_.push_back(jet->etaetaMoment());
213  etaphiMomentsNoB_.push_back(std::abs(jet->etaphiMoment()));
214  phiphiMomentsNoB_.push_back(jet->phiphiMoment());
215 
216  jets_etaetaMomentNoB_ += jet->etaetaMoment();
217  jets_etaphiMomentNoB_ += std::abs(jet->etaphiMoment());
218  jets_phiphiMomentNoB_ += jet->phiphiMoment();
219  }
220  //}
221  }
222 
223  for (std::vector<pat::Jet>::const_iterator jet2 = jet + 1; jet2 != jets.end(); ++jet2) {
224  unsigned short comb2A[2] = {(unsigned short)(jet - jets.begin()), (unsigned short)(jet2 - jets.begin())};
225  std::vector<unsigned short> comb2(comb2A, comb2A + sizeof(comb2A) / sizeof(unsigned short));
226  dRs.push_back(std::make_pair(deltaR(jet->phi(), jet->eta(), jet2->phi(), jet2->eta()), comb2));
227 
228  for (std::vector<pat::Jet>::const_iterator jet3 = jet2 + 1; jet3 != jets.end(); ++jet3) {
229  unsigned short comb3A[3] = {(unsigned short)(jet - jets.begin()),
230  (unsigned short)(jet2 - jets.begin()),
231  (unsigned short)(jet3 - jets.begin())};
232  std::vector<unsigned short> comb3(comb3A, comb3A + sizeof(comb3A) / sizeof(unsigned short));
233  double dR1 = deltaR(jet->eta(), jet->phi(), jet2->eta(), jet2->phi());
234  double dR2 = deltaR(jet->eta(), jet->phi(), jet3->eta(), jet3->phi());
235  double dR3 = deltaR(jet2->eta(), jet2->phi(), jet3->eta(), jet3->phi());
236  dRs3Jets.push_back(std::make_pair(dR1 + dR2 + dR3, comb3));
237  M3s.push_back(std::make_pair((jet->p4() + jet2->p4() + jet3->p4()).pt(), comb3));
238  }
239  }
240 
241  totalSystem += jet->p4();
242  }
243 
244  ROOT::Math::Boost CoMBoostTotal(totalSystem.BoostToCM());
245  std::vector<reco::LeafCandidate> boostedJets;
246 
247  for (std::vector<pat::Jet>::const_iterator jet = jets.begin(); jet != jets.end(); ++jet) {
248  boostedJets.push_back(
249  reco::LeafCandidate(jet->charge(), CoMBoostTotal(jet->p4()), jet->vertex(), jet->pdgId(), jet->status(), true));
250  }
251 
252  EtSin2Theta3jet_ /= ((double)(jets.size() - 3));
253  theta3jet_ /= ((double)(jets.size() - 3));
254  sinTheta3jet_ /= ((double)(jets.size() - 3));
255 
256  jets_etaetaMoment_ /= (double)jets.size();
257  jets_etaphiMoment_ /= (double)jets.size();
258  jets_phiphiMoment_ /= (double)jets.size();
259 
260  jets_etaetaMomentLogEt_ /= (double)jets.size();
261  jets_etaphiMomentLogEt_ /= (double)jets.size();
262  jets_phiphiMomentLogEt_ /= (double)jets.size();
263 
264  if (nonBJets) {
265  jets_etaetaMomentNoB_ /= (double)nonBJets;
266  jets_etaphiMomentNoB_ /= (double)nonBJets;
267  jets_phiphiMomentNoB_ /= (double)nonBJets;
268  }
269 
270  for (unsigned short i = 0; i < etaetaMoments_.size(); ++i) {
274 
278  }
279 
280  std::sort(dRs.begin(), dRs.end());
281  std::sort(dRs3Jets.begin(), dRs3Jets.end());
282 
283  for (std::vector<std::pair<double, std::vector<unsigned short> > >::const_iterator dR = dRs.begin(); dR != dRs.end();
284  ++dR) {
285  dR_.push_back(dR->first);
286  dRMass_.push_back((jets.at(dR->second.at(0)).p4() + jets.at(dR->second.at(1)).p4()).mass());
287 
288  ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > wHypo =
289  jets.at(dR->second.at(0)).p4() + jets.at(dR->second.at(1)).p4();
290  TLorentzVector wHypoHelper(wHypo.Px(), wHypo.Py(), wHypo.Pz(), wHypo.E());
291  wHypoHelper.SetVectM(TVector3(wHypo.Px(), wHypo.Py(), wHypo.Pz()), 80.4);
292  wHypo.SetPxPyPzE(wHypoHelper.Px(), wHypoHelper.Py(), wHypoHelper.Pz(), wHypoHelper.E());
293  ROOT::Math::Boost CoMBoostWHypo(wHypo.BoostToCM());
294  dRAngle_.push_back(ROOT::Math::VectorUtil::Angle(CoMBoostWHypo(jets.at(dR->second.at(0)).p4()),
295  CoMBoostWHypo(jets.at(dR->second.at(1)).p4())));
296  }
297 
298  for (std::vector<std::pair<double, std::vector<unsigned short> > >::const_iterator dR = dRs3Jets.begin();
299  dR != dRs3Jets.end();
300  ++dR) {
301  dR3Jets_.push_back(dR->first);
302  dR3JetsMass_.push_back(
303  (jets.at(dR->second.at(0)).p4() + jets.at(dR->second.at(1)).p4() + jets.at(dR->second.at(2)).p4()).mass());
304  }
305 
306  std::vector<std::pair<double, unsigned short> > massDiff2W;
307 
308  for (std::vector<double>::const_iterator mass = dRMass_.begin(); mass != dRMass_.end(); ++mass) {
309  massDiff2W.push_back(std::make_pair(std::abs((*mass) - 80.4), mass - dRMass_.begin()));
310  }
311 
312  std::sort(massDiff2W.begin(), massDiff2W.end());
313 
314  //std::vector<std::pair< double, std::vector<unsigned short> > > massDiff;
315 
316  for (std::vector<std::pair<double, unsigned short> >::const_iterator i = massDiff2W.begin(); i != massDiff2W.end();
317  ++i) {
318  unsigned int mass1 = i->second;
319  for (std::vector<std::pair<double, unsigned short> >::const_iterator j = i + 1; j != massDiff2W.end(); ++j) {
320  unsigned int mass2 = j->second;
321  if (dRs.at(mass1).second.at(0) != dRs.at(mass2).second.at(0) &&
322  dRs.at(mass1).second.at(0) != dRs.at(mass2).second.at(1) &&
323  dRs.at(mass1).second.at(1) != dRs.at(mass2).second.at(0) &&
324  dRs.at(mass1).second.at(1) != dRs.at(mass2).second.at(1)) {
325  //unsigned short combA[2] = { mass1 , mass2 };
326  //std::vector<unsigned short> comb(combA, combA + sizeof(combA) / sizeof(unsigned short));
327  //massDiff.push_back(std::make_pair(std::abs(dRMass_.at(mass1)-dRMass_.at(mass2)), comb));
328  massDiffMWCands_.push_back(std::abs(dRMass_.at(mass1) - dRMass_.at(mass2)));
329  }
330  }
331  if (massDiffMWCands_.size() > 20)
332  break;
333  }
334 
335  //std::sort(massDiff.begin(), massDiff.end());
336  /*
337  for(std::vector<std::pair< double, std::vector<unsigned short> > >::const_iterator diff = massDiff.begin(); diff != massDiff.end() ; ++diff){
338  std::cout << "| " << dRMass_.at(diff->second.at(0)) << "(" << diff->second.at(0)
339  << ") - " << dRMass_.at(diff->second.at(1)) << "(" << diff->second.at(1)
340  << ") | = " << diff->first << std::endl;
341  }
342  std::cout << "---------------------------------------------" << std::endl;
343  */
344 
349  std::sort(CSV_BJet_Discs_.begin(), CSV_BJet_Discs_.end());
351  std::sort(SM_BJet_Discs_.begin(), SM_BJet_Discs_.end());
352 
353  std::sort(etaetaMoments_.begin(), etaetaMoments_.end());
354  std::sort(etaphiMoments_.begin(), etaphiMoments_.end());
355  std::sort(phiphiMoments_.begin(), phiphiMoments_.end());
356 
360 
364 
368 
372 
373  std::sort(M3s.begin(), M3s.end());
374  M3_ = (jets.at((M3s.back().second.at(0))).p4() + jets.at((M3s.back().second.at(1))).p4() +
375  jets.at((M3s.back().second.at(2))).p4())
376  .mass();
377 
378  sqrt_s_ = totalSystem.mass();
379 
380  for (std::vector<ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > >::const_iterator jet =
381  fourVectors.begin();
382  jet != fourVectors.end();
383  ++jet) {
384  ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > boostedJet = CoMBoostTotal(*jet);
385  if (jet - fourVectors.begin() > 1) {
386  thetaStar3jet_ += (boostedJet.Theta() > M_PI / 2.) ? (M_PI - boostedJet.Theta()) : boostedJet.Theta();
387  sinThetaStar3jet_ += sin(boostedJet.Theta());
388  EtStar3jet_ += jet->Et() * pow(sin(boostedJet.Theta()), 2);
389  }
390  thetaStars_.push_back((boostedJet.Theta() > M_PI / 2.) ? (M_PI - boostedJet.Theta()) : boostedJet.Theta());
391  EtStars_.push_back(jet->Et() * pow(sin(boostedJet.Theta()), 2));
392  }
393 
394  theta3jet_ /= (double)fourVectors.size() - 2.;
395  sinTheta3jet_ /= (double)fourVectors.size() - 2.;
396  thetaStar3jet_ /= (double)fourVectors.size() - 2.;
397  sinThetaStar3jet_ /= (double)fourVectors.size() - 2.;
398 
400 
401  aplanarity_ = eventshape.aplanarity();
402  sphericity_ = eventshape.sphericity();
403  circularity_ = eventshape.circularity();
404  isotropy_ = eventshape.isotropy();
405  C_ = eventshape.C();
406  D_ = eventshape.D();
407 
408  EventShapeVariables eventshapeAll(makeVecForEventShape(jets, false));
409 
410  aplanarityAll_ = eventshapeAll.aplanarity();
411  sphericityAll_ = eventshapeAll.sphericity();
412  circularityAll_ = eventshapeAll.circularity();
413  isotropyAll_ = eventshapeAll.isotropy();
414  CAll_ = eventshapeAll.C();
415  DAll_ = eventshapeAll.D();
416 
417  EventShapeVariables eventshapeAllCMS(makeVecForEventShape(jets, false, CoMBoostTotal));
418 
419  aplanarityAllCMS_ = eventshapeAllCMS.aplanarity();
420  sphericityAllCMS_ = eventshapeAllCMS.sphericity();
421  circularityAllCMS_ = eventshapeAllCMS.circularity();
422  isotropyAllCMS_ = eventshapeAllCMS.isotropy();
423  CAllCMS_ = eventshapeAllCMS.C();
424  DAllCMS_ = eventshapeAllCMS.D();
425 
426  Thrust thrustAlgo(jets.begin(), jets.end());
427  thrust_ = thrustAlgo.thrust();
428 
429  Thrust thrustAlgoCMS(boostedJets.begin(), boostedJets.end());
430  thrustCMS_ = thrustAlgoCMS.thrust();
431 }
432 
std::vector< double > etaetaMoments_
std::vector< double > TCHP_BJet_Discs_
std::vector< double > dR_
std::vector< double > massDiffMWCands_
std::vector< double > etaphiMoments_
std::vector< double > phiphiMomentsMoment_
Definition: CLHEP.h:16
std::vector< double > phiphiMomentsLogEt_
Class for the calculation of several event shape variables.
std::vector< double > etaphiMomentsLogEt_
std::vector< double > TCHE_BJet_Discs_
std::vector< double > phiphiMomentsNoB_
std::vector< double > dR3JetsMass_
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
std::vector< double > EtStars_
std::vector< double > etaetaMomentsMomentLogEt_
double pt(unsigned short i) const
constexpr int pow(int x)
Definition: conifer.h:24
std::vector< double > dR3Jets_
std::vector< double > etaphiMomentsMomentLogEt_
std::vector< double > etaetaMomentsLogEt_
std::vector< math::XYZVector > makeVecForEventShape(std::vector< pat::Jet > jets, bool only6Jets=true, ROOT::Math::Boost boost=ROOT::Math::Boost(0., 0., 0.))
std::vector< double > SM_BJet_Discs_
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
std::vector< double > EtSin2Thetas_
std::vector< double > etaetaMomentsNoB_
#define M_PI
std::vector< double > thetas_
std::vector< double > pts_
Definition: Thrust.h:38
std::vector< double > dRAngle_
std::vector< double > thetaStars_
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:31
double isotropy(const unsigned int &numberOfSteps=1000) const
std::vector< double > SSVHP_BJet_Discs_
std::vector< double > CSV_BJet_Discs_
double circularity(const unsigned int &numberOfSteps=1000) const
std::vector< double > SSVHE_BJet_Discs_
std::vector< double > CSVMVA_BJet_Discs_
std::vector< double > etaphiMomentsNoB_
std::vector< double > etaphiMomentsMoment_
std::vector< double > etaetaMomentsMoment_
std::vector< double > phiphiMoments_
std::vector< double > phiphiMomentsMomentLogEt_
math::PtEtaPhiELorentzVectorF LorentzVector
std::vector< double > dRMass_