Evaluate the following input cells, then scroll down to the bottom for examples on how to use them.

The functions

The function FromHexString[ ] converts a hexadecimal string (e.g. "a3b56f") to a decimal number (10728815).  You can see we list each character individually, then convert the individual characters to decimal, then mash it back together again.

ClearAll[FromHexString];
FromHexString[str_String] := 
FromDigits[
        ToExpression[
          Characters[
              str] /. {"A" -> 10, "B" -> 
                11, "C" -> 12, "D" -> 13, "E" -> 
                14, "F" -> 15}], 16]
SetAttributes[FromHexString, Listable];

These add-ons are required for the data-plotting functions.

<< Statistics`DataManipulation`
<< Statistics`NonlinearFit`

The function ReadMuonFile[ ] reads a data file, converting the hexadecimal values to decimal (by calling FromHexString), and returns the list-of-lists rawdata.
The last line converting all times to μsec (the first field is in multiples of 160ns, the fourth field is in multiples of 20ns).

ClearAll[ReadMuonFile];
ReadMuonFile[datafile_String] := 
      Module[{rawread}, 
rawread = 
          FromHexString[
            ReadList[datafile, Word, 
              RecordLists -> 
                True]]; 
(DiagonalMatrix[{0.160, 1, 1, 
                    0.020}] . # &) /@ 
          rawread
]

PlotDecayTime calls ReadMuonData and then applies our third cut (all doubles must occur in lower scintillator paddle (called decaypaddle here)).
We go through the data looking for events in which the third column matches the lower paddle's channel, and store them in the list paddlecut.
Then we use the function BinCounts to histogram the delta-T data.
We fit an exponential function of the form a*e^[t/tau], and discover the best fit values for a and tau using a statistical method known as non-linear regression.
We plot the fit along with our data for a visual check of how well the fit works.

ClearAll[PlotDecayTime];
\(PlotDecayTime[datafile_String, {tmin_:  0.16, tmax_:  10, dt_:  0.2}, 
        decaypaddle_:\ 2.0] := 
      Module[{rawdata, bindata, fitform, a, b, t, tau, fitpars, dataplot, 
          fitplot, paddlecut, i}, 
rawdata = 
          ReadMuonFile[
            datafile]; 
paddlecut = {0}; 
For\ [i = 1, 
          i ≤ Length[rawdata], \(i++\), 
If[
            rawdata[\([i, 3]\)] == 
              decaypaddle, 
AppendTo[paddlecut, 
              rawdata[\([i]\)]]
]
]; 
paddlecut\  = \ 
          Drop[paddlecut, 
            1]; 
Print["No. of events above t_min: ", 
          Count\ [Column[paddlecut, 4], 
            x_?\((#1 ≥ tmin &)\) :> 
              x]]; 
bindata = 
          BinCounts[
            Column[paddlecut, 4], {tmin, tmax, 
              dt}]; 
bindata = 
          Table[{\((j - 1/2)\)\ dt, bindata[\([j]\)]}, {j, 1, 
              Length[bindata]}]; 
dataplot = 
          ListPlot[bindata, Frame -> True, \ 
            FrameLabel -> {"Decay Time", "Number of Muon Decays"}, \ PlotLabel -> "Muon Lifetime for file " <> datafile, 
            DisplayFunction -> Identity]; 
Show[
          dataplot, DisplayFunction -> $DisplayFunction, \ 
          ImageSize -> 400]; 
fitform = 
          a\ Exp[\(-t\)/tau] + b; 
fitpars = 
          BestFitParameters /. 
            NonlinearRegress[bindata, fitform, 
              t, {a, b, tau}]; 
fitplot = 
          Plot[fitform /. fitpars, {t, tmin, tmax}, 
            DisplayFunction -> 
              Identity]; 
Show[{dataplot, fitplot}, 
          DisplayFunction -> $DisplayFunction, \ 
          ImageSize -> 
            400]; 
Print["Muon lifetime from data = ", 
          tau /. fitpars, " μsec"];
]\)

How to use it

Change the parameters as required to fit your situation.

mydatafile = "C:\Documents and Settings\oneill\My \
Documents\muon_data_long.dat"

Pass the filename, the list {t_min, t_max, dt} and the channel which corresponds to the lower scintillator paddle...

PlotDecayTime[mydatafile, {0.2, 30, 0.2}, 2]

Scratch