Belle II Software  release-05-01-25
NoKickCuts.cc
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2017 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Valerio Bertacchi *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 
11 #include <tracking/trackFindingVXD/sectorMapTools/NoKickCuts.h>
12 
13 #include "TH3.h"
14 
15 #include "TFile.h"
16 #include <string>
17 
18 using namespace Belle2;
19 
20 std::vector<double> NoKickCuts::cutSelector(double sinTheta, double momentum, int layer1, int layer2, EParameters par)
21 {
22  std::vector<double> out;
23  for (int i = c_Min; i <= c_Max; i++) {
24  double cut = getCut(layer1, layer2, par, (EMinMax)i, c_Norm) /
25  (sqrt(sinTheta) * pow(momentum, getCut(layer1, layer2, par, (EMinMax)i, c_Pow)))
26  + getCut(layer1, layer2, par, (EMinMax)i, c_Bkg);
27  out.push_back(cut);
28  }
29  return out;
30 }
31 
32 double NoKickCuts::getCut(int layer1, int layer2, EParameters par, EMinMax m, ECutName cut)
33 {
34  std::vector<std::vector <std::vector <std::vector<double>>>> cutVector;
35  double out;
36 
37  switch (cut) {
38  case c_Norm:
39  cutVector = m_cutNorm;
40  break;
41 
42  case c_Pow:
43  cutVector = m_cutPow;
44  break;
45 
46  case c_Bkg:
47  cutVector = m_cutBkg;
48  break;
49  }
57  out = cutVector.at(m).at(par).at(layer1).at(layer2);
58  return out;
59 }
60 
61 void NoKickCuts::FillCuts(std::string m_fileName)
62 {
63  TFile* file = TFile::Open(m_fileName.c_str());
64 
65 
66  TH3F* input_norm_m = (TH3F*)file->Get("output_norm_m");
67  TH3F* input_pow_m = (TH3F*)file->Get("output_pow_m");
68  TH3F* input_bkg_m = (TH3F*)file->Get("output_bkg_m") ;
69 
70  TH3F* input_norm_M = (TH3F*)file->Get("output_norm_M");
71  TH3F* input_pow_M = (TH3F*)file->Get("output_pow_M");
72  TH3F* input_bkg_M = (TH3F*)file->Get("output_bkg_M");
73 
74 
75  for (int mm = 0; mm < 2; mm++) {
76  std::vector<std::vector<std::vector<double>>> m_cutNorm_minmax;
77  std::vector<std::vector<std::vector<double>>> m_cutPow_minmax;
78  std::vector<std::vector<std::vector<double>>> m_cutBkg_minmax;
79  for (int par = 0; par < m_nbinpar; par++) {
80  std::vector<std::vector<double>> m_cutNorm_par;
81  std::vector<std::vector<double>> m_cutPow_par;
82  std::vector<std::vector<double>> m_cutBkg_par;
83  for (int lay1 = 0; lay1 < m_nbinlay; lay1++) {
84  std::vector<double> m_cutNorm_lay1;
85  std::vector<double> m_cutPow_lay1;
86  std::vector<double> m_cutBkg_lay1;
87  for (int lay2 = 0; lay2 < m_nbinlay; lay2++) {
88  int binNumber = input_norm_m->GetBin(par, lay1, lay2);
89 
90  if (mm == 0) {
91  m_cutNorm_lay1.push_back(input_norm_m->GetBinContent(binNumber));
92  m_cutPow_lay1.push_back(input_pow_m->GetBinContent(binNumber));
93  m_cutBkg_lay1.push_back(input_bkg_m->GetBinContent(binNumber));
94  }
95  if (mm == 1) {
96  m_cutNorm_lay1.push_back(input_norm_M->GetBinContent(binNumber));
97  m_cutPow_lay1.push_back(input_pow_M->GetBinContent(binNumber));
98  m_cutBkg_lay1.push_back(input_bkg_M->GetBinContent(binNumber));
99  }
100  }
101  m_cutNorm_par.push_back(m_cutNorm_lay1);
102  m_cutPow_par.push_back(m_cutPow_lay1);
103  m_cutBkg_par.push_back(m_cutBkg_lay1);
104  m_cutNorm_lay1.clear();
105  m_cutPow_lay1.clear();
106  m_cutBkg_lay1.clear();
107  }
108  m_cutNorm_minmax.push_back(m_cutNorm_par);
109  m_cutPow_minmax.push_back(m_cutPow_par);
110  m_cutBkg_minmax.push_back(m_cutBkg_par);
111  m_cutNorm_par.clear();
112  m_cutPow_par.clear();
113  m_cutBkg_par.clear();
114  }
115  m_cutNorm.push_back(m_cutNorm_minmax);
116  m_cutPow.push_back(m_cutPow_minmax);
117  m_cutBkg.push_back(m_cutBkg_minmax);
118  m_cutNorm_minmax.clear();
119  m_cutPow_minmax.clear();
120  m_cutBkg_minmax.clear();
121  }
122  file->Close();
123  delete file;
124 
125 
126 }
Belle2::NoKickCuts::m_cutPow
std::vector< std::vector< std::vector< std::vector< double > > > > m_cutPow
matrix of fit-parameter of cut, power
Definition: NoKickCuts.h:96
Belle2::NoKickCuts::EMinMax
EMinMax
enum for minimum/maximum value of cuts
Definition: NoKickCuts.h:48
Belle2::NoKickCuts::EParameters
EParameters
enum for parameters name
Definition: NoKickCuts.h:54
Belle2::NoKickCuts::m_cutNorm
std::vector< std::vector< std::vector< std::vector< double > > > > m_cutNorm
matrix of fit-parameter of cut, norm
Definition: NoKickCuts.h:95
Belle2::NoKickCuts::cutSelector
std::vector< double > cutSelector(double sintheta, double momentum, int layer1, int layer2, EParameters par)
This methods selects 2 cuts (minimum and maximum inside a vector) from the information of theta,...
Definition: NoKickCuts.cc:20
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::NoKickCuts::getCut
double getCut(int layer1, int layer2, EParameters par, EMinMax m, ECutName cut)
Definition: NoKickCuts.cc:32
Belle2::NoKickCuts::ECutName
ECutName
enum for the cuts name
Definition: NoKickCuts.h:63
Belle2::NoKickCuts::m_nbinpar
int m_nbinpar
number of track parameter
Definition: NoKickCuts.h:99
Belle2::NoKickCuts::m_cutBkg
std::vector< std::vector< std::vector< std::vector< double > > > > m_cutBkg
matrix of fit-parameter of cut, constant
Definition: NoKickCuts.h:97
Belle2::NoKickCuts::m_nbinlay
int m_nbinlay
number of layers (IP too)
Definition: NoKickCuts.h:100
Belle2::NoKickCuts::FillCuts
void FillCuts(std::string m_fileName)
This method fill the cuts (used in NoKickCutsEval method) to create the cutfile.
Definition: NoKickCuts.cc:61