diff --git a/Reconstruction/MET/METReconstruction/CMakeLists.txt b/Reconstruction/MET/METReconstruction/CMakeLists.txt
index 96860c7863a28c6be313761341a7d2ab7b513b25..c9b8aa0139b6807b4bdc6066a9fc8aeeb60c5683 100644
--- a/Reconstruction/MET/METReconstruction/CMakeLists.txt
+++ b/Reconstruction/MET/METReconstruction/CMakeLists.txt
@@ -24,7 +24,7 @@ atlas_depends_on_subdirs( PUBLIC
                           Reconstruction/MET/METRecoInterface
                           Reconstruction/PFlow/PFlowUtils
                           Reconstruction/RecoTools/CaloClusterMatching
-			  Reconstruction/RecoTools/RecoToolInterfaces
+                          Reconstruction/RecoTools/RecoToolInterfaces
                           PRIVATE
                           Calorimeter/CaloEvent
                           Control/AthContainers
diff --git a/Reconstruction/MET/METReconstruction/METReconstruction/METAssociationTool.h b/Reconstruction/MET/METReconstruction/METReconstruction/METAssociationTool.h
index 76848e481433d9597b8c6ba8072666d979568fcb..8759371c38560a2bfe6144d642bdb1aeb6e4ac35 100644
--- a/Reconstruction/MET/METReconstruction/METReconstruction/METAssociationTool.h
+++ b/Reconstruction/MET/METReconstruction/METReconstruction/METAssociationTool.h
@@ -106,6 +106,12 @@ namespace met{
 
     ToolHandleArray<IMETAssocToolBase> m_metassociators;
 
+    // Monitor timing
+    int m_timedetail;
+
+    mutable unsigned int m_nevt;
+    mutable TStopwatch m_clock;
+    mutable std::vector<TStopwatch> m_toolclocks;
   }; 
 
 }
diff --git a/Reconstruction/MET/METReconstruction/METReconstruction/METAssociator.h b/Reconstruction/MET/METReconstruction/METReconstruction/METAssociator.h
index 7aea99dcc16ff2c571be57bc8d089a00f89f4e76..3fa816f52a88b9e9900c92b8cdda11e9d618ee15 100644
--- a/Reconstruction/MET/METReconstruction/METReconstruction/METAssociator.h
+++ b/Reconstruction/MET/METReconstruction/METReconstruction/METAssociator.h
@@ -85,6 +85,9 @@ namespace met {
     std::string m_forcoll;
     double m_foreta;
 
+    double m_cenTrackPtThr;
+    double m_forTrackPtThr;
+
     // reconstruction process to be defined in the individual tools
     // pure virtual -- we have no default
     virtual StatusCode executeTool(xAOD::MissingETContainer* metCont, xAOD::MissingETAssociationMap* metMap) = 0;
diff --git a/Reconstruction/MET/METReconstruction/METReconstruction/METMuonAssociator.h b/Reconstruction/MET/METReconstruction/METReconstruction/METMuonAssociator.h
index d9b62f25ca36c70f2cb3d7d9a4f4bbae396899e8..477b19075a9ba93a0affab503e7caaf65eda5dd1 100644
--- a/Reconstruction/MET/METReconstruction/METReconstruction/METMuonAssociator.h
+++ b/Reconstruction/MET/METReconstruction/METReconstruction/METMuonAssociator.h
@@ -71,6 +71,8 @@ namespace met{
 
     private:
 
+    bool m_doMuonClusterMatch;
+
     /// Default constructor: 
     METMuonAssociator();    
 
diff --git a/Reconstruction/MET/METReconstruction/METReconstruction/METTrackFilterTool.h b/Reconstruction/MET/METReconstruction/METReconstruction/METTrackFilterTool.h
index 007ff89fc851f3f6a7769551679c1ad36b2e08e5..b674e907532b6894737016c6b78fa010993a2335 100644
--- a/Reconstruction/MET/METReconstruction/METReconstruction/METTrackFilterTool.h
+++ b/Reconstruction/MET/METReconstruction/METReconstruction/METTrackFilterTool.h
@@ -117,6 +117,9 @@ namespace met{
 
     bool m_trk_doEoverPsel;
     std::string m_cl_inputkey;
+
+    double m_cenTrackPtThr;
+    double m_forTrackPtThr;
   }; 
 
 }
diff --git a/Reconstruction/MET/METReconstruction/Root/METAssociationTool.cxx b/Reconstruction/MET/METReconstruction/Root/METAssociationTool.cxx
index 1e6ab14b55a4e49776e6b8fa4f9765d5e777fcab..fd1a900e52d5090e2404bc7820c15d5b9d891fbe 100644
--- a/Reconstruction/MET/METReconstruction/Root/METAssociationTool.cxx
+++ b/Reconstruction/MET/METReconstruction/Root/METAssociationTool.cxx
@@ -49,6 +49,7 @@ namespace met {
     declareProperty( "METSuffix",      m_metsuffix = "AntiKt4LCTopo" );
     declareProperty( "TCSignalState",  m_signalstate = 1             );
     declareProperty( "AllowOverwrite", m_overwrite = false             );
+    declareProperty( "TimingDetail",       m_timedetail = 0      );
   }
 
   // Destructor
@@ -73,16 +74,22 @@ namespace met {
       ATH_MSG_INFO("   Association map ==> " << m_mapname);
     }
 
-    // retrieve builders
-    for(ToolHandleArray<IMETAssocToolBase>::const_iterator iBuilder=m_metassociators.begin();
-	iBuilder != m_metassociators.end(); ++iBuilder) {
-      ToolHandle<IMETAssocToolBase> tool = *iBuilder;
+    // retrieve associators and generate clocks
+    unsigned int ntool = m_metassociators.size();
+    unsigned int itool = 0;
+    m_toolclocks.resize(ntool);
+    for(ToolHandleArray<IMETAssocToolBase>::const_iterator iAssociator=m_metassociators.begin();
+	iAssociator != m_metassociators.end(); ++iAssociator) {
+      ToolHandle<IMETAssocToolBase> tool = *iAssociator;
       if( tool.retrieve().isFailure() ) {
 	ATH_MSG_FATAL("Failed to retrieve tool: " << tool->name());
 	return StatusCode::FAILURE;
       };
       ATH_MSG_INFO("Retrieved tool: " << tool->name() );
+      m_toolclocks[itool].Reset();
+      ++itool;
     }
+    m_clock.Reset();
 
     return StatusCode::SUCCESS;
   }
@@ -161,6 +168,37 @@ namespace met {
   {
     ATH_MSG_INFO ("Finalizing " << name() << "...");
 
+    if ( m_timedetail > 0 ) {
+      double ctime = m_clock.CpuTime()*1000;
+      double wtime = m_clock.RealTime()*1000;
+      double actime = 0.0;
+      double awtime = 0.0;
+      if ( m_nevt > 0 ) {
+	actime = ctime/double(m_nevt);
+	awtime = wtime/double(m_nevt);
+      }
+      ATH_MSG_INFO("  Total CPU/wall time: " << ctime << "/" << wtime << " ms");
+      ATH_MSG_INFO("   Avg. CPU/wall time: " << actime << "/" << awtime << " ms");
+    }
+
+    if ( m_timedetail > 1 && m_nevt > 0 ) {
+      unsigned int ntool = m_metassociators.size();
+      ATH_MSG_INFO("  CPU/wall time [ms] for " << ntool << " tools:");
+      unsigned int itool=0;
+
+      // time associators
+      for(ToolHandleArray<IMETAssocToolBase>::const_iterator iAssociator=m_metassociators.begin();
+	  iAssociator != m_metassociators.end(); ++iAssociator) {
+	ToolHandle<IMETAssocToolBase> th = *iAssociator;
+	double tctime = m_toolclocks[itool].CpuTime()/double(m_nevt)*1000;
+	double twtime = m_toolclocks[itool].RealTime()/double(m_nevt)*1000;
+	ATH_MSG_INFO("    " << setw(30) << th.typeAndName()
+		     << fixed << setprecision(3) << setw(10) << tctime
+		     << fixed << setprecision(3) << setw(10) << twtime);
+	++itool;
+      }
+    }
+
     return StatusCode::SUCCESS;
   }
 
@@ -179,6 +217,8 @@ namespace met {
   StatusCode METAssociationTool::buildMET(xAOD::MissingETContainer* metCont, xAOD::MissingETAssociationMap* metMap) const
   {
 
+    if ( m_timedetail > 0 ) m_clock.Start(false);
+
     // Set the topocluster signal states for the duration of this method
     // Cluster signal states will revert upon the return.
     CaloClusterChangeSignalStateList stateHelperList;    
@@ -194,17 +234,31 @@ namespace met {
       }
     }
 
+    unsigned int itool=0;
     // Run the MET reconstruction tools in sequence
-    for(ToolHandleArray<IMETAssocToolBase>::const_iterator iBuilder=m_metassociators.begin();
-	iBuilder != m_metassociators.end(); ++iBuilder) {
-      ToolHandle<IMETAssocToolBase> tool = *iBuilder;
+    for(ToolHandleArray<IMETAssocToolBase>::const_iterator iAssociator=m_metassociators.begin();
+	iAssociator != m_metassociators.end(); ++iAssociator) {
+      ToolHandle<IMETAssocToolBase> tool = *iAssociator;
+      if ( m_timedetail > 1 ) m_toolclocks[itool].Start(false);
       if (tool->execute(metCont,metMap).isFailure()){
         ATH_MSG_WARNING("Failed to execute tool: " << tool->name());
+	if ( m_timedetail > 0 ) m_clock.Stop();
+	if ( m_timedetail > 1 ) m_toolclocks[itool].Stop();
         return StatusCode::FAILURE;
       }
+      if ( m_timedetail > 1 ) {
+	m_toolclocks[itool].Stop();
+	ATH_MSG_VERBOSE("  " << tool->name() << " CPU/wall time: " << m_clock.CpuTime()*1000
+			<< "/" << m_clock.RealTime()*1000 << " ms");
+      }
+      ++itool;
     }
     bool foundOverlaps = metMap->identifyOverlaps();
     ATH_MSG_DEBUG( (foundOverlaps ? "Overlaps" : "No overlaps") << " identified!");
+    if ( m_timedetail > 0 ) m_clock.Stop();
+    ATH_MSG_DEBUG("  " << this->name() << " total CPU/wall time: " << m_clock.CpuTime()*1000
+		  << "/" << m_clock.RealTime()*1000 << " ms");
+    ++m_nevt;
     return StatusCode::SUCCESS;
   }
 
diff --git a/Reconstruction/MET/METReconstruction/Root/METAssociator.cxx b/Reconstruction/MET/METReconstruction/Root/METAssociator.cxx
index af80083e07952a8be6050dcb532710ccddba9f84..b7f87b573f76ae72c98caa875318f9bc91c172c8 100644
--- a/Reconstruction/MET/METReconstruction/Root/METAssociator.cxx
+++ b/Reconstruction/MET/METReconstruction/Root/METAssociator.cxx
@@ -55,7 +55,7 @@ namespace met {
     declareProperty( "PFlow",              m_pflow       = false                 );
     declareProperty( "UseRapidity",        m_useRapidity = false                 );
     declareProperty( "PFOTool",            m_pfotool                             );
-    declareProperty( "UseIsolationTools",  m_useIsolationTools=false             );
+    declareProperty( "UseIsolationTools",  m_useIsolationTools=true              );
     declareProperty( "TrackSelectorTool",  m_trkseltool                          );
     declareProperty( "TrackIsolationTool", m_trkIsolationTool                    );
     declareProperty( "CaloIsolationTool",  m_caloIsolationTool                   );
@@ -63,6 +63,8 @@ namespace met {
     declareProperty( "IgnoreJetConst",     m_skipconst = false                   );
     declareProperty( "ForwardColl",        m_forcoll   = ""            );
     declareProperty( "ForwardDef",         m_foreta    = 2.5                     );
+    declareProperty( "CentralTrackPtThr",  m_cenTrackPtThr = 200e+3              );
+    declareProperty( "ForwardTrackPtThr",  m_forTrackPtThr = 120e+3              );
   }
 
   // Destructor
@@ -334,8 +336,8 @@ namespace met {
   bool METAssociator::isGoodEoverP(const xAOD::TrackParticle* trk,const xAOD::IParticleContainer*& tcCont) const
   {
 
-    if( (fabs(trk->eta())<1.5 && trk->pt()>200e3) ||
-	(fabs(trk->eta())>=1.5 && trk->pt()>120e3) ) {
+    if( (fabs(trk->eta())<1.5 && trk->pt()>m_cenTrackPtThr) ||
+	(fabs(trk->eta())>=1.5 && trk->pt()>m_forTrackPtThr) ) {
 
       // Get relative error on qoverp
       float Rerr = Amg::error(trk->definingParametersCovMatrix(),4)/fabs(trk->qOverP());
@@ -398,7 +400,7 @@ namespace met {
       if(isolfrac<0.1) {
 	    // isolated track cuts
 	    if(Rerr>0.4) return false;
-	    else if (EoverP<0.65 && (EoverP>0.1 || Rerr>0.1)) return false;
+	    else if (EoverP<0.65 && ((EoverP>0.1 && Rerr>0.05) || Rerr>0.1)) return false;
       } else {
 	    // non-isolated track cuts
 	    float trkptsum = ptcone20+trk->pt();
diff --git a/Reconstruction/MET/METReconstruction/Root/METJetAssocTool.cxx b/Reconstruction/MET/METReconstruction/Root/METJetAssocTool.cxx
index 8dc2a47171642757534a21c4767d21e8826e13f2..b7e49c1c01e25bbf0afe12af316c9d85913a092c 100644
--- a/Reconstruction/MET/METReconstruction/Root/METJetAssocTool.cxx
+++ b/Reconstruction/MET/METReconstruction/Root/METJetAssocTool.cxx
@@ -125,7 +125,7 @@ namespace met {
 	selectedTracks.reserve(jettracks.size());
 	for(const auto& trk : jettracks) {
 	  const TrackParticle* pTrk = static_cast<const TrackParticle*>(trk);
-	  if( acceptTrack(pTrk,pv) ) {
+          if(acceptTrack(pTrk,pv) && isGoodEoverP(pTrk,tcCont)) {
 	    selectedTracks.push_back(trk);
 	    ATH_MSG_VERBOSE("Accept track " << trk << " px, py = " << trk->p4().Px() << ", " << trk->p4().Py());
 	  }
diff --git a/Reconstruction/MET/METReconstruction/Root/METMuonAssociator.cxx b/Reconstruction/MET/METReconstruction/Root/METMuonAssociator.cxx
index 28cb767f9513dc41277572a2b0d72bba1880554d..ab05bea4f8d6da06c88949248eb9687d9a208ed7 100644
--- a/Reconstruction/MET/METReconstruction/Root/METMuonAssociator.cxx
+++ b/Reconstruction/MET/METReconstruction/Root/METMuonAssociator.cxx
@@ -32,7 +32,9 @@ namespace met {
   METMuonAssociator::METMuonAssociator(const std::string& name) : 
     AsgTool(name),
     METAssociator(name)
-  {}
+  {
+    declareProperty("DoClusterMatch", m_doMuonClusterMatch=true);
+  }
 
   // Destructor
   ///////////////
@@ -91,7 +93,7 @@ namespace met {
   {
     const xAOD::Muon *mu = static_cast<const xAOD::Muon*>(obj);
     const CaloCluster* muclus = mu->cluster();
-    if(muclus) {
+    if(muclus && m_doMuonClusterMatch) {
       ATH_MSG_VERBOSE("Muon " << mu->index() << " with pt " << mu->pt()
 		   << ", eta "   << mu->eta()
 		   << ", phi " << mu->phi()
diff --git a/Reconstruction/MET/METReconstruction/Root/METRecoTool.cxx b/Reconstruction/MET/METReconstruction/Root/METRecoTool.cxx
index 5b67302983bd5095275b58be444ec325af62ab24..402c1c137b6360a60a982d54f552e9ddb3a76d12 100644
--- a/Reconstruction/MET/METReconstruction/Root/METRecoTool.cxx
+++ b/Reconstruction/MET/METReconstruction/Root/METRecoTool.cxx
@@ -199,10 +199,10 @@ namespace met {
       // time builders
       for(ToolHandleArray<IMETToolBase>::const_iterator iBuilder=m_metbuilders.begin();
 	  iBuilder != m_metbuilders.end(); ++iBuilder) {
-	ToolHandle<IMETToolBase> tool = *iBuilder;
+	ToolHandle<IMETToolBase> th = *iBuilder;
 	double tctime = m_toolclocks[itool].CpuTime()/double(m_nevt)*1000;
 	double twtime = m_toolclocks[itool].RealTime()/double(m_nevt)*1000;
-	ATH_MSG_INFO("    " << setw(30) << tool->name()
+	ATH_MSG_INFO("    " << setw(30) << th.typeAndName()
 		     << fixed << setprecision(3) << setw(10) << tctime
 		     << fixed << setprecision(3) << setw(10) << twtime);
 	++itool;
@@ -211,10 +211,10 @@ namespace met {
       // time refiners
       for(ToolHandleArray<IMETToolBase>::const_iterator iRefiner=m_metrefiners.begin();
 	  iRefiner != m_metrefiners.end(); ++iRefiner) {
-	ToolHandle<IMETToolBase> tool = *iRefiner;
+	ToolHandle<IMETToolBase> th = *iRefiner;
 	double tctime = m_toolclocks[itool].CpuTime()/double(m_nevt)*1000;
 	double twtime = m_toolclocks[itool].RealTime()/double(m_nevt)*1000;
-	ATH_MSG_INFO("    " << setw(30) << tool->name()
+	ATH_MSG_INFO("    " << setw(30) << th.typeAndName()
 		     << fixed << setprecision(3) << setw(10) << tctime
 		     << fixed << setprecision(3) << setw(10) << twtime);
 	++itool;
diff --git a/Reconstruction/MET/METReconstruction/Root/METTrackFilterTool.cxx b/Reconstruction/MET/METReconstruction/Root/METTrackFilterTool.cxx
index 4f82e7b5669d49947750953f23cce6f75a800468..e65b944af09b39393d96b4c887f8aa4bcba1e42e 100644
--- a/Reconstruction/MET/METReconstruction/Root/METTrackFilterTool.cxx
+++ b/Reconstruction/MET/METReconstruction/Root/METTrackFilterTool.cxx
@@ -65,9 +65,11 @@ namespace met {
     declareProperty( "TrackSelectorTool",  m_trkseltool                         );
     declareProperty( "TrackVxAssocTool",   m_trkToVertexTool                    );
     declareProperty( "DoLepRecovery",      m_doLepRecovery=false                );
-    declareProperty( "UseIsolationTools",  m_useIsolationTools=false            );
+    declareProperty( "UseIsolationTools",  m_useIsolationTools=true             );
     declareProperty( "TrackIsolationTool", m_trkIsolationTool                   );
     declareProperty( "CaloIsolationTool",  m_caloIsolationTool                  );
+    declareProperty( "CentralTrackPtThr",  m_cenTrackPtThr = 200e+3             );
+    declareProperty( "ForwardTrackPtThr",  m_forTrackPtThr = 120e+3             );
   }
 
   // Destructor
@@ -124,8 +126,8 @@ namespace met {
 					const std::vector<const xAOD::TrackParticle*>& trkList,
 					const xAOD::CaloClusterContainer* clusters) const {
 
-    if( (fabs(trk->eta())<1.5 && trk->pt()>200e3) ||
-    	(fabs(trk->eta())>=1.5 && trk->pt()>120e3) ) {
+    if( (fabs(trk->eta())<1.5 && trk->pt()>m_cenTrackPtThr) ||
+    	(fabs(trk->eta())>=1.5 && trk->pt()>m_forTrackPtThr) ) {
 
       // Get relative error on qoverp
       float Rerr = Amg::error(trk->definingParametersCovMatrix(),4)/fabs(trk->qOverP());
@@ -190,7 +192,7 @@ namespace met {
       if(isolfrac<0.1) {
 		// isolated track cuts
 		if(Rerr>0.4) return false;
-		else if (EoverP<0.65 && (EoverP>0.1 || Rerr>0.1)) return false;
+		else if (EoverP<0.65 && ((EoverP>0.1 && Rerr>0.05) || Rerr>0.1)) return false;
           } else {
 		// non-isolated track cuts
 		float trkptsum = ptcone20+trk->pt();
diff --git a/Reconstruction/MET/METReconstruction/python/METAssocConfig.py b/Reconstruction/MET/METReconstruction/python/METAssocConfig.py
index 04f37e5bba364d099be58f7438b6f833724560b1..547d064c1f671b4fae04ea1f285bd519e94213b9 100644
--- a/Reconstruction/MET/METReconstruction/python/METAssocConfig.py
+++ b/Reconstruction/MET/METReconstruction/python/METAssocConfig.py
@@ -30,22 +30,6 @@ defaultInputKey = {
    'EMOCClusColl':'EMOriginTopoClusters',
    }
 
-# # old naming scheme
-# defaultInputKey = {
-#     'Ele'       :'ElectronCollection',
-#     'Gamma'     :'PhotonCollection',
-#     'Tau'       :'TauRecContainer',
-#     'LCJet'     :'AntiKt4LCTopoJets',
-#     'EMJet'     :'AntiKt4EMTopoJets',
-#     'PFlowJet'  :'AntiKt4EMPFlowJets',
-#     'Muon'      :'Muons',
-#     'Soft'      :'',
-#     'ClusColl'  :'CaloCalTopoCluster',
-#     'TrkColl'   :'InDetTrackParticles',
-#     'PrimVxColl':'PrimaryVertices',
-#     'Truth'     :'TruthParticle',
-#     }
-
 prefix = 'METAssocConfig:   '
 
 #################################################################################
@@ -85,12 +69,12 @@ def getAssociator(config,suffix,doPFlow=False,
         tool = CfgMgr.met__METMuonAssociator('MET_MuonAssociator_'+suffix)
     if config.objType == 'Soft':
         tool = CfgMgr.met__METSoftAssociator('MET_SoftAssociator_'+suffix)
+        tool.DecorateSoftConst = True
         if doOriginCorrClus:
             tool.LCModClusterKey = defaultInputKey['LCOCClusColl']
             tool.EMModClusterKey = defaultInputKey['EMOCClusColl']
     if config.objType == 'Truth':
         tool = CfgMgr.met__METTruthAssociator('MET_TruthAssociator_'+suffix)
-        ToolSvc == tool
         tool.RecoJetKey = config.inputKey
     if doPFlow:
         pfotool = CfgMgr.CP__RetrievePFOTool('MET_PFOTool_'+suffix)
@@ -116,11 +100,12 @@ def getAssociator(config,suffix,doPFlow=False,
     #
     tool.TrackSelectorTool = trkseltool
     #
-    tool.UseIsolationTools = False #True
+    tool.UseIsolationTools = True
     tool.TrackIsolationTool = trkisotool
     tool.CaloIsolationTool = caloisotool
 
-    ToolSvc += tool
+    if not hasattr(ToolSvc,tool.name()):
+       ToolSvc += tool
     return tool
 
 #################################################################################
@@ -175,14 +160,17 @@ class METAssocConfig:
                                                                   CutLevel="TightPrimary",
                                                                   maxZ0SinTheta=3,
                                                                   maxD0=2)
-            ToolSvc += self.trkseltool
+            if not hasattr(ToolSvc,self.trkseltool.name()):
+                ToolSvc += self.trkseltool
 
         self.trkisotool = CfgMgr.xAOD__TrackIsolationTool("TrackIsolationTool_MET")
         self.trkisotool.TrackSelectionTool = self.trkseltool # As configured above
-        ToolSvc += self.trkisotool
+        if not hasattr(ToolSvc,self.trkisotool.name()):
+            ToolSvc += self.trkisotool
 
         self.caloisotool = CfgMgr.xAOD__CaloIsolationTool("CaloIsolationTool_MET")
-        ToolSvc += self.caloisotool
+        if not hasattr(ToolSvc,self.caloisotool.name()):
+            ToolSvc += self.caloisotool
 
         self.associators = {}
         self.assoclist = [] # need an ordered list
@@ -205,7 +193,8 @@ def getMETAssocTool(topconfig):
         assocTool = CfgMgr.met__METAssociationTool('MET_AssociationTool_'+topconfig.suffix,
                                                    METAssociators = topconfig.assoclist,
                                                    METSuffix = topconfig.suffix,
-                                                   TCSignalState=tcstate)
+                                                   TCSignalState=tcstate,
+                                                   TimingDetail=0)
         if metFlags.AllowOverwrite:
             assocTool.AllowOverwrite = True
     return assocTool
diff --git a/Reconstruction/MET/METReconstruction/python/METAssocConfig_readAOD.py b/Reconstruction/MET/METReconstruction/python/METAssocConfig_readAOD.py
new file mode 100644
index 0000000000000000000000000000000000000000..51aa6d682256f85b9f99f905518454ef96e5b5cd
--- /dev/null
+++ b/Reconstruction/MET/METReconstruction/python/METAssocConfig_readAOD.py
@@ -0,0 +1,240 @@
+# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+
+
+
+from AthenaCommon import CfgMgr
+
+#################################################################################
+# Define some default values
+
+clusterSigStates = {
+    'EMScale':0,
+    'LocHad':1,
+    'Mod':1
+}
+
+defaultInputKey = {
+   'Ele'       :'Electrons',
+   'Gamma'     :'Photons',
+   'Tau'       :'TauJets',
+   'LCJet'     :'AntiKt4LCTopoJets',
+   'EMJet'     :'AntiKt4EMTopoJets',
+   'PFlowJet'  :'AntiKt4EMPFlowJets',
+   'Muon'      :'Muons',
+   'Soft'      :'',
+   'ClusColl'  :'CaloCalTopoClusters',
+   'TrkColl'   :'InDetTrackParticles',
+   'PrimVxColl':'PrimaryVertices',
+   'Truth'     :'TruthParticles',
+   'LCOCClusColl':'LCOriginTopoClusters',
+   'EMOCClusColl':'EMOriginTopoClusters',
+   }
+
+# # old naming scheme
+# defaultInputKey = {
+#     'Ele'       :'ElectronCollection',
+#     'Gamma'     :'PhotonCollection',
+#     'Tau'       :'TauRecContainer',
+#     'LCJet'     :'AntiKt4LCTopoJets',
+#     'EMJet'     :'AntiKt4EMTopoJets',
+#     'PFlowJet'  :'AntiKt4EMPFlowJets',
+#     'Muon'      :'Muons',
+#     'Soft'      :'',
+#     'ClusColl'  :'CaloCalTopoCluster',
+#     'TrkColl'   :'InDetTrackParticles',
+#     'PrimVxColl':'PrimaryVertices',
+#     'Truth'     :'TruthParticle',
+#     }
+
+prefix = 'METAssocConfig:   '
+
+#################################################################################
+# Configuration of builders
+
+class AssocConfig:
+    def __init__(self,objType='',inputKey=''):
+        self.objType = objType
+        self.inputKey = inputKey
+
+def getAssociator(config,suffix,doPFlow=False,
+                  trkseltool=None,trkisotool=None,caloisotool=None,
+                  doOriginCorrClus=True):
+    tool = None
+
+    import cppyy
+    try: cppyy.loadDictionary('METReconstructionDict')
+    except: pass
+
+    from AthenaCommon.AppMgr import ToolSvc
+    # Construct tool and set defaults for case-specific configuration
+    if config.objType == 'Ele':
+        from ROOT import met
+        tool = CfgMgr.met__METElectronAssociator('MET_ElectronAssociator_'+suffix,TCMatchMethod=met.DeltaR)
+    if config.objType == 'Gamma':
+        from ROOT import met
+        tool = CfgMgr.met__METPhotonAssociator('MET_PhotonAssociator_'+suffix,TCMatchMethod=met.DeltaR)
+    if config.objType == 'Tau':
+        tool = CfgMgr.met__METTauAssociator('MET_TauAssociator_'+suffix)
+    if config.objType == 'LCJet':
+        tool = CfgMgr.met__METJetAssocTool('MET_LCJetAssocTool_'+suffix)
+    if config.objType == 'EMJet':
+        tool = CfgMgr.met__METJetAssocTool('MET_EMJetAssocTool_'+suffix)
+    if config.objType == 'PFlowJet':
+        tool = CfgMgr.met__METJetAssocTool('MET_PFlowJetAssocTool_'+suffix)
+    if config.objType == 'Muon':
+        tool = CfgMgr.met__METMuonAssociator('MET_MuonAssociator_'+suffix,DoClusterMatch=False)
+    if config.objType == 'Soft':
+        tool = CfgMgr.met__METSoftAssociator('MET_SoftAssociator_'+suffix)
+        if doOriginCorrClus:
+            tool.LCModClusterKey = defaultInputKey['LCOCClusColl']
+            tool.EMModClusterKey = defaultInputKey['EMOCClusColl']
+    if config.objType == 'Truth':
+        tool = CfgMgr.met__METTruthAssociator('MET_TruthAssociator_'+suffix)
+        ToolSvc == tool
+        tool.RecoJetKey = config.inputKey
+    if doPFlow:
+        pfotool = CfgMgr.CP__RetrievePFOTool('MET_PFOTool_'+suffix)
+        ToolSvc += pfotool
+        tool.PFOTool = pfotool
+        tool.PFlow = True
+    else:
+        tool.UseModifiedClus = doOriginCorrClus
+
+    # set input/output key names
+    if config.inputKey == '':
+        tool.InputCollection = defaultInputKey[config.objType]
+        config.inputKey = tool.InputCollection
+        if doOriginCorrClus:
+            tool.ClusColl = defaultInputKey['LCOCClusColl']
+            if 'EMTopo' in suffix: tool.ClusColl = defaultInputKey['EMOCClusColl']
+        tool.TrkColl = defaultInputKey['TrkColl']
+    else:
+        tool.InputCollection = config.inputKey
+
+    from METReconstruction.METRecoFlags import metFlags
+    tool.UseTracks = metFlags.UseTracks()
+    #
+    tool.TrackSelectorTool = trkseltool
+    #
+    tool.UseIsolationTools = True
+    tool.TrackIsolationTool = trkisotool
+    tool.CaloIsolationTool = caloisotool
+    #tool.UseLowThreshold = False
+
+    ToolSvc += tool
+    return tool
+
+#################################################################################
+# Top level MET configuration
+
+class METAssocConfig:
+    def outputCollections(self):
+        if doTruth: return 'MET_Core_'+self.suffix
+        else: return 'MET_Core_'+self.suffix,'MET_Reference_'+self.suffix
+    #
+    def outputMap(self):
+        return 'METAssoc_'+self.suffix
+        return 'METAssoc_'+self.suffix
+    #
+    def setupAssociators(self,buildconfigs):
+        print prefix, 'Setting up associators for MET config '+self.suffix
+        for config in buildconfigs:
+            if config.objType in self.associators:
+                print prefix, 'Config '+self.suffix+' already contains a associator of type '+config.objType
+                raise LookupError
+            else:
+                associator = getAssociator(config=config,suffix=self.suffix,
+                                           doPFlow=self.doPFlow,
+                                           trkseltool=self.trkseltool,
+                                           trkisotool=self.trkisotool,
+                                           caloisotool=self.caloisotool,
+                                           doOriginCorrClus=self.doOriginCorrClus)
+                from METReconstruction.METRecoFlags import metFlags
+                if config.objType == 'Soft' and metFlags.DecorateSoftConst:
+                    print "activate soft term decoration"
+                    associator.DecorateSoftConst = True
+                self.associators[config.objType] = associator
+                self.assoclist.append(associator)
+                print prefix, '  Added '+config.objType+' tool named '+associator.name()
+    #
+    def __init__(self,suffix,buildconfigs=[],
+                 doPFlow=False,doTruth=False,
+                 trksel=None,doOriginCorrClus=False):
+        if doTruth:
+            print prefix, 'Creating MET TruthAssoc config \''+suffix+'\''
+        else:
+            print prefix, 'Creating MET Assoc config \''+suffix+'\''
+        self.suffix = suffix
+        self.doPFlow = doPFlow
+        self.doOriginCorrClus=doOriginCorrClus
+        self.doTruth = doTruth
+        from AthenaCommon.AppMgr import ToolSvc
+        if trksel:
+            self.trkseltool = trksel
+        else:
+            self.trkseltool=CfgMgr.InDet__InDetTrackSelectionTool("IDTrkSel_METAssoc",
+                                                                  CutLevel="TightPrimary",
+                                                                  maxZ0SinTheta=3,
+                                                                  maxD0=2)
+            ToolSvc += self.trkseltool
+
+        self.trkisotool = CfgMgr.xAOD__TrackIsolationTool("TrackIsolationTool_MET")
+        self.trkisotool.TrackSelectionTool = self.trkseltool # As configured above
+        ToolSvc += self.trkisotool
+
+        self.caloisotool = CfgMgr.xAOD__CaloIsolationTool("CaloIsolationTool_MET")
+        self.caloisotool.addCaloExtensionDecoration = False
+        ToolSvc += self.caloisotool
+
+        self.associators = {}
+        self.assoclist = [] # need an ordered list
+        #
+        self.setupAssociators(buildconfigs)
+
+# Set up a top-level tool with mostly defaults
+def getMETAssocTool(topconfig):
+    assocTool = None
+    from METReconstruction.METRecoFlags import metFlags
+    if topconfig.doTruth:
+        assocTool = CfgMgr.met__METAssociationTool('MET_TruthAssociationTool_'+topconfig.suffix,
+                                                   METAssociators = topconfig.assoclist,
+                                                   METSuffix = topconfig.suffix)
+    else:
+        tcstate = clusterSigStates['LocHad']
+        if 'EMTopo' in topconfig.suffix: tcstate = clusterSigStates['EMScale']
+        if topconfig.doOriginCorrClus:
+            tcstate = clusterSigStates['Mod']
+        assocTool = CfgMgr.met__METAssociationTool('MET_AssociationTool_'+topconfig.suffix,
+                                                   METAssociators = topconfig.assoclist,
+                                                   METSuffix = topconfig.suffix,
+                                                   TCSignalState=tcstate)
+        if metFlags.AllowOverwrite:
+            assocTool.AllowOverwrite = True
+    return assocTool
+
+# Allow user to configure reco tools directly or get more default configurations
+def getMETAssocAlg(algName='METAssociation',configs={},tools=[]):
+
+    assocTools = []
+    assocTools += tools
+
+    from METReconstruction.METRecoFlags import metFlags
+    if configs=={} and tools==[]:
+        print prefix, 'Taking configurations from METRecoFlags'
+        configs = metFlags.METAssocConfigs()
+        print configs
+    for key,conf in configs.iteritems():
+        print prefix, 'Generate METAssocTool for MET_'+key
+        assoctool = getMETAssocTool(conf)
+        assocTools.append(assoctool)
+        metFlags.METAssocTools()[key] = assoctool
+
+    from AthenaCommon.AppMgr import ToolSvc
+    for tool in assocTools:
+        ToolSvc += tool
+        print prefix, 'Added METAssocTool \''+tool.name()+'\' to alg '+algName
+
+    assocAlg = CfgMgr.met__METRecoAlg(name=algName,
+                                      RecoTools=assocTools)
+#    assocAlg.OutputLevel=DEBUG
+    return assocAlg
diff --git a/Reconstruction/MET/METReconstruction/python/METRecoConfig.py b/Reconstruction/MET/METReconstruction/python/METRecoConfig.py
index 6bb49cbadaa0d2ac2604cd0ef1f1d6424be85e6d..012734561499553d0368e641d422ba7690eb2f71 100644
--- a/Reconstruction/MET/METReconstruction/python/METRecoConfig.py
+++ b/Reconstruction/MET/METReconstruction/python/METRecoConfig.py
@@ -98,7 +98,8 @@ def getBuilder(config,suffix,doTracks,doCells,doTriggerMET,doOriginCorrClus):
         tool.InputComposition = 'PFlow'
         pfotool = CfgMgr.CP__RetrievePFOTool('MET_PFOTool_'+suffix)
         from AthenaCommon.AppMgr import ToolSvc
-        ToolSvc += pfotool
+        if not hasattr(ToolSvc,pfotool.name()):
+            ToolSvc += pfotool
         tool.PFOTool = pfotool
     if suffix == 'Truth':
         tool = CfgMgr.met__METTruthTool('MET_TruthTool_'+config.objType)
@@ -130,7 +131,8 @@ def getBuilder(config,suffix,doTracks,doCells,doTriggerMET,doOriginCorrClus):
         else:
             tool.MissingETKey = config.outputKey
     from AthenaCommon.AppMgr import ToolSvc
-    ToolSvc += tool
+    if not hasattr(ToolSvc,tool.name()):
+       ToolSvc += tool
     return tool
 
 #################################################################################
@@ -163,7 +165,8 @@ def getRefiner(config,suffix,trkseltool=None,trkvxtool=None,trkisotool=None,calo
     if config.type == 'MuonEloss':
         tool = CfgMgr.met__METMuonElossTool('MET_MuonElossTool_'+suffix)
     tool.MissingETKey = config.outputKey
-    ToolSvc += tool
+    if not hasattr(ToolSvc,tool.name()):
+        ToolSvc += tool
     return tool
 
 #################################################################################
@@ -178,7 +181,8 @@ def getRegions(config,suffix):
     tool.InputMETKey = config.outputKey
     tool.RegionValues = [ 1.5, 3.2, 10 ]
     from AthenaCommon.AppMgr import ToolSvc
-    ToolSvc += tool
+    if not hasattr(ToolSvc,tool.name()):
+        ToolSvc += tool
     return tool
 
 #################################################################################
@@ -258,20 +262,24 @@ class METConfig:
         #
         from AthenaCommon.AppMgr import ToolSvc
         self.trkseltool=CfgMgr.InDet__InDetTrackSelectionTool("IDTrkSel_MET",
-                                                         CutLevel="TightPrimary",
-                                                         maxZ0SinTheta=3,
-                                                         maxD0=2)
-        ToolSvc += self.trkseltool
+                                                              CutLevel="TightPrimary",
+                                                              maxZ0SinTheta=3,
+                                                              maxD0=2)
+        if not hasattr(ToolSvc,self.trkseltool.name()):
+            ToolSvc += self.trkseltool
         #
         self.trkvxtool=CfgMgr.CP__TightTrackVertexAssociationTool("TightTrackVertexAssociationTool_MET", dzSinTheta_cut=1.5, doPV=False)
-        ToolSvc += self.trkvxtool
+        if not hasattr(ToolSvc,self.trkvxtool.name()):
+            ToolSvc += self.trkvxtool
         #
         self.trkisotool = CfgMgr.xAOD__TrackIsolationTool("TrackIsolationTool_MET")
         self.trkisotool.TrackSelectionTool = self.trkseltool # As configured above
-        ToolSvc += self.trkisotool
+        if not hasattr(ToolSvc,self.trkisotool.name()):
+            ToolSvc += self.trkisotool
         #
         self.caloisotool = CfgMgr.xAOD__CaloIsolationTool("CaloIsolationTool_MET")
-        ToolSvc += self.caloisotool
+        if not hasattr(ToolSvc,self.caloisotool.name()):
+            ToolSvc += self.caloisotool
 
         self.setupBuilders(buildconfigs)
         self.setupRefiners(refconfigs)
@@ -283,7 +291,8 @@ def getMETRecoTool(topconfig):
                                        METRefiners = topconfig.reflist,
                                        METContainer = topconfig.outputCollection(),
                                        METComponentMap = topconfig.outputMap(),
-                                       WarnIfDuplicate = topconfig.duplicateWarning)
+                                       WarnIfDuplicate = topconfig.duplicateWarning,
+                                       TimingDetail=0)
     if topconfig.doSum:
         recoTool.METFinalName = defaultOutputKey['Total']    
 
diff --git a/Reconstruction/MET/METReconstruction/share/RunMETReco_Associator.py b/Reconstruction/MET/METReconstruction/share/RunMETReco_Associator.py
index d492a6c814f789517ab88ee80f110db149465cbe..13bfe5d10313ed7a307e5f752f8b0881d8407ec7 100644
--- a/Reconstruction/MET/METReconstruction/share/RunMETReco_Associator.py
+++ b/Reconstruction/MET/METReconstruction/share/RunMETReco_Associator.py
@@ -3,17 +3,14 @@ from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
 from AthenaCommon.AppMgr import ServiceMgr
 from AthenaCommon import CfgMgr
 
-#import METReconstruction.METConfig_Calo
-
 from RecExConfig.RecFlags import rec
-#if rec.doTruth:
-#    import METReconstruction.METConfig_Truth
 
 filelist = [#"valid2.110401.PowhegPythia_P2012_ttbar_nonallhad.recon.AOD.e3099_s2578_r7226/AOD.06803710._000047.pool.root.1",
             #"valid2.110401.PowhegPythia_P2012_ttbar_nonallhad.recon.AOD.e3099_s2578_r7226/AOD.06803710._000254.pool.root.1",
-    "myESD.pool.root"
+#    "myESD.pool.root"
 #    "/atlas/data1/userdata/khoo/Data15/mc15_ESD/mc15_13TeV.422008.ParticleGun_single_ele_Pt100.recon.ESD.e4459_s2726_r7143_tid06642056_00/ESD.06642056._000021.pool.root.1"
-#    "/atlas/data1/userdata/khoo/Data15/mc15_ESD/mc15_13TeV.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.recon.ESD.e3698_s2608_s2183_r7509_tid07497143_00/ESD.07497143._000004.pool.root.1"
+    "/atlas/data1/userdata/khoo/Data15/ESD/valid1.110401.PowhegPythia_P2012_ttbar_nonallhad.recon.ESD.e3099_s2578_r7579_r7578_r7579/ESD.07670800._003079.pool.root.1",
+    "/atlas/data1/userdata/khoo/Data15/ESD/valid1.110401.PowhegPythia_P2012_ttbar_nonallhad.recon.ESD.e3099_s2578_r7579_r7578_r7579/ESD.07670800._003152.pool.root.1"
     ]
 from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
 athenaCommonFlags.FilesInput = filelist
@@ -36,25 +33,37 @@ globalflags.DetDescrVersion = inputFileSummary['geometry']
 
 from AthenaCommon.DetFlags import DetFlags
 DetFlags.detdescr.all_setOff()
-#DetFlags.detdescr.Calo_setOn()
+DetFlags.detdescr.Calo_setOn()
 if hasattr(DetFlags,'BField_on'): DetFlags.BField_setOn()
+from TrkDetDescrSvc.AtlasTrackingGeometrySvc import AtlasTrackingGeometrySvc
+AtlasTrackingGeometrySvc  = svcMgr.AtlasTrackingGeometrySvc
+#from AthenaCommon.CfgGetter import getService
+#getService("AtlasTrackingGeometrySvc")
 
 include('RecExCond/AllDet_detDescr.py')
 from AthenaCommon.AlgSequence import AlgSequence
 topSequence = AlgSequence()
 
+############################################################################
+# Rerun the AntiKt4EMTopoJets with newer config
+
+from JetRec.JetRecStandard import jtm
+jtm.addJetFinder("NewAntiKt4EMTopoJets",   "AntiKt", 0.4,   "emtopo", "calib", ghostArea=0.01, ptmin= 2000, ptminFilter= 5000, calibOpt="ar")
+from JetRec.JetAlgorithm import addJetRecoToAlgSequence
+addJetRecoToAlgSequence(eventShapeTools=[])
+
 ############################################################################
 # Set up muon and egamma topocluster links
-#egammaTCLinkAlg = CfgMgr.ClusterMatching__CaloClusterMatchLinkAlg("EgammaTCLinks",
-#                                                 ClustersToDecorate="egammaClusters")
-#egammatopoTCLinkAlg = CfgMgr.ClusterMatching__CaloClusterMatchLinkAlg("TopoEgammaTCLinks",
-#                                                     ClustersToDecorate="egammaTopoSeededClusters")
-#muonTCLinkAlg = CfgMgr.ClusterMatching__CaloClusterMatchLinkAlg("MuonTCLinks",
-#                                               ClustersToDecorate="MuonClusterCollection",
-#                                               UseLeadCellEtaPhi=True)
-#topSequence += egammaTCLinkAlg
-#topSequence += egammatopoTCLinkAlg
-# topSequence += muonTCLinkAlg
+egammaTCLinkAlg = CfgMgr.ClusterMatching__CaloClusterMatchLinkAlg("EgammaTCLinks",
+                                                 ClustersToDecorate="egammaClusters")
+egammatopoTCLinkAlg = CfgMgr.ClusterMatching__CaloClusterMatchLinkAlg("TopoEgammaTCLinks",
+                                                     ClustersToDecorate="egammaTopoSeededClusters")
+muonTCLinkAlg = CfgMgr.ClusterMatching__CaloClusterMatchLinkAlg("MuonTCLinks",
+                                               ClustersToDecorate="MuonClusterCollection",
+                                               UseLeadCellEtaPhi=True)
+topSequence += egammaTCLinkAlg
+topSequence += egammatopoTCLinkAlg
+topSequence += muonTCLinkAlg
 
 # Set up default configurations
 #import METReconstruction.METConfig_Associator
@@ -110,10 +119,10 @@ topSequence += metAlg
 from METUtilities.METMakerConfig import getMETMakerAlg
 for key,conf in metFlags.METAssocConfigs().iteritems():
     if not conf.doTruth:
-        makerAlg = getMETMakerAlg(conf.suffix,jetColl="AntiKt4EMTopoJets")
+        makerAlg = getMETMakerAlg(conf.suffix,jetColl="NewAntiKt4EMTopoJets")
         topSequence += makerAlg
-ToolSvc.METMaker_NewAntiKt4EMTopo.OutputLevel = DEBUG
-ToolSvc.METMaker_NewAntiKt4EMTopo_OriginCorr.OutputLevel = DEBUG
+#ToolSvc.METMaker_NewAntiKt4EMTopo.OutputLevel = DEBUG
+#ToolSvc.METMaker_NewAntiKt4EMTopo_OriginCorr.OutputLevel = DEBUG
 
 from METReconstruction.METRecoConfig import METConfig,BuildConfig
 
@@ -146,6 +155,7 @@ if write_xAOD:
     from AthenaCommon.Resilience import protectedInclude
     protectedInclude("METReconstruction/METReconstructionOutputAODList_jobOptions.py")
 
+    svcMgr.AthenaPoolCnvSvc.PoolAttributes += [ "DEFAULT_SPLITLEVEL ='99'" ]
     from OutputStreamAthenaPool.MultipleStreamManager import MSMgr
     xaodStream = MSMgr.NewPoolRootStream( "StreamAOD", "xAOD.pool.root" )
     for item in MissingETAODList:
@@ -154,6 +164,19 @@ if write_xAOD:
     xaodStream.AddItem('xAOD::MissingETContainer#MET_LocHadTopo')
     xaodStream.AddItem('xAOD::MissingETAuxContainer#MET_LocHadTopoAux.')
 
-theApp.EvtMax = 10
+    for jetrec in jtm.jetrecs:
+      xaodStream.AddItem("xAOD::JetContainer#" + jetrec.name())
+      xaodStream.AddItem("xAOD::JetAuxContainer#" + jetrec.name() + "Aux.")
+
+      xaodStream.AddItem("xAOD::CaloClusterContainer#EMOriginTopoClusters")
+      xaodStream.AddItem("xAOD::CaloClusterContainer#LCOriginTopoClusters")
+      xaodStream.AddItem("xAOD::ShallowAuxContainer#LCOriginTopoClustersAux.")
+      xaodStream.AddItem("xAOD::ShallowAuxContainer#EMOriginTopoClustersAux.")
+
+from Valkyrie.JobOptCfg import ValgrindSvc
+svcMgr += ValgrindSvc( OutputLevel = VERBOSE,
+                       ProfiledAlgs = ["jetalg","METAssociation"] )
+
+theApp.EvtMax = 100
 ServiceMgr.EventSelector.SkipEvents = 0
 ServiceMgr.MessageSvc.defaultLimit = 9999
diff --git a/Reconstruction/MET/METReconstruction/share/RunMETReco_Associator_AOD.py b/Reconstruction/MET/METReconstruction/share/RunMETReco_Associator_AOD.py
new file mode 100644
index 0000000000000000000000000000000000000000..c4aa17de227d2d350ca64b728358fe5484f28aff
--- /dev/null
+++ b/Reconstruction/MET/METReconstruction/share/RunMETReco_Associator_AOD.py
@@ -0,0 +1,135 @@
+options=locals()
+options.setdefault('EvtMax',10)
+options.setdefault('UseIsolationTools',True)
+options.setdefault('Inputfile',"/home/masaito/maxi183/datafiles/mc15_13TeV/AOD/mc15_13TeV.361107.PowhegPythia8EvtGen_AZNLOCTEQ6L1_Zmumu.merge.AOD.e3601_s2576_s2132_r7725_r7676/AOD.07918963._000185.pool.root.1")
+options.setdefault('Outputfile',"xAOD.pool.root")
+
+import AthenaPoolCnvSvc.ReadAthenaPool
+from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
+from AthenaCommon.AppMgr import ServiceMgr
+from AthenaCommon import CfgMgr
+
+#import METReconstruction.METConfig_Calo
+
+from RecExConfig.RecFlags import rec
+#if rec.doTruth:
+#    import METReconstruction.METConfig_Truth
+
+filelist = [#"valid2.110401.PowhegPythia_P2012_ttbar_nonallhad.recon.AOD.e3099_s2578_r7226/AOD.06803710._000047.pool.root.1",
+            #"valid2.110401.PowhegPythia_P2012_ttbar_nonallhad.recon.AOD.e3099_s2578_r7226/AOD.06803710._000254.pool.root.1",
+#    "myESD.pool.root"
+#    "/atlas/data1/userdata/khoo/Data15/mc15_ESD/mc15_13TeV.422008.ParticleGun_single_ele_Pt100.recon.ESD.e4459_s2726_r7143_tid06642056_00/ESD.06642056._000021.pool.root.1"
+#    "/atlas/data1/userdata/khoo/Data15/mc15_ESD/mc15_13TeV.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.recon.ESD.e3698_s2608_s2183_r7509_tid07497143_00/ESD.07497143._000004.pool.root.1"
+#    "/atlas/data1/userdata/khoo/Data15/xAOD_20.7/mc15_13TeV.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.merge.AOD.e3698_s2608_s2183_r7725_r7676/AOD.07915894._000339.pool.root.1"
+#     "/home/masaito/data4/QualificationTask/MakeMETReconstruction_aodtoaod3_2/test01/run/output_new/AODM/output.AOD.pool.root"
+#     "/home/masaito/maxi183/datafiles/mc15_13TeV/AOD/mc15_13TeV.361107.PowhegPythia8EvtGen_AZNLOCTEQ6L1_Zmumu.merge.AOD.e3601_s2576_s2132_r7725_r7676/AOD.07918963._000185.pool.root.1"
+    ]
+from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
+#athenaCommonFlags.FilesInput = filelist
+athenaCommonFlags.FilesInput = [Inputfile]
+ServiceMgr.EventSelector.InputCollections = athenaCommonFlags.FilesInput()
+
+############################################################################
+# Set up detector description for cell access
+
+from AthenaCommon.GlobalFlags import globalflags
+globalflags.DetGeo = 'atlas'
+
+from RecExConfig.InputFilePeeker import inputFileSummary
+print inputFileSummary
+if inputFileSummary['evt_type'][0] == 'IS_DATA':
+    globalflags.DataSource = 'data'
+else:
+    globalflags.DataSource = 'geant4'
+
+globalflags.DetDescrVersion = inputFileSummary['geometry']
+
+from AthenaCommon.DetFlags import DetFlags
+DetFlags.detdescr.all_setOff()
+#DetFlags.detdescr.Calo_setOn()
+if hasattr(DetFlags,'BField_on'): DetFlags.BField_setOn()
+include('RecExCond/AllDet_detDescr.py')
+include('TrkDetDescrSvc/AtlasTrackingGeometrySvc.py')
+
+from AthenaCommon.AlgSequence import AlgSequence
+topSequence = AlgSequence()
+
+############################################################################
+# Set up muon and egamma topocluster links
+#egammaTCLinkAlg = CfgMgr.ClusterMatching__CaloClusterMatchLinkAlg("EgammaTCLinks",
+#                                                 ClustersToDecorate="egammaClusters")
+#egammatopoTCLinkAlg = CfgMgr.ClusterMatching__CaloClusterMatchLinkAlg("TopoEgammaTCLinks",
+#                                                     ClustersToDecorate="egammaTopoSeededClusters")
+#muonTCLinkAlg = CfgMgr.ClusterMatching__CaloClusterMatchLinkAlg("MuonTCLinks",
+#                                               ClustersToDecorate="MuonClusterCollection",
+#                                               UseLeadCellEtaPhi=True)
+#topSequence += egammaTCLinkAlg
+#topSequence += egammatopoTCLinkAlg
+# topSequence += muonTCLinkAlg
+
+# Set up default configurations
+#import METReconstruction.METConfig_Associator
+
+#include('RecExCond/AllDet_detDescr.py')
+from AthenaCommon.AlgSequence import AlgSequence
+topSequence = AlgSequence()
+
+############################################################################
+# Set up an extra associator for testing
+from METReconstruction.METRecoFlags import metFlags
+from METReconstruction.METAssocConfig_readAOD import AssocConfig, METAssocConfig
+JetType = 'EMJet'
+#todo check pflow
+
+associators = [AssocConfig(JetType),
+               AssocConfig('Muon'),
+               AssocConfig('Ele'),
+               AssocConfig('Gamma'),
+               AssocConfig('Tau'),
+               AssocConfig('Soft')]
+cfg_akt4em = METAssocConfig('NewAntiKt4EMTopo',
+                            associators,
+                            doPFlow=False,
+                            doOriginCorrClus=False
+                            )
+for assoc in cfg_akt4em.assoclist:
+	assoc.UseIsolationTools=UseIsolationTools
+
+metFlags.METAssocConfigs()[cfg_akt4em.suffix] = cfg_akt4em
+metFlags.METAssocOutputList().append(cfg_akt4em.suffix)
+
+from METReconstruction.METAssocConfig import getMETAssocAlg
+
+# Get the configuration directly from METRecoFlags
+# Can also provide a dict of configurations or list of RecoTools or both
+metAlg = getMETAssocAlg('METAssociation')
+topSequence += metAlg
+
+from METUtilities.METMakerConfig import getMETMakerAlg
+for key,conf in metFlags.METAssocConfigs().iteritems():
+    if not conf.doTruth:
+        makerAlg = getMETMakerAlg(conf.suffix,jetColl="AntiKt4EMTopoJets")
+        topSequence += makerAlg
+#ToolSvc.METMaker_NewAntiKt4EMTopo.OutputLevel = DEBUG
+
+from METReconstruction.METRecoConfig import METConfig,BuildConfig
+
+write_xAOD = True
+if write_xAOD:
+
+    # The list of output containers/maps is autogenerated and stored in metFlags
+    # This jO extracts them with the appropriate formatting
+    from AthenaCommon.Resilience import protectedInclude
+    protectedInclude("METReconstruction/METReconstructionOutputAODList_jobOptions.py")
+
+    from OutputStreamAthenaPool.MultipleStreamManager import MSMgr
+    xaodStream = MSMgr.NewPoolRootStream( "StreamAOD", Outputfile )
+    for item in MissingETAODList:
+        xaodStream.AddItem(item)
+
+    xaodStream.AddItem('xAOD::MissingETContainer#MET_Reference_AntiKt4EMTopo')
+    xaodStream.AddItem('xAOD::MissingETAuxContainer#MET_Reference_AntiKt4EMTopoAux.')
+
+theApp.EvtMax = EvtMax
+ServiceMgr.EventSelector.SkipEvents = 0
+ServiceMgr.MessageSvc.defaultLimit = 9999