예제 #1
0
def Create_Histograms_UnmatchedInfo(ntuple):
    pl = gr.EventPlotter()

    results = an.Calculate_UnmatchedSharedHits(ntuple, 100)
    pl.ClassHistogram(
        results,
        "Maximum number of shared hits in unmatched and unclassified classes",
        False, False)
예제 #2
0
def Create_Histograms_PixInfo(ntuple):
    pl = gr.EventPlotter()

    nPix_data, nLay_data = an.Calculate_MatchPixelHits(ntuple, 100)
    pl.ClassHistogram(nPix_data, "Number of pixelhits in matches", False,
                      False)
    pl.ClassHistogram(nLay_data, "Number of pixel layers in matches", False,
                      False)
예제 #3
0
def main():
    '''
    The main function, below are commented templates of function calls to perform analysis.
    '''

    ntuple = TrackingNtuple(
        "/afs/cern.ch/work/j/jmaanpaa/public/trackingNtuple_810pre6_v5.root")
    #ntuple = TrackingNtuple("trackingNtuple_pre9_1000ev.root") # Uncomment this for 1000 event data
    pl = gr.EventPlotter()

    ###### USEFUL COMMANDS, UNCOMMENT TO USE ######

    PlotFakes(ntuple)  # Plots the fakes in 3D one by one

    #Create_Histograms_MaxMatched_FakeTracks(ntuple)
    #Create_Histograms_MaxMatched_RealTracks(ntuple)

    #Create_Histograms_Classification(ntuple) # CREATES tHE MAIN CLASSIFICATION HISTOGRAMS
    #Create_Histograms_IncludedDecayHitFrac(ntuple)
    #Create_Histograms_UnmatchedInfo(ntuple)
    #Create_Histograms_PixInfo(ntuple)

    #Create_EndOfTrackingHistograms(ntuple)
    #Create_EndOfTrackingHistogramsReal(ntuple)
    #Create_EOT_DistanceHistogram(ntuple)

    #Create_ResolutionHistograms(ntuple)

    #print an.Calculate_AmountOfFakes(ntuple)

    ###### NOT THAT USEFUL COMMANDS, NOT TESTED AFTER UPDATES ######

    #ntuple_iter = iter(ntuple)#__iter__()
    #event = ntuple_iter.next()
    #tracks = event.tracks()

    #Create_PtHistograms(ntuple)

    #an.Save_Normalisation_Coefficients(ntuple)

    #Create_EndOfTrackingPointsPlot(ntuple)
    #an.EndOfTrackingDetectorInfo(Load_File("End_list_file_layermiss.dmp"),[0],True)

    #Create_Histograms_SharedHitsFracs_RealTracks(ntuple)
    #Create_Histograms_SharedHitsFracs(ntuple)

    #PlotEvent3DHits(event, "PSG")
    #PlotXY(event, [-10,10])
    #PlotZY(event,flag="P")#, [-10,10])
    #PlotPixelGluedTracks3D(tracks)
    #PlotTracks3D(FindFakes(event))
    #PlotTracks3D(FindUntrackedParticles(event))
    #EfficiencyRate(ntuple, 100)
    #for track in an.FindFakes(event):
    #	pl.DrawTrackTest(track)

    #pl.PlotEvent3DHits(event)
    '''
예제 #4
0
def Create_PtHistograms(ntuple):
    ''' Creates pt histograms for fake and true tracks. '''
    pl = gr.EventPlotter()

    fake_pts, true_pts = an.TrackPt(ntuple)
    fake_pts = [min(pt, 4.99) for pt in fake_pts]
    true_pts = [min(pt, 4.99) for pt in true_pts]
    pl.ClassHistogram(fake_pts, "Fake p_{t}", False, False)
    pl.ClassHistogram(true_pts, "True p_{t}", False, False)
예제 #5
0
def Create_Histograms_MaxMatched_RealTracks(ntuple):
    pl = gr.EventPlotter()
    results = an.Calculate_MaxMatchedHits_RealTracks(ntuple, 100)
    pl.ClassHistogram(results, "Matched Hits of real reconstructed tracks",
                      False, False)

    results = an.Calculate_MaxMatchedConsecutiveHits_RealTracks(ntuple, 100)
    pl.ClassHistogram(results,
                      "Matched consecutive hits of real reconstructed track",
                      False, False)
예제 #6
0
def Create_EOT_DistanceHistogram(ntuple):
    pl = gr.EventPlotter()
    end_list = an.Get_EndOfTrackingPoints(ntuple, 100, [])
    #Save_To_File(end_list,"End_list_file_layermiss.dmp")
    #end_list = Load_File("End_list_file_layermiss.dmp")

    errors = an.Analyse_EOT_Error(end_list, True)

    pl.ClassHistogram(errors, "Distance between EOT fake and particle hit",
                      False, False)
예제 #7
0
def PlotFakes(ntuple):
    ''' Plots fakes with the PlotFakes command in the graphics module. '''
    pl = gr.EventPlotter()
    for event in ntuple:
        # Fill the filters with corresponding class indexes or detector layers to filter everything else from the plotting
        pl.PlotFakes(event,
                     True,
                     fake_filter=[],
                     end_filter=[],
                     last_filter="",
                     particle_end_filter="")
예제 #8
0
def Create_Histograms_MaxMatched_FakeTracks(ntuple):
    pl = gr.EventPlotter()
    #results = an.Calculate_MaxMatchedHits(ntuple, 100)
    #pl.ClassHistogram(results, "Max Matched Hits", False, False)

    results = an.Calculate_MaxMatchedConsecutiveHits(ntuple, 100)
    pl.ClassHistogram(results, "Matched consecutive hits of fake", False,
                      False, True, 0, 20, 20, True)

    results = an.Calculate_MaxMatchedConsecutiveHits(ntuple, 100, True)
    pl.ClassHistogram(results, "Consecutive hit fraction of fake", False,
                      False, False, 0, 1.1, 11, True)
예제 #9
0
def Create_Histograms_SharedHitsFracs_RealTracks(ntuple):
    pl = gr.EventPlotter()

    hits_shared, hit_fractions = an.Calculate_SharedHits_RealTracks(
        ntuple, 100)
    pl.ClassHistogram(
        hits_shared,
        "Maximum number of shared hits in real reconstructed tracks", False,
        False)
    pl.ClassHistogram(hit_fractions,
                      "Shared hit fractions in real reconstructed tracks",
                      False, False)
예제 #10
0
def Create_EndOfTrackingHistograms(ntuple):
    '''
    Creates various histograms related to end of tracking
    '''
    pl = gr.EventPlotter()
    ''' Comment/uncomment these lines depending on if you have saved the end of tracking file'''
    end_list = an.Get_EndOfTrackingPoints(ntuple, 100, [])
    #Save_To_File(end_list,"End_list_file_layermiss_invalid4_fix_4class.dmp")

    #end_list = Load_File("End_list_file_layermiss_invalid4_fix_4class.dmp") #an.Get_EndOfTrackingPoints(ntuple, 10, [])

    #end_list = an.Get_EndOfTrackingPointsReal(ntuple, 100)
    #Save_To_File(end_list,"End_list_file_real_invalid.dmp")

    #end_list = Load_File("End_list_file_real_invalid.dmp")
    '''
    for end in end_list:
	if end.end_class == 0 and end.last_str == end.particle_end_str and end.last_str == "BPix3":
	    print end.last
	    print end.particle_end
	    print end.fake_end
	    print end.last_str, end.particle_end_str, end.fake_end_str
	    print end.end_class
	    print "*****"
    '''
    an.Analyse_EOT_ParticleDoubleHit(end_list)
    pl.EndOfTrackingHistogram(end_list, "end_class", [], [], False,
                              False)  #last false will adjust the bpix3 filter
    #pl.EndOfTrackingHistogram(end_list, "invalid_reason_last",[],[],False, True)
    pl.EndOfTrackingHistogram(end_list, "invalid_reason_fake", [0], [], False,
                              False)
    pl.EndOfTrackingHistogram(end_list, "particle_pdgId", [0], [], False,
                              False)
    #pl.EndOfTrackingHistogram(end_list, "invalid_reason_particle",[],[],False, False)
    #pl.EndOfTrackingHistogram(end_list, "particle_end_layer",[0],[],False, True)

    pl.EndOfTrackingHistogram(end_list, "last_layer", [0], [], False,
                              False)  # 11,13,21
    pl.EndOfTrackingHistogram(end_list, "fake_end_layer", [0], [], False,
                              False)
    pl.EndOfTrackingHistogram(end_list, "particle_end_layer", [0], [], False,
                              False)

    errors = an.Analyse_EOT_Error(end_list, True, "same",
                                  False)  # Same detectior id
    pl.ClassHistogram(errors, "Distance between EOT fake and particle hit",
                      False, False)
    errors = an.Analyse_EOT_Error(end_list, True, "different",
                                  False)  # Different detectior id
    pl.ClassHistogram(errors, "Distance between EOT fake and particle hit",
                      False, False)
    an.EndOfTrackingDetectorInfo(end_list, [0], True)
예제 #11
0
def Create_Histograms_Classification(ntuple):
    '''
    Creates histograms from classification of fakes.
    '''
    pl = gr.EventPlotter()
    '''
    results = an.ClassifyEventFakes(ntuple, 10, False)
    pl.ClassHistogram(results, "Classification of all fakes", an.classes, True) 
    
    results = an.Calculate_MaxMatchedConsecutiveHits(ntuple, 100)
    pl.ClassHistogram(results, "Max matched consecutive hits", False, False) 
    
    results = an.Calculate_MaxMatchedHits(ntuple, 100)
    pl.ClassHistogram(results, "Max Matched Hits", False, False) 
     
    results = an.Calculate_MaxMatchedConsecutiveHits(ntuple, 100, True)
    pl.ClassHistogram(results, "Hit fraction of fake", False, False) #"Max matched consecutive hits with respect to fake", False, False)
    '''

    results = an.ClassifyEventFakes(ntuple, 100,
                                    False)  # ORIGINAL MATCH CRITERION
    #results = an.ClassifyEventFakes(ntuple, 100, False, real_criterion = ["NLay", 6]) # SHARED LAYERS (NLay) MATCH CRITERION

    #pl.ClassHistogram(results, "Classification of all fakes", an.classes, True)

    all_classified = OrderedDict()
    all_classified["No matches"] = results[0]
    all_classified["One match"] = sum([results[i] for i in [10, 11, 12, 13]])
    all_classified["Multiple matches"] = sum(
        [results[i] for i in [20, 21, 22, 23]])
    all_classified["Loose match"] = results[-1]

    pl.ClassHistogram(all_classified, "Classification of all fakes", False,
                      True)

    single_classified = OrderedDict()
    single_classified["Decayed and reconstructed"] = results[11]
    single_classified["Only reconstructed"] = results[12]
    single_classified["Only decayed"] = results[13]
    single_classified["Neither"] = results[10]
    pl.ClassHistogram(single_classified,
                      "Classification of fakes with single match", False, True)

    multi_classified = OrderedDict()
    multi_classified["Includes a decay interaction"] = results[21]
    multi_classified["All matches reconstructed"] = results[22]
    multi_classified["Some matches reconstructed"] = results[23]
    multi_classified["Other"] = results[20]
    pl.ClassHistogram(multi_classified,
                      "Classification of fakes with multiple matches", False,
                      True)
예제 #12
0
def Create_Histograms_IncludedDecayHitFrac(ntuple):
    '''
    Creates plots related to the "multiple matches including a decay interaction" -class.
    '''
    pl = gr.EventPlotter()

    daughter_frac, parent_frac, total_frac = an.Calculate_IndludedDecayHitFractions(
        ntuple, 100)
    pl.ClassHistogram(daughter_frac, "Daughter share of hits from fake", False,
                      False)
    pl.ClassHistogram(parent_frac, "Parent share of hits from fake", False,
                      False)
    pl.ClassHistogram(total_frac, "Total share of hits from fake", False,
                      False)
예제 #13
0
def Create_Histograms_SharedHitsFracs(ntuple):
    pl = gr.EventPlotter()

    hits_shared, hit_fractions = an.Calculate_SharedHits(ntuple, 100, [])
    pl.ClassHistogram(hits_shared,
                      "Maximum number of shared hits in all classes", False,
                      False)
    pl.ClassHistogram(hit_fractions, "Shared hit fractions in all classes",
                      False, False)

    hits_shared, hit_fractions = an.Calculate_SharedHits(
        ntuple, 100, [10, 11, 12, 13])
    pl.ClassHistogram(hits_shared,
                      "Maximum number of shared hits in single match classes",
                      False, False)
    pl.ClassHistogram(hit_fractions,
                      "Shared hit fractions in single match classes", False,
                      False)

    hits_shared, hit_fractions = an.Calculate_SharedHits(
        ntuple, 100, [20, 21, 22, 23])
    pl.ClassHistogram(
        hits_shared, "Maximum number of shared hits in multiple match classes",
        False, False)
    pl.ClassHistogram(hit_fractions,
                      "Shared hit fractions in multiple match classes", False,
                      False)

    hits_shared, hit_fractions = an.Calculate_SharedHits(ntuple, 100, [10])
    pl.ClassHistogram(
        hits_shared,
        "Maximum number of shared hits in other single match class", False,
        False)
    pl.ClassHistogram(hit_fractions,
                      "Shared hit fractions in other single match class",
                      False, False)

    hits_shared, hit_fractions = an.Calculate_SharedHits(ntuple, 100, [13])
    pl.ClassHistogram(
        hits_shared,
        "Maximum number of shared hits in single decay match class", False,
        False)
    pl.ClassHistogram(hit_fractions,
                      "Shared hit fractions in single decay match class",
                      False, False)
예제 #14
0
def Create_ResolutionHistograms(ntuple):
    '''
    Performs resolution analysis and plots histograms from the results.
    Comment and uncomment lines depending on if you have saved the files.
    '''
    pl = gr.EventPlotter()

    res_data_fakes = an.Resolution_Analysis_Fakes(ntuple, 100)
    #Save_To_File(res_data_fakes, "resolutions_fake_matches1000ev.dmp")
    #res_data_fakes = Load_File("resolutions_fake_matches1000ev.dmp")

    #pl.ResolutionHistograms(res_data_fakes)
    #pl.HistogramSigmaPt(res_data_fakes)

    res_data_trues = an.Resolution_Analysis_Trues(ntuple, 100)
    #Save_To_File(res_data_trues, "resolutions_trues1000ev.dmp")
    #res_data_trues = Load_File("resolutions_trues1000ev.dmp")

    res_data_fakes_NLay = an.Resolution_Analysis_Fakes(
        ntuple, 100, real_criterion=["NLay", 6])
    #Save_To_File(res_data_fakes_NLay, "resolutions_fake_NLay_matches1000ev.dmp")
    #res_data_fakes_NLay = Load_File("resolutions_fake_NLay_matches1000ev.dmp")

    #pl.ResolutionHistograms(res_data_fakes)
    #pl.HistogramSigmaPt(res_data_fakes)

    #pl.ResolutionHistograms(res_data_trues)
    #pl.HistogramSigmaPt(res_data_trues)

    #pl.ResolutionHistogramsCombine(res_data_trues, res_data_fakes)
    pl.ResolutionHistogramsNormalised(res_data_trues, res_data_fakes)
    pl.ResolutionHistogramsNormalisedCumulative(res_data_trues, res_data_fakes)

    #pl.HistogramSigmaPtCombined(res_data_trues, res_data_fakes)
    #pl.HistogramSigmaPtDual(res_data_trues, res_data_fakes)
    pl.ResolutionsSigmaVsPt(res_data_trues, res_data_fakes)

    pl.ResolutionHistogramsNormalised(res_data_trues, res_data_fakes_NLay)
    pl.ResolutionHistogramsNormalisedCumulative(res_data_trues,
                                                res_data_fakes_NLay)

    pl.ResolutionsSigmaVsPt(res_data_trues, res_data_fakes_NLay)
예제 #15
0
def Create_EndOfTrackingPointsPlot(ntuple):
    # NOT TESTED AFTER UPDATE
    pl = gr.EventPlotter()

    end_list = an.Get_EndOfTrackingPoints(ntuple, 100, [])
    last = [], fake_ends = [], particle_ends = [], end_classes = [], fake_classes = []
    for end in end_list:
        last.append(end.last)
        fake_ends.append(end.fake_end)
        particle_ends.append(end.particle_end)
        end_classes.append(end.end_class)
        fake_classes.append(end.fake_class)
    '''
    pl.PlotEndOfTrackingPoints3D(last,[])#, fail)
    pl.PlotEndOfTrackingPoints3D(fake_ends,[],[],2)
    pl.PlotEndOfTrackingPoints3D(particle_ends,[],[],3)
    #pl.PlotDetectorRange()
    pl.Draw()
    '''
    pl.PlotEndOfTracking3D(last, fake_ends, particle_ends, end_classes,
                           fake_classes)
    pl.PlotDetectorRange()
    pl.Draw()

    pl.Reset()
    pl.PlotEndOfTracking3D(last, fake_ends, particle_ends, end_classes,
                           fake_classes, [0], [])
    pl.PlotDetectorRange()
    pl.Draw()

    pl.Reset()
    pl.PlotEndOfTracking3D(last, fake_ends, particle_ends, end_classes,
                           fake_classes, [], [10])
    pl.PlotDetectorRange()
    pl.Draw()

    pl.Reset()
    pl.PlotEndOfTracking3D(last, fake_ends, particle_ends, end_classes,
                           fake_classes, [], [13])
    pl.PlotDetectorRange()
    pl.Draw()
예제 #16
0
def Create_EndOfTrackingHistogramsReal(ntuple):
    '''
    Create end of tracking histograms for true tracks.
    '''
    pl = gr.EventPlotter()
    ''' Comment/uncomment these lines depending on if you have saved the end of tracking file'''
    end_list = an.Get_EndOfTrackingPointsReal(ntuple, 100)
    #Save_To_File(end_list,"End_list_file_real_fixed.dmp")

    #end_list = Load_File("End_list_file_real_fixed.dmp") #an.Get_EndOfTrackingPoints(ntuple, 10, [])
    '''
    for end in end_list:
	if end.end_class == 0 and end.last_str == end.particle_end_str and end.last_str == "BPix3":
	    print end.last
	    print end.particle_end
	    print end.fake_end
	    print end.last_str, end.particle_end_str, end.fake_end_str
	    print end.end_class
	    print "*****"
    '''
    pl.EndOfTrackingHistogram(end_list, "end_class", [], [])
    pl.EndOfTrackingHistogram(end_list, "last_layer", [0], [], False)
    pl.EndOfTrackingHistogram(end_list, "fake_end_layer", [0], [], False)
    pl.EndOfTrackingHistogram(end_list, "particle_end_layer", [0], [], False)