示例#1
0
class DataFile(object):
  def __init__(self, file_name, hist_names, bin_width=None, **kwargs):
    super(DataFile, self).__init__()
    self.file = TFile(file_name, "READ")
    self.file_name = file_name
    
    self.hist_names = hist_names
    self.hists = {h:self.file.Get(h) for h in hist_names}
    
    if bin_width:
      self.bin_width = bin_width
      map(lambda x:x.Rebin(bin_width), self.hists.values())
    else:
      self.bin_width = 1 # What it should get set to initially  
    
    # make sure that we don't reset any values
    ignore = ("file", "file_name", "hist_names", "hists", "bin_width")
    for k,v in kwargs.items():
      if k in ignore:
        continue
      else:
        setattr(self,k,v)
  
  def __str__(self):
    fmt = "File name:{}\n\tMeta-data:{}\n\tSummed integrals:{}\n\tSummed Rates:{}\n"
    ignore = ("hist_names", "file_name", "hists", "file", "muon_rates", "sum_integrals")
    meta_data = ["\n\t\t{}:{}".format(i,getattr(self, i)) for i in self.__dict__ if i[:2] != "__" and i not in ignore]
    meta_data = "".join(meta_data)
    integrals = ["\n\t\t{}:{}".format(i,self.sum_integrals[i]) for i in self.sum_integrals]
    rates = ["\n\t\t{}:{}".format(i,self.muon_rates[i]) for i in self.muon_rates]
    return fmt.format(self.file_name, meta_data, integrals, rates)
  
  def __repr__(self):
    fmt = "<File:{} Meta-data:{} Histograms:{}>"
    ignore = ("hist_names", "file_name", "hists", "file")
    meta_data = ["{}:{} ".format(i,getattr(self, i)) for i in self.__dict__ if i[:2] != "__" and i not in ignore]
    meta_data = "".join(meta_data)
    return fmt.format(self.file_name, meta_data, self.hist_names)
  
  def __getitem__(self, item):
    return self.hists[item]
  
  def __getattr__(self,attr):
    return self.file.__getattribute__(attr)