Index: /trunk/MagicSoft/Mars/mtemp/mucm/macros/OptimizeSuperCuts.C
===================================================================
--- /trunk/MagicSoft/Mars/mtemp/mucm/macros/OptimizeSuperCuts.C	(revision 6315)
+++ /trunk/MagicSoft/Mars/mtemp/mucm/macros/OptimizeSuperCuts.C	(revision 6315)
@@ -0,0 +1,146 @@
+/*############################################################################
+  #
+  #  How to use:
+  #
+  #   - 1. From a hillas file select a training subsample, for a given size
+  #     range, with will be write into a MHMatrix. The the matrix will be read
+  #     and the optimization will start.
+  #     Once you've created the matrix you can set to false GenerateTrainMatrix
+  #     and start directly the optimization from reading the matrix.
+  #
+  #   - 2. It is recomended to start optimazing the static cuts and then, the 
+  #     dinanical cuts, this can be done:
+  #      -seting in 'TString initParams' the name of the previous optimization
+  #       results.
+  #      -and using the the funtion MMyFindSuperCuts.SetOptimizationMode(Mode)
+  #
+  #     The supercuts function used is:
+  #   
+  #      Length_low = par[0]*S1 + par[1]*S2 +par[2]*ZA +par[3]*dist*dist
+  #      Length_up  = par[4]*S1 + par[5]*S2 +par[6]*ZA +par[7]*dist*dist
+  #                 ....
+  #      and simiar with: Width, Dist,Asym, Conc, Leakage
+  #
+  #         where  S1 = log(size)-log(LowerSizeCut)
+  #                S2 = S1*S1
+  #                ZA = cos(theta/kRad2Deg) - 1;
+  #
+  #  NOTE:  Currently with neglect ZA depence, so we put ZA = 0;
+  #  -----
+  #
+  #     The optimization modes are:
+  #
+  #        Mode   0 = optimize only supercuts params,i.e. 
+  #                   only optimaze par0, par4, par8,..
+  #               1 = optimize only dynamical params, i.e. 
+  #                   all but par0, par4, par8
+  #           other = optimize all the params at the same time.  
+  #
+  #
+  #  Warning: Some times Minuit fails to converge, or its take too long. Then,
+  #           it's better to try again with diferent nuumber of parameter,
+  #           initial values or stepsizes.
+  #
+  #                                                 author: Marcos Lopez
+  #                                                   email: marcos@gae.ucm.es
+  ###########################################################################*/
+
+
+Bool_t GenerateTrainMatrix = kTRUE;
+
+void OptimizeSuperCuts()
+{
+
+    // --- Input -----------------------------------------
+
+    Int_t  Mode = 0;
+    Double_t SizeCutLow = 2000;
+    Double_t SizeCutUp = 1e7;
+
+    // Hillas file
+    TString datafile = "~/MAGIC/data/Period022/2004_10_10/CrabNebula_20041010_6_30-25.hillas.root";
+    
+    // Intermediate file to speed up otpimization (from the original hillas 
+    //file, a given number of events in a given size cut range will be stored 
+    //in a MHatrix)
+    TString matrixfile = "SC_matrix.150k.root";  // matrix with the 
+
+    // Output file where the supercuts parameters wiil be saved
+    TString outfile = "SC.150k.Above2000.root"; 
+
+
+    // File with the starting supercuts parameters (if any)
+    //
+    //TString initParams="~/MAGIC/results/SuperCutsParams/AllDynCutsParams_Above2000ph.150k.CrabNebula_20041010_6_30-25.root";
+    TString initParams="";
+
+    // Number of train events to use from hillas file
+    Int_t howmany = 150000;  
+
+    MH3 h3("");
+
+   
+    //
+    // fStepsizes 
+    // if == 0.0    the parameter will be fixed in the minimization
+    //    != 0.0    initial step sizes for the parameters
+    //
+    TArrayD fStepsizes(48);
+
+    // LengthUp
+    fStepsizes[0] = 0.1;
+    fStepsizes[1] = 0.1;
+    fStepsizes[2] = 0.1;
+    fStepsizes[3] = 0.1;
+    // LengthLo
+    fStepsizes[4]  = 0.1;
+    fStepsizes[5]  = 0.1;
+    fStepsizes[6]  = 0.1;
+    fStepsizes[7] = 0.1;
+    // WidthUp
+    fStepsizes[8] = 0.1;
+    fStepsizes[9] = 0.1;
+    fStepsizes[10] = 0.1;
+    fStepsizes[11] = 0.1;
+    // WidthLo
+    fStepsizes[12] = 0.1;
+    fStepsizes[13] = 0.1;
+    fStepsizes[14] = 0.1;
+    fStepsizes[15] = 0.1;
+    // DistUp
+    fStepsizes[16] = 0.1;
+    fStepsizes[17] = 0.1;
+    fStepsizes[18] = 0.1;
+    fStepsizes[19] = 0.;
+    // DistLo
+    fStepsizes[20] = 0.1;
+    fStepsizes[21] = 0.1;
+    fStepsizes[22] = 0.1;
+    fStepsizes[23] = 0.;
+
+    for(int i=24;i<48;i++)
+	fStepsizes[i] = .0;
+ 
+    //------------------------------------------------------
+
+
+    MMyFindSuperCuts a;
+    a.SetHadronnessName("MHadronness");
+    a.SetFilenameParam(outfile);
+    a.SetSizeCuts(SizeCutLow, SizeCutUp);
+
+    if(GenerateTrainMatrix)
+	a.DefineTrainMatrix(datafile, h3 ,howmany, matrixfile); 
+
+
+    a.ReadMatrix(matrixfile,"");
+    a.SetOptimizationMode(Mode);
+
+
+    //
+    // Start optimization
+    // 
+    a.FindParams(initParams,0,fStepsizes);
+}
+
+
