CMS 3D CMS Logo

HFFibre.cc
Go to the documentation of this file.
1 // File: HFFibre.cc
3 // Description: Loads the table for attenuation length and calculates it
5 
8 
9 #include "CLHEP/Units/GlobalSystemOfUnits.h"
10 #include "CLHEP/Units/GlobalPhysicalConstants.h"
11 #include <iostream>
12 #include <sstream>
13 
14 //#define EDM_ML_DEBUG
15 
17  const HcalDDDSimConstants* hcons,
18  const HcalSimulationParameters* hps,
19  edm::ParameterSet const& p)
20  : hcalConstant_(hcons), hcalsimpar_(hps) {
21  edm::ParameterSet m_HF = p.getParameter<edm::ParameterSet>("HFShower");
22  cFibre = c_light * (m_HF.getParameter<double>("CFibre"));
23 
24  edm::LogVerbatim("HFShower") << "HFFibre:: Speed of light in fibre " << cFibre << " m/ns";
25 
26  // Attenuation length
28  nBinAtt = static_cast<int>(attL.size());
29 #ifdef EDM_ML_DEBUG
30  std::stringstream ss1;
31  for (int it = 0; it < nBinAtt; it++) {
32  if (it / 10 * 10 == it) {
33  ss1 << "\n";
34  }
35  ss1 << " " << attL[it] * CLHEP::cm;
36  }
37  edm::LogVerbatim("HFShower") << "HFFibre: " << nBinAtt << " attL(1/cm): " << ss1.str();
38 #endif
39  // Limits on Lambda
40  std::vector<int> nvec = hcalsimpar_->lambdaLimits_;
41  lambLim[0] = nvec[0];
42  lambLim[1] = nvec[1];
43 #ifdef EDM_ML_DEBUG
44  edm::LogVerbatim("HFShower") << "HFFibre: Limits on lambda " << lambLim[0] << " and " << lambLim[1];
45 #endif
46  // Fibre Lengths
48 #ifdef EDM_ML_DEBUG
49  std::stringstream ss2;
50  for (unsigned int it = 0; it < longFL.size(); it++) {
51  if (it / 10 * 10 == it) {
52  ss2 << "\n";
53  }
54  ss2 << " " << longFL[it] / CLHEP::cm;
55  }
56  edm::LogVerbatim("HFShower") << "HFFibre: " << longFL.size() << " Long Fibre Length(cm):" << ss2.str();
57 #endif
59 #ifdef EDM_ML_DEBUG
60  std::stringstream ss3;
61  for (unsigned int it = 0; it < shortFL.size(); it++) {
62  if (it / 10 * 10 == it) {
63  ss3 << "\n";
64  }
65  ss3 << " " << shortFL[it] / CLHEP::cm;
66  }
67  edm::LogVerbatim("HFShower") << "HFFibre: " << shortFL.size() << " Short Fibre Length(cm):" << ss3.str();
68 #endif
69 
70  // Now geometry parameters
73 
74  nBinR = static_cast<int>(radius.size());
75 #ifdef EDM_ML_DEBUG
76  std::stringstream sss;
77  for (int i = 0; i < nBinR; ++i) {
78  if (i / 10 * 10 == i) {
79  sss << "\n";
80  }
81  sss << " " << radius[i] / CLHEP::cm;
82  }
83  edm::LogVerbatim("HFShower") << "HFFibre: " << radius.size() << " rTable(cm):" << sss.str();
84 #endif
85 }
86 
87 double HFFibre::attLength(double lambda) {
88  int i = int(nBinAtt * (lambda - lambLim[0]) / (lambLim[1] - lambLim[0]));
89 
90  int j = i;
91  if (i >= nBinAtt)
92  j = nBinAtt - 1;
93  else if (i < 0)
94  j = 0;
95  double att = attL[j];
96 #ifdef EDM_ML_DEBUG
97  edm::LogVerbatim("HFShower") << "HFFibre::attLength for Lambda " << lambda << " index " << i << " " << j
98  << " Att. Length " << att;
99 #endif
100  return att;
101 }
102 
103 double HFFibre::tShift(const G4ThreeVector& point, int depth, int fromEndAbs) {
104  double zFibre = zShift(point, depth, fromEndAbs);
105  double time = zFibre / cFibre;
106 #ifdef EDM_ML_DEBUG
107  edm::LogVerbatim("HFShower") << "HFFibre::tShift for point " << point << " ( depth = " << depth
108  << ", traversed length = " << zFibre / CLHEP::cm << " cm) = " << time / CLHEP::ns
109  << " ns";
110 #endif
111  return time;
112 }
113 
114 double HFFibre::zShift(const G4ThreeVector& point, int depth, int fromEndAbs) { // point is z-local
115 
116  double zFibre = 0;
117  double hR = sqrt((point.x()) * (point.x()) + (point.y()) * (point.y()));
118  int ieta = 0;
119  double length = 250 * CLHEP::cm;
120  if (fromEndAbs < 0) {
121  zFibre = 0.5 * gpar[1] - point.z(); // Never, as fromEndAbs=0 (?)
122  } else {
123  // Defines the Radius bin by radial subdivision
124  for (int i = nBinR - 1; i > 0; --i)
125  if (hR < radius[i])
126  ieta = nBinR - i - 1;
127  // define the length of the fibre
128  if (depth == 2) {
129  if ((int)(shortFL.size()) > ieta)
130  length = shortFL[ieta];
131  } else {
132  if ((int)(longFL.size()) > ieta)
133  length = longFL[ieta];
134  }
135  zFibre = length;
136  if (fromEndAbs > 0) {
137  zFibre -= gpar[1]; // Never, as fromEndAbs=0 (M.K. ?)
138  } else {
139  double zz = 0.5 * gpar[1] + point.z();
140  zFibre -= zz;
141  }
142  if (depth == 2)
143  zFibre += gpar[0]; // here zFibre is reduced for Short
144  }
145 
146 #ifdef EDM_ML_DEBUG
147  edm::LogVerbatim("HFShower") << "HFFibre::zShift for point " << point << " (R = " << hR / CLHEP::cm
148  << " cm, Index = " << ieta << ", depth = " << depth
149  << ", Fibre Length = " << length / CLHEP::cm << " cm = " << zFibre / CLHEP::cm << " cm)";
150 #endif
151  return zFibre;
152 }
double tShift(const G4ThreeVector &point, int depth, int fromEndAbs=0)
Definition: HFFibre.cc:103
std::vector< double > gpar
Definition: HFFibre.h:35
T getParameter(std::string const &) const
double lambLim[2]
Definition: HFFibre.h:39
HFFibre(const std::string &name, const HcalDDDSimConstants *hcons, const HcalSimulationParameters *hps, edm::ParameterSet const &p)
Definition: HFFibre.cc:16
const HcalDDDSimConstants * hcalConstant_
Definition: HFFibre.h:32
std::vector< double > shortFiberLength_
std::vector< double > longFiberLength_
double attLength(double lambda)
Definition: HFFibre.cc:87
const HcalSimulationParameters * hcalsimpar_
Definition: HFFibre.h:33
int nBinAtt
Definition: HFFibre.h:38
double zShift(const G4ThreeVector &point, int depth, int fromEndAbs=0)
Definition: HFFibre.cc:114
std::vector< double > radius
Definition: HFFibre.h:35
double cFibre
Definition: HFFibre.h:34
int nBinR
Definition: HFFibre.h:38
const std::vector< double > & getRTableHF() const
T sqrt(T t)
Definition: SSEVec.h:19
std::vector< double > shortFL
Definition: HFFibre.h:36
std::vector< double > attL
Definition: HFFibre.h:37
const std::vector< double > & getGparHF() const
std::vector< double > attenuationLength_
*vegas h *****************************************************used in the default bin number in original ***version of VEGAS is ***a higher bin number might help to derive a more precise ***grade subtle point
Definition: invegas.h:5
std::vector< double > longFL
Definition: HFFibre.h:36