def testTiming(self):
        """
        For binning into nBins=20 bins, for nTs=100,000 time sample values,
        repeat c_binner.binner and then tsBinner.tsBinner nTrials=1000 times.
        Then run NPBinner.binner

        Report the elapsed time (in milliseconds) for the two ways.

        Typical speeds are tsbinner=0.17, cbinner=0.53, and NPBinner=1.94

        """
        nBins = 20
        nTs = 100000
        nTrials = 1000
        ts = np.zeros(nTs, dtype=np.uint64)
        ts += np.random.random_integers(0,1,nTs)

        bins = np.zeros(nBins, dtype=np.int)
        t0 = time.time()
        for i in range(nTrials):
            tsBinner.tsBinner(ts,bins)
        t1 = time.time()
        dtTsBinner = t1-t0
        
        bins = np.zeros(nBins, dtype=np.int)
        t0 = time.time()
        for i in range(nTrials):
            c_binner.binner(ts,bins)
        t1 = time.time()
        dtCBinner = t1-t0
        print "tsBinner=%.3f   cBinner=%.3f"%(dtTsBinner, dtCBinner)

        bins = np.zeros(nBins, dtype=np.int)
        ts32 = ts.astype(np.uint32)
        t0 = time.time()
        for i in range(nTrials):
            #print "i=",i,"/",nTrials
            contents = NPBinner.NPBinner.binner(ts32,nBins)
        t1 = time.time()
        dtNPBinner = t1-t0
        print "NPBinner=%.3f"%(dtNPBinner)

        t0 = time.time()
        for i in range(nTrials):
            contents = np.bincount(ts32,minlength=nBins)
        t1 = time.time()
        dtBincount = t1-t0
        print "bincount=%.3f"%(dtBincount)


        t0 = time.time()
        for i in range(nTrials):
            tsBinner.tsBinner32(ts32,bins)
        t1 = time.time()
        dtTsBinner32 = t1-t0
        print "tsBinner32=%.3f"%(dtTsBinner32)
 def testTsBinner32(self):
     """
     confirm that tsBinner.tsBinner32 gets the correct answer 
     for one data set
     """
     ts = np.array([1,3,5,6], dtype=np.uint32)
     bins = np.zeros(10, dtype=np.int)
     tsBinner.tsBinner32(ts,bins)
     # print "bins=",bins
     self.assertTrue((bins == self.answer).all())
    def getTimeHgAndFrameSum(self, beginTime, endTime):
        integrationTime = endTime - beginTime
        nBins = int(np.round(self.file.ticksPerSec*integrationTime+1))
        timeHgValues = np.zeros(nBins, dtype=np.int64)
        frameSum = np.zeros((self.file.nRow,self.file.nCol))
        self.logger.info("get all time stamps for integrationTime=%f"%integrationTime)
        for iRow in range(self.file.nRow):
            #print "Cosmic.findCosmics:  iRow=",iRow
            for iCol in range(self.file.nCol):
                # getTimedPacketList is slow.  Use getPackets instead.
                #gtpl = self.file.getTimedPacketList(iRow,iCol,beginTime, 
                #                                    integrationTime)
                gtpl = self.file.getPackets(iRow,iCol,
                                            beginTime,integrationTime)
                timestamps = gtpl['timestamps']
                if timestamps.size > 0:
                    timestamps = \
                        (timestamps - beginTime)*self.file.ticksPerSec
                    # per Matt S. suggestion 2013-07-09
                    ts32 = np.round(timestamps).astype(np.uint32)
                    tsBinner.tsBinner32(ts32, timeHgValues)
                    frameSum[iRow,iCol] += ts32.size

        return timeHgValues,frameSum