From 7aa91943223a44bf81625b8314a17fe2ca0b60bc Mon Sep 17 00:00:00 2001
From: Walter Lampl <walter.lampl@cern.ch>
Date: Mon, 27 Sep 2021 14:37:34 +0200
Subject: [PATCH] New style config of the RTM extraction jobs (LAr Electronic
 calibration)

---
 .../LArCalibUtils/LArRTMParamExtractor.h      |   2 -
 .../src/LArRTMParamExtractor.cxx              |  18 +-
 .../python/LArCalibConfigFlags.py             |  16 +-
 .../python/LArCalib_RTMParamsConfig.py        | 154 ++++++++++++++++++
 .../share/LArCalib_RTMParams_jobOptions.py    |  12 +-
 5 files changed, 175 insertions(+), 27 deletions(-)
 create mode 100644 LArCalorimeter/LArExample/LArCalibProcessing/python/LArCalib_RTMParamsConfig.py

diff --git a/LArCalorimeter/LArCalibUtils/LArCalibUtils/LArRTMParamExtractor.h b/LArCalorimeter/LArCalibUtils/LArCalibUtils/LArRTMParamExtractor.h
index d71e33114e83..04abb9bb8d92 100644
--- a/LArCalorimeter/LArCalibUtils/LArCalibUtils/LArRTMParamExtractor.h
+++ b/LArCalorimeter/LArCalibUtils/LArCalibUtils/LArRTMParamExtractor.h
@@ -72,11 +72,9 @@ class LArRTMParamExtractor : public AthAlgorithm
   std::string m_groupingType;
 
   // FT selection
-  bool m_FTselection;
   std::vector<int> m_FT;
   int m_PosNeg;
   // Slot selection
-  bool m_Slotselection;
   std::vector<int> m_Slot;
   // Calib line selection
   bool m_Calibselection;
diff --git a/LArCalorimeter/LArCalibUtils/src/LArRTMParamExtractor.cxx b/LArCalorimeter/LArCalibUtils/src/LArRTMParamExtractor.cxx
index 3150e057a28a..64fc3f31123d 100644
--- a/LArCalorimeter/LArCalibUtils/src/LArRTMParamExtractor.cxx
+++ b/LArCalorimeter/LArCalibUtils/src/LArRTMParamExtractor.cxx
@@ -30,7 +30,7 @@ LArRTMParamExtractor::LArRTMParamExtractor (const std::string& name, ISvcLocator
 {
   declareProperty("KeyList"   ,m_keylist);
   declareProperty("TestMode"  ,m_testmode = false);
-  declareProperty("IgnoreDACSelection", m_ignoreDACselection = false);
+  declareProperty("IgnoreDACSelection", m_ignoreDACselection = true);
   declareProperty("isSC", m_isSC = false);
 
   m_DAC.clear();
@@ -61,11 +61,9 @@ LArRTMParamExtractor::LArRTMParamExtractor (const std::string& name, ISvcLocator
   declareProperty("ResOscillKeyAfter",   m_resOscillKeyAfter  = "ResOscillAfter" ) ;  
   declareProperty("GroupingType",  m_groupingType);
   
-  declareProperty("FTSelection",   m_FTselection = false);
+
   declareProperty("FT",            m_FT);
   declareProperty("PosNeg",        m_PosNeg=0);
-
-  declareProperty("SlotSelection", m_Slotselection = false);
   declareProperty("Slot",          m_Slot);
 
   declareProperty("calibLineSelection", m_Calibselection = false);
@@ -140,18 +138,14 @@ StatusCode LArRTMParamExtractor::initialize() {
     m_dumpResOscill = false ;
   }
 
-  if ( m_FTselection && !m_FT.size() )
-    m_FTselection = false;
-  if ( m_FTselection ) {
+  if ( !m_FT.empty() ) {
     msg(MSG::INFO) << "FT selection enabled, will only process data from FT = [ ";
     for(unsigned i=0; i<m_FT.size()-1; ++i)
       msg() <<  m_FT[i] << ", ";
     ATH_MSG_INFO( m_FT[m_FT.size()-1] << " ] at PosNeg = " << m_PosNeg );
   }
 
-  if ( m_Slotselection && !m_Slot.size() )
-    m_Slotselection = false;
-  if ( m_Slotselection ) {
+  if ( !m_Slot.empty() ) {
     msg(MSG::INFO) << "Slot selection enabled, will only process data from Slot = [ ";
     for(unsigned i=0; i<m_Slot.size()-1; ++i)
       msg() << m_Slot[i] << ", ";
@@ -393,7 +387,7 @@ StatusCode LArRTMParamExtractor::stop()
 	}
         
 	// FT selection
-	if ( m_FTselection ) {
+	if ( !m_FT.empty() ) {
           int PosNeg    = onlineHelper->pos_neg(itVec.channelId());
           int FT        = onlineHelper->feedthrough(itVec.channelId());
 	  std::vector<int>::const_iterator selectFT = std::find(m_FT.begin(),m_FT.end(),FT);
@@ -409,7 +403,7 @@ StatusCode LArRTMParamExtractor::stop()
 	}
 	
 	// Slot selection
-	if ( m_Slotselection ) {
+	if ( !m_Slot.empty() ) {
           int Slot = onlineHelper->slot(itVec.channelId());
 	  std::vector<int>::const_iterator selectSlot = std::find(m_Slot.begin(),m_Slot.end(),Slot);
 	  if ( selectSlot==m_Slot.end() ) { 
diff --git a/LArCalorimeter/LArExample/LArCalibProcessing/python/LArCalibConfigFlags.py b/LArCalorimeter/LArExample/LArCalibProcessing/python/LArCalibConfigFlags.py
index c937da2da63f..7c6d7dd7381f 100644
--- a/LArCalorimeter/LArExample/LArCalibProcessing/python/LArCalibConfigFlags.py
+++ b/LArCalorimeter/LArExample/LArCalibProcessing/python/LArCalibConfigFlags.py
@@ -21,11 +21,13 @@ def addLArCalibFlags(flags):
     flags.addFlag("LArCalib.PhysWave.Folder", lambda prevFlags: _prefix(prevFlags)+"PhysWaves/RTM")
     flags.addFlag("LArCalib.Ramp.Folder",     lambda prevFlags: _prefix(prevFlags)+"Ramps/RampLinea")
     flags.addFlag("LArCalib.OFCPhys.Folder",  lambda prevFlags: _prefix(prevFlags)+"OFC/PhysWave/RTM/")
-    flags.addFlag("LArCalib.LArShapeFolder",  lambda prevFlags: _prefix(prevFlags)+"Shape/RTM/")
-
+    flags.addFlag("LArCalib.LArShape.Folder", lambda prevFlags: _prefix(prevFlags)+"Shape/RTM/")
     flags.addFlag("LArCalib.MPhysOverMCal.Folder", lambda prevFlags: _prefix(prevFlags)+"MphysOverMcal/RTM")
 
-    
+
+    flags.addFlag("LArCalib.CaliPulseParams.Folder", lambda prevFlags: _prefix(prevFlags)+"CaliPulseParams/RTM")
+    flags.addFlag("LArCalib.DetCellParams.Folder", lambda prevFlags: _prefix(prevFlags)+"DetCellParams/RTM")
+
     
 
     flags.addFlag("LArCalib.GroupingType",lambda prevFlags: "SuperCells" if prevFlags.LArCalib.isSC else "ExtendedSubDetector")
@@ -51,6 +53,14 @@ def addLArCalibFlags(flags):
     flags.addFlag("LArCalib.Preselection.Side",[])
     flags.addFlag("LArCalib.Preselection.BEC",[])
     flags.addFlag("LArCalib.Preselection.FT",[])
+    flags.addFlag("LArCalib.Preselection.Slot",[])
+
+
+    flags.addFlag("LArCalib.RTM.ExtractAll",True) # False = extract only tauR 
+    flags.addFlag("LArCalib.RTM.DumpOmegaScan",False)
+    flags.addFlag("LArCalib.RTM.DumpResOscill",False)
+
+
 
     flags.addFlag("LArCalib.GlobalTag","LARCALIB-RUN2-00")
 
diff --git a/LArCalorimeter/LArExample/LArCalibProcessing/python/LArCalib_RTMParamsConfig.py b/LArCalorimeter/LArExample/LArCalibProcessing/python/LArCalib_RTMParamsConfig.py
new file mode 100644
index 000000000000..682c12637da2
--- /dev/null
+++ b/LArCalorimeter/LArExample/LArCalibProcessing/python/LArCalib_RTMParamsConfig.py
@@ -0,0 +1,154 @@
+# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
+
+from AthenaConfiguration.ComponentFactory import CompFactory 
+from AthenaConfiguration.MainServicesConfig import MainServicesCfg
+
+def LArRTMParamsCfg(flags):
+
+    #Get basic services and cond-algos
+    from LArCalibProcessing.LArCalibBaseConfig import LArCalibBaseCfg
+    result=LArCalibBaseCfg(flags)
+
+    from LArCalibProcessing.utils import FolderTagResolver
+    FolderTagResolver._globalTag=flags.LArCalib.GlobalTag
+    rs=FolderTagResolver()
+    DetCellParamsTag=rs.getFolderTag(flags.LArCalib.DetCellParams.Folder)
+    CaliPulseParamsTag=rs.getFolderTag(flags.LArCalib.CaliPulseParams.Folder)
+    CaliWaveTag=rs.getFolderTag(flags.LArCalib.CaliWave.Folder)
+    del rs #Close database
+
+    #Retrieve CaliWave: 
+    from IOVDbSvc.IOVDbSvcConfig import addFolders
+    result.merge(addFolders(flags,flags.LArCalib.CaliWave.Folder,detDb=flags.LArCalib.Input.Database, tag=CaliWaveTag))
+
+    if not flags.LArCalib.RTM.ExtractAll:
+        #Get information from database:
+        result.merge(addFolders(flags,flags.LArCalib.DetCellParams.Folder,detDb=flags.LArCalib.Input.Database, tag=DetCellParamsTag))
+        result.merge(addFolders(flags,flags.LArCalib.CaliPulseParams.Folder,detDb=flags.LArCalib.Input.Database, tag=CaliPulseParamsTag))
+
+    
+    LArRTMParamExtractor = CompFactory.LArRTMParamExtractor()
+
+    LArRTMParamExtractor.useTBB=True
+
+    LArRTMParamExtractor.KeyList        = ["LArCaliWave"]
+    LArRTMParamExtractor.TestMode       = False
+    LArRTMParamExtractor.GroupingType   = flags.LArCalib.GroupingType
+    LArRTMParamExtractor.IgnoreDACSelection = True
+    LArRTMParamExtractor.isSC           = flags.LArCalib.isSC
+    
+    LArRTMParamExtractor.ExtractTaur    = True
+    LArRTMParamExtractor.ExtractTcal    = flags.LArCalib.RTM.ExtractAll
+    LArRTMParamExtractor.ExtractFstep   = flags.LArCalib.RTM.ExtractAll
+    LArRTMParamExtractor.ExtractOmega0  = flags.LArCalib.RTM.ExtractAll
+
+    LArRTMParamExtractor.FT            = flags.LArCalib.Preselection.FT
+    LArRTMParamExtractor.PosNeg        = 0 if len(flags.LArCalib.Preselection.Side)==0 else flags.LArCalib.Preselection.Side[0]
+    LArRTMParamExtractor.Slot          = flags.LArCalib.Preselection.Slot
+
+    LArRTMParamExtractor.DumpOmegaScan = flags.LArCalib.RTM.DumpOmegaScan
+    LArRTMParamExtractor.DumpResOscill      = flags.LArCalib.RTM.DumpResOscill
+
+
+    theLArWFParamTool = CompFactory.LArWFParamTool()
+    theLArWFParamTool.isSC = flags.LArCalib.isSC
+
+    theLArWFParamTool.UseOmegaScanHelper = True
+    theLArWFParamTool.CosRespScan = [ False ,  True , False , False ] # Strips only
+    theLArWFParamTool.Omega0Min   = [ 0.100 , 0.220 ,  0.060 ,  0.100 ]
+    theLArWFParamTool.Omega0Max   = [ 0.600 , 0.310 ,  0.215 ,  0.700 ]
+    theLArWFParamTool.NpointScan  = [   800 ,   900 ,    310 ,    120 ]
+    theLArWFParamTool.StoreResOscill = [True * 4] if flags.LArCalib.RTM.DumpResOscill else [False *4]
+    
+    result.addPublicTool(theLArWFParamTool)
+
+    result.addEventAlgo(LArRTMParamExtractor)
+
+    rootfile=flags.LArCalib.Output.ROOTFile
+    if rootfile != "":
+        LArWFParams2Ntuple = CompFactory.LArWFParams2Ntuple("LArWFParams2Ntuple")
+        LArWFParams2Ntuple.DumpCaliPulseParams = True
+        LArWFParams2Ntuple.DumpDetCellParams   = True
+        LArWFParams2Ntuple.CaliPulseParamsKey="LArCaliPulseParams_RTM"
+        LArWFParams2Ntuple.DetCellParamsKey="LArDetCellParams_RTM"
+        result.addEventAlgo(LArWFParams2Ntuple)
+   
+        if flags.LArCalib.RTM.DumpOmegaScan:
+            LArOmegaScans2Ntuple = CompFactory.LArCaliWaves2Ntuple("LArOmegaScans2Ntuple")
+            LArOmegaScans2Ntuple.NtupleName = "OMEGASCAN"
+            LArOmegaScans2Ntuple.KeyList = ["OmegaScan"]
+            result.addEventAlgo(LArOmegaScans2Ntuple)
+
+        if ( flags.LArCalib.RTM.DumpResOscill ):
+            LArResOscillsBefore2Ntuple = CompFactory.LArCaliWaves2Ntuple("LArResOscillsBefore2Ntuple")
+            LArResOscillsBefore2Ntuple.NtupleName = "RESOSCILLBEFORE"
+            LArResOscillsBefore2Ntuple.KeyList = ["ResOscillBefore"]
+            result.addEventAlgo(LArResOscillsBefore2Ntuple)
+            
+            LArResOscillsAfter2Ntuple = CompFactory.LArCaliWaves2Ntuple("LArResOscillsAfter2Ntuple")
+            LArResOscillsAfter2Ntuple.NtupleName = "RESOSCILLAFTER"
+            LArResOscillsAfter2Ntuple.KeyList = ["ResOscillAfter"]
+            result.addEventAlgo(LArResOscillsAfter2Ntuple)
+
+        import os
+        if os.path.exists(rootfile):
+            os.remove(rootfile)
+        result.addService(CompFactory.NTupleSvc(Output = [ "FILE1 DATAFILE='"+rootfile+"' OPT='NEW'" ]))
+        result.setAppProperty("HistogramPersistency","ROOT")
+        pass # end if ROOT ntuple writing
+
+
+
+    from RegistrationServices.OutputConditionsAlgConfig import OutputConditionsAlgCfg
+    result.merge(OutputConditionsAlgCfg(flags,
+                                        outputFile=flags.LArCalib.Output.POOLFile,
+                                        ObjectList=["LArCaliPulseParamsComplete#"+"LArCaliPulseParams_RTM#"+flags.LArCalib.CaliPulseParams.Folder,
+                                                    "LArDetCellParamsComplete#"+"LArDetCellParams_RTM#"+flags.LArCalib.DetCellParams.Folder,],
+                                        IOVTagList=[CaliPulseParamsTag,DetCellParamsTag]
+                                    ))
+
+    #RegistrationSvc    
+    result.addService(CompFactory.IOVRegistrationSvc(RecreateFolders = False))
+    result.getService("IOVDbSvc").DBInstance=""
+
+
+    #MC Event selector since we have no input data file 
+    mcCnvSvc = CompFactory.McCnvSvc()
+    cfg.addService(mcCnvSvc)
+    cfg.addService(CompFactory.EvtPersistencySvc("EventPersistencySvc",CnvServices=[mcCnvSvc.getFullJobOptName(),]))
+    eventSelector=CompFactory.McEventSelector("EventSelector",
+                                              RunNumber = flags.LArCalib.Input.RunNumbers[0],
+                                              EventsPerRun      = 1,
+                                              FirstEvent	       = 0,
+                                              InitialTimeStamp  = 0,
+                                              TimeStampInterval = 1
+                                          )
+
+    result.addService(eventSelector)
+    return result
+
+if __name__ == "__main__":
+
+
+    from AthenaConfiguration.AllConfigFlags import ConfigFlags
+    from LArCalibProcessing.LArCalibConfigFlags import addLArCalibFlags
+    addLArCalibFlags(ConfigFlags)
+
+
+
+    ConfigFlags.LArCalib.Input.RunNumbers=[401351,]
+    ConfigFlags.LArCalib.Input.Database="/home/wlampl/calibTest/00400939_00400943_00400945_Barrel-EMB-EMEC_HIGH_40_21.0.20_1/poolFiles/myDB200_00400939_00400943_00400945_EB-EMBA_one.db_Delay"
+    ConfigFlags.LArCalib.Input.SubDet="EM"
+    ConfigFlags.LArCalib.BadChannelDB="/home/wlampl/calibTest/00400939_00400943_00400945_Barrel-EMB-EMEC_HIGH_40_21.0.20_1/poolFiles/SnapshotBadChannel_00400939_00400943_00400945_EB-EMBA.db"
+    ConfigFlags.LArCalib.BadChannelTag="-RUN2-UPD3-00"
+    ConfigFlags.LArCalib.Output.ROOTFile="larparams.root"
+    ConfigFlags.IOVDb.DatabaseInstance="CONDBR2"
+    ConfigFlags.IOVDb.DBConnection="sqlite://;schema=output.sqlite;dbname=CONDDBR2"
+    ConfigFlags.IOVDb.GlobalTag="LARCALIB-RUN2-02"
+    #ConfigFlags.Exec.OutputLevel=1
+
+    cfg=MainServicesCfg(ConfigFlags)
+    cfg.merge(LArRTMParamsCfg(ConfigFlags))
+
+    print("Start running...")
+    cfg.run(1)
diff --git a/LArCalorimeter/LArExample/LArCalibProcessing/share/LArCalib_RTMParams_jobOptions.py b/LArCalorimeter/LArExample/LArCalibProcessing/share/LArCalib_RTMParams_jobOptions.py
index 7a9ac2630320..637a7a5a9654 100644
--- a/LArCalorimeter/LArExample/LArCalibProcessing/share/LArCalib_RTMParams_jobOptions.py
+++ b/LArCalorimeter/LArExample/LArCalibProcessing/share/LArCalib_RTMParams_jobOptions.py
@@ -245,20 +245,14 @@ if not 'StoreResOscill' in dir():
 # FT/Slot selection
 #
 
-if not 'FTSelection' in dir():
-   FTSelection   = False
-
 if not 'PosNeg' in dir():
    PosNeg        = 0
 	
 if not 'FT' in dir():
-   FT            = [ 0 ]
-
-if not 'SlotSelection' in dir():
-   SlotSelection = False
+   FT            = []
 
 if not 'Slot' in dir():
-   Slot          = [ 0 ]
+   Slot          = []
 
 #
 # Input wave type
@@ -630,11 +624,9 @@ LArRTMParamExtractor.SuffixRetrievedDetCell   = SuffixRetrievedDetCell
 LArRTMParamExtractor.SuffixExtractedCaliPulse = SuffixExtractedCaliPulse
 LArRTMParamExtractor.SuffixExtractedDetCell   = SuffixExtractedDetCell
 
-LArRTMParamExtractor.FTSelection   = FTSelection
 LArRTMParamExtractor.FT            = FT
 LArRTMParamExtractor.PosNeg        = PosNeg
 
-LArRTMParamExtractor.SlotSelection = SlotSelection
 LArRTMParamExtractor.Slot          = Slot
 	
 LArRTMParamExtractor.DumpOmegaScan = DumpOmegaScan
-- 
GitLab