def plot_residuals(tFile,hist_name,half,side,maxminlist): #module_L6b_halfmodule_axial_hole_sensor0_hitresglobal #module_L1t_halfmodule_axial_sensor0_hitresglobal names = hps_utils.get_module_names() print 'found ', len(names), ' histogram names' graphBinNames = [] graphMean = TGraphErrors() graphMean.SetName('grMean_' + half) graphRMS = TGraphErrors() graphRMS.SetName('grRMS_' + half) for h_name in [hist_name]: for m_name in names: m_half = hps_utils.getHalf(m_name) if half != '' and m_half != half: continue if hps_utils.getAxialStereo(m_name) == 'stereo': continue if hps_utils.getLayer(m_name) > 3: if side != '' and hps_utils.getHoleSlot(m_name) != side: continue name = m_name + '_' + h_name h = t_file.Get(name) if h == None: print 'no histogram name \"', name, '\" found' print 'got hist \"', h.GetName(), '\"' c = TCanvas('c_' + name, 'c_' + name,10,10,1400,900) if h.GetEntries() > 10: fitFuncName = 'fg_' + h.GetName() fitOpt = 'R' fg = TF1(fitFuncName,'gaus') bc = plotutils.getHistMaxBinValue(h) rms = h.GetRMS() fg.SetParameter(1,bc) fg.SetParameter(2,rms) fg.SetRange( bc - rms*2, bc + rms*2 ) h.Fit(fg,fitOpt) #print 'make graphs of mean and RMS' mean = fg.GetParameter(1) meanError = fg.GetParError(1) rms = fg.GetParameter(2) rmsError = fg.GetParError(2) ipoint = graphMean.GetN() graphMean.SetPoint(ipoint, ipoint, mean) graphRMS.SetPoint(ipoint, ipoint, rms) graphMean.SetPointError(ipoint, 0., meanError) graphRMS.SetPointError(ipoint, 0., rmsError) graphBinNames.append(hps_utils.getshortsensorname( m_name ) ) print 'mean ', mean, '+-',meanError,' RMS ', rms, '+-', rmsError, ' fg ', fg.GetName() else: print 'Not enough entries for histogram \"', name, '\"' h.Draw() #ans = raw_input('continue?') saveName = name c.SaveAs(saveName + '.png') c = TCanvas('c_' + hist_name +'_mean_'+half+'_'+side, 'c_' + hist_name +'_mean_'+half+'_'+side,10,10,1400,900) c.Divide(1,2) c.cd(1) gPad.SetBottomMargin(0.3) gPad.SetGridy() plotutils.setBinLabels(graphMean,graphBinNames) plotutils.setGraphStyle(graphMean) graphMean.SetTitle(hist_name+';;Track residual mean (mm)') if len(maxminlist) == 4: graphMean.GetHistogram().SetMaximum(maxminlist[0]) graphMean.GetHistogram().SetMinimum(maxminlist[1]) graphMean.Draw('APL') c.cd(2) gPad.SetBottomMargin(0.3) gPad.SetGridy() plotutils.setBinLabels(graphRMS,graphBinNames) plotutils.setGraphStyle(graphRMS) graphRMS.SetTitle(';;Axial track residual width (mm)') if len(maxminlist) == 4: graphRMS.GetHistogram().SetMaximum(maxminlist[2]) graphRMS.GetHistogram().SetMinimum(maxminlist[3]) graphRMS.Draw('APL') c.SaveAs('summary_' + hist_name+'_mean_'+half+'_'+side +'.png') ans = raw_input('continue?')
def plotResiduals(f,name,half): f.cd() c = TCanvas('c','c',10,10,700,500) c.Print('res-' +name+'-'+half + '-' + getFileName(f) + args.tag + '.ps[') histos = plotutils.getHistograms(gDirectory) print 'found ', len(histos), ' histograms' res_map = {} for h_p in histos: if re.match('^' + name + '.*' + half + '$', h_p.GetName() ) and not 'large' in h_p.GetName() and not 'truth' in h_p.GetName() : print 'found ' , h_p.GetName() sensorName = utils.getSensor(h_p.GetName()) print 'sensor ', sensorName setStyle(h_p) peakbin = findPeakBin(h_p) l = h_p.GetBinCenter(peakbin) - 5*h_p.GetRMS() h = h_p.GetBinCenter(peakbin) + 5*h_p.GetRMS() print 'peakbin ', peakbin, ' c ' , h_p.GetBinCenter(peakbin), ' l ', l, ' h', h f_p = TF1('f'+'_'+name+'-'+half+'_'+h_p.GetName(),'gaus',l,h) h_p.Fit(f_p,'R') c1 = TCanvas('c1-'+h_p.GetName(),'c1-'+h_p.GetName(),10,10,700,500) h_p.Draw() plotutils.myText(0.5,0.85,'<m>=%.2f #sigma=%.2f'%(f_p.GetParameter(1),f_p.GetParameter(2)), 0.05, 2) res_map[sensorName] = f_p c1.Print('res-' +name+'-'+half + '-' + getFileName(f) + args.tag + '.ps') #c.SaveAs(name + '-' + getFileName(f) + args.tag + '.png') #ans = raw_input('continue?') grMean = TGraph() grSigma = TGraph() i=0 binLabels = [] res_map_sort = sorted(res_map.keys()) print res_map print 'found ', len(res_map), ' res plots' for sensor in res_map_sort: fit = res_map[sensor] grMean.SetPoint(i,i,fit.GetParameter(1)) grSigma.SetPoint(i,i,fit.GetParameter(2)) binLabels.append(sensor) i=i+1 plotutils.setBinLabels(grMean,binLabels) plotutils.setBinLabels(grSigma,binLabels) grMean.SetTitle(name+'-'+half + '-' + getFileName(f) + args.tag + ';;'+name+'-'+half+' mean') grMean.SetMarkerStyle(20) c1 = TCanvas('c1-res','c1-res',10,10,700,500) c1.SetBottomMargin(0.4) grMean.Draw('ALP') c1.Print('res-' +name+'-'+half + '-' + getFileName(f) + args.tag + '.ps') grSigma.SetTitle(name+'-'+half + '-' + getFileName(f) + args.tag + ';;'+name+'-'+half+' #sigma') grSigma.SetMarkerStyle(20) c1 = TCanvas('c1-ress','c1-ress',10,10,700,500) c1.SetBottomMargin(0.4) grSigma.Draw('ALP') c1.Print('res-' +name+'-'+half + '-' + getFileName(f) + args.tag + '.ps') ans = raw_input('continue?') c.Print('res-' +name+'-'+half + '-' + getFileName(f) + args.tag + '.ps]')
def plot_sensor_hist(tFile,hist_name,half,maxminlist): names = hps_utils.get_module_names() print 'found ', len(names), ' sensor names' graphBinNames = [] graphMean = TGraphErrors() graphMean.SetName('grMean_' + half) graphRMS = TGraphErrors() graphRMS.SetName('grRMS_' + half) for h_name in [hist_name]: print 'Process histogram \"', h_name, '\"' for m_name in names: print 'Sensor \"', m_name, '\"' m_half = hps_utils.getHalf(m_name) if half != '' and m_half != half: continue name = m_name + h_name if args.regexp != None: if debug: print 'apply regexp \"', args.regexp, '\" to file \"', name, '\"' m = re.match(args.regexp, name) if m == None: if debug: print 'no match for regexp \"', args.regexp, '\" for \"', name, '\"' continue print 'Try to find histogram \"', name, '\"' h = t_file.Get(name) if h == None: print 'no histogram name \"', name, '\" found' else: print 'got hist \"', h.GetName(), '\"' c = TCanvas('c_' + name, 'c_' + name,10,10,1400,900) if h.GetEntries() > 10: fitFuncName = 'fg_' + h.GetName() fitOpt = 'R' fg = TF1(fitFuncName,'gaus') bc = plotutils.getHistMaxBinValue(h) rms = h.GetRMS() fg.SetParameter(1,bc) fg.SetParameter(2,rms) fg.SetRange( bc - rms*2, bc + rms*2 ) h.Fit(fg,fitOpt) #print 'make graphs of mean and RMS' mean = fg.GetParameter(1) meanError = fg.GetParError(1) rms = fg.GetParameter(2) rmsError = fg.GetParError(2) ipoint = graphMean.GetN() graphMean.SetPoint(ipoint, ipoint, mean) graphRMS.SetPoint(ipoint, ipoint, rms) graphMean.SetPointError(ipoint, 0., meanError) graphRMS.SetPointError(ipoint, 0., rmsError) graphBinNames.append(hps_utils.getshortsensorname( m_name ) ) print 'mean ', mean, '+-',meanError,' RMS ', rms, '+-', rmsError, ' fg ', fg.GetName() else: print 'Not enough entries for histogram \"', name, '\"' h.Draw() #ans = raw_input('continue?') saveName = name c.SaveAs(saveName + '.png') c = TCanvas('c_' + hist_name +'_mean_'+half, 'c_' + hist_name +'_mean_'+half,10,10,1400,900) c.Divide(1,2) c.cd(1) gPad.SetBottomMargin(0.3) gPad.SetGridy() plotutils.setBinLabels(graphMean,graphBinNames) plotutils.setGraphStyle(graphMean) graphMean.SetTitle(hist_name+';;Mean') if len(maxminlist) == 4: graphMean.GetHistogram().SetMaximum(maxminlist[0]) graphMean.GetHistogram().SetMinimum(maxminlist[1]) graphMean.Draw('APL') c.cd(2) gPad.SetBottomMargin(0.3) gPad.SetGridy() plotutils.setBinLabels(graphRMS,graphBinNames) plotutils.setGraphStyle(graphRMS) graphRMS.SetTitle(';;Width') if len(maxminlist) == 4: graphRMS.GetHistogram().SetMaximum(maxminlist[2]) graphRMS.GetHistogram().SetMinimum(maxminlist[3]) graphRMS.Draw('APL') c.SaveAs('summary_' + hist_name+'_mean_'+half+'.png') ans = raw_input('continue?')
def plotRotations(t_file): names = hps_utils.getSensorNames() print ' got ', len(names), ' sensor names' hname = 'h_res_gbl_vs_u_' #hname = 'h_res_gbl_vs_vpred_' c = TCanvas('c','c',10,10,700,500) grSlopes = TGraphErrors() grSlopes.SetName('slopes_' + hname) grSlopesBinLabels = [] for sensorname in names: name = hname + sensorname if args.regexp != None: m = re.match(args.regexp, name) if m == None: print 'skip this histogram \"', name, '\"' continue h = t_file.Get(name) if h == None: print 'no histogram \"', name, '\"' sys.exit(1) print 'process \"', name , '\"' c.Clear() h.Draw('colz') c.SaveAs(name + '-' + args.tag + '.png') #ans = raw_input('continue?') grMean = TGraphErrors() grMean.SetName( h.GetName() + '_prjYmean' ) for b in range(1, h.GetNbinsX()+1): h_p = h.ProjectionY(h.GetName() + '_prjy' + str(b), b, b, 'E') f = None if h_p.GetEntries() > 77.: peakbin = findPeakBin(h_p) x = h_p.GetBinCenter(peakbin) minv = x - 1.5*h_p.GetRMS() maxv = x + 1.5*h_p.GetRMS() print 'vpred ', h.GetXaxis().GetBinCenter(b) , ' peakbin ', peakbin, ' c ' , h_p.GetBinCenter(peakbin), ' minv ', minv, ' maxv ', maxv f = TF1('f'+'_'+name,'gaus',minv,maxv) h_p.Fit(f,'RQ') ipoint = grMean.GetN() grMean.SetPoint(ipoint, h.GetXaxis().GetBinCenter(b), f.GetParameter(1)) grMean.SetPointError(ipoint, 0., f.GetParError(1)) c.Clear() if f != None: plotutils.myText(0.5,0.85,'<m>=%.2f #sigma=%.2f'%(f.GetParameter(1),f.GetParameter(2)), 0.05, 2) h_p.Draw() c.SaveAs(h_p.GetName() + '-' + args.tag + '.png') #ans = raw_input('continue?') grMean.SetTitle(name + ';;mean') grMean.SetMarkerStyle(20) c.Clear() fpol1 = TF1('f' + grMean.GetName(),'pol1') grMean.Fit(fpol1) grMean.Draw('ALP') plotutils.myText(0.35,0.8,'slope=%.2e m=%.2e'%(fpol1.GetParameter(1),fpol1.GetParameter(0)), 0.05, 2) ipoint = grSlopes.GetN() if args.uflip and hps_utils.getAxialStereo(sensorname) == 'stereo': print 'flip ', sensorname, ' ', fpol1.GetParameter(1) , ' -> ', -1.*fpol1.GetParameter(1) grSlopes.SetPoint( ipoint, ipoint, -1.*fpol1.GetParameter(1) ) else: print 'NO flip ', sensorname, ' ', fpol1.GetParameter(1) grSlopes.SetPoint( ipoint, ipoint, fpol1.GetParameter(1) ) grSlopes.SetPointError( ipoint, 0., fpol1.GetParError(1) ) grSlopesBinLabels.append( hps_utils.getshortsensorname( sensorname ) ) c.SaveAs(name + '-mean-' + args.tag + '.png') #ans = raw_input('continue?') c.Clear() grSlopes.Draw('ALP') plotutils.setBinLabels( grSlopes, grSlopesBinLabels ) c.SetBottomMargin(0.2) if args.uflip: plotutils.myText(0.35,0.8,'u-flipped', 0.05, 2) else: plotutils.myText(0.35,0.8,'NOT u-flipped', 0.05, 2) if args.uflip: c.SaveAs(grSlopes.GetName() + '-uflipped-' + args.tag + '.png') else: c.SaveAs(grSlopes.GetName() + '-' + args.tag + '.png') ans = raw_input('continue?')