text: # -*- coding: utf-8 -*-
  """
  
  Author
  ------
  Bo Zhang
  
  Email
  -----
  bozhang@nao.cas.cn
  
  Created on
  ----------
  - Fri Jul  3 13:13:06 2015    read_spectrum
  
  Modifications
  -------------
  - Fri Nov 20 10:16:59 2015    reformatting code
  - Sun Feb 28 14:39:16 2016    migrated to bopy.spec.lamost
  - Fri Jul 15 16:08:00 2016    migrate read_spectrum to read_spectrum.py
  
  
  Aims
  ----
  - generate LAMOST spectra file name/path
  
  """
  
  # from __future__ import print_function
  import os
  import numpy as np
  # from astropy.io import fits
  # from astropy.table import Table, Column
  
  
  def lamost_filepath(planid, mjd, spid, fiberid, dirpath='', extname='.fits'):
      """ generate file path of a LAMOST spectrum
  
      Parameters
      ----------
      planid: string
          planid
  
      mjd: 5-digit integer
          mjd (use lmjd rather than mjd for DR3 and after!)
  
      spid: 2-digit integer
          spid, the number of the spectrogragh
  
      fiberid: 3-digit integer
          fiberid
  
      dirpath: string
          the root directory for storing spectra.
  
      Rreturns
      --------
      filepath: string
          the path of root dir of directory (prefix).
          if un-specified, return file name.
  
      """
  
      if dirpath == '' or dirpath is None:
          # return file name
          if np.isscalar(mjd):
              # if only input one item
              return 'spec-%05d-%s_sp%02d-%03d%s' \
                     % (mjd, planid, spid, fiberid, extname)
          else:
              # if input a list of items
              return np.array(['spec-%05d-%s_sp%02d-%03d%s' %
                               (mjd[i], planid[i], spid[i], fiberid[i], extname)
                               for i in xrange(len(mjd))])
      else:
          # return file path
          if not dirpath[-1] == os.path.sep:
              dirpath += os.path.sep
  
          if np.isscalar(mjd):
              # if only input one item
              return '%s%s%sspec-%05d-%s_sp%02d-%03d%s' \
                     % (dirpath, planid, os.path.sep,
                        mjd, planid, spid, fiberid, extname)
          else:
              # if input a list of items
              return np.array(['%s%s%sspec-%05d-%s_sp%02d-%03d%s' %
                               (dirpath, planid[i], os.path.sep, mjd[i],
                                planid[i], spid[i], fiberid[i], extname)
                               for i in xrange(len(mjd))])
  
  
  def _test_lamost_filepath():
      """test function **lamost_filepath**
      """
      print(lamost_filepath('GAC_061N46_V3', 55939, 7, 78))
      print(lamost_filepath('GAC_061N46_V3', 55939, 7, 78, '/'))
      print(lamost_filepath('GAC_061N46_V3', 55939, 7, 78, '/pool'))
      print(lamost_filepath('GAC_061N46_V3', 55939, 7, 78, '/pool/'))
  
  
  def sdss_filepath(plate, mjd, fiberid, dirpath='', extname='.fits'):
      """ generate file path of a SDSS spectrum
  
      Parameters
      ----------
      plate: string
          plate
  
      mjd: 5-digit integer
          mjd (use lmjd rather than mjd for DR3 and after!)
  
      fiberid: 4-digit integer
          fiberid
  
      dirpath: string
          the root directory for storing spectra.
  
      extname: string
          in case that users want to synthesize other data format
  
      Rreturns
      --------
      filepath: string
          the path of root dir of directory (prefix).
          if un-specified, return file name.
  
      """
  
      if dirpath == '' or dirpath is None:
          # return file name
          if np.isscalar(mjd):
              # if only input one item
              return 'spec-%04d-%05d-%04d%s' % (plate, mjd, fiberid, extname)
          else:
              # if input a list of items
              return np.array(['spec-%04d-%05d-%04d%s' %
                               (plate[i], mjd[i], fiberid[i], extname)
                               for i in xrange(len(mjd))])
      else:
          # return file path
          if not dirpath[-1] == os.path.sep:
              dirpath += os.path.sep
  
          if np.isscalar(mjd):
              # if only input one item
              return '%s%04d%sspec-%04d-%05d-%04d%s' \
                     % (dirpath, plate, os.path.sep,
                        plate, mjd, fiberid, extname)
          else:
              # if input a list of items
              return np.array(['%s%04d%sspec-%04d-%05d-%04d%s' %
                               (dirpath, plate[i], os.path.sep, plate[i],
                                mjd[i], fiberid[i], extname)
                               for i in xrange(len(mjd))])
  
  
  def _test_sdss_filepath():
      print(sdss_filepath(2238, 52059, 001, '/'))
  
  
  if __name__ == '__main__':
      print('')
      print('@Cham: start to test the module ...')
      print('')
      print('@Cham: testing ''lamost_filepath'' ...')
      _test_lamost_filepath()
      _test_sdss_filepath()
      print('@Cham: OK')
  