Index: trunk/MagicSoft/Mars/Changelog
===================================================================
--- trunk/MagicSoft/Mars/Changelog	(revision 6190)
+++ trunk/MagicSoft/Mars/Changelog	(revision 6191)
@@ -20,4 +20,17 @@
 
                                                  -*-*- END OF LINE -*-*-
+
+ 2005/02/02 Markus Gaug
+
+   * mjobs/MJCalib.[h,cc]
+     - put the data type enum in a new base class
+
+   * mjobs/MJCalibTest.[h,cc]
+     - re-name old class MJExtractCalibTest to MJCalibTest and make it 
+       compatible with the sequence-files.
+   
+   * mjobs/MJExtractCalibTest.[h,cc]
+     - remove
+
 
  2005/02/01 Raquel de los Reyes
Index: trunk/MagicSoft/Mars/mjobs/JobsLinkDef.h
===================================================================
--- trunk/MagicSoft/Mars/mjobs/JobsLinkDef.h	(revision 6190)
+++ trunk/MagicSoft/Mars/mjobs/JobsLinkDef.h	(revision 6191)
@@ -6,4 +6,5 @@
 
 #pragma link C++ class MJob+;
+#pragma link C++ class MJCalib+;
 #pragma link C++ class MSequence+;
 
@@ -14,5 +15,5 @@
 #pragma link C++ class MJCalibrateSignalFromOutside+;
 #pragma link C++ class MJExtractSignal+;
-#pragma link C++ class MJExtractCalibTest+;
+#pragma link C++ class MJCalibTest+;
 
 #endif
Index: trunk/MagicSoft/Mars/mjobs/MJCalib.cc
===================================================================
--- trunk/MagicSoft/Mars/mjobs/MJCalib.cc	(revision 6191)
+++ trunk/MagicSoft/Mars/mjobs/MJCalib.cc	(revision 6191)
@@ -0,0 +1,48 @@
+/* ======================================================================== *\
+!
+! *
+! * This file is part of MARS, the MAGIC Analysis and Reconstruction
+! * Software. It is distributed to you in the hope that it can be a useful
+! * and timesaving tool in analysing Data of imaging Cerenkov telescopes.
+! * It is distributed WITHOUT ANY WARRANTY.
+! *
+! * Permission to use, copy, modify and distribute this software and its
+! * documentation for any purpose is hereby granted without fee,
+! * provided that the above copyright notice appear in all copies and
+! * that both that copyright notice and this permission notice appear
+! * in supporting documentation. It is provided "as is" without express
+! * or implied warranty.
+! *
+!
+!
+!   Author(s): Markus Gaug, 2/2005 <mailto:markus@ifae.es>
+!
+!   Copyright: MAGIC Software Development, 2000-2005
+!
+!
+\* ======================================================================== */
+
+/////////////////////////////////////////////////////////////////////////////
+//
+//  MJCalib
+//
+// A base class for the calibration jobs
+//
+/////////////////////////////////////////////////////////////////////////////
+#include "MJCalib.h"
+
+ClassImp(MJCalib);
+
+using namespace std;
+
+// --------------------------------------------------------------------------
+//
+// Default constructor. 
+//
+// Sets fDataFlag to kIsUseRootData
+//
+MJCalib::MJCalib() : fDataFlag(0)
+{
+    SetUseRootData();
+}
+
Index: trunk/MagicSoft/Mars/mjobs/MJCalib.h
===================================================================
--- trunk/MagicSoft/Mars/mjobs/MJCalib.h	(revision 6191)
+++ trunk/MagicSoft/Mars/mjobs/MJCalib.h	(revision 6191)
@@ -0,0 +1,41 @@
+#ifndef MARS_MJCalib
+#define MARS_MJCalib
+
+#ifndef ROOT_TROOT
+#include <TROOT.h>
+#endif
+
+class MRunIter;
+class MJCalib
+{
+protected:
+
+  MRunIter *fRuns;          // Data files, only used for test applications, default is sequence files!
+  
+  enum DataType_t
+    {
+      kIsUseRawData,
+      kIsUseRootData,
+      kIsUseMC
+    };
+
+  Byte_t    fDataFlag;      // Bit-field to store the data type
+  
+  Bool_t IsUseRawData()  const { return TESTBIT(fDataFlag,kIsUseRawData);  }
+  Bool_t IsUseRootData() const { return TESTBIT(fDataFlag,kIsUseRootData); }
+  Bool_t IsUseMC()       const { return TESTBIT(fDataFlag,kIsUseMC);       }
+  
+  void   SetUseRawData ( const Bool_t b=kTRUE )  { b ? SETBIT(fDataFlag,kIsUseRawData)  : CLRBIT(fDataFlag,kIsUseRawData);  }
+  void   SetUseRootData( const Bool_t b=kTRUE )  { b ? SETBIT(fDataFlag,kIsUseRootData) : CLRBIT(fDataFlag,kIsUseRootData); }
+  void   SetUseMC      ( const Bool_t b=kTRUE )  { b ? SETBIT(fDataFlag,kIsUseMC)       : CLRBIT(fDataFlag,kIsUseMC);       }
+
+public:
+
+  MJCalib();
+  
+  void SetInput      ( MRunIter *iter       )  { fRuns = iter; }
+  
+  ClassDef(MJCalib, 0) // Base class for calibration jobs
+};
+
+#endif
Index: trunk/MagicSoft/Mars/mjobs/MJCalibTest.cc
===================================================================
--- trunk/MagicSoft/Mars/mjobs/MJCalibTest.cc	(revision 6191)
+++ trunk/MagicSoft/Mars/mjobs/MJCalibTest.cc	(revision 6191)
@@ -0,0 +1,526 @@
+/* ======================================================================== *\
+!
+! *
+! * This file is part of MARS, the MAGIC Analysis and Reconstruction
+! * Software. It is distributed to you in the hope that it can be a useful
+! * and timesaving tool in analysing Data of imaging Cerenkov telescopes.
+! * It is distributed WITHOUT ANY WARRANTY.
+! *
+! * Permission to use, copy, modify and distribute this software and its
+! * documentation for any purpose is hereby granted without fee,
+! * provided that the above copyright notice appear in all copies and
+! * that both that copyright notice and this permission notice appear
+! * in supporting documentation. It is provided "as is" without express
+! * or implied warranty.
+! *
+!
+!
+!   Author(s): Markus Gaug, 04/2004 <mailto:markus@ifae.es>
+!
+!   Copyright: MAGIC Software Development, 2000-2005
+!
+!
+\* ======================================================================== */
+
+/////////////////////////////////////////////////////////////////////////////
+//
+//  MJCalibTest
+//
+// If the flag SetDataCheckDisplay() is set, only the most important distributions
+//  are displayed. 
+// Otherwise, (default: SetNormalDisplay()), a good selection of plots is given
+//
+/////////////////////////////////////////////////////////////////////////////
+#include "MJCalibTest.h"
+
+#include <TFile.h>
+#include <TStyle.h>
+#include <TCanvas.h>
+#include <TSystem.h>
+
+#include "MLog.h"
+#include "MLogManip.h"
+
+#include "MRunIter.h"
+#include "MParList.h"
+#include "MTaskList.h"
+#include "MTaskEnv.h"
+#include "MEvtLoop.h"
+
+#include "MHCamera.h"
+
+#include "MPedestalCam.h"
+#include "MBadPixelsCam.h"
+#include "MBadPixelsTreat.h"
+#include "MBadPixelsCalc.h"
+#include "MBadPixelsMerge.h"
+#include "MCerPhotEvt.h"
+#include "MArrivalTime.h"
+#include "MCalibrationChargeCam.h"
+#include "MCalibrationRelTimeCam.h"
+#include "MCalibrationQECam.h"
+#include "MCalibrationTestCam.h"
+#include "MCalibrationTestCalc.h"
+#include "MHCamEvent.h"
+#include "MHCalibrationTestCam.h"
+
+#include "MReadMarsFile.h"
+#include "MGeomApply.h"
+#include "MExtractTimeAndChargeSlidingWindow.h"
+#include "MExtractor.h"
+#include "MExtractTime.h"
+#include "MExtractTimeFastSpline.h"
+#include "MFCosmics.h"
+#include "MContinue.h"
+#include "MFillH.h"
+#include "MCalibrateData.h"
+#include "MCalibrateRelTimes.h"
+
+#include "MTriggerPattern.h"
+#include "MTriggerPatternDecode.h"
+#include "MFTriggerPattern.h"
+
+#include "MStatusDisplay.h"
+
+ClassImp(MJCalibTest);
+
+using namespace std;
+// --------------------------------------------------------------------------
+//
+// Default constructor. 
+//
+// Sets fUseCosmicsFilter to kTRUE, fRuns to 0, fExtractor to NULL, fTimeExtractor to NULL
+// fDisplay to kNormalDisplay
+//
+MJCalibTest::MJCalibTest(const char *name, const char *title) 
+    : fUseCosmicsFilter(kTRUE), fExtractor(NULL), fTimeExtractor(NULL),
+      fDisplayType(kNormalDisplay), fGeometry("MGeomCamMagic")
+{
+    fName  = name  ? name  : "MJCalibTest";
+    fTitle = title ? title : "Tool to extract, calibrate and test signals from a file";
+}
+
+
+void MJCalibTest::DisplayResult(MParList &plist)
+{
+  if (!fDisplay)
+    return;
+  
+  //
+  // Update display
+  //
+  TString title = fDisplay->GetTitle();
+  title += "--  Extraction-Calibration-Test ";
+  title += fRuns->GetRunsAsString();
+  title += "  --";
+  fDisplay->SetTitle(title);
+
+  //
+  // Get container from list
+  //
+  MGeomCam  &geomcam = *(MGeomCam*) plist.FindObject("MGeomCam");
+  MHCalibrationTestCam &testcam = *(MHCalibrationTestCam*)plist.FindObject("MHCalibrationTestCam");
+  
+  // Create histograms to display
+  MHCamera disp1 (geomcam, "Test;Photons",           "Mean of calibrated Photons");
+  MHCamera disp2 (geomcam, "Test;SigmaPhotons",      "Sigma of calibrated photons");
+  MHCamera disp3 (geomcam, "Test;PhotonsPerArea",    "Equiv. Cherenkov Photons per Area");
+  MHCamera disp4 (geomcam, "Test;SigmaPhotPerArea",  "Sigma equiv. Cher. Photons per Area");
+  MHCamera disp5 (geomcam, "Test;Phot",              "Calibrated Photons");
+  MHCamera disp6 (geomcam, "Test;PhotPerArea",       "Calibrated Photons per Area");
+  MHCamera disp7 (geomcam, "Test;NotInterpolate",    "Not interpolated pixels");
+  MHCamera disp8 (geomcam, "Test;DeviatingPhots",    "Deviating Number Photons");
+
+  // Fitted charge means and sigmas
+  disp1.SetCamContent(testcam,  0);
+  disp1.SetCamError(  testcam,  1);
+  disp2.SetCamContent(testcam,  2);
+  disp2.SetCamError(  testcam,  3);
+  disp3.SetCamContent(testcam,  7);
+  disp3.SetCamError(  testcam,  8);
+  disp4.SetCamContent(testcam,  9);
+  disp4.SetCamError(  testcam,  10);
+
+  disp5.SetCamContent(fTestCam,  0);
+  disp5.SetCamError(  fTestCam,  1);
+  disp6.SetCamContent(fTestCam,  2);
+  disp6.SetCamError(  fTestCam,  3);
+  disp7.SetCamError(  fTestCam,  4);
+
+  disp8.SetCamError(  fBadPixels, 22);
+
+
+  disp1.SetYTitle("Photons");
+  disp2.SetYTitle("\\sigma_{phot}");
+  disp3.SetYTitle("Photons per Area [mm^{-2}]");
+  disp4.SetYTitle("\\sigma_{phot} per Area [mm^{-2}]");
+
+  disp5.SetYTitle("Photons");
+  disp6.SetYTitle("Photons per Area [mm^{-2}]");
+  disp7.SetYTitle("[1]");
+  disp8.SetYTitle("[1]");
+  
+  gStyle->SetOptStat(1111);
+  gStyle->SetOptFit();
+
+  if (fDisplayType == kNormalDisplay)
+    {
+
+      TCanvas &c = fDisplay->AddTab("TestCharges");
+      c.Divide(4,4);
+      
+      disp1.CamDraw(c, 1, 4, 2, 1);
+      disp2.CamDraw(c, 2, 4, 2, 1);        
+      disp3.CamDraw(c, 3, 4, 1, 1);        
+      disp4.CamDraw(c, 4, 4, 2, 1);        
+    }
+  
+  TCanvas &c2 = fDisplay->AddTab("TestResult");
+  c2.Divide(2,4);
+
+  disp5.CamDraw(c2, 1, 2, 2, 1);
+  disp6.CamDraw(c2, 2, 2, 2, 1);        
+
+  TCanvas &c3 = fDisplay->AddTab("TestDefects");
+  c3.Divide(2,2);
+
+  disp7.CamDraw(c3, 1, 2, 0);
+  disp8.CamDraw(c3, 2, 2, 0);        
+
+  return;
+
+}
+
+
+void MJCalibTest::DisplayResultT(MParList &plist)
+{
+  if (!fDisplay)
+    return;
+  
+  //
+  // Update display
+  //
+  TString title = fDisplay->GetTitle();
+  title += "--  Extraction-Calibration-Test-Time";
+  title += fRuns->GetRunsAsString();
+  title += "  --";
+  fDisplay->SetTitle(title);
+
+  //
+  // Get container from list
+  //
+  MGeomCam &geomcam = *(MGeomCam*)plist.FindObject("MGeomCam");
+  
+  // Create histograms to display
+  MHCamera disp1 (geomcam, "Test;Arr.Times",           "Mean of calibrated Arr.Times");
+  MHCamera disp2 (geomcam, "Test;SigmaArr.Times",      "Sigma of calibrated Arr.Times");
+
+  // Fitted charge means and sigmas
+  disp1.SetCamContent(fTestTimeCam,  0);
+  disp1.SetCamError(  fTestTimeCam,  1);
+  disp2.SetCamContent(fTestTimeCam,  2);
+  disp2.SetCamError(  fTestTimeCam,  3);
+
+  disp1.SetYTitle("Mean Arr.Times [FADC units]");
+  disp2.SetYTitle("\\sigma_{t} [FADC units]");
+  
+  gStyle->SetOptStat(1111);
+  gStyle->SetOptFit();
+
+  TCanvas &c = fDisplay->AddTab("TestTimes");
+  c.Divide(2,4);
+
+  disp1.CamDraw(c, 1, 2,  5, 1);
+  disp2.CamDraw(c, 2, 2,  5, 1);        
+
+  return;
+
+}
+
+
+const char* MJCalibTest::GetOutputFile() const
+{
+
+  if (fSequence.IsValid())
+    return Form("%s/test%08d.root", (const char*)fPathOut, fSequence.GetSequence());
+  
+  if (!fRuns)
+    return "";
+  
+  return Form("%s/%s-Test.root", (const char*)fPathOut, (const char*)fRuns->GetRunsAsFileName());
+  
+}
+
+
+Bool_t MJCalibTest::Process(MPedestalCam &pedcam, 
+				   MCalibrationChargeCam &calcam, MCalibrationQECam &qecam, 
+				   MCalibrationRelTimeCam &reltime, 
+				   Byte_t filetype)
+{
+    // const TString fname = GetOutputFile();
+  
+//  if (gSystem->AccessPathName(fname, kFileExists))
+    return ProcessFile(pedcam,calcam,qecam,reltime,filetype);
+  
+    // return kTRUE;
+}
+
+Bool_t MJCalibTest::ProcessFile(MPedestalCam &pedcam, 
+				       MCalibrationChargeCam &calcam, MCalibrationQECam &qecam, 
+				       MCalibrationRelTimeCam &relcam,
+				       Byte_t filetype)
+{
+  if (!fRuns)
+    {
+      *fLog << err << "No Runs choosen... abort." << endl;
+      return kFALSE;
+    }
+  if (fRuns->GetNumRuns() != fRuns->GetNumEntries())
+    {
+      *fLog << err << "Number of files found doesn't match number of runs... abort." << endl;
+      return kFALSE;
+    }
+
+  *fLog << inf;
+  fLog->Separator(GetDescriptor());
+  *fLog << "Calculate MExtractedSignalCam from Runs " << fRuns->GetRunsAsString() << endl;
+  *fLog << endl;
+
+  MBadPixelsCam badcam;
+  
+  // Setup Lists
+  MParList plist;
+  plist.AddToList(this); // take care of fDisplay!
+  plist.AddToList(&fTestCam);
+  plist.AddToList(&fTestTimeCam);
+  plist.AddToList(&badcam);
+  plist.AddToList(&pedcam);
+  plist.AddToList(&calcam);
+  plist.AddToList(&qecam);
+  plist.AddToList(&relcam);
+
+  MCerPhotEvt          cerphot;
+  MPedPhotCam          pedphot;
+  MHCalibrationTestCam testcam;
+
+  plist.AddToList(&cerphot);
+  plist.AddToList(&pedphot);
+  plist.AddToList(&testcam);
+
+  pedcam.SetName("MPedestalFundamental");
+  
+  MTaskList tlist;
+  plist.AddToList(&tlist);
+
+  // Setup Task-lists
+  MReadMarsFile read("Events");
+  read.DisableAutoScheme();
+  static_cast<MRead&>(read).AddFiles(*fRuns);
+  
+  // Check for interleaved events
+  MTriggerPatternDecode decode;
+  MFTriggerPattern      fcalib;
+  fcalib.DenyCalibration();
+  MContinue conttp(&fcalib, "ContTrigPattern");
+
+  MGeomApply            apply; // Only necessary to craete geometry
+  apply.SetGeometry(fGeometry);  
+  MBadPixelsMerge       merge(&fBadPixels);
+
+  MExtractTimeAndChargeSlidingWindow extrsw;
+  MExtractTimeFastSpline             extime;
+  extime.SetPedestals(&pedcam);
+
+  MTaskEnv taskenv1("ExtractSignal");
+  MTaskEnv taskenv2("ExtractTime");
+
+  if (fExtractor)
+    { 
+      fExtractor->SetPedestals(&pedcam);
+      taskenv1.SetDefault(fExtractor);
+    }
+  if (fTimeExtractor)
+    {
+      fTimeExtractor->SetPedestals(&pedcam);
+      taskenv2.SetDefault(fTimeExtractor);
+    }
+  else
+    {
+      extrsw.SetPedestals(&pedcam);
+      extrsw.SetWindowSize(8,8);
+      taskenv2.SetDefault(&extrsw);
+      *fLog << warn << GetDescriptor() 
+            << ": No extractor has been chosen, take default MExtractTimeAndChargeSlidingWindow " << endl;
+    }
+
+  MCalibrateData        photcalc;
+  MCalibrateRelTimes    caltimes;
+  if (filetype==3) // MC file
+    {
+      photcalc.SetCalibrationMode(MCalibrateData::kFfactor);
+      photcalc.SetPedestalFlag(MCalibrateData::kRun);
+      photcalc.AddPedestal("MPedestalCam", "MPedPhotFundamental");
+    }
+  else
+    {
+      photcalc.SetCalibrationMode(MCalibrateData::kFfactor);
+      photcalc.AddPedestal("Fundamental");
+      photcalc.SetPedestalFlag(MCalibrateData::kEvent);
+      photcalc.SetSignalType(MCalibrateData::kPhot);
+    }
+
+  MBadPixelsCalc        badcalc;
+  MBadPixelsTreat       badtreat;
+  badtreat.SetProcessTimes(kFALSE);
+
+  badcalc.SetNamePedPhotCam("MPedPhotFundamental");
+  //badtreat.SetUseInterpolation();
+  badtreat.AddNamePedPhotCam("MPedPhotFundamental");
+
+  MCalibrationTestCalc  testcalc;
+
+  if (!fSequence.IsValid())
+    {
+      testcalc.SetOutputPath(fPathOut);
+      testcalc.SetOutputFile(Form("%s-TestCalibStat.txt",(const char*)fRuns->GetRunsAsFileName()));
+    }
+  
+  MHCamEvent evt0(0,"Signal", "Un-Calibrated Signal;;S [FADC cnts]" );
+  MHCamEvent evt1(3,"CalSig", "Calibrated and Interpolated Signal;;S [\\gamma]");
+  MHCamEvent evt2(0,"Times" , "Arrival Time;;T [slice]");
+
+  MFillH fill0(&evt0, "MExtractedSignalCam", "FillUncalibrated");
+  MFillH fill1(&evt1, "MCerPhotEvt", "FillCalibrated");
+  MFillH fill2(&evt2, "MArrivalTime","FillTimes");
+  
+  MFillH fillcam("MHCalibrationTestCam", "MCerPhotEvt");
+  fillcam.SetNameTab("Test");
+  MFillH filltme("MHCalibrationTestTimeCam", "MArrivalTime");
+  filltme.SetNameTab("TestTime");
+
+  MFCosmics cosmics;
+  cosmics.SetNamePedestalCam("MPedestalFundamental");
+  MContinue contcos(&cosmics,"ContCosmics");
+  
+  tlist.AddToList(&read);
+  tlist.AddToList(&decode);
+  tlist.AddToList(&apply);
+  tlist.AddToList(&merge);
+  tlist.AddToList(&conttp);
+  tlist.AddToList(&taskenv1);
+  if (!fExtractor->InheritsFrom("MExtractTimeAndCharge"))
+    tlist.AddToList(&taskenv2);
+  tlist.AddToList(&contcos);
+  tlist.AddToList(&fill0);
+  tlist.AddToList(&photcalc);
+  tlist.AddToList(&caltimes);
+  tlist.AddToList(&badcalc);
+  tlist.AddToList(&badtreat);
+  tlist.AddToList(&fill1);
+  tlist.AddToList(&fill2);
+  tlist.AddToList(&fillcam);
+  tlist.AddToList(&filltme);
+  tlist.AddToList(&testcalc);
+  
+  // Create and setup the eventloop
+  MEvtLoop evtloop(fName);
+  evtloop.SetParList(&plist);
+  evtloop.SetDisplay(fDisplay);
+  evtloop.SetLogStream(fLog);
+  
+  // Execute first analysis
+  if (!evtloop.Eventloop())
+    {
+      *fLog << err << GetDescriptor() << ": Failed." << endl;
+      return kFALSE;
+    }
+  
+  tlist.PrintStatistics();
+  
+  DisplayResult(plist);
+
+  if (!WriteResult())
+    return kFALSE;
+
+  *fLog << inf << GetDescriptor() << ": Done." << endl;
+  
+  return kTRUE;
+}
+
+Bool_t MJCalibTest::ReadPedPhotCam()
+{
+
+  const TString fname = GetOutputFile();
+  
+  if (gSystem->AccessPathName(fname, kFileExists))
+    {
+      *fLog << err << "Input file " << fname << " doesn't exist." << endl;
+      return kFALSE;
+    }
+  
+  *fLog << inf << "Reading from file: " << fname << endl;
+  
+  TFile file(fname, "READ");
+  if (fPedPhotCam.Read()<=0)
+    {
+      *fLog << "Unable to read MPedPhotCam from " << fname << endl;
+      return kFALSE;
+    }
+
+  if (file.FindKey("MBadPixelsCam"))
+    {
+      MBadPixelsCam bad;
+      if (bad.Read()<=0)
+        {
+          *fLog << "Unable to read MBadPixelsCam from " << fname << endl;
+          return kFALSE;
+        }
+      fBadPixels.Merge(bad);
+    }
+  
+  if (fDisplay /*&& !fDisplay->GetCanvas("Pedestals")*/) // FIXME!
+    fDisplay->Read();
+  
+  return kTRUE;
+}
+
+Bool_t MJCalibTest::WriteResult()
+{
+    
+    if (fPathOut.IsNull())
+        return kTRUE;
+    
+    const TString oname(GetOutputFile());
+
+    *fLog << inf << "Writing to file: " << oname << endl;
+    
+    TFile file(oname, "UPDATE");
+    
+    if (fDisplay && fDisplay->Write()<=0)
+    {
+        *fLog << err << "Unable to write MStatusDisplay to " << oname << endl;
+        return kFALSE;
+    }
+
+    if (fPedPhotCam.Write()<=0)
+    {
+        *fLog << err << "Unable to write MPedPhotCam to " << oname << endl;
+        return kFALSE;
+    }
+
+    if (fTestCam.Write()<=0)
+    {
+        *fLog << err << "Unable to write MCalibrationTestCam to " << oname << endl;
+        return kFALSE;
+    }
+
+    if (fTestTimeCam.Write()<=0)
+    {
+        *fLog << err << "Unable to write MCalibrationTestCam to " << oname << endl;
+        return kFALSE;
+    }
+
+    return kTRUE;
+
+}
+
Index: trunk/MagicSoft/Mars/mjobs/MJCalibTest.h
===================================================================
--- trunk/MagicSoft/Mars/mjobs/MJCalibTest.h	(revision 6191)
+++ trunk/MagicSoft/Mars/mjobs/MJCalibTest.h	(revision 6191)
@@ -0,0 +1,90 @@
+#ifndef MARS_MJCalibTest
+#define MARS_MJCalibTest
+
+#ifndef MARS_MJob
+#include "MJob.h"
+#endif
+#ifndef MARS_MJCalib
+#include "MJCalib.h"
+#endif
+#ifndef MARS_MCalibrationTestCam
+#include "MCalibrationTestCam.h"
+#endif
+#ifndef MARS_MHCalibrationTestTimeCam
+#include "MHCalibrationTestTimeCam.h"
+#endif
+#ifndef MARS_MPedPhotCam
+#include "MPedPhotCam.h"
+#endif
+#ifndef MARS_MBadPixelsCam
+#include "MBadPixelsCam.h"
+#endif
+
+class MParList;
+class MPedestalCam;
+class MCalibrationRelTimeCam;
+class MCalibrationChargeCam;
+class MCalibrationQECam;
+class MExtractor;
+class MExtractTime;
+class MJCalibTest : public MJob, public MJCalib
+{
+private:
+
+  Bool_t  fUseCosmicsFilter;
+
+  MExtractor   *fExtractor;                  // Signal extractor
+  MExtractTime *fTimeExtractor;              // Arrival time extractor  
+  
+  MBadPixelsCam            fBadPixels;
+  MCalibrationTestCam      fTestCam;
+  MHCalibrationTestTimeCam fTestTimeCam;
+  MPedPhotCam              fPedPhotCam;
+
+  enum  Display_t                                      // Possible Display types
+    {
+      kDataCheckDisplay,
+      kNormalDisplay
+    };
+  
+  Display_t fDisplayType;                              // Chosen Display type
+
+  TString fGeometry;
+  
+  Bool_t ReadPedPhotCam();
+  
+  void   DisplayResult(MParList &plist);
+  void   DisplayResultT(MParList &plist);
+
+  Bool_t WriteResult();
+  
+  Bool_t ProcessFile(MPedestalCam &pedcam, MCalibrationChargeCam &calcam, MCalibrationQECam &qecam, 
+		     MCalibrationRelTimeCam &rel, Byte_t filetype);
+
+public:
+
+  MJCalibTest(const char *name=NULL, const char *title=NULL);
+  
+  const char* GetOutputFile() const;
+  
+  MCalibrationTestCam      &GetTestCam()      { return fTestCam; }
+  MHCalibrationTestTimeCam &GetTestTimeCam()  { return fTestTimeCam; }  
+  MPedPhotCam          &GetPedPhotCam() { return fPedPhotCam; }
+  const MBadPixelsCam &GetBadPixels()  const { return fBadPixels; }
+  
+  void SetExtractor(MExtractor* ext)              { fExtractor = ext; }
+  void SetTimeExtractor(MExtractTime* ext)         { fTimeExtractor = ext; }
+  void SetBadPixels(const MBadPixelsCam &bad) { bad.Copy(fBadPixels); }
+  void SetUseCosmicsFilter( const Bool_t b )    { fUseCosmicsFilter = b;  }
+
+  // Displays
+  void SetDataCheckDisplay() { fDisplayType = kDataCheckDisplay; }
+  void SetNormalDisplay()    { fDisplayType = kNormalDisplay;    }
+  
+  Bool_t Process(MPedestalCam &pedcam, MCalibrationChargeCam &calcam, MCalibrationQECam &qecam, 
+		 MCalibrationRelTimeCam &relcam,Byte_t filetype=1);
+  
+  ClassDef(MJCalibTest, 0) // Tool to calibrate and test the calibration run itself
+};
+
+#endif
Index: trunk/MagicSoft/Mars/mjobs/MJCalibrateSignal.cc
===================================================================
--- trunk/MagicSoft/Mars/mjobs/MJCalibrateSignal.cc	(revision 6190)
+++ trunk/MagicSoft/Mars/mjobs/MJCalibrateSignal.cc	(revision 6191)
@@ -114,14 +114,15 @@
 // Default constructor. 
 //
-// Sets fRuns to 0, fExtractor to NULL, 
+// Sets:
+// - fIsInterlaced to kTRUE
+// - fIsRelTimesUpdate to kFALSE
+// - fIsHiLoCalibration to kFALSE
 //
 MJCalibrateSignal::MJCalibrateSignal(const char *name, const char *title)
-    : fRuns(0), fIsInterlaced(kTRUE), fIsRelTimesUpdate(kFALSE), fIsHiLoCalibration(kFALSE),
-      fDataFlag(0)
+    : fIsInterlaced(kTRUE), fIsRelTimesUpdate(kFALSE), fIsHiLoCalibration(kFALSE)
 {
     fName  = name  ? name  : "MJCalibrateSignal";
     fTitle = title ? title : "Tool to calibrate data";
 
-    SetUseRootData();
 }
 
@@ -399,9 +400,9 @@
 
     MFTriggerPattern ftp;
-    ftp.RequireCalibration();
-    //    ftp.DenyCalibration();
-    //    ftp.DenyPedestal();
+    //    ftp.RequireCalibration();
+    ftp.DenyCalibration();
+    ftp.DenyPedestal();
     //    ftp.DenyPinDiode();
-    //    ftp.SetInverted();
+    ftp.SetInverted();
     MContinue conttp(&ftp, "ContTrigPattern");
     // --> tlist2
Index: trunk/MagicSoft/Mars/mjobs/MJCalibrateSignal.h
===================================================================
--- trunk/MagicSoft/Mars/mjobs/MJCalibrateSignal.h	(revision 6190)
+++ trunk/MagicSoft/Mars/mjobs/MJCalibrateSignal.h	(revision 6191)
@@ -6,7 +6,10 @@
 #endif
 
+#ifndef MARS_MJCalib
+#include "MJCalib.h"
+#endif
+
 class TEnv;
 class TList;
-class MRunIter;
 class MTask;
 class MParList;
@@ -17,9 +20,7 @@
 class MBadPixelsCam;
 
-class MJCalibrateSignal : public MJob
+class MJCalibrateSignal : public MJob, public MJCalib
 {
 private:
-
-    MRunIter *fRuns;                    // Data files
 
     Bool_t fIsInterlaced;               // Distinguish interlaced from other calibration
@@ -27,22 +28,4 @@
     Bool_t fIsHiLoCalibration;          // Choose to calibrate the high-gain vs. low-gains
     
-
-    enum DataType_t
-      {
-        kIsUseRawData,
-        kIsUseRootData,
-        kIsUseMC
-      };
-
-    Byte_t    fDataFlag;      // Bit-field to store the data type
-
-    Bool_t IsUseRawData()  const { return TESTBIT(fDataFlag,kIsUseRawData);  }
-    Bool_t IsUseRootData() const { return TESTBIT(fDataFlag,kIsUseRootData); }
-    Bool_t IsUseMC()       const { return TESTBIT(fDataFlag,kIsUseMC);       }
-
-    void   SetUseRawData ( const Bool_t b=kTRUE )  { b ? SETBIT(fDataFlag,kIsUseRawData)  : CLRBIT(fDataFlag,kIsUseRawData);  }
-    void   SetUseRootData( const Bool_t b=kTRUE )  { b ? SETBIT(fDataFlag,kIsUseRootData) : CLRBIT(fDataFlag,kIsUseRootData); }
-    void   SetUseMC      ( const Bool_t b=kTRUE )  { b ? SETBIT(fDataFlag,kIsUseMC)       : CLRBIT(fDataFlag,kIsUseMC);       }
-
     Bool_t CheckEnvLocal();
 
@@ -63,6 +46,4 @@
     void SetHiLoCalibration( const Bool_t b=kTRUE )  { fIsHiLoCalibration = b; }
 
-    void SetInput      ( MRunIter *iter       )  { fRuns = iter; }
-    
     ClassDef(MJCalibrateSignal, 0) // Tool to create a pedestal file (MPedestalCam)
 };
Index: trunk/MagicSoft/Mars/mjobs/MJCalibration.cc
===================================================================
--- trunk/MagicSoft/Mars/mjobs/MJCalibration.cc	(revision 6190)
+++ trunk/MagicSoft/Mars/mjobs/MJCalibration.cc	(revision 6191)
@@ -186,7 +186,7 @@
 //
 MJCalibration::MJCalibration(const char *name, const char *title) 
-    : fRuns(0), fExtractor(NULL), fTimeExtractor(NULL), 
+    : fExtractor(NULL), fTimeExtractor(NULL), 
       fColor(MCalibrationCam::kNONE), fDisplayType(kDataCheckDisplay),
-      fDataFlag(0), fGeometry("MGeomCamMagic")
+      fGeometry("MGeomCamMagic")
 {
 
Index: trunk/MagicSoft/Mars/mjobs/MJCalibration.h
===================================================================
--- trunk/MagicSoft/Mars/mjobs/MJCalibration.h	(revision 6190)
+++ trunk/MagicSoft/Mars/mjobs/MJCalibration.h	(revision 6191)
@@ -5,4 +5,7 @@
 #include "MJob.h"
 #endif
+#ifndef MARS_MJCalib
+#include "MJCalib.h"
+#endif
 #ifndef MARS_MCalibrationIntensityChargeCam
 #include "MCalibrationIntensityChargeCam.h"
@@ -45,5 +48,4 @@
 
 class MTask;
-class MRunIter;
 class MParList;
 class MPedestalCam;
@@ -55,5 +57,5 @@
 class MHCamera;
 
-class MJCalibration : public MJob
+class MJCalibration : public MJob, public MJCalib
 {
 private:
@@ -96,6 +98,4 @@
   TString  fReferenceFile;                 // File name containing the reference values
 
-  MRunIter       *fRuns;                                // Calibration files
-  
   MExtractor     *fExtractor;                           // Signal extractor
   MExtractTime   *fTimeExtractor;                       // Arrival Time extractor
@@ -146,22 +146,4 @@
   Byte_t fFlags;                                       // Bit-field for the flags
   
-    enum DataType_t
-      {
-        kIsUseRawData,
-        kIsUseRootData,
-        kIsUseMC
-      };
-
-    Byte_t    fDataFlag;      // Bit-field to store the data type
-
-    Bool_t IsUseRawData()  const { return TESTBIT(fDataFlag,kIsUseRawData);  }
-    Bool_t IsUseRootData() const { return TESTBIT(fDataFlag,kIsUseRootData); }
-    Bool_t IsUseMC()       const { return TESTBIT(fDataFlag,kIsUseMC);       }
-
-    void   SetUseRawData ( const Bool_t b=kTRUE )  { b ? SETBIT(fDataFlag,kIsUseRawData)  : CLRBIT(fDataFlag,kIsUseRawData);  }
-    void   SetUseRootData( const Bool_t b=kTRUE )  { b ? SETBIT(fDataFlag,kIsUseRootData) : CLRBIT(fDataFlag,kIsUseRootData); }
-    void   SetUseMC      ( const Bool_t b=kTRUE )  { b ? SETBIT(fDataFlag,kIsUseMC)       : CLRBIT(fDataFlag,kIsUseMC);       }
-
-
   TString fGeometry;                                   // Class name geometry
   
@@ -216,5 +198,4 @@
   void SetExtractor    ( MExtractor* ext)                            { fExtractor = ext;     }
   void SetExtractorCam ( const MPedestalCam  &ped)                   { ped.Copy(fExtractorCam); fExtractorCam.SetName(ped.GetName()); }
-  void SetInput        ( MRunIter *iter)                             { fRuns = iter;         }
   void SetQECam        ( const MCalibrationQECam &qe)                { qe.Copy(fQECam);      }
   void SetTimeExtractor( MExtractTime* ext)                          { fTimeExtractor = ext; }
Index: trunk/MagicSoft/Mars/mjobs/MJExtractCalibTest.cc
===================================================================
--- trunk/MagicSoft/Mars/mjobs/MJExtractCalibTest.cc	(revision 6190)
+++ 	(revision )
@@ -1,537 +1,0 @@
-/* ======================================================================== *\
-!
-! *
-! * This file is part of MARS, the MAGIC Analysis and Reconstruction
-! * Software. It is distributed to you in the hope that it can be a useful
-! * and timesaving tool in analysing Data of imaging Cerenkov telescopes.
-! * It is distributed WITHOUT ANY WARRANTY.
-! *
-! * Permission to use, copy, modify and distribute this software and its
-! * documentation for any purpose is hereby granted without fee,
-! * provided that the above copyright notice appear in all copies and
-! * that both that copyright notice and this permission notice appear
-! * in supporting documentation. It is provided "as is" without express
-! * or implied warranty.
-! *
-!
-!
-!   Author(s): Markus Gaug, 04/2004 <mailto:markus@ifae.es>
-!
-!   Copyright: MAGIC Software Development, 2000-2004
-!
-!
-\* ======================================================================== */
-
-/////////////////////////////////////////////////////////////////////////////
-//
-//  MJExtractCalibTest
-//
-// If the flag SetDataCheckDisplay() is set, only the most important distributions
-//  are displayed. 
-// Otherwise, (default: SetNormalDisplay()), a good selection of plots is given
-//
-/////////////////////////////////////////////////////////////////////////////
-#include "MJExtractCalibTest.h"
-
-#include <TFile.h>
-#include <TStyle.h>
-#include <TCanvas.h>
-#include <TSystem.h>
-
-#include "MLog.h"
-#include "MLogManip.h"
-
-#include "MRunIter.h"
-#include "MParList.h"
-#include "MTaskList.h"
-#include "MTaskEnv.h"
-#include "MEvtLoop.h"
-
-#include "MHCamera.h"
-
-#include "MPedestalCam.h"
-#include "MBadPixelsCam.h"
-#include "MBadPixelsTreat.h"
-#include "MBadPixelsCalc.h"
-#include "MBadPixelsMerge.h"
-#include "MCerPhotEvt.h"
-#include "MArrivalTime.h"
-#include "MCalibrationChargeCam.h"
-#include "MCalibrationRelTimeCam.h"
-#include "MCalibrationQECam.h"
-#include "MCalibrationTestCam.h"
-#include "MCalibrationTestCalc.h"
-#include "MHCamEvent.h"
-#include "MHCalibrationTestCam.h"
-
-#include "MReadMarsFile.h"
-#include "MGeomApply.h"
-#include "MExtractTimeAndChargeSlidingWindow.h"
-#include "MExtractor.h"
-#include "MExtractTime.h"
-#include "MExtractTimeFastSpline.h"
-#include "MFCosmics.h"
-#include "MContinue.h"
-#include "MFillH.h"
-#include "MCalibrateData.h"
-#include "MCalibrateRelTimes.h"
-
-#include "MTriggerPattern.h"
-#include "MTriggerPatternDecode.h"
-#include "MFTriggerPattern.h"
-
-#include "MStatusDisplay.h"
-
-ClassImp(MJExtractCalibTest);
-
-using namespace std;
-// --------------------------------------------------------------------------
-//
-// Default constructor. 
-//
-// Sets fUseCosmicsFilter to kTRUE, fRuns to 0, fExtractor to NULL, fTimeExtractor to NULL
-// fDisplay to kNormalDisplay
-//
-MJExtractCalibTest::MJExtractCalibTest(const char *name, const char *title) 
-    : fUseCosmicsFilter(kTRUE), fRuns(NULL), fExtractor(NULL), fTimeExtractor(NULL),
-      fDisplayType(kNormalDisplay), fGeometry("MGeomCamMagic")
-{
-    fName  = name  ? name  : "MJExtractCalibTest";
-    fTitle = title ? title : "Tool to extract, calibrate and test signals from a file";
-}
-
-
-void MJExtractCalibTest::DisplayResult(MParList &plist)
-{
-  if (!fDisplay)
-    return;
-  
-  //
-  // Update display
-  //
-  TString title = fDisplay->GetTitle();
-  title += "--  Extraction-Calibration-Test ";
-  title += fRuns->GetRunsAsString();
-  title += "  --";
-  fDisplay->SetTitle(title);
-
-  //
-  // Get container from list
-  //
-  MGeomCam  &geomcam = *(MGeomCam*) plist.FindObject("MGeomCam");
-  MHCalibrationTestCam &testcam = *(MHCalibrationTestCam*)plist.FindObject("MHCalibrationTestCam");
-  
-  // Create histograms to display
-  MHCamera disp1 (geomcam, "Test;Photons",           "Mean of calibrated Photons");
-  MHCamera disp2 (geomcam, "Test;SigmaPhotons",      "Sigma of calibrated photons");
-  MHCamera disp3 (geomcam, "Test;PhotonsPerArea",    "Equiv. Cherenkov Photons per Area");
-  MHCamera disp4 (geomcam, "Test;SigmaPhotPerArea",  "Sigma equiv. Cher. Photons per Area");
-  MHCamera disp5 (geomcam, "Test;Phot",              "Calibrated Photons");
-  MHCamera disp6 (geomcam, "Test;PhotPerArea",       "Calibrated Photons per Area");
-  MHCamera disp7 (geomcam, "Test;NotInterpolate",    "Not interpolated pixels");
-  MHCamera disp8 (geomcam, "Test;DeviatingPhots",    "Deviating Number Photons");
-
-  // Fitted charge means and sigmas
-  disp1.SetCamContent(testcam,  0);
-  disp1.SetCamError(  testcam,  1);
-  disp2.SetCamContent(testcam,  2);
-  disp2.SetCamError(  testcam,  3);
-  disp3.SetCamContent(testcam,  7);
-  disp3.SetCamError(  testcam,  8);
-  disp4.SetCamContent(testcam,  9);
-  disp4.SetCamError(  testcam,  10);
-
-  disp5.SetCamContent(fTestCam,  0);
-  disp5.SetCamError(  fTestCam,  1);
-  disp6.SetCamContent(fTestCam,  2);
-  disp6.SetCamError(  fTestCam,  3);
-  disp7.SetCamError(  fTestCam,  4);
-
-  disp8.SetCamError(  fBadPixels, 22);
-
-
-  disp1.SetYTitle("Photons");
-  disp2.SetYTitle("\\sigma_{phot}");
-  disp3.SetYTitle("Photons per Area [mm^{-2}]");
-  disp4.SetYTitle("\\sigma_{phot} per Area [mm^{-2}]");
-
-  disp5.SetYTitle("Photons");
-  disp6.SetYTitle("Photons per Area [mm^{-2}]");
-  disp7.SetYTitle("[1]");
-  disp8.SetYTitle("[1]");
-  
-  gStyle->SetOptStat(1111);
-  gStyle->SetOptFit();
-
-  if (fDisplayType == kNormalDisplay)
-    {
-
-      TCanvas &c = fDisplay->AddTab("TestCharges");
-      c.Divide(4,4);
-      
-      disp1.CamDraw(c, 1, 4, 2, 1);
-      disp2.CamDraw(c, 2, 4, 2, 1);        
-      disp3.CamDraw(c, 3, 4, 1, 1);        
-      disp4.CamDraw(c, 4, 4, 2, 1);        
-    }
-  
-  TCanvas &c2 = fDisplay->AddTab("TestResult");
-  c2.Divide(2,4);
-
-  disp5.CamDraw(c2, 1, 2, 2, 1);
-  disp6.CamDraw(c2, 2, 2, 2, 1);        
-
-  TCanvas &c3 = fDisplay->AddTab("TestDefects");
-  c3.Divide(2,2);
-
-  disp7.CamDraw(c3, 1, 2, 0);
-  disp8.CamDraw(c3, 2, 2, 0);        
-
-  return;
-
-}
-
-
-void MJExtractCalibTest::DisplayResultT(MParList &plist)
-{
-  if (!fDisplay)
-    return;
-  
-  //
-  // Update display
-  //
-  TString title = fDisplay->GetTitle();
-  title += "--  Extraction-Calibration-Test-Time";
-  title += fRuns->GetRunsAsString();
-  title += "  --";
-  fDisplay->SetTitle(title);
-
-  //
-  // Get container from list
-  //
-  MGeomCam &geomcam = *(MGeomCam*)plist.FindObject("MGeomCam");
-  
-  // Create histograms to display
-  MHCamera disp1 (geomcam, "Test;Arr.Times",           "Mean of calibrated Arr.Times");
-  MHCamera disp2 (geomcam, "Test;SigmaArr.Times",      "Sigma of calibrated Arr.Times");
-
-  // Fitted charge means and sigmas
-  disp1.SetCamContent(fTestTimeCam,  0);
-  disp1.SetCamError(  fTestTimeCam,  1);
-  disp2.SetCamContent(fTestTimeCam,  2);
-  disp2.SetCamError(  fTestTimeCam,  3);
-
-  disp1.SetYTitle("Mean Arr.Times [FADC units]");
-  disp2.SetYTitle("\\sigma_{t} [FADC units]");
-  
-  gStyle->SetOptStat(1111);
-  gStyle->SetOptFit();
-
-  TCanvas &c = fDisplay->AddTab("TestTimes");
-  c.Divide(2,4);
-
-  disp1.CamDraw(c, 1, 2,  5, 1);
-  disp2.CamDraw(c, 2, 2,  5, 1);        
-
-  return;
-
-}
-
-
-const char* MJExtractCalibTest::GetOutputFile() const
-{
-
-  if (fSequence.IsValid())
-    return Form("%s/test%08d.root", (const char*)fPathOut, fSequence.GetSequence());
-  
-  if (!fRuns)
-    return "";
-  
-  return Form("%s/%s-Test.root", (const char*)fPathOut, (const char*)fRuns->GetRunsAsFileName());
-  
-}
-
-
-Bool_t MJExtractCalibTest::Process(MPedestalCam &pedcam, 
-				   MCalibrationChargeCam &calcam, MCalibrationQECam &qecam, 
-				   MCalibrationRelTimeCam &reltime, 
-				   Byte_t filetype)
-{
-    // const TString fname = GetOutputFile();
-  
-//  if (gSystem->AccessPathName(fname, kFileExists))
-    return ProcessFile(pedcam,calcam,qecam,reltime,filetype);
-  
-    // return kTRUE;
-}
-
-Bool_t MJExtractCalibTest::ProcessFile(MPedestalCam &pedcam, 
-				       MCalibrationChargeCam &calcam, MCalibrationQECam &qecam, 
-				       MCalibrationRelTimeCam &relcam,
-				       Byte_t filetype)
-{
-  if (!fRuns)
-    {
-      *fLog << err << "No Runs choosen... abort." << endl;
-      return kFALSE;
-    }
-  if (fRuns->GetNumRuns() != fRuns->GetNumEntries())
-    {
-      *fLog << err << "Number of files found doesn't match number of runs... abort." << endl;
-      return kFALSE;
-    }
-
-  *fLog << inf;
-  fLog->Separator(GetDescriptor());
-  *fLog << "Calculate MExtractedSignalCam from Runs " << fRuns->GetRunsAsString() << endl;
-  *fLog << endl;
-
-  MBadPixelsCam badcam;
-  
-  // Setup Lists
-  MParList plist;
-  plist.AddToList(this); // take care of fDisplay!
-  plist.AddToList(&fTestCam);
-  plist.AddToList(&fTestTimeCam);
-  plist.AddToList(&badcam);
-  plist.AddToList(&pedcam);
-  plist.AddToList(&calcam);
-  plist.AddToList(&qecam);
-  plist.AddToList(&relcam);
-
-  MCerPhotEvt          cerphot;
-  MPedPhotCam          pedphot;
-  MHCalibrationTestCam testcam;
-
-  plist.AddToList(&cerphot);
-  plist.AddToList(&pedphot);
-  plist.AddToList(&testcam);
-
-  pedcam.SetName("MPedestalFundamental");
-  
-  MTaskList tlist;
-  plist.AddToList(&tlist);
-
-  // Setup Task-lists
-  MReadMarsFile read("Events");
-  read.DisableAutoScheme();
-  static_cast<MRead&>(read).AddFiles(*fRuns);
-  
-  // Check for interleaved events
-  MTriggerPatternDecode decode;
-  MFTriggerPattern      fcalib;
-  fcalib.DenyCalibration();
-  MContinue conttp(&fcalib, "ContTrigPattern");
-
-  MGeomApply            apply; // Only necessary to craete geometry
-  apply.SetGeometry(fGeometry);  
-  MBadPixelsMerge       merge(&fBadPixels);
-
-  MExtractTimeAndChargeSlidingWindow extrsw;
-  MExtractTimeFastSpline             extime;
-  extime.SetPedestals(&pedcam);
-
-  MTaskEnv taskenv1("ExtractSignal");
-  MTaskEnv taskenv2("ExtractTime");
-
-  if (fExtractor)
-    { 
-      fExtractor->SetPedestals(&pedcam);
-      taskenv1.SetDefault(fExtractor);
-    }
-  if (fTimeExtractor)
-    {
-      fTimeExtractor->SetPedestals(&pedcam);
-      taskenv2.SetDefault(fTimeExtractor);
-    }
-  else
-    {
-      extrsw.SetPedestals(&pedcam);
-      extrsw.SetWindowSize(8,8);
-      taskenv2.SetDefault(&extrsw);
-      *fLog << warn << GetDescriptor() 
-            << ": No extractor has been chosen, take default MExtractTimeAndChargeSlidingWindow " << endl;
-    }
-
-  MCalibrateData        photcalc;
-  MCalibrateRelTimes    caltimes;
-  if (filetype==3) // MC file
-    {
-      photcalc.SetCalibrationMode(MCalibrateData::kFfactor);
-      photcalc.SetPedestalFlag(MCalibrateData::kRun);
-      photcalc.AddPedestal("MPedestalCam", "MPedPhotFundamental");
-    }
-  else
-    {
-      photcalc.SetCalibrationMode(MCalibrateData::kFfactor);
-      photcalc.AddPedestal("Fundamental");
-      photcalc.SetPedestalFlag(MCalibrateData::kEvent);
-      photcalc.SetSignalType(MCalibrateData::kPhot);
-    }
-
-  MBadPixelsCalc        badcalc;
-  MBadPixelsTreat       badtreat;
-  badtreat.SetProcessTimes(kFALSE);
-
-  badcalc.SetNamePedPhotCam("MPedPhotFundamental");
-  //badtreat.SetUseInterpolation();
-  badtreat.AddNamePedPhotCam("MPedPhotFundamental");
-
-  MCalibrationTestCalc  testcalc;
-
-  if (!fSequence.IsValid())
-    {
-      testcalc.SetOutputPath(fPathOut);
-      testcalc.SetOutputFile(Form("%s-TestCalibStat.txt",(const char*)fRuns->GetRunsAsFileName()));
-    }
-  
-  MHCamEvent evt0(0,"Signal", "Un-Calibrated Signal;;S [FADC cnts]" );
-  MHCamEvent evt1(3,"CalSig", "Calibrated and Interpolated Signal;;S [\\gamma]");
-  MHCamEvent evt2(0,"Times" , "Arrival Time;;T [slice]");
-
-  MFillH fill0(&evt0, "MExtractedSignalCam", "FillUncalibrated");
-  MFillH fill1(&evt1, "MCerPhotEvt", "FillCalibrated");
-  MFillH fill2(&evt2, "MArrivalTime","FillTimes");
-  
-  MFillH fillcam("MHCalibrationTestCam", "MCerPhotEvt");
-  fillcam.SetNameTab("Test");
-  MFillH filltme("MHCalibrationTestTimeCam", "MArrivalTime");
-  filltme.SetNameTab("TestTime");
-
-  MFCosmics cosmics;
-  cosmics.SetNamePedestalCam("MPedestalFundamental");
-  MContinue contcos(&cosmics,"ContCosmics");
-  
-  tlist.AddToList(&read);
-  tlist.AddToList(&decode);
-  tlist.AddToList(&apply);
-  tlist.AddToList(&merge);
-  tlist.AddToList(&conttp);
-  tlist.AddToList(&taskenv1);
-  if (!fExtractor->InheritsFrom("MExtractTimeAndCharge"))
-    tlist.AddToList(&taskenv2);
-  tlist.AddToList(&contcos);
-  tlist.AddToList(&fill0);
-  tlist.AddToList(&photcalc);
-  tlist.AddToList(&caltimes);
-  tlist.AddToList(&badcalc);
-  tlist.AddToList(&badtreat);
-  tlist.AddToList(&fill1);
-  tlist.AddToList(&fill2);
-  tlist.AddToList(&fillcam);
-  tlist.AddToList(&filltme);
-  tlist.AddToList(&testcalc);
-  
-  // Create and setup the eventloop
-  MEvtLoop evtloop(fName);
-  evtloop.SetParList(&plist);
-  evtloop.SetDisplay(fDisplay);
-  evtloop.SetLogStream(fLog);
-  
-  // Execute first analysis
-  if (!evtloop.Eventloop())
-    {
-      *fLog << err << GetDescriptor() << ": Failed." << endl;
-      return kFALSE;
-    }
-  
-  tlist.PrintStatistics();
-  
-  DisplayResult(plist);
-
-  if (!WriteResult())
-    return kFALSE;
-
-  *fLog << inf << GetDescriptor() << ": Done." << endl;
-  
-  return kTRUE;
-}
-
-Bool_t MJExtractCalibTest::ReadPedPhotCam()
-{
-
-  const TString fname = GetOutputFile();
-  
-  if (gSystem->AccessPathName(fname, kFileExists))
-    {
-      *fLog << err << "Input file " << fname << " doesn't exist." << endl;
-      return kFALSE;
-    }
-  
-  *fLog << inf << "Reading from file: " << fname << endl;
-  
-  TFile file(fname, "READ");
-  if (fPedPhotCam.Read()<=0)
-    {
-      *fLog << "Unable to read MPedPhotCam from " << fname << endl;
-      return kFALSE;
-    }
-
-  if (file.FindKey("MBadPixelsCam"))
-    {
-      MBadPixelsCam bad;
-      if (bad.Read()<=0)
-        {
-          *fLog << "Unable to read MBadPixelsCam from " << fname << endl;
-          return kFALSE;
-        }
-      fBadPixels.Merge(bad);
-    }
-  
-  if (fDisplay /*&& !fDisplay->GetCanvas("Pedestals")*/) // FIXME!
-    fDisplay->Read();
-  
-  return kTRUE;
-}
-
-Bool_t MJExtractCalibTest::WriteResult()
-{
-    
-    if (fPathOut.IsNull())
-        return kTRUE;
-    
-    const TString oname(GetOutputFile());
-
-    *fLog << inf << "Writing to file: " << oname << endl;
-    
-    TFile file(oname, "UPDATE");
-    
-    if (fDisplay && fDisplay->Write()<=0)
-    {
-        *fLog << err << "Unable to write MStatusDisplay to " << oname << endl;
-        return kFALSE;
-    }
-
-    if (fPedPhotCam.Write()<=0)
-    {
-        *fLog << err << "Unable to write MPedPhotCam to " << oname << endl;
-        return kFALSE;
-    }
-
-    if (fTestCam.Write()<=0)
-    {
-        *fLog << err << "Unable to write MCalibrationTestCam to " << oname << endl;
-        return kFALSE;
-    }
-
-    if (fTestTimeCam.Write()<=0)
-    {
-        *fLog << err << "Unable to write MCalibrationTestCam to " << oname << endl;
-        return kFALSE;
-    }
-
-    return kTRUE;
-
-}
-
-
-
-Bool_t MJExtractCalibTest::CheckEnv()
-{
-    if (HasEnv("DataCheckDisplay"))
-      fDisplayType = GetEnv("DataCheckDisplay", kFALSE) ? kDataCheckDisplay : kNormalDisplay;
-
-    SetOverwrite(GetEnv("Overwrite", fOverwrite));
-
-    return MJob::CheckEnv();
-}
Index: trunk/MagicSoft/Mars/mjobs/MJExtractCalibTest.h
===================================================================
--- trunk/MagicSoft/Mars/mjobs/MJExtractCalibTest.h	(revision 6190)
+++ 	(revision )
@@ -1,92 +1,0 @@
-#ifndef MARS_MJExtractCalibTest
-#define MARS_MJExtractCalibTest
-
-#ifndef MARS_MJob
-#include "MJob.h"
-#endif
-#ifndef MARS_MCalibrationTestCam
-#include "MCalibrationTestCam.h"
-#endif
-#ifndef MARS_MHCalibrationTestTimeCam
-#include "MHCalibrationTestTimeCam.h"
-#endif
-#ifndef MARS_MPedPhotCam
-#include "MPedPhotCam.h"
-#endif
-#ifndef MARS_MBadPixelsCam
-#include "MBadPixelsCam.h"
-#endif
-
-class MRunIter;
-class MParList;
-class MPedestalCam;
-class MCalibrationRelTimeCam;
-class MCalibrationChargeCam;
-class MCalibrationQECam;
-class MExtractor;
-class MExtractTime;
-class MJExtractCalibTest : public MJob
-{
-private:
-
-  Bool_t  fUseCosmicsFilter;
-  
-  MRunIter     *fRuns;                       // Data files
-  MExtractor   *fExtractor;                  // Signal extractor
-  MExtractTime *fTimeExtractor;              // Arrival time extractor  
-  
-  MBadPixelsCam            fBadPixels;
-  MCalibrationTestCam      fTestCam;
-  MHCalibrationTestTimeCam fTestTimeCam;
-  MPedPhotCam              fPedPhotCam;
-
-  enum  Display_t                                      // Possible Display types
-    {
-      kDataCheckDisplay,
-      kNormalDisplay
-    };
-  
-  Display_t fDisplayType;                              // Chosen Display type
-
-  TString fGeometry;
-  
-  Bool_t ReadPedPhotCam();
-  
-  void   DisplayResult(MParList &plist);
-  void   DisplayResultT(MParList &plist);
-
-  Bool_t WriteResult();
-  
-  Bool_t ProcessFile(MPedestalCam &pedcam, MCalibrationChargeCam &calcam, MCalibrationQECam &qecam, 
-		     MCalibrationRelTimeCam &rel, Byte_t filetype);
-
-  Bool_t CheckEnv();
-  
-public:
-  MJExtractCalibTest(const char *name=NULL, const char *title=NULL);
-  
-  void SetInput(MRunIter *iter) { fRuns = iter; }
-  
-  const char* GetOutputFile() const;
-  
-  MCalibrationTestCam      &GetTestCam()      { return fTestCam; }
-  MHCalibrationTestTimeCam &GetTestTimeCam()  { return fTestTimeCam; }  
-  MPedPhotCam          &GetPedPhotCam() { return fPedPhotCam; }
-  const MBadPixelsCam &GetBadPixels()  const { return fBadPixels; }
-  
-  void SetExtractor(MExtractor* ext)              { fExtractor = ext; }
-  void SetTimeExtractor(MExtractTime* ext)         { fTimeExtractor = ext; }
-  void SetBadPixels(const MBadPixelsCam &bad) { bad.Copy(fBadPixels); }
-  void SetUseCosmicsFilter( const Bool_t b )    { fUseCosmicsFilter = b;  }
-
-  // Displays
-  void SetDataCheckDisplay() { fDisplayType = kDataCheckDisplay; }
-  void SetNormalDisplay()    { fDisplayType = kNormalDisplay;    }
-  
-  Bool_t Process(MPedestalCam &pedcam, MCalibrationChargeCam &calcam, MCalibrationQECam &qecam, 
-		 MCalibrationRelTimeCam &relcam,Byte_t filetype=1);
-  
-  ClassDef(MJExtractCalibTest, 0) // Tool to extract, calibrate and test the signal 
-};
-
-#endif
Index: trunk/MagicSoft/Mars/mjobs/MJPedestal.cc
===================================================================
--- trunk/MagicSoft/Mars/mjobs/MJPedestal.cc	(revision 6190)
+++ trunk/MagicSoft/Mars/mjobs/MJPedestal.cc	(revision 6191)
@@ -101,6 +101,6 @@
 //
 MJPedestal::MJPedestal(const char *name, const char *title) 
-    : fRuns(0), fExtractor(NULL), fDisplayType(kDisplayDataCheck),
-      fExtractType(kUsePedRun), fExtractionType(kFundamental), fDataFlag(0)
+    : fExtractor(NULL), fDisplayType(kDisplayDataCheck),
+      fExtractType(kUsePedRun), fExtractionType(kFundamental)
 {
     fName  = name  ? name  : "MJPedestal";
Index: trunk/MagicSoft/Mars/mjobs/MJPedestal.h
===================================================================
--- trunk/MagicSoft/Mars/mjobs/MJPedestal.h	(revision 6190)
+++ trunk/MagicSoft/Mars/mjobs/MJPedestal.h	(revision 6191)
@@ -4,4 +4,7 @@
 #ifndef MARS_MJob
 #include "MJob.h"
+#endif
+#ifndef MARS_MJCalib
+#include "MJCalib.h"
 #endif
 #ifndef MARS_MPedestalCam
@@ -14,5 +17,4 @@
 class TCanvas;
 class MParList;
-class MRunIter;
 class MHCamera;
 class TH1D;
@@ -21,5 +23,5 @@
 class MEvtLoop;
 
-class MJPedestal : public MJob
+class MJPedestal : public MJob, public MJCalib
 {
 private:
@@ -46,5 +48,4 @@
     TString     fReferenceFile;              // File name containing the reference values
 
-    MRunIter   *fRuns;                       // Used pedestal runs
     MExtractor *fExtractor;                  // Signal extractor, used to find the nr. of used FADC slices
 
@@ -64,21 +65,4 @@
     enum Extraction { kFundamental, kWithExtractorRndm, kWithExtractor };
     Int_t fExtractionType;                   // Flag if the extractor is used to calculate the pedestals
-
-    enum DataType_t
-      {
-        kIsUseRawData,
-        kIsUseRootData,
-        kIsUseMC
-      };
-
-    Byte_t    fDataFlag;      // Bit-field to store the data type
-
-    Bool_t IsUseRawData()  const { return TESTBIT(fDataFlag,kIsUseRawData);  }
-    Bool_t IsUseRootData() const { return TESTBIT(fDataFlag,kIsUseRootData); }
-    Bool_t IsUseMC()       const { return TESTBIT(fDataFlag,kIsUseMC);       }
-
-    void   SetUseRawData ( const Bool_t b=kTRUE )  { b ? SETBIT(fDataFlag,kIsUseRawData)  : CLRBIT(fDataFlag,kIsUseRawData);  }
-    void   SetUseRootData( const Bool_t b=kTRUE )  { b ? SETBIT(fDataFlag,kIsUseRootData) : CLRBIT(fDataFlag,kIsUseRootData); }
-    void   SetUseMC      ( const Bool_t b=kTRUE )  { b ? SETBIT(fDataFlag,kIsUseMC)       : CLRBIT(fDataFlag,kIsUseMC);       }
 
     MExtractor *ReadCalibration() const;
@@ -115,5 +99,4 @@
     void SetPedestals(const MPedestalCam  &ped) { ped.Copy(fPedestalCamIn); }
     void SetExtractor(MExtractor* ext);
-    void SetInput(MRunIter  *iter)              { fRuns      = iter;    }
     void SetUseData()                           { fExtractType = kUseData;   }
     void SetUseHists()                          { fExtractType = kUseHists;  }
Index: trunk/MagicSoft/Mars/mjobs/Makefile
===================================================================
--- trunk/MagicSoft/Mars/mjobs/Makefile	(revision 6190)
+++ trunk/MagicSoft/Mars/mjobs/Makefile	(revision 6191)
@@ -27,4 +27,5 @@
 SRCFILES = MSequence.cc \
            MJob.cc \
+           MJCalib.cc \
 	   MJStar.cc \
 	   MJPedestal.cc \
@@ -33,5 +34,5 @@
            MJCalibrateSignalFromOutside.cc \
            MJExtractSignal.cc \
-           MJExtractCalibTest.cc
+           MJCalibTest.cc
 
 ############################################################
