import sys import urllib2 import re import math #Start='2012-11-04 00:00:00' #UTC time #End ='2012-11-07 00:00:00' #UTC time Start='2012-11-04 00:00:00' #UTC time End ='2012-11-07 00:00:00' #UTC time bar0 = 3 #3,4,5,6 phimax_m1 = [0, 0, 0, 31, 39, 47, 55] filename = "rawTempB"+str(bar0)+"_"+Start.split()[0]+".txt" print filename #----------------------------------------------------------- def queryMODTEMP(f, iovString, channelSelector): folderSelector="ATLAS_COOLOFL_DCS/COMP200/SCT/DCS/MODTEMP/timespan/" #channelSelector="/channels/134230016" #channelSelector="/channels/134262784" #channelSelector="/channels/*" selector=folderSelector+iovString+channelSelector #print selector return queryCool(selector,f) def queryCool(urlSuffix,f): url="http://coolcherrypy.cern.ch:8080/cooldb/ATLAS_COOLPROD/"+urlSuffix #print url #we want xml from cherrypy #httpHeaders={'Accept':'text/xml'} httpHeaders={'Accept':'text'} textData=None request=urllib2.Request(url,textData, httpHeaders) u=urllib2.urlopen(request) #return answer as a string of xml index = 0 ids = ["0"] temperature0s = ["0"] temperature1s = ["0"] dates = ["0"] times = ["0"] # loop over data iline = 0 for line in u: if iline != 0: #f.write(line) if iline%3 ==1 : idtemp = line.split('"') # find module id result = int(idtemp[1]) sct = result >> 27 result1 = result - (sct << 27) eb = result1 >> 25 result2 = result1 - (eb << 25) l1 = (result2 >> 21) if (eb == 1): bar = l1 + 3 if (eb == 0 or eb == 2): bar = l1 + 1 result3 = result2 - (l1 << 21) phi = result3 >> 15 result4 = result3 - (phi << 15) eta = (result4 >> 11) - 6; id = "%s %s %s %s" % (eb,bar,eta,phi) ids.append(id) # fine date and time datetimetemp = idtemp[3] datetimetemp1 = datetimetemp.split(" ") day = datetimetemp1[1] monthtemp = datetimetemp1[2] if (monthtemp == "Jan"): month = '01' if (monthtemp == "Feb"): month = '02' if (monthtemp == "Mar"): month = '03' if (monthtemp == "Apr"): month = '04' if (monthtemp == "May"): month = '05' if (monthtemp == "Jun"): month = '06' if (monthtemp == "Jul"): month = '07' if (monthtemp == "Aug"): month = '08' if (monthtemp == "Sep"): month = '09' if (monthtemp == "Oct"): month = '10' if (monthtemp == "Nov"): month = '11' if (monthtemp == "Dec"): month = '12' year = datetimetemp1[3] date = "%s %s %s" % (year,month,day) dates.append(date) timetemp = datetimetemp1[4] time = timetemp.replace(':','') times.append(time) #f.write(date + " " + time + " "+idtemp[1]+ "\n") if iline%3 ==2 : tm0linetemp = line.split('>') Ttemp = tm0linetemp[1] Ttemp0 = Ttemp.split('<') temperature0s.append(Ttemp0[0]) if iline%3 ==0 : tm0linetemp = line.split('>') Ttemp = tm0linetemp[1] Ttemp1 = Ttemp.split('<') temperature1s.append(Ttemp1[0]) f.write(id+" "+date+" "+time+" "+"\t"+Ttemp0[0]+"\t"+Ttemp1[0]+"\n") index += 1 if index < 4: print str(index) + " " + date + " " + time iline += 1 #add one more dummy data dates.append("2099 9 9") times.append("999999") temperature0s.append("999") temperature1s.append("999") index += 1 # take mean valune of each day i = 1 isum0 = isum1 = 1 sum02 = sum0 = 0.0 sum12 = sum1 = 0.0 dates0 = "99 99" ids0 = "9 9 9 9" while i < index: if times[i] != times[i-1] : if times[i] != times[i+1] : if temperature0s[i] != "-30" : # take day average if dates[i] != dates0 : avTemp0 = -30 avTemp1 = -30 if isum0 > 0: avTemp0 = sum0 / isum0 if isum1 > 0: avTemp1 = sum1 / isum1 deTemp0 = 0 deTemp1 = 0 if isum0 > 1: temp = sum02 - avTemp0*avTemp0*isum0 deTemp0 = math.sqrt(math.fabs(temp))/(isum0-1) if isum1 > 1: temp = sum12 - avTemp1*avTemp1*isum1 deTemp1 = math.sqrt(math.fabs(temp))/(isum1-1) ff = "%7d %7.2f %6.2f %7.2f %6.2f" % (isum0,avTemp0,deTemp0,avTemp1,deTemp1) # if ids0 != "9 9 9 9": # f.write(ids0+" "+dates0+ff+"\n") sum0 = sum02 = sum1 = sum12 = 0.0 isum0 = isum1 = 0 if(temperature0s[i] != "NULL"): sum0 = float(temperature0s[i]) sum02 = sum0 ** 2 isum0 = 1 if(temperature1s[i] != "NULL"): sum1 = float(temperature1s[i]) sum12 = sum1 ** 2 isum1 = 1 dates0 = dates[i] ids0 = ids[i] else: if(temperature0s[i] != "NULL"): sum0 += float(temperature0s[i]) sum02 += float(temperature0s[i]) ** 2 isum0 += 1 if(temperature1s[i] != "NULL"): sum1 += float(temperature1s[i]) sum12 += float(temperature1s[i]) ** 2 isum1 += 1 i += 1 return 0 def getXml(runNumber): #-------------------------------------- from datetime import datetime import time, calendar tStart=datetime.strptime(Start, '%Y-%m-%d %H:%M:%S') tEnd =datetime.strptime(End , '%Y-%m-%d %H:%M:%S') # convert to unix-time Startunixtime=int(calendar.timegm(tStart.timetuple())) Endunixtime =int(calendar.timegm(tEnd.timetuple())) nanosec="000000000" iovStart="%s%s" %(Startunixtime,nanosec) iovEnd ="%s%s" %(Endunixtime,nanosec) iovString= "%s-%s"%(iovStart,iovEnd) print Start, End, iovString f = open(filename, 'w') f.write("ed layer eta phi year month day UTCHourMinSec Tm0 Tm1 \n") b3 = 10 << 24 barbit = bar0 - 3 <<21 eta0 = -7 while eta0 < 6: #6 for alleta eta0 += 1 etabit = eta0+6 << 11 if eta0 != 0: phi0 = -1 while phi0 < phimax_m1[bar0]: phi0 += 1 phibit = phi0 << 15 id = b3 + barbit + phibit + etabit print "barrel,eta,ph= "+str(bar0)+" "+str(eta0)+" "+str(phi0)\ + " : " + str(id) channelSelector="/channels/"+str(id) queryMODTEMP(f, iovString, channelSelector) f.close() return 0 def test(): testRunNumber=184130 #print getRodNames() print getXml(testRunNumber) return 0 if __name__ == '__main__': sys.exit(test() )