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
+ for (unsigned int i = 0 ; i < 100000 ; i++) {
34
+ const double x = gRandom ->Uniform (10 .);
35
+ reference.Fill (x, gRandom ->Gaus (5 + x / 2 , 5 .));
36
+ sameDistr.Fill (x, gRandom ->Gaus (5 + x / 2 , 5 .));
37
+ differentDistr.Fill (x, gRandom ->Gaus (20 , 1 .));
38
+ }
39
+
40
+ runTest (reference, sameDistr, differentDistr);
41
+ }
42
+
43
+ TEST (TProfile, Chi2TestWithWrongErrors)
44
+ {
45
+ TProfile reference (" reference" , " reference" , 10 , 0 , 10 );
46
+ reference.Fill (1 , 2 );
47
+ reference.Fill (1 , 3 );
48
+
49
+ for (auto err : {" s" , " i" , " g" }) {
50
+ ROOT::TestSupport::CheckDiagsRAII checkDiag (kWarning , " TProfile::Chi2Test" , " if the error on the mean is used" ,
51
+ false );
52
+
53
+ TProfile sameDistr (" sameDistr" , " sameDistr" , 10 , 0 , 10 , err);
54
+ sameDistr.Fill (1 , 2 );
55
+ sameDistr.Fill (1 , 3 );
56
+
57
+ reference.Chi2Test (&sameDistr);
58
+ }
59
+ }
60
+
61
+ TEST (TProfile2D, Chi2Test)
62
+ {
63
+ TProfile2D reference (" reference" , " reference" , 10 , 0 , 10 , 10 , 0 , 10 );
64
+ TProfile2D sameDistr (" sameDistr" , " sameDistr" , 10 , 0 , 10 , 10 , 0 , 10 );
65
+ TProfile2D differentDistr (" differentDistr" , " differentDistr" , 10 , 0 , 10 , 10 , 0 , 10 );
66
+
67
+ for (unsigned int i = 0 ; i < 50000 ; i++) {
68
+ const double x = gRandom ->Uniform (10 .);
69
+ reference.Fill (x, x + 1 ., gRandom ->Gaus (5 + x / 2 , 5 .));
70
+ sameDistr.Fill (x, x + 1 ., gRandom ->Gaus (5 + x / 2 , 5 .));
71
+ differentDistr.Fill (x, x + 1 ., gRandom ->Gaus (20 , 1 .));
72
+ }
73
+
74
+ runTest (reference, sameDistr, differentDistr);
75
+ }
76
+
77
+ TEST (TProfile3D, Chi2Test)
78
+ {
79
+ TProfile3D reference (" reference" , " reference" , 10 , 0 , 10 , 11 , 0 , 11 , 12 , 0 , 12 );
80
+ TProfile3D sameDistr (" sameDistr" , " sameDistr" , 10 , 0 , 10 , 11 , 0 , 11 , 12 , 0 , 12 );
81
+ TProfile3D differentDistr (" differentDistr" , " differentDistr" , 10 , 0 , 10 , 11 , 0 , 11 , 12 , 0 , 12 );
82
+
83
+ for (unsigned int i = 0 ; i < 50000 ; i++) {
84
+ const double x = gRandom ->Uniform (10 .);
85
+ reference.Fill (x, x + 1 ., x + 2 ., gRandom ->Gaus (5 + x / 2 , 5 .));
86
+ sameDistr.Fill (x, x + 1 ., x + 2 ., gRandom ->Gaus (5 + x / 2 , 5 .));
87
+ differentDistr.Fill (x, x + 1 ., x + 2 ., gRandom ->Gaus (20 , 1 .));
88
+ }
89
+
90
+ runTest (reference, sameDistr, differentDistr);
91
+ }
0 commit comments