This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
2015:groups:tools:lhaad [2015/06/18 12:17] daniel.schmeier |
2015:groups:tools:lhaad [2016/02/26 10:18] daniel.schmeier |
||
---|---|---|---|
Line 1: | Line 1: | ||
===== Les Houches Analysis Description Accord ===== | ===== Les Houches Analysis Description Accord ===== | ||
- | People: S. Sekmen, H. Prosper, G. Unel, B. Fuks, J. Tattersall, D. Schmeier, C. Pollard, S. Kraml, S. Kulkarni, D. Morse, D. Majumder, N. Desai, D. Sengupta. N. De Filippis, J. Sonneveld ... etc. (add your name if interested) | + | People: S. Sekmen, H. Prosper, G. Unel, B. Fuks, J. Tattersall, D. Schmeier, C. Pollard, S. Kraml, S. Kulkarni, D. Morse, D. Majumder, N. Desai, D. Sengupta. N. De Filippis, J. Sonneveld, E. Conte, Ph. Gras ... etc. (add your name if interested) |
+ | |||
+ | //If you are interested in contributing please subscribe to the [[https://e-groups.cern.ch/e-groups/EgroupsSearch.do?searchValue=houches-2015-topics-tools-lhada|Mailing list]]. You will be asked to log in with your CERN account. If you don't have a CERN account, please fill [[https://account.cern.ch/account/Externals/RegisterAccount.aspx|this form]] to create a lightweight account.// | ||
Goal: Prepare an SLHA-like easy to read and write accord for describing the flow of an LHC analysis. | Goal: Prepare an SLHA-like easy to read and write accord for describing the flow of an LHC analysis. | ||
Line 7: | Line 9: | ||
First proposal made for a generic structure. CM and MA authors will try to implement a single lepton stop search. | First proposal made for a generic structure. CM and MA authors will try to implement a single lepton stop search. | ||
- | Proposal by Daniel Schmeier & Jamie Tattersall | + | Proposal by Daniel Schmeier & Jamie Tattersall [[2015:groups:tools:lhaad:proposal1]] |
- | + | ||
- | <code autoconf> | + | |
- | # These are the input objects for the analysis code. | + | |
- | # Syntax: | + | |
- | # name type (see below) | + | |
- | # A well formulated comment behind each object should unambiguously state what this object is | + | |
- | # such that a _human_ knows what this object corresponds in his/her code | + | |
- | + | ||
- | BLOCK ANALYSISINPUT | + | |
- | jets l<jet> # p4,pt>20 alg=anti-kt R=0.4 b_prob,eff=(60,70,80) | + | |
- | elecs l<el> # loose, isotags 1=tracks,dr0.2, 2=... | + | |
- | muons l<mu> # | + | |
- | etmiss v # | + | |
- | + | ||
- | + | ||
- | # All functions that have to be used later must be defined here | + | |
- | # Syntax: Function_name input_type_1 input_type_2 input_type_3 ... output_type | + | |
- | # Rules: | + | |
- | # - input_types and output_type can be | + | |
- | # - 's' for scalars/numbers, | + | |
- | # - 'v' for LorentzVectors, | + | |
- | # - 'b' for booleans | + | |
- | # - 'c' for characters/strings | + | |
- | # - any of the objects defined in the 'object' block | + | |
- | # - l<type> to denote a list of objects of common type <type>. | + | |
- | # - People will comment with a link to a resource where the exact definition | + | |
- | # of that function can be found, in text definiton and a working example in a programming language of choice | + | |
- | # - 2 functions can have the same name if they have different input types | + | |
- | + | ||
- | BLOCK ANALYSISFUNCTIONS | + | |
- | mT v v s # https://twiki.cern.ch/twiki/bin/view/XXPublic/LHA/Definitions/m_T | + | |
- | amT2 v v s # https://twiki.cern.ch/twiki/bin/view/XXPublic/LHA/Definitions/am_T2 | + | |
- | mT2tau v v s # https://twiki.cern.ch/twiki/bin/view/XXPublic/LHA/Definitions/m_T2_tau | + | |
- | mHadTop ? ? ? # https://twiki.cern.ch/twiki/bin/view/XXPublic/LHA/Definitions/m_had_top | + | |
- | HTMissSig ? ? ? # https://twiki.cern.ch/twiki/bin/view/XXPublic/LHA/Definitions/HTmisssig | + | |
- | + | ||
- | # s denotes the working point efficiency | + | |
- | filter_no_bjets l<jet> s l<jet> # https://twiki.cern.ch/twiki/bin/view/XXPublic/BJetDefinitionSource | + | |
- | filter_bjets l<jet> s l<jet> # https://twiki.cern.ch/twiki/bin/view/XXPublic/BJetDefinitionSource | + | |
- | filter_taujets l<jet> s l<jet> # https://twiki.cern.ch/twiki/bin/view/XXPublic/TauJetDefinitionSource | + | |
- | filter_medium_elec l<elec> l<elec> # https://twiki.cern.ch/twiki/bin/view/XXPublic/ElectronIDSource | + | |
- | filter_tight_elec l<elec> l<elec> # https://twiki.cern.ch/twiki/bin/view/XXPublic/ElectronIDSource | + | |
- | + | ||
- | # input whichsource dr ptmin maxval output | + | |
- | filter_iso_abs l<el> s s s s l<el> # https://twiki.cern.ch/twiki/bin/view/XXPublic/Definitions/Isolation | + | |
- | filter_iso_rel l<el> s s s s l<el> # https://twiki.cern.ch/twiki/bin/view/XXPublic/Definitions/Isolation | + | |
- | filter_iso_abs l<mu> s s s s l<mu> # https://twiki.cern.ch/twiki/bin/view/XXPublic/Definitions/Isolation | + | |
- | filter_iso_rel l<mu> s s s s l<mu> # https://twiki.cern.ch/twiki/bin/view/XXPublic/Definitions/Isolation | + | |
- | + | ||
- | trigger l<el> l<mu> l<jet> v # https://twiki.cern.ch/twiki/bin/view/XXPublic/Definitions/SingleLepTrigger + EtMissTrigger | + | |
- | dataquality l<jet> v # Tuned to a constant efficiency of 99.7%, see here: https://twiki.cern.ch/twiki/bin/view/XXPublic/EventCleaning/ | + | |
- | + | ||
- | # These functions are like normal functions, but as these are always needed one might find a | + | |
- | # way to globally use them without continuously redefining them | + | |
- | sum s s s | + | |
- | diff s s s | + | |
- | prod s s s | + | |
- | quot s s s | + | |
- | pow s s s | + | |
- | random s | + | |
- | + | ||
- | overlap_removal l<v> l<v> s v | + | |
- | delta_phi v v s | + | |
- | delta_r v v s | + | |
- | ptmin l<v> s l<v> | + | |
- | etarange l<v> s s l<v> | + | |
- | combine l<v> l<v> l<v> | + | |
- | take_leading_n l<v> s l<v> | + | |
- | + | ||
- | + | ||
- | + | ||
- | # The Preselection block only trims existing objects or define new objects by applying functions on existing ones. | + | |
- | # Syntax: new_object function parameter1 parameter2 ... | + | |
- | # Rules: | + | |
- | # - each function must be defined in the function block | + | |
- | # - parameters must match the parameter type definition in the function block | + | |
- | # - parameters must be numbers, strings, objects that have been defined in previous lines or in the 'object' block | + | |
- | # - Every TLorentzVector function "Double_t Fun() const" can be accessed by v.fun (eg. v.m, v.pt, v.px, v.costheta | + | |
- | # | + | |
- | # - With vectors one can do | + | |
- | # vectors.n returns size | + | |
- | # vectors.3 returns the third(!) object in the list | + | |
- | # vectors.8 returns a zero object if vectors contains less than 8 entries | + | |
- | # - Cut-Logic should make sure that the last rule does not produce rubbish (see mT example) | + | |
- | # - objects and functions can have the same name as the syntax does clearly distinguish between the two | + | |
- | + | ||
- | BLOCK ANALYSISPRESELECTION | + | |
- | # Kinematic Cuts on the loose baseline and the signal objects | + | |
- | jets ptmin jets 20 | + | |
- | jets etarange jets -2.5 2.5 | + | |
- | elecs_l ptmin elecs 7 | + | |
- | elecs_l etarange elecs_l -2.47 2.47 | + | |
- | elecs_m filter_elecs_m elecs_l | + | |
- | elecs_m ptmin elecs_m 10 | + | |
- | muons_l ptmin muons 6 | + | |
- | muons_l etarange muons -2.4 2.4 | + | |
- | muons_m ptmin muons 10 | + | |
- | + | ||
- | # overlap removals between bjets, nonbjets and leptons | + | |
- | nob_jets filter_no_bjets jets 70 | + | |
- | b_jets filter_bjets jets 70 | + | |
- | no_bjets overlap_removal no_bjets elecs_m 0.2 | + | |
- | elecs_m overlap_removal elecs_m no_bjets 0.4 | + | |
- | elecs_m overlap_removal elecs_m bjets 0.2 | + | |
- | elecs_m overlap_removal elecs_m tau_jets 0.2 | + | |
- | muons_m overlap_removal muons_m jets 0.4 | + | |
- | tau_jets_l filter_taujets "loose" jets | + | |
- | tau_jets filter_taujets "tight" jets | + | |
- | tau_jets overlap_removal tau_jets elecs_l 0.2 | + | |
- | + | ||
- | # choose signal leptons which have to pass isolation conditions | + | |
- | elecs_t ptmin elecs_m 25 | + | |
- | elecs_t filter_tight_elec elecs_t | + | |
- | elecs_t filter_iso_rel "tracks" 0.2 0.5 0.1 | + | |
- | muons_m filter_iso_abs "tracks" 0.2 0.5 1.8 | + | |
- | + | ||
- | # combine electrons and muons to leptons | + | |
- | leptons_l combine muons_l muons_l | + | |
- | leptons_l ptmin leptons_l 10 | + | |
- | leptons combine elecs_t muons_m | + | |
- | leptons ptmin leptons 25 | + | |
- | + | ||
- | # find the leading 4 jets | + | |
- | leading_jets take_leading_n jets 4 | + | |
- | leading_bjets filter_bjets leading_jets 70 | + | |
- | + | ||
- | # Calculate some advanced kinematical quantities | + | |
- | HT sum jets.1.pt jets.2.pt | + | |
- | HT sum HT jets.3.pt | + | |
- | HT sum HT jets.4.pt | + | |
- | sqrtHT sqrt HT | + | |
- | EtoverHT quot etmiss.pt sqrtHT | + | |
- | dPhi_j1_miss dPhi jets.1 etmiss | + | |
- | dPhi_j2_miss dPhi jets.2 etmiss | + | |
- | mT mT etmiss leptons.1 | + | |
- | amT2 amT2 ? ? | + | |
- | mHadTop mHadTop ? ? | + | |
- | mT2Tau mT2Tau ? ? | + | |
- | HTMissSig HTMissSig ? ? | + | |
- | + | ||
- | # Find overall efficiency for event | + | |
- | trigeff trigger elecs_l muons_l jets etmiss | + | |
- | cleaningeff dataquality elecs_l muons_l jets etmiss | + | |
- | eventeff prod trigeff cleaningeff | + | |
- | trigrand random | + | |
- | .... | + | |
- | + | ||
- | # CUT blocks contain combinations of boolean statements | + | |
- | # Syntax: | + | |
- | # Variable operator Value | + | |
- | # Rules: | + | |
- | # - operator: <, <=, =, >, >=, != | + | |
- | # - allowed Variables are: | + | |
- | # - input objects | + | |
- | # - everything defined in the preselection block | + | |
- | # - a preceeding CUT can be condidered as a Boolean | + | |
- | # - functions cannot be used here. If the result of a function is needed, it must be evaluated in the preselection block | + | |
- | # - there can be more than one condition in one CUT. Obviously this means that all conditions have to be fulfilled | + | |
- | + | ||
- | CUT common | + | |
- | leptons.n = 1 | + | |
- | leptons_l.n = 1 | + | |
- | jets.n >= 4 | + | |
- | etmiss.pt > 100 | + | |
- | + | ||
- | + | ||
- | CUT leadjets_60to25 | + | |
- | jets.1.pt > 60 | + | |
- | jets.2.pt > 60 | + | |
- | jets.3.pt > 40 | + | |
- | jets.4.pt > 25 | + | |
- | + | ||
- | CUT leadjets_80to25 | + | |
- | jets.1.pt > 80 | + | |
- | jets.2.pt > 60 | + | |
- | jets.3.pt > 40 | + | |
- | jets.4.pt > 25 | + | |
- | + | ||
- | CUT leadjets_100to25 | + | |
- | jets.1.pt > 100 | + | |
- | jets.2.pt > 80 | + | |
- | jets.3.pt > 40 | + | |
- | jets.4.pt > 25 | + | |
- | + | ||
- | CUT large-R-jet | + | |
- | fat_jets.n >= 1 | + | |
- | fat_jets.1.m > 75 | + | |
- | + | ||
- | CUT dPhi12 | + | |
- | fat_jets.n >= 2 | + | |
- | dPhi_j1_miss > 0.8 | + | |
- | dPhi_j2_miss > 0.8 | + | |
- | + | ||
- | CUT tN_diag | + | |
- | common = True | + | |
- | leadjets_60to25 = True | + | |
- | leading_bjets.n >= 1 | + | |
- | mT > 100 | + | |
- | mHadTop > 130 | + | |
- | mHadTop < 205 | + | |
- | taujets.n = 0 | + | |
- | dRbl < 2.5 | + | |
- | EtoverHT > 5 | + | |
- | dPhi12 = True | + | |
- | + | ||
- | + | ||
- | CUT tN_med | + | |
- | common = True | + | |
- | leadjets_80to25 = True | + | |
- | leading_bjets.n >= 1 | + | |
- | etmiss.pt > 200 | + | |
- | mT > 140 | + | |
- | amT2 > 170 | + | |
- | mHadTop > 130 | + | |
- | mHadTop < 195 | + | |
- | HTMissSig > 12.5 | + | |
- | dPhi12 = True | + | |
- | + | ||
- | + | ||
- | CUT tN_high | + | |
- | common = True | + | |
- | leadjets_80to25 = True | + | |
- | leading_bjets.n >= 1 | + | |
- | etmiss.pt > 320 | + | |
- | mT > 200 | + | |
- | amT2 > 170 | + | |
- | mT2tau > 120 | + | |
- | mHadTop > 130 | + | |
- | mHadTop < 250 | + | |
- | dRbl < 3.0 | + | |
- | HtMissSig > 12.5 | + | |
- | + | ||
- | # Cuts are interpreted as "remove event if it fails this". However, some conditions might just | + | |
- | # apply a weight to the event. These can be stated in the following block | + | |
- | # This can also be used for general event re-weighting e.g in the case of jet matching | + | |
- | # Syntax: | + | |
- | # Cut weight | + | |
- | # Rules: | + | |
- | # - Cut must correspond to a CUT block | + | |
- | # - weight must be a scalar, can be a variable though | + | |
- | + | ||
- | BLOCK WEIGHTS | + | |
- | common eventeff | + | |
- | + | ||
- | + | ||
- | + | ||
- | # BINNING blocks simplify exclusive bin-cuts and easily identify orthogonal regios | + | |
- | # Syntax: | + | |
- | # BINNING (somename) | + | |
- | # Cut (name of cut after which binning is applied) | + | |
- | # Parameter (parameter to bin) | + | |
- | # New-Cutname1 bin1_min bin1_max | + | |
- | # New-Cutname2 bin2_min bin2_max | + | |
- | # ... | + | |
- | # Rules: | + | |
- | # - Cut and Parameter must be valid, see above | + | |
- | # - New-Cutname1 is a new Cut just like it was defined via a "CUT " block | + | |
- | # - -inf and inf for "everything less/more than" | + | |
- | # - Bins don't have to be orthogonal. Still it is easy to automatically check orthogonality a posteriori | + | |
- | + | ||
- | BINNING tN_diag_mT | + | |
- | Cut tN_diag | + | |
- | Parameter mT | + | |
- | tN_diag_g100 100 125 | + | |
- | tN_diag_g120 125 150 | + | |
- | tN_diag_g150 150 inf | + | |
- | BINNING tN_diag_Etmiss1 | + | Proposal by Nishita Desai, Suchita Kulkarni & Devdatta Majumder [[2015:groups:tools:lhaad:proposal2]] |
- | Cut tN_diag_g100 | + | |
- | Parameter mT | + | |
- | tN_diag_g100_g60 60 90 | + | |
- | tN_diag_g100_g90 90 120 | + | |
- | tN_diag_g100_g120 120 150 | + | |
- | tN_diag_g100_g140 150 inf | + | |
- | BINNING tN_diag_Etmiss2 | + | Combined Proposal by ND, SK, DM, DS & JT: [[2015:groups:tools:lhaad:proposal]] |
- | Cut tN_diag_g125 | + | |
- | Parameter mT | + | |
- | tN_diag_g125_g60 60 90 | + | |
- | tN_diag_g125_g90 90 120 | + | |
- | tN_diag_g125_g120 120 150 | + | |
- | tN_diag_g125_g140 150 inf | + | |
- | BINNING tN_diag_Etmiss3 | + | Combined Proposal from Grenoble 02'16: [[2015:groups:tools:lhaad:proposalGrenoble]] |
- | Cut tN_diag_g150 | + | |
- | Parameter mT | + | |
- | tN_diag_g150_g60 60 90 | + | |
- | tN_diag_g150_g90 90 120 | + | |
- | tN_diag_g150_g120 120 150 | + | |
- | tN_diag_g150_g140 150 inf | + | |
+ | Proposal to use HEPDATA format for the experiment data section. HEPDATA (https://hepdata.net/) format has recently changed, both old and new formats are text file. New format: https://github.com/HEPData/hepdata-submission (Old format: http://hepdata.cedar.ac.uk/submittingdata , see "simple input file"). | ||
- | # Experimental Results are written in the following block | ||
- | # Syntax: | ||
- | # SRname Obs Bkg Bkgerr1 Bkgerr2 Bkgerr3 ... | ||
- | # Rules: | ||
- | # Each SRname must correspond to a cut from above | ||
- | BLOCK ExpResults: | ||
- | tN_diag_g100_g60 3452 3452 59 | ||
- | tN_diag_g100_g90 1712 1720 161 | ||
- | tN_diag_g100_g120 313 295 50 | ||
- | tN_diag_g100_g140 201 235 34 | ||
- | tN_diag_g125_g60 2018 2018 45 | ||
- | tN_diag_g125_g90 768 767 80 | ||
- | tN_diag_g125_g120 117 136 22 | ||
- | tN_diag_g125_g140 163 152 30 | ||
- | tN_diag_g150_g60 2543 2543 50 | ||
- | tN_diag_g150_g90 647 684 79 | ||
- | tN_diag_g150_g120 98 13 101 | ||
- | tN_diag_g150_g140 217 236 29 | ||
- | tN_med 12 13.0 2.2 | ||
- | tN_high 5 5.0 1.0 | ||
- | # Cutflows show events after consecutive evaluation of conditions | + | Agreements: |
- | # Syntax: | + | * Binned information should have a simple way to cut it |
- | # Parameter Operator Value EventsAfterCut1 Uncertainty "Description in LateX Format" | + | * Cuts must not branch but instead can use a common 'predecessor' |
- | # Rules: | + | * Syntax must not contain brackets to allow for an easy parsing |
- | # - Parameter operator Value combinations: See above | + | * ... |
- | # - Cuts are applied one after another | + | |
- | # - | + | |
- | + | ||
- | CUT mHadTopRange | + | |
- | mHadTop > 130 | + | |
- | mHadTop < 205 | + | |
- | + | ||
- | CUTFLOW tN_diag_echannel | + | |
- | True = True 200000 0 "Initial Events" | + | |
- | trigrand < trigeff 113762 ? "Trigger" | + | |
- | leptons_l.n = 1 28785 ? "Lepton (exactly 1 baseline)" | + | |
- | leptons.n = 1 19875 ? "Lepton (exactly 1 signal)" | + | |
- | jets.n >= 3 17959 ? "At least 3 jets $\geq$ 25 GeV" | + | |
- | jets.n >= 4 13682 ? "At least 4 jets $\geq$ 25 GeV" | + | |
- | jets.1.pt >= 60 12804 ? "jet1pt $\geq$ 60" | + | |
- | jets.2.pt >= 60 9489 ? "jet2pt $\geq$ 60" | + | |
- | jets.3.pt >= 40 8556 ? "jet3pt $\geq$ 40" | + | |
- | leading_bjets.n >= 1 7192 ? "btag(70) >= 1" | + | |
- | dPhi_j1_miss >= 0.8 6611 ? "dPhi(jet1, etmiss) >= 0.8" | + | |
- | dPhi_j1_miss >= 0.8 5147 ? "dPhi(jet2, etmiss) >= 0.8" | + | |
- | etmiss.pt >= 150 1314 ? "Etmiss >= 150" | + | |
- | EtoverHT >= 5 1314 ? "Etmiss/sqrtHT >= 5" | + | |
- | mT >= 140 446 ? "mT >= 140 GeV" | + | |
- | mHadTopRange = True 283 ? "mHadTop in 130, 205" | + | |
- | taujets_l.n = 0 257 ? "veto on loose Taus" | + | |
- | </code> | + | |
- | | + | |
+ | To Be Discussed Isues: | ||
+ | * Format | ||
+ | * Definition of 'detector constructed' objects like jets, electrons, etc | ||
+ | * How to enforce documentation of the used objects | ||
+ | * How to enforce documentation of validation material | ||
+ | * ... | ||
+ | Suggestion: | ||
+ | * Acronym: LHADA (Les Houches Analysis Description Accord) and not LHAAD | ||
+ | * Information about benchmark points | ||
+ | * Information about process generation needs to be added (merging parameters, generated process, link SLHA file if needed, link to model files etc.) |