def main(argv): currentDir=getcwd().split("/")[-1] inputfile = 'Dosimetry_detector_complete1_tot.root' outputfile = 'voigt.png' function=voigt fname="voigt" myFitFunc=r.TF1("voigt",function,0,120, 4) try: opts, args = getopt.getopt(argv[1:],"hi:o:f:",["ifile=","ofile=","function="]) except getopt.GetoptError: print argv[0],'-i <inputfile> -o <outputfile> -f <function>' sys.exit(2) for opt, arg in opts: if opt == '-h': print argv[0],'-i <inputfile> -o <outputfile> -f <function>' sys.exit() elif opt in ("-i", "--ifile"): inputfile = arg elif opt in ("-o", "--ofile"): outputfile = arg elif opt in ("-f", "--function"): if arg == "voigt": function = voigt fname="voigt" myFitFunc=r.TF1("voigt",function,0,120, 4) myFitFunc.SetParName(0, "norm") myFitFunc.SetParName(1, "sigma") myFitFunc.SetParName(2, "lg") myFitFunc.SetParName(3, "max") elif arg == "tripleGaussian": function = tripleGaussian fname="tripleGaussian" myFitFunc=r.TF1("tripleGaussian",function,0,120, 9) myFitFunc.SetParName(0, "norm") myFitFunc.SetParName(1, "mu1") myFitFunc.SetParName(2, "sigma1") myFitFunc.SetParName(3, "mu2") myFitFunc.SetParName(4, "sigma2") myFitFunc.SetParName(5, "mu3") myFitFunc.SetParName(6, "sigma3") myFitFunc.SetParName(7, "frac1") myFitFunc.SetParName(8, "frac2") else: print "you can choose from voigt,tripleGaussian" print 'Input file is "', inputfile print 'Output file is "', outputfile print 'Function is "', fname print "working dir is ", getcwd().split("/")[-1] f = RootFile(fn=inputfile, hn="edepXYZ_Tot") f.loadFile() f.loadHist() f.histObj.Rebin3D(2,2,2) f.getNbinsXYZ() f.getMinXYZ() f.getMaxXYZ() f.initTH2DforXYPlane() f.getXYPlane() f.initTH2DforYZPlane() f.getYZPlane() f.initTH1DforEachAxis() f.getTH1DforEachAxis() f.fileObj.Print() f.writePlanesToPngFiles() print "f.binN.x:",f.binN.x,"f.binN.y:",f.binN.y,"f.binN.z:",f.binN.z # pdb.set_trace() # r.gStyle.SetEndErrorSize(3) r.gStyle.SetErrorX(0.) c1=r.TCanvas("c1", "", 1000,1000) c1.Divide(1,3) c1.cd(1) if function==tripleGaussian: myFitFunc.SetParameters(1500, 5, .5, 6, 1.5, 5, 5, .4, .3) elif function==voigt: maxbin=f.rootValX.GetMaximumBin() print "maxbin:", maxbin,"maxbincontent:",f.rootValX.GetBinContent(maxbin) myFitFunc.SetParameters(f.rootValX.GetBinContent(maxbin), 5, .5, maxbin) f.rootValX.Fit(fname, "I") f.rootValX.SetMarkerStyle(20) f.rootValX.Draw("E1") printInfo(myFitFunc, "x") c1.cd(2) if function==tripleGaussian: myFitFunc.SetParameters(150, 5, .5, 6, 1.5, 5, 5, .4, .3) elif function==voigt: maxbin=f.rootValY.GetMaximumBin() print "maxbin:", maxbin,"maxbincontent:",f.rootValY.GetBinContent(maxbin) myFitFunc.SetParameters(f.rootValY.GetBinContent(maxbin), 5, .5, maxbin) f.rootValY.Fit(fname, "I") f.rootValY.SetMarkerStyle(20) f.rootValY.Draw("E1") printInfo(myFitFunc,"y") c1.cd(3) if function==tripleGaussian: myFitFunc.SetParameters(1500, 5, .5, 6, 1.5, 5, 5, .4, .3) elif function==voigt: maxbin=f.rootValZ.GetMaximumBin() print "maxbin:", maxbin,"maxbincontent:",f.rootValZ.GetBinContent(maxbin) myFitFunc.SetParameters(f.rootValZ.GetBinContent(maxbin), 5, .5, maxbin) f.rootValZ.Fit(fname,"I") f.rootValZ.SetMarkerStyle(20) f.rootValZ.Draw("E1") printInfo(myFitFunc,"z") c1.Print(outputfile)