37 LogTrace(
"MaterialAccountingGroup") <<
"Elements within: " << name << std::endl;
41 LogTrace(
"MaterialAccountingGroup") <<
"Adding element at(r,z): ("
43 <<
", " <<
GlobalPoint(position.x(), position.y(), position.z()).
z()
44 <<
") cm" << std::endl;
45 LogTrace(
"MaterialAccountingGroup") <<
"Name of added element: "
55 LogTrace(
"MaterialAccountingGroup") <<
"Final BBox r_range: "
58 <<
"Final BBox z_range: "
65 m_dedx_vs_eta =
new TProfile((
m_name +
"_dedx_vs_eta").c_str(),
"Energy loss vs. eta", 600, -3, 3);
66 m_dedx_vs_z =
new TProfile((
m_name +
"_dedx_vs_z").c_str(),
"Energy loss vs. Z", 6000, -300, 300);
67 m_dedx_vs_r =
new TProfile((
m_name +
"_dedx_vs_r").c_str(),
"Energy loss vs. R", 1200, 0, 120);
68 m_radlen_vs_eta =
new TProfile((
m_name +
"_radlen_vs_eta").c_str(),
"Radiation lengths vs. eta", 600, -3, 3);
69 m_radlen_vs_z =
new TProfile((
m_name +
"_radlen_vs_z").c_str(),
"Radiation lengths vs. Z", 6000, -300, 300);
70 m_radlen_vs_r =
new TProfile((
m_name +
"_radlen_vs_r").c_str(),
"Radiation lengths vs. R", 1200, 0, 120);
101 LogTrace(
"MaterialAccountingGroup") <<
"Testing position: (x, y, z, r) = "
102 << position.
x() <<
", " << position.
y()
103 <<
", " << position.
z() <<
", " << position.
perp()
106 LogTrace(
"MaterialAccountingGroup") <<
"r outside of: ("
109 <<
"), Z ouside of: ("
115 LogTrace(
"MaterialAccountingGroup") <<
"r within: ("
122 LogTrace(
"MaterialAccountingGroup") <<
"Closest testing agains(x, y, z, r): ("
156 (m_buffer.in().y() + m_buffer.out().y()) / 2.,
157 (m_buffer.in().z() + m_buffer.out().z()) / 2. );
161 m_dedx_vs_z->Fill( average.
z(), m_buffer.energyLoss(), 1. );
164 m_radlen_vs_z->Fill( average.
z(), m_buffer.radiationLengths(), 1. );
173 TCanvas
canvas(name.c_str(), plot->GetTitle(), 1280, 1024);
174 plot->SetFillColor(15);
175 plot->SetLineColor(1);
177 canvas.GetFrame()->SetFillColor(kWhite);
179 canvas.SaveAs((name +
".png").c_str(),
"");
182 plot->SetDirectory(
m_file);
192 TH1F *
line =
new TH1F((name +
"_par").c_str(),
"Parametrization", 1, plot->GetXaxis()->GetXmin(), plot->GetXaxis()->GetXmax());
193 line->SetBinContent(1, average);
195 TCanvas
canvas(name.c_str(), plot->GetTitle(), 1280, 1024);
196 plot->SetFillColor(15);
197 plot->SetLineColor(1);
198 plot->SetLineWidth(2);
200 line->SetLineColor(2);
201 line->SetLineWidth(2);
203 canvas.GetFrame()->SetFillColor(kWhite);
205 canvas.SaveAs((name +
".png").c_str(),
"");
208 plot->SetDirectory(
m_file);
209 line->SetDirectory(
m_file);
215 std::stringstream
out;
216 out << std::setw(48) << std::left <<
m_name << std::right << std::fixed;;
219 out <<
" Elements: " << std::setw(6) <<
m_elements.size();
226 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
void addFilter(const DDFilter &, DDLogOp op=DDLogOp::AND)
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
type of data representation of DDCompactView
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
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
ESHandle< TrackerGeometry > geometry
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
volatile std::atomic< bool > shutdown_flag false
bool inside(const MaterialAccountingDetector &detector) const
check if detector is inside any part of this layer
void setCriteria(const DDValue &nameVal, DDCompOp, DDLogOp l=DDLogOp::AND, bool asString=true, bool merged=true)
The DDGenericFilter is a runtime-parametrized Filter looking on DDSpecifcs.