Changeset 1944:91a972497fcc in orange-bioinformatics for orangecontrib/bio/widgets/OWGEODatasets.py


Ignore:
Timestamp:
01/06/14 14:55:25 (3 months ago)
Author:
markotoplak
Branch:
default
Message:

GEO datasets: when outputting samples as rows and there a multiple types, all types become meta attributes and the only selected type becomes the class.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • orangecontrib/bio/widgets/OWGEODatasets.py

    r1888 r1944  
    447447        samples = [] 
    448448        unused_types = [] 
     449        used_types = [] 
    449450        for stype in childiter(self.annotationsTree.invisibleRootItem()):  
    450451            selected_values = [] 
     
    457458            if selected_values: 
    458459                samples.extend(selected_values) 
     460                used_types.append(str(stype.text(0))) 
    459461            else: 
    460462                # If no sample of sample type is selected we don't filter on it. 
    461463                samples.extend(all_values) 
    462464                unused_types.append(str(stype.text(0))) 
    463                  
    464         return samples 
     465         
     466        return samples, used_types 
    465467     
    466468    def commitIf(self): 
     
    482484                return data 
    483485             
     486            _, groups = self.selectedSamples() 
     487            if len(groups) == 1 and self.outputRows: 
     488                sample_type = groups[0] 
     489 
    484490            self.setEnabled(False) 
    485491            call = self.asyncCall(getdata, (self.currentGds["dataset_id"],), dict(report_genes=self.mergeSpots, 
    486492                                           transpose=self.outputRows, 
    487                                            sample_type=sample_type if sample_type!="Include all" else None), 
     493                                           sample_type=sample_type), 
    488494                                  onResult=self.onData, 
    489495                                  onFinished=lambda: self.setEnabled(True), 
     
    507513        self.progressBarSet(50) 
    508514         
    509         samples = self.selectedSamples() 
     515        samples,_ = self.selectedSamples() 
    510516         
    511517        self.warning(0) 
    512518        message = None 
    513519        if self.outputRows: 
    514             samples = set(s[1] for s in samples) # dont have info on sample types in the data class variable 
    515             select = [1 if samples.issuperset(str(ex.getclass()).split("|")) else 0 for ex in data] 
     520            def samplesinst(ex): 
     521                out = [] 
     522                for i,a in data.domain.get_metas().items(): 
     523                    out.append((a.name, ex[i].value)) 
     524                if data.domain.class_var.name != 'class': 
     525                    out.append((data.domain.class_var.name, ex[-1].value)) 
     526                return out 
     527            samples = set(samples) 
     528 
     529            select = [1 if samples.issuperset(samplesinst(ex)) else 0 for ex in data] 
    516530            data = data.select(select) 
    517             # TODO: add sample types as separate features   
    518             data.domain.classVar.values = ["|".join([cl for cl in val.split("|") if cl in samples]) for val in data.domain.classVar.values] 
    519531            if len(data) == 0: 
    520532                message = "No samples with selected sample annotations." 
Note: See TracChangeset for help on using the changeset viewer.