def insert(attributes): values = [] keys = [] dir1 = "/BES3_test/File/"+attributes["resonance"]+"/"+attributes["bossVer"] #get real eventType and expNum in catalogue in amga eventType = getEventType(attributes["eventType"]) expNum = getExpNum(attributes["expNum"]) if attributes["streamId"]=="stream0": dir=dir1+"/data" else: dir=dir1+"/mc" client=mdclient.MDClient('badger01.ihep.ac.cn',8822,'amga','Amg@Us3r') #client=mdclient.MDClient('besdev01.ihep.ac.cn',8822,'root') #get insertion directory in amga insertDir = createCatalog(client,dir,eventType,expNum,attributes["streamId"]) #LFN is directory + filename in amga entry=insertDir+"/"+attributes["LFN"] attributes["LFN"] = entry for key in attributes.keys(): keys.append(key) values.append(attributes[key]) try: #insert dst file to amga client.addEntry(entry,keys,values) except mdinterface.CommandException,ex: print "Error",ex
def compare(attributes, input): list = {} inamga = {} n = 0 #print "input keys:",input.keys() keys = sorted(input.keys()) #print "keys after being sorted:",keys expNum = getExpNum(attributes["expNum"]) eventType = getEventType(attributes["eventType"]) dir = "/BES3/File/" + attributes["resonance"] + "/" + attributes["bossVer"] if attributes["streamId"] == "stream0": dir += "/data" + "/" + eventType + "/" + expNum else: dir += "/mc" + "/" + eventType + "/" + expNum + "/" + attributes[ "streamId"] entry = dir + "/" + attributes["LFN"] client = mdclient.MDClient('badger01.ihep.ac.cn', 8822, 'amga', 'Amg@Us3r') client.getattr(entry, ['resonance', 'streamId', 'eventType', 'bossVer', 'expNum']) result = client.getEntry()[1] inamga["resonance"] = result[0] inamga["streamId"] = result[1] inamga["eventType"] = result[2] inamga["bossVer"] = result[3] inamga["expNum"] = result[4] for key in keys: if input[key] != inamga[key]: list[key] = inamga[key] n += 1 if list is not None: return list
def eventTypeCheck(eventType): entries = [] client = mdclient.MDClient('badger01.ihep.ac.cn',8822,'amga','Amg@Us3r') #client = mdclient.MDClient('besdev01.ihep.ac.cn',8822,'root') client.listEntries('/BES3_test/EventTypeList') entry = client.getEntry()[0] while entry: entries.append(entry) entry = client.getEntry()[0] for entry in entries: #get name of each entry client.getattr(entry,['FILE']) result = client.getEntry()[1] #compare eventType with name of each entry if eventType == result[0]: return True return False
def insertToExp(items): #items is a list,and contains values of #'runFrm','runTo','dateFrm','dateTo','expNum','resonance','roundId' client=mdclient.MDClient('badger01.ihep.ac.cn',8822,'amga','Amg@Us3r') keys=['Id','runFrm','runTo','dateFrm','dateTo','expNum','resonance','roundId'] #In items, the types of runFrm and runTo are str runfrm=string.atoi(items[0]) runto=string.atoi(items[1]) expnum = string.lower(items[4]) resonance = string.lower(items[5]) roundid = string.lower(items[6]) id = uuid.uuid1() values=[id,runfrm,runto,items[2],items[3],expnum,resonance,roundid] #set entry name is resonance+"_"+expnum entryName='/BES3/ExpSearch/'+resonance+"_"+expnum try: client.addEntry(entryName,keys,values) except mdinterface.CommandException,ex: print "Error",ex
client.addAttr("/BES3/ExpSearch", "dateFrm", "timestamp") client.addAttr("/BES3/ExpSearch", "dateTo", "timestamp") client.addAttr("/BES3/ExpSearch", "expNum", "varchar(20)") client.addAttr("/BES3/ExpSearch", "resonance", "varchar(20)") client.addAttr("/BES3/ExpSearch", "roundId", "varchar(20)") except mdinterface.CommandException, ex: print "Error", ex def createEventTypeList(client): try: client.createDir("/BES3/EventTypeList") except mdinterface.CommandException, ex: print "Error", ex if __name__ == "__main__": client = mdclient.MDClient('badger01.ihep.ac.cn', 8822, 'amga', 'Amg@Us3r') resonance = ["jpsi", "psip", "psipp", "psi4040", "con3650", "psippscan"] bossVer = ["6.5.5", "6.6.1"] type = ["data", "mc"] try: client.createDir("/BES3") except mdinterface.CommandException, ex: print "Error", ex createFileDir(client, resonance, bossVer, type) createExpSearch(client) createEventTypeList(client)
def getExpRes(runids): entries = [] expRes = {} expNumList = [] resList = [] #print"runids",runids client = mdclient.MDClient('badger01.ihep.ac.cn',8822,'amga','Amg@Us3r') #client = mdclient.MDClient('besdev01.ihep.ac.cn',8822,'root') #get all entries under catalog "/BES3/ExpSearch" client.listEntries('/BES3_test/ExpSearch') entry = client.getEntry()[0] while entry: entries.append(entry) entry = client.getEntry()[0] if entries is None: print "ExpSearch directory is empty, please run createBesDir first" return Flase for item in entries: #for each entry,get its attributes in amga client.getattr(item,['Id','runFrm','runTo','expNum','resonance']) result = client.getEntry()[1] # print item # print result runfrm = string.atoi(result[1]) runto = string.atoi(result[2]) for runid in runids: #check all runid whether between runfrm and runto of each entry #under catalog "/BES3/ExpSearch" if runfrm<=runid<=runto: #if this runid between runfrm and runto,and expNum isn't in expNumList #add this expNum to expNumList if result[3] not in expNumList: expNumList.append(result[3]) #resonance of this id isn't in resonance List,add it to resList if result[4] not in resList: resList.append(result[4]) #only including one resonance if len(resList) == 1: expRes["resonance"] = resList[0] else: #has several resonances,may be has something wrong to this file print "serveral resonance:",resList return False #only including one expNum if len(expNumList) == 1: expRes["expNum"] = expNumList[0] else: #if including several expNums,combine these expNum into mexpN1pN2p... sorted(expNumList) str = "m" + expNumList[0] for expNum in expNumList[1:]: str = str + "p+" + getNum(expNum) expRes["expNum"] = str return expRes