<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def load_mapfile(self, map3=False):
 """Load the marker data :param map3: When true, ignore the gen. distance column Builds up the marker list according to the boundary configuration """

        cols = [0, 1, 3]
        if map3:
            cols = [0, 1, 2]
        markers = numpy.loadtxt(self.mapfile, dtype=str, usecols=cols)

        self.snp_mask = numpy.ones(markers.shape[0]*2,
                                   dtype=numpy.int8).reshape(-1, 2)

        if DataParser.boundary.NoExclusions():
            self.markers = numpy.zeros((markers.shape[0], 2), dtype=int)
            # Check for plink's "off" mode
            mask = markers[:, 2].astype(int) >= 0
            # Turn them all 'on'
            self.snp_mask[:,0] = ~mask
            self.snp_mask[:,1] = ~mask
            snp_count = numpy.sum(self.snp_mask[:, 0] == 0)

            self.markers[0:snp_count, 0] = markers[:, 0].astype(int)[mask]
            self.markers[0:snp_count, 1] = markers[:, 2].astype(int)[mask]
            self.rsids = markers[:, 1][mask]
            self.markers = self.markers[0:snp_count]
        else:
            idx = 0
            self.markers = []
            self.rsids   = []
            for locus in markers:
                if DataParser.boundary.TestBoundary(int(locus[0]),
                                                    int(locus[2]), locus[1]):
                    self.markers.append([locus[0], locus[2]])
                    self.rsids.append(locus[1])
                    self.snp_mask[idx] = 0
                idx += 1
            self.markers = numpy.array(self.markers, dtype=numpy.int)
            self.rsids   = numpy.array(self.rsids)

        # We don't follow these rules here
        DataParser.boundary.beyond_upper_bound = False
        self.locus_count    = len(self.markers)