def writeOutput(self): rootFile = radmonLumiFilePattern.replace('__XXX__', str(self.fill)) try: fout = TFile(rootFile, 'RECREATE') except IOError: print "Cannot open file for output", rootFile exit t = TTree('t', 'Combined Lumi and Radmon data') timingData = TimingData() lumiData = LumiData() radmonData = RadmonData() t.Branch('timingBranch', timingData, 'fill/D:startFill/D:endFill/D:run/D:lsno/D:tsUtc/D') t.Branch( 'lumiBranch', lumiData, 'primaryLumi/D:primaryLumiErr/D:hf/D:hfErr/D:plt/D:pltErr/D:pltZero/D:pltZeroErr/D:bcmf/D:bcmfErr/D' ) t.Branch('radmonBranch', radmonData, 'rates[16]/D:ratesErr[16]/D') href = self.pprlumi # Reference histogram #self.pbcmf.Draw() #raw_input("Press enter to continue") for i in range(len(self.xx) - 1): timingData.fill = self.td[i].fill timingData.startFill = self.td[i].startFill timingData.endFill = self.td[i].endFill timingData.run = self.td[i].run timingData.lsno = self.td[i].lsno timingData.tsUtc = href.GetXaxis().GetBinCenter(i) lumiData.primaryLumi = self.pprlumi.GetBinContent(i) lumiData.primaryLumiErr = self.pprlumi.GetBinError(i) lumiData.hf = self.phf.GetBinContent(i) lumiData.hfErr = self.phf.GetBinError(i) lumiData.plt = self.pplt.GetBinContent(i) lumiData.pltErr = self.pplt.GetBinError(i) lumiData.pltZero = self.ppltZero.GetBinContent(i) lumiData.pltZeroErr = self.ppltZero.GetBinError(i) lumiData.bcmf = self.pbcmf.GetBinContent(i) lumiData.bcmfErr = self.pbcmf.GetBinError(i) for j in range(len(self.pradmon)): radmonData.rates[j] = self.pradmon[j].GetBinContent(i) radmonData.ratesErr[j] = self.pradmon[j].GetBinError(i) t.Fill() print "Writing", rootFile fout.Write() fout.Close() del fout
def setupRanges(self): """ read file with lumi data setup low edges of histograms corresponding to the beginning of lumisections fill array of timing structures (fill, ls, run) corresponding to the given bin """ startOfFill = -1 lsection = -1 timingData = TimingData() f = TFile(lumiFilePattern.replace('__XXX__', str(self.fill))) tree = f.Get("t") for i in range(0, tree.GetEntries()): nb = tree.GetEntry(i) if nb < 0: continue #Y range for histograms if tree.primaryLumi > self.yMax: self.yMax = tree.primaryLumi if tree.primaryLumi < self.yMin: self.yMin = tree.primaryLumi #Setting start/end of the fill if tree.secsUtc < self.fromto[0]: self.fromto[0] = tree.secsUtc if tree.secsUtc > self.fromto[1]: self.fromto[1] = tree.secsUtc #Low edges for histos (start of LS) if tree.lsno != lsection: self.xx.append(tree.secsUtc + tree.msecs / 1000.) lsection = tree.lsno # New lumisection - fill timing data timingData.fill = tree.fill timingData.run = tree.run timingData.lsno = tree.lsno timingData.endFill = tree.secsUtc + tree.msecs / 1000. if startOfFill < 0: timingData.startFill = tree.secsUtc + tree.msecs / 1000. startOfFill = timingData.startFill self.td.append(timingData) del tree del f