CMS 3D CMS Logo

AcceptanceTableHelper.cc
Go to the documentation of this file.
1 /****************************************************************************
2  * File AcceptanceTableHelper.cc
3  *
4  * Access to acceptance tables stored in root histograms
5  *
6  * Author: Dmitry Zaborov
7  *
8  * Version: $Id: AcceptanceTableHelper.cc,v 1.3 2007/12/31 10:02:46 elmer Exp $
9  ***************************************************************************/
10 
12 
13 #include <iostream>
14 #include <cmath>
15 
18 void AcceptanceTableHelper::Init(TFile& f, const std::string basename) {
19  // ... read table for low t
20  TH3F* h = (TH3F*)f.Get(basename.c_str());
21 
22  if (h != nullptr) {
23  h_log10t_log10Xi_Phi = (TH3F*)h->Clone();
24  std::cout << "Read ";
25  h_log10t_log10Xi_Phi->SetDirectory(nullptr); // secure it from deleting if the file is eventually closed
26  h_log10t_log10Xi_Phi->Print();
27  } else {
28  std::cout << "Warning: could not get acceptance table " << basename << std::endl;
29  }
30 
31  // ... read table for high t
32  std::string name2 = basename + "_hight";
33  h = (TH3F*)f.Get(name2.c_str());
34 
35  if (h != nullptr) {
36  h_t_log10Xi_Phi = (TH3F*)h->Clone();
37  h_t_log10Xi_Phi->SetDirectory(nullptr); // secure it from deleting if the file is eventually closed
38  std::cout << "Read ";
39  h_t_log10Xi_Phi->Print();
40  } else {
41  std::cout << "Warning: could not get acceptance table " << name2 << std::endl;
42  }
43 }
44 
47 float AcceptanceTableHelper::GetAcceptance(float t, float xi, float phi) {
48  float log10t = log10(-t);
49  float log10Xi = log10(xi);
50 
51  float acc = 0;
52 
53  if ((h_log10t_log10Xi_Phi != nullptr) // if table exists
54  && (log10t < h_log10t_log10Xi_Phi->GetXaxis()->GetXmax())) // and t within table range
55  {
56  float log10tMin = h_log10t_log10Xi_Phi->GetXaxis()->GetXmin();
57  if (log10t < log10tMin)
58  log10t = log10tMin; // very small t should go to the lowest t bin
59 
60  acc = h_log10t_log10Xi_Phi->GetBinContent(h_log10t_log10Xi_Phi->FindBin(log10t, log10Xi, phi));
61 
62  } else if (h_t_log10Xi_Phi != nullptr) { // if table exists for high t
63 
64  acc = h_t_log10Xi_Phi->GetBinContent(h_t_log10Xi_Phi->FindBin(-t, log10Xi, phi));
65  }
66 
67  return acc;
68 }
void Init(TFile &, const std::string)
Get acceptance tables from root file.
TH3F * h_log10t_log10Xi_Phi
Table for low t: acceptance as a function of log10(t), log10(Xi) and Phi.
double f[11][100]
TH3F * h_t_log10Xi_Phi
Table for high t: acceptance as a function of -t, log10(Xi) and Phi.
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
Definition: Activities.doc:4
float GetAcceptance(float, float, float)
Acceptance as a function of t, xi and phi.