257 size_t iNumPi0PFO = xTau->
nPi0PFOs();
263 Error(
"TauAnalysisTools::createPi0Vectors",
"Failed to retrieve panTauDetail decay mode.");
275 vPi0s.push_back(xPfo1->
p4() + xPfo2->
p4());
278 double dNewMomentum = std::sqrt(vPi0s[0].E() * vPi0s[0].E() - fMassPi0Squared);
279 vPi0s[0].SetPxPyPzE(vPi0s[0].Vect().Unit().Px() * dNewMomentum,
280 vPi0s[0].Vect().Unit().Py() * dNewMomentum,
281 vPi0s[0].Vect().Unit().Pz() * dNewMomentum,
289 vPi0s.push_back(xPfo->
p4());
292 double dNewMomentum = std::sqrt(vPi0s[0].E() / 2 * vPi0s[0].E() / 2 - vPi0s[0].M() / 2. * vPi0s[0].M() / 2.);
293 vPi0s[0].SetVectM(vPi0s[0].Vect() * (dNewMomentum / vPi0s[0].
P()), vPi0s[0].M() / 2.);
296 vPi0s.push_back(vPi0s[0]);
301 for (
size_t iPFO = 0; iPFO < iNumPi0PFO; iPFO++)
303 vPi0s.push_back(xTau->
pi0PFO(iPFO)->
p4());
312 correctedPi0s.clear();
318 Error(
"TauAnalysisTools::correctedPi0Vectors",
"Failed to retrieve panTauDetail decay mode.");
323 std::vector<TLorentzVector> vPi0s;
328 TLorentzVector Sum_vPi0s;
329 for(
unsigned int i = 0; i < vPi0s.size() ; i++){
330 Sum_vPi0s += vPi0s[i];
334 TLorentzVector Sum_ChrgPFOP4;
336 Sum_ChrgPFOP4 += track->p4();
340 TLorentzVector FinalCalibP4 = xTau->
p4();
343 double px = FinalCalibP4.Px() - Sum_ChrgPFOP4.Px();
344 double py = FinalCalibP4.Py() - Sum_ChrgPFOP4.Py();
345 double pz = FinalCalibP4.Pz() - Sum_ChrgPFOP4.Pz();
347 double p_correctedPi0s = std::sqrt( std::pow(px,2.) + std::pow(py,2.) + std::pow(pz,2.) );
348 double p_vPi0s = Sum_vPi0s.P();
351 double X = p_correctedPi0s/p_vPi0s;
354 double px_scaled, py_scaled, pz_scaled, e;
356 for(
unsigned int i = 0; i < vPi0s.size() ; i++){
357 px_scaled = vPi0s[i].Px() * X;
358 py_scaled = vPi0s[i].Py() * X;
359 pz_scaled = vPi0s[i].Pz() * X;
360 e = std::sqrt( std::pow(px_scaled,2.) + std::pow(py_scaled,2.) + std::pow(pz_scaled,2.) + std::pow(mPi0,2.) );
363 TLorentzVector P4_correctedPi0s;
364 P4_correctedPi0s.SetPxPyPzE(px_scaled,py_scaled,pz_scaled,e);
365 correctedPi0s.push_back(P4_correctedPi0s);
368 correctedPi0s = vPi0s;
375 TF1 DeltaRdist(
"DeltaRdist",
"pol3", 0, 67500);
376 DeltaRdist.SetParameter(0, 0.07924);
377 DeltaRdist.SetParameter(1, -2.078/1000000.);
378 DeltaRdist.SetParameter(2, 2.619/100000000000.);
379 DeltaRdist.SetParameter(3, -1.238/10000000000000000.);
382 TLorentzVector SumPi0_P4;
383 for(
unsigned int i = 0 ; i < correctedPi0s.size() ; i++){
384 SumPi0_P4 += correctedPi0s[i];
387 float SumPi0_pt = SumPi0_P4.Pt();
391 if(SumPi0_pt >= 67500){
394 deltaR = DeltaRdist.Eval(SumPi0_pt);
397 TLorentzVector correctedPi0_0, correctedPi0_1;
398 correctedPi0_0.SetPtEtaPhiM( correctedPi0s[0].Pt()/cos(0.5*
deltaR/std::sqrt(2.0)), correctedPi0s[0].
Eta()+0.5*
deltaR/std::sqrt(2.0), correctedPi0s[0].
Phi()+0.5*
deltaR/std::sqrt(2.0), correctedPi0s[0].M() );
399 correctedPi0_1.SetPtEtaPhiM( correctedPi0s[1].Pt()/cos(0.5*
deltaR/std::sqrt(2.0)), correctedPi0s[1].
Eta()-0.5*
deltaR/std::sqrt(2.0), correctedPi0s[1].
Phi()-0.5*
deltaR/std::sqrt(2.0), correctedPi0s[1].M() );
401 std::vector<TLorentzVector> AngleCorrectedPi0s;
402 AngleCorrectedPi0s.push_back(correctedPi0_0);
403 AngleCorrectedPi0s.push_back(correctedPi0_1);
406 TLorentzVector PionCluster_angleCorrected = AngleCorrectedPi0s[0]+AngleCorrectedPi0s[1];
408 double dNewMomentum = std::sqrt(PionCluster_angleCorrected.E()/2. * PionCluster_angleCorrected.E()/2. - PionCluster_angleCorrected.M() / 2. * PionCluster_angleCorrected.M() / 2.);
409 correctedPi0s[0].SetVectM(PionCluster_angleCorrected.Vect() * (dNewMomentum / PionCluster_angleCorrected.P()), PionCluster_angleCorrected.M() / 2.);
410 correctedPi0s[1] = correctedPi0s[0];
415 TauP4 += track->p4();
418 for(
unsigned int iPi0=0; iPi0 < correctedPi0s.size(); iPi0++) {
419 TauP4 += correctedPi0s[iPi0];
479 std::vector<const xAOD::TauJet*> taus_murm_vec(taus_muonRM->
begin(), taus_muonRM->
end());
480 std::vector<const xAOD::TauJet*> taus_combined;
482 originalTauJetAcc (
"originalTauJet");
484 auto replacement_itr = std::find_if(taus_murm_vec.begin(), taus_murm_vec.end(),
486 auto link_to_ori_tau = originalTauJetAcc (*tau_murm);
487 if (!link_to_ori_tau.isValid()) { return false; }
488 if (*link_to_ori_tau == tau_std){
return true; }
492 if (replacement_itr == taus_murm_vec.end()) { taus_combined.push_back(tau_std); }
496 taus_combined.push_back(*replacement_itr);
497 taus_murm_vec.erase(replacement_itr);
503 assert(taus_murm_vec.empty());
504 return taus_combined;
A number of constexpr particle constants to avoid hardcoding them directly in various places.
bool isElectron() const
Whether the particle is an electron (or positron)
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
bool isTau() const
Whether the particle is a tau (or antitau)
bool isMuon() const
Whether the particle is a muon (or antimuon)
constexpr double piZeroMassInMeV
the mass of the pi zero (in MeV)