Esempio n. 1
0
    def drawObjects(self, view_manager):

        geom = view_manager._geometry
        for view in view_manager.getViewPorts():
            thisPlane = view.plane()
            self._drawnObjects.append([])
            # First get the hit information:
            numus = self._process.getDataByPlane(thisPlane)

            for i in range(len(numus)):
                # Draw the vertex:

                vertex = numus[i].vertex()
                # Draws a circle at (x,y,radius = 0.5cm)
                radBigW = 3 / view_manager._geometry.wire2cm()
                radBigT = (3) / view_manager._geometry.time2cm()

                offset = view_manager._geometry.offset(
                    thisPlane) / view_manager._geometry.time2cm()

                sW = vertex.w / view_manager._geometry.wire2cm()
                sT = vertex.t / view_manager._geometry.time2cm() + offset

                r = QtGui.QGraphicsEllipseItem(sW - radBigW, sT - radBigT,
                                               2 * radBigW, 2 * radBigT)

                r.setPen(pg.mkPen(None))
                r.setBrush(pg.mkColor(139, 0, 139, 128))
                self._drawnObjects[thisPlane].append(r)
                view._view.addItem(r)

                # Draw all the tracks:
                tracks = numus[i].tracks()
                for j in range(len(numus[i].tracks())):
                    track = tracks[j]
                    # construct a polygon for this track:
                    points = []
                    # Remeber - everything is in cm, but the display is in
                    # wire/time!
                    for pair in track.track():
                        x = pair.first / geom.wire2cm()
                        y = pair.second / geom.time2cm() + offset
                        points.append(QtCore.QPointF(x, y))

                    thisPoly = polyLine(points)

                    #Change the color here:
                    if j == numus[i].muon_index():
                        # Do something special with the muon
                        pen = pg.mkPen((238, 130, 238), width=2)
                    else:
                        pen = pg.mkPen((139, 0, 139), width=2)

                    thisPoly.setPen(pen)
                    # polyLine.draw(view._view)

                    view._view.addItem(thisPoly)

                    self._drawnObjects[view.plane()].append(thisPoly)
Esempio n. 2
0
    def drawObjects(self, view_manager, on_both_tpcs=False):
        geom = view_manager._geometry

        for view in view_manager.getViewPorts():
            #   # get the showers from the process:
            self._drawnObjects.append([])
            tracks = self._process.getDataByPlane(view.plane())
            offset = geom.offset(view.plane()) / geom.time2cm()

            for i in range(len(tracks)):
                track = tracks[i]
                # construct a polygon for this track:
                points = []
                # Remeber - everything is in cm, but the display is in
                # wire/time!
                for pair in track.track():
                    x = pair.first / geom.wire2cm()
                    y = pair.second / geom.time2cm() + offset
                    y += track.tpc() * (geom.tRange() - geom.triggerOffset())

                    if geom.nTPCs() == 2 and on_both_tpcs:
                        cathode_time = (2 * geom.halfwidth() + geom.offset(
                            view.plane())) / geom.time2cm()
                        if y > cathode_time:
                            y += geom.tRange() - geom.triggerOffset()

                    points.append(QtCore.QPointF(x, y))

                # self._drawnObjects[view.plane()].append(thisPoly)

                if len(points) == 0:
                    continue

                #print ('MCTrack pdg', track.pdg())

                origin = track.origin()
                if (origin == 1):  # neutrino origin
                    color = (128, 128, 128)  # Gray
                else:
                    color = (0, 0, 0)  # Black

                thisPoly = polyLine(points, color)

                time = track.time()
                thisPoly.setToolTip(
                    f'PDG = {track.pdg()}\nTime = {track.time():.4} us\nEnergy = {track.energy()/1e3:.4} GeV\nProcess = {track.process()}'
                )

                view._view.addItem(thisPoly)

                self._drawnObjects[view.plane()].append(thisPoly)
Esempio n. 3
0
    def drawObjects(self, view_manager, on_both_tpcs=False):
        geom = view_manager._geometry

        for view in view_manager.getViewPorts():
            self._drawnObjects.append([])
            tracks = self._process.getDataByPlane(view.plane())

            for i in range(len(tracks)):
                track = tracks[i]
                # construct a polygon for this track:
                points = []
                # Remeber - everything is in cm, but the display is in
                # wire/time!
                for i, pair in enumerate(track.track()):
                    x = pair.first / geom.wire2cm()
                    y = pair.second / geom.time2cm()

                    # If odd TPC, shit this piece of the track up
                    if track.tpc()[i] % 2:
                        y += 2 * geom.triggerOffset()
                        y += geom.cathodeGap()

                    points.append(QtCore.QPointF(x, y))

                if len(points) == 0:
                    continue

                #print ('MCTrack pdg', track.pdg())

                origin = track.origin()
                if (origin == 1): # neutrino origin
                    color = (128,128,128) # Gray
                else:
                    color = (0,0,0) # Black

                thisPoly = polyLine(points, color)

                time = track.time() - geom.getDetectorClocks().TriggerTime()
                thisPoly.setToolTip(f'PDG = {track.pdg()}\nTime = {time:.4} us\nEnergy = {track.energy()/1e3:.4} GeV\nProcess = {track.process()}')

                view._view.addItem(thisPoly)

                self._drawnObjects[view.plane()].append(thisPoly)
    def drawObjects(self, view_manager):
        geom = view_manager._geometry

        for view in view_manager.getViewPorts():
            #   # get the showers from the process:
            self._drawnObjects.append([])
            tracks = self._process.getDataByPlane(view.plane())
            offset = geom.offset(view.plane()) / geom.time2cm()

            for i in range(len(tracks)):
                track = tracks[i]
                # construct a polygon for this track:
                points = []
                # Remeber - everything is in cm, but the display is in
                # wire/time!
                for pair in track.track():
                    x = pair.first / geom.wire2cm()
                    y = pair.second / geom.time2cm() + offset
                    points.append(QtCore.QPointF(x, y))

                # self._drawnObjects[view.plane()].append(thisPoly)

                if len(points) == 0:
                    continue

                thisPoly = polyLine(points)

                origin = track.origin()
                if (origin == 1):  # neutrino origin
                    pen = pg.mkPen((128, 128, 128), width=2)
                else:
                    pen = pg.mkPen((0, 0, 0), width=2)
                thisPoly.setPen(pen)
                # polyLine.draw(view._view)

                view._view.addItem(thisPoly)

                self._drawnObjects[view.plane()].append(thisPoly)
Esempio n. 5
0
    def drawObjects(self, view_manager):

        geom = view_manager._geometry
        for view in view_manager.getViewPorts():
            thisPlane = view.plane()
            self._drawnObjects.append([])
            # First get the hit information:
            numus = self._process.getDataByPlane(thisPlane)

            for i in xrange(len(numus)):

                # draw the slice hits
                slice_hit_v = numus[i].slicehits()
                print('there are %i hits for the full slice' %
                      (len(slice_hit_v)))
                for ih in xrange(len(slice_hit_v)):
                    hit = slice_hit_v[ih]
                    r = QtGui.QGraphicsRectItem(
                        hit.wire(),
                        hit.time() + geom.timeOffsetTicks(view.plane()), 2,
                        2 * hit.rms())

                    opacity = 0.5  # int(128 * hit.charge() / 100.) + 127
                    # Old Way:
                    r.setPen(pg.mkPen(None))
                    r.setBrush(pg.mkColor((0, 0, 0, 200)))  #,opacity))
                    # r.setBrush((0,0,0,opacity))
                    self._drawnObjects[thisPlane].append(r)
                    view._view.addItem(r)

                # draw the hits
                hits_v = numus[i].hits()
                for ic, hits in enumerate(hits_v):
                    print('there are %i hits on plane %i' %
                          (len(hits), thisPlane))
                    for ih in xrange(len(hits)):
                        hit = hits[ih]
                        #print '\t [w,t] -> [%.0f,%.0f]'%(hit.wire(),hit.time())
                        # Draws a rectangle at (x,y,xlength, ylength)
                        r = QtGui.QGraphicsRectItem(
                            hit.wire(),
                            hit.time() + geom.timeOffsetTicks(view.plane()), 2,
                            2 * hit.rms())

                        opacity = 0.5  # int(128 * hit.charge() / 100.) + 127
                        # Old Way:
                        color = self._Colors[ic % len(self._Colors)]
                        r.setPen(pg.mkPen(None))
                        r.setBrush(pg.mkColor(color))  #,opacity))
                        # r.setBrush((0,0,0,opacity))
                        self._drawnObjects[thisPlane].append(r)
                        view._view.addItem(r)

                # Draw the vertex:
                vertex = numus[i].vertex()
                # Draws a circle at (x,y,radius = 0.5cm)
                radBigW = 1 / view_manager._geometry.wire2cm()
                radBigT = (1) / view_manager._geometry.time2cm()

                offset = view_manager._geometry.offset(
                    thisPlane) / view_manager._geometry.time2cm()

                sW = vertex.w / view_manager._geometry.wire2cm()
                sT = vertex.t / view_manager._geometry.time2cm() + offset

                r = QtGui.QGraphicsEllipseItem(sW - radBigW / 2.,
                                               sT - radBigT / 2., 1 * radBigW,
                                               1 * radBigT)

                r.setPen(pg.mkPen(None))
                r.setBrush(pg.mkColor(255, 255, 255, 200))
                self._drawnObjects[thisPlane].append(r)
                view._view.addItem(r)

                # Draw all the tracks:
                tracks = numus[i].tracks()
                for j in xrange(len(numus[i].tracks())):
                    track = tracks[j]
                    # construct a polygon for this track:
                    points = []
                    # Remeber - everything is in cm, but the display is in
                    # wire/time!
                    for pair in track.track():
                        x = pair.first / geom.wire2cm()
                        y = pair.second / geom.time2cm() + offset
                        points.append(QtCore.QPointF(x, y))

                    thisPoly = polyLine(points)

                    #Change the color here:
                    if j == numus[i].muon_index():
                        # Do something special with the muon
                        pen = pg.mkPen((238, 130, 238), width=2)
                    else:
                        pen = pg.mkPen((139, 0, 139), width=2)

                    thisPoly.setPen(pen)
                    # polyLine.draw(view._view)

                    view._view.addItem(thisPoly)

                    self._drawnObjects[view.plane()].append(thisPoly)

                # showers
                showers = numus[i].showers()

                i_color = 0

                for i in xrange(len(showers)):

                    shower = showers[i]

                    color = (252, 127, 0, 100)

                    # construct a polygon for this shower:
                    points = []
                    # Remember - everything is in cm, but the display is in
                    # wire/time!
                    geom = view_manager._geometry
                    offset = geom.offset(view.plane()) / geom.time2cm()
                    x = shower.startPoint().w / geom.wire2cm()
                    y = shower.startPoint().t / geom.time2cm() + offset

                    points.append(QtCore.QPoint(x, y))
                    # next connect the two points at the end of the shower to make
                    # a cone
                    #
                    # We need the vector that's perpendicular to the axis, to make the cone.
                    # Use 3D vectors to allow the cross product:
                    zAxis = TVector3(0, 0, 1)
                    showerAxis = TVector3(
                        shower.endPoint().w - shower.startPoint().w,
                        shower.endPoint().t - shower.startPoint().t, 0.0)
                    perpAxis = zAxis.Cross(showerAxis)

                    length = showerAxis.Mag() * mt.tan(
                        shower.openingAngle() / 2)
                    perpAxis *= length / perpAxis.Mag()


                    x1, y1 = shower.endPoint().w + perpAxis.X(), shower.endPoint().t + \
                        perpAxis.Y()
                    x2, y2 = shower.endPoint().w - perpAxis.X(), shower.endPoint().t - \
                        perpAxis.Y()

                    # Scale everything to wire/time:
                    x1 /= geom.wire2cm()
                    y1 /= geom.time2cm()
                    x2 /= geom.wire2cm()
                    y2 /= geom.time2cm()

                    y1 += offset
                    y2 += offset

                    points.append(QtCore.QPoint(x1, y1))
                    points.append(QtCore.QPoint(x2, y2))

                    thisPolyF = QtGui.QPolygonF(points)

                    self.shower_poly = QtGui.QGraphicsPolygonItem(thisPolyF)
                    self.shower_poly = shower_polygon(thisPolyF)

                    self.shower_poly.setPen(pg.mkPen(None))
                    self.shower_poly.setBrush(pg.mkColor(color))

                    view._view.addItem(self.shower_poly)
                    self._drawnObjects[view.plane()].append(self.shower_poly)