示例#1
0
def radmon2fill():
    
    #Get fills already processed
    filesDone = glob.glob(radmonFillPattern)
    (toReplace, dummy) = radmonFillPattern.split('.')
    print filesDone
    fillsDone = []
    for file in filesDone:
        name, ext = file.split('.')
        fillsDone.append(int(name.replace(toReplace[0:-1], "")))
    if len(fillsDone) > 0:
        print "Fills already done", fillsDone
    
    fillReport = FillReport(fillReportName)
    #Start/End of each fill in fillReport
    fillStarted = fillReport.getFillCreationTime()
    fillDumped = fillReport.getFillEndTime()
    
    for fill in sorted(fillStarted.keys()):
        
        if int(fill) in fillsDone:
            print "Fill", fill, "is already processed. Skipping..."
            continue
        print "Processing fill", fill, "........."
        
        fillData = FillData()
        radmonData = RadmonData()
        #runningSums = RunningSums()
        
        #rsumsList = []
        for i in range(0, 16):
            #rsumsList.insert(i, [0.]*1800)
            radmonData.rates[i] = 0.
            radmonData.status[i] = 0.

            
        #Output
        rootFile = radmonFillPattern.replace("*", str(fill))
        try:
	    fout = TFile(rootFile,'RECREATE')
	except IOError:
	    print "Cannot open file for output", rootFile
	    exit	 
	t = TTree('t', 'Radmon rates')
	t.Branch('fillBranchI', fillData, 'fill/I:fillStart/I:fillStable/I:fillEnd/I:durationStable/I')
	t.Branch('fillBranchD', AddressOf(fillData, 'bField'), 'bField/D:beamEnergy/D')
	t.Branch('radmonBranchI', radmonData, 'tstamp/I:status[16]/I')
	t.Branch('radmonBranchD', AddressOf(radmonData, 'rates'), 'rates[16]/D')
	#t.Branch('radmonSums', runningSums, 'rsums[28800]/D')
	
        tsStart =  fillStarted[fill]
	tsEnd = fillDumped[fill]
	tsStable = fillReport.getFillStableTime(int(fill))
	duration = fillReport.getFillDuration(int(fill))
	bField = fillReport.getFillField(int(fill))
	beamEnergy = fillReport.getFillBeamEnergy(int(fill))
	
	fromto = [tsStart-hrs*3600, tsEnd+hrs*3600]
        filelist =  get_filelist(RadmonDataDir, radmonFilePattern, fromto)
        
        
        print "Files used:"
	chain = TChain("Rate")
        for file in filelist:
            print file
            chain.Add(file)

        fillData.fillStart = tsStart
        fillData.fillStable = tsStable
        fillData.fillEnd = tsEnd
        fillData.durationStable = duration
        fillData.bField = bField
        fillData.beamEnergy = beamEnergy
        
        for i in range(chain.GetEntries()):
            chain.GetEntry(i)    
        
            #if tsStart - chain.tstamp < 1800:
            if chain.tstamp > tsStart and chain.tstamp < tsEnd:
                radmonData.tstamp = chain.tstamp
                for j in range(0, 16):
                    #rsumsList[j].append(chain.rates[j])
                    #rsumsList[j].pop(0)
                    radmonData.rates[j] = chain.rates[j]
                    radmonData.status[j] = chain.status[j]
                
                #runningSums.rsums = np.asarray(rsumsList).ravel()
                
                #nparray = np.asarray(rsumsList).ravel()
 
                #for j in range(0, 16*1800):
                    #runningSums.rsums[j] = nparray[j]
                
                #nump2d = np.reshape(nump, (-1,1800))  (To get back to 2D)
            
            #if chain.tstamp > tsStable - deltaMinutes*60 and chain.tstamp < tsEnd + deltaMinutes*60:

                t.Fill()

        fout.Write()
        fout.Close()
        
        del chain
        del fillData
        del radmonData
        #del runningSums
        del t
        del fout
示例#2
0
def radmonAnaw():
    
    ROOT.gROOT.ProcessLine(\
"struct FillData{\
    Int_t fill;\
    Int_t fillStart;\
    Int_t fillColl;\
    Int_t fillStable;\
    Int_t fillEnd;\
    Int_t durationStable;\
    Double_t bField;\
    Double_t beamEnergy;\
    Double_t peakLumi;\
};")
    from ROOT import FillData
    
    ROOT.gROOT.ProcessLine(\
"struct FitData{\
    Double_t p0[16];\
    Double_t p0Err[16];\
    Double_t p1[16];\
    Double_t p1Err[16];\
    Double_t p2[16];\
    Double_t p2Err[16];\
};")  
    from ROOT import FitData
    
    ROOT.gROOT.ProcessLine(\
"struct UcountData{\
    Double_t tcount1[16];\
    Double_t ucount1[16];\
    Double_t tcount2[16];\
    Double_t ucount2[16];\
    Double_t tcount4[16];\
    Double_t ucount4[16];\
};")  
    
    from ROOT import UcountData
    
    fillData = FillData()
    fitData = FitData()
    ucountData = UcountData()
    
    fout = ROOT.TFile(output, 'RECREATE')
    
    
    t = ROOT.TTree('t', 'Warming by fills')
    t.Branch('fillBranchI', fillData, 'fill/I:fillStart/I:fillColl/I:fillStable/I:fillEnd/I:durationStable/I')
    t.Branch('fillBranchD', ROOT.AddressOf(fillData, 'bField'), 'bField/D:beamEnergy/D:peakLumi/D')    
    t.Branch('fitBranch', fitData, 'p0[16]/D:p0err[16]/D:p1[16]/D:p1err[16]/D:p2[16]/D:p2err[16]/D')
    t.Branch('ucountBranch', ucountData, 'tcount1[16]/D:ucount1[16]/D:tcount2[16]/D:ucount2[16]/D:tcount4[16]/D:ucount4[16]/D')
    
    
    for fill in fills:
        f = RadmonAnaW()
        
       
        status = f.processFill(fill)
        if status < 0:
            continue
        
        (fillData.fillStart, fillData.fillColl, fillData.fillStable, fillData.fillEnd, fillData.durationStable, fillData.bField, fillData.beamEnergy, fillData.peakLumi) = f.getFillData()
        f.makeProfiles()
        f.makeRatios()
        f.setFitLimits()
        fillData.fill = fill

    ##f.draw('r', 'pfib')
        #(fitData.p0, fitData.p0Err, fitData.p1, fitData.p1Err, fitData.p2, fitData.p2Err) = f.fitAllRatios()
        #ucountData.ucount = f.getUndercount()
        
        (p0, p0Err, p1, p1Err, p2, p2Err) = f.fitAllRatios()
        for i in range(0, 16):
            fitData.p0[i] = p0[i]
            fitData.p0Err[i] = p0Err[i]
            fitData.p1[i] = p1[i]
            fitData.p1Err[i] = p1Err[i]        
            fitData.p2[i] = p2[i]
            fitData.p2Err[i] = p2Err[i]

        tcount, ucount = f.getUndercount(1)
        for i in range(0, 16):
            ucountData.ucount1[i] = ucount[i]
            ucountData.tcount1[i] = tcount[i]

        tcount, ucount = f.getUndercount(2)
        for i in range(0, 16):
            ucountData.ucount2[i] = ucount[i]
            ucountData.tcount2[i] = tcount[i]            

        tcount, ucount = f.getUndercount(4)
        for i in range(0, 16):
            ucountData.ucount4[i] = ucount[i]
            ucountData.tcount4[i] = tcount[i]


            
        t.Fill()
        del f

    fout.Write()
    fout.Close()
示例#3
0
def radmon2fill():

    #Get fills already processed
    filesDone = glob.glob(radmonFillPattern)
    (toReplace, dummy) = radmonFillPattern.split('.')
    print filesDone
    fillsDone = []
    for file in filesDone:
        name, ext = file.split('.')
        fillsDone.append(int(name.replace(toReplace[0:-1], "")))
    if len(fillsDone) > 0:
        print "Fills already done", fillsDone

    fillReport = FillReport(fillReportName)
    #Start/End of each fill in fillReport
    fillStarted = fillReport.getFillCreationTime()
    fillDumped = fillReport.getFillEndTime()

    for fill in sorted(fillStarted.keys()):

        if int(fill) in fillsDone:
            print "Fill", fill, "is already processed. Skipping..."
            continue
        print "Processing fill", fill, "........."

        fillData = FillData()
        radmonData = RadmonData()
        #runningSums = RunningSums()

        #rsumsList = []
        for i in range(0, 16):
            #rsumsList.insert(i, [0.]*1800)
            radmonData.rates[i] = 0.
            radmonData.status[i] = 0.

        #Output
        rootFile = radmonFillPattern.replace("*", str(fill))
        try:
            fout = TFile(rootFile, 'RECREATE')
        except IOError:
            print "Cannot open file for output", rootFile
            exit
        t = TTree('t', 'Radmon rates')
        t.Branch('fillBranchI', fillData,
                 'fill/I:fillStart/I:fillStable/I:fillEnd/I:durationStable/I')
        t.Branch('fillBranchD', AddressOf(fillData, 'bField'),
                 'bField/D:beamEnergy/D')
        t.Branch('radmonBranchI', radmonData, 'tstamp/I:status[16]/I')
        t.Branch('radmonBranchD', AddressOf(radmonData, 'rates'),
                 'rates[16]/D')
        #t.Branch('radmonSums', runningSums, 'rsums[28800]/D')

        tsStart = fillStarted[fill]
        tsEnd = fillDumped[fill]
        tsStable = fillReport.getFillStableTime(int(fill))
        duration = fillReport.getFillDuration(int(fill))
        bField = fillReport.getFillField(int(fill))
        beamEnergy = fillReport.getFillBeamEnergy(int(fill))

        fromto = [tsStart - hrs * 3600, tsEnd + hrs * 3600]
        filelist = get_filelist(RadmonDataDir, radmonFilePattern, fromto)

        print "Files used:"
        chain = TChain("Rate")
        for file in filelist:
            print file
            chain.Add(file)

        fillData.fillStart = tsStart
        fillData.fillStable = tsStable
        fillData.fillEnd = tsEnd
        fillData.durationStable = duration
        fillData.bField = bField
        fillData.beamEnergy = beamEnergy

        for i in range(chain.GetEntries()):
            chain.GetEntry(i)

            #if tsStart - chain.tstamp < 1800:
            if chain.tstamp > tsStart and chain.tstamp < tsEnd:
                radmonData.tstamp = chain.tstamp
                for j in range(0, 16):
                    #rsumsList[j].append(chain.rates[j])
                    #rsumsList[j].pop(0)
                    radmonData.rates[j] = chain.rates[j]
                    radmonData.status[j] = chain.status[j]

                #runningSums.rsums = np.asarray(rsumsList).ravel()

                #nparray = np.asarray(rsumsList).ravel()

                #for j in range(0, 16*1800):
                #runningSums.rsums[j] = nparray[j]

                #nump2d = np.reshape(nump, (-1,1800))  (To get back to 2D)

            #if chain.tstamp > tsStable - deltaMinutes*60 and chain.tstamp < tsEnd + deltaMinutes*60:

                t.Fill()

        fout.Write()
        fout.Close()

        del chain
        del fillData
        del radmonData
        #del runningSums
        del t
        del fout
示例#4
0
def radmonAnaw():

    ROOT.gROOT.ProcessLine(\
"struct FillData{\
    Int_t fill;\
    Int_t fillStart;\
    Int_t fillColl;\
    Int_t fillStable;\
    Int_t fillEnd;\
    Int_t durationStable;\
    Double_t bField;\
    Double_t beamEnergy;\
    Double_t peakLumi;\
};"   )
    from ROOT import FillData

    ROOT.gROOT.ProcessLine(\
"struct FitData{\
    Double_t p0[16];\
    Double_t p0Err[16];\
    Double_t p1[16];\
    Double_t p1Err[16];\
    Double_t p2[16];\
    Double_t p2Err[16];\
};"   )
    from ROOT import FitData

    ROOT.gROOT.ProcessLine(\
"struct UcountData{\
    Double_t tcount1[16];\
    Double_t ucount1[16];\
    Double_t tcount2[16];\
    Double_t ucount2[16];\
    Double_t tcount4[16];\
    Double_t ucount4[16];\
};"   )

    from ROOT import UcountData

    fillData = FillData()
    fitData = FitData()
    ucountData = UcountData()

    fout = ROOT.TFile(output, 'RECREATE')

    t = ROOT.TTree('t', 'Warming by fills')
    t.Branch(
        'fillBranchI', fillData,
        'fill/I:fillStart/I:fillColl/I:fillStable/I:fillEnd/I:durationStable/I'
    )
    t.Branch('fillBranchD', ROOT.AddressOf(fillData, 'bField'),
             'bField/D:beamEnergy/D:peakLumi/D')
    t.Branch('fitBranch', fitData,
             'p0[16]/D:p0err[16]/D:p1[16]/D:p1err[16]/D:p2[16]/D:p2err[16]/D')
    t.Branch(
        'ucountBranch', ucountData,
        'tcount1[16]/D:ucount1[16]/D:tcount2[16]/D:ucount2[16]/D:tcount4[16]/D:ucount4[16]/D'
    )

    for fill in fills:
        f = RadmonAnaW()

        status = f.processFill(fill)
        if status < 0:
            continue

        (fillData.fillStart, fillData.fillColl, fillData.fillStable,
         fillData.fillEnd, fillData.durationStable, fillData.bField,
         fillData.beamEnergy, fillData.peakLumi) = f.getFillData()
        f.makeProfiles()
        f.makeRatios()
        f.setFitLimits()
        fillData.fill = fill

        ##f.draw('r', 'pfib')
        #(fitData.p0, fitData.p0Err, fitData.p1, fitData.p1Err, fitData.p2, fitData.p2Err) = f.fitAllRatios()
        #ucountData.ucount = f.getUndercount()

        (p0, p0Err, p1, p1Err, p2, p2Err) = f.fitAllRatios()
        for i in range(0, 16):
            fitData.p0[i] = p0[i]
            fitData.p0Err[i] = p0Err[i]
            fitData.p1[i] = p1[i]
            fitData.p1Err[i] = p1Err[i]
            fitData.p2[i] = p2[i]
            fitData.p2Err[i] = p2Err[i]

        tcount, ucount = f.getUndercount(1)
        for i in range(0, 16):
            ucountData.ucount1[i] = ucount[i]
            ucountData.tcount1[i] = tcount[i]

        tcount, ucount = f.getUndercount(2)
        for i in range(0, 16):
            ucountData.ucount2[i] = ucount[i]
            ucountData.tcount2[i] = tcount[i]

        tcount, ucount = f.getUndercount(4)
        for i in range(0, 16):
            ucountData.ucount4[i] = ucount[i]
            ucountData.tcount4[i] = tcount[i]

        t.Fill()
        del f

    fout.Write()
    fout.Close()
示例#5
0
def addRunningSum():
    
    for fill in fills:
        
        inputFile = inputPattern.replace('__XXX__', str(fill))
        try:
            fin = ROOT.TFile(inputFile,'READ')
            print "Processing fill", fill
        except IOError:
            print "Cannot open file", inputFile
            continue
        
        inputTree = fin.Get('t')
        
       
        outfile = outputPattern.replace('__XXX__', str(fill))
        try:
	    fout = ROOT.TFile(outfile,'RECREATE')
	except IOError:
	    print "Cannot open file for output", outfile
	    continue       
        
        #Output tree
        fillData = FillData()
        radmonData = RadmonData()
        t = ROOT.TTree('t', "Radmon rates + runnning sums ")
	t.Branch('fillBranchI', fillData, 'fill/I:fillStart/I:fillColl/I:fillStable/I:fillEnd/I:durationStable/I')
	t.Branch('fillBranchD', ROOT.AddressOf(fillData, 'bField'), 'bField/D:beamEnergy/D')
	t.Branch('radmonBranchI', radmonData, 'tstamp/I:status[16]/I')
	t.Branch('radmonRates', ROOT.AddressOf(radmonData, 'rates'), 'rates[16]/D:rsums15[16]/D:rsums30[16]/D:rsums60[16]/D')

        rsums15 = [0.]*16
        rsumsPrev15 = [0.]*16
        rsums30 = [0.]*16
        rsumsPrev30 = [0.]*16
        rsums60 = [0.]*16
        rsumsPrev60 = [0.]*16
        
        # First pass is to find beginning of the collisions
        tsColl = -100000
        
        for i in range(0, inputTree.GetEntries()):
            nb = inputTree.GetEntry(i)
	    if nb < 0:
		continue
            
            if inputTree.rates[refIndx] > rateCut:
                tsColl = inputTree.tstamp
                break
        
        for i in range(0, inputTree.GetEntries()):
            nb = inputTree.GetEntry(i)
	    if nb < 0:
		continue
            
            #Copy data to a new tree
            fillData.fill = inputTree.fill
            fillData.fillStart = inputTree.fillStart
            fillData.fillColl = tsColl
            fillData.fillStable = inputTree.fillStable
            fillData.fillEnd = inputTree.fillEnd
            fillData.durationStable = inputTree.durationStable
            fillData.bField = inputTree.bField
            fillData.beamEnergy = inputTree.beamEnergy
            
            radmonData.tstamp = inputTree.tstamp
            
            for j in range(0, 16):
                radmonData.status[j] = inputTree.status[j]
                radmonData.rates[j] = inputTree.rates[j]
                
                #Running sums (c) AK
                # 15 minutes
                if i+1 < 15*60:
                    rsums15[j] += inputTree.rates[j]
                    radmonData.rsums15[j] = rsums15[j]
                    rsumsPrev15[j] = rsums15[j]
                else:
                    rsums15[j] = ((15*60 - 1)*rsumsPrev15[j] + inputTree.rates[j])/15/60
                    radmonData.rsums15[j] = rsums15[j]
                    rsumsPrev15[j] = rsums15[j]

                 # 30 minutes
                if i+1 < 30*60:
                    rsums30[j] += inputTree.rates[j]
                    radmonData.rsums30[j] = rsums30[j]
                    rsumsPrev30[j] = rsums30[j]
                else:
                    rsums30[j] = ((30*60 - 1)*rsumsPrev30[j] + inputTree.rates[j])/30/60
                    radmonData.rsums30[j] = rsums30[j]
                    rsumsPrev30[j] = rsums30[j]

                 # 60 minutes
                if i+1 < 60*60:
                    rsums60[j] += inputTree.rates[j]
                    radmonData.rsums60[j] = rsums60[j]
                    rsumsPrev60[j] = rsums60[j]
                else:
                    rsums60[j] = ((60*60 - 1)*rsumsPrev60[j] + inputTree.rates[j])/60/60
                    radmonData.rsums60[j] = rsums60[j]
                    rsumsPrev60[j] = rsums60[j]
                        
            
            t.Fill()
            
        fout.Write()
        fout.Close()
        
        del fillData
        del radmonData
        del t
        del fout   
        del inputTree
        del inputFile
示例#6
0
    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')
	
	fillData = FillData()
	lumiData = LumiData()
	radmonData = RadmonData()
	
	t.Branch('fillBranch', fillData, 'fill/I:fillStart/I:fillStable/I:fillEnd/I:durationStable/I:run/I:lsNo/I:tstamp/I:msecs/I:bunchSpacing/I')
	t.Branch('fillBranchD', AddressOf(fillData, 'bField'), 'bField/D:beamEnergy/D')
	t.Branch('lumiBranch',  lumiData, 'bestLumi/D:bestLumiErr/D:hfLumi/D:hfLumiErr/D:pltLumi/D:pltLumiErr/D:pltZeroLumi/D:pltZeroLumiErr/D:bcmfLumi/D:bcmfLumiErr/D')
    	t.Branch('radmonBranch',  radmonData, 'rates[16]/D:ratesErr[16]/D')
    	
    	href = self.pbest  # Reference histogram
	#self.pbcmf.Draw()
	#raw_input("Press enter to continue")
	
        print "Starting filling tree, file ", radmonLumiFilePattern.replace('__XXX__', str(self.fill))
    	for i in range(len(self.xx) - 1):
            fillData.fill = self.fillDataList[i].fill
            fillData.fillStart =  self.fillDataList[i].fillStart
            fillData.fillStable =  self.fillDataList[i].fillStable
            fillData.fillEnd =  self.fillDataList[i].fillEnd
            fillData.durationStable =  self.fillDataList[i].durationStable
            fillData.run =  self.fillDataList[i].run
            fillData.lsNo =  self.fillDataList[i].lsNo
            fillData.bunchSpacing =  self.fillDataList[i].bunchSpacing
            fillData.bField =  self.fillDataList[i].bField
            fillData.beamEnergy =  self.fillDataList[i].beamEnergy
	    fillData.tstamp = int(href.GetXaxis().GetBinCenter(i))
	    fillData.msecs = int(href.GetXaxis().GetBinCenter(i) - fillData.tstamp)
	    
	    lumiData.bestLumi = self.pbest.GetBinContent(i)
	    lumiData.bestLumiErr = self.pbest.GetBinError(i)
	    lumiData.hfLumi = self.phf.GetBinContent(i)
	    lumiData.hfLumiErr = self.phf.GetBinError(i)
	    lumiData.pltLumi = self.pplt.GetBinContent(i)
	    lumiData.pltLumiErr = self.pplt.GetBinError(i)
	    lumiData.pltZeroLumi = self.ppltZero.GetBinContent(i)
	    lumiData.pltZeroLumiErr = self.ppltZero.GetBinError(i)
	    lumiData.bcmfLumi = self.pbcmf.GetBinContent(i)
	    lumiData.bcmfLumiErr = 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
示例#7
0
    def setupRanges(self):
	"""
	read file with lumi data 
	setup low edges of histograms corresponding to the beginning of lumisections
	fill array of fill  data (fill, ls, run) corresponding to the given bin
	"""
	
	lsection = -1
	
	fillData = FillData()
	fillReport = FillReport(fillReportName)
	
	#Start/End/Stable
	tsStart =  fillReport.getFillCreationTime(self.fill)
	tsEnd = fillReport.getFillEndTime(self.fill)
	tsStable = fillReport.getFillStableTime(self.fill)
	duration = fillReport.getFillDuration(self.fill)
	bField = fillReport.getFillField(self.fill)
	beamEnergy = fillReport.getFillBeamEnergy(self.fill)
	
	#Time range to look for radmon files
	self.fromto[0] = tsStart
	self.fromto[1] = tsEnd
	
	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.bestLumi > self.yMax:
		 self.yMax = tree.bestLumi
	    if tree.bestLumi < self.yMin:
		 self.yMin = tree.bestLumi
            
	    #Low edges for histos (start of LS)
	    if tree.lsNo != lsection:
		self.xx.append(tree.lsStart + tree.lsStartMs/1000000.)
		lsection = tree.lsNo
		
		# New lumisection - Add fill data
		fillData.fill = tree.fill
		fillData.fillStart = tsStart
		fillData.fillStable = tsStable
		fillData.fillEnd = tsEnd
		fillData.durationStable = duration
		fillData.bField = bField
		fillData.beamEnergy = beamEnergy
		fillData.bunchSpacing = tree.bunchSpacing
		fillData.run = tree.run
		fillData.lsNo = tree.lsNo

		self.fillDataList.append(fillData)
	
	print "Done setting up ranges for fill", self.fill, "\tNo of bins", len(self.xx) -1
	del tree
	del f
	del fillReport
	
	return  len(self.xx) -1
示例#8
0
    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')

        fillData = FillData()
        lumiData = LumiData()
        radmonData = RadmonData()

        t.Branch(
            'fillBranch', fillData,
            'fill/I:fillStart/I:fillStable/I:fillEnd/I:durationStable/I:run/I:lsNo/I:tstamp/I:msecs/I:bunchSpacing/I'
        )
        t.Branch('fillBranchD', AddressOf(fillData, 'bField'),
                 'bField/D:beamEnergy/D')
        t.Branch(
            'lumiBranch', lumiData,
            'bestLumi/D:bestLumiErr/D:hfLumi/D:hfLumiErr/D:pltLumi/D:pltLumiErr/D:pltZeroLumi/D:pltZeroLumiErr/D:bcmfLumi/D:bcmfLumiErr/D'
        )
        t.Branch('radmonBranch', radmonData, 'rates[16]/D:ratesErr[16]/D')

        href = self.pbest  # Reference histogram
        #self.pbcmf.Draw()
        #raw_input("Press enter to continue")

        print "Starting filling tree, file ", radmonLumiFilePattern.replace(
            '__XXX__', str(self.fill))
        for i in range(len(self.xx) - 1):
            fillData.fill = self.fillDataList[i].fill
            fillData.fillStart = self.fillDataList[i].fillStart
            fillData.fillStable = self.fillDataList[i].fillStable
            fillData.fillEnd = self.fillDataList[i].fillEnd
            fillData.durationStable = self.fillDataList[i].durationStable
            fillData.run = self.fillDataList[i].run
            fillData.lsNo = self.fillDataList[i].lsNo
            fillData.bunchSpacing = self.fillDataList[i].bunchSpacing
            fillData.bField = self.fillDataList[i].bField
            fillData.beamEnergy = self.fillDataList[i].beamEnergy
            fillData.tstamp = int(href.GetXaxis().GetBinCenter(i))
            fillData.msecs = int(href.GetXaxis().GetBinCenter(i) -
                                 fillData.tstamp)

            lumiData.bestLumi = self.pbest.GetBinContent(i)
            lumiData.bestLumiErr = self.pbest.GetBinError(i)
            lumiData.hfLumi = self.phf.GetBinContent(i)
            lumiData.hfLumiErr = self.phf.GetBinError(i)
            lumiData.pltLumi = self.pplt.GetBinContent(i)
            lumiData.pltLumiErr = self.pplt.GetBinError(i)
            lumiData.pltZeroLumi = self.ppltZero.GetBinContent(i)
            lumiData.pltZeroLumiErr = self.ppltZero.GetBinError(i)
            lumiData.bcmfLumi = self.pbcmf.GetBinContent(i)
            lumiData.bcmfLumiErr = 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
示例#9
0
    def setupRanges(self):
        """
	read file with lumi data 
	setup low edges of histograms corresponding to the beginning of lumisections
	fill array of fill  data (fill, ls, run) corresponding to the given bin
	"""

        lsection = -1

        fillData = FillData()
        fillReport = FillReport(fillReportName)

        #Start/End/Stable
        tsStart = fillReport.getFillCreationTime(self.fill)
        tsEnd = fillReport.getFillEndTime(self.fill)
        tsStable = fillReport.getFillStableTime(self.fill)
        duration = fillReport.getFillDuration(self.fill)
        bField = fillReport.getFillField(self.fill)
        beamEnergy = fillReport.getFillBeamEnergy(self.fill)

        #Time range to look for radmon files
        self.fromto[0] = tsStart
        self.fromto[1] = tsEnd

        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.bestLumi > self.yMax:
                self.yMax = tree.bestLumi
            if tree.bestLumi < self.yMin:
                self.yMin = tree.bestLumi

            #Low edges for histos (start of LS)
            if tree.lsNo != lsection:
                self.xx.append(tree.lsStart + tree.lsStartMs / 1000000.)
                lsection = tree.lsNo

                # New lumisection - Add fill data
                fillData.fill = tree.fill
                fillData.fillStart = tsStart
                fillData.fillStable = tsStable
                fillData.fillEnd = tsEnd
                fillData.durationStable = duration
                fillData.bField = bField
                fillData.beamEnergy = beamEnergy
                fillData.bunchSpacing = tree.bunchSpacing
                fillData.run = tree.run
                fillData.lsNo = tree.lsNo

                self.fillDataList.append(fillData)

        print "Done setting up ranges for fill", self.fill, "\tNo of bins", len(
            self.xx) - 1
        del tree
        del f
        del fillReport

        return len(self.xx) - 1