Index: /trunk/MagicSoft/Mars/Changelog
===================================================================
--- /trunk/MagicSoft/Mars/Changelog	(revision 3761)
+++ /trunk/MagicSoft/Mars/Changelog	(revision 3762)
@@ -27,4 +27,5 @@
    * macros/bootcampstandardanalysis.C
    * macros/pedphotcalc.C
+   * macros/calibrate_data.C
      - updated the macro to the cvs-standard used at the Udine bootcamp
 
Index: /trunk/MagicSoft/Mars/macros/calibrate_data.C
===================================================================
--- /trunk/MagicSoft/Mars/macros/calibrate_data.C	(revision 3761)
+++ /trunk/MagicSoft/Mars/macros/calibrate_data.C	(revision 3762)
@@ -23,5 +23,4 @@
 !
 \* ======================================================================== */
-#include "MAGIC.h"
 
 const TString defpath = "/mnt/Data/rootdata/CrabNebula/2004_01_27/";
@@ -57,4 +56,36 @@
   }
 
+  MCalibrationCam::PulserColor_t color;
+
+  if (calruns[0] < 20000)
+    color = MCalibrationCam::kCT1;
+  else
+    color = FindColor((MDirIter*)&cruns);
+
+  if (color == MCalibrationCam::kNONE)
+    {
+      TTimer timer("gSystem->ProcessEvents();", 50, kFALSE);
+      
+      while (1)
+        {
+          timer.TurnOn();
+          TString input = Getline("Could not find the correct colour: Type 'q' to exit, "
+                                  "green, blue, uv or ct1 to go on: ");
+          timer.TurnOff();
+          
+          if (input=="q\n")
+            return ;
+          
+          if (input=="green")
+            color = MCalibrationCam::kGREEN;
+          if (input=="blue")
+            color = MCalibrationCam::kBLUE;
+          if (input=="uv")
+            color = MCalibrationCam::kUV;
+          if (input=="ct1")
+            color = MCalibrationCam::kCT1;
+        }
+    }
+
   MStatusDisplay *display = new MStatusDisplay;
   display->SetUpdateTime(3000);
@@ -75,5 +106,4 @@
   MPedestalCam   pedcam;
   MBadPixelsCam  badcam;
-
   //
   // for excluding pixels from the beginning:
@@ -114,394 +144,49 @@
   // Now the short version: 
   //
-/*
-    MJCalibration calloop;
-    calloop.SetInput(&cruns);
-    calloop.SetDisplay(display);
-    if (!calloop.Process(pedloop.GetPedestalCam()))
-        return;
-#if 0
-*/
-    // 
-    // The longer version:
-    //
-
-    //
-    // Create a empty Parameter List and an empty Task List 
-    //
-    MParList  plist2;
-    MTaskList tlist2;
-    plist2.AddToList(&tlist2);
-    plist2.AddToList(&pedcam);
-    plist2.AddToList(&badcam);
-
-    gLog << endl;;
-    gLog << "Calculate MCalibrationCam from Runs " << cruns.GetRunsAsString() << endl;
-    gLog << endl;
-
-    MReadMarsFile read2("Events");
-    read2.DisableAutoScheme();
-    static_cast<MRead&>(read2).AddFiles(cruns);
-
-    MGeomCamMagic              geomcam;
-    MExtractedSignalCam        sigcam;
-    MArrivalTimeCam            timecam;
-    MCalibrationChargeCam      calcam;
-    //    MCalibrationChargePINDiode pindiode;   
-    //    MCalibrationChargeBlindPix blindpix;   
-    
-    MHCalibrationRelTimeCam     histtime;
-    MHCalibrationChargeCam      histcharge;
-    //    MHCalibrationChargePINDiode histpin;
-    //    MHCalibrationChargeBlindPix histblind;
-    //
-    //
-    // Get the previously created MPedestalCam into the new Parameter List 
-    //
-    plist2.AddToList(&geomcam);
-    plist2.AddToList(&sigcam);
-    plist2.AddToList(&timecam);
-    plist2.AddToList(&calcam);
-    plist2.AddToList(&histtime);
-    plist2.AddToList(&histcharge);
-//    plist2.AddToList(&histpin);
-//    plist2.AddToList(&histblind);
-
-    //
-    // We saw that the signal jumps between slices, 
-    // thus take the sliding window
-    //		
-    MExtractSignal2        sigcalc;
-    MExtractPINDiode       pincalc;
-    MExtractBlindPixel     blindcalc;
-
-    MArrivalTimeCalc2      timecalc;
-    MCalibrationChargeCalc calcalc;
-    MGeomApply             geomapl;
-
-    MFillH filltime( "MHCalibrationRelTimeCam"    , "MArrivalTimeCam");
-//   MFillH fillpin  ("MHCalibrationChargePINDiode", "MExtractedSignalPINDiode");
-//    MFillH fillblind("MHCalibrationChargeBlindPix", "MExtractedSignalBlindPixel");
-    MFillH fillcam  ("MHCalibrationChargeCam"     , "MExtractedSignalCam");
-
-    //
-    // Skip the HiGain vs. LoGain calibration
-    // 
-    calcalc.SkipHiLoGainCalibration();
-
-    // 
-    // Apply a filter against cosmics
-    // (was directly in MCalibrationCalc in earlier versions)
-    //
-    MFCosmics            cosmics;
-    MContinue            cont(&cosmics);
-
-    tlist2.AddToList(&read2);
-    tlist2.AddToList(&geomapl);
-    tlist2.AddToList(&sigcalc);
-    //    tlist2.AddToList(&blindcalc);
-    //    tlist2.AddToList(&pincalc);
-    //
-    // In case, you want to skip the cosmics rejection, 
-    // uncomment the next line
-    //
-    tlist2.AddToList(&cont);
-    //
-    // In case, you want to skip the somewhat lengthy calculation
-    // of the arrival times using a spline, uncomment the next two lines
-    //
-    tlist2.AddToList(&timecalc);
-    tlist2.AddToList(&filltime);
-//    tlist2.AddToList(&fillpin);
-//    tlist2.AddToList(&fillblind);
-    tlist2.AddToList(&fillcam);
-    //
-    tlist2.AddToList(&calcalc);
-    //
-    // Create and setup the eventloop
-    //
-    MEvtLoop evtloop;
-    evtloop.SetParList(&plist2);
-    evtloop.SetDisplay(display);
-    
-    cout << "***************************" << endl;
-    cout << "** COMPUTING CALIBRATION **" << endl;
-    cout << "***************************" << endl;
-
-    //
-    // Execute second analysis
-    //
-    if (!evtloop.Eventloop())
-        return;
-
-    tlist2.PrintStatistics();
-
-    //
-    // print the most important results of all pixels to a file
-    //
-    //    MLog gauglog;
-    //    gauglog.SetOutputFile(Form("%s%s",calcam.GetName(),".txt"),1);
-    //    calcam.SetLogStream(&gauglog);
-    //    calcam.Print();
-    //  calcam.SetLogStream(&gLog);
-    //
-    // just one example how to get the plots of individual pixels
-    //
-    //    histblind.DrawClone("all");
-    //    histcharge[5].DrawClone("all");
-    //    histcharge(5).DrawClone("all");
-    //    histtime[5].DrawClone("fourierevents");
-
-    // Create histograms to display
-    MHCamera disp1  (geomcam, "Cal;Charge",         "Fitted Mean Charges");
-    MHCamera disp2  (geomcam, "Cal;SigmaCharge",    "Sigma of Fitted Charges");
-    MHCamera disp3  (geomcam, "Cal;FitProb",        "Probability of Fit");
-    MHCamera disp4  (geomcam, "Cal;RSigma",         "Reduced Sigmas");
-    MHCamera disp5  (geomcam, "Cal;RSigma/Charge",  "Reduced Sigma per Charge");
-    MHCamera disp6  (geomcam, "Cal;FFactorPhe",     "Nr. of Photo-electrons (F-Factor Method)");
-    MHCamera disp7  (geomcam, "Cal;FFactorConv",    "Conversion Factor to photons (F-Factor Method)");
-    MHCamera disp8  (geomcam, "Cal;FFactorFFactor", "Total F-Factor (F-Factor Method)");
-    MHCamera disp9  (geomcam, "Cal;BlindPixConv",   "Conversion Factor to photons (Blind Pixel Method)");
-    MHCamera disp10 (geomcam, "Cal;BlindPixFFactor","Total F-Factor (Blind Pixel Method)");
-    MHCamera disp11 (geomcam, "Cal;PINDiodeConv",   "Conversion Factor tp photons (PIN Diode Method)");
-    MHCamera disp12 (geomcam, "Cal;PINDiodeFFactor","Total F-Factor (PIN Diode Method)");
-    MHCamera disp13 (geomcam, "Cal;Excluded",       "Pixels previously excluded");
-    MHCamera disp14 (geomcam, "Cal;NotFitted",      "Pixels that could not be fitted");
-    MHCamera disp15 (geomcam, "Cal;NotFitValid",    "Pixels with not valid fit results");
-    MHCamera disp16 (geomcam, "Cal;HiGainOscillating",     "Oscillating Pixels HI Gain");
-    MHCamera disp17 (geomcam, "Cal;LoGainOscillating",     "Oscillating Pixels LO Gain");
-    MHCamera disp18 (geomcam, "Cal;HiGainPickup",          "Number Pickup events Hi Gain");
-    MHCamera disp19 (geomcam, "Cal;LoGainPickup",          "Number Pickup events Lo Gain");
-    MHCamera disp20 (geomcam, "Cal;Saturation",            "Pixels with saturated Hi Gain");
-    MHCamera disp21 (geomcam, "Cal;FFactorValid",          "Pixels with valid F-Factor calibration");
-    MHCamera disp22 (geomcam, "Cal;BlindPixelValid",       "Pixels with valid BlindPixel calibration");
-    MHCamera disp23 (geomcam, "Cal;PINdiodeFFactorValid",  "Pixels with valid PINDiode calibration");
-    
-    MHCamera disp24 (geomcam, "Cal;Ped",         "Pedestals");
-    MHCamera disp25 (geomcam, "Cal;PedRms",      "Pedestal RMS");
-    
-    MHCamera disp26 (geomcam, "time;Time",        "Rel. Arrival Times");
-    MHCamera disp27 (geomcam, "time;SigmaTime",   "Sigma of Rel. Arrival Times");
-    MHCamera disp28 (geomcam, "time;TimeProb",    "Probability of Time Fit");
-    MHCamera disp29 (geomcam, "time;NotFitValid", "Pixels with not valid fit results");
-    MHCamera disp30 (geomcam, "time;Oscillating", "Oscillating Pixels");
-    
-    MHCamera disp31 (geomcam, "Cal;AbsTimeMean",  "Abs. Arrival Times");
-    MHCamera disp32 (geomcam, "Cal;AbsTimeRms",   "RMS of Arrival Times");
-    
-    // Fitted charge means and sigmas
-    disp1.SetCamContent(calcam,  0);
-    disp1.SetCamError(  calcam,  1);
-    disp2.SetCamContent(calcam,  2);
-    disp2.SetCamError(  calcam,  3);
-  
-    // Fit probabilities
-    disp3.SetCamContent(calcam,  4);
-    
-    // Reduced Sigmas and reduced sigmas per charge
-    disp4.SetCamContent(calcam,  5);
-    disp4.SetCamError(  calcam,  6);
-    disp5.SetCamContent(calcam,  7);
-    disp5.SetCamError(  calcam,  8);
-    
-    // F-Factor Method
-    disp6.SetCamContent(calcam,  9);
-    disp6.SetCamError(  calcam, 10);
-    disp7.SetCamContent(calcam, 11);
-    disp7.SetCamError(  calcam, 12);
-    disp8.SetCamContent(calcam, 13);
-    disp8.SetCamError(  calcam, 14);
-    
-    // Blind Pixel Method
-    disp9.SetCamContent(calcam, 16);
-    disp9.SetCamError(  calcam, 17);
-    disp10.SetCamContent(calcam,18);
-    disp10.SetCamError(  calcam,19);
-    
-    // PIN Diode Method
-    disp11.SetCamContent(calcam,21);
-    disp11.SetCamError(  calcam,22);
-    disp12.SetCamContent(calcam,23);
-    disp12.SetCamError(  calcam,24);
-    
-    // Pixels with defects
-    disp13.SetCamContent(calcam,26);
-    disp14.SetCamContent(badcam,7);
-    disp15.SetCamContent(badcam,9);
-    disp16.SetCamContent(badcam,16);
-    disp17.SetCamContent(badcam,15);
-    disp18.SetCamContent(calcam,27);
-    disp19.SetCamContent(calcam,28);
-    
-    // Lo Gain calibration
-    disp20.SetCamContent(calcam,29);
-    
-    // Valid flags
-    disp21.SetCamContent(calcam,15);
-    disp22.SetCamContent(calcam,20);
-    disp23.SetCamContent(calcam,25);
-    
-    // Pedestals
-    disp24.SetCamContent(calcam,30);
-    disp24.SetCamError(  calcam,31);
-    disp25.SetCamContent(calcam,32);
-    disp25.SetCamError(  calcam,33);
-    
-    // Relative Times
-    disp26.SetCamContent(histtime,0);
-    disp26.SetCamError(  histtime,1);
-    disp27.SetCamContent(histtime,2);
-    disp27.SetCamError(  histtime,3);
-    disp28.SetCamContent(histtime,4);
-    disp29.SetCamContent(histtime,5);
-    disp30.SetCamContent(histtime,6);
-    
-    // Absolute Times
-    disp31.SetCamContent(calcam,34);
-    disp31.SetCamError(  calcam,35);
-    disp32.SetCamContent(calcam,35);
-    
-    disp1.SetYTitle("Charge [FADC units]");
-    disp2.SetYTitle("\\sigma_{Charge} [FADC units]");
-    disp3.SetYTitle("P_{Charge} [1]");
-    
-    disp4.SetYTitle("\\sqrt{\\sigma^{2}_{Charge} - RMS^{2}_{Ped}} [FADC Counts]");
-    disp5.SetYTitle("Reduced Sigma / Mean Charge [1]");
-    
-    disp6.SetYTitle("Nr. Photo-electrons [1]");
-    disp7.SetYTitle("Conversion Factor [Ph/FADC Count]");
-    disp8.SetYTitle("\\sqrt{N_{Ph}}*\\sigma_{Charge}/\\mu_{Charge} [1] ");
-    
-    disp9.SetYTitle("Conversion Factor [Phot/FADC Count]");
-    disp10.SetYTitle("\\sqrt{N_{Ph}}*\\sigma_{Charge}/\\mu_{Charge} [1]");
-    
-    disp11.SetYTitle("Conversion Factor [Phot/FADC Count]");
-    disp12.SetYTitle("\\sqrt{N_{Ph}}*\\sigma_{Charge}/\\mu_{Charge} [1]");
-    
-    disp13.SetYTitle("[1]");
-    disp14.SetYTitle("[1]");
-    disp15.SetYTitle("[1]");
-    disp16.SetYTitle("[1]");
-    disp17.SetYTitle("[1]");
-    disp18.SetYTitle("[1]");
-    disp19.SetYTitle("[1]");
-    disp20.SetYTitle("[1]");
-    disp21.SetYTitle("[1]");
-    disp22.SetYTitle("[1]");
-    disp23.SetYTitle("[1]");
-    
-    disp24.SetYTitle("Ped [FADC Counts ]");
-    disp25.SetYTitle("RMS_{Ped} [FADC Counts ]");
-    
-    disp26.SetYTitle("Time Offset [ns]");
-    disp27.SetYTitle("Timing resolution [ns]");
-    disp28.SetYTitle("P_{Time} [1]");
-    
-    disp29.SetYTitle("[1]");
-    disp30.SetYTitle("[1]");
-    
-    disp31.SetYTitle("Mean Abs. Time [FADC slice]");
-    disp32.SetYTitle("RMS Abs. Time [FADC slices]");
-    
-    gStyle->SetOptStat(1111);
-    gStyle->SetOptFit();
-    
-    // Charges
-    TCanvas &c1 = display->AddTab("Fit.Charge");
-    c1.Divide(2, 3);
-
-    CamDraw(c1, disp1,calcam,1, 2 , 2);
-    CamDraw(c1, disp2,calcam,2, 2 , 2);
-
-    // Fit Probability
-    TCanvas &c2 = display->AddTab("Fit.Prob");
-    c2.Divide(1,3);
-
-    CamDraw(c2, disp3,calcam,1, 1 , 4);
-
-    // Reduced Sigmas
-    TCanvas &c3 = display->AddTab("Red.Sigma");
-    c3.Divide(2,3);
-
-    CamDraw(c3, disp4,calcam,1, 2 , 2);
-    CamDraw(c3, disp5,calcam,2, 2 , 2);
-
-    // F-Factor Method
-    TCanvas &c4 = display->AddTab("F-Factor");
-    c4.Divide(3,3);
-
-    CamDraw(c4, disp6,calcam,1, 3 , 2);
-    CamDraw(c4, disp7,calcam,2, 3 , 2);
-    CamDraw(c4, disp8,calcam,3, 3 , 2);
-
-    // Blind Pixel Method
-    TCanvas &c5 = display->AddTab("BlindPix");
-    c5.Divide(2,3);
-
-    CamDraw(c5, disp9, calcam,1, 2 , 2);
-    CamDraw(c5, disp10,calcam,2, 2 , 2);
-
-    // PIN Diode Method
-    TCanvas &c6 = display->AddTab("PINDiode");
-    c6.Divide(2,3);
-
-    CamDraw(c6, disp11,calcam,1, 2 , 2);
-    CamDraw(c6, disp12,calcam,2, 2 , 2);
-
-    // Defects
-    TCanvas &c7 = display->AddTab("Defects");
-    c7.Divide(4,2);
-
-    CamDraw(c7, disp13,calcam,1,4, 0);
-    CamDraw(c7, disp14,calcam,2,4, 0);
-    CamDraw(c7, disp18,calcam,3,4, 0);
-    CamDraw(c7, disp19,calcam,4,4, 0);
-
-    // BadCam
-    TCanvas &c8 = display->AddTab("Defects");
-    c8.Divide(3,2);
-
-    CamDraw(c8, disp15,badcam,1,3, 0);
-    CamDraw(c8, disp16,badcam,2,3, 0);
-    CamDraw(c8, disp17,badcam,3,3, 0);
-
-
-    // Valid flags
-    TCanvas &c9 = display->AddTab("Validity");
-    c9.Divide(4,2);
-
-    CamDraw(c9, disp20,calcam,1,4,0);
-    CamDraw(c9, disp21,calcam,2,4,0);
-    CamDraw(c9, disp22,calcam,3,4,0);
-    CamDraw(c9, disp23,calcam,4,4,0);
-
-
-    // Pedestals
-    TCanvas &c10 = display->AddTab("Pedestals");
-    c10.Divide(2,3);
-
-    CamDraw(c10,disp24,calcam,1,2,1);
-    CamDraw(c10,disp25,calcam,2,2,2);
-
-    // Rel. Times
-    TCanvas &c11 = display->AddTab("Fitted Rel. Times");
-    c11.Divide(3,3);
-
-    CamDraw(c11,disp26,calcam,1,3,2);
-    CamDraw(c11,disp27,calcam,2,3,2);
-    CamDraw(c11,disp38,calcam,3,3,4);
-
-    // Time Defects
-    TCanvas &c12 = display->AddTab("Time Def.");
-    c12.Divide(2,2);
-
-    CamDraw(c12, disp29,calcam,1,2, 0);
-    CamDraw(c12, disp30,calcam,2,2, 0);
-
-    // Abs. Times
-    TCanvas &c13 = display->AddTab("Abs. Times");
-    c13.Divide(2,3);
-
-    CamDraw(c13,disp31,calcam,1,2,2);
-    CamDraw(c13,disp32,calcam,2,2,2);
+  //
+  // Now setup the new tasks for the calibration:
+  // ---------------------------------------------------
+  //
+  MCalibrationQECam qecam;
+  MJCalibration     calloop;
+  calloop.SetColor(color);
+  calloop.SetInput(&cruns);
+  //  calloop.SetFullDisplay();
+  //
+  // Use as signal extractor MExtractSignal2:
+  //
+  calloop.SetExtractorLevel(2);
+  //
+  // Set the corr. cams:
+  //
+  calloop.SetQECam(qecam);
+  calloop.SetBadPixels(badcam);
+  //
+  // The next two commands are for the display:
+  //
+  calloop.SetDisplay(display);
+  
+  //
+  // Apply rel. time calibration:
+  //
+  calloop.SetRelTimeCalibration();
+  //
+  // Use as arrival time extractor MArrivalTimeCalc2:
+  //
+  calloop.SetArrivalTimeLevel(2);
+  
+  //
+  // Do the event-loop:
+  //
+  cout << "***************************" << endl;
+  cout << "** COMPUTING CALIBRATION **" << endl;
+  cout << "***************************" << endl;
+  
+  if (!calloop.Process(pedcam))
+    return;
+  
+  MBadPixelsCam          &badbad  = calloop.GetBadPixels();
+  MCalibrationChargeCam  &calcam  = calloop.GetCalibrationCam();
+  MCalibrationRelTimeCam &timecam = calloop.GetRelTimeCam();
 
   /************************************************************************/
@@ -519,12 +204,13 @@
   MSrcPosCam          srccam;
   MRawRunHeader       runhead;
+  MExtractedSignalCam sigcam;
 
   plist3.AddToList(&geomcam );
   plist3.AddToList(&pedcam  );
   plist3.AddToList(&calcam  );
-  plist3.AddToList(&badcam  );
+  plist3.AddToList(&qecam   );
+  plist3.AddToList(&badbad  );
   plist3.AddToList(&timecam );
   plist3.AddToList(&sigcam  );
-  plist3.AddToList(&histtime);
   plist3.AddToList(&photevt);
   plist3.AddToList(&pedphotcam);
@@ -537,7 +223,9 @@
   static_cast<MRead&>(read3).AddFiles(druns);
 
+  MExtractSignal2     sigcalc;
+  MArrivalTimeCalc2   timecalc;
   MCalibrateData      photcalc;     
   photcalc.SetCalibrationMode(MCalibrateData::kFfactor);  // !!! was only MCalibrate
-  //  MPedPhotCalc    pedphotcalc;   // already done by MCalibrate Data
+  // MPedPhotCalc     pedphotcalc;   // already done by MCalibrate Data
   // MCerPhotCalc     cerphotcalc;  // already done by MCalibrate Data
   
@@ -556,7 +244,8 @@
   write.AddContainer("MSrcPosCam"            , "RunHeaders");
   write.AddContainer("MCalibrationChargeCam" , "RunHeaders");
+  write.AddContainer("MCalibrationQECam"     , "RunHeaders");
   //  write.AddContainer("MPedPhotCam","RunHeaders"); // Attention, was in Events - Tree!!
   write.AddContainer("MPedestalCam"          , "RunHeaders");
-  write.AddContainer("MHCalibrationRelTimeCam","RunHeaders");
+  write.AddContainer("MCalibrationRelTimeCam", "RunHeaders");
 
   write.AddContainer("MCerPhotEvt"   , "Events");
@@ -725,2 +414,72 @@
 
 
+MCalibrationCam::PulserColor_t FindColor(MDirIter* run) 
+{
+  
+  MCalibrationCam::PulserColor_t col = MCalibrationCam::kNONE;
+
+  TString filenames;
+
+  while (!(filenames=run->Next()).IsNull())
+    {
+
+      filenames.ToLower();
+
+      if (filenames.Contains("green"))
+        if (col == MCalibrationCam::kNONE)
+          {
+            cout << "Found colour: Green  in " << filenames << endl;
+            col = MCalibrationCam::kGREEN;
+          }
+        else if (col != MCalibrationCam::kGREEN)
+          {
+            cout << "Different colour found in " << filenames << "... abort" << endl;
+            return MCalibrationCam::kNONE;
+          }
+
+      if (filenames.Contains("blue"))
+        if (col == MCalibrationCam::kNONE)
+          {
+            cout << "Found colour: Blue  in " << filenames << endl;
+            col = MCalibrationCam::kBLUE;
+          }
+        else if (col != MCalibrationCam::kBLUE)
+          {
+            cout << "Different colour found in " << filenames << "... abort" << endl;
+            return MCalibrationCam::kNONE;
+          }
+
+      if (filenames.Contains("uv"))
+        if (col == MCalibrationCam::kNONE)
+          {
+            cout << "Found colour: Uv  in " << filenames << endl;
+            col = MCalibrationCam::kUV;
+          }
+        else if (col != MCalibrationCam::kUV)
+          {
+            cout << "Different colour found in " << filenames << "... abort" << endl;
+            return MCalibrationCam::kNONE;
+          }
+
+      if (filenames.Contains("ct1"))
+        if (col == MCalibrationCam::kNONE)
+          {
+            cout << "Found colour: Ct1  in " << filenames << endl;
+            col = MCalibrationCam::kCT1;
+          }
+        else if (col != MCalibrationCam::kCT1)
+          {
+            cout << "Different colour found in " << filenames << "... abort" << endl;
+            return MCalibrationCam::kNONE;
+          }
+      
+    }
+  
+
+      
+  if (col == MCalibrationCam::kNONE)
+    cout <<  "No colour found in filenames of runs: " << ((MRunIter*)run)->GetRunsAsString() 
+         << "... abort" << endl;
+  
+  return col;      
+}
