#!/usr/bin/python import os,sys,glob if len(sys.argv)!=8: print 'usage: fudge_efficiency_constant.py US_p0 US_p1 DS_p0 DS_p1 exagg ttafile.root output.root' print 'e.g.: fudge_efficiency_constant.py 5.1e-4 -6.4e-4 3.5e-4 -5.3e-4 10 /home/e614/analysis_2006_2007/treesum/pass1/sum474-1_2-1_clk_raw.root g474_fudged_costh.root' sys.exit(-1) from ROOT import * gStyle.SetPalette(1) try: US_p0 = float(sys.argv[1]) US_p1 = float(sys.argv[2]) DS_p0 = float(sys.argv[3]) DS_p1 = float(sys.argv[4]) exagg = float(sys.argv[5]) except ValueError: print 'ERROR: need floatable numbers dammit' sys.exit(-1) ipfn = sys.argv[6] opfn = sys.argv[7] if not os.path.isfile(ipfn): print 'ERROR: cannot find',ipfn sys.exit(-1) if os.path.isfile(opfn): print 'ERROR:',opfn,'already exists' sys.exit(-1) ipf = TFile(ipfn) ms = ipf.Get('Michel/Spectrum_Selected').Clone() ms_fudge = ms.Clone() ms_fudge.Reset() nx = ms.GetNbinsX() ny = ms.GetNbinsY() for ix in range(nx): for iy in range(ny): ct = ms.GetYaxis().GetBinCenter(iy) if ct>0.: #DS fudge_factor = 1-exagg*(DS_p0 + DS_p1*ct) else: #US fudge_factor = 1-exagg*(US_p0 + US_p1*abs(ct)) # print 'ct=',ct,'fudge_factor=',fudge_factor ms_fudge.SetBinContent(ix,iy,fudge_factor*ms.GetBinContent(ix,iy)) #c = TCanvas() #c.Divide(2,2) #c.cd(1) #ms.Clone().Draw('colz') #c.cd(2) #ms_fudge.Clone().Draw('colz') #c.cd(3) #ms.Clone().ProjectionX().Draw() #c.cd(4) #ms_fudge.Clone().ProjectionX().Draw('sames') #au = raw_input('>') opf = TFile(opfn,'NEW') ms_fudge.Write() opf.Close() print 'created',opfn