CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Private Member Functions | Private Attributes
TrackingMaterialProducer Class Reference

#include <TrackingMaterialProducer.h>

Inheritance diagram for TrackingMaterialProducer:
SimProducer Observer< const BeginOfJob * > Observer< const BeginOfEvent * > Observer< const BeginOfTrack * > Observer< const G4Step * > Observer< const EndOfTrack * > SimWatcher

Public Member Functions

 TrackingMaterialProducer (const edm::ParameterSet &)
 
virtual ~TrackingMaterialProducer ()
 
- Public Member Functions inherited from SimProducer
void registerProducts (edm::EDProducer &iProd)
 
 SimProducer ()
 
- Public Member Functions inherited from SimWatcher
 SimWatcher ()
 
virtual ~SimWatcher ()
 
- Public Member Functions inherited from Observer< const BeginOfJob * >
 Observer ()
 
void slotForUpdate (const BeginOfJob *iT)
 
virtual ~Observer ()
 
- Public Member Functions inherited from Observer< const BeginOfEvent * >
 Observer ()
 
void slotForUpdate (const BeginOfEvent *iT)
 
virtual ~Observer ()
 
- Public Member Functions inherited from Observer< const BeginOfTrack * >
 Observer ()
 
void slotForUpdate (const BeginOfTrack *iT)
 
virtual ~Observer ()
 
- Public Member Functions inherited from Observer< const G4Step * >
 Observer ()
 
void slotForUpdate (const G4Step *iT)
 
virtual ~Observer ()
 
- Public Member Functions inherited from Observer< const EndOfTrack * >
 Observer ()
 
void slotForUpdate (const EndOfTrack *iT)
 
virtual ~Observer ()
 

Private Member Functions

bool isSelected (const G4VTouchable *touch)
 
void produce (edm::Event &, const edm::EventSetup &)
 
void update (const BeginOfJob *)
 This routine will be called when the appropriate signal arrives. More...
 
void update (const BeginOfEvent *)
 This routine will be called when the appropriate signal arrives. More...
 
void update (const BeginOfTrack *)
 This routine will be called when the appropriate signal arrives. More...
 
void update (const G4Step *)
 This routine will be called when the appropriate signal arrives. More...
 
void update (const EndOfTrack *)
 This routine will be called when the appropriate signal arrives. More...
 

Private Attributes

bool m_primaryTracks
 
std::vector< std::string > m_selectedNames
 
std::vector< const
G4LogicalVolume * > 
m_selectedVolumes
 
MaterialAccountingTrack m_track
 
std::vector
< MaterialAccountingTrack > * 
m_tracks
 

Additional Inherited Members

- Protected Member Functions inherited from SimProducer
template<class T >
void produces ()
 
template<class T >
void produces (const std::string &instanceName)
 

Detailed Description

Definition at line 24 of file TrackingMaterialProducer.h.

Constructor & Destructor Documentation

TrackingMaterialProducer::TrackingMaterialProducer ( const edm::ParameterSet iPSet)

Definition at line 70 of file TrackingMaterialProducer.cc.

References HDQMDatabaseProducer::config, edm::ParameterSet::getParameter(), m_primaryTracks, m_selectedNames, and m_tracks.

71 {
72  edm::ParameterSet config = iPSet.getParameter<edm::ParameterSet>("TrackingMaterialProducer");
73  m_selectedNames = config.getParameter< std::vector<std::string> >("SelectedVolumes");
74  m_primaryTracks = config.getParameter<bool>("PrimaryTracksOnly");
75  m_tracks = 0;
76 
77  produces< std::vector<MaterialAccountingTrack> >();
78 }
T getParameter(std::string const &) const
std::vector< MaterialAccountingTrack > * m_tracks
std::vector< std::string > m_selectedNames
TrackingMaterialProducer::~TrackingMaterialProducer ( void  )
virtual

Definition at line 81 of file TrackingMaterialProducer.cc.

82 {
83 }

Member Function Documentation

bool TrackingMaterialProducer::isSelected ( const G4VTouchable *  touch)
private

Definition at line 250 of file TrackingMaterialProducer.cc.

References i, m_selectedVolumes, and or.

Referenced by update().

251 {
252  for (size_t i = 0; i < m_selectedVolumes.size(); ++i)
253  if (m_selectedVolumes[i]->IsAncestor( touchable->GetVolume() ) or m_selectedVolumes[i] == touchable->GetVolume()->GetLogicalVolume())
254  return true;
255 
256  return false;
257 }
int i
Definition: DBlmapReader.cc:9
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventIDconst &, edm::Timestampconst & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
std::vector< const G4LogicalVolume * > m_selectedVolumes
void TrackingMaterialProducer::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
privatevirtual

Implements SimProducer.

Definition at line 241 of file TrackingMaterialProducer.cc.

References m_tracks, edm::Event::put(), and testEve_cfg::tracks.

242 {
243  // transfer ownership to the Event
244  std::auto_ptr<std::vector<MaterialAccountingTrack> > tracks( m_tracks );
245  iEvent.put( tracks );
246  m_tracks = 0;
247 }
std::vector< MaterialAccountingTrack > * m_tracks
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:94
tuple tracks
Definition: testEve_cfg.py:39
void TrackingMaterialProducer::update ( const BeginOfJob )
privatevirtual

This routine will be called when the appropriate signal arrives.

Implements Observer< const BeginOfJob * >.

Definition at line 86 of file TrackingMaterialProducer.cc.

References dtNoiseDBValidation_cfg::cerr, gather_cfg::cout, GetVolume(), m_selectedNames, and m_selectedVolumes.

Referenced by progressbar.ProgressBar::__next__(), relval_steps.Matrix::__setitem__(), relval_steps.Steps::__setitem__(), Vispa.Gui.VispaWidget.VispaWidget::autosize(), Vispa.Views.LineDecayView.LineDecayContainer::createObject(), Vispa.Views.LineDecayView.LineDecayContainer::deselectAllObjects(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::deselectAllWidgets(), Vispa.Gui.VispaWidget.VispaWidget::enableAutosizing(), progressbar.ProgressBar::finish(), Vispa.Gui.MenuWidget.MenuWidget::leaveEvent(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::mouseMoveEvent(), Vispa.Gui.MenuWidget.MenuWidget::mouseMoveEvent(), Vispa.Views.LineDecayView.LineDecayContainer::mouseMoveEvent(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::mouseReleaseEvent(), Vispa.Views.LineDecayView.LineDecayContainer::objectMoved(), relval_steps.Steps::overwrite(), Vispa.Views.LineDecayView.LineDecayContainer::removeObject(), Vispa.Gui.ConnectableWidget.ConnectableWidget::removePorts(), Vispa.Gui.FindDialog.FindDialog::reset(), Vispa.Gui.PortConnection.PointToPointConnection::select(), Vispa.Gui.VispaWidget.VispaWidget::select(), Vispa.Views.LineDecayView.LineDecayContainer::select(), Vispa.Gui.VispaWidget.VispaWidget::setText(), Vispa.Gui.VispaWidget.VispaWidget::setTitle(), Vispa.Gui.ZoomableWidget.ZoomableWidget::setZoom(), Vispa.Views.LineDecayView.LineDecayContainer::setZoom(), and Vispa.Gui.PortConnection.PointToPointConnection::updateConnection().

87 {
88  // INFO
89  std::cout << "TrackingMaterialProducer: List of the selected volumes: " << std::endl;
90  for (std::vector<std::string>::const_iterator volume_name = m_selectedNames.begin(); volume_name != m_selectedNames.end(); ++volume_name) {
91  const G4LogicalVolume* volume = GetVolume(*volume_name);
92  if (volume) {
93  std::cout << '\t' << *volume_name << std::endl;
94  m_selectedVolumes.push_back( volume );
95  } else {
96  // FIXME: throw an exception ?
97  std::cerr << "TrackingMaterialProducer::update(const BeginOfJob*): WARNING: selected volume \"" << *volume_name << "\" not found in geometry " << std::endl;
98  }
99  }
100  std::cout << std::endl;
101 }
std::vector< const G4LogicalVolume * > m_selectedVolumes
static const G4LogicalVolume * GetVolume(const std::string &name)
std::vector< std::string > m_selectedNames
tuple cout
Definition: gather_cfg.py:121
void TrackingMaterialProducer::update ( const BeginOfEvent )
privatevirtual

This routine will be called when the appropriate signal arrives.

Implements Observer< const BeginOfEvent * >.

Definition at line 105 of file TrackingMaterialProducer.cc.

References m_tracks.

Referenced by progressbar.ProgressBar::__next__(), relval_steps.Matrix::__setitem__(), relval_steps.Steps::__setitem__(), Vispa.Gui.VispaWidget.VispaWidget::autosize(), Vispa.Views.LineDecayView.LineDecayContainer::createObject(), Vispa.Views.LineDecayView.LineDecayContainer::deselectAllObjects(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::deselectAllWidgets(), Vispa.Gui.VispaWidget.VispaWidget::enableAutosizing(), progressbar.ProgressBar::finish(), Vispa.Gui.MenuWidget.MenuWidget::leaveEvent(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::mouseMoveEvent(), Vispa.Gui.MenuWidget.MenuWidget::mouseMoveEvent(), Vispa.Views.LineDecayView.LineDecayContainer::mouseMoveEvent(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::mouseReleaseEvent(), Vispa.Views.LineDecayView.LineDecayContainer::objectMoved(), relval_steps.Steps::overwrite(), Vispa.Views.LineDecayView.LineDecayContainer::removeObject(), Vispa.Gui.ConnectableWidget.ConnectableWidget::removePorts(), Vispa.Gui.FindDialog.FindDialog::reset(), Vispa.Gui.PortConnection.PointToPointConnection::select(), Vispa.Gui.VispaWidget.VispaWidget::select(), Vispa.Views.LineDecayView.LineDecayContainer::select(), Vispa.Gui.VispaWidget.VispaWidget::setText(), Vispa.Gui.VispaWidget.VispaWidget::setTitle(), Vispa.Gui.ZoomableWidget.ZoomableWidget::setZoom(), Vispa.Views.LineDecayView.LineDecayContainer::setZoom(), and Vispa.Gui.PortConnection.PointToPointConnection::updateConnection().

106 {
107  m_tracks = new std::vector<MaterialAccountingTrack>();
108 }
std::vector< MaterialAccountingTrack > * m_tracks
void TrackingMaterialProducer::update ( const BeginOfTrack )
privatevirtual

This routine will be called when the appropriate signal arrives.

Implements Observer< const BeginOfTrack * >.

Definition at line 112 of file TrackingMaterialProducer.cc.

References m_primaryTracks, m_track, and MaterialAccountingTrack::reset().

Referenced by progressbar.ProgressBar::__next__(), relval_steps.Matrix::__setitem__(), relval_steps.Steps::__setitem__(), Vispa.Gui.VispaWidget.VispaWidget::autosize(), Vispa.Views.LineDecayView.LineDecayContainer::createObject(), Vispa.Views.LineDecayView.LineDecayContainer::deselectAllObjects(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::deselectAllWidgets(), Vispa.Gui.VispaWidget.VispaWidget::enableAutosizing(), progressbar.ProgressBar::finish(), Vispa.Gui.MenuWidget.MenuWidget::leaveEvent(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::mouseMoveEvent(), Vispa.Gui.MenuWidget.MenuWidget::mouseMoveEvent(), Vispa.Views.LineDecayView.LineDecayContainer::mouseMoveEvent(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::mouseReleaseEvent(), Vispa.Views.LineDecayView.LineDecayContainer::objectMoved(), relval_steps.Steps::overwrite(), Vispa.Views.LineDecayView.LineDecayContainer::removeObject(), Vispa.Gui.ConnectableWidget.ConnectableWidget::removePorts(), Vispa.Gui.FindDialog.FindDialog::reset(), Vispa.Gui.PortConnection.PointToPointConnection::select(), Vispa.Gui.VispaWidget.VispaWidget::select(), Vispa.Views.LineDecayView.LineDecayContainer::select(), Vispa.Gui.VispaWidget.VispaWidget::setText(), Vispa.Gui.VispaWidget.VispaWidget::setTitle(), Vispa.Gui.ZoomableWidget.ZoomableWidget::setZoom(), Vispa.Views.LineDecayView.LineDecayContainer::setZoom(), and Vispa.Gui.PortConnection.PointToPointConnection::updateConnection().

113 {
114  m_track.reset();
115 
116  // prevent secondary tracks from propagating
117  G4Track* track = const_cast<G4Track*>((*event)());
118  if (m_primaryTracks and track->GetParentID() != 0) {
119  track->SetTrackStatus(fStopAndKill);
120  }
121 }
MaterialAccountingTrack m_track
void TrackingMaterialProducer::update ( const G4Step *  )
privatevirtual

This routine will be called when the appropriate signal arrives.

Implements Observer< const G4Step * >.

Definition at line 125 of file TrackingMaterialProducer.cc.

References MaterialAccountingTrack::enterDetector(), GetSensitiveVolume(), GetTransform(), isSelected(), MaterialAccountingTrack::leaveDetector(), testEve_cfg::level, m_track, pos, position, MaterialAccountingTrack::step(), create_public_pileup_plots::transform, and X0.

Referenced by progressbar.ProgressBar::__next__(), relval_steps.Matrix::__setitem__(), relval_steps.Steps::__setitem__(), Vispa.Gui.VispaWidget.VispaWidget::autosize(), Vispa.Views.LineDecayView.LineDecayContainer::createObject(), Vispa.Views.LineDecayView.LineDecayContainer::deselectAllObjects(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::deselectAllWidgets(), Vispa.Gui.VispaWidget.VispaWidget::enableAutosizing(), progressbar.ProgressBar::finish(), Vispa.Gui.MenuWidget.MenuWidget::leaveEvent(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::mouseMoveEvent(), Vispa.Gui.MenuWidget.MenuWidget::mouseMoveEvent(), Vispa.Views.LineDecayView.LineDecayContainer::mouseMoveEvent(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::mouseReleaseEvent(), Vispa.Views.LineDecayView.LineDecayContainer::objectMoved(), relval_steps.Steps::overwrite(), Vispa.Views.LineDecayView.LineDecayContainer::removeObject(), Vispa.Gui.ConnectableWidget.ConnectableWidget::removePorts(), Vispa.Gui.FindDialog.FindDialog::reset(), Vispa.Gui.PortConnection.PointToPointConnection::select(), Vispa.Gui.VispaWidget.VispaWidget::select(), Vispa.Views.LineDecayView.LineDecayContainer::select(), Vispa.Gui.VispaWidget.VispaWidget::setText(), Vispa.Gui.VispaWidget.VispaWidget::setTitle(), Vispa.Gui.ZoomableWidget.ZoomableWidget::setZoom(), Vispa.Views.LineDecayView.LineDecayContainer::setZoom(), and Vispa.Gui.PortConnection.PointToPointConnection::updateConnection().

126 {
127  const G4TouchableHistory* touchable = (G4TouchableHistory*)(step->GetTrack()->GetTouchable());
128  if (not isSelected( touchable )) {
129  //std::cout << "\t[...] skipping " << touchable->GetVolume()->GetName() << std::endl;
130  return;
131  }
132 
133  // material and step proterties
134  const G4Material* material = touchable->GetVolume()->GetLogicalVolume()->GetMaterial();
135  double length = step->GetStepLength() / cm; // mm -> cm
136  double X0 = material->GetRadlen() / cm; // mm -> cm
137  double Ne = material->GetElectronDensity() * cm3; // 1/mm3 -> 1/cm3
138  double Xi = Ne / 6.0221415e23 * 0.307075 / 2.; // MeV / cm
139  double radiationLengths = length / X0; //
140  double energyLoss = length * Xi; // MeV
141  //double energyLoss = step->GetDeltaEnergy()/MeV; should we use this??
142 
143  G4ThreeVector globalPosPre = step->GetPreStepPoint()->GetPosition();
144  G4ThreeVector globalPosPost = step->GetPostStepPoint()->GetPosition();
145  GlobalPoint globalPositionIn( globalPosPre.x() / cm, globalPosPre.y() / cm, globalPosPre.z() / cm ); // mm -> cm
146  GlobalPoint globalPositionOut( globalPosPost.x() / cm, globalPosPost.y() / cm, globalPosPost.z() / cm ); // mm -> cm
147 
148  // check for a sensitive detector
149  bool enter_sensitive = false;
150  bool leave_sensitive = false;
151  double cosThetaPre = 0.0;
152  double cosThetaPost = 0.0;
153  int level = 0;
154  const G4VPhysicalVolume* sensitive = 0;
156  boost::tuples::tie(sensitive, level) = GetSensitiveVolume(touchable);
157  if (sensitive) {
158  const G4VSolid & solid = *touchable->GetSolid( level );
159  const G4AffineTransform & transform = GetTransform( touchable, level );
160  G4ThreeVector pos = transform.Inverse().TransformPoint( G4ThreeVector( 0., 0., 0. ) );
161  position = GlobalPoint( pos.x() / cm, pos.y() / cm, pos.z() / cm ); // mm -> cm
162 
163  G4ThreeVector localPosPre = transform.TransformPoint( globalPosPre );
164  EInside statusPre = solid.Inside( localPosPre );
165  if (statusPre == kSurface) {
166  enter_sensitive = true;
167  G4ThreeVector globalDirPre = step->GetPreStepPoint()->GetMomentumDirection();
168  G4ThreeVector localDirPre = transform.TransformAxis( globalDirPre );
169  G4ThreeVector normalPre = solid.SurfaceNormal( localPosPre );
170  cosThetaPre = normalPre.cosTheta( -localDirPre );
171  }
172 
173  G4ThreeVector localPosPost = transform.TransformPoint( globalPosPost );
174  EInside statusPost = solid.Inside( localPosPost );
175  if (statusPost == kSurface) {
176  leave_sensitive = true;
177  G4ThreeVector globalDirPost = step->GetPostStepPoint()->GetMomentumDirection();
178  G4ThreeVector localDirPost = transform.TransformAxis( globalDirPost );
179  G4ThreeVector normalPost = solid.SurfaceNormal( localPosPost );
180  cosThetaPost = normalPost.cosTheta( localDirPost );
181  }
182  }
183 
184  // update track accounting
185  if (enter_sensitive)
186  m_track.enterDetector( sensitive, position, cosThetaPre );
187  m_track.step(MaterialAccountingStep( length, radiationLengths, energyLoss, globalPositionIn, globalPositionOut ));
188  if (leave_sensitive)
189  m_track.leaveDetector( sensitive, cosThetaPost );
190 
191  /*
192  for (int i = touchable->GetHistoryDepth(); i > 0; --i)
193  std::cout << touchable->GetVolume(i)->GetName() << "::";
194  std::cout << touchable->GetVolume()->GetName() << std::endl;
195  std::cout << "\tmade of " << material->GetName();
196  if (sensitive) {
197  std::cout << " (inside sensitive " << sensitive->GetName() << ")";
198  if (enter_sensitive)
199  std::cout << " (in: cos(theta) = " << cosThetaPre << ")";
200  if (leave_sensitive)
201  std::cout << " (out: cos(theta) = " << cosThetaPost << ")";
202  }
203  std::cout << std::endl;
204  std::cout << "\tStep length: " << length << " cm" << std::endl;
205  std::cout << "\tRadiation lengths: " << radiationLengths << " \t\t(X0: " << X0 << " cm)" << std::endl;
206  std::cout << "\tEnergy loss: " << energyLoss << " MeV \t(Xi: " << Xi << " MeV/cm)" << std::endl;
207  std::cout << std::endl;
208  */
209 }
MaterialAccountingTrack m_track
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
void step(const MaterialAccountingStep &step)
static int position[TOTALCHAMBERS][3]
Definition: ReadPGInfo.cc:509
static const G4AffineTransform & GetTransform(const G4TouchableHistory *touchable, int depth)
boost::tuple< const G4VPhysicalVolume *, int > GetSensitiveVolume(const G4VTouchable *touchable)
void enterDetector(const G4VPhysicalVolume *volume, const GlobalPoint &position, double cosTheta)
tuple level
Definition: testEve_cfg.py:34
static const double X0
void leaveDetector(const G4VPhysicalVolume *volume, double cosTheta)
bool isSelected(const G4VTouchable *touch)
void TrackingMaterialProducer::update ( const EndOfTrack )
privatevirtual

This routine will be called when the appropriate signal arrives.

Implements Observer< const EndOfTrack * >.

Definition at line 213 of file TrackingMaterialProducer.cc.

References gather_cfg::cout, MaterialAccountingTrack::detectors(), MaterialAccountingStep::energyLoss(), MaterialAccountingStep::length(), m_primaryTracks, m_track, m_tracks, MaterialAccountingStep::radiationLengths(), MaterialAccountingTrack::steps(), and MaterialAccountingTrack::summary().

Referenced by progressbar.ProgressBar::__next__(), relval_steps.Matrix::__setitem__(), relval_steps.Steps::__setitem__(), Vispa.Gui.VispaWidget.VispaWidget::autosize(), Vispa.Views.LineDecayView.LineDecayContainer::createObject(), Vispa.Views.LineDecayView.LineDecayContainer::deselectAllObjects(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::deselectAllWidgets(), Vispa.Gui.VispaWidget.VispaWidget::enableAutosizing(), progressbar.ProgressBar::finish(), Vispa.Gui.MenuWidget.MenuWidget::leaveEvent(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::mouseMoveEvent(), Vispa.Gui.MenuWidget.MenuWidget::mouseMoveEvent(), Vispa.Views.LineDecayView.LineDecayContainer::mouseMoveEvent(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::mouseReleaseEvent(), Vispa.Views.LineDecayView.LineDecayContainer::objectMoved(), relval_steps.Steps::overwrite(), Vispa.Views.LineDecayView.LineDecayContainer::removeObject(), Vispa.Gui.ConnectableWidget.ConnectableWidget::removePorts(), Vispa.Gui.FindDialog.FindDialog::reset(), Vispa.Gui.PortConnection.PointToPointConnection::select(), Vispa.Gui.VispaWidget.VispaWidget::select(), Vispa.Views.LineDecayView.LineDecayContainer::select(), Vispa.Gui.VispaWidget.VispaWidget::setText(), Vispa.Gui.VispaWidget.VispaWidget::setTitle(), Vispa.Gui.ZoomableWidget.ZoomableWidget::setZoom(), Vispa.Views.LineDecayView.LineDecayContainer::setZoom(), and Vispa.Gui.PortConnection.PointToPointConnection::updateConnection().

214 {
215  const G4Track * track = (*event)();
216  if (m_primaryTracks and track->GetParentID() != 0)
217  return;
218 
219  m_tracks->push_back(m_track);
220 
221  // LogDebug
222  std::cout << "this track took " << m_track.steps().size() << " steps, and passed through " << m_track.detectors().size() << " sensitive detectors" << std::endl;
223  std::cout << "\ttrack length: " << m_track.summary().length() << " cm" << std::endl;
224  std::cout << "\tradiation lengths: " << m_track.summary().radiationLengths() << std::endl;
225  std::cout << "\tenergy loss: " << m_track.summary().energyLoss() << " MeV" << std::endl;
226 
227  /*
228  for (unsigned int i = 0; i < m_track.detectors().size(); ++i) {
229  std::cout << m_track.detectors()[i].volume()->GetName()
230  << "\tR: " << m_track.detectors()[i].position().perp()
231  << "\tZ: " << m_track.detectors()[i].position().z() << std::endl;
232  std::cout << "\tsegment length: " << m_track.detectors()[i].material().length() << " cm" << std::endl;
233  std::cout << "\tradiation lengths: " << m_track.detectors()[i].material().radiationLengths() << std::endl;
234  std::cout << "\tenergy loss: " << m_track.detectors()[i].material().energyLoss() << " MeV" << std::endl;
235  }
236  */
237  std::cout << std::endl;
238 }
const MaterialAccountingStep & summary(void)
MaterialAccountingTrack m_track
double length(void) const
double radiationLengths(void) const
double energyLoss(void) const
std::vector< MaterialAccountingTrack > * m_tracks
const std::vector< MaterialAccountingDetector > & detectors()
tuple cout
Definition: gather_cfg.py:121
const std::vector< MaterialAccountingStep > & steps()

Member Data Documentation

bool TrackingMaterialProducer::m_primaryTracks
private

Definition at line 46 of file TrackingMaterialProducer.h.

Referenced by TrackingMaterialProducer(), and update().

std::vector<std::string> TrackingMaterialProducer::m_selectedNames
private

Definition at line 47 of file TrackingMaterialProducer.h.

Referenced by TrackingMaterialProducer(), and update().

std::vector<const G4LogicalVolume *> TrackingMaterialProducer::m_selectedVolumes
private

Definition at line 48 of file TrackingMaterialProducer.h.

Referenced by isSelected(), and update().

MaterialAccountingTrack TrackingMaterialProducer::m_track
private

Definition at line 49 of file TrackingMaterialProducer.h.

Referenced by update().

std::vector<MaterialAccountingTrack>* TrackingMaterialProducer::m_tracks
private

Definition at line 50 of file TrackingMaterialProducer.h.

Referenced by produce(), TrackingMaterialProducer(), and update().