docs: def Crop(self, x1, x2, copy=False):
          """
          Remove points which lie outside of [x1, x2].
          If x1 and/or x2 is below/above the current lowest/highest
          x-coordinates, additional points are added to the graph using a
          linear interpolation
          """
          numPoints = self.GetN()
          if copy:
              cropGraph = self.Clone()
              copyGraph = self
          else:
              cropGraph = self
              copyGraph = self.Clone()
          cropGraph.Set(0)
          X = copyGraph.GetX()
          EXlow = copyGraph.GetEXlow()
          EXhigh = copyGraph.GetEXhigh()
          Y = copyGraph.GetY()
          EYlow = copyGraph.GetEYlow()
          EYhigh = copyGraph.GetEYhigh()
          xmin = copyGraph.GetXmin()
          if x1 < xmin-EXlow[0]:
              cropGraph.Set(numPoints + 1)
          xmax = copyGraph.GetXmax()
          if x2 > xmax+EXhigh[numPoints-1]:
              cropGraph.Set(numPoints + 1)
          index = 0
          for i in range(numPoints):
              if i == 0 and x1 < xmin:
                  cropGraph.SetPoint(0, x1, copyGraph.Eval(x1))
                  index += 1
              elif i == numPoints-1 and x2 > xmax+EXhigh[i]:
                  cropGraph.SetPoint(i, x2, copyGraph.Eval(x2))
              if x1<=X[i]-EXlow[i] and X[i]+EXhigh[i]<=x2:
                  cropGraph.SetPoint(index, X[i], Y[i])
                  cropGraph.SetPointError(
                      index,
                      EXlow[i], EXhigh[i],
                      EYlow[i], EYhigh[i])
                  index += 1
          return cropGraph