Ejemplo n.º 1
0
 def TCShotlist(self, Taglist=None, Shotlist=None, Detail=False):
     Shotlist = list(Shotlist)
     input = Shotlist.copy()
     reader = Reader(root_path=self.hdf5path)
     n = 1
     IncompleteNumber = []
     for i in Shotlist:
         print("第{}个".format(n))
         n += 1
         ShotTag = reader.tags(int(i))
         for j in Taglist:
             if j in ShotTag:
                 continue
             else:
                 IncompleteNumber.append(i)
                 break
     for i in IncompleteNumber:
         for j in Shotlist:
             if int(i) == int(j):
                 Shotlist.remove(j)
     outlist = Shotlist
     if Detail:
         print("Number of input shots    : {}".format(len(input)))
         print("Number of excluded shots : {}".format(len(IncompleteNumber)))
         print("Number of output shots   : {}".format(len(outlist)))
     return outlist
Ejemplo n.º 2
0
 def TagNum(self, Taglist=None, Shotlist=None):
     Taglist  = list(Taglist)
     Shotlist = list(Shotlist)
     for i in range(len(Taglist)):
         Taglist[i] = Taglist[i][1:len(Taglist[i])]
     result = {}
     for i in Taglist:
         result.update({i: 0})
     reader = Reader(root_path=self.hdf5path)
     n = 1
     for i in Shotlist:
         print("第{}个".format(n))
         n += 1
         ShotTag = reader.tags(int(i))
         for k in range(len(ShotTag)):
             ShotTag[k] = ShotTag[k][1:len(ShotTag[k])]
         for j in Taglist:
             for tag in ShotTag:
                 if j == tag :
                     result[j] = result[j]+1
     pprint.pprint(result)
Ejemplo n.º 3
0
class JTEXTDataExporter:
    def __init__(self, root=None):
        """connect to mdsplus server and init data importer"""
        if root:
            self.exporter = Exporter(root)
            self.reader = Reader(root)
        else:
            self.exporter = Exporter()
            self.reader = Reader()
        # log
        log_dir = os.path.abspath('') + os.sep + 'log'
        if not os.path.exists(log_dir):
            os.makedirs(log_dir)
        self.logger = logging.getLogger(__name__)
        self.logger.setLevel(level=logging.INFO)
        handler = logging.FileHandler(
            log_dir + os.sep + 'JTEXTDataExporter_log_{}.txt'.format(
                time.strftime("%Y_%m_%d %H:%M:%S", time.localtime(
                    time.time()))))
        handler.setLevel(logging.INFO)
        formatter = logging.Formatter(
            '%(asctime)s - %(name)s - %(levelname)s - %(message)s')
        handler.setFormatter(formatter)
        console = logging.StreamHandler()
        console.setLevel(logging.INFO)
        self.logger.addHandler(handler)
        self.logger.addHandler(console)

    def download(self, shots=None, tags=None, sample_rate=None):
        """Download J-TEXT data
        @:param shots: shot list
        @:param tags: tag list
        @:param sr: sample rate for resample(kHz), if sr<sr0: do resample, else: do nothing
        :return: null
        """
        if shots is None or len(shots) == 0:
            raise ValueError('Param Error, ' 'shot list can\'t be Empty!')
        if tags is None or len(tags) == 0:
            raise ValueError('Param Error, ' 'tag list can\'t be Empty!')
        self.logger.info('Start download data')
        for shot in shots:
            try:
                c = connection.Connection('211.67.27.245')
                c.openTree('jtext', shot=shot)
                for tag in tags:
                    try:
                        if tag in self.reader.tags(shot):
                            self.logger.info(
                                'shot:{}, tag:{}, already exits.'.format(
                                    shot, tag))
                            continue
                        data = np.array(c.get(tag))
                        time = np.array(
                            c.get(r'DIM_OF(BUILD_PATH({}))'.format(tag)))
                        if data.shape[0] == 0 or time.shape[0] == 0:
                            self.logger.info(
                                'shot:{}, tag:{}, Shape of signal or dim_of(signal) is 0'
                            )
                        elif abs(data.shape[0] - time.shape[0]) > 10:
                            self.logger.info(
                                'shot:{}, tag:{}, Shape of signal and dim_of(signal) not equal'
                            )
                        else:
                            if 0 < data.shape[0] - time.shape[0] < 10:
                                data = data[:time.shape[0]]
                            if 0 < time.shape[0] - data.shape[0] < 10:
                                time = time[:data.shape[0]]
                            sr0 = int(len(data) /
                                      (time[-1] - time[0]) / 10) * 10

                            if sample_rate and sample_rate < sr0 / 100:
                                num = sample_rate * (int(
                                    round(time[-1] * 1000 - time[0] * 1000)))
                                data = signal.resample(data, num)
                                duration = (time[-1] - time[0]) / num
                                time = []
                                for i in range(num):
                                    time.append(i * duration)
                            result = self.exporter.save(shot, tag, data, time)
                            if result == 0:
                                self.logger.info(
                                    'shot:{}, tag:{}, Finish.'.format(
                                        shot, tag))
                            elif result == -1:
                                self.logger.info(
                                    'shot:{}, tag:{}, already exits.'.format(
                                        shot, tag))
                    except Exception as e:
                        self.logger.info(
                            'shot:{}, tag:{}, error occurs:{}.'.format(
                                shot, tag, e))
                c.closeTree('jtext', shot=shot)
                c.disconnect()
            except Exception as err:
                self.logger.info('shot {} is Empty, reason: {}\n{}'.format(
                    shot, err, traceback.format_exc()))
                if 'SS-W-SUCCESS' in '{}'.format(err):
                    self.logger.info('stop at shot {}\n{}'.format(
                        shot, traceback.format_exc()))
                    exit(-1)