1
+ #include " gtest/gtest.h"
2
+
3
+ #include " TProfile.h"
4
+ #include " TProfile2D.h"
5
+ #include " TProfile3D.h"
6
+ #include " TRandom.h"
7
+
8
+ #include " ROOT/TestSupport.hxx"
9
+
10
+ template <typename T>
11
+ void runTest (T const &reference, T const &sameDistr, T const &differentDistr)
12
+ {
13
+ EXPECT_EQ (reference.Chi2Test (&sameDistr), reference.Chi2Test (&sameDistr, " WW" ));
14
+ EXPECT_EQ (reference.Chi2Test (&sameDistr),
15
+ reference.Chi2Test (&sameDistr, " P WW UW" )); // Need more than just the default option
16
+ EXPECT_EQ (reference.Chi2Test (&sameDistr), reference.Chi2Test (&sameDistr, " UW" ));
17
+ EXPECT_EQ (reference.Chi2Test (&sameDistr), reference.Chi2Test (&sameDistr, " UU" ));
18
+ EXPECT_EQ (reference.Chi2Test (&sameDistr), reference.Chi2Test (&sameDistr, " P UU" ));
19
+
20
+ const double probSuccess = reference.Chi2Test (&sameDistr, " P" );
21
+ EXPECT_GT (probSuccess, 0.1 );
22
+ EXPECT_LE (probSuccess, 1 .);
23
+ const double probFail = reference.Chi2Test (&differentDistr, " P" );
24
+ EXPECT_LT (probFail, 0.05 );
25
+ }
26
+
27
+ TEST (TProfile, Chi2Test)
28
+ {
29
+ TProfile reference (" reference" , " reference" , 10 , 0 , 10 );
30
+ TProfile sameDistr (" sameDistr" , " sameDistr" , 10 , 0 , 10 );
31
+ TProfile differentDistr (" differentDistr" , " differentDistr" , 10 , 0 , 10 );
32
+
33
+ gRandom ->SetSeed (1 );
34
+ for (unsigned int i = 0 ; i < 100000 ; i++) {
35
+ const double x = gRandom ->Uniform (10 .);
36
+ reference.Fill (x, gRandom ->Gaus (5 + x / 2 , 5 .));
37
+ sameDistr.Fill (x, gRandom ->Gaus (5 + x / 2 , 5 .));
38
+ differentDistr.Fill (x, gRandom ->Gaus (20 , 1 .));
39
+ }
40
+
41
+ runTest (reference, sameDistr, differentDistr);
42
+ }
43
+
44
+ TEST (TProfile, Chi2TestWithWrongErrors)
45
+ {
46
+ TProfile reference (" reference" , " reference" , 10 , 0 , 10 );
47
+ reference.Fill (1 , 2 );
48
+ reference.Fill (1 , 3 );
49
+
50
+ for (auto err : {" s" , " i" , " g" }) {
51
+ ROOT::TestSupport::CheckDiagsRAII checkDiag (kError , " TProfile::Chi2Test" , " error of mean" ,
52
+ false );
53
+
54
+ TProfile sameDistr (" sameDistr" , " sameDistr" , 10 , 0 , 10 , err);
55
+ sameDistr.Fill (1 , 2 );
56
+ sameDistr.Fill (1 , 3 );
57
+
58
+ reference.Chi2Test (&sameDistr);
59
+ }
60
+ }
61
+
62
+ TEST (TProfile2D, Chi2Test)
63
+ {
64
+ TProfile2D reference (" reference" , " reference" , 10 , 0 , 10 , 10 , 0 , 10 );
65
+ TProfile2D sameDistr (" sameDistr" , " sameDistr" , 10 , 0 , 10 , 10 , 0 , 10 );
66
+ TProfile2D differentDistr (" differentDistr" , " differentDistr" , 10 , 0 , 10 , 10 , 0 , 10 );
67
+
68
+ gRandom ->SetSeed (1 );
69
+ for (unsigned int i = 0 ; i < 50000 ; i++) {
70
+ const double x = gRandom ->Uniform (10 .);
71
+ reference.Fill (x, x + 1 ., gRandom ->Gaus (5 + x / 2 , 5 .));
72
+ sameDistr.Fill (x, x + 1 ., gRandom ->Gaus (5 + x / 2 , 5 .));
73
+ differentDistr.Fill (x, x + 1 ., gRandom ->Gaus (20 , 1 .));
74
+ }
75
+
76
+ runTest (reference, sameDistr, differentDistr);
77
+ }
78
+
79
+ TEST (TProfile3D, Chi2Test)
80
+ {
81
+ TProfile3D reference (" reference" , " reference" , 10 , 0 , 10 , 11 , 0 , 11 , 12 , 0 , 12 );
82
+ TProfile3D sameDistr (" sameDistr" , " sameDistr" , 10 , 0 , 10 , 11 , 0 , 11 , 12 , 0 , 12 );
83
+ TProfile3D differentDistr (" differentDistr" , " differentDistr" , 10 , 0 , 10 , 11 , 0 , 11 , 12 , 0 , 12 );
84
+
85
+ gRandom ->SetSeed (1 );
86
+ for (unsigned int i = 0 ; i < 50000 ; i++) {
87
+ const double x = gRandom ->Uniform (10 .);
88
+ reference.Fill (x, x + 1 ., x + 2 ., gRandom ->Gaus (5 + x / 2 , 5 .));
89
+ sameDistr.Fill (x, x + 1 ., x + 2 ., gRandom ->Gaus (5 + x / 2 , 5 .));
90
+ differentDistr.Fill (x, x + 1 ., x + 2 ., gRandom ->Gaus (20 , 1 .));
91
+ }
92
+
93
+ runTest (reference, sameDistr, differentDistr);
94
+ }
0 commit comments