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 | opt.AddParameter("1-(MHillas.fWidth/MHillas.fLength)"); // M[0]
|
---|
11 | opt.AddParameter("log10(MNewImagePar.fLeakage1+1)"); // M[1]
|
---|
12 |
|
---|
13 | opt.SetParameter(0, 1.30871); // Setup [0]
|
---|
14 | opt.SetParameter(1, 5.81119); // Setup [1]
|
---|
15 | opt.SetParameter(2, 0.763486); // Setup [2]
|
---|
16 |
|
---|
17 | char *r = "([0]+([1]*pow(M[1], [2])))*M[0]"; // Rule to calc Disp
|
---|
18 |
|
---|
19 | // -------------------- Run ----------------------------
|
---|
20 |
|
---|
21 | MStatusDisplay *d = new MStatusDisplay;
|
---|
22 | opt.SetDisplay(d);
|
---|
23 |
|
---|
24 | /*
|
---|
25 | -------------------- Magic-Cuts ----------------------
|
---|
26 | MFMagicCuts cuts;
|
---|
27 | cuts.SetHadronnessCut(MFMagicCuts::kArea);
|
---|
28 | cuts.SetThetaCut(MFMagicCuts::kOn);
|
---|
29 |
|
---|
30 | TArrayD arr(10);
|
---|
31 | arr[0]= 1.3245;
|
---|
32 | arr[1]= 0.208700;
|
---|
33 | arr[2]= 0.229200;
|
---|
34 | arr[3]= 5.305200;
|
---|
35 | arr[4]= 0.098930;
|
---|
36 | arr[5]= -0.082950;
|
---|
37 | arr[6]= 8.2957;
|
---|
38 | arr[7]= 0.8677;
|
---|
39 |
|
---|
40 | cuts.SetVariables(arr);
|
---|
41 |
|
---|
42 | opt.AddPreCut(&cuts);
|
---|
43 |
|
---|
44 | -------------------- Energy Slope --------------------
|
---|
45 | MFEnergySlope slope(-2.8);
|
---|
46 | opt.AddPreCut(&slope);
|
---|
47 |
|
---|
48 | -------------------- Other cuts ----------------------
|
---|
49 | opt.AddPreCut("MNewImagePar.fLeakage1<0.0001");
|
---|
50 | */
|
---|
51 |
|
---|
52 | opt.RunDisp("ganymedmcpart.root", r);
|
---|
53 | }
|
---|
54 |
|
---|
55 | /* ------------------ Good strategy -------------------
|
---|
56 | 1) first fix parameters:
|
---|
57 | opt.FixParameter(1, 0);
|
---|
58 | opt.FixParameter(2, 1);
|
---|
59 | and process only showers without leakage
|
---|
60 | opt.AddPreCut("MNewImagePar.fLeakage1<0.0001");
|
---|
61 | 2) release parameters 1 and 2 and fix 0 to the result of 1)
|
---|
62 | opt.FixParameter(0, 0.8362);
|
---|
63 | opt.SetParameter(1, 2.0);
|
---|
64 | opt.SetParameter(2, 0.8);
|
---|
65 | and process only showers with leakage
|
---|
66 | opt.AddPreCut("MNewImagePar.fLeakage1>0.0001");
|
---|
67 | 3) release all parameters and start with the result of 1) and 2)
|
---|
68 | opt.SetParameter(0, 0.8362);
|
---|
69 | opt.SetParameter(1, 5.84);
|
---|
70 | opt.SetParameter(2, 0.76);
|
---|
71 | and process all showers. (Comment out opt.PreCuts())
|
---|
72 | */
|
---|