예제 #1
0
 def load_trajectory_file(self, filename):
     array_out = []
     with open(str(filename)) as f:
         for line in f:
             array_out.append(int(line))
     array_out = np.array(array_out)
     self.energy_grid_loaded = -xray.encoder2energy(array_out, 0)
예제 #2
0
 def load(self,
          encoder_trace,
          i0trace,
          iflutrace,
          irtrace='',
          trigtrace='',
          i0offset=0,
          ifluoffset=0,
          iroffset=0,
          angleoffset=0):
     self.encoder_file = encoder_trace
     self.i0_file = i0trace
     self.it_file = iflutrace
     self.ir_file = irtrace
     self.trig_file = trigtrace
     self.encoder = self.loadENCtrace(encoder_trace)
     self.energy = np.copy(self.encoder)
     #self.energy[:, 1] = xray.encoder2energy(self.encoder[:, 1], 0.041)
     self.energy[:, 1] = xray.encoder2energy(self.encoder[:, 1],
                                             -angleoffset)
     self.i0 = self.loadADCtrace(i0trace)
     self.i0[:, 1] = self.i0[:, 1] - i0offset
     self.ir = self.loadADCtrace(irtrace)
     self.ir[:, 1] = self.ir[:, 1] - iroffset
     self.iflu = self.loadADCtrace(iflutrace)
     self.iflu[:, 1] = self.iflu[:, 1] - ifluoffset
     self.trigger = self.loadTRIGtrace(trigtrace)
     self.it = np.copy(self.iflu)
예제 #3
0
 def load(self,
          encoder_trace,
          i0trace,
          ittrace,
          irtrace='',
          i0offset=0,
          itoffset=0,
          iroffset=0,
          angleoffset=0):
     self.encoder_file = encoder_trace
     self.i0_file = i0trace
     self.it_file = ittrace
     self.ir_file = irtrace
     self.encoder = self.loadENCtrace(encoder_trace)
     self.energy = self.encoder
     #self.energy[:, 1] = xray.encoder2energy(self.encoder[:, 1], 0.041)
     self.energy[:, 1] = xray.encoder2energy(
         self.encoder[:, 1], -angleoffset
     )  #-12400 / (2 * 3.1356 * np.sin((np.pi / 180) * ((self.encoder[:, 1]/360000) + 0)))
     self.i0 = self.loadADCtrace(i0trace)
     self.it = self.loadADCtrace(ittrace)
     self.ir = self.loadADCtrace(irtrace)
     self.i0[:, 1] = self.i0[:, 1] - i0offset
     self.it[:, 1] = self.it[:, 1] - itoffset
     self.ir[:, 1] = self.ir[:, 1] - iroffset
예제 #4
0
    def load(self, uid):
        #if self.db is None:
        #    raise Exception('The databroker was not passed as argument to the parser. This feature is disabled.')
        self.arrays = {}
        self.interp_arrays = {}
        self.uid = uid
        has_encoder = False
        for i in self.db[uid]['descriptors']:
            if 'filename' in i['data_keys'][i['name']]:
                name = i['name']
                if name == 'pb9_enc1' or name == 'hhm_theta':
                    has_encoder = name
                if 'devname' in i['data_keys'][i['name']]:
                    name = i['data_keys'][i['name']]['devname']
                    if name == 'hhm_theta':
                        has_encoder = name

                if i['data_keys'][i['name']]['source'] == 'pizzabox-di-file':
                    data = self.loadTRIGtrace(i['data_keys'][i['name']]['filename'], '')
                if i['data_keys'][i['name']]['source'] == 'pizzabox-adc-file':
                    data = self.loadADCtrace(i['data_keys'][i['name']]['filename'], '')
                    if i['name'] + ' offset' in self.db[uid]['start'] and type(data) == pd.core.frame.DataFrame:
                        data.iloc[:, 1] = data.iloc[:, 1] - self.db[uid]['start'][i['name'] + ' offset']
                if i['data_keys'][i['name']]['source'] == 'pizzabox-enc-file':
                    data = self.loadENCtrace(i['data_keys'][i['name']]['filename'], '')
                #if type(data) == np.ndarray:
                self.arrays[name] = data

        if has_encoder is not False:
            energy = self.arrays.get(has_encoder).copy()
            if 'angle_offset' in self.db[uid]['start']:
                energy.iloc[:, 1] = xray.encoder2energy(energy.iloc[:, 1], self.pulses_per_deg, -float(self.db[uid]['start']['angle_offset']))
                energy.columns = ['timestamp', 'energy']
            del self.arrays[has_encoder]
            self.arrays['energy'] = energy
예제 #5
0
 def load_trajectory_file(self, filename, offset, is_energy):
     array_out = []
     with open(str(filename)) as f:
         first = f.readline()
         if first[0] != '#':
             array_out.append(float(first))
         for line in f:
             array_out.append(float(line))
     array_out = np.array(array_out)
     if is_energy:
         self.energy_grid_loaded = array_out
     else:
         self.energy_grid_loaded = -xray.encoder2energy(
             array_out, self.hhm.pulses_per_deg, offset)
예제 #6
0
    def loadDB(self, uid):
        # if self.db is None:
        #    raise Exception('The databroker was not passed as argument to the parser. This feature is disabled.')
        t1 = time.time()
        self.arrays = {}
        self.interp_arrays = {}
        self.uid = uid
        has_encoder = False
        for i in self.db[uid]['descriptors']:
            stream_name = i['name']
            name = i['name']
            if name == self.mono_name:
                has_encoder = name
            if 'devname' in i['data_keys'][i['name']]:
                name = i['data_keys'][i['name']]['devname']
                if name == self.mono_name:
                    has_encoder = name

            if i['data_keys'][i['name']]['source'] == 'pizzabox-di-file':
                print("loading data {}".format(stream_name))
                data = self.loadTRIGtraceDB(uid, stream_name)
                print("done")
            if i['data_keys'][i['name']]['source'] == 'pizzabox-adc-file':
                print("loading data {}".format(stream_name))
                data = self.loadADCtraceDB(uid, stream_name)
                print("done")
                if i['name'] + ' offset' in self.db[uid]['start'] and type(
                        data) == pd.core.frame.DataFrame:
                    print("subtracting offset : {}".format(i['name']))
                    data.iloc[:, 1] = data.iloc[:, 1] - self.db[uid]['start'][
                        i['name'] + ' offset']
            if i['data_keys'][i['name']]['source'] == 'pizzabox-enc-file':
                print("loading data {}".format(stream_name))
                data = self.loadENCtraceDB(uid, stream_name)
                print("done")
            # if type(data) == np.ndarray:
            print("saving to {}".format(name))
            self.arrays[name] = data

        if has_encoder is not False:
            energy = self.arrays.get(has_encoder).copy()
            if 'angle_offset' in self.db[uid]['start']:
                energy.iloc[:, 1] = xray.encoder2energy(
                    energy.iloc[:, 1], self.pulses_per_deg,
                    -float(self.db[uid]['start']['angle_offset']))
                energy.columns = ['timestamp', 'energy']
            del self.arrays[has_encoder]
            self.arrays['energy'] = energy
        t2 = time.time()
        print(f"Data read took {t2-t1} sec")
예제 #7
0
    def load(self, uid):
        if self.db is None:
            raise Exception(
                'The databroker was not passed as argument to the parser')
        self.arrays = {}
        self.interp_arrays = {}
        self.uid = uid
        has_encoder = False
        for i in self.db[uid]['descriptors']:
            if 'filename' in i['data_keys'][i['name']]:
                name = i['name']
                if name == 'pb9_enc1' or name == 'hhm_theta':
                    has_encoder = name
                if 'devname' in i['data_keys'][i['name']]:
                    name = i['data_keys'][i['name']]['devname']
                    if name == 'hhm_theta':
                        has_encoder = name

                if i['data_keys'][i['name']]['source'] == 'pizzabox-di-file':
                    data = self.loadTRIGtrace(
                        i['data_keys'][i['name']]['filename'], '')
                if i['data_keys'][i['name']]['source'] == 'pizzabox-adc-file':
                    data = self.loadADCtrace(
                        i['data_keys'][i['name']]['filename'], '')
                    if i['name'] + ' offset' in self.db[uid]['start']:
                        data[:,
                             1] = data[:,
                                       1] - self.db[uid]['start'][i['name'] +
                                                                  ' offset']
                if i['data_keys'][i['name']]['source'] == 'pizzabox-enc-file':
                    data = self.loadENCtrace(
                        i['data_keys'][i['name']]['filename'], '')
                self.arrays[name] = data

        if has_encoder is not False:
            energy = np.copy(self.arrays.get(has_encoder))
            if 'angle_offset' in self.db[uid]['start']:
                energy[:, 1] = xray.encoder2energy(
                    energy[:, 1],
                    -float(self.db[uid]['start']['angle_offset']))
            del self.arrays[has_encoder]
            self.arrays['energy'] = energy
예제 #8
0
    def load(self,
             orig_file_name,
             new_file_path,
             is_energy,
             offset,
             new_file_name='hhm.txt'):
        ip = self.hhm.ip
        orig_file_path = self.hhm.traj_filepath

        print('[Load Trajectory] Starting...')
        traj_fn = orig_file_name

        # Check if new_file_path is between the possible values
        if int(new_file_path) > 9 or int(new_file_path) < 1:
            print(
                "[Load Trajectory] Path '{}' not possible. Please use a value in the range 1 <= new_file_path <= 9."
                .format(new_file_path))
            return False

        # Get number of lines in file
        file_size = self.file_len(orig_file_path + orig_file_name)
        print(
            '[Load Trajectory] Number of lines in file: {}'.format(file_size))

        # Get min and max of trajectory in eV
        if orig_file_path[-1] != '/':
            fp += '/'

        traj = pd.read_table('{}{}'.format(orig_file_path, orig_file_name),
                             header=None,
                             comment='#')
        name = orig_file_name
        header = self.read_header('{}{}'.format(orig_file_path,
                                                orig_file_name))
        if is_energy:
            min_energy = int(np.round(traj).min())
            max_energy = int(np.round(traj).max())
            enc = np.int64(
                np.round(
                    xray.energy2encoder(-traj, self.hhm.pulses_per_deg,
                                        -offset)))
            orig_file_name = '.energy_traj_aux.txt'
            np.savetxt('{}{}'.format(orig_file_path, orig_file_name),
                       enc,
                       fmt='%d',
                       header=header,
                       comments='')
        else:
            min_energy = int(
                xray.encoder2energy((-traj, self.hhm.pulses_per_deg).min()))
            max_energy = int(
                xray.encoder2energy((-traj, self.hhm.pulses_per_deg).max()))

        print('[Load Trajectory] Min energy: {}'.format(min_energy))
        print('[Load Trajectory] Max energy: {}'.format(max_energy))

        # Create ftp connection with default credential
        ftp = FTP(ip)
        ftp.login()
        s = pxssh.pxssh()
        ssh_login = s.login(ip, 'root', 'deltatau')

        if ssh_login:
            # Check if the directory exists in /usrflash/lut/. If it does not, create it.
            if str(new_file_path) != '':
                ftp.cwd('/usrflash/')
                dir_list = ftp.nlst()
                dir_exists = 0
                for dir_name in dir_list:
                    if dir_name == 'lut':
                        dir_exists = 1
                if not dir_exists:
                    print('[Load Trajectory] mkdir: /usrflash/lut')
                    ftp.mkd('/usrflash/lut')
                    s.sendline('chown ftp:root /var/ftp/usrflash/lut')
                    s.sendline('chmod a+wrx /var/ftp/usrflash/lut')

                ftp.cwd('/usrflash/lut/')
                dir_list = ftp.nlst()
                dir_exists = 0
                for dir_name in dir_list:
                    if dir_name == str(new_file_path):
                        dir_exists = 1
                if not dir_exists:
                    print('[Load Trajectory] mkdir: /usrflash/lut/{}'.format(
                        new_file_path))
                    ftp.mkd('/usrflash/lut/{}'.format(new_file_path))
                    s.sendline(
                        'chown ftp:root /var/ftp/usrflash/lut/{}'.format(
                            new_file_path))
                    s.sendline('chmod a+wrx /var/ftp/usrflash/lut/{}'.format(
                        new_file_path))

                s.sendline(
                    'chown ftp:root /var/ftp/usrflash/lut/{}/hhm.txt'.format(
                        new_file_path))
                s.sendline('chmod 777 /var/ftp/usrflash/lut/{}/hhm.txt'.format(
                    new_file_path))

            ftp_file_path = '/var/ftp/usrflash/lut/{}/{}'.format(
                new_file_path, new_file_name)

            # Open file and transfer to the power pmac
            f = open(orig_file_path + str(orig_file_name), 'rb')
            if (f.readable()):
                line = f.readline().decode('utf-8')
                if line[0] == '#':
                    element = line[line.find('element:') +
                                   9:line.find(',')].lstrip()
                    edge_value = line[line.find('edge:') + 6:line.
                                      find(',', line.find('edge:'))].lstrip()
                    e0_value = line[line.find('E0:') + 4:].lstrip()
                    curr_hhm_traj = getattr(self.hhm,
                                            'traj{}'.format(new_file_path))
                    curr_hhm_traj.filename.put(traj_fn)
                    curr_hhm_traj.elem.put(element)
                    curr_hhm_traj.edge.put(edge_value)
                    curr_hhm_traj.e0.put(e0_value)
                else:
                    curr_hhm_traj = getattr(self.hhm,
                                            'traj{}'.format(new_file_path))
                    curr_hhm_traj.filename.put(traj_fn)
                    curr_hhm_traj.elem.put('')
                    curr_hhm_traj.edge.put('')
                    curr_hhm_traj.e0.put('')
                    f.close()
                    f = open(orig_file_path + str(orig_file_name), 'rb')
                result = ftp.storbinary(
                    'STOR ' + '/usrflash/lut/' + str(new_file_path) + '/' +
                    new_file_name, f)
                if (result == '226 File receive OK.'):
                    print('[Load Trajectory] File sent OK')
                    s.sendline(
                        'chown ftp:root /var/ftp/usrflash/lut/{}/{}'.format(
                            new_file_path, new_file_name))
                    s.sendline(
                        'chmod a+wrx /var/ftp/usrflash/lut/{}/{}'.format(
                            new_file_path, new_file_name))
                    s.sendline(
                        'echo "{}\n{}\n{}\n{}" > /var/ftp/usrflash/lut/{}/hhm-size.txt'
                        .format(file_size, name, min_energy, max_energy,
                                new_file_path))
                    ttime.sleep(0.01)
                    ftp.close()
                    print('[Load Trajectory] Permissions OK')

                f.close()

            s.logout()
            s.pid = None
            print('[Load Trajectory] Completed!')
        else:
            print(
                '[Load Trajectory] Fail! Not able to ssh into the controller...'
            )
예제 #9
0
 def e2energy(self, offset):
     self.energy_grid = -xray.encoder2energy(
         self.encoder_grid, self.hhm.pulses_per_deg, offset)
예제 #10
0
    def load(self,
             orig_file_name,
             new_file_path,
             new_file_name='hhm.txt',
             orig_file_path='/GPFS/xf08id/trajectory/',
             ip='10.8.2.86'):

        print('[Load Trajectory] Starting...')

        # Check if new_file_path is between the possible values
        if int(new_file_path) > 9 or int(new_file_path) < 1:
            print(
                "[Load Trajectory] Path '{}' not possible. Please use a value in the range 1 <= new_file_path <= 9."
                .format(new_file_path))
            return False

        # Get number of lines in file
        file_size = self.file_len(orig_file_path + orig_file_name)
        print(
            '[Load Trajectory] Number of lines in file: {}'.format(file_size))

        # Get min and max of trajectory in eV
        if orig_file_path[-1] != '/':
            fp += '/'
        traj = pd.read_table('{}{}'.format(orig_file_path, orig_file_name))
        min_energy = int(xray.encoder2energy((-traj).min()))
        max_energy = int(xray.encoder2energy((-traj).max()))
        print('[Load Trajectory] Min energy: {}'.format(min_energy))
        print('[Load Trajectory] Max energy: {}'.format(max_energy))

        # Create ftp connection with default credential
        ftp = FTP(ip)
        ftp.login()
        s = pxssh.pxssh()
        ssh_login = s.login(ip, 'root', 'deltatau')

        if ssh_login:
            # Check if the directory exists in /usrflash/lut/. If it does not, create it.
            if str(new_file_path) != '':
                ftp.cwd('/usrflash/')
                dir_list = ftp.nlst()
                dir_exists = 0
                for dir_name in dir_list:
                    if dir_name == 'lut':
                        dir_exists = 1
                if not dir_exists:
                    print('[Load Trajectory] mkdir: /usrflash/lut')
                    ftp.mkd('/usrflash/lut')
                    s.sendline('chown ftp:root /var/ftp/usrflash/lut')
                    s.sendline('chmod a+wrx /var/ftp/usrflash/lut')

                ftp.cwd('/usrflash/lut/')
                dir_list = ftp.nlst()
                dir_exists = 0
                for dir_name in dir_list:
                    if dir_name == str(new_file_path):
                        dir_exists = 1
                if not dir_exists:
                    print('[Load Trajectory] mkdir: /usrflash/lut/{}'.format(
                        new_file_path))
                    ftp.mkd('/usrflash/lut/{}'.format(new_file_path))
                    s.sendline(
                        'chown ftp:root /var/ftp/usrflash/lut/{}'.format(
                            new_file_path))
                    s.sendline('chmod a+wrx /var/ftp/usrflash/lut/{}'.format(
                        new_file_path))

            ftp_file_path = '/var/ftp/usrflash/lut/{}/{}'.format(
                new_file_path, new_file_name)

            # Open file and transfer to the power pmac
            f = open(orig_file_path + str(orig_file_name), 'rb')
            if (f.readable()):
                result = ftp.storbinary(
                    'STOR ' + '/usrflash/lut/' + str(new_file_path) + '/' +
                    new_file_name, f)
                if (result == '226 File receive OK.'):
                    print('[Load Trajectory] File sent OK')
                    s.sendline(
                        'chown ftp:root /var/ftp/usrflash/lut/{}/{}'.format(
                            new_file_path, new_file_name))
                    s.sendline(
                        'chmod a+wrx /var/ftp/usrflash/lut/{}/{}'.format(
                            new_file_path, new_file_name))
                    s.sendline(
                        'echo "{}\n{}\n{}\n{}" > /var/ftp/usrflash/lut/{}/hhm-size.txt'
                        .format(file_size, orig_file_name, min_energy,
                                max_energy, new_file_path))
                    ttime.sleep(0.01)
                    ftp.close()
                    print('[Load Trajectory] Permissions OK')

            s.logout()
            s.pid = None
            print('[Load Trajectory] Completed!')
        else:
            print(
                '[Load Trajectory] Fail! Not able to ssh into the controller...'
            )