| 1 | /* More explanations at the end of the file */
|
|---|
| 2 | void optimdisp()
|
|---|
| 3 | {
|
|---|
| 4 | MJOptimizeDisp opt; // Initialize optimization class
|
|---|
| 5 | opt.SetDebug(2); // Choose the level of output
|
|---|
| 6 | opt.SetOptimizer(MJOptimize::kMigrad); // Choose the fit algorithm (see MJOptimize)
|
|---|
| 7 | opt.EnableTestTrain(); // Split sample into test and train
|
|---|
| 8 |
|
|---|
| 9 | // -------------------- Setup ----------------------------
|
|---|
| 10 |
|
|---|
| 11 | opt.AddParameter("1-MHillas.fWidth/MHillas.fLength"); // M[0]
|
|---|
| 12 | opt.AddParameter("MHillasExt.fSlopeLong*sign(MHillasSrc.fCosDeltaAlpha)/MGeomCam.fConvMm2Deg"); // M[1]
|
|---|
| 13 | opt.AddParameter("MNewImagePar.fLeakage1"); // M[2]
|
|---|
| 14 | opt.AddParameter("log10(MHillas.fSize)"); // M[3]
|
|---|
| 15 |
|
|---|
| 16 | // -------------- Parametrization --------------------
|
|---|
| 17 |
|
|---|
| 18 | char *r = "M[0]*([0] + [1]*M[1] + [2]*M[2] + (M[3]>[3])*[4]*(M[3]-[3])^2)";
|
|---|
| 19 |
|
|---|
| 20 | opt.FixParameter(0, 1.15136);
|
|---|
| 21 | opt.FixParameter(1, 0.0681437);
|
|---|
| 22 | opt.FixParameter(2, 2.62932);
|
|---|
| 23 | opt.FixParameter(3, 1.51279);
|
|---|
| 24 | opt.FixParameter(4, 0.0507821);
|
|---|
| 25 |
|
|---|
| 26 | opt.AddPreCut("MNewImagePar.fLeakage1>0");
|
|---|
| 27 | //opt.AddPreCut("log10(MHillas.fSize)<2.5"); //3.2
|
|---|
| 28 |
|
|---|
| 29 | opt.AddPreCut("MHillasExt.fM3Long*sign(MHillasSrc.fCosDeltaAlpha)*MGeomCam.fConvMm2Deg>-0.07");
|
|---|
| 30 | opt.AddPreCut("DataType.fVal>0.5");
|
|---|
| 31 |
|
|---|
| 32 | //opt.AddPreCut("abs(MHillasSrc.fDCA*MGeomCam.fConvMm2Deg)<0.2");
|
|---|
| 33 | //opt.AddPreCut("(MHillasSrc.fDist*MGeomCam.fConvMm2Deg-0.5)*7.2>MHillasExt.fSlopeLong*sign(MHillasSrc.fCosDeltaAlpha)/MGeomCam.fConvMm2Deg");
|
|---|
| 34 |
|
|---|
| 35 | // -------------------- Run ----------------------------
|
|---|
| 36 |
|
|---|
| 37 | MStatusDisplay *d = new MStatusDisplay;
|
|---|
| 38 | opt.SetDisplay(d);
|
|---|
| 39 |
|
|---|
| 40 | /*
|
|---|
| 41 | -------------------- Magic-Cuts ----------------------
|
|---|
| 42 | MFMagicCuts cuts;
|
|---|
| 43 | cuts.SetHadronnessCut(MFMagicCuts::kArea);
|
|---|
| 44 | cuts.SetThetaCut(MFMagicCuts::kNone);
|
|---|
| 45 |
|
|---|
| 46 | TArrayD arr(10);
|
|---|
| 47 | arr[0]= 1.3245;
|
|---|
| 48 | arr[1]= 0.208700;
|
|---|
| 49 | arr[2]= 0.0836169;
|
|---|
| 50 | arr[3]= 5.63973;
|
|---|
| 51 | arr[4]= 0.0844195;
|
|---|
| 52 | arr[5]= -0.07;
|
|---|
| 53 | arr[6]= 13.2;
|
|---|
| 54 | arr[7]= 1.0;
|
|---|
| 55 | arr[8]= 7.2;
|
|---|
| 56 | arr[9]= 0.5;
|
|---|
| 57 |
|
|---|
| 58 | cuts.SetVariables(arr);
|
|---|
| 59 |
|
|---|
| 60 | opt.AddPreCut(&cuts);
|
|---|
| 61 |
|
|---|
| 62 | -------------------- Energy Slope --------------------
|
|---|
| 63 | MFEnergySlope slope(-2.8);
|
|---|
| 64 | opt.AddPreCut(&slope);
|
|---|
| 65 |
|
|---|
| 66 | -------------------- Other cuts ----------------------
|
|---|
| 67 | */
|
|---|
| 68 |
|
|---|
| 69 | // opt.SetPathOut("optimdisp.root");
|
|---|
| 70 | opt.RunDisp("ganymed00000001-summary.root", r);
|
|---|
| 71 | }
|
|---|
| 72 |
|
|---|
| 73 | /* ------------------ Good strategy -------------------
|
|---|
| 74 |
|
|---|
| 75 | Par | 0 1 2 3 4 | Cut
|
|---|
| 76 | -------+---------------------------------+-----------------------
|
|---|
| 77 | Fit 1 | 1.3 0.1 fix=0 fix=0 fix=0 | Leak1==0 lgSize<2.5
|
|---|
| 78 | Fit 2 | fix fix fix=0 2.5 0.2 | Leak1==0
|
|---|
| 79 | Fit 2 | fix fix 1.8 fix fix | Leak1>0
|
|---|
| 80 | Fit 3 | free free fix fix fix | -/-
|
|---|
| 81 | Fit 4 | fix fix fix free free | -/-
|
|---|
| 82 | Fit 5 | fix fix free fix fix | -/-
|
|---|
| 83 | -------+---------------------------------+-----------------------
|
|---|
| 84 | */
|
|---|