35 LogTrace(
"MaterialAccountingGroup") <<
"Elements within: " << name << std::endl;
39 LogTrace(
"MaterialAccountingGroup") <<
"Adding element at(r,z): (" 41 <<
GlobalPoint(position.x(), position.y(), position.z()).
z() <<
") cm" 60 m_dedx_vs_eta =
new TProfile((
m_name +
"_dedx_vs_eta").c_str(),
"Energy loss vs. eta", 600, -3, 3);
61 m_dedx_vs_z =
new TProfile((
m_name +
"_dedx_vs_z").c_str(),
"Energy loss vs. Z", 6000, -300, 300);
62 m_dedx_vs_r =
new TProfile((
m_name +
"_dedx_vs_r").c_str(),
"Energy loss vs. R", 1200, 0, 120);
63 m_radlen_vs_eta =
new TProfile((
m_name +
"_radlen_vs_eta").c_str(),
"Radiation lengths vs. eta", 600, -3, 3);
64 m_radlen_vs_z =
new TProfile((
m_name +
"_radlen_vs_z").c_str(),
"Radiation lengths vs. Z", 6000, -300, 300);
65 m_radlen_vs_r =
new TProfile((
m_name +
"_radlen_vs_r").c_str(),
"Radiation lengths vs. R", 1200, 0, 120);
94 LogTrace(
"MaterialAccountingGroup") <<
"Testing position: (x, y, z, r) = " << position.
x() <<
", " << position.
y()
95 <<
", " << position.
z() <<
", " << position.
perp() << std::endl;
140 (m_buffer.in().y() + m_buffer.out().y()) / 2.,
141 (m_buffer.in().z() + m_buffer.out().z()) / 2.);
145 m_dedx_vs_z->Fill(average.
z(), m_buffer.energyLoss(), 1.);
148 m_radlen_vs_z->Fill(average.
z(), m_buffer.radiationLengths(), 1.);
156 TCanvas
canvas(name.c_str(), plot->GetTitle(), 1280, 1024);
157 plot->SetFillColor(15);
158 plot->SetLineColor(1);
160 canvas.GetFrame()->SetFillColor(kWhite);
162 canvas.SaveAs((name +
".png").c_str(),
"");
165 plot->SetDirectory(
m_file);
175 new TH1F((name +
"_par").c_str(),
"Parametrization", 1, plot->GetXaxis()->GetXmin(), plot->GetXaxis()->GetXmax());
176 line->SetBinContent(1, average);
178 TCanvas
canvas(name.c_str(), plot->GetTitle(), 1280, 1024);
179 plot->SetFillColor(15);
180 plot->SetLineColor(1);
181 plot->SetLineWidth(2);
183 line->SetLineColor(2);
184 line->SetLineWidth(2);
186 canvas.GetFrame()->SetFillColor(kWhite);
188 canvas.SaveAs((name +
".png").c_str(),
"");
191 plot->SetDirectory(
m_file);
192 line->SetDirectory(
m_file);
197 std::stringstream
out;
200 out <<
"BBox: " << std::setprecision(1) << std::setw(6) <<
m_boundingbox.
range_z().first <<
" < Z < " 202 out <<
", " << std::setprecision(1) << std::setw(5) <<
m_boundingbox.
range_r().first <<
" < R < " 204 out <<
" Elements: " << std::setw(6) <<
m_elements.size();
209 m_file =
new TFile((
m_name +
".root").c_str(),
"RECREATE");
const DDLogicalPart & logicalPart() const
The logical-part of the current node in the filtered-view.
MaterialAccountingGroup(const std::string &name, const DDCompactView &geometry)
explicit constructors
double averageRadiationLengths(void) const
return the average normalized number of radiation lengths
void endOfTrack(void)
commit the buffer and reset the "already hit by this track" flag
MaterialAccountingStep m_errors
MaterialAccountingStep m_buffer
T mag() const
The vector magnitude. Equivalent to sqrt(vec.mag2())
std::vector< GlobalPoint > m_elements
Global3DPoint GlobalPoint
std::pair< double, double > range_r() const
std::string info(void) const
get some infos
BoundingBox m_boundingbox
Compact representation of the geometrical detector hierarchy.
double averageEnergyLoss(void) const
return the average normalized energy loss density factor for Bethe-Bloch
bool next()
set current node to the next node in the filtered tree
void savePlot(TH1F *plot, const std::string &name)
MaterialAccountingStep average(void) const
return the average normalized material accounting informations
void grow(double r, double z)
std::pair< double, double > range_z() const
const MaterialAccountingStep & material() const
const std::string & name(void) const
get the layer name
static double const s_tolerance
std::string toString() const
XYZVectorD XYZVector
spatial vector with cartesian internal representation
void savePlots(void)
save the plots
const GlobalPoint & position() const
T perp() const
Magnitude of transverse component.
bool inside(double r, double z) const
static int position[264][3]
TProfile * m_radlen_vs_eta
bool addDetector(const MaterialAccountingDetector &detector)
buffer material from a detector, if the detector is inside the DetLayer bounds
~MaterialAccountingGroup(void)
destructor
const DDTranslation & translation() const
The absolute translation of the current node.
MaterialAccountingStep m_accounting
bool inside(const MaterialAccountingDetector &detector) const
check if detector is inside any part of this layer