`
Develop a domain-specific language capable of describing the contents of an LHC analysis in a standard and unambiguous way.
HSF Gitter forum for discussions: ADL
ADL-related projects/discussions in Les Houches:
Parsing/interpreting tools for the current ADL:
Members: Sezen, Wolfgang (, Harrison)
Find and visualize overlaps in a model-independent way, without generating events. Directly sample the event selection. Useful for analysis design phase, or quick comparisons within experiments (e.g. Run2 CMS SUSY pMSSM combination)
Members: Sezen, (Harrison, Gokhan as parser developers)
The ADL file and the external function fMtautau are given below for the CMS soft dilepton analysis considered in the LH19 recasting comparison
info analysis title "Search for new physics in events with two soft oppositely charged leptons and missing transverse momentum in proton-proton collisions at sqrts = 13 TeV " experiment CMS id SUS-16-048 publication Phys. Lett. B 782 (2018) 440 sqrtS 13.0 lumi 35.9 arXiv 1801.01846 hepdata doi 10.1016/j.physletb.2018.05.062 # ANALYSIS OBJECTS object muons take Muon select pT [] 3.5 30 select abs(eta) < 2.4 # ID/iso efficiencies already folded into efficiencies provided by CMS: # https://twiki.cern.ch/twiki/bin/view/CMSPublic/SUSMoriond2017ObjectsEfficiency object electrons take Electron select pT [] 3.5 30 select abs(eta) < 2.5 # ID/iso efficiencies already folded into efficiencies provided by CMS: # https://twiki.cern.ch/twiki/bin/view/CMSPublic/SUSMoriond2017ObjectsEfficiency object leptons take electrons take muons object jets take Jet select pT > 25 select abs(Eta) < 2.4 object bjets take jets select BTag == 1 object MET take MissingET # EVENT VARIABLES define dilepton = leptons[0] + leptons[1] define dielectron = electrons[0] + electrons[1] define dimuon = muons[0] + muons[1] define HT = sum(jets.pT) define MTl1 = sqrt( 2*leptons[0].pT * MET.MET*(1-cos(MET.phi - leptons[0].phi ))) define MTl2 = sqrt( 2*leptons[1].pT * MET.MET*(1-cos(MET.phi - leptons[1].phi ))) define Mtautau = fMtautau(leptons[0], leptons[1], MET) # EVENT SELECTION # Dimuon selection # This selection follows the cutflow table in LH recasting twiki # https://phystev.cnrs.fr/wiki/_detail/2019:groups:tools:cms-sus-16-048_cutflow.png?id=2019%3Agroups%3Atools%3Arecastcmp region CharginoDimuonPresel weight xsec 0.688016 select size(muons) == 2 select muons[0].pT [] 5 30 select muons[0].charge * muons[1].charge == -1 select dimuon.pT > 3 select dimuon.mass [] 4 50 select dimuon.mass ][ 9 10.5 select MET.MET [] 125 200 weight trigger 0.65 select size(jets) >= 0 select size(jets) >= 1 select HT > 100 select (MET.MET / HT) [] 0.6 1.4 select size(bjets) == 0 select Mtautau ][ 0 160 select MTl1 < 70 and MTl2 < 70 # Additional selections from the analysis (not included in the recast study) # Dilepton preselection #region DileptonPresel # This selection follows Table 1 in the paper # (for the time being, except for the isolation criteria) # select size(leptons) == 2 # select size(electrons) == 2 or size(muons) == 2 # select leptons[0].charge * leptons[1].charge == -1 # select leptons[0].pT > 5 # select leptons[1].pT > 5 # select size(bjets) == 0 # select size(electrons) == 2 or size(muons) == 2 ? mass(dilepton) [] 4 9 : mass(dilepton) [] 10.5 50 # select dilepton.pT > 3 # select size(muons) == 2 ? MET.pT > 125 : MET.pT > 200 # select MET.pT / HT [] 0.6 1.4 # select HT > 100 # select MTl1 < 70 and MTl2 < 70 # Dielectron selection #region CharginoDielectronPresel # This selection follows the cutflow table in the twiki # select size(electrons) == 2 # select electrons[0].pT [] 5 30 # select electrons[0].charge * electrons[1].charge == -1 # select dielectron.pT > 3 # select dielectron.mass [] 4 9 or dielectron.mass [] 10.5 50 # reject dielectron.mass [] 9 10.5 # select MET.pT [] 125 200 # select MET.pT / HT [] 0.6 1.4 # select size(jets) >= 1 # select HT > 100 # select size(bjets) == 0 # reject Mtautau [] 0 160 # select MTl1 < 70 and MTl2 < 70 # Stop dimuon preselection #region StopDimuonPresel # # This selection follows the cutflow table in the twiki # select size(muons) == 2 # select muons[0].pT [] 5 30 # select muons[0].charge * muons[1].charge == -1 # select dimuon.pT > 3 # select dimuon.mass [] 4 50 # reject dimuon.mass [] 9 10.5 # select MET.pT [] 125 200 # select MET.pT / HT [] 0.6 1.4 # select size(jets) >= 1 # select HT > 100 # select size(bjets) == 0 # reject Mtautau [] 0 160
// Find m(tautau) for boosted taus with alligned decay products. // For leptons l1, l2 and neutrino(s) nu1, nu2 coming from tau1, tau2 decays, // collinearity implies p(nu1) = a * p(l1), p(nu2) = b * p(l2) // 1) Use the constraint from MET to find a and b // 2) Compute nu and tau momenta // 3) Find the ditau invariant mass // Suggested in arXiv:1401.1235 , used in CMS SUS-16-048 // Coded by S. Sekmen double fMtautau(TLorentzVector& lep1, TLorentzVector& lep2, TLorentzVector& met){ double px1 = lep1.Px(); double py1 = lep1.Py(); double px2 = lep2.Px(); double py2 = lep2.Py(); double metx = met.Px(); double mety = met.Py(); // Compute the solution of the two coupled equations: // metx = a * px1 + b * px2 // mety = a * py1 + b * py2 // for a and b: double a = (metx * py2 - mety * px2) / (px1 * py2 - py1 * px2); double b = (metx * py1 - mety * px1) / (px2 * py1 - py2 * px1); // Neutrino vectors TLorentzVector nu1, nu2; nu1.SetPxPyPzE(a*px1, a*py1, 0., sqrt(a*px1 * a*px1 + a*py1 * a*py1)); nu2.SetPxPyPzE(b*px2, b*py2, 0., sqrt(b*px2 * b*px2 + b*py2 * b*py2)); // Reconstruct the taus from leptons and neutrinos TLorentzVector tau1 = lep1 + nu1; TLorentzVector tau2 = lep2 + nu2; // Reconstruct the Z from Z --> tau tau TLorentzVector Z = tau1 + tau2; return Z.M(); }