diff --git a/TileCalorimeter/TileConditions/python/TileCoolMgr.py b/TileCalorimeter/TileConditions/python/TileCoolMgr.py index 2726edd2e8b9fedb3a91bd3fe4a896ca0d1409ce..ebd2c81d3ac66eaa3a5b38a189c412490894b807 100644 --- a/TileCalorimeter/TileConditions/python/TileCoolMgr.py +++ b/TileCalorimeter/TileConditions/python/TileCoolMgr.py @@ -4,258 +4,16 @@ #author: nils.gollub@cern.ch #modifications: lukas.pribyl@cern.ch -import string - -class TileCoolMgr: - - #_______________________________________________________________ - def __init__(self): - - #=== initialize logger with INFO level - from AthenaCommon.Logging import logging - self.__log = logging.getLogger( 'TileCoolMgr' ) - # self.__log.setLevel(logging.INFO) - - #=== Master dictionary for: condId -> [folder, connStr, tag, folder2, type] - self.__idDict = {} - - #=== Available folder types - self.__validTypes = ["SplitMC", "SplitOnline", "OfflineOnly", "Sqlite"] - - #=== do we run on real data (not MC)? - from AthenaCommon.GlobalFlags import globalflags - self.__globalflags = globalflags - self.isData = globalflags.DataSource()=='data' - from AthenaCommon.AthenaCommonFlags import athenaCommonFlags - self.__athenaCommonFlags = athenaCommonFlags - - - #_______________________________________________________________ - def addSource(self, condId, folder, connStr, tag, folder2, type, key = ""): - if type not in self.__validTypes: - self.__log.error("Folder type \'%s\' not recognized!" % type) - if (type != "OfflineOnly") and (folder2 == ""): - self.__log.error("For folder type \'%s\' second folder name required!" % type) - self.__idDict[condId] = [folder, connStr, tag, folder2, type, key] - - #_______________________________________________________________ - def getFolder(self, condId): - idInfo = self.__idDict.get(condId) - if not idInfo: - self.__log.error("CondId \'%s\' not recognized!" % condId) - return None - else: - return idInfo[0] - #_______________________________________________________________ - def getKey(self, condId): - idInfo = self.__idDict.get(condId) - if not idInfo: - self.__log.error("CondId \'%s\' not recognized!" % condId) - return None - elif idInfo[5] != "": return idInfo[5] - elif len(self.getTag(condId)): return self.getTag(condId) - else: - folder = self.getActualFolder(condId) - if folder: return folder - else: - self.__log.error("Cannot find out key for \'%s\'!" % condId) - return None - - #_______________________________________________________________ - def getFolderTwo(self, condId): - idInfo = self.__idDict.get(condId) - if not idInfo: - self.__log.error("CondId \'%s\' not recognized!" % condId) - return None - else: - return idInfo[3] - - #_______________________________________________________________ - def isSplitMC(self, condId): - idInfo = self.__idDict.get(condId) - if not idInfo: - self.__log.error("CondId \'%s\' not recognized!" % condId) - return None - else: - if idInfo[4]=="SplitMC": return True - else: return False - - #_______________________________________________________________ - def isSplitOnline(self, condId): - idInfo = self.__idDict.get(condId) - if not idInfo: - self.__log.error("CondId \'%s\' not recognized!" % condId) - return None - else: - if idInfo[4]=="SplitOnline": return True - else: return False - - #_______________________________________________________________ - def isOfflineOnly(self, condId): - idInfo = self.__idDict.get(condId) - if not idInfo: - self.__log.error("CondId \'%s\' not recognized!" % condId) - return None - else: - if idInfo[4]=="OfflineOnly": return True - else: return False - - #_______________________________________________________________ - def isSqlite(self, condId): - idInfo = self.__idDict.get(condId) - if not idInfo: - self.__log.error("CondId \'%s\' not recognized!" % condId) - return None - else: - if idInfo[4]=="Sqlite": return True - else: return False - - - #_______________________________________________________________ - def setFolder(self, condId, folder): - idInfo = self.__idDict.get(condId) - if not idInfo: - self.__log.error("CondId \'%s\' not recognized!" % condId) - else: - self.__log.info("Setting folder for condId \'%s\' to \'%s\'" % (condId,folder)) - idInfo[0] = folder - idInfo[3] = folder - - #_______________________________________________________________ - def setDbConn(self, condId, dbConn): - idInfo = self.__idDict.get(condId) - if not idInfo: - self.__log.error("CondId \'%s\' not recognized!" % condId) - else: - self.__log.info("Setting dbConn for condId \'%s\' to \'%s\'" % (condId,dbConn)) - idInfo[1] = dbConn - from string import find - if find(dbConn,".db")>0: - self.__log.info("The data source looks like sqlite file (.db), setting folder type to Sqlite") - self.__idDict[condId][4] = "Sqlite" - - #_______________________________________________________________ - def getDbConn(self, condId): - idInfo = self.__idDict.get(condId) - if not idInfo: - self.__log.error("CondId \'%s\' not recognized!" % condId) - else: - return idInfo[1] - - #_______________________________________________________________ - def setTag(self, condId, tag): - idInfo = self.__idDict.get(condId) - if not idInfo: - self.__log.error("CondId \'%s\' not recognized!" % condId) - else: - if len(tag) > 0: - if not tag.startswith('Tile'): - tag = self.getTagPrefix(self.getActualFolder(condId)) + tag - self.__log.info("Setting tag for condId \'%s\' to \'%s\'" % (condId,tag)) - idInfo[2] = tag - - #_______________________________________________________________ - def getTag(self, condId): - idInfo = self.__idDict.get(condId) - if not idInfo: - self.__log.error("CondId \'%s\' not recognized!" % condId) - else: - return idInfo[2] - - #_______________________________________________________________ - def setGlobalDbConn(self, dbConn): - for condId in self.__idDict.keys(): - self.setDbConn(condId,dbConn) - - #_______________________________________________________________ - def setGlobalTag(self, tag): - for condId in self.__idDict.keys(): - self.setTag(condId,tag) - - #_______________________________________________________________ - def getTagPrefix(self, coolFolder): - folderTag="" - for i in coolFolder.lower().split("/")[1:]: - folderTag+=i.capitalize() - folderTag+="-" - return folderTag - - #_______________________________________________________________ - def getConnectionString(self, condId): - idInfo = self.__idDict.get(condId) - if not idInfo: - self.__log.error("CondId \'%s\' not recognized!" % condId) - else: - fullStr = idInfo[1]+" " - if len(idInfo[2]): - fullStr += idInfo[2]+" " - fullStr += idInfo[0] - return fullStr - - - def isMC(self): - return self.__globalflags.DataSource() != 'data' - - def isOnline(self): - return self.__athenaCommonFlags.isOnline() - - - def isSourceAvailable(self, source): - return source in self.__idDict - - - def getActualFolder(self, condId): - if self.isOfflineOnly(condId): return self.getFolder(condId) - elif self.isSplitOnline(condId): - if self.isOnline() and not self.isMC(): return self.getFolder(condId) - else: return self.getFolderTwo(condId) - elif self.isSplitMC(condId): - if self.isMC(): return self.getFolderTwo(condId) - else: return self.getFolder(condId) - elif self.isSqlite(condId): return self.getFolder(condId) - else: return None - - -#-------------------------------------------------------------------------------------------------------- -#=== create object of the user -#-------------------------------------------------------------------------------------------------------- - -#=== fill with default folders: -tileCoolMgr = TileCoolMgr() -defConnStr = 'TILE' -oflConnStr = 'TILE_OFL' -#--- energy calibration - -tileCoolMgr.addSource('oflLasLin', '/TILE/ONL01/CALIB/LAS/LIN', defConnStr, "", '/TILE/OFL02/CALIB/LAS/LIN', 'SplitOnline') -tileCoolMgr.addSource('oflCes', '/TILE/ONL01/CALIB/CES', defConnStr, "", '/TILE/OFL02/CALIB/CES', 'SplitOnline') -tileCoolMgr.addSource('oflEms', '/TILE/ONL01/CALIB/EMS', defConnStr, "", '/TILE/OFL02/CALIB/EMS', 'SplitOnline') - -#--- online calib is taken from the folder tag defined in TileOfcCoolPlugin -#--- the tags are fixed only in the case of real data - in both online and offline schema. -tileCoolMgr.addSource('onlCisLin', '/TILE/ONL01/CALIB/CIS/LIN', defConnStr, "", '/TILE/OFL02/CALIB/CIS/FIT/LIN', 'SplitMC') -tileCoolMgr.addSource('onlLasLin', '/TILE/ONL01/CALIB/LAS/LIN', defConnStr, "", '/TILE/OFL02/CALIB/LAS/LIN', 'SplitMC') -tileCoolMgr.addSource('onlCes', '/TILE/ONL01/CALIB/CES', defConnStr, "", '/TILE/OFL02/CALIB/CES', 'SplitMC') -tileCoolMgr.addSource('onlEms', '/TILE/ONL01/CALIB/EMS', defConnStr, "", '/TILE/OFL02/CALIB/EMS', 'SplitMC') - -#--- MuID -tileCoolMgr.addSource('onlMuID' , '/TILE/ONL01/MUID', defConnStr, "", '/TILE/ONL01/MUID', 'SplitMC') - -#--- noise -tileCoolMgr.addSource('onlNoise1gOfni', '/TILE/ONL01/NOISE/OFNI', defConnStr, "", '/TILE/ONL01/NOISE/OFNI', 'SplitMC') - - -#--- status -tileCoolMgr.addSource('onlStatAdc', '/TILE/ONL01/STATUS/ADC', defConnStr, "", '/TILE/ONL01/STATUS/ADC', 'SplitMC') +from TileConditions.TileCoolMgrClass import TileCoolMgr +from AthenaCommon.GlobalFlags import globalflags +from AthenaCommon.AthenaCommonFlags import athenaCommonFlags +from IOVDbSvc.CondDB import conddb -#--- OFCs OF2 -tileCoolMgr.addSource('OfcOf2CisPl100', '/TILE/ONL01/FILTER/OF2/CIS', defConnStr, "", '/TILE/ONL01/FILTER/OF2/CIS', 'SplitMC') -tileCoolMgr.addSource('OfcOf2CisPl5p2', '/TILE/ONL01/FILTER/OF2/CIS', defConnStr, "", '/TILE/ONL01/FILTER/OF2/CIS', 'SplitMC') -tileCoolMgr.addSource('OfcOf2Las', '/TILE/ONL01/FILTER/OF2/LAS', defConnStr, "", '/TILE/ONL01/FILTER/OF2/LAS', 'SplitMC') +import string -#--- OFCs OF1 -tileCoolMgr.addSource('OfcOf1CisPl100', '/TILE/ONL01/FILTER/OF1/CIS', defConnStr, "", '/TILE/ONL01/FILTER/OF1/CIS', 'SplitMC') -tileCoolMgr.addSource('OfcOf1CisPl5p2', '/TILE/ONL01/FILTER/OF1/CIS', defConnStr, "", '/TILE/ONL01/FILTER/OF1/CIS', 'SplitMC') -tileCoolMgr.addSource('OfcOf1Las', '/TILE/ONL01/FILTER/OF1/LAS', defConnStr, "", '/TILE/ONL01/FILTER/OF1/LAS', 'SplitMC') +tileCoolMgr = TileCoolMgr(isMC=(globalflags.DataSource()!='data'), + isOnline=athenaCommonFlags.isOnline(), + dbInstance=conddb.GetInstance()) def GetTileOfcCoolSource(ofcType, runType = 'PHY'): return 'Ofc' + string.capwords(ofcType,'/').replace('/','') + runType.lower().capitalize() @@ -270,99 +28,5 @@ def AddTileOfcCoolSource(ofcType, runType = 'PHY', splitOnline = False): else: tileCoolMgr.addSource(ofcSource, ofcFolder, defConnStr, "", ofcFolder, 'SplitMC') -from IOVDbSvc.CondDB import conddb -if conddb.GetInstance() == 'CONDBR2': - - #--- OFCs - tileCoolMgr.addSource('OfcOf2Phy', '/TILE/ONL01/FILTER/OF2/PHY', defConnStr, "", '/TILE/OFL02/FILTER/OF2/PHY', 'SplitOnline') - tileCoolMgr.addSource('OfcOf1Phy', '/TILE/ONL01/FILTER/OF1/PHY', defConnStr, "", '/TILE/OFL02/FILTER/OF1/PHY', 'SplitOnline') - - #--- energy calibration - tileCoolMgr.addSource('oflCisFitLin', '/TILE/ONL01/CALIB/CIS/LIN', defConnStr, "", '/TILE/OFL02/CALIB/CIS/LIN', 'SplitOnline') - tileCoolMgr.addSource('oflCisFitNln', '/TILE/ONL01/CALIB/CIS/NLN', defConnStr, "", '/TILE/OFL02/CALIB/CIS/NLN', 'SplitOnline') - tileCoolMgr.addSource('oflLasNln', '/TILE/ONL01/CALIB/LAS/NLN', defConnStr, "", '/TILE/OFL02/CALIB/LAS/NLN', 'SplitOnline') - tileCoolMgr.addSource('oflLasFib', '/TILE/OFL02/CALIB/LAS/FIBER', oflConnStr, "", "", 'OfflineOnly') - - #--- pulse shape - tileCoolMgr.addSource('oflPlsPhy', '/TILE/OFL02/PULSESHAPE/PHY', oflConnStr, "", "", 'OfflineOnly') - tileCoolMgr.addSource('oflPlsLas', '/TILE/OFL02/PULSESHAPE/LAS', oflConnStr, "", "", 'OfflineOnly') - tileCoolMgr.addSource('oflPlsCisPl100', '/TILE/OFL02/PULSESHAPE/CIS/PULSE100', oflConnStr, "", "", 'OfflineOnly') - tileCoolMgr.addSource('oflPlsCisPl5p2', '/TILE/OFL02/PULSESHAPE/CIS/PULSE5P2', oflConnStr, "", "", 'OfflineOnly') - tileCoolMgr.addSource('oflPlsCisLk100', '/TILE/OFL02/PULSESHAPE/CIS/LEAK100', oflConnStr, "", "", 'OfflineOnly') - tileCoolMgr.addSource('oflPlsCisLk5p2', '/TILE/OFL02/PULSESHAPE/CIS/LEAK5P2', oflConnStr, "", "", 'OfflineOnly') - - #--- noise - tileCoolMgr.addSource('oflNoiseAdc', '/TILE/ONL01/NOISE/SAMPLE', defConnStr, "", '/TILE/OFL02/NOISE/SAMPLE', 'SplitOnline') - tileCoolMgr.addSource('onlNoiseAdc', '/TILE/ONL01/NOISE/SAMPLE', defConnStr, "", "", 'OfflineOnly') - tileCoolMgr.addSource('oflNoiseAcr', '/TILE/OFL02/NOISE/AUTOCR', oflConnStr, "", "", 'OfflineOnly') - - #--- timing - tileCoolMgr.addSource('oflTimeCphy', '/TILE/ONL01/TIME/CHANNELOFFSET/PHY', defConnStr, "", '/TILE/OFL02/TIME/CHANNELOFFSET/PHY', 'SplitOnline') - tileCoolMgr.addSource('onlTimeCphy', '/TILE/ONL01/TIME/CHANNELOFFSET/PHY', defConnStr, "", "", 'OfflineOnly') - tileCoolMgr.addSource('oflTimeClas', '/TILE/ONL01/TIME/CHANNELOFFSET/LAS', defConnStr, "", '/TILE/OFL02/TIME/CHANNELOFFSET/LAS', 'SplitOnline') - tileCoolMgr.addSource('onlTimeClas', '/TILE/ONL01/TIME/CHANNELOFFSET/LAS', defConnStr, "", "", 'OfflineOnly') - tileCoolMgr.addSource('oflTimeCgapLas', '/TILE/ONL01/TIME/CHANNELOFFSET/GAP/LAS', defConnStr, "", '/TILE/OFL02/TIME/CHANNELOFFSET/GAP/LAS', 'SplitOnline') - tileCoolMgr.addSource('onlTimeCgapLas', '/TILE/ONL01/TIME/CHANNELOFFSET/GAP/LAS', defConnStr, "", "", 'OfflineOnly') - tileCoolMgr.addSource('oflTimeCcis', '/TILE/ONL01/TIME/CHANNELOFFSET/CIS', defConnStr, "", '/TILE/OFL02/TIME/CHANNELOFFSET/CIS', 'SplitOnline') - tileCoolMgr.addSource('onlTimeCcis', '/TILE/ONL01/TIME/CHANNELOFFSET/CIS', defConnStr, "", "", 'OfflineOnly') - - #--- integrator - tileCoolMgr.addSource('oflIntGain', '/TILE/ONL01/INTEGRATOR', defConnStr, "", '/TILE/OFL02/INTEGRATOR', 'SplitOnline') - - #--- status - tileCoolMgr.addSource('oflStatAdc', '/TILE/OFL02/STATUS/ADC', oflConnStr, "", "", 'OfflineOnly') - - - #--- TMDB - tileCoolMgr.addSource('onlTmdbThresholdPhy', '/TILE/ONL01/TMDB/THRESHOLD/PHY', defConnStr, "", '/TILE/ONL01/TMDB/THRESHOLD/PHY', 'SplitMC') - tileCoolMgr.addSource('onlTmdbThresholdLas', '/TILE/ONL01/TMDB/THRESHOLD/LAS', defConnStr, "", '/TILE/ONL01/TMDB/THRESHOLD/LAS', 'SplitMC') - tileCoolMgr.addSource('onlTmdbThresholdCis', '/TILE/ONL01/TMDB/THRESHOLD/CIS', defConnStr, "", '/TILE/ONL01/TMDB/THRESHOLD/CIS', 'SplitMC') - - tileCoolMgr.addSource('onlTmdbDelayPhy', '/TILE/ONL01/TMDB/DELAY/PHY', defConnStr, "", '/TILE/ONL01/TMDB/DELAY/PHY', 'SplitMC') - tileCoolMgr.addSource('onlTmdbDelayLas', '/TILE/ONL01/TMDB/DELAY/LAS', defConnStr, "", '/TILE/ONL01/TMDB/DELAY/LAS', 'SplitMC') - tileCoolMgr.addSource('onlTmdbDelayCis', '/TILE/ONL01/TMDB/DELAY/CIS', defConnStr, "", '/TILE/ONL01/TMDB/DELAY/CIS', 'SplitMC') - - tileCoolMgr.addSource('onlTmdbTmfPhy', '/TILE/ONL01/TMDB/TMF/PHY', defConnStr, "", '/TILE/ONL01/TMDB/TMF/PHY', 'SplitMC') - tileCoolMgr.addSource('onlTmdbTmfLas', '/TILE/ONL01/TMDB/TMF/LAS', defConnStr, "", '/TILE/ONL01/TMDB/TMF/LAS', 'SplitMC') - tileCoolMgr.addSource('onlTmdbTmfCis', '/TILE/ONL01/TMDB/TMF/CIS', defConnStr, "", '/TILE/ONL01/TMDB/TMF/CIS', 'SplitMC') - - tileCoolMgr.addSource('onlTmdbCalibPhy', '/TILE/ONL01/TMDB/CALIB/PHY', defConnStr, "", '/TILE/ONL01/TMDB/CALIB/PHY', 'SplitMC') - - #--- noise - tileCoolMgr.addSource('oflDspThreshold', '/TILE/ONL01/DSP/THRESHOLD', defConnStr, "", '/TILE/OFL02/DSP/THRESHOLD', 'SplitOnline') - - -else: - - #--- OFCs - tileCoolMgr.addSource('OfcOf2Phy', '/TILE/ONL01/FILTER/OF2/PHY', defConnStr, "", '/TILE/ONL01/FILTER/OF2/PHY', 'SplitMC') - tileCoolMgr.addSource('OfcOf1Phy', '/TILE/ONL01/FILTER/OF1/PHY', defConnStr, "", '/TILE/ONL01/FILTER/OF1/PHY', 'SplitMC') - - #--- energy calibration - tileCoolMgr.addSource('oflCisFitLin', '/TILE/ONL01/CALIB/CIS/LIN', defConnStr, "", '/TILE/OFL02/CALIB/CIS/FIT/LIN', 'SplitOnline') - tileCoolMgr.addSource('oflCisFitNln', '/TILE/OFL01/CALIB/CIS/FIT/NLN', defConnStr, "", '/TILE/OFL02/CALIB/CIS/FIT/NLN', 'SplitOnline') - tileCoolMgr.addSource('oflLasNln', '/TILE/OFL01/CALIB/LAS/NLN', defConnStr, "", '/TILE/OFL02/CALIB/LAS/NLN', 'SplitOnline') - tileCoolMgr.addSource('oflLasFib', '/TILE/OFL01/CALIB/LAS/FIBER', defConnStr, "", '/TILE/OFL02/CALIB/LAS/FIBER', 'SplitOnline') - #--- pulse shape - tileCoolMgr.addSource('oflPlsPhy', '/TILE/OFL01/PULSESHAPE/PHY', defConnStr, "", '/TILE/OFL02/PULSESHAPE/PHY', 'SplitOnline') - tileCoolMgr.addSource('oflPlsLas', '/TILE/OFL01/PULSESHAPE/LAS', defConnStr, "", '/TILE/OFL02/PULSESHAPE/LAS', 'SplitOnline') - tileCoolMgr.addSource('oflPlsCisPl100', '/TILE/OFL01/PULSESHAPE/CIS/PULSE100', defConnStr, "", '/TILE/OFL02/PULSESHAPE/CIS/PULSE100', 'SplitOnline') - tileCoolMgr.addSource('oflPlsCisPl5p2', '/TILE/OFL01/PULSESHAPE/CIS/PULSE5P2', defConnStr, "", '/TILE/OFL02/PULSESHAPE/CIS/PULSE5P2', 'SplitOnline') - tileCoolMgr.addSource('oflPlsCisLk100', '/TILE/OFL01/PULSESHAPE/CIS/LEAK100', defConnStr, "", '/TILE/OFL02/PULSESHAPE/CIS/LEAK100', 'SplitOnline') - tileCoolMgr.addSource('oflPlsCisLk5p2', '/TILE/OFL01/PULSESHAPE/CIS/LEAK5P2', defConnStr, "", '/TILE/OFL02/PULSESHAPE/CIS/LEAK5P2', 'SplitOnline') - - #--- noise - tileCoolMgr.addSource('oflNoiseAdc', '/TILE/OFL01/NOISE/SAMPLE', defConnStr, "", '/TILE/OFL02/NOISE/SAMPLE', 'SplitOnline') - tileCoolMgr.addSource('oflNoiseAcr', '/TILE/OFL01/NOISE/AUTOCR', defConnStr, "", '/TILE/OFL02/NOISE/AUTOCR', 'SplitOnline') - - #--- timing - tileCoolMgr.addSource('oflTimeCphy', '/TILE/OFL01/TIME/CHANNELOFFSET/PHY', defConnStr, "", '/TILE/OFL02/TIME/CHANNELOFFSET/PHY', 'SplitOnline') - tileCoolMgr.addSource('oflTimeClas', '/TILE/OFL01/TIME/CHANNELOFFSET/LAS', defConnStr, "", '/TILE/OFL02/TIME/CHANNELOFFSET/LAS', 'SplitOnline') - tileCoolMgr.addSource('oflTimeCcis', '/TILE/OFL01/TIME/CHANNELOFFSET/CIS', defConnStr, "", '/TILE/OFL02/TIME/CHANNELOFFSET/CIS', 'SplitOnline') - - #--- integrator - tileCoolMgr.addSource('oflIntGain', '/TILE/OFL01/INTEGRATOR', defConnStr, "", '/TILE/OFL02/INTEGRATOR', 'SplitOnline') - #--- status - tileCoolMgr.addSource('oflStatAdc', '/TILE/OFL01/STATUS/ADC', defConnStr, "", '/TILE/OFL02/STATUS/ADC', 'SplitOnline') diff --git a/TileCalorimeter/TileConditions/python/TileCoolMgrClass.py b/TileCalorimeter/TileConditions/python/TileCoolMgrClass.py new file mode 100644 index 0000000000000000000000000000000000000000..62d0e448e343ab79fb8fa36efa968c98d532fcf5 --- /dev/null +++ b/TileCalorimeter/TileConditions/python/TileCoolMgrClass.py @@ -0,0 +1,356 @@ +# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + +#file: TileCoolMgr.py +#author: nils.gollub@cern.ch +#modifications: lukas.pribyl@cern.ch + +class TileCoolMgr: + + #_______________________________________________________________ + def __init__(self,isMC,isOnline,dbInstance): + + #=== initialize logger with INFO level + from AthenaCommon.Logging import logging + self.__log = logging.getLogger( 'TileCoolMgr' ) + # self.__log.setLevel(logging.INFO) + + #=== Master dictionary for: condId -> [folder, connStr, tag, folder2, type] + self.__idDict = {} + + #=== Available folder types + self.__validTypes = ["SplitMC", "SplitOnline", "OfflineOnly", "Sqlite"] + + #=== do we run on real data (not MC)? + self._isMC=isMC + self._isOnline=isOnline + self._dbInstance=dbInstance + + self.fillMe() + + + def isMC(self): + return self._isMC + + def isOnline(self): + return self._isOnline + + + #_______________________________________________________________ + def addSource(self, condId, folder, connStr, tag, folder2, type, key = ""): + if type not in self.__validTypes: + self.__log.error("Folder type \'%s\' not recognized!" % type) + if (type != "OfflineOnly") and (folder2 == ""): + self.__log.error("For folder type \'%s\' second folder name required!" % type) + self.__idDict[condId] = [folder, connStr, tag, folder2, type, key] + + #_______________________________________________________________ + def getFolder(self, condId): + idInfo = self.__idDict.get(condId) + if not idInfo: + self.__log.error("CondId \'%s\' not recognized!" % condId) + return None + else: + return idInfo[0] + #_______________________________________________________________ + def getKey(self, condId): + idInfo = self.__idDict.get(condId) + if not idInfo: + self.__log.error("CondId \'%s\' not recognized!" % condId) + return None + elif idInfo[5] != "": return idInfo[5] + elif len(self.getTag(condId)): return self.getTag(condId) + else: + folder = self.getActualFolder(condId) + if folder: return folder + else: + self.__log.error("Cannot find out key for \'%s\'!" % condId) + return None + + #_______________________________________________________________ + def getFolderTwo(self, condId): + idInfo = self.__idDict.get(condId) + if not idInfo: + self.__log.error("CondId \'%s\' not recognized!" % condId) + return None + else: + return idInfo[3] + + #_______________________________________________________________ + def isSplitMC(self, condId): + idInfo = self.__idDict.get(condId) + if not idInfo: + self.__log.error("CondId \'%s\' not recognized!" % condId) + return None + else: + if idInfo[4]=="SplitMC": return True + else: return False + + #_______________________________________________________________ + def isSplitOnline(self, condId): + idInfo = self.__idDict.get(condId) + if not idInfo: + self.__log.error("CondId \'%s\' not recognized!" % condId) + return None + else: + if idInfo[4]=="SplitOnline": return True + else: return False + + #_______________________________________________________________ + def isOfflineOnly(self, condId): + idInfo = self.__idDict.get(condId) + if not idInfo: + self.__log.error("CondId \'%s\' not recognized!" % condId) + return None + else: + if idInfo[4]=="OfflineOnly": return True + else: return False + + #_______________________________________________________________ + def isSqlite(self, condId): + idInfo = self.__idDict.get(condId) + if not idInfo: + self.__log.error("CondId \'%s\' not recognized!" % condId) + return None + else: + if idInfo[4]=="Sqlite": return True + else: return False + + + #_______________________________________________________________ + def setFolder(self, condId, folder): + idInfo = self.__idDict.get(condId) + if not idInfo: + self.__log.error("CondId \'%s\' not recognized!" % condId) + else: + self.__log.info("Setting folder for condId \'%s\' to \'%s\'" % (condId,folder)) + idInfo[0] = folder + idInfo[3] = folder + + #_______________________________________________________________ + def setDbConn(self, condId, dbConn): + idInfo = self.__idDict.get(condId) + if not idInfo: + self.__log.error("CondId \'%s\' not recognized!" % condId) + else: + self.__log.info("Setting dbConn for condId \'%s\' to \'%s\'" % (condId,dbConn)) + idInfo[1] = dbConn + from string import find + if find(dbConn,".db")>0: + self.__log.info("The data source looks like sqlite file (.db), setting folder type to Sqlite") + self.__idDict[condId][4] = "Sqlite" + + #_______________________________________________________________ + def getDbConn(self, condId): + idInfo = self.__idDict.get(condId) + if not idInfo: + self.__log.error("CondId \'%s\' not recognized!" % condId) + else: + return idInfo[1] + + #_______________________________________________________________ + def setTag(self, condId, tag): + idInfo = self.__idDict.get(condId) + if not idInfo: + self.__log.error("CondId \'%s\' not recognized!" % condId) + else: + if len(tag) > 0: + if not tag.startswith('Tile'): + tag = self.getTagPrefix(self.getActualFolder(condId)) + tag + self.__log.info("Setting tag for condId \'%s\' to \'%s\'" % (condId,tag)) + idInfo[2] = tag + + #_______________________________________________________________ + def getTag(self, condId): + idInfo = self.__idDict.get(condId) + if not idInfo: + self.__log.error("CondId \'%s\' not recognized!" % condId) + else: + return idInfo[2] + + #_______________________________________________________________ + def setGlobalDbConn(self, dbConn): + for condId in self.__idDict.keys(): + self.setDbConn(condId,dbConn) + + #_______________________________________________________________ + def setGlobalTag(self, tag): + for condId in self.__idDict.keys(): + self.setTag(condId,tag) + + #_______________________________________________________________ + def getTagPrefix(self, coolFolder): + folderTag="" + for i in coolFolder.lower().split("/")[1:]: + folderTag+=i.capitalize() + folderTag+="-" + return folderTag + + #_______________________________________________________________ + def getConnectionString(self, condId): + idInfo = self.__idDict.get(condId) + if not idInfo: + self.__log.error("CondId \'%s\' not recognized!" % condId) + else: + fullStr = idInfo[1]+" " + if len(idInfo[2]): + fullStr += idInfo[2]+" " + fullStr += idInfo[0] + return fullStr + + + def isSourceAvailable(self, source): + return source in self.__idDict + + + def getActualFolder(self, condId): + if self.isOfflineOnly(condId): return self.getFolder(condId) + elif self.isSplitOnline(condId): + if self.isOnline() and not self.isMC(): return self.getFolder(condId) + else: return self.getFolderTwo(condId) + elif self.isSplitMC(condId): + if self.isMC(): return self.getFolderTwo(condId) + else: return self.getFolder(condId) + elif self.isSqlite(condId): return self.getFolder(condId) + else: return None + + + + + def fillMe(self): + defConnStr = 'TILE' + oflConnStr = 'TILE_OFL' + #--- energy calibration + + self.addSource('oflLasLin', '/TILE/ONL01/CALIB/LAS/LIN', defConnStr, "", '/TILE/OFL02/CALIB/LAS/LIN', 'SplitOnline') + self.addSource('oflCes', '/TILE/ONL01/CALIB/CES', defConnStr, "", '/TILE/OFL02/CALIB/CES', 'SplitOnline') + self.addSource('oflEms', '/TILE/ONL01/CALIB/EMS', defConnStr, "", '/TILE/OFL02/CALIB/EMS', 'SplitOnline') + + #--- online calib is taken from the folder tag defined in TileOfcCoolPlugin + #--- the tags are fixed only in the case of real data - in both online and offline schema. + self.addSource('onlCisLin', '/TILE/ONL01/CALIB/CIS/LIN', defConnStr, "", '/TILE/OFL02/CALIB/CIS/FIT/LIN', 'SplitMC') + self.addSource('onlLasLin', '/TILE/ONL01/CALIB/LAS/LIN', defConnStr, "", '/TILE/OFL02/CALIB/LAS/LIN', 'SplitMC') + self.addSource('onlCes', '/TILE/ONL01/CALIB/CES', defConnStr, "", '/TILE/OFL02/CALIB/CES', 'SplitMC') + self.addSource('onlEms', '/TILE/ONL01/CALIB/EMS', defConnStr, "", '/TILE/OFL02/CALIB/EMS', 'SplitMC') + + #--- MuID + self.addSource('onlMuID' , '/TILE/ONL01/MUID', defConnStr, "", '/TILE/ONL01/MUID', 'SplitMC') + + #--- noise + self.addSource('onlNoise1gOfni', '/TILE/ONL01/NOISE/OFNI', defConnStr, "", '/TILE/ONL01/NOISE/OFNI', 'SplitMC') + + + #--- status + self.addSource('onlStatAdc', '/TILE/ONL01/STATUS/ADC', defConnStr, "", '/TILE/ONL01/STATUS/ADC', 'SplitMC') + + #--- OFCs OF2 + self.addSource('OfcOf2CisPl100', '/TILE/ONL01/FILTER/OF2/CIS', defConnStr, "", '/TILE/ONL01/FILTER/OF2/CIS', 'SplitMC') + self.addSource('OfcOf2CisPl5p2', '/TILE/ONL01/FILTER/OF2/CIS', defConnStr, "", '/TILE/ONL01/FILTER/OF2/CIS', 'SplitMC') + self.addSource('OfcOf2Las', '/TILE/ONL01/FILTER/OF2/LAS', defConnStr, "", '/TILE/ONL01/FILTER/OF2/LAS', 'SplitMC') + + #--- OFCs OF1 + self.addSource('OfcOf1CisPl100', '/TILE/ONL01/FILTER/OF1/CIS', defConnStr, "", '/TILE/ONL01/FILTER/OF1/CIS', 'SplitMC') + self.addSource('OfcOf1CisPl5p2', '/TILE/ONL01/FILTER/OF1/CIS', defConnStr, "", '/TILE/ONL01/FILTER/OF1/CIS', 'SplitMC') + self.addSource('OfcOf1Las', '/TILE/ONL01/FILTER/OF1/LAS', defConnStr, "", '/TILE/ONL01/FILTER/OF1/LAS', 'SplitMC') + + + if (self._dbInstance == 'CONDBR2'): + #--- OFCs + self.addSource('OfcOf2Phy', '/TILE/ONL01/FILTER/OF2/PHY', defConnStr, "", '/TILE/OFL02/FILTER/OF2/PHY', 'SplitOnline') + self.addSource('OfcOf1Phy', '/TILE/ONL01/FILTER/OF1/PHY', defConnStr, "", '/TILE/OFL02/FILTER/OF1/PHY', 'SplitOnline') + + #--- energy calibration + self.addSource('oflCisFitLin', '/TILE/ONL01/CALIB/CIS/LIN', defConnStr, "", '/TILE/OFL02/CALIB/CIS/LIN', 'SplitOnline') + self.addSource('oflCisFitNln', '/TILE/ONL01/CALIB/CIS/NLN', defConnStr, "", '/TILE/OFL02/CALIB/CIS/NLN', 'SplitOnline') + self.addSource('oflLasNln', '/TILE/ONL01/CALIB/LAS/NLN', defConnStr, "", '/TILE/OFL02/CALIB/LAS/NLN', 'SplitOnline') + self.addSource('oflLasFib', '/TILE/OFL02/CALIB/LAS/FIBER', oflConnStr, "", "", 'OfflineOnly') + + #--- pulse shape + self.addSource('oflPlsPhy', '/TILE/OFL02/PULSESHAPE/PHY', oflConnStr, "", "", 'OfflineOnly') + self.addSource('oflPlsLas', '/TILE/OFL02/PULSESHAPE/LAS', oflConnStr, "", "", 'OfflineOnly') + self.addSource('oflPlsCisPl100', '/TILE/OFL02/PULSESHAPE/CIS/PULSE100', oflConnStr, "", "", 'OfflineOnly') + self.addSource('oflPlsCisPl5p2', '/TILE/OFL02/PULSESHAPE/CIS/PULSE5P2', oflConnStr, "", "", 'OfflineOnly') + self.addSource('oflPlsCisLk100', '/TILE/OFL02/PULSESHAPE/CIS/LEAK100', oflConnStr, "", "", 'OfflineOnly') + self.addSource('oflPlsCisLk5p2', '/TILE/OFL02/PULSESHAPE/CIS/LEAK5P2', oflConnStr, "", "", 'OfflineOnly') + + #--- noise + self.addSource('oflNoiseAdc', '/TILE/ONL01/NOISE/SAMPLE', defConnStr, "", '/TILE/OFL02/NOISE/SAMPLE', 'SplitOnline') + self.addSource('onlNoiseAdc', '/TILE/ONL01/NOISE/SAMPLE', defConnStr, "", "", 'OfflineOnly') + self.addSource('oflNoiseAcr', '/TILE/OFL02/NOISE/AUTOCR', oflConnStr, "", "", 'OfflineOnly') + + #--- timing + self.addSource('oflTimeCphy', '/TILE/ONL01/TIME/CHANNELOFFSET/PHY', defConnStr, "", '/TILE/OFL02/TIME/CHANNELOFFSET/PHY', 'SplitOnline') + self.addSource('onlTimeCphy', '/TILE/ONL01/TIME/CHANNELOFFSET/PHY', defConnStr, "", "", 'OfflineOnly') + self.addSource('oflTimeClas', '/TILE/ONL01/TIME/CHANNELOFFSET/LAS', defConnStr, "", '/TILE/OFL02/TIME/CHANNELOFFSET/LAS', 'SplitOnline') + self.addSource('onlTimeClas', '/TILE/ONL01/TIME/CHANNELOFFSET/LAS', defConnStr, "", "", 'OfflineOnly') + self.addSource('oflTimeCgapLas', '/TILE/ONL01/TIME/CHANNELOFFSET/GAP/LAS', defConnStr, "", '/TILE/OFL02/TIME/CHANNELOFFSET/GAP/LAS', 'SplitOnline') + self.addSource('onlTimeCgapLas', '/TILE/ONL01/TIME/CHANNELOFFSET/GAP/LAS', defConnStr, "", "", 'OfflineOnly') + self.addSource('oflTimeCcis', '/TILE/ONL01/TIME/CHANNELOFFSET/CIS', defConnStr, "", '/TILE/OFL02/TIME/CHANNELOFFSET/CIS', 'SplitOnline') + self.addSource('onlTimeCcis', '/TILE/ONL01/TIME/CHANNELOFFSET/CIS', defConnStr, "", "", 'OfflineOnly') + + #--- integrator + self.addSource('oflIntGain', '/TILE/ONL01/INTEGRATOR', defConnStr, "", '/TILE/OFL02/INTEGRATOR', 'SplitOnline') + + #--- status + self.addSource('oflStatAdc', '/TILE/OFL02/STATUS/ADC', oflConnStr, "", "", 'OfflineOnly') + + + #--- TMDB + self.addSource('onlTmdbThresholdPhy', '/TILE/ONL01/TMDB/THRESHOLD/PHY', defConnStr, "", '/TILE/ONL01/TMDB/THRESHOLD/PHY', 'SplitMC') + self.addSource('onlTmdbThresholdLas', '/TILE/ONL01/TMDB/THRESHOLD/LAS', defConnStr, "", '/TILE/ONL01/TMDB/THRESHOLD/LAS', 'SplitMC') + self.addSource('onlTmdbThresholdCis', '/TILE/ONL01/TMDB/THRESHOLD/CIS', defConnStr, "", '/TILE/ONL01/TMDB/THRESHOLD/CIS', 'SplitMC') + + self.addSource('onlTmdbDelayPhy', '/TILE/ONL01/TMDB/DELAY/PHY', defConnStr, "", '/TILE/ONL01/TMDB/DELAY/PHY', 'SplitMC') + self.addSource('onlTmdbDelayLas', '/TILE/ONL01/TMDB/DELAY/LAS', defConnStr, "", '/TILE/ONL01/TMDB/DELAY/LAS', 'SplitMC') + self.addSource('onlTmdbDelayCis', '/TILE/ONL01/TMDB/DELAY/CIS', defConnStr, "", '/TILE/ONL01/TMDB/DELAY/CIS', 'SplitMC') + + self.addSource('onlTmdbTmfPhy', '/TILE/ONL01/TMDB/TMF/PHY', defConnStr, "", '/TILE/ONL01/TMDB/TMF/PHY', 'SplitMC') + self.addSource('onlTmdbTmfLas', '/TILE/ONL01/TMDB/TMF/LAS', defConnStr, "", '/TILE/ONL01/TMDB/TMF/LAS', 'SplitMC') + self.addSource('onlTmdbTmfCis', '/TILE/ONL01/TMDB/TMF/CIS', defConnStr, "", '/TILE/ONL01/TMDB/TMF/CIS', 'SplitMC') + + self.addSource('onlTmdbCalibPhy', '/TILE/ONL01/TMDB/CALIB/PHY', defConnStr, "", '/TILE/ONL01/TMDB/CALIB/PHY', 'SplitMC') + + #--- noise + self.addSource('oflDspThreshold', '/TILE/ONL01/DSP/THRESHOLD', defConnStr, "", '/TILE/OFL02/DSP/THRESHOLD', 'SplitOnline') + else: + + #--- OFCs + self.addSource('OfcOf2Phy', '/TILE/ONL01/FILTER/OF2/PHY', defConnStr, "", '/TILE/ONL01/FILTER/OF2/PHY', 'SplitMC') + self.addSource('OfcOf1Phy', '/TILE/ONL01/FILTER/OF1/PHY', defConnStr, "", '/TILE/ONL01/FILTER/OF1/PHY', 'SplitMC') + + #--- energy calibration + self.addSource('oflCisFitLin', '/TILE/ONL01/CALIB/CIS/LIN', defConnStr, "", '/TILE/OFL02/CALIB/CIS/FIT/LIN', 'SplitOnline') + self.addSource('oflCisFitNln', '/TILE/OFL01/CALIB/CIS/FIT/NLN', defConnStr, "", '/TILE/OFL02/CALIB/CIS/FIT/NLN', 'SplitOnline') + self.addSource('oflLasNln', '/TILE/OFL01/CALIB/LAS/NLN', defConnStr, "", '/TILE/OFL02/CALIB/LAS/NLN', 'SplitOnline') + self.addSource('oflLasFib', '/TILE/OFL01/CALIB/LAS/FIBER', defConnStr, "", '/TILE/OFL02/CALIB/LAS/FIBER', 'SplitOnline') + #--- pulse shape + self.addSource('oflPlsPhy', '/TILE/OFL01/PULSESHAPE/PHY', defConnStr, "", '/TILE/OFL02/PULSESHAPE/PHY', 'SplitOnline') + self.addSource('oflPlsLas', '/TILE/OFL01/PULSESHAPE/LAS', defConnStr, "", '/TILE/OFL02/PULSESHAPE/LAS', 'SplitOnline') + self.addSource('oflPlsCisPl100', '/TILE/OFL01/PULSESHAPE/CIS/PULSE100', defConnStr, "", '/TILE/OFL02/PULSESHAPE/CIS/PULSE100', 'SplitOnline') + self.addSource('oflPlsCisPl5p2', '/TILE/OFL01/PULSESHAPE/CIS/PULSE5P2', defConnStr, "", '/TILE/OFL02/PULSESHAPE/CIS/PULSE5P2', 'SplitOnline') + self.addSource('oflPlsCisLk100', '/TILE/OFL01/PULSESHAPE/CIS/LEAK100', defConnStr, "", '/TILE/OFL02/PULSESHAPE/CIS/LEAK100', 'SplitOnline') + self.addSource('oflPlsCisLk5p2', '/TILE/OFL01/PULSESHAPE/CIS/LEAK5P2', defConnStr, "", '/TILE/OFL02/PULSESHAPE/CIS/LEAK5P2', 'SplitOnline') + + #--- noise + self.addSource('oflNoiseAdc', '/TILE/OFL01/NOISE/SAMPLE', defConnStr, "", '/TILE/OFL02/NOISE/SAMPLE', 'SplitOnline') + self.addSource('oflNoiseAcr', '/TILE/OFL01/NOISE/AUTOCR', defConnStr, "", '/TILE/OFL02/NOISE/AUTOCR', 'SplitOnline') + + #--- timing + self.addSource('oflTimeCphy', '/TILE/OFL01/TIME/CHANNELOFFSET/PHY', defConnStr, "", '/TILE/OFL02/TIME/CHANNELOFFSET/PHY', 'SplitOnline') + self.addSource('oflTimeClas', '/TILE/OFL01/TIME/CHANNELOFFSET/LAS', defConnStr, "", '/TILE/OFL02/TIME/CHANNELOFFSET/LAS', 'SplitOnline') + self.addSource('oflTimeCcis', '/TILE/OFL01/TIME/CHANNELOFFSET/CIS', defConnStr, "", '/TILE/OFL02/TIME/CHANNELOFFSET/CIS', 'SplitOnline') + + #--- integrator + self.addSource('oflIntGain', '/TILE/OFL01/INTEGRATOR', defConnStr, "", '/TILE/OFL02/INTEGRATOR', 'SplitOnline') + + #--- status + self.addSource('oflStatAdc', '/TILE/OFL01/STATUS/ADC', defConnStr, "", '/TILE/OFL02/STATUS/ADC', 'SplitOnline') + pass + + + +def TileCoolMgrConfig(configflags): + #Instantiate TileCoolMgr based on run3-style config flags + return TileCoolMgr(isMC=configFlags.Input.isMC, + isOnline=configFlags.common.isOnline, + dbInstance=configFlags.IOVDb.DatabaseInstance) +