Problem reading TGraphAsummErrors from map with pyroot


ROOT Version: Not Provided
Platform: Not Provided
Compiler: Not Provided


Hi

I am reading a set of TGraphAsymmErrors and save them to a map, but when I am trying to pass and read the TGraph from the map, I get like that the TGraph is empy.

import ROOT as root
import sys,math



eff_dataH = root.std.map("string", root.TGraphAsymmErrors)()

def ScaleFactor(inputRootFile="Muon_IsoMu27.root") :
    global etaBinsH
    global get_EfficiencyData
    global get_EfficiencyMC
    EtaBins=["Lt0p9", "0p9to1p2","1p2to2p1","Gt2p1"]

    print inputRootFile
    fileIn = root.TFile(inputRootFile,"read")
    fileIn.ls()
    HistoBaseName = "ZMassEta"
    etaBinsH = fileIn.Get("etaBinsH")
    #etaLabel, GraphName
    nEtaBins = int(etaBinsH.GetNbinsX())
    eff_data= []
    eff_mc= []
    #eff_mcH =root.TGraphAsymmErrors()
    print "EtaBins...........",nEtaBins, len(EtaBins)
    for iBin in range (0, nEtaBins) :
        etaLabel = EtaBins[iBin]
        GraphName = HistoBaseName+etaLabel+"_Data"

        eff_data.append(fileIn.Get(str(GraphName)))
        eff_dataH[etaLabel]=fileIn.Get(str(GraphName))
    sff = get_EfficiencyData(46.8,2.0)
    print "ScaleFactor ",sff

def get_EfficiencyData(pt, eta) :

    label = FindEtaLabel(eta,"data")
    binNumber = etaBinsH.GetXaxis().FindFixBin(eta)
    label = etaBinsH.GetXaxis().GetBinLabel(binNumber)
    print eff_dataH
    ptbin = FindPtBin(eff_dataH, label, pt)
    Eta = math.fabs(eta)
    if ptbin == -99 : eff =1
    else  : eff= eff_dataH[label].GetY()[ptbin-1]
    print "inside eff_data",eff

    if eff > 1.  : eff = -1 
    if eff < 0 : eff = 0. 

    return eff


def FindPtBin( eff_map, EtaLabel, Pt) :

    Npoints = eff_map[EtaLabel].GetN()
    print Npoints, "for ===============>",eff_map[EtaLabel],eff_map[EtaLabel].GetN(),EtaLabel
    ptMAX = (eff_map[EtaLabel].GetX()[Npoints-1])+(eff_map[EtaLabel].GetErrorXhigh(Npoints-1))
    ptMIN = (eff_map[EtaLabel].GetX()[0])-(eff_map[EtaLabel].GetErrorXlow(0))
    if Pt >= ptMAX : return Npoints
    elif Pt < ptMIN :
        return -99
    else : return eff_map[EtaLabel].GetXaxis().FindFixBin(Pt)

The problem seems to appear when I call the FindPtBin to which I pass the map<string,TGraph> as shown above where the GetN() returns always 0. Any ideas what am I doing wrong ?

Thanks

Hi,
Are the graphs empty also when you add them to the map at this line?

        eff_dataH[etaLabel]=fileIn.Get(str(GraphName))

It might be a problem retrieving them from the file. You can try to retrieve only one and see if you get it correctly.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.