Index: /fact/FADctrl/FAD.cc
===================================================================
--- /fact/FADctrl/FAD.cc	(revision 14277)
+++ /fact/FADctrl/FAD.cc	(revision 14278)
@@ -63,5 +63,6 @@
   Mode = idle;
   Datafile = -1;
-  EventUpdateDelay = atof(GetConfig("EventUpdateDelay", "2").c_str());
+  EventUpdateDelay = atof(GetConfig("EventUpdateDelay", "1").c_str());
+  ModifiedCalibration = false;
 
   // Create pipe for data exchange
@@ -606,7 +607,12 @@
   }
 
+  // Modified calibration procedure for new FAD-based scope (Ulf)
+  if (Parameter.size() == 3 && Match(Parameter[2], "modified")) ModifiedCalibration = true;
+  else ModifiedCalibration = false;
+
   // Start calibration by setting mode
   Mode = acalib;
-  Message(INFO, "Starting amplitude calibration run with 3x%d events", NumEventsRequested);
+  if (!ModifiedCalibration) Message(INFO, "Starting amplitude calibration run with 3x%d events", NumEventsRequested);
+  else Message(INFO, "Starting modified amplitude calibration run with 3x%d events", NumEventsRequested);
 }
 
Index: /fact/FADctrl/FAD.h
===================================================================
--- /fact/FADctrl/FAD.h	(revision 14277)
+++ /fact/FADctrl/FAD.h	(revision 14278)
@@ -96,4 +96,6 @@
 	float EventUpdateDelay;
 	std::vector<std::string> BoardList;
+	
+	bool ModifiedCalibration; // for new FAD scope test / Ulf
 };
 
Index: /fact/FADctrl/FADBoard.cc
===================================================================
--- /fact/FADctrl/FADBoard.cc	(revision 14277)
+++ /fact/FADctrl/FADBoard.cc	(revision 14278)
@@ -205,4 +205,6 @@
 	}
 
+	if (m->ModifiedCalibration) ModifiedCalibCount = 0;
+
 	if (m->Mode == m->dynrange) {
 	  // No amplitude calibration allowed!
@@ -275,4 +277,62 @@
 	// Determine gain if integration finished
 	if (Count < m->NumEventsRequested) break;
+
+	// Check for modified calibration procedure, then repeat gain calibration
+	if (m->ModifiedCalibration) {
+	  if (ModifiedCalibCount == 0) {
+		DACCmd[1] = htons(65000);
+		DACCmd[3] = htons(0);
+		DACCmd[5] = htons(0);
+	  }
+	  else if (ModifiedCalibCount == 1) {
+	  	for (unsigned int i=0; i<NChips; i++) {
+		  for (unsigned int j=0; j<NChannels; j++) {
+		    if (i*NChannels+j >= 12) continue;
+			for (unsigned int k=0; k<NBins; k++) {
+			  ACalib.Gain[i][j][k] = (Sum[i][j][k] / m->NumEventsRequested) - ACalib.Baseline[i][j][k];
+			}
+		  }
+		}
+
+		DACCmd[1] = htons(0);
+		DACCmd[3] = htons(50000);
+		DACCmd[5] = htons(0);
+	  }
+	  else if (ModifiedCalibCount == 2) {
+	  	for (unsigned int i=0; i<NChips; i++) {
+		  for (unsigned int j=0; j<NChannels; j++) {
+		    if (i*NChannels+j < 12 || i*NChannels+j >= 24) continue;
+			for (unsigned int k=0; k<NBins; k++) {
+			  ACalib.Gain[i][j][k] = (Sum[i][j][k] / m->NumEventsRequested) - ACalib.Baseline[i][j][k];
+			}
+		  }
+		}
+
+		DACCmd[1] = htons(4000);
+		DACCmd[3] = htons(0);
+		DACCmd[5] = htons(0);
+	  }
+	  else {
+	  	for (unsigned int i=0; i<NChips; i++) {
+		  for (unsigned int j=0; j<NChannels; j++) {
+		    if (i*NChannels+j < 24) continue;
+			for (unsigned int k=0; k<NBins; k++) {
+			  ACalib.Gain[i][j][k] = (Sum[i][j][k] / m->NumEventsRequested) - ACalib.Baseline[i][j][k];
+			}
+		  }
+		}
+		DACCmd[1] = htons(0);
+		DACCmd[3] = htons(0);
+		DACCmd[5] = htons(0);
+		State = secondary;
+	  }
+	  Send(DACCmd, sizeof(DACCmd));
+
+	  ModifiedCalibCount++;
+
+	  memset(Sum, 0, sizeof(Sum));
+	  Count = 0;
+	  break;
+	}
 	
 	for (unsigned int i=0; i<NChips; i++) {
Index: /fact/FADctrl/FADBoard.h
===================================================================
--- /fact/FADctrl/FADBoard.h	(revision 14277)
+++ /fact/FADctrl/FADBoard.h	(revision 14278)
@@ -119,4 +119,6 @@
 	double Mean[NChips][NChannels], Mean_low[NChips][NChannels];
 	int DR_low[NChips][NChannels], DR_high[NChips][NChannels];
+	
+	unsigned int ModifiedCalibCount;
 };
 
