1-lepton SUSY analysis with calo killing


  • 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:

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:

You can find the topOptions here, which should be easy to understand as everything is modular:

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:

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):

Tile cell-killer (Giorgi Arabidze, et al):

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.


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:
Best regards,

First attempts at stuff

Trying ESDtoAOD

  • Standard ESD->AOD can be done using esdtoaod.py from the release
  • We are using,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...


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
    • El (reco)
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
    • Muon (reco)
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
    • Jet (reco)
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:
and on afs at:
  • 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");                                                                         


  • 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,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/
source /afs/cern.ch/atlas/software/unvalidated/caches/
  • 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:
from MuonRecExample.MuonRecFlags import muonRecFlags
muonRecFlags.doCSCs = False
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)
  • eta.phi_comp.gif
  • reco_comp.gif
  • 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:
  • digitization and reco were run in release AtlasProduction, (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 $@
  • and for reco it is
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 - maybe Brian used something different).
  • MissingET_comp.gif
  • El_comp.gif
  • Mu_comp.gif
  • Jet_comp.gif

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:
  • 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:
  • 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)

  • Write note...

New samples needed??

  • W+Jets ??
  • heavy flavour Jets (bbar) (for lots of muons)
  • other susy samples (probably not...)

-- JamieBoyd - 22 Jun 2009

Topic attachments
I Attachment History Action Size Date Who Comment
GIFgif El_comp.gif r1 manage 19.7 K 2009-08-04 - 14:31 JamieBoyd  
GIFgif Jet_comp.gif r1 manage 16.7 K 2009-08-04 - 14:32 JamieBoyd  
GIFgif MissingET_comp.gif r1 manage 10.9 K 2009-08-04 - 14:31 JamieBoyd  
GIFgif Mu_comp.gif r1 manage 22.2 K 2009-08-04 - 14:32 JamieBoyd  
GIFgif eta.phi_comp.gif r1 manage 17.9 K 2009-08-04 - 10:47 JamieBoyd  
GIFgif reco_comp.gif r1 manage 16.5 K 2009-08-04 - 10:47 JamieBoyd  
Edit | Attach | Watch | Print version | History: r13 < r12 < r11 < r10 < r9 | Backlinks | Raw View | WYSIWYG | More topic actions
Topic revision: r13 - 2009-08-24 - JamieBoyd
    • Cern Search Icon Cern Search
    • TWiki Search Icon TWiki Search
    • Google Search Icon Google Search

    Main All webs login

This site is powered by the TWiki collaboration platform Powered by PerlCopyright & 2008-2019 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback