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)