CMS 3D CMS Logo

PrintSensitive.cc
Go to the documentation of this file.
2 
4 
5 #include "G4Run.hh"
6 #include "G4VPhysicalVolume.hh"
7 #include "G4LogicalVolume.hh"
8 #include "G4TransportationManager.hh"
9 
10 #include <set>
11 #include <map>
12 
13 using namespace CLHEP;
14 
16  name = p.getUntrackedParameter<std::string>("Name", "*");
17  nchar = name.find("*");
18  name.assign(name, 0, nchar);
19  std::cout << "PrintSensitive:: Print position of all Sensitive Touchables: "
20  << " for names (0-" << nchar << ") = " << name << "\n";
21 }
22 
24 
26  G4VPhysicalVolume *theTopPV = getTopPV();
27  dumpTouch(theTopPV, 0, false, std::cout);
28 }
29 
30 void PrintSensitive::dumpTouch(G4VPhysicalVolume *pv, unsigned int leafDepth, bool printIt, std::ostream &out) {
31  if (leafDepth == 0)
32  fHistory.SetFirstEntry(pv);
33  else
34  fHistory.NewLevel(pv, kNormal, pv->GetCopyNo());
35 
36  G4ThreeVector globalpoint = fHistory.GetTopTransform().Inverse().TransformPoint(G4ThreeVector(0, 0, 0));
37  G4LogicalVolume *lv = pv->GetLogicalVolume();
38 
39  std::string mother = "World";
40  if (pv->GetMotherLogical())
41  mother = pv->GetMotherLogical()->GetName();
42  std::string lvname = lv->GetName();
43  lvname.assign(lvname, 0, nchar);
44  if (lvname == name)
45  printIt = true;
46 
47  if (lv->GetSensitiveDetector() && printIt) {
48  out << leafDepth << " ### VOLUME = " << lv->GetName() << " Copy No " << pv->GetCopyNo() << " in " << mother
49  << " global position of centre " << globalpoint << " (r=" << globalpoint.perp()
50  << ", phi=" << globalpoint.phi() / deg << ")\n";
51  }
52 
53  int NoDaughters = lv->GetNoDaughters();
54  while ((NoDaughters--) > 0) {
55  G4VPhysicalVolume *pvD = lv->GetDaughter(NoDaughters);
56  if (!pvD->IsReplicated())
57  dumpTouch(pvD, leafDepth + 1, printIt, out);
58  }
59 
60  if (leafDepth > 0)
61  fHistory.BackLevel();
62 }
63 
64 G4VPhysicalVolume *PrintSensitive::getTopPV() {
65  return G4TransportationManager::GetTransportationManager()->GetNavigatorForTracking()->GetWorldVolume();
66 }
T getUntrackedParameter(std::string const &, T const &) const
PrintSensitive(edm::ParameterSet const &p)
void update(const BeginOfRun *run) override
This routine will be called when the appropriate signal arrives.
G4VPhysicalVolume * getTopPV()
def pv(vc)
Definition: MetAnalyzer.py:7
void dumpTouch(G4VPhysicalVolume *pv, unsigned int leafDepth, bool printIt, std::ostream &out=std::cout)
~PrintSensitive() override