|
[Rivet] [Rivet-svn] r4227 - branches/2012-06-aidarivet/bin branches/2012-06-aidarivet/doc trunk/bin trunk/docFrank Siegert frank.siegert at cern.chMon Mar 18 15:03:41 GMT 2013
Hi Andy, This has been in the script since the initial import (r1171). My commit only fixes it for variable x-axis binning and makes the EnvelopeRebin functionality (which is newer) available in a more consistent manner. Cheers, Frank On 18 March 2013 15:56, Andy Buckley <andy.buckley at ed.ac.uk> wrote: > Hi Frank, > > I must have missed rebinning going in -- how is this possible in a > purely plotting code, without more info about the weights in each bin, > the histo type, etc.? Profiles, normalised histos, and unnormalised > histos will presumably merge bins with different effects on the bin > height and errors. > > Maybe I'm missing something, but I'm afraid of a) "blessing" approximate > tricks -- that's why aidamerge is banished to contrib, and b) putting > too much physics/stats-specific intelligence & heuristics into the > plotting script... > > Andy > > > On 18/03/13 15:49, blackhole at projects.hepforge.org wrote: >> Author: fsiegert >> Date: Mon Mar 18 14:49:01 2013 >> New Revision: 4227 >> >> Log: >> - make-plots: Make Rebin work for variable x-axis binning >> - make-plots: Replace EnvelopeRebin option with ErrorType that is used in combination with the Rebin option. This allows to rebin different types of histograms (statistical errors, envelope errors) in the same plot. >> >> Modified: >> branches/2012-06-aidarivet/bin/make-plots >> branches/2012-06-aidarivet/doc/make-plots.txt >> trunk/bin/make-plots >> trunk/doc/make-plots.txt >> >> Modified: branches/2012-06-aidarivet/bin/make-plots >> ============================================================================== >> --- branches/2012-06-aidarivet/bin/make-plots Mon Mar 18 10:47:37 2013 (r4226) >> +++ branches/2012-06-aidarivet/bin/make-plots Mon Mar 18 14:49:01 2013 (r4227) >> @@ -123,9 +123,6 @@ >> if self.description.has_key('Rebin'): >> for i in self.histos: >> self.histos[i].description['Rebin'] = self.description['Rebin'] >> - if self.description.has_key('EnvelopeRebin'): >> - for i in self.histos: >> - self.histos[i].description['EnvelopeRebin'] = self.description['EnvelopeRebin'] >> >> histoordermap = {} >> histolist = self.histos.keys() >> @@ -1320,6 +1317,9 @@ >> self.data[i]['Error'][1] *= scale >> if self.description.has_key('Rebin') and self.description['Rebin']!='': >> rebin=int(self.description['Rebin']) >> + errortype = "stat" >> + if self.description.has_key('ErrorType') and self.description['ErrorType']!='': >> + errortype = self.description['ErrorType'] >> newdata=[] >> if rebin>=2: >> for i in range(0,(len(self.data)/rebin)*rebin,rebin): >> @@ -1327,30 +1327,27 @@ >> barl=0. >> baru=0. >> for j in range(rebin): >> - foo +=self.data[i+j]['Content'] >> - barl+=self.data[i+j]['Error'][0]**2 >> - baru+=self.data[i+j]['Error'][1]**2 >> - newdata.append({'LowEdge': self.data[i]['LowEdge'], >> - 'UpEdge': self.data[i+rebin-1]['UpEdge'], >> - 'Content': foo/float(rebin), >> - 'Error': [sqrt(barl)/float(rebin),sqrt(baru)/float(rebin)]}) >> - self.data=newdata >> - if self.description.has_key('EnvelopeRebin') and self.description['EnvelopeRebin']!='': >> - rebin=int(self.description['EnvelopeRebin']) >> - newdata=[] >> - if rebin>=2: >> - for i in range(0,(len(self.data)/rebin)*rebin,rebin): >> - newcentral=0. >> - newmax=0. >> - newmin=0. >> - for j in range(rebin): >> - newcentral +=self.data[i+j]['Content'] >> - newmin +=self.data[i+j]['Content']-self.data[i+j]['Error'][0] >> - newmax +=self.data[i+j]['Content']+self.data[i+j]['Error'][1] >> + binwidth=self.data[i+j]['UpEdge']-self.data[i+j]['LowEdge'] >> + foo +=self.data[i+j]['Content']*binwidth >> + if errortype=="stat": >> + barl+=(binwidth*self.data[i+j]['Error'][0])**2 >> + baru+=(binwidth*self.data[i+j]['Error'][1])**2 >> + elif errortype=="env": >> + barl+=(self.data[i+j]['Content']-self.data[i+j]['Error'][0])*binwidth >> + baru+=(self.data[i+j]['Content']+self.data[i+j]['Error'][1])*binwidth >> + else: >> + logging.error("Rebinning for ErrorType not implemented.") >> + sys.exit(1) >> + newbinwidth=self.data[i+rebin-1]['UpEdge']-self.data[i]['LowEdge'] >> + newcentral=foo/newbinwidth >> + if errortype=="stat": >> + newerror=[sqrt(barl)/newbinwidth,sqrt(baru)/newbinwidth] >> + elif errortype=="env": >> + newerror=[(foo-barl)/newbinwidth,(baru-foo)/newbinwidth] >> newdata.append({'LowEdge': self.data[i]['LowEdge'], >> 'UpEdge': self.data[i+rebin-1]['UpEdge'], >> - 'Content': newcentral/float(rebin), >> - 'Error': [(newcentral-newmin)/float(rebin),(newmax-newcentral)/float(rebin)]}) >> + 'Content': newcentral, >> + 'Error': newerror}) >> self.data=newdata >> >> def add(self,name): >> >> Modified: branches/2012-06-aidarivet/doc/make-plots.txt >> ============================================================================== >> --- branches/2012-06-aidarivet/doc/make-plots.txt Mon Mar 18 10:47:37 2013 (r4226) >> +++ branches/2012-06-aidarivet/doc/make-plots.txt Mon Mar 18 14:49:01 2013 (r4227) >> @@ -581,19 +581,17 @@ >> >> -------------------- >> Rebin=<nbins> >> +ErrorType=<stat|env> >> -------------------- >> Rebin the histogram. Starting with the lowest bin <nbins> bins are combined >> into a new bin. If the number of bins in the histogram is not a multiple of >> <nbins>, the remaining bins at the upper histogram end are silently ignored >> (i.e. if the original histogram has 10 bins and <nbins> is 3, the plotted >> histogram shows three bins combining the bins 1--9 of the original histogram). >> - >> --------------------- >> -EnvelopeRebin=<nbins> >> --------------------- >> -Rebin an envelope histogram where the error bars represent an envelope. Thus, >> -they are combined linearly instead of as sum of squares. The functionality >> -is the same as 'Rebin' otherwise. >> +The treatment of the errors is determined by the given ErrorType: >> +`stat` (default) assumes the errors are of statistical nature and combines >> +them in quadrature sum, while `env` allows to treat errors as envelope of >> +various uncertainty runs which are combined linearly. >> >> >> FUNCTION >> >> Modified: trunk/bin/make-plots >> ============================================================================== >> --- trunk/bin/make-plots Mon Mar 18 10:47:37 2013 (r4226) >> +++ trunk/bin/make-plots Mon Mar 18 14:49:01 2013 (r4227) >> @@ -133,9 +133,6 @@ >> if self.description.has_key('Rebin'): >> for i in self.histos: >> self.histos[i].description['Rebin'] = self.description['Rebin'] >> - if self.description.has_key('EnvelopeRebin'): >> - for i in self.histos: >> - self.histos[i].description['EnvelopeRebin'] = self.description['EnvelopeRebin'] >> >> histoordermap = {} >> histolist = self.histos.keys() >> @@ -1330,6 +1327,9 @@ >> self.data[i]['Error'][1] *= scale >> if self.description.has_key('Rebin') and self.description['Rebin']!='': >> rebin=int(self.description['Rebin']) >> + errortype = "stat" >> + if self.description.has_key('ErrorType') and self.description['ErrorType']!='': >> + errortype = self.description['ErrorType'] >> newdata=[] >> if rebin>=2: >> for i in range(0,(len(self.data)/rebin)*rebin,rebin): >> @@ -1337,30 +1337,27 @@ >> barl=0. >> baru=0. >> for j in range(rebin): >> - foo +=self.data[i+j]['Content'] >> - barl+=self.data[i+j]['Error'][0]**2 >> - baru+=self.data[i+j]['Error'][1]**2 >> - newdata.append({'LowEdge': self.data[i]['LowEdge'], >> - 'UpEdge': self.data[i+rebin-1]['UpEdge'], >> - 'Content': foo/float(rebin), >> - 'Error': [sqrt(barl)/float(rebin),sqrt(baru)/float(rebin)]}) >> - self.data=newdata >> - if self.description.has_key('EnvelopeRebin') and self.description['EnvelopeRebin']!='': >> - rebin=int(self.description['EnvelopeRebin']) >> - newdata=[] >> - if rebin>=2: >> - for i in range(0,(len(self.data)/rebin)*rebin,rebin): >> - newcentral=0. >> - newmax=0. >> - newmin=0. >> - for j in range(rebin): >> - newcentral +=self.data[i+j]['Content'] >> - newmin +=self.data[i+j]['Content']-self.data[i+j]['Error'][0] >> - newmax +=self.data[i+j]['Content']+self.data[i+j]['Error'][1] >> + binwidth=self.data[i+j]['UpEdge']-self.data[i+j]['LowEdge'] >> + foo +=self.data[i+j]['Content']*binwidth >> + if errortype=="stat": >> + barl+=(binwidth*self.data[i+j]['Error'][0])**2 >> + baru+=(binwidth*self.data[i+j]['Error'][1])**2 >> + elif errortype=="env": >> + barl+=(self.data[i+j]['Content']-self.data[i+j]['Error'][0])*binwidth >> + baru+=(self.data[i+j]['Content']+self.data[i+j]['Error'][1])*binwidth >> + else: >> + logging.error("Rebinning for ErrorType not implemented.") >> + sys.exit(1) >> + newbinwidth=self.data[i+rebin-1]['UpEdge']-self.data[i]['LowEdge'] >> + newcentral=foo/newbinwidth >> + if errortype=="stat": >> + newerror=[sqrt(barl)/newbinwidth,sqrt(baru)/newbinwidth] >> + elif errortype=="env": >> + newerror=[(foo-barl)/newbinwidth,(baru-foo)/newbinwidth] >> newdata.append({'LowEdge': self.data[i]['LowEdge'], >> 'UpEdge': self.data[i+rebin-1]['UpEdge'], >> - 'Content': newcentral/float(rebin), >> - 'Error': [(newcentral-newmin)/float(rebin),(newmax-newcentral)/float(rebin)]}) >> + 'Content': newcentral, >> + 'Error': newerror}) >> self.data=newdata >> >> def add(self,name): >> >> Modified: trunk/doc/make-plots.txt >> ============================================================================== >> --- trunk/doc/make-plots.txt Mon Mar 18 10:47:37 2013 (r4226) >> +++ trunk/doc/make-plots.txt Mon Mar 18 14:49:01 2013 (r4227) >> @@ -581,19 +581,17 @@ >> >> -------------------- >> Rebin=<nbins> >> +ErrorType=<stat|env> >> -------------------- >> Rebin the histogram. Starting with the lowest bin <nbins> bins are combined >> into a new bin. If the number of bins in the histogram is not a multiple of >> <nbins>, the remaining bins at the upper histogram end are silently ignored >> (i.e. if the original histogram has 10 bins and <nbins> is 3, the plotted >> histogram shows three bins combining the bins 1--9 of the original histogram). >> - >> --------------------- >> -EnvelopeRebin=<nbins> >> --------------------- >> -Rebin an envelope histogram where the error bars represent an envelope. Thus, >> -they are combined linearly instead of as sum of squares. The functionality >> -is the same as 'Rebin' otherwise. >> +The treatment of the errors is determined by the given ErrorType: >> +`stat` (default) assumes the errors are of statistical nature and combines >> +them in quadrature sum, while `env` allows to treat errors as envelope of >> +various uncertainty runs which are combined linearly. >> >> >> FUNCTION >> _______________________________________________ >> Rivet-svn mailing list >> Rivet-svn at projects.hepforge.org >> http://www.hepforge.org/lists/listinfo/rivet-svn >> > > > -- > Dr Andy Buckley, Royal Society University Research Fellow > Particle Physics Expt Group, University of Edinburgh > > The University of Edinburgh is a charitable body, registered in > Scotland, with registration number SC005336. > > _______________________________________________ > Rivet mailing list > Rivet at projects.hepforge.org > http://www.hepforge.org/lists/listinfo/rivet
More information about the Rivet mailing list |