1-lepton SUSY analysis with calo killing
Intro
- Trying to do a similar analysis to that described in this talk
- Following instructions from Heather Gray on using CellKiller by Eric Feng and Georgios Choudalakis
- instructions here
Hi Heather,
As Georgios mentioned, we found it easiest to just kill cells:
http://atlas-sw.cern.ch/cgi-bin/viewcvs-atlas.cgi/groups/UChicago/JetRecovery/src/CellKiller.cxx?view=markup
since this works directly on ESD. In the same job we rebuild clusters from the modified cells, as well as jets and MET on the fly:
http://atlas-sw.cern.ch/cgi-bin/viewcvs-atlas.cgi/groups/UChicago/JetRecovery/share/BuildClusters.py?view=markup
http://atlas-sw.cern.ch/cgi-bin/viewcvs-atlas.cgi/groups/UChicago/JetRecovery/share/JetAlgs.py?view=markup
You can find the topOptions here, which should be easy to understand as everything is modular:
http://atlas-sw.cern.ch/cgi-bin/viewcvs-atlas.cgi/groups/UChicago/JetRecovery/share/JetRecovery_topOptions.py?view=markup
Run by doing:
athena.py -s -c "baseName='JetRecovery'; EvtMax=-1; KillCalo=2; startFromJ5=0; upToJ5=1; doRebuild=True; esdVersion='14010003'" ./JetRecovery_topOptions.py | tee log 2>&1
or similar. An important point is to schedule the algs in the correct order so that cells are killed first; clusters, jets, and MET are built; then ntuple is dumped last. This is done by:
http://atlas-sw.cern.ch/cgi-bin/viewcvs-atlas.cgi/groups/UChicago/JetRecovery/share/TopAlgFix.py?view=markup
Other people have written more complex tools that work on RDO, which needs to be digitized then reconstructed. The two major ones, developed separately, are:
LAr cell-killer (Rob McPherson, et al):
https://twiki.cern.ch/twiki/bin/view/Atlas/CaloCellWeightAna
Tile cell-killer (Giorgi Arabidze, et al):
http://alxr.usatlas.bnl.gov/lxr/source/atlas/TileCalorimeter/TileRecUtils/src/TileCellMaskingTool.cxx?v=head#063
The former can kill both LAr and Tile components. The latter provides TileCellMaskingTool::killer() to choose which Tile drawer, motherboard, or digitizer to fail.
If you have any questions, feel free to ask.
Best,
Eric
Georgios Choudalakis wrote:
Hi Heather,
Unfortunately (or fortunately maybe) the way we killed cells was nothing too sophisticated. We simply looped through all cells from the CaloCellContainer, and used the methods CaloCell:eta() and CaloCell::phi() and CaloCell::x() ::y() ::z(), to know if a cell belonged to the problematic region. If it belonged to it, then we used CaloCell:setEnergy(0), and that was it. It was a bit more involved to re-reconstruct jets with the cells turned off. Eric Feng did that part.
I'm CCing him here. He may have some advice.
Our code was made to dump objects (like cone jets, truth jets, MET etc) into a custom ntuple (CBNT). You are welcome to look at it from CVS:
http://atlas-sw.cern.ch/cgi-bin/viewcvs-atlas.cgi/groups/UChicago/JetRecovery/
Best regards,
Georgios
First attempts at stuff
- Standard ESD->AOD can be done using esdtoaod.py from the release
- We are using 15.3.0.1,AtlasProduction for all steps from ESD->NTUP
Trying ESD to AOD with cell killing
Setup for do cell killing (By Brian):
- Job does ESD->ESD with killing followed by regular ESD->AOD (these could probably be combined)
- scripts are at:
/afs/cern.ch/user/a/aagaard/Analysis/SUSY/CellKilling/workdir/CellKill/
-
esdtoesd.py
runs the cell killing
-
esdtoaod.py
obvious...
-
cellKillJob.py
is batch job doing the two above (needs run.sh as well)
-
submit.py
for submitting batch jobs based on data files defined in files.py
-
esdtoesd.py
is based of JetRecovery_topOptions.py from cellkilling package
- ntuple dumper has been turned off together with jo to set it up
-
JetRecovery/JetAlgs.py
was modified to turn on Cone4Tower jets
- this works after btagging is turned off
- Currently only jets and MET is rerun in ESD->ESD step
- need to turn on at least the electron reconstruction as well
- Ntuple production has been updated to 15.3.0 and run out of
/afs/cern.ch/user/a/aagaard/Analysis/SUSY/NtupleProd/workdir
- Example cell killed AOD files can be found at:
/castor/cern.ch/grid/atlas/atlt3/scratch/aagaard/CellKilling/Kill3/
- replace
Kill3
with Kill0
for files without cell killing
- Example ntuples can be found at:
/castor/cern.ch/grid/atlas/atlt3/scratch/aagaard/CellKilling/NTUP/Kill3
- Note the above re-runs Jet and MissingET reco after the killing but does not re-run other reco (lepton reco is what we are interested here) - see "Re-Running El / Mu reco in the ESD->AOD step" section below...
AOD -> NTUP
OBJ: TLeafD MET_RefFinal_ex MET_RefFinal_ex
OBJ: TLeafD MET_RefFinal_ey MET_RefFinal_ey
OBJ: TLeafD MET_RefFinal_et MET_RefFinal_et
OBJ: TLeafD MET_RefFinal_sumet MET_RefFinal_sumet
OBJ: TLeafD MET_Truth_Int_ex MET_Truth_Int_ex
OBJ: TLeafD MET_Truth_Int_ey MET_Truth_Int_ey
OBJ: TLeafD MET_Truth_Int_et MET_Truth_Int_et
OBJ: TLeafD MET_Truth_Int_sumet MET_Truth_Int_sumet
OBJ: TLeafI El_N El_N
OBJ: TLeafElement El_E El_E
OBJ: TLeafElement El_p_T El_p_T
OBJ: TLeafElement El_phi El_phi
OBJ: TLeafElement El_eta El_eta
OBJ: TLeafElement El_px El_px
OBJ: TLeafElement El_py El_py
OBJ: TLeafElement El_pz El_pz
OBJ: TLeafElement El_m El_m
OBJ: TLeafElement El_charge El_charge
OBJ: TLeafElement El_pdgId El_pdgId
OBJ: TLeafElement El_etcone20 El_etcone20
OBJ: TLeafElement El_etcone30 El_etcone30
OBJ: TLeafElement El_etcone40 El_etcone40
OBJ: TLeafElement El_etcone45 El_etcone45
OBJ: TLeafElement El_IsEM El_IsEM
OBJ: TLeafElement El_author El_author
OBJ: TLeafElement El_Loose El_Loose
OBJ: TLeafElement El_Medium El_Medium
OBJ: TLeafElement El_Tight El_Tight
OBJ: TLeafI Mu_N Mu_N
OBJ: TLeafElement Mu_E Mu_E
OBJ: TLeafElement Mu_p_T Mu_p_T
OBJ: TLeafElement Mu_phi Mu_phi
OBJ: TLeafElement Mu_eta Mu_eta
OBJ: TLeafElement Mu_px Mu_px
OBJ: TLeafElement Mu_py Mu_py
OBJ: TLeafElement Mu_pz Mu_pz
OBJ: TLeafElement Mu_m Mu_m
OBJ: TLeafElement Mu_charge Mu_charge
OBJ: TLeafElement Mu_pdgId Mu_pdgId
OBJ: TLeafElement Mu_etcone40 Mu_etcone40
OBJ: TLeafElement Mu_nucone40 Mu_nucone40
OBJ: TLeafElement Mu_etcone20 Mu_etcone20
OBJ: TLeafElement Mu_matchChi2OverDoF Mu_matchChi2OverDoF
OBJ: TLeafElement Mu_fitChi2OverDoF Mu_fitChi2OverDoF
OBJ: TLeafElement Mu_SumTrkPtInCone Mu_SumTrkPtInCone
OBJ: TLeafElement Mu_etcone10 Mu_etcone10
OBJ: TLeafElement Mu_etcone30 Mu_etcone30
OBJ: TLeafElement Mu_nucone10 Mu_nucone10
OBJ: TLeafElement Mu_nucone20 Mu_nucone20
OBJ: TLeafElement Mu_nucone30 Mu_nucone30
OBJ: TLeafElement Mu_matchChi2 Mu_matchChi2
OBJ: TLeafElement Mu_fitChi2 Mu_fitChi2
OBJ: TLeafElement Mu_hasCluster Mu_hasCluster
OBJ: TLeafElement Mu_hasCombinedMuon Mu_hasCombinedMuon
OBJ: TLeafElement Mu_bestMatch Mu_bestMatch
OBJ: TLeafElement Mu_isCombinedMuon Mu_isCombinedMuon
OBJ: TLeafElement Mu_isHighPt Mu_isHighPt
OBJ: TLeafElement Mu_nTrkInCone Mu_nTrkInCone
OBJ: TLeafElement Mu_hasInDetTrackParticle Mu_hasInDetTrackParticle
OBJ: TLeafElement Mu_hasMuonExtrapolatedTrackParticle Mu_hasMuonExtrapolatedTrackParticle
OBJ: TLeafElement Mu_hasCombinedMuonTrackParticle Mu_hasCombinedMuonTrackParticle
OBJ: TLeafI Jet_N Jet_N
OBJ: TLeafElement Jet_E Jet_E
OBJ: TLeafElement Jet_p_T Jet_p_T
OBJ: TLeafElement Jet_phi Jet_phi
OBJ: TLeafElement Jet_eta Jet_eta
OBJ: TLeafElement Jet_px Jet_px
OBJ: TLeafElement Jet_py Jet_py
OBJ: TLeafElement Jet_pz Jet_pz
OBJ: TLeafElement Jet_m Jet_m
OBJ: TLeafElement Jet_charge Jet_charge
OBJ: TLeafElement Jet_pdgId Jet_pdgId
OBJ: TLeafElement Jet_EinPreSampB Jet_EinPreSampB
OBJ: TLeafElement Jet_EinPreSampE Jet_EinPreSampE
OBJ: TLeafElement Jet_EinEMB1 Jet_EinEMB1
OBJ: TLeafElement Jet_EinEMB2 Jet_EinEMB2
OBJ: TLeafElement Jet_EinEMB3 Jet_EinEMB3
OBJ: TLeafElement Jet_EinEME1 Jet_EinEME1
OBJ: TLeafElement Jet_EinEME2 Jet_EinEME2
OBJ: TLeafElement Jet_EinEME3 Jet_EinEME3
OBJ: TLeafElement Jet_EinHEC0 Jet_EinHEC0
OBJ: TLeafElement Jet_EinHEC1 Jet_EinHEC1
OBJ: TLeafElement Jet_EinHEC2 Jet_EinHEC2
OBJ: TLeafElement Jet_EinHEC3 Jet_EinHEC3
OBJ: TLeafElement Jet_EinTileBar0 Jet_EinTileBar0
OBJ: TLeafElement Jet_EinTileBar1 Jet_EinTileBar1
OBJ: TLeafElement Jet_EinTileBar2 Jet_EinTileBar2
OBJ: TLeafElement Jet_EinTileGap1 Jet_EinTileGap1
OBJ: TLeafElement Jet_EinTileGap2 Jet_EinTileGap2
OBJ: TLeafElement Jet_EinTileGap3 Jet_EinTileGap3
OBJ: TLeafElement Jet_EinTileExt0 Jet_EinTileExt0
OBJ: TLeafElement Jet_EinTileExt1 Jet_EinTileExt1
OBJ: TLeafElement Jet_EinTileExt2 Jet_EinTileExt2
OBJ: TLeafElement Jet_EinFCAL0 Jet_EinFCAL0
OBJ: TLeafElement Jet_EinFCAL1 Jet_EinFCAL1
OBJ: TLeafElement Jet_EinFCAL2 Jet_EinFCAL2
OBJ: TLeafElement Jet_EinUnknown Jet_EinUnknown
OBJ: TLeafElement Jet_EinCryostat Jet_EinCryostat
Some NTUPS to play with
- Brian has made ntuples for 3 killing scenarios (no killing (Kill0), little killing (Kill3) and large killing (Kill4))
- He has put ntuples from these at:
/castor/cern.ch/grid/atlas/atlt3/scratch/aagaard/CellKilling/NTUP
and on afs at:
/afs/cern.ch/user/a/aagaard/scratch0/SUSY/NtupleProd/ntuples/
- These are for some smallish jet samples (J5, J7), large ttbar stats and small SU3 stats.
- These can be opened directly in root like:
>export STAGE_SVCCLASS=atlt3
>root -l
root [0] TChain* ch = new TChain("tree0");
root [1] ch->Add("/castor/cern.ch/grid/atlas/atlt3/scratch/aagaard/CellKilling/NTUP/Kill4/ttbar/NTUP.9.root");
root [2] ch->Draw("El_N");
NTUP -> PLOTS in SPYROOT
- Need to apply final object reconstruction, isolation and overlap removal at the ntuple level
- And then construct event level variables like sphericity, Meff and M_T
- see Till's wiki SPyRootCsc51leptonAnalysis
Re-Running El / Mu reco in the ESD->AOD step
- I have been looking at re-running the lepton reco in the ESD->AOD step
- I have been using the release 15.3.0.2,AtlasProduction
- For now this is the unvalidated cache which means you need to setup like:
source setup.sh -tag=15.3.0
export CMTPATH=/afs/cern.ch/atlas/software/unvalidated/caches/15.3.0.2/AtlasProduction/15.3.0.2
source /afs/cern.ch/atlas/software/unvalidated/caches/15.3.0.2/AtlasProduction/15.3.0.2/AtlasProductionRunTime/cmt/setup.sh
- In order to re-run e-gamm need the tag: Reconstruction/egamma/egammaTools-00-02-26-04
- At the moment cant seem to re-run muon reco - due to this bug http://savannah.cern.ch/bugs/?53797 (we would hope that muon reco is less effected by calo killing, but the isolation would be effected)
- Running with JO with the flags:
rec.Commissioning.set_Value_and_Lock(False)
from MuonRecExample.MuonRecFlags import muonRecFlags
muonRecFlags.doCSCs = False
rec.doJetMissingETTag=False
rec.doEgamma=True
rec.doMuonCombined=False
rec.doTau=False
rec.doAOD=True
rec.doWriteAOD=True
rec.doWriteTAG=False
rec.doWriteTAGCOM=False
rec.doMonitoring=False
rec.doCBNT=False
rec.doDPD=False
rec.Production=True
globalflags.InputFormat.set_Value_and_Lock('pool')
rec.readESD.set_Value_and_Lock( True )
rec.readRDO.set_Value_and_Lock( False )
athenaCommonFlags.PoolESDInput.set_Value_and_Lock( ["InputESD.pool.root"] )
rec.doESD.set_Value_and_Lock( True )
rec.doWriteESD.set_Value_and_Lock( False )
athenaCommonFlags.PoolAODOutput.set_Value_and_Lock( "output_AOD.pool.root" )
- eg. see the JO file at: /afs/cern.ch/user/g/gencomm/w0/jboyd/susy/ReRunRecoFromEsd/jamie.ESDtoESD.py
- Proof that this works can be seen in the plots below
- Here we have 2 sets of plots. coming from the paths
ESD(with calo killing) -> esdtoaod.py -> AOD -> testEV.py -> NTUP -> Plot (default path)
ESD(with calo killing) -> jamie.ESDtoESD.py -> AOD -> testEV.py -> NTUP -> Plot (re-reco path)
-
-
- So can see that the El reco is effected by killed region (as expected), Muon and missingEt reco is not effected (as expected), Jet reco looks effected - but thats because the default path isnt copying the Jets into the NTUP correctly (with messages like
StoreGateSvc WARNING retrieve(const): No valid proxy for object Cone4H1TowerJets of type JetCollection(CLID 1162448536)
ControlSampleLo... ERROR Could not retrieve container (Cone4H1TowerJets)
Increasing the SU3 statistics
- For the SU3 dataset we are interested in (mc08) only 1 in 10 ESDs are kept - so we have very low statistics
- I have been looking at re-running the reco from the stored HITS files (in order to increase our ESD statistics by a factor of 10)
- I requested that the dataset mc08.105200.T1_McAtNlo_Jimmy.merge.HITS.e357_s462_s520 be replicated to the atlprod cern castor disk (this is available at: /castor/cern.ch/grid/atlas/atlasmcdisk/mc08/HITS/mc08.105200.T1_McAtNlo_Jimmy.merge.HITS.e357_s462_s520_tid056879 ).
- I am rerunning digitization and reco on this data putting the resulting RDOs and ESDs to the atlt3 castor disk at:
/castor/cern.ch/grid/atlas/atlt3/susy/jboyd/susyESDs
- digitization and reco were run in release AtlasProduction,14.2.25.8 (the same as used to make the other ESDs we are using)
- The commands used to run the digitization is:
csc_digi_trf.py inputHitsFile="+esdInFile+" outputRDOFile="+esdOutFile+" maxEvents=-1 skipEvents=0 geometryVersion=ATLAS-GEO-02-01-00 digiSeedOffset1=4 digiSeedOffset2=4 minbiasHitsFile=NONE cavernHitsFile=NONE jobConfig=NONE DBRelease=/afs/cern.ch/atlas/www/GROUPS/DATABASE/pacman4/DBRelease/DBRelease-6.5.1.tar.gz digiRndmSvc=AtRanluxGenSvc samplingFractionDbTag=QGSP_BERT triggerConfig=lumi1E31_no_Bphysics_no_prescale beamHaloHitsFile=NONE beamGasHitsFile=NONE doAllNoise=NONE AddCaloDigi=False conditionsTag=OFLCOND-SIM-00-00-06 IgnoreConfigError=False $@
csc_reco_trf.py inputRDOFile="+esdInFile+" outputESDFile="+esdOutFile2+" outputAODFile=AOD.059666._00004.pool.root.1 ntupleFile=NONE maxEvents=500 skipEvents=500 geometryVersion=ATLAS-GEO-02-01-00 triggerConfig=lumi1E31_no_Bphysics_no_prescale jobConfig=SetJetConstants-02-000.py DBRelease=/afs/cern.ch/atlas/www/GROUPS/DATABASE/pacman4/DBRelease/DBRelease-6.5.1.tar.gz conditionsTag=OFLCOND-SIM-00-00-06 $@
- The produced ESDs will have 500 events in each (the merged hits files are 1k events, but in the atlascatlong queue we dont have enough CPU limit to run reco on 1k events so i split this into 2 parts of 500 events each).
- I have tried to validate the new ESDs i have produced by comparing reco quantities (missing Et, El, Mu, and Jet params) between an ntuple from Brian (with no killing) and from the newly produced ESDs. the plots below show these comparisons (top = plots from official ESD, bottom = plots from home made ESDs). All looks good except Jet quantities are missing - but i think this is due to the ESD -> NTUP stage (which i did in 15.3.0.1 - maybe Brian used something different).
-
-
-
-
Different Calo killing scenarios
Trying to mask the current dead channels (Jamie)
- I have had a go at masking the set of dead/problem channels that we have now with the real calorimeter
- I did this by changing the masking tool to use the LArBadChannelMasker tool (thanks to Walter Lampl for help with this)
- This can be configured to mask channels for different problems i chose:
ProblemsToMask=["missingFEB","deadReadout","deadPhys","deadCalib","almostDead","highNoiseHG","highNoiseMG","highNoiseLG"]
- Running with the 'normal' MC database for the bad channels this masks of 528 channels
- Walter also explained how i can use the DB from real data (for a given run) to mask channels. Using this for run 126000 this masks off 2062 channels.
- A plot comparing the eta/phi location of the masked channels for the MC and real data DBs is shown below...
- Masked_cells.gif:
- Because a FEB usually corresponds to ~128 cells that are all in 1 layer probably the effect of running like this on MET will be rather small but we should try it.
- The code to do this masking can be seen at:
~jboyd/gencomm/groups/UChicago/JetRecovery/src/CellKiller.cxx
~jboyd/gencomm/groups/UChicago/JetRecovery/JetRecovery/CellKiller.h
~jboyd/gencomm/groups/UChicago/JetRecovery/run/esdtoesd.py
~jboyd/gencomm/groups/UChicago/JetRecovery/share/CellKiller.py
- This isnt killing any cells in the Tile i think (to work on this...)
Killing the HEC sector that was off due to PS problem in 2008
Things to do...
First things
- reoptimize Mt and MET cuts for 1 lepton analysis with killing to get best significance (S/sqrt(B)) (Johan)
- plot MET resolution and MET_phi resolution for killing / non-killing (Johan)
- Re-do analysis veto'ing events where MET points at hole (Johan)
- How does MET (MET_Phi) resolution look when MET/JET pointing at / close to hole (what is close to...)
- Understand Tile killing (big hole in Tile only) (Brian)
- Different killing scenarios - HEC (ala 2008), current LAr FEB holes, 1 PS (kill 3?), ... (Jamie)
For Later
- Looking at MT dist for W's to see if we could get the MT cut value from data
- MET resolution (for different samples) for different killings interesting for LAr/Jet/MET groups
Need lepton reco after killing
- look at change in signal eff due to electrons being killed
- look at veto'ing muons that point at hole (no isolation possible) - (track isolation???)
- look at QCD samples - do these now become a significant background when we do killing
Cleaning cuts
- how does MET resolution look when jet goes in / close-to hole
- Tile versus LAr (E_LAr / E_tot??) (energy / eta dependent)
Simple Background estimation with killing
- M_T / 2x2 tiles method with killed MC
- evaluate how much you gain by remaking MC with 'hole' (small holes scenario)
New samples needed??
- W+Jets ??
- heavy flavour Jets (bbar) (for lots of muons)
- other susy samples (probably not...)
--
JamieBoyd - 22 Jun 2009