Index: /trunk/FACT++/src/fad.cc
===================================================================
--- /trunk/FACT++/src/fad.cc	(revision 11532)
+++ /trunk/FACT++/src/fad.cc	(revision 11533)
@@ -100,5 +100,7 @@
     void HandleSentData(const boost::system::error_code& error, size_t bytes_transferred)
     {
-        cout << "Data sent: (transmitted=" << bytes_transferred << ") rc=" << error.message() << " (" << error << ")" << endl;
+#ifdef DEBUG_TX
+        cout << "Data sent[" << fBoardId << "]: (transmitted=" << bytes_transferred << ") rc=" << error.message() << " (" << error << ")" << endl;
+#endif
         fOutQueue.pop_front();
     }
@@ -131,36 +133,59 @@
         fHeader.fFreqRefClock = 997+rand()/(RAND_MAX/7);
 
+        /* Trigger ID
+
+        * Byte[4]: Bit 0:    ext1
+        * Byte[4]: Bit 1:    ext2
+        * Byte[4]: Bit 2-7:  n/40
+        * Byte[5]: Bit 0: LP_1
+        * Byte[5]: Bit 1: LP_2
+        * Byte[5]: Bit 2: Pedestal
+        * Byte[5]: Bit 3:
+        * Byte[5]: Bit 4:
+        * Byte[5]: Bit 5:
+        * Byte[5]: Bit 6:
+        * Byte[5]: Bit 7: TIM source
+
+        */
+
         for (int i=0; i<FAD::kNumTemp; i++)
             fHeader.fTempDrs[i] = (42.+fBoardId/40.+float(rand())/RAND_MAX*5)*16;
 
+        // Header, channel header, end delimiter
+        size_t sz = sizeof(fHeader) + kNumChannels*sizeof(FAD::ChannelHeader) + 2;
+        // Data
+        for (int i=0; i<kNumChannels; i++)
+            sz += fChHeader[i].fRegionOfInterest*2;
+
         vector<uint16_t> evtbuf;
+        evtbuf.reserve(sz);
 
         for (int i=0; i<kNumChannels; i++)
         {
-            fChHeader[i].fStartCell = i*10;
-
-            const vector<uint16_t> buf = fChHeader[i].HtoN();
-
-            evtbuf.insert(evtbuf.end(), buf.begin(), buf.end());
-            evtbuf.insert(evtbuf.end(), fChHeader[i].fRegionOfInterest, 0x42+i+fHeader.fDac[1]/32);
+            fChHeader[i].fStartCell = int64_t(1023)*rand()/RAND_MAX;
+
+             vector<int16_t> data(fChHeader[i].fRegionOfInterest, -1024+0x42+i/9+fHeader.fDac[1]/32);
+
+            for (int ii=0; ii<fChHeader[i].fRegionOfInterest; ii++)
+            {
+                const int rel =  ii;
+                const int abs = (ii+fChHeader[i].fStartCell)%fChHeader[i].fRegionOfInterest;
+
+                data[rel] +=  6.*rand()/RAND_MAX +  5*exp(-rel/10); // sigma=10
+                data[rel] += 15*sin(2*3.1415*abs/512); // sigma=10
+            }
 
             if (triggerid>0)
             {
-                int    p    = 5.*rand()/RAND_MAX+20;
+                int    p    =   5.*rand()/RAND_MAX+ 20;
                 double rndm = 500.*rand()/RAND_MAX+500;
                 for (int ii=0; ii<fChHeader[i].fRegionOfInterest; ii++)
-                    *(evtbuf.end()-fChHeader[i].fRegionOfInterest+ii) +=
-                        rndm*exp(-0.5*(ii-p)*(ii-p)/25); // sigma=10
+                    data[ii] += rndm*exp(-0.5*(ii-p)*(ii-p)/25); // sigma=10
             }
 
-            for (int ii=0; ii<fChHeader[i].fRegionOfInterest; ii++)
-            {
-                *(evtbuf.end()-fChHeader[i].fRegionOfInterest+ii) +=
-                    6.*rand()/RAND_MAX +  5*exp(-ii/10); // sigma=10
-
-                *(evtbuf.end()-fChHeader[i].fRegionOfInterest+(ii+fChHeader[i].fStartCell)%fChHeader[i].fRegionOfInterest) +=
-                    15*sin(2*3.1415*ii/512); // sigma=10
-            }
-
+            const vector<uint16_t> buf = fChHeader[i].HtoN();
+
+            evtbuf.insert(evtbuf.end(), buf.begin(), buf.end());
+            evtbuf.insert(evtbuf.end(), data.begin(), data.end());
 
             fHeader.fPackageLength += sizeof(ChannelHeader)/2;
