Index: /drsdaq/DAQReadout.cc
===================================================================
--- /drsdaq/DAQReadout.cc	(revision 109)
+++ /drsdaq/DAQReadout.cc	(revision 110)
@@ -35,5 +35,5 @@
    {"take", &DAQReadout::cmd_take, false, "<d|p|t> [n] [source]", "Start run (data, pedestal or test) with n events"},
    {"events", &DAQReadout::cmd_events, false, "", "Number of events in current run"},
-   {"start", &DAQReadout::cmd_start, true, "", "Start domino wave"},
+   {"start", &DAQReadout::cmd_start, true, "", "Start DRS and DAQ without disk writing (feedback will be called)"},
    {"stop", &DAQReadout::cmd_stop, false, "", "Issue soft trigger and stop DAQ"},
    {"test", &DAQReadout::cmd_test, true, "[2e]<blt32|blt64> [n]", "Test read access of VMEbus (n blocks)"},
@@ -71,5 +71,5 @@
   CalibrationRead    = false;
   NumEvents	     = 0;
-  NumEventsRequested = 100;
+  NumEventsRequested = 0;
   NumBoards	     = 0;
   FirstBoard	     = 0;
@@ -306,4 +306,13 @@
     StartDRS();
     PrintMessage("Domino wave started\n");
+    
+      // Create DAQ thread
+    if ((pthread_create(&thread_DAQ_Silent, NULL, (void * (*)(void *)) DAQ_Silent,(void *) this)) != 0)
+      PrintMessage("pthread_create failed with DAQ_Silent thread (%s)\n",strerror(errno));
+    else {
+      daq_state = active;
+      Stop = false;
+      pthread_detach(thread_DAQ_Silent);
+    }  
   }
 }
@@ -1035,7 +1044,8 @@
 // Print message to selected target
 void DAQReadout::PrintMessage(int Target, const char *Format, ...) {
+
   va_list ArgumentPointer;
   va_start(ArgumentPointer, Format); 
-  PrintMessage(Target, Format, ArgumentPointer);
+  PrintMessage(Format, ArgumentPointer, Target);
   va_end(ArgumentPointer);
 }
@@ -1045,13 +1055,16 @@
   va_list ArgumentPointer;
   va_start(ArgumentPointer, Format);
-  if(CmdFromSocket) PrintMessage(MsgToSocket|MsgToLog, Format, ArgumentPointer);
-  else PrintMessage(MsgToConsole|MsgToLog, Format, ArgumentPointer);
+  if(CmdFromSocket) PrintMessage(Format, ArgumentPointer, MsgToSocket|MsgToLog);
+  else PrintMessage(Format, ArgumentPointer, MsgToConsole|MsgToLog);
   va_end(ArgumentPointer);
 }
 
 // Function doing the actual printing work
-void DAQReadout::PrintMessage(int Target, const char *Format, va_list ArgumentPointer) {
-
-  char Textbuffer[MAX_COM_SIZE];
+// It is important that Target is here the last argument, otherwise
+// there can be confusion with the variadic versions (this function is 
+// called instead of PrintMessage(int, const char *, ...)
+void DAQReadout::PrintMessage(const char *Format, va_list ArgumentPointer, int Target) {
+
+  static char Textbuffer[MAX_COM_SIZE];  // static: it is only allocated once
 
   memset(Textbuffer, 0, sizeof(Textbuffer));  
@@ -1068,5 +1081,7 @@
   // Print to log file
   if((Target & MsgToLog) && Logfile!=NULL) {
-    fprintf(Logfile, "%s", Textbuffer);
+    time_t Time;
+    strftime(Textbuffer+strlen(Textbuffer)+1,MAX_COM_SIZE-strlen(Textbuffer)-1, "%d/%m/%y %X", localtime(&(Time=time(NULL))));
+    fprintf(Logfile, "%s: %s", Textbuffer+strlen(Textbuffer)+1, Textbuffer);
     fflush(Logfile);
   }
@@ -1183,5 +1198,5 @@
   m->HVFB->ClearAverages();    
   gettimeofday(&StartTime, NULL);
-  m->PrintMessage("\rStarting run #%d (%s) on \"%s\" with %u event(s)\n",m->RunNumber,daq_runtype_str[m->daq_runtype],m->RHeader->Description,m->NumEventsRequested);
+  m->PrintMessage("\rStarting run #%d (%s) with %u event(s)\n",m->RunNumber,daq_runtype_str[m->daq_runtype],m->NumEventsRequested);
 
   do {
@@ -1265,2 +1280,26 @@
   m->daq_state = stopped;
 }
+
+
+/********************************************************************\
+
+  DAQ Thread - no disk writing, only hardware trigger, for feedback tests
+  
+\********************************************************************/
+
+void DAQ_Silent(DAQReadout *m) {
+
+  m->PrintMessage("\rData taking started\n");
+  do {
+    // Start DRS and wait for hardware trigger
+    m->StartDRS();
+    while (m->IsDRSBusy());
+    
+    // Read event data via VME and call feedback
+    m->ReadCalibratedDRSData();
+    m->HVFB->ProcessEvent();   
+  } while(!m->Stop);
+
+  m->PrintMessage("\rData taking stopped\n");
+  m->daq_state = stopped;
+}
Index: /drsdaq/DAQReadout.h
===================================================================
--- /drsdaq/DAQReadout.h	(revision 109)
+++ /drsdaq/DAQReadout.h	(revision 110)
@@ -33,6 +33,8 @@
 class DAQReadout {
     time_t StartTime;
-    DRS *drs;
+
     pthread_t thread_DAQ;
+    pthread_t thread_DAQ_Silent;
+
     unsigned int CmdNumber;
     FILE *Logfile;    
@@ -44,4 +46,6 @@
     EventHeader* EHeader;
     
+    DRS *drs;
+
     short (*WaveForm)[kNumberOfChips][kNumberOfChannels][kNumberOfBins];
     int (*TriggerCell)[kNumberOfChips];
@@ -127,5 +131,5 @@
     void PrintMessage(int, const char*, ...);
     void PrintMessage(const char*, ...);
-    void PrintMessage(int, const char*, va_list); 
+    void PrintMessage(const char*, va_list, int); 
     bool OpenRawFile();
     bool WriteRunHeader();
@@ -135,4 +139,5 @@
 
 void DAQ(DAQReadout *);
+void DAQ_Silent(DAQReadout *);
 
 bool Match(const char*, const char*);
Index: /drsdaq/HVFeedback.cc
===================================================================
--- /drsdaq/HVFeedback.cc	(revision 109)
+++ /drsdaq/HVFeedback.cc	(revision 110)
@@ -99,5 +99,5 @@
   if (SocketDescriptor!=-1) {
     close(SocketDescriptor);
-    m->PrintMessage("Feeback socket closed.\n");
+    m->PrintMessage("Feedback socket closed.\n");
   }
   delete[] Average;   	delete[] Response;
@@ -123,5 +123,5 @@
       for (k=0; k<kNumberOfChannels; k++) {
 	for (Integral=0, q=-fIntHalfWidth; q<=(int) fIntHalfWidth; q++) 
-          Integral += (m->WaveForm[i][j][k][(fLedSignalSample+q+m->TriggerCell[i][j])%kNumberOfBins] - m->WaveForm[i][j][k][(fLedBaselineSample+q+m->TriggerCell[i][j])%kNumberOfBins])*m->BStruct[i].ScaleFactor;
+          Integral += (m->WaveForm[i][j][k][(fLedSignalSample+q+m->TriggerCell[i][j])%kNumberOfBins] - m->WaveForm[i][j][k][(fLedBaselineSample+q+m->TriggerCell[i][j])%kNumberOfBins])*m->drs->GetBoard(i)->GetPrecision();
         Integral /= 2*fIntHalfWidth+1;
 	Average[i][j][k] += Integral;
Index: /drsdaq/History.txt
===================================================================
--- /drsdaq/History.txt	(revision 109)
+++ /drsdaq/History.txt	(revision 110)
@@ -51,3 +51,7 @@
     	    initialisation steps)
 10/8/2009   Socket interface to hvcontrol only checks, if first reponse starts with
-    	    'OK', otherwise assumes command to hvcontrol failed. 
+    	    'OK', otherwise assumes command to hvcontrol failed.
+22/9/2009   The 'start' command will now start the DAQ without disk writing, but
+    	    with invocation of the feedback.
+23/9/2009   Fixed bug in RawDataCTX.cc: sequential event number in a file is only
+    	    the same as the event number in the run for the first file part
Index: /drsdaq/RawDataCTX.cc
===================================================================
--- /drsdaq/RawDataCTX.cc	(revision 109)
+++ /drsdaq/RawDataCTX.cc	(revision 110)
@@ -148,5 +148,7 @@
   
   // Move file pointer to desired event header (if zero read next event)
-  bool SEEK_OK=true;
+  bool SEEK_OK = true;
+  unsigned int Count = 0;
+  
   if (EventNo!=0 && fseek(Rawfile, RHeader->RunHeaderSize+RHeader->BoardStructureSize*RHeader->NBoards, SEEK_SET) != 0) SEEK_OK=false;
   while(SEEK_OK) {
@@ -159,5 +161,5 @@
     }
     else {
-      if (EHeader->EventNumber==EventNo || EventNo==0) break;
+      if ((Count++) == EventNo) break;
       if (fseek(Rawfile, EHeader->EventSize, SEEK_CUR) != 0) SEEK_OK = false;
     }
Index: /drsdaq/drsdaq.cpp
===================================================================
--- /drsdaq/drsdaq.cpp	(revision 109)
+++ /drsdaq/drsdaq.cpp	(revision 110)
@@ -138,6 +138,5 @@
 void ConsoleCommand(DAQReadout *m) {
 
-  time_t Time;
-  char *Command, Buf[MAX_COM_SIZE];;
+  char *Command;
   
   while (!m->Exit) {
@@ -150,5 +149,5 @@
     // Read Command
     Command = readline(m->Prompt);
-    if (Command==NULL) {
+    if (Command == NULL) {
       m->PrintMessage("Error reading command line input\n");
       continue;
@@ -157,6 +156,5 @@
 
     // Log command
-    strftime(Buf,MAX_COM_SIZE, "%d/%m/%y %X", localtime(&(Time=time(NULL))));
-    m->PrintMessage(MsgToLog, "CONSOLE(%s)> %s\n", Buf, Command);
+    m->PrintMessage(MsgToLog, "CONSOLE> %s\n", Command);
 
     // Process command
@@ -192,6 +190,5 @@
   struct hostent *ClientName;
   socklen_t SizeClientAddress=sizeof(ClientAddress);
-  char Command[MAX_COM_SIZE], Buf[MAX_COM_SIZE];
-  time_t Time;
+  char Command[MAX_COM_SIZE];
 
   // Set up server socket
@@ -248,6 +245,5 @@
       
       // Log command
-      strftime(Buf, MAX_COM_SIZE, "%d/%m/%y %X", localtime(&(Time=time(NULL))));
-      m->PrintMessage(MsgToConsole|MsgToLog, "SOCKET(%s)> %s\n", Buf, Command);
+      m->PrintMessage(MsgToConsole|MsgToLog, "SOCKET> %s\n", Command);
 
       // Process command     
