363 std::cout << std::endl <<
"Inverting full error matrix, E_{ij}..." << std::endl;
370 TMatrixD E_inv = E_mat.Invert();
381 for (
int i = 0; i <
fNumSin; i++) {
384 for (
int j = 0; j <
fNumDm2; j++) {
389 clock_t startchi = clock();
390 std::cout << std::endl <<
"Calculating chi squareds..." << std::endl;
392 double minchisq = 1e99;
393 std::vector <double> chisq_dm2(fNumDm2, 0);
394 std::vector <std::vector <double> > chisq(fNumSin, chisq_dm2);
396 std::vector<double> signal;
400 std::vector<double> this_signal = sample.Signal();
401 signal.insert(signal.end(), this_signal.begin(), this_signal.end());
404 for (
int j = 0; j <
fNumDm2; j++) {
405 std::vector<std::vector<double>> oscillated;
408 for (
auto const &sample: fEventSamples) {
410 oscillated.push_back(sample.Oscillate(1.,
dm2[j]));
414 std::vector<double> sin2_oscillated(signal.size(), 0);
416 for (
int i = 0; i <
fNumSin; i++) {
418 unsigned count_ind = 0;
419 for (
unsigned sample_ind = 0; sample_ind < oscillated.size(); sample_ind++) {
420 for (
unsigned bin_ind = 0; bin_ind < oscillated[sample_ind].size(); bin_ind++) {
422 if (fEventSamples[sample_ind].fOscType == 0) {
423 sin2_oscillated[count_ind] = signal[count_ind];
426 else if (fEventSamples[sample_ind].fOscType == 1) {
427 sin2_oscillated[count_ind] =
sin2theta[i] * oscillated[sample_ind][bin_ind];
430 else if (fEventSamples[sample_ind].fOscType == 2) {
441 sin2_oscillated[count_ind] = signal[count_ind] * (1 -
sin2theta[i]) +
442 sin2theta[i] * oscillated[sample_ind][bin_ind];
450 assert(count_ind == signal.size());
453 for (
int k = 0;
k < signal.size();
k++) {
454 for (
int l = 0; l < signal.size(); l++) {
455 chisq[i][j] += (signal[
k] - sin2_oscillated[
k]) * (signal[l] - sin2_oscillated[l]) * E_inv[
k][l];
460 if (chisq[i][j] < minchisq) {
461 minchisq = chisq[i][j];
467 clock_t endchi = clock();
468 clock_t tickschi = endchi - startchi;
469 double timechi = tickschi / (double) CLOCKS_PER_SEC;
471 std::cout <<
" Done in " << timechi <<
"s. " << std::endl;
476 for (
int i = 0; i <
fNumSin; i++) {
477 for (
int j = 0; j <
fNumDm2; j++) {
484 for (
int i = 0; i <
fNumSin; i++) {
485 for (
int j = 0; j <
fNumDm2; j++) {
std::vector< std::vector< double > > chisq_diffs
Container for chi2 values.
TMatrixDSym CovarianceMatrix()
std::vector< double > sin2theta
std::vector< double > dm2
std::vector< double > fLogDm2Lims
std::vector< double > fLogSinLims
std::vector< EventSample > fEventSamples
BEGIN_PROLOG could also be cout