docs: def rawData(self, fileAdres=None):
          # skip skiprows
          skiprows = None
          skip_from = [b'Field', b'Moment']
          with open(fileAdres, 'rb') as fr:
              #f = fr.read()
              for i, line in enumerate(fr, 1):
                  # print(line.split())
                  if skip_from == line.split():
                      skiprows = i+2
                      break
                  # else:
                  #    print('file format wrong, cannot find the data row.')
          skiprows = 34 if skiprows == None else skiprows
          df = pd.read_csv(fileAdres, skiprows=skiprows, sep='\s+',
                           delimiter=',', names=['H', 'M'], skipfooter=1,
                           engine='python')
  
          H = df.H  # measured field
          M = df.M  # measured magnetic moment
          '''
          #=================================================
          /datainterval_H/_M
          /slice the measured data into pieces
          /for every measured FORC
          #=================================================
          '''
          dataInterval_H = []
          dataInterval_M = []
          # print(H)
          cretia = df.H.mean()  # edge of linear programing for selecting data
          H0 = df.H.max()  # the maximum field
          self.x, self.y, self.z = [[], [], []]
          for i in np.arange(1, len(H)):
              dataInterval_H.append(H[i])
              dataInterval_M.append(M[i])
              if abs(H[i]-H0) <= 0.001:  # when the filed reach the max, a new forc
                  if len(dataInterval_H) >= 0 and len(dataInterval_H) <= 200:
                      # print(dataInterval_H)
                      Ha = dataInterval_H[0]
                      dataInterval_H.pop(-1)
                      dataInterval_M.pop(-1)
                      Hb = dataInterval_H[1:-1]
                      Hm = dataInterval_M[1:-1]
                      for t in np.arange(len(Hb)):
                          self.x.append(Hb[t])
                          self.y.append(Ha)
                          self.z.append(Hm[t])
                          # print(Ha)
                  dataInterval_H = []
                  dataInterval_M = []
          self.rawdf = df
          '''
          #=================================================
          transfer the data set to matrix as len(x)*len(y) with z value
          /mesh up the rawdata
          /select the data area by X,Y ranges
          /obtain regular spaced data potins by np.linspace
          /use interplote to caculate the Hm values
          /loop Ha(Y),Hb(X)
          /fill every position with Hm, else with np.nan
          #=================================================
          '''
          self.z = self.z/np.max(self.z)
          # print(int(np.min(self.x)*100)/100,np.max(self.x))
          xrange = [int((np.min(self.x)-0.1)*10)/10,
                    int((np.max(self.x)+0.1)*10)/10]
          yrange = [int((np.min(self.y)-0.1)*10)/10,
                    int((np.max(self.y)+0.1)*10)/10]
          X = np.linspace(xrange[0], xrange[1], 200)
          Y = np.linspace(yrange[0], yrange[1], 200)
          yi, xi = np.mgrid[yrange[0]:yrange[1]:200j, xrange[0]:xrange[1]:200j]
  
          #X = np.linspace(-0.2,0.3,200)
          #Y = np.linspace(-0.2,0.3,200)
          #xi,yi = np.mgrid[-0.2:0.3:200j,-0.2:0.3:200j]
  
          zi = griddata((self.x, self.y), self.z, (xi, yi),
                        method='linear')  # !!! must linear
          self.matrix_z = zi
          self.x_range = X
          self.y_range = Y