diff --git a/LArCalorimeter/LArCalibTools/LArCalibTools/LArCond2NtupleBase.h b/LArCalorimeter/LArCalibTools/LArCalibTools/LArCond2NtupleBase.h
index fc8cff6d5a1fa9d1068a9c71bd1fb00161cf5484..3bb442fb849ece6f223646b80d9c74f6b352bab4 100644
--- a/LArCalorimeter/LArCalibTools/LArCalibTools/LArCond2NtupleBase.h
+++ b/LArCalorimeter/LArCalibTools/LArCalibTools/LArCond2NtupleBase.h
@@ -78,8 +78,11 @@ class LArCond2NtupleBase : public AthAlgorithm {
   ToolHandle<ILArFEBTempTool> m_FEBTempTool;
 
   SG::ReadCondHandleKey<LArOnOffIdMapping> m_cablingKey{this,"CablingKey","LArOnOffIdMap","SG Key of LArOnOffIdMapping object"};
+  SG::ReadCondHandleKey<LArOnOffIdMapping> m_cablingSCKey{this,"CablingSCKey","LArOnOffIdMapSC","SG Key of LArOnOffIdMapping object"};
+
   SG::ReadCondHandleKey<LArBadChannelCont> m_BCKey{this, "BadChanKey", "LArBadChannel", "SG bad channels key"};
   SG::ReadCondHandleKey<LArCalibLineMapping> m_calibMapKey{this,"CalibMapKey","LArCalibLineMap","SG Key of calib line mapping object"};
+  SG::ReadCondHandleKey<LArCalibLineMapping> m_calibMapSCKey{this,"CalibMapSCKey","LArCalibIdMapSC","SG Key of calib line mapping object"};
 
   bool m_isSC;
   bool m_isFlat;
diff --git a/LArCalorimeter/LArCalibTools/LArCalibTools/LArDigits2Ntuple.h b/LArCalorimeter/LArCalibTools/LArCalibTools/LArDigits2Ntuple.h
index 92c32658bcc8b17fa5ce4780f34a05762efd9815..365f6c36717a307365ca71a7f3902c9a95ff4bd2 100644
--- a/LArCalorimeter/LArCalibTools/LArCalibTools/LArDigits2Ntuple.h
+++ b/LArCalorimeter/LArCalibTools/LArCalibTools/LArDigits2Ntuple.h
@@ -8,6 +8,7 @@
 #include "LArCalibTools/LArCond2NtupleBase.h"
 #include "xAODEventInfo/EventInfo.h"
 #include "StoreGate/ReadCondHandleKey.h"
+#include "LArRawEvent/LArFebHeaderContainer.h"
 
 class LArDigits2Ntuple : public LArCond2NtupleBase
 {
@@ -15,27 +16,51 @@ class LArDigits2Ntuple : public LArCond2NtupleBase
   LArDigits2Ntuple(const std::string & name, ISvcLocator * pSvcLocator);
   ~LArDigits2Ntuple();
 
-  //standard algorithm methods
+  // Standard algorithm methods
   virtual StatusCode initialize();
   virtual StatusCode execute();
  private:
 
-  std::string m_contKey;
-
   unsigned int  m_Nsamples;
 
   int m_ipass;
   long m_event;
   std::vector<unsigned int> m_FTlist;
 
+  std::vector<std::string> m_contKeys;
+
   NTuple::Item<long> m_ntNsamples;
   NTuple::Item<short> m_gain;
-  NTuple::Item<long> m_IEvent;
+  NTuple::Item<unsigned long long> m_IEvent;
   NTuple::Array<short>  m_samples;
-  NTuple::Item<long> m_bcid;
+  NTuple::Item<short> m_bcid;
+  NTuple::Item<short> m_latomeChannel;
+
+  // From LATOME header
+  NTuple::Item<uint16_t> m_bcidLATOMEHEAD;
+  NTuple::Item<uint32_t> m_latomeidLATOMEHEAD;
+  NTuple::Item<uint32_t> m_l1idLATOMEHEAD;
+  // DigitContainer
+  NTuple::Array<unsigned short> m_bcidVec;
+  NTuple::Item<uint32_t> m_latomeSourceId;
+  NTuple::Array<short>  m_samples_ADC_BAS;
+  NTuple::Array<unsigned short> m_bcidVec_ADC_BAS;
 
+  NTuple::Array<int> m_energyVec_ET;
+  NTuple::Array<unsigned short> m_bcidVec_ET;
+  NTuple::Array<bool> m_saturVec_ET;
+
+  NTuple::Array<int> m_energyVec_ET_ID;
+  NTuple::Array<unsigned short> m_bcidVec_ET_ID;
+  NTuple::Array<bool> m_saturVec_ET_ID;
+
+  bool m_isSC;
   bool m_fillBCID;
+  int m_fillLatomeSourceID;
+  bool m_overwriteEventNumber;
+
   SG::ReadHandleKey<xAOD::EventInfo> m_evtInfoKey { this, "EventInfoKey", "EventInfo", "SG for EventInfo Key" };
+  SG::ReadHandleKey<LArFebHeaderContainer> m_LArFebHeaderContainerKey { this, "LArFebHeaderKey", "LArFebHeader" };
 
 };
 
diff --git a/LArCalorimeter/LArCalibTools/share/LArDigits2Ntuple_jobOptions.py b/LArCalorimeter/LArCalibTools/share/LArDigits2Ntuple_jobOptions.py
index f970419da63695f8020366d57d5bfb45c65cf5a3..0df7787c0572bc99204eb354c6748b748f3d1fad 100755
--- a/LArCalorimeter/LArCalibTools/share/LArDigits2Ntuple_jobOptions.py
+++ b/LArCalorimeter/LArCalibTools/share/LArDigits2Ntuple_jobOptions.py
@@ -1,4 +1,4 @@
-import commands
+import os
 
 
 if not 'SubDet' in dir():
@@ -17,7 +17,13 @@ if not 'OutputRootFileName' in dir():
    OutputRootFileName = BaseFileName+".root"
    
 if not 'OutputDir' in dir():
-      OutputDir  = commands.getoutput("pwd")
+   OutputDir = os.getcwd()
+
+if not 'SCDecodeAllContainers' in dir():
+   SCDecodeAllContainers=False
+
+if not 'SCProtectSourceId' in dir():
+   SCProtectSourceId=False
 
 if not 'FilePrefix' in dir():
    if (int(RunNumberList[0]))<99800 :
@@ -27,6 +33,16 @@ if not 'FilePrefix' in dir():
      
 if not 'InputDir' in dir():
    InputDir = "/castor/cern.ch/grid/atlas/DAQ/lar/ElecCalib/2014/"+RunNumberList[0]
+
+#if not 'FillSCDataBCID' in dir():
+#   FillSCDataBCID=-1
+if not 'FillLatomeSourceID' in dir():
+   FillLatomeSourceID=-1
+if not 'OverwriteEventNumber' in dir():
+   OverwriteEventNumber=False
+
+if not 'BSConverter_Add_BCID_LATOMEID' in dir():
+   BSConverter_Add_BCID_LATOMEID=False
    
 if not 'FullFileName' in dir():
    if not 'Trigger' in dir():
@@ -99,35 +115,57 @@ if SuperCells:
    LArCalibIdMappingSC()
 
 
-
 svcMgr.IOVDbSvc.GlobalTag=LArCalib_Flags.globalFlagDB
 svcMgr.IOVDbSvc.DBInstance=""
 
-from LArBadChannelTool.LArBadChannelAccess import LArBadChannelAccess
-
-if 'InputDBConnectionBadChannel' not in dir():
-   InputDBConnectionBadChannel = "<db>COOLONL_LAR/CONDBR2</db>"
+if 'BadChannelsFolder' not in dir():
    BadChannelsFolder="/LAR/BadChannels/BadChannels"
-   BadChannelsTagSpec = LArCalibFolderTag (BadChannelsFolder,"-RUN2-UPD1-00")
-   LArBadChannelAccess(dbString=BadChannelsFolder+InputDBConnectionBadChannel+"<tag>"+BadChannelsTagSpec+"</tag>")
-else:
-   BadChannelsFolder="/LAR/BadChannelsOfl/BadChannels"
-   #def DBConnectionFile(sqlitefile):  
-   #   return "sqlite://;schema="+sqlitefile+";dbname=CONDBR2"
-   #InputDBConnectionBadChannel = DBConnectionFile(InputDBConnectionBadChannel)
-   #BadChannelsTagSpec = LArCalibFolderTag (BadChannelsFolder,"")
-   LArBadChannelAccess(dbString=BadChannelsFolder+"<dbConnection>"+InputDBConnectionBadChannel+"</dbConnection>")
+if 'MissingFEBsFolder' not in dir():
+   MissingFEBsFolder="/LAR/BadChannels/MissingFEBs"
 
+if not 'ReadBadChannelFromCOOL' in dir():
+   ReadBadChannelFromCOOL = True   
 
-if not SuperCells:
-   from LArBadChannelTool.LArBadFebAccess import LArBadFebAccess
-   MissingFEBsFolder="/LAR/BadChannels/MissingFEBs"
-   MissingFEBsTagSpec = LArCalibFolderTag (MissingFEBsFolder,"-RUN2-UPD1-01")
-   LArBadFebAccess(dbString=MissingFEBsFolder+InputDBConnectionBadChannel+"<tag>"+MissingFEBsTagSpec+"</tag>")
+if ( ReadBadChannelFromCOOL ):      
+   if 'InputBadChannelSQLiteFile' in dir():
+      InputDBConnectionBadChannel = DBConnectionFile(InputBadChannelSQLiteFile)
+   else:
+      if 'InputDBConnectionBadChannel' not in dir():
+         InputDBConnectionBadChannel = "COOLOFL_LAR/" + conddb.dbname
+
+if 'BadChannelsLArCalibFolderTag' in dir() :
+   BadChannelsTagSpec = LArCalibFolderTag (BadChannelsFolder,BadChannelsLArCalibFolderTag) 
+   conddb.addFolder("",BadChannelsFolder+"<tag>"+BadChannelsTagSpec+"</tag>"+"<dbConnection>"+InputDBConnectionBadChannel+"</dbConnection>",
+                    className="CondAttrListCollection")
+else :
+   conddb.addFolder("",BadChannelsFolder+"<dbConnection>"+InputDBConnectionBadChannel+"</dbConnection>",className="CondAttrListCollection")
+
+
+if 'MissingFEBsLArCalibFolderTag' in dir() :
+   MissingFEBsTagSpec = LArCalibFolderTag (MissingFEBsFolder,MissingFEBsLArCalibFolderTag)   
+   conddb.addFolder("",MissingFEBsFolder+"<tag>"+MissingFEBsTagSpec+"</tag>"+"<dbConnection>"+InputDBConnectionBadChannel+"</dbConnection>",className='AthenaAttributeList')
+else :
+   conddb.addFolder("",MissingFEBsFolder+"<dbConnection>"+InputDBConnectionBadChannel+"</dbConnection>",className='AthenaAttributeList')
+
+
+from LArBadChannelTool.LArBadChannelToolConf import LArBadChannelCondAlg, LArBadFebCondAlg
+theLArBadChannelCondAlg=LArBadChannelCondAlg(ReadKey=BadChannelsFolder)
+condSeq+=theLArBadChannelCondAlg
+
+theLArBadFebCondAlg=LArBadFebCondAlg(ReadKey=MissingFEBsFolder)
+condSeq+=theLArBadFebCondAlg
+
+if SuperCells:
+   conddb.addFolder("","/LAR/IdentifierOfl/OnOffIdMap_SC<db>COOLOFL_LAR/OFLP200</db><tag>LARIdentifierOflOnOffIdMap_SC-000</tag>")
+
+
+
+   
 
 from AthenaCommon.AlgSequence import AlgSequence 
 topSequence = AlgSequence()  
 
+
 ## get a handle to the ApplicationManager, to the ServiceManager and to the ToolSvc
 from AthenaCommon.AppMgr import (theApp, ServiceMgr as svcMgr,ToolSvc)
 
@@ -139,20 +177,23 @@ if not 'FullFileName' in dir():
 else :   
    svcMgr.EventSelector.Input=FullFileName
    
-scvMgr.EventSelector.MaxBadEvents = 0
+svcMgr.EventSelector.MaxBadEvents = 0
+
 svcMgr.ByteStreamCnvSvc.InitCnvs += [ "EventInfo"]
 
 theByteStreamAddressProviderSvc =svcMgr.ByteStreamAddressProviderSvc
+
+
 if not SuperCells:
    from LArByteStream.LArByteStreamConf import LArRodDecoder
    svcMgr.ToolSvc += LArRodDecoder()
-
    theByteStreamAddressProviderSvc.TypeNames += ["LArFebHeaderContainer/LArFebHeader"]
    theByteStreamAddressProviderSvc.TypeNames += [ "LArDigitContainer/HIGH"  ]
    theByteStreamAddressProviderSvc.TypeNames += [ "LArDigitContainer/MEDIUM"]
    theByteStreamAddressProviderSvc.TypeNames += [ "LArDigitContainer/LOW"   ]
    theByteStreamAddressProviderSvc.TypeNames += [ "LArDigitContainer/FREE"   ]
 
+   # this will go outside SC loop
    include ("LArROD/LArFebErrorSummaryMaker_jobOptions.py")       
    topSequence.LArFebErrorSummaryMaker.CheckAllFEB=False
 
@@ -165,21 +206,46 @@ if not SuperCells:
    topSequence+=theLArBadEventCatcher    
 else:
    theByteStreamAddressProviderSvc.TypeNames += [ "LArDigitContainer/SC"  ]
+   if SCDecodeAllContainers:
+      theByteStreamAddressProviderSvc.TypeNames += [ "LArDigitContainer/SC_ADC_BAS"  ]
+      theByteStreamAddressProviderSvc.TypeNames += [ "LArRawSCContainer/SC_ET"  ]
+      theByteStreamAddressProviderSvc.TypeNames += [ "LArRawSCContainer/SC_ET_ID"  ]
+      theByteStreamAddressProviderSvc.TypeNames += [ "LArLATOMEHeaderContainer/SC_LATOME_HEADER"  ]
+   from LArByteStream.LArByteStreamConf import LArLATOMEDecoder 
+   theLArLATOMEDecoder = LArLATOMEDecoder("LArLATOMEDecoder")
+   theLArLATOMEDecoder.latomeInfoFileName = LatomeInfo
+   theLArLATOMEDecoder.DumpFile = SC_DumpFile
+   theLArLATOMEDecoder.RawDataFile = SC_RawDataFile
+   theLArLATOMEDecoder.SampleShift = SC_SampleShift
+   theLArLATOMEDecoder.ProtectSourceId = SCProtectSourceId
+   svcMgr.ToolSvc += theLArLATOMEDecoder
 
 from LArCalibTools.LArCalibToolsConf import *
 
 LArDigits2Ntuple=LArDigits2Ntuple("LArDigits2Ntuple")
-LArDigits2Ntuple.ContainerKey = Gain
+#LArDigits2Ntuple.ContainerKey = Gain
+contkeys = []
+contkeys.append(Gain)
+
+
+if SuperCells and SCDecodeAllContainers:
+   contkeys.append("SC_ADC_BAS")
+   contkeys.append("SC_ET")
+   contkeys.append("SC_ET_ID")
+   contkeys.append("SC_LATOME_HEADER")
+LArDigits2Ntuple.ContainerKeys = contkeys
 LArDigits2Ntuple.AddFEBTempInfo=False
 if 'FTlist' in dir():
    LArDigits2Ntuple.FTlist=FTlist
+
+LArDigits2Ntuple.isSC = SuperCells
+
+LArDigits2Ntuple.FillBCID = True
 if SuperCells:
-   #from xAODEventInfoCnv.xAODEventInfoCreator import xAODMaker__EventInfoCnvAlg
-   #topSequence+=xAODMaker__EventInfoCnvAlg()
-   LArDigits2Ntuple.isSC = True
    LArDigits2Ntuple.RealGeometry = True
-   LArDigits2Ntuple.OffId = True
-   LArDigits2Ntuple.FillBCID = True
+   LArDigits2Ntuple.OffId = True   
+   LArDigits2Ntuple.AddBadChannelInfo = False
+   LArDigits2Ntuple.OverwriteEventNumber = OverwriteEventNumber
 
 topSequence+= LArDigits2Ntuple
 
@@ -190,11 +256,13 @@ svcMgr += NTupleSvc()
 svcMgr.NTupleSvc.Output = [ "FILE1 DATAFILE='"+OutputDir + "/" +OutputRootFileName+"' OPT='NEW'" ]
 
 AthenaEventLoopMgr=Service("AthenaEventLoopMgr")
-AthenaEventLoopMgr.OutputLevel=ERROR
+AthenaEventLoopMgr.OutputLevel=WARNING
 
 theApp.EvtMax=EvtMax
 svcMgr.MessageSvc.OutputLevel=WARNING
 
+LArDigits2Ntuple.OutputLevel=WARNING
+
 #DetStore=Service("DetectorStore");
 #DetStore.dump=TRUE
 #from StoreGate.StoreGateConf import StoreGateSvc
diff --git a/LArCalorimeter/LArCalibTools/share/LArPedestal2Ntuple_jobOptions.py b/LArCalorimeter/LArCalibTools/share/LArPedestal2Ntuple_jobOptions.py
index 907a6e0b605cea3ebae68fddbd2bb62405db5f4f..a253c7a49212e0fcc989a145b4ed6c40c19949e5 100755
--- a/LArCalorimeter/LArCalibTools/share/LArPedestal2Ntuple_jobOptions.py
+++ b/LArCalorimeter/LArCalibTools/share/LArPedestal2Ntuple_jobOptions.py
@@ -57,7 +57,7 @@ GlobalFlags.DataSource.set_data()
 GlobalFlags.InputFormat.set_bytestream()
 
 from AthenaCommon.DetFlags import DetFlags
-DetFlags.Calo_setOff()
+DetFlags.Calo_setOn()  # ON for geometry
 DetFlags.ID_setOff()
 DetFlags.Muon_setOff()
 DetFlags.Truth_setOff()
diff --git a/LArCalorimeter/LArCalibTools/src/LArAutoCorr2Ntuple.cxx b/LArCalorimeter/LArCalibTools/src/LArAutoCorr2Ntuple.cxx
index 10a795300a9e702ed4b7f39a06b19415aa19fdb7..86c160b10d5d473dff4c8b8ac2eabc78b54a4c57 100755
--- a/LArCalorimeter/LArCalibTools/src/LArAutoCorr2Ntuple.cxx
+++ b/LArCalorimeter/LArCalibTools/src/LArAutoCorr2Ntuple.cxx
@@ -9,10 +9,10 @@
 #include "StoreGate/StoreGateSvc.h"
 
 LArAutoCorr2Ntuple::LArAutoCorr2Ntuple(const std::string& name, ISvcLocator* pSvcLocator)
-  : LArCond2NtupleBase(name, pSvcLocator),m_nsamples(7)
+  : LArCond2NtupleBase(name, pSvcLocator)//,m_nsamples(7)
 {
   declareProperty("ContainerKey",m_objKey);
-  declareProperty("Nsamples",    m_nsamples);
+  declareProperty("Nsamples",    m_nsamples=32);
   
   m_ntTitle="AutoCorrelation";
   m_ntpath="/NTUPLES/FILE1/AUTOCORR";
@@ -64,6 +64,7 @@ StatusCode LArAutoCorr2Ntuple::stop() {
    for (;it!=it_e;it++) {
      const HWIdentifier hwid = *it;
      ILArAutoCorr::AutoCorrRef_t corr=larAutoCorr->autoCorr(hwid,igain);
+
      if (corr.size()>0) {
        fillFromIdentifier(hwid); 
        gain = igain;
diff --git a/LArCalorimeter/LArCalibTools/src/LArAverages2Ntuple.cxx b/LArCalorimeter/LArCalibTools/src/LArAverages2Ntuple.cxx
index 3ec3972153ca6d13b86109af83815db271b84888..129b2f96eff1192ece2e2fb6196cb24b58262d59 100644
--- a/LArCalorimeter/LArCalibTools/src/LArAverages2Ntuple.cxx
+++ b/LArCalorimeter/LArCalibTools/src/LArAverages2Ntuple.cxx
@@ -16,7 +16,7 @@ LArAverages2Ntuple::LArAverages2Ntuple(const std::string& name, ISvcLocator* pSv
   //  m_eventCounter(0)
 {
   declareProperty("ContainerKey",m_contKey);
-  declareProperty("NSamples",m_Nsamples=7);
+  declareProperty("NSamples",m_Nsamples=50);
   declareProperty("KeepOnlyPulsed",m_keepPulsed=true);
   declareProperty("isSC",m_isSC=false);
   m_ipass=0;
diff --git a/LArCalorimeter/LArCalibTools/src/LArCaliWaves2Ntuple.cxx b/LArCalorimeter/LArCalibTools/src/LArCaliWaves2Ntuple.cxx
index f661986ba2def090324cb9b1fbb798db7c36d7fc..80be1ab0f4892e4317cc31ffb09941c5618c54c3 100755
--- a/LArCalorimeter/LArCalibTools/src/LArCaliWaves2Ntuple.cxx
+++ b/LArCalorimeter/LArCalibTools/src/LArCaliWaves2Ntuple.cxx
@@ -112,8 +112,19 @@ StatusCode LArCaliWaves2Ntuple::stop()
     }
   }
 
-  SG::ReadCondHandle<LArCalibLineMapping> clHdl{m_calibMapKey};
-  const LArCalibLineMapping *clCont {*clHdl};
+  
+  //SG::ReadCondHandle<LArCalibLineMapping> clHdl{m_calibMapKey};
+  //const LArCalibLineMapping *clCont {*clHdl};
+  const LArCalibLineMapping *clCont=0;
+  if(m_isSC) {
+    ATH_MSG_DEBUG( "LArCaliWaves2Ntuple: using SC calib map" );
+    SG::ReadCondHandle<LArCalibLineMapping> clHdl{m_calibMapSCKey};
+    clCont=*clHdl;
+  } else {
+    SG::ReadCondHandle<LArCalibLineMapping> clHdl{m_calibMapKey};
+    clCont=*clHdl;
+  }
+  
   if(!clCont) {
      ATH_MSG_WARNING( "Do not have calib line mapping !!!" );
      return StatusCode::FAILURE;
diff --git a/LArCalorimeter/LArCalibTools/src/LArCond2NtupleBase.cxx b/LArCalorimeter/LArCalibTools/src/LArCond2NtupleBase.cxx
index 01ec90992eccfe22898cab3694f2f7d6238350e6..d1a0dd6499c3dbb86d3dba11e19bcc3a91897985 100644
--- a/LArCalorimeter/LArCalibTools/src/LArCond2NtupleBase.cxx
+++ b/LArCalorimeter/LArCalibTools/src/LArCond2NtupleBase.cxx
@@ -145,8 +145,15 @@ StatusCode LArCond2NtupleBase::initialize() {
   }
 
   ATH_CHECK( m_BCKey.initialize() );
-  ATH_CHECK( m_cablingKey.initialize() );
-  ATH_CHECK( m_calibMapKey.initialize() );
+  /// do we need both of them at some point when data has both SC and cells?
+  if(m_isSC){
+    ATH_CHECK( m_cablingSCKey.initialize() );
+    ATH_CHECK( m_calibMapSCKey.initialize() );
+  }
+  else{
+    ATH_CHECK( m_cablingKey.initialize() );
+    ATH_CHECK( m_calibMapKey.initialize() );
+  }
 
   //Online-identifier variables
   sc=nt->addItem("channelId",m_onlChanId,0x38000000,0x3A000000);
@@ -303,27 +310,41 @@ StatusCode LArCond2NtupleBase::initialize() {
 
 bool LArCond2NtupleBase::fillFromIdentifier(const HWIdentifier& hwid) {
 
- ATH_MSG_DEBUG("Starting.....");
+  ATH_MSG_DEBUG("Starting fillFromIdentifier");
  SG::ReadCondHandle<LArBadChannelCont> readHandle{m_BCKey};
  const LArBadChannelCont *bcCont {*readHandle};
  if(m_addBC && !bcCont) {
      ATH_MSG_WARNING( "Do not have Bad chan container " << m_BCKey.key() );
      return false;
  }
- SG::ReadCondHandle<LArCalibLineMapping> clHdl{m_calibMapKey};
- const LArCalibLineMapping *clCont {*clHdl};
+ const LArCalibLineMapping *clCont=0;
+ if(m_isSC){
+   SG::ReadCondHandle<LArCalibLineMapping> clHdl{m_calibMapSCKey};
+   clCont={*clHdl};
+ }
+ else{
+   SG::ReadCondHandle<LArCalibLineMapping> clHdl{m_calibMapKey};
+   clCont={*clHdl};
+ }
  if(!clCont) {
      ATH_MSG_WARNING( "Do not have calib line mapping !!!" );
      return false;
  }
- SG::ReadCondHandle<LArOnOffIdMapping> cablingHdl{m_cablingKey};
- const LArOnOffIdMapping* cabling=*cablingHdl;
+ const LArOnOffIdMapping* cabling=0;
+ if(m_isSC){
+   SG::ReadCondHandle<LArOnOffIdMapping> cablingHdl{m_cablingSCKey};
+   cabling=*cablingHdl;
+ }
+ else{
+   SG::ReadCondHandle<LArOnOffIdMapping> cablingHdl{m_cablingKey};
+   cabling=*cablingHdl;
+ }
+
  if(!cabling) {
      ATH_MSG_WARNING( "Do not have cabling !" );
      return false;
  }
 
- ATH_MSG_DEBUG("Starting 1.....");
  m_onlChanId = hwid.get_identifier32().get_compact();
  
  m_barrel_ec = m_onlineId->barrel_ec(hwid);
@@ -349,7 +370,7 @@ bool LArCond2NtupleBase::fillFromIdentifier(const HWIdentifier& hwid) {
    m_eta=NOT_VALID;
    m_phi=NOT_VALID;
   } else {
-   ATH_MSG_DEBUG(&m_reta << " " << &m_rphi << " " << &m_layer);
+    //ATH_MSG_DEBUG(&m_reta << " " << &m_rphi << " " << &m_layer);
    m_reta=NOT_VALID;
    m_rphi=NOT_VALID;
   } 
@@ -437,5 +458,6 @@ bool LArCond2NtupleBase::fillFromIdentifier(const HWIdentifier& hwid) {
 const SG::ReadCondHandleKey<LArOnOffIdMapping>&
 LArCond2NtupleBase::cablingKey() const
 {
+  if(m_isSC) return m_cablingSCKey;
   return m_cablingKey;
 }
diff --git a/LArCalorimeter/LArCalibTools/src/LArDigits2Ntuple.cxx b/LArCalorimeter/LArCalibTools/src/LArDigits2Ntuple.cxx
index b2570ab5940af491753ae82148e73053729b38a0..374f5a403a5ab7c2b801d68c82136d771e392546 100644
--- a/LArCalorimeter/LArCalibTools/src/LArDigits2Ntuple.cxx
+++ b/LArCalorimeter/LArCalibTools/src/LArDigits2Ntuple.cxx
@@ -1,12 +1,14 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "LArCalibTools/LArDigits2Ntuple.h"
 #include "EventInfo/EventInfo.h"
 #include "EventInfo/EventID.h"
 #include "LArRawEvent/LArDigitContainer.h"
-
+#include "LArRawEvent/LArRawSCContainer.h"
+#include "LArRawEvent/LArSCDigit.h"
+#include "LArRawEvent/LArLATOMEHeaderContainer.h"
 //#include "GaudiKernel/ToolHandle.h"
 
 LArDigits2Ntuple::LArDigits2Ntuple(const std::string& name, ISvcLocator* pSvcLocator):
@@ -14,13 +16,14 @@ LArDigits2Ntuple::LArDigits2Ntuple(const std::string& name, ISvcLocator* pSvcLoc
   m_ipass(0),
   m_event(0), m_FTlist(0), m_fillBCID(false)
 {
-  declareProperty("ContainerKey",m_contKey);
+  declareProperty("ContainerKeys",m_contKeys);
   declareProperty("NSamples",m_Nsamples=32);
   declareProperty("FTlist",m_FTlist);
   declareProperty("FillBCID",m_fillBCID);
+  declareProperty("OverwriteEventNumber",m_overwriteEventNumber=false);
   m_ntTitle="LArDigits";
-  m_ntpath="/NTUPLES/FILE1/LARDIGITS"+m_contKey;
-
+  m_ntpath="/NTUPLES/FILE1/LARDIGITS";
+  
 }
 
 LArDigits2Ntuple::~LArDigits2Ntuple() 
@@ -29,37 +32,35 @@ LArDigits2Ntuple::~LArDigits2Ntuple()
 
 StatusCode LArDigits2Ntuple::initialize()
 {
-   ATH_MSG_INFO( "in initialize" ); 
+  ATH_MSG_INFO( "in initialize" ); 
 
-   StatusCode sc=LArCond2NtupleBase::initialize();
-   if (sc!=StatusCode::SUCCESS) {
-     ATH_MSG_ERROR( "Base init failed" );
-     return StatusCode::FAILURE;
-   }
+  m_isSC = ( std::any_of(m_contKeys.begin(), m_contKeys.end(),[&](std::string const &s) {return s.find("SC") != std::string::npos;} ) );
 
+  ATH_MSG_DEBUG(" IS it SC?? " << m_isSC );
+  
+  StatusCode sc=LArCond2NtupleBase::initialize();
+  if (sc!=StatusCode::SUCCESS) {
+    ATH_MSG_ERROR( "Base init failed" );
+    return StatusCode::FAILURE;
+  }
+  
   sc=m_nt->addItem("IEvent",m_IEvent);
   if (sc!=StatusCode::SUCCESS) {
-      ATH_MSG_ERROR( "addItem 'IEvent' failed" );
-      return sc;
-    }
-
-  sc=m_nt->addItem("Gain",m_gain,-1,3);
+    ATH_MSG_ERROR( "addItem 'IEvent' failed" );
+    return sc;
+  }
+  
+  sc=m_nt->addItem("samples",m_Nsamples,m_samples);
   if (sc!=StatusCode::SUCCESS) {
-      ATH_MSG_ERROR( "addItem 'Gain' failed" );
-      return sc;
-    }
-
+    ATH_MSG_ERROR( "addItem 'samples' failed" );
+    return sc;
+  }
+   
   sc=m_nt->addItem("Nsamples",m_ntNsamples,0,32);
   if (sc!=StatusCode::SUCCESS) {
-      ATH_MSG_ERROR( "addItem 'Nsamples' failed" );
-      return sc;
-    }
-
-  sc=m_nt->addItem("samples",m_Nsamples,m_samples);
-  if (sc!=StatusCode::SUCCESS) {
-      ATH_MSG_ERROR( "addItem 'samples' failed" );
-      return sc;
-    }
+    ATH_MSG_ERROR( "addItem 'Nsamples' failed" );
+    return sc;
+  }
   
   if(m_fillBCID){
     sc=m_nt->addItem("BCID",m_bcid);
@@ -68,15 +69,122 @@ StatusCode LArDigits2Ntuple::initialize()
       return sc;
     }
   }
+
+  if (m_isSC){
+    sc=m_nt->addItem("latomeChannel",m_latomeChannel);
+    if (sc!=StatusCode::SUCCESS) {
+      ATH_MSG_ERROR( "addItem 'latomeChannel' failed" );
+      return sc;
+    }
+  }
   
-  ATH_CHECK(m_evtInfoKey.initialize() );
+  // Loop over container keys
+  for ( std::string ck : m_contKeys ){
+    
+    if ( ck.find("SC") == std::string::npos){ // main readout only
+      sc=m_nt->addItem("Gain",m_gain,-1,3);
+      if (sc!=StatusCode::SUCCESS) {
+	ATH_MSG_ERROR( "addItem 'Gain' failed" );
+	return sc;
+      }
+      
+    }else if ( ck == "SC" ){ // SC DigitContainer
+      sc=m_nt->addItem("bcidVec",m_Nsamples, m_bcidVec); //here - > define length?
+      if (sc!=StatusCode::SUCCESS) {
+	ATH_MSG_ERROR( "addItem 'bcidVec' failed" );
+	return sc;
+      }
+      sc=m_nt->addItem("latomeSourceId",m_latomeSourceId);
+      if (sc!=StatusCode::SUCCESS) {
+	ATH_MSG_ERROR( "addItem 'latomeSourceId' failed" );
+	return sc;
+      }
+      
+    }else if ( ck == "SC_ADC_BAS" ){ // SC_ADC_BAS DigitContainer
+      sc=m_nt->addItem("samples_ADC_BAS",m_Nsamples,m_samples_ADC_BAS);
+      if (sc!=StatusCode::SUCCESS) {
+	ATH_MSG_ERROR( "addItem 'samples_ADC_BAS' failed" );
+	return sc;
+      }
+      
 
-  m_ipass = 0;
+      sc=m_nt->addItem("bcidVec_ADC_BAS",m_Nsamples, m_bcidVec_ADC_BAS); //here - > define length?
+      if (sc!=StatusCode::SUCCESS) {
+	ATH_MSG_ERROR( "addItem 'bcidVec_ADC_BAS' failed" );
+	return sc;
+      }
 
+      
+    }else if ( ck == "SC_LATOME_HEADER" ){ // SC LATOME HEADER
+      sc=m_nt->addItem("bcidLATOMEHEAD",m_bcidLATOMEHEAD);
+      if (sc!=StatusCode::SUCCESS) {
+	ATH_MSG_ERROR( "addItem 'bcidLATOMEHEAD' failed" );
+	return sc;
+      }
+      sc=m_nt->addItem("latomeidLATOMEHEAD",m_latomeidLATOMEHEAD);
+      if (sc!=StatusCode::SUCCESS) {
+	ATH_MSG_ERROR( "addItem 'latomeidLATOMEHEAD' failed" );
+	return sc;
+      }
+      sc=m_nt->addItem("l1idLATOMEHEAD",m_l1idLATOMEHEAD);
+      if (sc!=StatusCode::SUCCESS) {
+	ATH_MSG_ERROR( "addItem 'l1idLATOMEHEAD' failed" );
+	return sc;
+      }
+      
+    }else if ( ck == "SC_ET" ){ // SC_ET RawSCContainer
+      sc=m_nt->addItem("energyVec_ET", m_Nsamples, m_energyVec_ET);
+      if (sc!=StatusCode::SUCCESS) {
+	ATH_MSG_ERROR( "addItem 'energyVec_ET' failed" );
+	return sc;
+      }
+      sc=m_nt->addItem("bcidVec_ET", m_Nsamples, m_bcidVec_ET);
+      if (sc!=StatusCode::SUCCESS) {
+	ATH_MSG_ERROR( "addItem 'bcidVec_ET' failed" );
+	return sc;
+      }
+      sc=m_nt->addItem("saturVec_ET", m_Nsamples, m_saturVec_ET);
+      if (sc!=StatusCode::SUCCESS) {
+	ATH_MSG_ERROR( "addItem 'saturVec_ET' failed" );
+	return sc;
+      }
+      
+    }else if ( ck == "SC_ET_ID" ){ // SC_ET_ID RawSCContainer
+      sc=m_nt->addItem("energyVec_ET_ID", m_Nsamples, m_energyVec_ET_ID);
+      if (sc!=StatusCode::SUCCESS) {
+	ATH_MSG_ERROR( "addItem 'energyVec_ET_ID' failed" );
+	return sc;
+      }
+      sc=m_nt->addItem("bcidVec_ET_ID", m_Nsamples, m_bcidVec_ET_ID);
+      if (sc!=StatusCode::SUCCESS) {
+	ATH_MSG_ERROR( "addItem 'bcidVec_ET_ID' failed" );
+	return sc;
+      }
+      sc=m_nt->addItem("saturVec_ET_ID", m_Nsamples, m_saturVec_ET_ID);
+      if (sc!=StatusCode::SUCCESS) {
+	ATH_MSG_ERROR( "addItem 'saturVec_ET_ID' failed" );
+	return sc;
+      }
+    }
+    
+  } // end container key loop
+  
+  
+  //}
+  
+  
+  
+  ATH_CHECK(m_evtInfoKey.initialize() );
+  
+  if( !m_isSC ) ATH_CHECK( m_LArFebHeaderContainerKey.initialize() );
+  
+  
+  m_ipass = 0;
+  
   m_event=0;
-
+  
   return StatusCode::SUCCESS;
-
+  
 }
 
 StatusCode LArDigits2Ntuple::execute()
@@ -89,62 +197,280 @@ StatusCode LArDigits2Ntuple::execute()
   m_event++;
   unsigned long long thisevent;
   unsigned long thisbcid=0;
+
   SG::ReadHandle<xAOD::EventInfo> evt (m_evtInfoKey);
   thisevent = evt->eventNumber();
-  if(m_fillBCID) thisbcid = evt->bcid();
 
+  // Get BCID from FEB header
+  if ( !m_isSC ){ // we are not processing SC data, Feb header could be accessed
+    SG::ReadHandle<LArFebHeaderContainer> hdrCont(m_LArFebHeaderContainerKey);
+    if (! hdrCont.isValid()) {
+      ATH_MSG_WARNING( "No LArFEB container found in TDS" );
+    }
+    else {
+      ATH_MSG_DEBUG( "LArFEB container found");
+      if(m_fillBCID) thisbcid = (*hdrCont->begin())->BCId() ;
+      ATH_MSG_DEBUG( "BCID FROM FEB HEADER " << thisbcid );
+      ATH_MSG_DEBUG( "NSAMPLES FROM FEB HEADER " << (*hdrCont->begin())->NbSamples() );
+    }
+  }else{
+    // This should be used for main readout later, once TDAQ fill event headers also in calib. runs properly
+    thisbcid = evt->bcid();
+  }
+  /// set it here once and no need to set at each SC/cell
+  
   const LArDigitContainer* DigitContainer = NULL;
-  sc=evtStore()->retrieve(DigitContainer,m_contKey);  
+  sc=evtStore()->retrieve(DigitContainer,m_contKeys.at(0));  
   if (sc!=StatusCode::SUCCESS) {
-     ATH_MSG_WARNING( "Unable to retrieve LArDigitContainer with key " << m_contKey << " from DetectorStore. " );
-    } 
+    ATH_MSG_WARNING( "Unable to retrieve LArDigitContainer with key " << m_contKeys.at(0) << " from DetectorStore. " );
+  } 
   else
-     ATH_MSG_DEBUG( "Got LArDigitContainer with key " << m_contKey );
+    ATH_MSG_DEBUG( "Got LArDigitContainer with key " << m_contKeys.at(0) );
+
+  const LArDigitContainer* DigitContainer1 = NULL;
+  const LArRawSCContainer* etcontainer = NULL;
+  const LArRawSCContainer* etcontainer1 = NULL;
+  const LArLATOMEHeaderContainer* headcontainer = NULL;
+  std::map<unsigned int, const LArLATOMEHeader*> LATOMEHeadMap;
+  if (m_isSC){
+    if ((std::find(m_contKeys.begin(), m_contKeys.end(), "SC_ADC_BAS") != m_contKeys.end()) ){
+      sc=evtStore()->retrieve(DigitContainer1,"SC_ADC_BAS");  
+      if (sc!=StatusCode::SUCCESS) {
+	ATH_MSG_WARNING( "Unable to retrieve LArDigitContainer with key SC_ADC_BAS from DetectorStore. " );
+      } 
+      else 
+	ATH_MSG_DEBUG( "Got LArDigitContainer with key SC_ADC_BAS " );
+    }
+    
+    if ((std::find(m_contKeys.begin(), m_contKeys.end(), "SC_ET") != m_contKeys.end()) ){
+      sc=evtStore()->retrieve(etcontainer,"SC_ET");  
+      if (sc!=StatusCode::SUCCESS) {
+	ATH_MSG_WARNING( "Unable to retrieve LArRawSCContainer with key SC_ET from DetectorStore. " );
+      } 
+      else
+	ATH_MSG_DEBUG( "Got LArDigitContainer with key SC_ET " );
+    }
+    
+    if ((std::find(m_contKeys.begin(), m_contKeys.end(), "SC_ET_ID") != m_contKeys.end()) ){
+      sc=evtStore()->retrieve(etcontainer1,"SC_ET_ID");  
+      if (sc!=StatusCode::SUCCESS) {
+	ATH_MSG_WARNING( "Unable to retrieve LArRawSCContainer with key SC_ET_ID from DetectorStore. " );
+      } 
+      else
+	ATH_MSG_DEBUG( "Got LArDigitContainer with key SC_ET_ID" );
+    }
+    
+    if ((std::find(m_contKeys.begin(), m_contKeys.end(), "SC_LATOME_HEADER") != m_contKeys.end()) ){
+      sc=evtStore()->retrieve(headcontainer,"SC_LATOME_HEADER");  
+      if (sc!=StatusCode::SUCCESS) {
+	ATH_MSG_WARNING( "Unable to retrieve LArLATOMEHeaderContainer with key SC_LATOME_HEADER from DetectorStore. " );
+      } 
+      else
+	ATH_MSG_DEBUG( "Got LArDigitContainer with key SC_LATOME_HEADER " ); 
+    }
+    
+    if (headcontainer){ // loop through header container and fill map 
+      LArLATOMEHeaderContainer::const_iterator hit=headcontainer->begin();
+      LArLATOMEHeaderContainer::const_iterator hit_e=headcontainer->end();
+      for (;hit!=hit_e;hit++) {
+	LATOMEHeadMap.insert ( std::pair<unsigned int, const LArLATOMEHeader*>( (*hit)->SourceId(), (*hit) ) );
+      }
+    }
+  } // end if m_isSC
+
+  /// set container pointers to 0 if size is 0 (avoid checking again the size in many places)
+  if( DigitContainer && DigitContainer->size() == 0 )DigitContainer=0;
+
+  if( DigitContainer1 && DigitContainer1->size() == 0 )DigitContainer1=0;
+
+  if( etcontainer && etcontainer->size() == 0 )etcontainer=0;
+
+  if( etcontainer1 && etcontainer1->size() == 0 )etcontainer1=0;
   
- 
- if (DigitContainer) { 
-   
-   LArDigitContainer::const_iterator it=DigitContainer->begin();
-   LArDigitContainer::const_iterator it_e=DigitContainer->end();
-
-    if(it == it_e) {
-      ATH_MSG_DEBUG( "LArDigitContainer with key=" << m_contKey << " is empty " );
-      return StatusCode::SUCCESS;
-    }else{
-      ATH_MSG_DEBUG( "LArDigitContainer with key=" << m_contKey << " has " <<DigitContainer->size() << " entries" );
+  int cellsno = 0;
+  if (DigitContainer) cellsno = DigitContainer->size();
+  if (DigitContainer1){
+    if ( cellsno == 0 ){ 
+      cellsno = DigitContainer1->size();
+    }else if(DigitContainer1->size() != (unsigned)cellsno ){ ATH_MSG_ERROR(" NOOOOOOO! Different number of entries "<< cellsno << " " << DigitContainer1->size() );
+    }
+  }
+  if (etcontainer){
+    if ( cellsno == 0 ){ 
+      cellsno = etcontainer->size();
+    }else if(etcontainer->size() != (unsigned)cellsno ){ ATH_MSG_ERROR(" NOOOOOOO! Different number of entries "<< cellsno << " " << etcontainer->size() );
+    }
+  }
+  if (etcontainer1){
+    if ( cellsno == 0 ){ 
+      cellsno = etcontainer1->size();
+    }else if(etcontainer1->size() != (unsigned)cellsno ){ ATH_MSG_ERROR(" NOOOOOOO! Different number of entries "<< cellsno << " " << etcontainer1->size() );
     }
+  }
+
+  unsigned cellCounter=0;
+  for( int c=0;c<cellsno;c++ ){
+    
+    if(m_fillBCID) m_bcid = thisbcid; 
+    m_IEvent=thisevent;
+    if(m_overwriteEventNumber) m_IEvent=m_event;
+    
+    if( DigitContainer ){
 
-   unsigned cellCounter=0;
-   for (;it!=it_e;it++) {
+      const LArDigit* digi = DigitContainer->at(c);     
+       // ======================
 
-     unsigned int trueMaxSample = (*it)->nsamples();
-     m_ntNsamples = trueMaxSample;
+       unsigned int trueMaxSample = digi->nsamples();
+       m_ntNsamples = trueMaxSample;
 
-     m_gain=(*it)->gain();
-     if(m_gain < CaloGain::INVALIDGAIN || m_gain > CaloGain::LARNGAIN) m_gain=CaloGain::LARNGAIN;
+       if (!m_isSC){
+	 m_gain=digi->gain();
+	 if(m_gain < CaloGain::INVALIDGAIN || m_gain > CaloGain::LARNGAIN) m_gain=CaloGain::LARNGAIN;
+       }
 
-     //     std::cout << "trigger = " << Ntrigger << ", m_samples = "<< m_ntNsamples << std::endl;
+       //     std::cout << "trigger = " << Ntrigger << ", m_samples = "<< m_ntNsamples << std::endl;
+       if(trueMaxSample>m_Nsamples){
+	 if(!m_ipass){
+	   ATH_MSG_WARNING( "The number of samples in data is larger than the one specified by JO: " << trueMaxSample << " > " << m_Nsamples << " --> only " << m_Nsamples << " will be available in the ntuple " );
+	   m_ipass=1;
+	 }
+	 trueMaxSample = m_Nsamples;
+       }
 
-     if(trueMaxSample>m_Nsamples){
-       if(!m_ipass){
-	 ATH_MSG_WARNING( "The number of samples in data is larger than the one specified by JO: " << trueMaxSample << " > " << m_Nsamples << " --> only " << m_Nsamples << " will be available in the ntuple " );
-	 m_ipass=1;
+       fillFromIdentifier(digi->hardwareID());      
+       if(m_FTlist.size() > 0) { // should do a selection
+	 if(std::find(std::begin(m_FTlist), std::end(m_FTlist), m_FT) == std::end(m_FTlist)) { // is our FT in list ?
+           continue;
+	 }
+       }
+
+       for(unsigned i=0; i<trueMaxSample;++i) m_samples[i]=digi->samples().at(i);
+
+       if (m_isSC){ // LArSCDigit stuff
+	 const LArSCDigit* scdigi = dynamic_cast<const LArSCDigit*>(digi);
+	 if(!scdigi){ ATH_MSG_DEBUG(" CAN'T CAST ");
+	 }else{
+	   if (headcontainer){
+	     const LArLATOMEHeader* headmap = LATOMEHeadMap[scdigi->SourceId()];
+	     if(headmap){
+		m_bcidLATOMEHEAD = headmap->BCId();
+		m_latomeidLATOMEHEAD = headmap->LatomeId();
+		m_l1idLATOMEHEAD = headmap->L1Id();
+	     }
+	   }   
+	   m_latomeChannel = scdigi->Channel();
+	   for( unsigned i=0; i<scdigi->BCId().size();++i){
+	     m_bcidVec[i] = scdigi->BCId().at(i);
+	   }	 
+	   m_latomeSourceId = scdigi->SourceId();
+	 }
        }
-       trueMaxSample = m_Nsamples;
      }
 
-     m_IEvent=thisevent;
-     if(m_fillBCID) m_bcid = thisbcid;
+     // DigitContainer 1 -> SC_ADC_BAS
+     if( DigitContainer1 ){
+       
+       //ATH_MSG_DEBUG("ADDING DIGITCONTAINER1");
+
+       const LArDigit* digi = DigitContainer1->at(c);
+       //for(unsigned i=0; i<trueMaxSample;++i) m_samples[i]=digi->samples().at(i);
+       // ======================
+
+       unsigned int trueMaxSample = digi->nsamples();
+       m_ntNsamples = trueMaxSample;
+     
+       //     std::cout << "trigger = " << Ntrigger << ", m_samples_ADC_BAS = "<< m_ntNsamples << std::endl;
+       if(trueMaxSample>m_Nsamples){
+	 if(!m_ipass){
+	   ATH_MSG_WARNING( "The number of samples in data is larger than the one specified by JO: " << trueMaxSample << " > " << m_Nsamples << " --> only " << m_Nsamples << " will be available in the ntuple " );
+	   m_ipass=1;
+	 }
+	 trueMaxSample = m_Nsamples;
+       }
+
+       if( !DigitContainer){ //// already filled in DigitContainer?
+	 fillFromIdentifier(digi->hardwareID());
+       }
+          
+       for(unsigned i=0; i<trueMaxSample;++i) m_samples_ADC_BAS[i]=digi->samples().at(i);
+
+       const LArSCDigit* scdigi = dynamic_cast<const LArSCDigit*>(digi);
+       if(!scdigi){ ATH_MSG_DEBUG(" CAN'T CAST ");
+       }else{
+	 if ( !DigitContainer){
+	   if (headcontainer){
+	     const LArLATOMEHeader* headmap = LATOMEHeadMap[scdigi->SourceId()];
+	     if(headmap){
+	       m_bcidLATOMEHEAD = headmap->BCId();
+	       m_latomeidLATOMEHEAD = headmap->LatomeId();
+	       m_l1idLATOMEHEAD = headmap->L1Id();
+	     }
+	   }
+	   m_latomeChannel = scdigi->Channel();
+	   m_latomeSourceId = scdigi->SourceId();
+	 }
+
+	 for( unsigned i=0; i<scdigi->BCId().size();++i){
+	   m_bcidVec_ADC_BAS[i] = scdigi->BCId().at(i);
+	 }
+       }
+     }
+
+     // etcontainer -> SC_ET
+     if( etcontainer ){
+       //ATH_MSG_DEBUG("ADDING ETCONTAINER");
+       const LArRawSC* rawSC = etcontainer->at(c);
+       
+       if ( !DigitContainer && !DigitContainer1 ){
+	 m_latomeChannel = rawSC->chan();
+	 if (headcontainer){
+	   const LArLATOMEHeader* headmap = LATOMEHeadMap[rawSC->SourceId()];
+	   if(headmap){
+	     m_bcidLATOMEHEAD = headmap->BCId();
+	     m_latomeidLATOMEHEAD = headmap->LatomeId();
+	     m_l1idLATOMEHEAD = headmap->L1Id();
+	   }
+	 }
+       }
+       for( unsigned i=0; i<rawSC->bcids().size();++i){// just use the vector directly?
+	 m_bcidVec_ET[i] = rawSC->bcids().at(i);
+       }
+       for( unsigned i=0; i<rawSC->energies().size();++i){// just use the vector directly?
+	 m_energyVec_ET[i] = rawSC->energies().at(i);
+       }
+       for( unsigned i=0; i<rawSC->satur().size();++i){// just use the vector directly?
+	 m_saturVec_ET[i] = rawSC->satur().at(i);
+       }
 
-     fillFromIdentifier((*it)->hardwareID());      
-     if(m_FTlist.size() > 0) { // should do a selection
-        if(std::find(std::begin(m_FTlist), std::end(m_FTlist), m_FT) == std::end(m_FTlist)) { // is our FT in list ?
-           continue;
-        }
      }
+     
+     // etcontainer1 -> SC_ET_ID
+     if( etcontainer1 ){
+       //ATH_MSG_DEBUG("ADDING ETCONTAINER1");
+       const LArRawSC* rawSC = etcontainer1->at(c);
+       //const std::vector<int> bcidVec = rawSC->bcids();
+       if ( !DigitContainer && !DigitContainer1 && !etcontainer ){
+	 m_latomeChannel = rawSC->chan();
+	 if (headcontainer){
+	   const LArLATOMEHeader* headmap = LATOMEHeadMap[rawSC->SourceId()];
+	   if(headmap){
+	     m_bcidLATOMEHEAD = headmap->BCId();
+	     m_latomeidLATOMEHEAD = headmap->LatomeId();
+	     m_l1idLATOMEHEAD = headmap->L1Id();
+	   }
+	 }
+       }
+       for( unsigned i=0; i<rawSC->bcids().size();++i){// just use the vector directly?
+	 m_bcidVec_ET_ID[i] = rawSC->bcids()[i];
+       }
+       for( unsigned i=0; i<rawSC->energies().size();++i){// just use the vector directly?
+	 m_energyVec_ET_ID[i] = rawSC->energies()[i];
+       }
+       for( unsigned i=0; i<rawSC->satur().size();++i){// just use the vector directly?
+	 m_saturVec_ET_ID[i] = rawSC->satur()[i];
+       }
 
-     const std::vector<short> sam = (*it)->samples();
-     for(unsigned i=0; i<trueMaxSample;++i) m_samples[i]=sam[i];
+     }
 
      sc=ntupleSvc()->writeRecord(m_nt);
      if (sc!=StatusCode::SUCCESS) {
@@ -153,7 +479,7 @@ StatusCode LArDigits2Ntuple::execute()
      }
      cellCounter++;
    }// over cells 
- } 
- ATH_MSG_DEBUG( "LArDigits2Ntuple has finished." );
- return StatusCode::SUCCESS;
+   
+   ATH_MSG_DEBUG( "LArDigits2Ntuple has finished." );
+   return StatusCode::SUCCESS;
 }// end finalize-method.
diff --git a/LArCalorimeter/LArCalibTools/src/LArOFC2Ntuple.cxx b/LArCalorimeter/LArCalibTools/src/LArOFC2Ntuple.cxx
index 47fc5d9872cf90be5409829e59fd419f370b8e35..194320a52ef7dc0dd3b1d168eb24188566243a02 100644
--- a/LArCalorimeter/LArCalibTools/src/LArOFC2Ntuple.cxx
+++ b/LArCalorimeter/LArCalibTools/src/LArOFC2Ntuple.cxx
@@ -94,9 +94,18 @@ StatusCode LArOFC2Ntuple::stop() {
        return StatusCode::FAILURE;
      }
   }
+  
+  const LArOnOffIdMapping *cabling=0;
+  if(m_isSC) {
+    ATH_MSG_DEBUG( "LArOFC2Ntuple: using SC cabling" );
+    SG::ReadCondHandle<LArOnOffIdMapping> cablingHdl{m_cablingSCKey};
+    cabling=*cablingHdl;
+  }else{
+    SG::ReadCondHandle<LArOnOffIdMapping> cablingHdl{m_cablingKey};
+    cabling=*cablingHdl;
+  }
+
 
-  SG::ReadCondHandle<LArOnOffIdMapping> cablingHdl{m_cablingKey};
-  const LArOnOffIdMapping* cabling=*cablingHdl;
   if(!cabling) {
      ATH_MSG_WARNING( "Do not have cabling object LArOnOffIdMapping" );
      return StatusCode::FAILURE;
diff --git a/LArCalorimeter/LArCalibTools/src/LArRamps2Ntuple.cxx b/LArCalorimeter/LArCalibTools/src/LArRamps2Ntuple.cxx
index 1c0a0545c89523afebf1886fe3aa57884a42fd29..117eeafbf35e7981606d3b1725bd7f0d56f86a2f 100755
--- a/LArCalorimeter/LArCalibTools/src/LArRamps2Ntuple.cxx
+++ b/LArCalorimeter/LArCalibTools/src/LArRamps2Ntuple.cxx
@@ -294,8 +294,17 @@ StatusCode LArRamps2Ntuple::stop() {
  }//end-if rampComplete
  
 
- SG::ReadCondHandle<LArOnOffIdMapping> cablingHdl{m_cablingKey};
- const LArOnOffIdMapping* cabling=*cablingHdl;
+ const LArOnOffIdMapping *cabling=0;
+ if(m_isSC) {
+   ATH_MSG_DEBUG( "LArRamps2Ntuple: using SC cabling" );
+   SG::ReadCondHandle<LArOnOffIdMapping> cablingHdl{m_cablingSCKey};
+   cabling=*cablingHdl;
+ }else{
+   SG::ReadCondHandle<LArOnOffIdMapping> cablingHdl{m_cablingKey};
+   cabling=*cablingHdl;
+ }
+
+
  if(!cabling) {
      ATH_MSG_WARNING( "Do not have cabling object LArOnOffIdMapping" );
      return StatusCode::FAILURE;