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})
DAgostini (at least for nominal value)
Member DAS::Unfolding::getLmatrix (const fs::path &input, const fs::path &output, const pt::ptree &config, const int steering)

smart pointer?

(steering & DT::verbose)

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::getUnfHist (const vector< fs::path > &inputs, const fs::path &output, const pt::ptree &config, const int steering, const DT::Slice slice={1, 0})
First-class support in Darwin
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::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
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})

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

if (!RM) BOOST_THROW_EXCEPTION( DE::BadInput("Missing response matrix", dirMC) );

Propagate metainfo

Eps matrix of MyTUnfoldDensity != 1e-100?

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

Member Efficiency::Efficiency (const char *method, int threshold)
throw exception on bad threshold
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})

also plot without weight

Use forward triggers?

Member DAS::PUstaub::applyPUcleaning (const vector< fs::path > &inputs, const fs::path &output, const pt::ptree &config, const int steering, const DT::Slice slice={1, 0})
Hard-coded cut currently tuned for Pythia UL18
Member DAS::PUstaub::applyPUcleaningHT (const vector< fs::path > &inputs, const fs::path &output, const pt::ptree &config, const int steering, const DT::Slice slice={1, 0})
Hard-coded cut currently tuned for Pythia UL18
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 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})
cov? (needed for smoothing)
Member main (int argc, char *argv[])

get year from metainfo

get lumis from metainfo

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 ChainSlice::GetEntry (Long64_t entry, Int_t getall=0) override
description
Member PtYFiller::fillMC (DistVariation &) override
use RM underflow?
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 DAS::Unfolding::GetObservables (boost::property_tree::ptree)
not all observables should be fine (e.g. getUnfHist should not accept Rij::Ratios)
"
Electrons (just a copy of muons?)
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?
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?)
Class HTn
finalise phase space selection
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})

title of new histogram

cov? (needed for smoothing)

cov? (needed for smoothing)

cov? (needed for smoothing)

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::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::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
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 Observable::maxDR
specific to jet analyses
Member PtYFiller::match () override
just write sth like std::optional<JMEmatching<TTreeReaderArray>>?
Member BFFiller::fillMC (DistVariation &) override
no weight for gen photons?
Member HTnTransformer::Transform (const Eigen::VectorXd &) const override
harmonise (either nJetsmin, or 2)
Member DEtaDPhiFiller::match () override
is optional necessary? (taken from MjjYmax...)
Member Novosibirsk (double *x, double *p)
find reference
Member DAS::JetEnergy::FitResolution (TDirectory *dir, unique_ptr< TH1 > h, const int steering)
parameters in bins of eta (and rho/mu?)
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 DAS::JetEnergy::getJMEtable (const fs::path input, const fs::path output, const pt::ptree &config, const int steering)

identify algo

check binning

Class Distribution
write LaTeX version
Class Integral
write LaTeX version
Class DLog
write LaTeX version
Member ResolutionFit::ResolutionFit (const unique_ptr< TH1 > &h, ostream &cout)
take average of last three points?
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 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 Filters::Filters (int year)

Check list of filters for 2016

Check list of filters for 2017 and 18

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::getHistSafe (std::unique_ptr< TFile > &f, const std::string &name)
Move to Darwin?
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::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
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 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::applyJEScorrections (const vector< fs::path > inputs, const fs::path output, const pt::ptree &config, const int steering, const DT::Slice slice={1, 0})
CorrPt?
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 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 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 Ntupliser::getEventVariables (edm::Event const &iEvent)

check out-of-time pileup

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

" </dt><dd> \anchor _todo000059 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

clarify if there are efficient triggers in 2016 for forward region

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
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::getRecJets ()
externalize option for phase space cut
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::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 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 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})

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 main (int argc, char *argv[])
make optional with /dev/null
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

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

reimplement the logic to avoid a selection on the weight

Member JetWeight::operator() (const RecJet &jet)
variation
Member Functor::NormalisationCommonPresc (RecEvent &evnt, const RecJet &leadingJet, const Trigger &trigger)
this should be changed there are cases in which preL1min != preL1max
Member DAS::Normalisation::applyMClumi (const vector< fs::path > &inputs, const vector< fs::path > &sumWgts, const fs::path &output, const pt::ptree &config, const int steering, const DT::Slice slice={1, 0})
Events with scale > 5TeV are removed because Pythia used to generate too many of them. Check that this is still needed and that the cut is still appropriate.
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
"
use a bit once technically available
Member Ntupliser::getGenJets (edm::Handle< MyJetCollection > &mygenjets)
externalize option for phase space cut