simple-tof-analysis
 All Classes Namespaces Functions Variables Groups Pages
Utilities.h
1 #include <fstream>
2 
3 using namespace std;
4 
5 //__________________________________________________________________________________________________________________________
7 bool does_file_exist(const char *fileName)
8 {
9  // A very simple function to test if a file exists
10  // Main use is to ensure that the output file is not overwriting an existing file.
11 
12  return static_cast<bool>(std::ifstream(fileName));
13 }
14 
15 
16 
17 
18 //__________________________________________________________________________________________________________________________
20 int GetVolumneId(int ixx, int iyy, int ixx_MAX)
21 {
22  return ixx + (iyy - 1) * ixx_MAX;
23 }
24 
25 
26 
27 
28 //__________________________________________________________________________________________________________________________
30 std::vector<int> GetPPtFromVolumeId(int volumeID, int ixx_MAX, bool debug = false)
31 {
32  int ipt = (int)volumeID/(int)ixx_MAX + 1;
33  int ipp = volumeID % ixx_MAX;
34 
35  if (ipp == 0)
36  {
37  ipp = ixx_MAX;
38  ipt = ipt - 1;
39  }
40 
41  if (debug == true) cerr<<"Verify (ipp, ipt) = "<<ipp<<", "<<ipt<<endl;
42 
43  std::vector<int> ipp_ipt = {ipp, ipt};
44  return ipp_ipt;
45 }
46 
47 
48 
49 
50 //________________________________________________________________________________________________________
52 void printVector(const vector<int> &v)
53 {
54  for (int x : v)
55  {
56  std::cout << x << ", ";
57  }
58  std::cout<<endl;
59 }
60 
61 
62 
63 
64 //________________________________________________________________________________________________________
66 bool IsInRange(const double &p, const double &v1, const double &v2)
67 {
70 
71  return v1 <= v2 // <- v1 and v2 are compared only once
72  ? v1 <= p && p <= v2 // check if the ordering is v1, p, v2.
73  : v2 <= p && p <= v1; // check if the ordering is v2, p, v1.
74 }
75 
76 //________________________________________________________________________________________________________
78 bool IsCleanDeuteronCandidate(const double &momentum, const double &pT, const double &massSQ, const double &dEdx)
79 {
80  if (pT > 1.5)
81  return false;
82 
83  if (momentum >= 12.0 || momentum <= 4.0)
84  return false;
85 
86  const double massSQD = 3.52;
87  const double massSQD_min = 0.95*massSQD;
88  const double massSQD_max = 1.05*massSQD;
89  if (massSQ >= massSQD_max || massSQ <= massSQD_min)
90  return false;
91 
92  const double massD = 1.8756;
93  double dEdx_deuteronBB = BetheBlochAntoniMod(momentum/massD);
94  double dEdx_deuteronBB_min = 0.95*dEdx_deuteronBB;
95  double dEdx_deuteronBB_max = 1.05*dEdx_deuteronBB;
96  if (dEdx >= dEdx_deuteronBB_max || dEdx <= dEdx_deuteronBB_min)
97  return false;
98  else
99  return true;
100 }