DAS  3.0
Das Analysis System
Todo List
Member DAS::Unfolding::unfold (const fs::path &inputData, const fs::path &inputMC, const fs::path &output, const pt::ptree &config, const int steering, const DT::Slice slice={1, 0})
Eps matrix of MyTUnfoldDensity != 1e-100?
Member DAS::Unfolding::getLmatrix (const fs::path &input, const fs::path &output, const pt::ptree &config, const int steering)
the empty bins may change from variation to variation
Member DAS::Unfolding::getUnfBinning (const fs::path &outputGen, const fs::path &outputRec, const pt::ptree &config, const int steering)
get post-transformation unfolding
Member DAS::Unfolding::InclusiveJet1D::getUnfHistPt (const vector< fs::path > &inputs, const fs::path &output, const int steering, const DT::Slice slice={1, 0})
try to use the underflow and overflow for matching out of the phase space...
Member PtVariation::PtVariation (TString Name, size_t IJEC=0, size_t IGenJetWgt=0, size_t IRecJetWgt=0, size_t IGenEvtWgt=0, size_t IRecEvtWgt=0)
investigate the migrations out of the phase space with the underflow and overflow
Member main (int argc, char *argv[])
automate this by looking up the metainfo
Member DAS::Unfolding::ExtractHistogram::nodeLoop (TDirectory *dOut, TUnfoldBinning *binning, T t, ostream &cout, TString name, int depth)
d > 2?
Member DAS::Unfolding::unfold (const fs::path &inputData, const fs::path &inputMC, const fs::path &output, const pt::ptree &config, const int steering, const DT::Slice slice={1, 0})

DAgostini (at least for nominal value)

merge the MetaInfo from the two (or more??) inputs

  • compare flags, git, corrections
    • merge
    • send warning if relevant but proceed anyway
  • merge histories & variations
  • find a solution for the preseed (Q: is it necessary for the data?)
  • then add block on unfolding but preserve the cycle

Propagate metainfo

Member DAS::Unfolding::getLmatrix (const fs::path &input, const fs::path &output, const pt::ptree &config, const int steering)
(steering & DT::verbose)
Member DAS::Unfolding::unfold (const fs::path &inputData, const fs::path &inputMC, const fs::path &output, const pt::ptree &config, const int steering, const DT::Slice slice={1, 0})

syst?

run CT if the gen level is available (= pseudodata)

  • if inputData = inputMC -> expect perfect agreement
  • otherwise, interpretation may depend...

remove?

title of new histogram

cov? (needed for smoothing)

title of new histogram

cov? (needed for smoothing)

cov? (needed for smoothing)

cov? (needed for smoothing)

Member main (int argc, char *argv[])
get lumis from metainfo
Member DAS::PUprofile::getPUprofile (const vector< fs::path > &inputs, const fs::path &output, const pt::ptree &config, const int steering, const DT::Slice slice={1, 0})

throw if PU correction already applied

also plot without weight

Use forward triggers?

Member DAS::getHighScalePUeventIDs (const vector< fs::path > &inputs, const fs::path &output, const pt::ptree &config, const int steering, const DT::Slice slice={1, 0})
include test in CI
Member DAS::getHighScalePUeventIDsHT (const vector< fs::path > &inputs, const fs::path &output, const pt::ptree &config, const int steering, const DT::Slice slice={1, 0})
include test in CI
Member DAS::Normalisation::getTriggerCurves (const vector< fs::path > &inputs, const fs::path &output, const pt::ptree &config, const int steering, const DT::Slice slice={1, 0})

fix error

fix error

Member Efficiency::Efficiency (const char *method, int threshold)
throw exception on bad threshold
Member main (int argc, char *argv[])
get year from metainfo
Member DAS::Unfolding::Checks::BLT (const unique_ptr< TH1 > &dataDist, const unique_ptr< TH2 > &dataCov, const unique_ptr< TH1 > &MC, int rebin=1)
current implementation is insufficient for complex binning schemes
Member DAS::Normalisation::getTriggerTurnons (const fs::path &input, const fs::path &outputRoot, const fs::path &outputTxt, const pt::ptree &config, const int steering)

Use metainfo

Get year from metainfo?

Get lumis from metainfo?

implement a more general logic to use only rapidity <3 turnons to determine the overall turnon

Member DAS::Normalisation::GetTriggerEfficiency (int trigger, TH1 *h, STREAM &Stream, float from, float minEff)
Where does the factor 6 come from?
Member DAS::Unfolding::getToyCalculation (const fs::path &input, const fs::path &output, const pt::ptree &config, const int steering, const DT::Slice slice={1, 0})
once the meta info is available, use metainfo.Seed<67325879>(slice)
Member DAS::Unfolding::getLmatrix (const fs::path &input, const fs::path &output, const pt::ptree &config, const int steering)

implement L-matrix and bias variations?

  • the weights will change slightly at gen level
  • the rec level spectrum may slightly change

smart pointer?

"
Electrons (just a copy of muons?)
Member ZPtY::setLmatrix (const std::unique_ptr< TH1 > &, std::unique_ptr< TH2 > &) override

some docs... this is quite obscure

Most existing L-matrices follow a similar structure, this should be implemented in a function instead of repeating the same code

Member BOOST_AUTO_TEST_CASE (closure_tests)

expect perfect agreement

expect agreement within stat unc

play with config

Member Darwin::Tools::GetHist (std::vector< std::filesystem::path > inputs, const std::string &name="h")
what if the file had already been opened?? will it be closed prematurely?
Member Flow::GetInputHist (const std::string &name)
Can we rather use a node handle to extract the unique pointer?
Member Flow::GetOutputTree (std::shared_ptr< TFile >={}, const std::source_location=std::source_location::current())
TTree::BuildIndex() to preserve the association despite skipped events?
Member ChainSlice::GetEntry (Long64_t entry, Int_t getall=0) override
description
Member PtYFiller::fillMC (DistVariation &) override
use RM underflow?
Member SlicedFriendElement::AddTo (TTree *tree, ChainSlice *chain, const char *alias)
ROOT does a few extra checks when adding a friend. Easier to do if upstreaming.
"

Is this also valid for environments created by mamba?

Define $LD_LIBRARY_PATH for conda too?

Member Darwin::Tools::GetHist (std::vector< std::filesystem::path > inputs, const std::string &name="h")
what if the file had already been opened?? will it be closed prematurely?
Member Flow::GetInputHist (const std::string &name)
Can we rather use a node handle to extract the unique pointer?
Member Flow::GetOutputTree (std::shared_ptr< TFile >={}, const std::source_location=std::source_location::current())
TTree::BuildIndex() to preserve the association despite skipped events?
Member ChainSlice::GetEntry (Long64_t entry, Int_t getall=0) override
description
"
Electrons (just a copy of muons?)
Member Observable::maxDR
specific to jet analyses
Member DAS::Unfolding::Tikhonov::PrepareRegularisation (TString MCvar, const char *fname, unique_ptr< MyTUnfoldDensity > &density)
calculate \( A^T_{yy} V^{-1} A \) & adapt the L matrix to have the same rank
Member DAS::Unfolding::Tikhonov::RedoUnfold (unique_ptr< MyTUnfoldDensity > &density, double newtau, TString name, TString subtitle, shared_ptr< TFile > fOut, const map< TString, unique_ptr< TH1 >> &miss)
cov (needed for smoothing)
Member BFFiller::match () override
Needed?
Member DAS::Unfolding::fillCov (const DistVariation &, const std::list< int > &)
make this function a static member of Observable
Member DistVariation::cov

include miss entries in RM

use TUnfoldBinning to decorrelate categories of miss/fake entries

Class HTn
finalise phase space selection
Member MjjYbYs::setLmatrix (const std::unique_ptr< TH1 > &, std::unique_ptr< TH2 > &) override
fix
Member MjjYmax::setLmatrix (const std::unique_ptr< TH1 > &, std::unique_ptr< TH2 > &) override
fix
Member DAS::Unfolding::GetObservables (boost::property_tree::ptree)
smart pointer?
Member DAS::PUprofile::applyPUprofCorrection (const vector< fs::path > inputs, const fs::path output, const pt::ptree &config, const int steering, const DT::Slice slice={1, 0})
Use raw pt??
Member EventInfo< Muon, Photon >::EventInfo (const GenEvent *gEv, const RecEvent *rEv, const std::vector< Muon > &muons, const std::vector< Photon > &photons, const Uncertainties::Variation &v)

We may need to reorder photons after the variation.

We only consider the leading photon for now.

Member EventInfo< Muon, Photon >::weight
Correlation bit.
Member EventInfo< Muon, Photon >::SelectMuons (const std::vector< Muon > &muons, const Uncertainties::Variation &v) const
The variation could change which muons are leading.
Member EventInfo< Muon, Photon >::IsGoodPhoton (const RecPhoton &photon, const Uncertainties::Variation &v) const
Use a \( \Delta R \) cut w.r.t. muons?
Member HTnTransformer::Transform (const Eigen::VectorXd &) const override
harmonise (either nJetsmin, or 2)
Member DEtaDPhiFiller::match () override
is optional necessary? (taken from MjjYmax...)
Member DAS::Unfolding::GetObservables (boost::property_tree::ptree)
not all observables should be fine (e.g. getUnfHist should not accept Rij::Ratios)
Class Distribution
write LaTeX version
Member ResponseFit::ResponseFit (const unique_ptr< TH1 > &h, ostream &cout)
tune range?
Member DAS::JetEnergy::getJetResponse (const vector< fs::path > &inputs, const fs::path &output, const pt::ptree &config, const int steering, const DT::Slice slice={1, 0})

with gen level weight too?

remove upper boundaries from titles of last bins

Member main (int argc, char *argv[])
JES and JER campaigns are often different, but it would be nice to 1/ extract the config from the metainfo of a n-tuple 2/ use this config as argument to the present executable to get a plot of the tables
Member DAS::JetEnergy::getJMEtable (const fs::path input, const fs::path output, const pt::ptree &config, const int steering)

Compound corrections?

Use THn to get one more dimension

check binning

check binning

check binning

Member DAS::JetEnergy::FitResolution (TDirectory *dir, unique_ptr< TH1 > h, const int steering)
parameters in bins of eta (and rho/mu?)
Class Integral
write LaTeX version
Class DLog
write LaTeX version
Member Novosibirsk (double *x, double *p)
find reference
Member DAS::TPS::applyEventMixing (const vector< fs::path > &inputs1, const vector< fs::path > &inputs2, const fs::path &output, const pt::ptree &config, const int steering, const DT::Slice slice={1, 0})

fix output logic

Merge metainfos

Class ObsMiniJets
Check this and compare with the standard definition.
  • RPtExpDEta --> $ R_{ky} = \frac{1}{N-3} \sum_{i=1}^{N-3} min \left( \frac{P_{T,i}}{P_{T,i+1}}, \frac{P_{T,i+1}}{P_{T,i}} \right) \exp \left( \eta_{i} - \eta_{i+1} \right) $
Member DAS::MN::GetMNJet (std::vector< Jet > jets, std::function< bool(Jet &)> ptcut=[](Jet &jet) {return jet.p4.Pt()< 35 ;})
check the consistency of this condition
Member DAS::MN::GetMiniJets (std::vector< Jet > jets, const std::pair< Jet, Jet > &MNJets, std::function< bool(Jet &)> ptcut=[](Jet &jet) {return jet.p4.Pt()< 20;})
check the consistency of this condition
Member Step::GetSmoothFit (TH1 *h, TH2 *cov, int im, int iM, unsigned int maxdegree, EarlyStopping criterion=None, double stopParam=1, UInt_t nrep=0, std::ostream &stream=std::cout)
and in case of F-test failure?
Member JetWeight::operator() (const RecJet &jet)

standardise flavour indices...

variations

Member main (int argc, char *argv[])
provide WPs as input?
Member DAS::BTagging::getBTagBinnedDiscriminant (const vector< fs::path > &inputs, const fs::path &output, const pt::ptree &config, const int steering, const DT::Slice slice={1, 0})

GSP?

loop over variations

gen event weight

Member DAS::BTagging::getBTagPerformance (const vector< fs::path > &inputs, const fs::path &output, const int steering)
crash if under- or overflow non-empty
Member ControlPlots::ControlPlots (TString Name)
TH3 pt eta rho plots TH2 pt_N TH2 ptmax_Dphi
Member DAS::getHistSafe (std::unique_ptr< TFile > &f, const std::string &name)
Move to Darwin?
Member DAS::JetVeto::getConservativeMap (const fs::path &input, const fs::path &output, const pt::ptree &config, const int steering)
make smart pointer? (last attempts led to seg)
Member DAS::JetEnergy::applyJERsmearing (const vector< fs::path > &inputs, const fs::path &output, const pt::ptree &config, const int steering, const DT::Slice slice={1, 0})

investigate JER uncertainty breakdown (see Core#35)

fix in case of offset (e.g. JES applied on MC)

Member DAS::JetEnergy::w
check exact list of variations with JME group
Member DAS::JetEnergy::GetLogBinning (float minpt, float maxpt, int nbins)
this accumulates imprecision --> improve
Member DAS::JetEnergy::Evaluate (const auto &correction, std::ostream &cout, const RecJet &recJet, const std::optional< float > &rho={}, const std::optional< GenJet > &genJet={}, const std::optional< RecEvent > &recEvt={}, const std::optional< std::string > &systematic={}, const std::optional< float > &JER={}, const std::optional< float > &JERSF={})
Use boost::core::demangle() to provide a more readable function name?
Member AbstractFit::fit (std::pair< float, float >, const char *)

https://stackoverflow.com/questions/37385560/c-redirect-or-disable-stdio-temporarily to avoid this dumb arrow

E: use Minos for error estimations

Member ResolutionFit::ResolutionFit (const unique_ptr< TH1 > &h, ostream &cout)
take average of last three points?
Member DAS::Photon::applyPhotonConversionVeto (const vector< fs::path > &inputs, const fs::path &output, const pt::ptree &config, const int steering, const DT::Slice slice={1, 0})
ControlPlots
Member Ntupliser::getGenJets (edm::Handle< MyJetCollection > &mygenjets)
externalize option for phase space cut
Member Ntupliser::getRecJets ()
externalize option for phase space cut
Member Ntupliser::getEventVariables (edm::Event const &iEvent)

check out-of-time pileup

compare to (*met)[0].pt() to (*met)[0].uncorPt()

" </dt><dd> \anchor _todo000063 clarify how much it matters...</dd> <dt> \_setscope Ntupliser_cfg Member \_internalref namespaceNtupliser__cfg#a53bb3c2ea1539bddfd62922d44c86e57 "Ntupliser_cfg.triggerNames"
add forward triggers for 2017 and 2018
Member Ntupliser_cfg.genparticles
remove?
Member Ntupliser_cfg.vertexes
check that the right JECs are applied
Member RecMuon::scale_group () const final
float RecMuon::CorrE (size_t i) const; // preserve mass
"
use a bit once technically available
Member DAS::Photon::applyPhotonID (const vector< fs::path > &inputs, const fs::path &output, const pt::ptree &config, const int steering, const DT::Slice slice={1, 0})
ControlPlots
Member DAS::Prefiring::fitPrefiringCorrections (const fs::path &input, const fs::path &output, const int steering)

proper propagation of uncertainties

smooth fit also for the average map

check if files exist

Member Functor::PrepareBinnedWeights (const std::unique_ptr< TH2 > &hIn)
change prescription to better account for decorrelations
Member Functor::PrepareSmoothWeights (TString hname, std::unique_ptr< TFile > f)

Assertion to exception

Assertion to exception

Member Functor::operator() (RecEvent &evnt, const std::vector< RecJet > &recjets)
decorrelations
Member DAS::Normalisation::applyDataNormalisation (const vector< fs::path > &inputs, const fs::path &output, const pt::ptree &config, const int steering, const DT::Slice slice={1, 0})
add lumi unc variations
Member DAS::Muon::applyMuonSelection (const vector< fs::path > &inputs, const fs::path &output, const pt::ptree &config, const int steering, const DT::Slice slice={1, 0})
ControlPlots
Member IDApplier::passes (const RecMuon &muon) const override
IPCut? (unless it's already included in IPCut?)
Member DAS::Muon::applyRochesterCorr (const vector< fs::path > &inputs, const fs::path &output, const pt::ptree &config, const int steering, const DT::Slice slice={1, 0})

Implement alternative nominal correction

Zpt: rather provide as alternative? (issue #76)

Ewk2: understand 3rd remark from MUON POG

clear scales?

should we force up (down) in the first (second) place?

Member DAS::Muon::getZmmgGenPlots (const vector< fs::path > &inputs, const fs::path &output, const int steering, const DT::Slice slice={1, 0})
Put the selection in a central place? Make steerable?
Member main (int argc, char *argv[])
make optional with /dev/null
Member JetWeight::operator() (const RecJet &jet)
variation
Member DAS::Normalisation::applyDataNormalisation (const vector< fs::path > &inputs, const fs::path &output, const pt::ptree &config, const int steering, const DT::Slice slice={1, 0})

revisit the logic (having inputs modified + a return object may be confusing)

reimplement the logic to avoid a selection on the weight

Member Functor::Functor (fs::path lumi_file, fs::path turnon_file, fs::path trigger_curves, const std::string &strategy, const std::string &method, const int year)
document
Member Functor::NormalisationCommonPresc (RecEvent &evnt, const RecJet &leadingJet, const Trigger &trigger)
this should be changed there are cases in which preL1min != preL1max
Member main (int argc, char *argv[])
take uncertainties (and be careful with correlations)
Member TriggerEff::TriggerEff (const fs::path &file, const std::map< int, TriggerLumi > &triggers_lumi, int year)

Exception if the file doesn't exist

revisit this threshold for UL samples

Member TriggerEff::operator() (const DAS::RecJet &j)
revisit the limit at 905 GeV