Changeset 1620:5901c58464eb in orange-bioinformatics


Ignore:
Timestamp:
05/17/12 14:13:56 (2 years ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Message:

Sort ids before querying PIPAx api (oherwise the columns can get mismatched between ids).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • obiDicty.py

    r1619 r1620  
    711711def bufferkeypipax(command, data): 
    712712    """ Do not save password to the buffer! """ 
    713     command = command + " v6" #add version 
     713    command = command + " v7" #add version 
    714714    if data != None: 
    715715        data = data.copy() 
     
    719719    else: 
    720720        return command 
     721 
    721722 
    722723class PIPAx(PIPA): 
     
    828829                callback() 
    829830 
     831        def argsort(a): 
     832            sort = sorted([(map(int, item), i) for i, item in enumerate(a)]) 
     833            return [i for _, i in sort] 
     834 
    830835        cbc = CallBack(len(ids), optcb, callbacks=10) 
    831836 
    832837        if result_type is not None: 
     838            ids_sort = argsort(ids) 
    833839            res_list = self.results_list(result_type, reload=reload, 
    834840                                         bufver=bufver) 
     
    861867            res_list = self.results_list(result_type, reload=reload, 
    862868                                         bufver=bufver) 
     869            sort_keys = [(int(res_list[id]["data_id"]), 
     870                          int(res_list[id]["mappings_id"]))\ 
     871                         for id in ids] 
     872            ids_sort = argsort(sort_keys) 
     873 
     874        # Sort the ids for use by pipax api 
     875        ids_sorted = [ids[i] for i in ids_sort] 
    863876 
    864877        read = {} 
     
    871884                                                bufver=bufver) 
    872885 
    873         cbc = CallBack(len(ids) + 3, optcb, 
     886        cbc = CallBack(len(ids_sorted) + 3, optcb, 
    874887                       callbacks=99 - 20) 
    875         et = self.exampleTables(ids, spotmap={}, callback=cbc, annots=read, 
     888        et = self.exampleTables(ids_sorted, spotmap={}, callback=cbc, 
     889                            annots=read, 
    876890                            exclude_constant_labels=exclude_constant_labels, 
    877891                            chipfn=download_func, 
     
    879893        cbc.end() 
    880894 
     895        # Restore input ids order. 
     896        domain = orange.Domain([et.domain[id] for id in ids], None) 
     897        domain.addmetas(et.domain.getmetas()) 
     898        et = orange.ExampleTable(domain, et) 
     899 
    881900        cbc = CallBack(2, optcb, callbacks=10) 
    882901 
     
    896915 
    897916    def download(self, result_ids, reload=False, bufver="0"): 
     917        """result_ids must be sorted (by `(data_id, mappings_id)`) 
     918        """ 
    898919        data = {"action": "download", "ids": "$MULTI$"} 
    899920        data = self.add_auth(data) 
Note: See TracChangeset for help on using the changeset viewer.