def __call__(self,
                 probesets,
                 treatments,
                 controls):

        assert len(probesets) == len(treatments[0])
        assert len(probesets) == len(controls[0])

        nskipped = 0
        results = []

        for probeset, treatment, control in zip(
                probesets, zip(*treatments), zip(*controls)):

            nval1, nval2 = len(treatment), len(control)
            mean1, mean2 = numpy.mean(treatment), numpy.mean(control)
            stddev1, stddev2 = numpy.std(treatment), numpy.std(control)

            try:
                s = Stats.doWelchsTTest(nval1, mean1, stddev1,
                                        nval2, mean2, stddev2,
                                        alpha=0.05)
            except __HOLE__:
                E.warn(
                    "expressionDifferences: standard deviations are 0 for "
                    "probeset %s - skipped" % probeset)
                nskipped += 1
                continue

            s.mProbeset = probeset
            results.append(s)

        qvalues = Stats.doFDR([x.mPValue for x in results]).mQValues

        for s, qvalue in zip(results, qvalues):
            s.mQValue = qvalue

        return results, nskipped
dataset/ETHPy150Open CGATOxford/cgat/CGAT/Expression.py/WelchsTTest.__call__