File indexing completed on 2023-10-25 10:04:20
0001 #include "SimG4Core/Application/interface/CMSGDMLWriteStructure.h"
0002
0003 #include "G4LogicalVolume.hh"
0004 #include "G4ProductionCuts.hh"
0005 #include "G4GDMLParser.hh"
0006 #include "G4VRangeToEnergyConverter.hh"
0007 #include "G4RToEConvForGamma.hh"
0008 #include "G4RToEConvForElectron.hh"
0009 #include "G4RToEConvForPositron.hh"
0010 #include "G4RToEConvForProton.hh"
0011 #include "G4SystemOfUnits.hh"
0012
0013 CMSGDMLWriteStructure::CMSGDMLWriteStructure() {
0014 converter[0] = new G4RToEConvForGamma();
0015 converter[1] = new G4RToEConvForElectron();
0016 converter[2] = new G4RToEConvForPositron();
0017 converter[3] = new G4RToEConvForProton();
0018 }
0019
0020 CMSGDMLWriteStructure::~CMSGDMLWriteStructure() {}
0021
0022 void CMSGDMLWriteStructure::AddExtension(xercesc::DOMElement* volumeElement, const G4LogicalVolume* const glv) {
0023 xercesc::DOMElement* auxiliaryElement = nullptr;
0024 std::stringstream ss;
0025 const char* cutnames[4] = {"pcutg", "pcutem", "pcutep", "pcutp"};
0026
0027 auxiliaryElement = NewElement("auxiliary");
0028 auxiliaryElement->setAttributeNode(NewAttribute("auxtype", "G4Region"));
0029 auxiliaryElement->setAttributeNode(NewAttribute("auxvalue", glv->GetRegion()->GetName()));
0030 volumeElement->appendChild(auxiliaryElement);
0031
0032 auxiliaryElement = NewElement("auxiliary");
0033 auxiliaryElement->setAttributeNode(NewAttribute("auxtype", "pcutunit"));
0034 auxiliaryElement->setAttributeNode(NewAttribute("auxvalue", "GeV"));
0035 volumeElement->appendChild(auxiliaryElement);
0036
0037
0038
0039 G4ProductionCuts* cuts = glv->GetRegion()->GetProductionCuts();
0040
0041 for (G4int ic = 0; ic < 4; ++ic) {
0042 G4cout << ic << ". " << cutnames[ic] << " converter: " << converter[ic] << " cuts: " << cuts << " glv: " << glv
0043 << G4endl;
0044 ss.clear();
0045 ss.str("");
0046 ss << converter[ic]->Convert(cuts->GetProductionCut(ic), glv->GetMaterial()) / CLHEP::GeV;
0047
0048 auxiliaryElement = NewElement("auxiliary");
0049 auxiliaryElement->setAttributeNode(NewAttribute("auxtype", cutnames[ic]));
0050 auxiliaryElement->setAttributeNode(NewAttribute("auxvalue", ss.str()));
0051 volumeElement->appendChild(auxiliaryElement);
0052 }
0053 }