Index: trunk/MagicSoft/Mars/Changelog
===================================================================
--- trunk/MagicSoft/Mars/Changelog	(revision 2307)
+++ trunk/MagicSoft/Mars/Changelog	(revision 2308)
@@ -1,3 +1,16 @@
                                                  -*-*- END OF LINE -*-*-
+
+ 2003/08/21: Thomas Bretz
+
+   * manalysis/MCT1FindSupercuts.[h,cc], manalysis/MCT1Supercuts.[h,cc], 
+     manalysis/MCT1SupercutsCalc.[h,cc], manalysis/MMinuitInterface.[h,cc]:
+     - changed some variables and member functions with respect to an upcoming
+       Minimization Class
+     - simplified some calls
+     - replaced fixed size arrays by variable size arrays
+     - added some sanity checks
+     - simplified some variable usage
+
+
 
  2003/08/20: Thomas Bretz
Index: trunk/MagicSoft/Mars/manalysis/MCT1FindSupercuts.cc
===================================================================
--- trunk/MagicSoft/Mars/manalysis/MCT1FindSupercuts.cc	(revision 2307)
+++ trunk/MagicSoft/Mars/manalysis/MCT1FindSupercuts.cc	(revision 2308)
@@ -104,49 +104,31 @@
     MEvtLoop *evtloopfcn = (MEvtLoop*)gMinuit->GetObjectFit();
 
-    MParList *plistfcn  = 
-              (MParList*)evtloopfcn->GetParList(); 
-
-    MCT1Supercuts *super  = 
-              (MCT1Supercuts*)plistfcn->FindObject("MCT1Supercuts"); 
+    MParList *plistfcn   = (MParList*)evtloopfcn->GetParList();
+
+    MCT1Supercuts *super = (MCT1Supercuts*)plistfcn->FindObject("MCT1Supercuts");
     if (!super)
     {
-      gLog << "fcnSupercuts : MCT1Supercuts object '" << "MCT1Supercuts"
+        gLog << "fcnSupercuts : MCT1Supercuts object '" << "MCT1Supercuts"
             << "' not found... aborting" << endl;
-      return;
-    }
-
-    MHCT1Supercuts *plotsuper  = 
-              (MHCT1Supercuts*)plistfcn->FindObject("MHCT1Supercuts"); 
-    if (!plotsuper)
-    {
-      gLog << "fcnSupercuts : MHCT1Supercuts object '" << "MHCT1Supercuts"
-            << "' not found... aborting" << endl;
-      return;
-    }
-
-
-    //-------------------------------------------------------
+        return;
+    }
+
+    //
     // transfer current parameter values to MCT1Supercuts
     //
-    Double_t fMin,   fEdm,  fErrdef;
-    Int_t    fNpari, fNparx, fIstat;
-    gMinuit->mnstat(fMin, fEdm, fErrdef, fNpari, fNparx, fIstat);
-
-    //gLog << "fcnSupercuts : npar, fNpari, fNparx = " << npar << ",  " 
-    //     << fNpari  << ",  " << fNparx << endl;
-
-    TArrayD d(fNparx, par);
-    super->SetParams(fNparx, d);
-
-
-    //-------------------------------------------
+    super->SetParameters(TArrayD(npar, par));
+
+
+    //
     // plot alpha with the current cuts
+    //
     evtloopfcn->Eventloop();
 
-    TString  mh3Name = "AlphaFcn";
-    MH3* alpha = (MH3*)plistfcn->FindObject(mh3Name, "MH3");
+    MH3* alpha = (MH3*)plistfcn->FindObject("AlphaFcn", "MH3");
+    if (!alpha)
+        return;
 
     TH1 &alphaHist = alpha->GetHist();
-    alphaHist.SetXTitle("|alpha|  [\\circ]");  
+    //alphaHist.SetXTitle("|\\alpha|  [\\circ]");
 
     //-------------------------------------------
@@ -159,25 +141,25 @@
     // calculate significance of gamma signal in the alpha plot
   
-    Double_t alphasig = 20.0;
-    Double_t alphamin = 30.0;
-    Double_t alphamax = 90.0;
-    Int_t    degree   =    4;
-
-    Bool_t   drawpoly;
-    Bool_t   fitgauss;
-    if ( iflag == 3)
-    {
-      drawpoly  = kTRUE;
-      fitgauss  = kTRUE;
+    const Double_t alphasig = 20.0;
+    const Double_t alphamin = 30.0;
+    const Double_t alphamax = 90.0;
+    const Int_t    degree   =    4;
+
+    Bool_t drawpoly;
+    Bool_t fitgauss;
+    if (iflag == 3)
+    {
+        drawpoly  = kTRUE;
+        fitgauss  = kTRUE;
     }
     else
     {
-      drawpoly  = kFALSE;
-      fitgauss  = kFALSE;
+        drawpoly  = kFALSE;
+        fitgauss  = kFALSE;
     }
     drawpoly  = kFALSE;
     fitgauss  = kFALSE;
 
-    Bool_t   print     = kTRUE;
+    const Bool_t print = kTRUE;
 
     MHFindSignificance findsig;
@@ -185,6 +167,6 @@
     findsig.SetReduceDegree(kFALSE);
     
-    Bool_t rc = findsig.FindSigma(&alphaHist, alphamin, alphamax, degree, 
-				  alphasig, drawpoly, fitgauss, print);
+    const Bool_t rc = findsig.FindSigma(&alphaHist, alphamin, alphamax, degree,
+                                        alphasig, drawpoly, fitgauss, print);
 
     //=================================================================
@@ -196,17 +178,18 @@
     if (!rc)
     {
-      gLog << "fcnSupercuts : FindSigma() failed" << endl;
-      f = 1.e10;
-      return;
+        gLog << "fcnSupercuts : FindSigma() failed" << endl;
+        f = 1.e10;
+        return;
     }
 
     // plot some quantities during the optimization
-    plotsuper->Fill(&findsig);
-
+    MHCT1Supercuts *plotsuper = (MHCT1Supercuts*)plistfcn->FindObject("MHCT1Supercuts");
+    if (plotsuper)
+        plotsuper->Fill(&findsig);
 
     //------------------------
     // get significance
-    Double_t significance = findsig.GetSignificance();
-    f = significance>0.0 ? -significance : 0.0;
+    const Double_t significance = findsig.GetSignificance();
+    f = significance>0 ? -significance : 0;
 
 
@@ -233,20 +216,8 @@
 //
 MCT1FindSupercuts::MCT1FindSupercuts(const char *name, const char *title)
+: fHowManyTrain(10000), fHowManyTest(10000), fMatrixFilter(NULL)
 {
     fName  = name  ? name  : "MCT1FindSupercuts";
     fTitle = title ? title : "Optimizer of the supercuts";
-
-    //---------------------------
-    // default values 
-    fFilenameTrain = "";
-    fFilenameTest  = "";
-    fFilenameParam = "";
-
-    fHowManyTrain = 10000;
-    fHowManyTest  = 10000;
-
-    fHadronnessName = "";
-
-    fMatrixFilter = NULL;
 
     //---------------------------
@@ -291,6 +262,6 @@
 	                  const Int_t howmanytrain, MH3 &hreftrain)
 {
-    if ( nametrain == ""  ||  howmanytrain <= 0 )
-      return kFALSE;
+    if (nametrain.IsNull() || howmanytrain <= 0)
+        return kFALSE;
 
     *fLog << "=============================================" << endl;
@@ -344,5 +315,5 @@
     fMatrixTrain->Print("SizeCols");
     Int_t howmanygenerated = fMatrixTrain->GetM().GetNrows();
-    if ( fabs(howmanygenerated-howmanytrain) > 3.0*sqrt(howmanytrain) )
+    if (TMath::Abs(howmanygenerated-howmanytrain) > TMath::Sqrt(9.*howmanytrain))
     {
       *fLog << "MCT1FindSupercuts::DefineTrainMatrix; no.of generated events ("
@@ -370,6 +341,6 @@
 	                  const Int_t howmanytest, MH3 &hreftest)
 {
-    if ( nametest == ""  ||  howmanytest <= 0 )
-      return kFALSE;
+    if (nametest.IsNull() || howmanytest<=0)
+        return kFALSE;
 
     *fLog << "=============================================" << endl;
@@ -422,6 +393,6 @@
 
     fMatrixTest->Print("SizeCols");
-    Int_t howmanygenerated = fMatrixTest->GetM().GetNrows();
-    if ( fabs(howmanygenerated-howmanytest) > 3.0*sqrt(howmanytest) )
+    const Int_t howmanygenerated = fMatrixTest->GetM().GetNrows();
+    if (TMath::Abs(howmanygenerated-howmanytest) > TMath::Sqrt(9.*howmanytest))
     {
       *fLog << "MCT1FindSupercuts::DefineTestMatrix; no.of generated events ("
@@ -480,6 +451,5 @@
     MContinue cont(&seltrain);
 
-    Float_t fcorr =  (Float_t)read.GetEntries() / 
-                    ((Float_t)read.GetEntries()-(Float_t)howmanytrain);
+    const Float_t fcorr = (Float_t)read.GetEntries() / (read.GetEntries()-howmanytrain);
 
     *fLog << "entries, howmanytrain, fcorr = " << read.GetEntries()
@@ -490,5 +460,5 @@
     MFEventSelector seltest;
     seltest.SetName("SelTest");
-    seltest.SetNumSelectEvts(howmanytest*fcorr);
+    seltest.SetNumSelectEvts((Int_t)(fcorr*howmanytest));
 
     MFillH filltest(fMatrixTest);
@@ -524,6 +494,5 @@
     evtloop.SetProgressBar(&bar);
 
-    Int_t maxevents = -1;
-    if ( !evtloop.Eventloop(maxevents) )
+    if (!evtloop.Eventloop())
       return kFALSE;
 
@@ -531,6 +500,6 @@
 
     fMatrixTrain->Print("SizeCols");
-    Int_t generatedtrain = fMatrixTrain->GetM().GetNrows();
-    if ( fabs(generatedtrain-howmanytrain) > 3.0*sqrt(howmanytrain) )
+    const Int_t generatedtrain = fMatrixTrain->GetM().GetNrows();
+    if (TMath::Abs(generatedtrain-howmanytrain) > TMath::Sqrt(9.*howmanytrain))
     {
       *fLog << "MCT1FindSupercuts::DefineTrainMatrix; no.of generated events ("
@@ -541,6 +510,6 @@
 
     fMatrixTest->Print("SizeCols");
-    Int_t generatedtest = fMatrixTest->GetM().GetNrows();
-    if ( fabs(generatedtest-howmanytest) > 3.0*sqrt(howmanytest) )
+    const Int_t generatedtest = fMatrixTest->GetM().GetNrows();
+    if (TMath::Abs(generatedtest-howmanytest) > TMath::Sqrt(9.*howmanytest))
     {
       *fLog << "MCT1FindSupercuts::DefineTestMatrix; no.of generated events ("
@@ -566,5 +535,5 @@
 //
 
-Bool_t MCT1FindSupercuts::ReadMatrix(TString &filetrain, TString &filetest)
+Bool_t MCT1FindSupercuts::ReadMatrix(const TString &filetrain, const TString &filetest)
 {
   //--------------------------
@@ -601,10 +570,10 @@
 //
 //
-Bool_t MCT1FindSupercuts::WriteMatrix(TString &filetrain, TString &filetest)
+Bool_t MCT1FindSupercuts::WriteMatrix(const TString &filetrain, const TString &filetest)
 {
   //--------------------------
   // write out training matrix
 
-  TFile filetr(filetrain, "RECREATE", "");
+  TFile filetr(filetrain, "RECREATE");
 
   *fLog << "nach TFile" << endl;
@@ -619,5 +588,5 @@
   // write out test matrix
 
-  TFile filete(filetest, "RECREATE", "");
+  TFile filete(filetest, "RECREATE");
   fMatrixTest->Print("SizeCols");
   fMatrixTest->Write();
@@ -628,5 +597,4 @@
 
   return kTRUE;  
-
 }
 
@@ -673,5 +641,5 @@
     *fLog << "Setup event loop for fcnSupercuts" << endl;
 
-    if ( fHadronnessName == "")
+    if (fHadronnessName.IsNull())
     {
       *fLog << "MCT1FindSupercuts::FindParams; hadronness name is not defined... aborting"
@@ -680,5 +648,5 @@
     }
 
-    if ( fMatrixTrain == NULL)
+    if (fMatrixTrain == NULL)
     {
       *fLog << "MCT1FindSupercuts::FindParams; training matrix is not defined... aborting"
@@ -696,5 +664,4 @@
     // and set them to their default values
     MCT1Supercuts super;
-    super.InitParams();
 
     // calculate supercuts hadronness
@@ -706,7 +673,9 @@
 
     // plot |alpha|
-    TString  mh3Name = "AlphaFcn";
+    const TString  mh3Name = "AlphaFcn";
     MBinning binsalpha("Binning"+mh3Name);
     binsalpha.SetEdges(54, -12.0, 96.0);
+
+    *fLog << warn << "WARNING------------>ALPHA IS ASSUMED TO BE IN COLUMN 7!!!!!!!!" << endl;
 
     // |alpha| is assumed to be in column 7 of the matrix
@@ -745,11 +714,9 @@
     //******************************
 
-    MEvtLoop evtloopfcn;
+    MEvtLoop evtloopfcn("EvtLoopFCN");
     evtloopfcn.SetParList(&parlistfcn);
-    evtloopfcn.SetName("EvtLoopFCN");
     *fLog << "Event loop for fcnSupercuts has been setup" << endl;
 
     // address of evtloopfcn is used in CallMinuit()
-    fObjectFit = &evtloopfcn;
 
 
@@ -770,26 +737,18 @@
     //
 
-    fNpar = 48;
-
     // get initial values of parameters from MCT1SupercutsCalc
-    TArrayD vinit(fNpar);
-    super.GetParams(fNpar, vinit);    
-
-    for (UInt_t i=0; i<fNpar; i++)
-    {
-      fVinit[i] = vinit[i];
-    }
-
-    for (UInt_t i=0; i<fNpar; i++)
-    {
-      sprintf(&fParName[i][0], "p%d", i+1);
-      fStep[i]  = fabs(fVinit[i]/10.0);
-      fLimlo[i] = -10.0;
-      fLimup[i] =  10.0;
-      fFix[i]   =     0;
-    }
-
-    fMethod = "SIMPLEX";        
-    Bool_t nulloutput = kFALSE;   
+    fVinit = super.GetParameters();
+
+    TString name[fVinit.GetSize()];
+
+    for (Int_t i=0; i<fVinit.GetSize(); i++)
+    {
+        name[i]   = "p";
+        name[i]  += i+1;
+        fStep[i]  = TMath::Abs(fVinit[i]/10.0);
+        fLimlo[i] = -10.0;
+        fLimup[i] =  10.0;
+        fFix[i]   =     0;
+    }
 
     // -------------------------------------------
@@ -800,7 +759,7 @@
 
     MMinuitInterface inter;               
-    Bool_t rc = inter.CallMinuit( fcnSupercuts, fNpar,  fParName,   
-                                  fVinit, fStep, fLimlo, fLimup, fFix,   
-                                  fObjectFit, fMethod, nulloutput);
+    Bool_t rc = inter.CallMinuit(fcnSupercuts, fParName,
+                                 fVinit, fStep, fLimlo, fLimup, fFix,
+                                 &evtloopfcn, "SIMPLEX", kFALSE);
  
     *fLog << "Time spent for the minimization in MINUIT :   " << endl;;
@@ -810,5 +769,6 @@
     plotsuper.DrawClone();
 
-    if (!rc) return kFALSE;
+    if (!rc)
+        return kFALSE;
 
     *fLog << "Minimization for supercuts finished" << endl;
@@ -829,10 +789,7 @@
               << fFilenameParam << "' :" << endl;
 
-    TArrayD check(72);
-    super.GetParams(72, check);
-    for (Int_t i=0; i<72; i++)
-    {
-      *fLog << check[i] << ",  ";
-    }
+    const TArrayD &check = super.GetParameters();
+    for (Int_t i=0; i<check.GetSize(); i++)
+        *fLog << check[i] << ",  ";
     *fLog << endl;
 
@@ -853,11 +810,8 @@
 Bool_t MCT1FindSupercuts::TestParams()
 {
-    Int_t howmanygenerated = fMatrixTest->GetM().GetNrows();
-
-    if ( howmanygenerated <= 0 )
-    {
-      *fLog << "MCT1FindSupercuts::TestParams; test matrix is empty... aborting"
-            << endl;
-      return kFALSE;
+    if (fMatrixTest->GetM().GetNrows() <= 0)
+    {
+        *fLog << "MCT1FindSupercuts::TestParams; test matrix is empty... aborting" << endl;
+        return kFALSE;
     }
 
@@ -865,5 +819,4 @@
     //
     *fLog << "Test the supercuts on the test sample" << endl;
-
 
     // -----------------------------------------------------------------
@@ -876,13 +829,10 @@
     inparam.Close();
 
-    *fLog << "Optimum parameter values for supercuts were read from file '"
-         << fFilenameParam << "' :" << endl;
-
-    TArrayD supercutsPar(72);;
-    scin.GetParams(72, supercutsPar);
-    for (Int_t i=0; i<72; i++)
-    {
-      *fLog << supercutsPar[i] << ",  ";
-    }
+    *fLog << "Optimum parameter values for supercuts were read from file '";
+    *fLog << fFilenameParam << "' :" << endl;
+
+    const TArrayD &supercutsPar = scin.GetParameters();
+    for (Int_t i=0; i<supercutsPar.GetSize(); i++)
+        *fLog << supercutsPar[i] << ",  ";
     *fLog << endl;
     //---------------------------
@@ -890,11 +840,10 @@
 
     // -----------------------------------------------------------------
-    if ( fHadronnessName == "")
-    {
-      *fLog << "MCT1FindSupercuts::TestParams; hadronness name is not defined... aborting"
-            << endl;
-      return kFALSE;
-    }
-
+    if (fHadronnessName.IsNull())
+    {
+        *fLog << "MCT1FindSupercuts::TestParams; hadronness name is not defined... aborting";
+        *fLog << endl;
+        return kFALSE;
+    }
 
     MParList  parlist2;
@@ -902,5 +851,5 @@
 
     MCT1Supercuts supercuts;
-    supercuts.SetParams(72, supercutsPar);
+    supercuts.SetParameters(supercutsPar);
 
     fCalcHadTest->SetHadronnessName(fHadronnessName);
@@ -912,5 +861,5 @@
 
     // plot alpha before applying the supercuts
-    TString  mh3NameB = "AlphaBefore";
+    const TString  mh3NameB = "AlphaBefore";
     MBinning binsalphabef("Binning"+mh3NameB);
     binsalphabef.SetEdges(54, -12.0, 96.0);
@@ -927,5 +876,5 @@
 
     // plot alpha after applying the supercuts
-    TString  mh3NameA = "AlphaAfter";
+    const TString  mh3NameA = "AlphaAfter";
     MBinning binsalphaaft("Binning"+mh3NameA);
     binsalphaaft.SetEdges(54, -12.0, 96.0);
@@ -980,11 +929,11 @@
     // draw the alpha plots
 
-    MH3* alphaBefore = (MH3*)(parlist2.FindObject(mh3NameB, "MH3"));
+    MH3* alphaBefore = (MH3*)parlist2.FindObject(mh3NameB, "MH3");
     TH1  &alphaHist1 = alphaBefore->GetHist();
-    alphaHist1.SetXTitle("|alpha|  [\\circ]");
-
-    MH3* alphaAfter = (MH3*)(parlist2.FindObject(mh3NameA, "MH3"));
+    alphaHist1.SetXTitle("|\\alpha|  [\\circ]");
+
+    MH3* alphaAfter = (MH3*)parlist2.FindObject(mh3NameA, "MH3");
     TH1  &alphaHist2 = alphaAfter->GetHist();
-    alphaHist2.SetXTitle("|alpha|  [\\circ]");
+    alphaHist2.SetXTitle("|\\alpha|  [\\circ]");
 
     TCanvas *c = new TCanvas("AlphaAfterSC", "AlphaTest", 600, 300);
@@ -1005,12 +954,11 @@
     // calculate significance of gamma signal in the alpha plot
   
-    Double_t alphasig = 20.0;
-    Double_t alphamin = 30.0;
-    Double_t alphamax = 90.0;
-    Int_t    degree   =    4;
-    Double_t significance = -99.0;
-    Bool_t   drawpoly  = kTRUE;
-    Bool_t   fitgauss  = kFALSE;
-    Bool_t   print     = kTRUE;
+    const Double_t alphasig = 20.0;
+    const Double_t alphamin = 30.0;
+    const Double_t alphamax = 90.0;
+    const Int_t    degree   =    4;
+    const Bool_t   drawpoly  = kTRUE;
+    const Bool_t   fitgauss  = kFALSE;
+    const Bool_t   print     = kTRUE;
 
     MHFindSignificance findsig;
@@ -1020,6 +968,7 @@
     findsig.FindSigma(&alphaHist2, alphamin, alphamax, degree, 
                       alphasig, drawpoly, fitgauss, print);
-    significance = findsig.GetSignificance();
-    Double_t alphasi = findsig.GetAlphasi();
+
+    const Double_t significance = findsig.GetSignificance();
+    const Double_t alphasi = findsig.GetAlphasi();
 
     *fLog << "Significance of gamma signal after supercuts in test sample : "
@@ -1034,14 +983,2 @@
     return kTRUE;
 }
-
-
-//===========================================================================
-
-
-
-
-
-
-
-
-
Index: trunk/MagicSoft/Mars/manalysis/MCT1FindSupercuts.h
===================================================================
--- trunk/MagicSoft/Mars/manalysis/MCT1FindSupercuts.h	(revision 2307)
+++ trunk/MagicSoft/Mars/manalysis/MCT1FindSupercuts.h	(revision 2308)
@@ -9,5 +9,15 @@
 #include <TArrayD.h>
 #endif
+#ifndef ROOT_TArrayI
+#include <TArrayI.h>
+#endif
 
+class MFilter;
+class MEvtLoop;
+class MH3;
+class MCT1SupercutsCalc;
+class MGeomCam;
+class MHMatrix;
+/*
 #include "MFilter.h"
 #include "MEvtLoop.h"
@@ -16,5 +26,5 @@
 #include "MGeomCam.h"
 #include "MHMatrix.h"
-
+*/
 
 class MCT1FindSupercuts : public MParContainer
@@ -46,10 +56,10 @@
   // attention : dimensions must agree with those in 
   //             MMinuitInterface::CallMinuit()
-  char       fParName [80][100];
-  Double_t   fVinit[80];
-  Double_t    fStep[80];
-  Double_t   fLimlo[80];
-  Double_t   fLimup[80];
-  Int_t        fFix[80];
+  char    fParName [80][100];
+  TArrayD fVinit;
+  TArrayD fStep;
+  TArrayD fLimlo;
+  TArrayD fLimup;
+  TArrayI fFix;
 
   UInt_t     fNpar;
@@ -88,6 +98,6 @@
 			       const Int_t howmanytest,  MH3 &hreftest);
 
-  Bool_t ReadMatrix( TString &filetrain, TString &filetest);
-  Bool_t WriteMatrix(TString &filetrain, TString &filetest);
+  Bool_t ReadMatrix( const TString &filetrain, const TString &filetest);
+  Bool_t WriteMatrix(const TString &filetrain, const TString &filetest);
 
   Bool_t FindParams();
Index: trunk/MagicSoft/Mars/manalysis/MCT1Supercuts.cc
===================================================================
--- trunk/MagicSoft/Mars/manalysis/MCT1Supercuts.cc	(revision 2307)
+++ trunk/MagicSoft/Mars/manalysis/MCT1Supercuts.cc	(revision 2308)
@@ -17,4 +17,5 @@
 !
 !   Author(s): Wolfgang Wittek, 08/2003 <mailto:wittek@mppmu.mpg.de>
+!   Author(s): Thomas Bretz, 08/2003 <mailto:tbretz@astro.uni-wuerzburg.de>
 !
 !   Copyright: MAGIC Software Development, 2000-2003
@@ -49,22 +50,16 @@
 //
 MCT1Supercuts::MCT1Supercuts(const char *name, const char *title)
+    : fParameters(72),
+    fLengthUp(fParameters.GetArray()), fLengthLo(fParameters.GetArray()+8),
+    fWidthUp(fParameters.GetArray()+16), fWidthLo(fParameters.GetArray()+24),
+    fDistUp(fParameters.GetArray()+32), fDistLo(fParameters.GetArray()+40),
+    fAsymUp(fParameters.GetArray()+48), fAsymLo(fParameters.GetArray()+56),
+    fAlphaUp(fParameters.GetArray()+64)
 {
     fName  = name  ? name  : "MCT1Supercuts";
     fTitle = title ? title : "Container for the supercut parameters";
 
-    fNpartot = 72;
-
-    fLengthUp.Set(8);
-    fLengthLo.Set(8);
-    fWidthUp.Set(8);
-    fWidthLo.Set(8);
-    fDistUp.Set(8);
-    fDistLo.Set(8);
-    fAsymUp.Set(8);
-    fAsymLo.Set(8);
-    fAlphaUp.Set(8);
-
     // set supercut parameters to their default values
-    InitParams();
+    InitParameters();
 }
 
@@ -74,90 +69,86 @@
 // set default values for the supercut parameters
 //
-void MCT1Supercuts::InitParams()
+void MCT1Supercuts::InitParameters()
 {
-    //---------------------------------
-    // supercut parameters
+    fLengthUp[0] =  0.315585;
+    fLengthUp[1] =  0.001455;
+    fLengthUp[2] =  0.203198;
+    fLengthUp[3] =  0.005532;
+    fLengthUp[4] = -0.001670;
+    fLengthUp[5] = -0.020362;
+    fLengthUp[6] =  0.007388;
+    fLengthUp[7] = -0.013463;
 
-    fLengthUp[0] = 0.315585; 
-    fLengthUp[1] = 0.001455; 
-    fLengthUp[2] = 0.203198; 
-    fLengthUp[3] = 0.005532; 
-    fLengthUp[4] =-0.001670;
-    fLengthUp[5] =-0.020362; 
-    fLengthUp[6] = 0.007388; 
-    fLengthUp[7] =-0.013463;
+    fWidthUp[0] =  0.145412;
+    fWidthUp[1] = -0.001771;
+    fWidthUp[2] =  0.054462;
+    fWidthUp[3] =  0.022280;
+    fWidthUp[4] = -0.009893;
+    fWidthUp[5] =  0.056353;
+    fWidthUp[6] =  0.020711;
+    fWidthUp[7] = -0.016703;
 
-    fWidthUp[0] = 0.145412; 
-    fWidthUp[1] =-0.001771; 
-    fWidthUp[2] = 0.054462; 
-    fWidthUp[3] = 0.022280; 
-    fWidthUp[4] =-0.009893;
-    fWidthUp[5] = 0.056353; 
-    fWidthUp[6] = 0.020711; 
-    fWidthUp[7] =-0.016703;
+    fDistUp[0] =  1.787943;
+    fDistUp[1] =  0;
+    fDistUp[2] =  2.942310;
+    fDistUp[3] =  0.199815;
+    fDistUp[4] =  0;
+    fDistUp[5] =  0.249909;
+    fDistUp[6] =  0.189697;
+    fDistUp[7] =  0;
 
-    fDistUp[0] = 1.787943; 
-    fDistUp[1] = 0.; 
-    fDistUp[2] = 2.942310; 
-    fDistUp[3] = 0.199815; 
-    fDistUp[4] = 0.; 
-    fDistUp[5] = 0.249909;
-    fDistUp[6] = 0.189697; 
-    fDistUp[7] = 0.;
+    fLengthLo[0] =  0.151530;
+    fLengthLo[1] =  0.028323;
+    fLengthLo[2] =  0.510707;
+    fLengthLo[3] =  0.053089;
+    fLengthLo[4] =  0.013708;
+    fLengthLo[5] =  2.357993;
+    fLengthLo[6] =  0.000080;
+    fLengthLo[7] = -0.007157;
 
-    fLengthLo[0] = 0.151530; 
-    fLengthLo[1] = 0.028323; 
-    fLengthLo[2] = 0.510707; 
-    fLengthLo[3] = 0.053089; 
-    fLengthLo[4] = 0.013708;
-    fLengthLo[5] = 2.357993; 
-    fLengthLo[6] = 0.000080; 
-    fLengthLo[7] =-0.007157;
+    fWidthLo[0] =  0.089187;
+    fWidthLo[1] = -0.006430;
+    fWidthLo[2] =  0.074442;
+    fWidthLo[3] =  0.003738;
+    fWidthLo[4] = -0.004256;
+    fWidthLo[5] = -0.014101;
+    fWidthLo[6] =  0.006126;
+    fWidthLo[7] = -0.002849;
 
-    fWidthLo[0] = 0.089187; 
-    fWidthLo[1] =-0.006430; 
-    fWidthLo[2] = 0.074442; 
-    fWidthLo[3] = 0.003738;
-    fWidthLo[4] =-0.004256; 
-    fWidthLo[5] =-0.014101; 
-    fWidthLo[6] = 0.006126; 
-    fWidthLo[7] =-0.002849;
+    fDistLo[0] =  0.589406;
+    fDistLo[1] =  0;
+    fDistLo[2] = -0.083964;
+    fDistLo[3] = -0.007975;
+    fDistLo[4] =  0;
+    fDistLo[5] =  0.045374;
+    fDistLo[6] = -0.001750;
+    fDistLo[7] =  0;
 
-    fDistLo[0] = 0.589406;
-    fDistLo[1] = 0.;
-    fDistLo[2] =-0.083964;
-    fDistLo[3] =-0.007975;
-    fDistLo[4] = 0.;
-    fDistLo[5] = 0.045374;
-    fDistLo[6] =-0.001750;
-    fDistLo[7] = 0.;
+    fAsymUp[0] =  0.061267;
+    fAsymUp[1] =  0.014462;
+    fAsymUp[2] =  0.014327;
+    fAsymUp[3] =  0.014540;
+    fAsymUp[4] =  0.013391;
+    fAsymUp[5] =  0.012319;
+    fAsymUp[6] =  0.010444;
+    fAsymUp[7] =  0.008328;
 
-    fAsymUp[0] = 0.061267; 
-    fAsymUp[1] = 0.014462; 
-    fAsymUp[2] = 0.014327; 
-    fAsymUp[3] = 0.014540; 
-    fAsymUp[4] = 0.013391;
-    fAsymUp[5] = 0.012319; 
-    fAsymUp[6] = 0.010444; 
-    fAsymUp[7] = 0.008328;
-
-    fAsymLo[0] =-0.012055; 
-    fAsymLo[1] = 0.009157; 
-    fAsymLo[2] = 0.005441; 
-    fAsymLo[3] = 0.000399; 
-    fAsymLo[4] = 0.001433;
-    fAsymLo[5] =-0.002050; 
-    fAsymLo[6] =-0.000104; 
-    fAsymLo[7] =-0.001188;
+    fAsymLo[0] = -0.012055;
+    fAsymLo[1] =  0.009157;
+    fAsymLo[2] =  0.005441;
+    fAsymLo[3] =  0.000399;
+    fAsymLo[4] =  0.001433;
+    fAsymLo[5] = -0.002050;
+    fAsymLo[6] = -0.000104;
+    fAsymLo[7] = -0.001188;
 
     fAlphaUp[0] = 13.123440; 
-    fAlphaUp[1] = 0.; 
-    fAlphaUp[2] = 0.; 
-    fAlphaUp[3] = 0.; 
-    fAlphaUp[4] = 0.; 
-    fAlphaUp[5] = 0.; 
-    fAlphaUp[6] = 0.; 
-    fAlphaUp[7] = 0.;
-    //---------------------------------
+    fAlphaUp[1] = 0;
+    fAlphaUp[2] = 0;
+    fAlphaUp[3] = 0;
+    fAlphaUp[4] = 0;
+    fAlphaUp[5] = 0;
+    fAlphaUp[6] = 0;
+    fAlphaUp[7] = 0;
 }
 
@@ -168,181 +159,11 @@
 //
 //
+Bool_t MCT1Supercuts::SetParameters(const TArrayD &d)
+{
+    if (d.GetSize() != fParameters.GetSize())
+        // *fLog << err << ...
+        return kFALSE;
 
-void MCT1Supercuts::SetParams(UInt_t npar, TArrayD &d)
-{
-    UInt_t ncutpar = fLengthUp.GetSize();
-    UInt_t k0 = 0;
-
-    for (UInt_t j=0; j<ncutpar; j++)
-    {
-      UInt_t k = k0 + j;
-      if (k >= npar) return;
-      fLengthUp[j] = d[k];
-    }
-    k0 += ncutpar;
-
-    for (UInt_t j=0; j<ncutpar; j++)
-    {
-      UInt_t k = k0 + j;
-      if (k >= npar) return;
-      fWidthUp[j] = d[k];
-    }
-    k0 += ncutpar;
-
-    for (UInt_t j=0; j<ncutpar; j++)
-    {
-      UInt_t k = k0 + j;
-      if (k >= npar) return;
-      fDistUp[j] = d[k];
-    }
-    k0 += ncutpar;
-
-    for (UInt_t j=0; j<ncutpar; j++)
-    {
-      UInt_t k = k0 + j;
-      if (k >= npar) return;
-      fLengthLo[j] = d[k];
-    }
-    k0 += ncutpar;
-
-    for (UInt_t j=0; j<ncutpar; j++)
-    {
-      UInt_t k = k0 + j;
-      if (k >= npar) return;
-      fWidthLo[j] = d[k];
-    }
-    k0 += ncutpar;
-
-    for (UInt_t j=0; j<ncutpar; j++)
-    {
-      UInt_t k = k0 + j;
-      if (k >= npar) return;
-      fDistLo[j] = d[k];
-    }
-    k0 += ncutpar;
-
-    for (UInt_t j=0; j<ncutpar; j++)
-    {
-      UInt_t k = k0 + j;
-      if (k >= npar) return;
-      fAsymUp[j] = d[k];
-    }
-    k0 += ncutpar;
-
-    for (UInt_t j=0; j<ncutpar; j++)
-    {
-      UInt_t k = k0 + j;
-      if (k >= npar) return;
-      fAsymLo[j] = d[k];
-    }
-    k0 += ncutpar;
-
-    for (UInt_t j=0; j<ncutpar; j++)
-    {
-      UInt_t k = k0 + j;
-      if (k >= npar) return;
-      fAlphaUp[j] = d[k];
-    }
-    k0 += ncutpar;
+    fParameters = d;
+    return kTRUE;
 }
-
-// --------------------------------------------------------------------------
-//
-// Get the parameter values and put them into the array 'd'
-//
-//
-
-void MCT1Supercuts::GetParams(UInt_t npar, TArrayD &d)
-{
-    UInt_t ncutpar = fLengthUp.GetSize();
-    UInt_t k0 = 0;
-
-    for (UInt_t j=0; j<ncutpar; j++)
-    {
-      UInt_t k = k0 + j;
-      if (k >= npar) return;
-      d[k] = fLengthUp[j];
-    }
-    k0 += ncutpar;
-
-    for (UInt_t j=0; j<ncutpar; j++)
-    {
-      UInt_t k = k0 + j;
-      if (k >= npar) return;
-      d[k] = fWidthUp[j];
-    }
-    k0 += ncutpar;
-
-    for (UInt_t j=0; j<ncutpar; j++)
-    {
-      UInt_t k = k0 + j;
-      if (k >= npar) return;
-      d[k] = fDistUp[j];
-    }
-    k0 += ncutpar;
-
-    for (UInt_t j=0; j<ncutpar; j++)
-    {
-      UInt_t k = k0 + j;
-      if (k >= npar) return;
-      d[k] = fLengthLo[j];
-    }
-    k0 += ncutpar;
-
-    for (UInt_t j=0; j<ncutpar; j++)
-    {
-      UInt_t k = k0 + j;
-      if (k >= npar) return;
-      d[k] = fWidthLo[j];
-    }
-    k0 += ncutpar;
-
-    for (UInt_t j=0; j<ncutpar; j++)
-    {
-      UInt_t k = k0 + j;
-      if (k >= npar) return;
-      d[k] = fDistLo[j];
-    }
-    k0 += ncutpar;
-
-    for (UInt_t j=0; j<ncutpar; j++)
-    {
-      UInt_t k = k0 + j;
-      if (k >= npar) return;
-      d[k] = fAsymUp[j];
-    }
-    k0 += ncutpar;
-
-    for (UInt_t j=0; j<ncutpar; j++)
-    {
-      UInt_t k = k0 + j;
-      if (k >= npar) return;
-      d[k] = fAsymLo[j];
-    }
-    k0 += ncutpar;
-
-    for (UInt_t j=0; j<ncutpar; j++)
-    {
-      UInt_t k = k0 + j;
-      if (k >= npar) return;
-      d[k] = fAlphaUp[j];
-    }
-}
-//==========================================================================
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Index: trunk/MagicSoft/Mars/manalysis/MCT1Supercuts.h
===================================================================
--- trunk/MagicSoft/Mars/manalysis/MCT1Supercuts.h	(revision 2307)
+++ trunk/MagicSoft/Mars/manalysis/MCT1Supercuts.h	(revision 2308)
@@ -2,4 +2,7 @@
 #define MARS_MCT1Supercuts
 
+#ifndef MARS_MParContainer
+#include "MParContainer.h"
+#endif
 
 #ifndef ROOT_TArrayD
@@ -7,52 +10,36 @@
 #endif
 
-#ifndef ROOT_TString
-#include <TString.h>
-#endif
-
-#ifndef MARS_MParContainer
-#include <MParContainer.h>
-#endif
-
-
-
 class MCT1Supercuts : public MParContainer
 {
 private:
+    TArrayD fParameters; // supercut parameters
 
-    UInt_t     fNpartot;
-
-    //---------------------------------
-    // supercut parameters
-
-    TArrayD fLengthUp;
-    TArrayD fLengthLo;
-    TArrayD fWidthUp;
-    TArrayD fWidthLo;
-    TArrayD fDistUp;
-    TArrayD fDistLo;
-    TArrayD fAsymUp;
-    TArrayD fAsymLo;
-    TArrayD fAlphaUp;
-    //---------------------------------
-
+    Double_t *fLengthUp; //!
+    Double_t *fLengthLo; //!
+    Double_t *fWidthUp;  //!
+    Double_t *fWidthLo;  //!
+    Double_t *fDistUp;   //!
+    Double_t *fDistLo;   //!
+    Double_t *fAsymUp;   //!
+    Double_t *fAsymLo;   //!
+    Double_t *fAlphaUp;  //!
 
 public:
     MCT1Supercuts(const char *name=NULL, const char *title=NULL);
 
-    void InitParams();
+    void InitParameters();
 
-    void SetParams(UInt_t npar, TArrayD &d);
-    void GetParams(UInt_t npar, TArrayD &d);
+    Bool_t SetParameters(const TArrayD &d);
+    const TArrayD &GetParameters() const;
 
-    TArrayD &GetLengthUp()  { return fLengthUp; }
-    TArrayD &GetLengthLo()  { return fLengthLo; }
-    TArrayD &GetWidthUp()   { return fWidthUp; }
-    TArrayD &GetWidthLo()   { return fWidthLo; }
-    TArrayD &GetDistUp()    { return fDistUp; }
-    TArrayD &GetDistLo()    { return fDistLo; }
-    TArrayD &GetAsymUp()    { return fAsymUp; }
-    TArrayD &GetAsymLo()    { return fAsymLo; }
-    TArrayD &GetAlphaUp()   { return fAlphaUp; }
+    const Double_t *GetLengthUp() const { return fLengthUp; }
+    const Double_t *GetLengthLo() const { return fLengthLo; }
+    const Double_t *GetWidthUp() const  { return fWidthUp; }
+    const Double_t *GetWidthLo() const  { return fWidthLo; }
+    const Double_t *GetDistUp() const   { return fDistUp; }
+    const Double_t *GetDistLo() const   { return fDistLo; }
+    const Double_t *GetAsymUp() const   { return fAsymUp; }
+    const Double_t *GetAsymLo() const   { return fAsymLo; }
+    const Double_t *GetAlphaUp() const  { return fAlphaUp; }
 
     ClassDef(MCT1Supercuts, 1) // A container for the Supercut parameters
@@ -60,16 +47,2 @@
 
 #endif
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Index: trunk/MagicSoft/Mars/manalysis/MCT1SupercutsCalc.cc
===================================================================
--- trunk/MagicSoft/Mars/manalysis/MCT1SupercutsCalc.cc	(revision 2307)
+++ trunk/MagicSoft/Mars/manalysis/MCT1SupercutsCalc.cc	(revision 2308)
@@ -136,6 +136,6 @@
 // Calculation of upper and lower limits
 //
-Double_t MCT1SupercutsCalc::CtsMCut(TArrayD &a,  Double_t ls, Double_t ct,
-                                    Double_t ls2, Double_t dd2)
+Double_t MCT1SupercutsCalc::CtsMCut(const Double_t* a,  Double_t ls, Double_t ct,
+                                    Double_t ls2, Double_t dd2) const
 {
     // define cut-function
@@ -257,7 +257,2 @@
     return kTRUE;
 }
-//==========================================================================
-
-
-
-
Index: trunk/MagicSoft/Mars/manalysis/MCT1SupercutsCalc.h
===================================================================
--- trunk/MagicSoft/Mars/manalysis/MCT1SupercutsCalc.h	(revision 2307)
+++ trunk/MagicSoft/Mars/manalysis/MCT1SupercutsCalc.h	(revision 2308)
@@ -2,6 +2,6 @@
 #define MARS_MCT1SupercutsCalc
 
-#ifndef MARS_MFilter
-#include "MFilter.h"
+#ifndef MARS_MTask
+#include "MTask.h"
 #endif
 
@@ -20,5 +20,4 @@
 class MCT1Supercuts;
 
-
 class MCT1SupercutsCalc : public MTask
 {
@@ -27,16 +26,16 @@
     MHillasSrc    *fHilSrc;
     MMcEvt        *fMcEvt;
-    MHadronness   *fHadronness;   //! output container for hadronness
-    MCT1Supercuts *fSuper;        // container for supercut parameters
+    MHadronness   *fHadronness; //! output container for hadronness
+    MCT1Supercuts *fSuper;      // container for supercut parameters
 
-    TString     fHadronnessName;  // name of container to store hadronness
-    TString     fHilName;
-    TString     fHilSrcName;
-    TString     fSuperName;       // name of container for supercut parameters
+    TString  fHadronnessName;   // name of container to store hadronness
+    TString  fHilName;
+    TString  fHilSrcName;
+    TString  fSuperName;        // name of container for supercut parameters
 
-    Double_t    fMm2Deg;
+    Double_t fMm2Deg;           //!
 
-    Int_t     fMap[8];
-    MHMatrix *fMatrix;
+    Int_t     fMap[8];          //!
+    MHMatrix *fMatrix;          //!
 
     Int_t PreProcess(MParList *pList);
@@ -45,6 +44,6 @@
     Double_t GetVal(Int_t i) const;
 
-    Double_t CtsMCut(TArrayD &a, Double_t ls, Double_t ct,
-                     Double_t ls2, Double_t dd2);
+    Double_t CtsMCut(const Double_t* a, Double_t ls, Double_t ct,
+                     Double_t ls2, Double_t dd2) const;
 
 public:
@@ -64,16 +63,2 @@
 
 #endif
-
-
-
-
-
-
-
-
-
-
-
-
-
-
