#include <CocoaToDDLMgr.h>
Public Member Functions | |
ALIint | buildRotationNumber (OpticalObject *opto) |
CocoaToDDLMgr () | |
void | lv (OpticalObject *opto) |
void | ma (CocoaMaterialElementary *ma) |
ALIbool | materialIsRepeated (CocoaMaterialElementary *ma) |
void | measurementsAsSpecPars () |
void | newPartPost (std::string name, std::string extension) |
void | newPartPre (std::string name) |
void | newSectPost (std::string name) |
void | newSectPost_lv (std::string name) |
void | newSectPost_ma (std::string name) |
void | newSectPost_pv (std::string name) |
void | newSectPost_ro (std::string name) |
void | newSectPost_so (std::string name) |
void | newSectPost_specPar (std::string name) |
void | newSectPre (std::string name, std::string type) |
void | newSectPre_lv (std::string name) |
void | newSectPre_ma (std::string name) |
void | newSectPre_pv (std::string name) |
void | newSectPre_ro (std::string name) |
void | newSectPre_so (std::string name) |
void | newSectPre_specPar (std::string name) |
void | pv (OpticalObject *opto) |
void | ro (const CLHEP::HepRotation &ro, int n) |
std::string | scrubString (const std::string &s) |
void | so (OpticalObject *opto) |
void | specPar (OpticalObject *opto) |
void | writeDDDFile (ALIstring filename) |
void | writeHeader (ALIstring filename) |
void | writeLogicalVolumes () |
void | writeMaterials () |
void | writePhysicalVolumes () |
void | writeRotations () |
void | writeSolids () |
void | writeSpecPars () |
void | writeSpecParsCocoa () |
~CocoaToDDLMgr () | |
Static Public Member Functions | |
static CocoaToDDLMgr * | getInstance () |
Private Attributes | |
ALIFileOut | file_ |
std::string | filename_ |
std::vector < CocoaMaterialElementary * > | theMaterialList |
std::vector< CLHEP::HepRotation > | theRotationList |
Static Private Attributes | |
static CocoaToDDLMgr * | instance = 0 |
Definition at line 26 of file CocoaToDDLMgr.h.
CocoaToDDLMgr::CocoaToDDLMgr | ( | ) | [inline] |
CocoaToDDLMgr::~CocoaToDDLMgr | ( | ) | [inline] |
Definition at line 32 of file CocoaToDDLMgr.h.
{ };
ALIint CocoaToDDLMgr::buildRotationNumber | ( | OpticalObject * | opto | ) |
Definition at line 821 of file CocoaToDDLMgr.cc.
References OpticalObject::rmLocal(), and theRotationList.
Referenced by pv().
{ ALIint rotnum = -1; if(opto->rmLocal().isIdentity() ) return rotnum; std::vector<CLHEP::HepRotation>::const_iterator ite; int nc = 0; for( ite = theRotationList.begin(); ite != theRotationList.end(); ite++) { if( (*ite) == opto->rmLocal() ) { rotnum = nc; break; } nc++; } if( rotnum == -1 ) { theRotationList.push_back( opto->rmLocal() ); rotnum = theRotationList.size()-1; } return rotnum; }
CocoaToDDLMgr * CocoaToDDLMgr::getInstance | ( | ) | [static] |
Definition at line 25 of file CocoaToDDLMgr.cc.
References CocoaToDDLMgr(), and instance.
{ if(!instance) { instance = new CocoaToDDLMgr; } return instance; }
void CocoaToDDLMgr::lv | ( | OpticalObject * | opto | ) |
Definition at line 471 of file CocoaToDDLMgr.cc.
References gather_cfg::cout, file_, OpticalObject::getMaterial(), CocoaMaterialElementary::getName(), OpticalObject::name(), mergeVDriftHistosByStation::name, OpticalObject::shortName(), and OpticalObject::type().
Referenced by writeLogicalVolumes().
{ std::string name = opto->shortName(); std::string rSolid = opto->shortName(); std::string sensitive = "unspecified"; if( opto->type() == "system" ){ file_ << " <LogicalPart name=\"" << name << "\" category=\"" << sensitive << "\">" << std::endl << " <rSolid name=\"" << rSolid << "\"/>" << std::endl << " <rMaterial name=\"Hydrogen\"" << "/>" << std::endl << " </LogicalPart>" << std::endl; return; } #ifdef gdebug_v cout << "xml:lv " << opto->name() << std::endl; #endif file_ << " <LogicalPart name=\"" << name << "\" category=\"" << sensitive << "\">" << std::endl << " <rSolid name=\"" << rSolid << "\"/>" << std::endl << " <rMaterial name=\"" << opto->getMaterial()->getName() << "\"" << "/>" << std::endl << " </LogicalPart>" << std::endl; }
void CocoaToDDLMgr::ma | ( | CocoaMaterialElementary * | ma | ) |
g*cm3;
Definition at line 226 of file CocoaToDDLMgr.cc.
References gather_cfg::cout, file_, CocoaMaterialElementary::getA(), CocoaMaterialElementary::getDensity(), CocoaMaterialElementary::getName(), CocoaMaterialElementary::getSymbol(), CocoaMaterialElementary::getZ(), theMaterialList, and UC.
Referenced by materialIsRepeated(), and writeMaterials().
{ theMaterialList.push_back( ma ); #ifdef gdebug cout << " ma:" << ma->getName() << std::endl; #endif ALIfloat density = ma->getDensity(); // start tag file_ << " <ElementaryMaterial"; ALIstring cSymbol = ma->getSymbol(); // name attribute file_ << " name=\"" << ma->getName() << "\""; // put out common attributes // file_ << " density=\"" << UnitConverter(density,"Volumic Mass") << "\""; file_ << " density=\"" << UC(density,"Volumic Mass") << "\""; file_ << " symbol=\"" << ma->getSymbol() << "\""; // finish last two attributes and end material element file_ << " atomicWeight=\"" << (ma->getA()) << "*g/mole\"" << " atomicNumber=\"" << ma->getZ() << "\"" << "/>" << std::endl; }
ALIbool CocoaToDDLMgr::materialIsRepeated | ( | CocoaMaterialElementary * | ma | ) |
Definition at line 774 of file CocoaToDDLMgr.cc.
References ma(), and theMaterialList.
Referenced by writeMaterials().
{ ALIbool isRepeated = false; std::vector<CocoaMaterialElementary*>::const_iterator ite; for(ite = theMaterialList.begin(); ite != theMaterialList.end(); ite++ ){ if( *(*ite) == *ma ){ isRepeated = true; break; } } return isRepeated; }
void CocoaToDDLMgr::measurementsAsSpecPars | ( | ) |
Definition at line 682 of file CocoaToDDLMgr.cc.
References Measurement::dim(), file_, Model::MeasurementList(), OpticalObject::name(), Measurement::name(), Measurement::OptONameList(), Measurement::sigma(), Measurement::type(), Measurement::value(), Measurement::valueIsSimulated(), and Measurement::valueType().
Referenced by writeSpecPars().
{ std::vector< Measurement* > measlist = Model::MeasurementList(); std::vector< Measurement* >::iterator mite; std::vector<ALIstring>::iterator site; std::multimap<OpticalObject*,Measurement*> optoMeasMap; for( mite = measlist.begin(); mite != measlist.end(); mite++ ) { std::vector<OpticalObject*> optolist = (*mite)->OptOList(); OpticalObject* opto = optolist[optolist.size()-1]; optoMeasMap.insert( std::multimap<OpticalObject*,Measurement*>::value_type(opto, *mite) ); } typedef std::multimap<OpticalObject*,Measurement*>::const_iterator itemom; itemom omite; std::pair<itemom, itemom > omitep; itemom omite2, omite3; for( omite = optoMeasMap.begin(); omite != optoMeasMap.end(); omite++ ){ omitep = optoMeasMap.equal_range( (*omite).first ); if( omite != optoMeasMap.begin() && (*omite).first == (*omite3).first ) continue; // check that it is not the same OptO than previous one omite3 = omite; for( omite2 = omitep.first; omite2 != omitep.second; omite2++ ){ OpticalObject* opto = (*(omite2)).first; Measurement* meas = (*(omite2)).second; std::vector<ALIstring> namelist = meas->OptONameList(); if( omite2 == omitep.first ){ file_ << " <SpecPar name=\"" << meas->name() << "_MEASUREMENT\">" << std::endl; file_ << " <PartSelector path=\"/" << opto->name() << "\"/> " << std::endl; } file_ << " <Parameter name=\"" << std::string("meas_name") << "\" value=\"" << meas->name() << "\" eval=\"false\" /> " << std::endl; file_ << " <Parameter name=\"" << std::string("meas_type") << "\" value=\"" << meas->type() << "\" eval=\"false\" /> " << std::endl; for( site = namelist.begin(); site != namelist.end(); site++ ){ file_ << " <Parameter name=\"" << std::string("meas_object_name_")+meas->name() << "\" value=\"" << (*site) << "\" eval=\"false\" /> " << std::endl; } for( ALIuint ii = 0; ii < meas->dim(); ii++ ){ file_ << " <Parameter name=\"" << std::string("meas_value_name_")+meas->name() << "\" value=\"" << meas->valueType(ii) << "\" eval=\"false\" /> " << std::endl; file_ << " <Parameter name=\"" << std::string("meas_value_")+meas->name() << "\" value=\"" << meas->value(ii) << "\" eval=\"true\" /> " << std::endl; file_ << " <Parameter name=\"" << std::string("meas_sigma_")+meas->name() << "\" value=\"" << meas->sigma(ii) << "\" eval=\"true\" /> " << std::endl; file_ << " <Parameter name=\"" << std::string("meas_is_simulated_value_")+meas->name() << "\" value=\"" << meas->valueIsSimulated(ii) << "\" eval=\"true\" /> " << std::endl; } } file_ << " </SpecPar>" << std::endl; } }
void CocoaToDDLMgr::newPartPost | ( | std::string | name, |
std::string | extension | ||
) |
void CocoaToDDLMgr::newPartPre | ( | std::string | name | ) |
Definition at line 189 of file CocoaToDDLMgr.cc.
References gather_cfg::cout, file_, filename_, and mergeVDriftHistosByStation::name.
Referenced by writeHeader().
{ filename_=name; file_.open(filename_.c_str()); file_.precision(8); file_ << "<?xml version=\"1.0\"?>" << std::endl; // all files get schema references and namespaces. file_ << "<DDDefinition xmlns=\"https://www.cern.ch/cms/DDL\"" << " xmlns:xsi=\"https://www.w3.org/2001/XMLSchema-instance\"" << " xsi:schemaLocation=\"https://www.cern.ch/cms/DDL ../../DDLSchema/DDLSchema.xsd\">" << std::endl << std::endl; #ifdef gdebug cout << "part-pre:" << name << std::endl; #endif }
void CocoaToDDLMgr::newSectPost | ( | std::string | name | ) |
Definition at line 766 of file CocoaToDDLMgr.cc.
References file_.
Referenced by newSectPost_lv(), newSectPost_ma(), newSectPost_pv(), newSectPost_ro(), newSectPost_so(), and newSectPost_specPar().
void CocoaToDDLMgr::newSectPost_lv | ( | std::string | name | ) |
Definition at line 499 of file CocoaToDDLMgr.cc.
References gather_cfg::cout, and newSectPost().
Referenced by writeLogicalVolumes().
{ #ifdef gdebug cout << " sect-lv-post:" << name << '-'<< std::endl; #endif newSectPost("LogicalPartSection"); }
void CocoaToDDLMgr::newSectPost_ma | ( | std::string | name | ) |
Definition at line 257 of file CocoaToDDLMgr.cc.
References gather_cfg::cout, and newSectPost().
Referenced by writeMaterials().
{ #ifdef gdebug cout << " sect-mat-post:" << name << '-' << std::endl; #endif newSectPost("MaterialSection"); }
void CocoaToDDLMgr::newSectPost_pv | ( | std::string | name | ) |
Definition at line 559 of file CocoaToDDLMgr.cc.
References gather_cfg::cout, and newSectPost().
Referenced by writePhysicalVolumes().
{ #ifdef gdebug cout << " sect-pv-post:" << name << '-' << std::endl; #endif newSectPost("PosPartSection"); }
void CocoaToDDLMgr::newSectPost_ro | ( | std::string | name | ) |
Definition at line 603 of file CocoaToDDLMgr.cc.
References newSectPost().
Referenced by writeRotations().
{ newSectPost("RotationSection"); }
void CocoaToDDLMgr::newSectPost_so | ( | std::string | name | ) |
Definition at line 451 of file CocoaToDDLMgr.cc.
References gather_cfg::cout, and newSectPost().
Referenced by writeSolids().
{ #ifdef gdebug cout << " sect-so-post:" << name << '-' << std::endl; #endif newSectPost("SolidSection"); }
void CocoaToDDLMgr::newSectPost_specPar | ( | std::string | name | ) |
Definition at line 750 of file CocoaToDDLMgr.cc.
References newSectPost().
Referenced by writeSpecPars().
{ newSectPost("SpecParSection"); }
void CocoaToDDLMgr::newSectPre | ( | std::string | name, |
std::string | type | ||
) |
Definition at line 759 of file CocoaToDDLMgr.cc.
References file_.
Referenced by newSectPre_lv(), newSectPre_ma(), newSectPre_pv(), newSectPre_ro(), and newSectPre_so().
void CocoaToDDLMgr::newSectPre_lv | ( | std::string | name | ) |
Definition at line 462 of file CocoaToDDLMgr.cc.
References gather_cfg::cout, filename_, and newSectPre().
Referenced by writeLogicalVolumes().
{ #ifdef gdebug cout << " sect-lv-pre:" << name << '-' << std::endl; #endif newSectPre(filename_,std::string("LogicalPartSection")); }
void CocoaToDDLMgr::newSectPre_ma | ( | std::string | name | ) |
Definition at line 217 of file CocoaToDDLMgr.cc.
References gather_cfg::cout, filename_, and newSectPre().
Referenced by writeMaterials().
{ #ifdef gdebug std::cout << " sect-mat-pre:" << name << '-' << std::endl; #endif newSectPre(filename_,std::string("MaterialSection")); }
void CocoaToDDLMgr::newSectPre_pv | ( | std::string | name | ) |
Definition at line 510 of file CocoaToDDLMgr.cc.
References gather_cfg::cout, filename_, and newSectPre().
Referenced by writePhysicalVolumes().
{ #ifdef gdebug cout << " sect-pv-pre:" << name << '-' << std::endl; #endif newSectPre(filename_,std::string("PosPartSection")); }
void CocoaToDDLMgr::newSectPre_ro | ( | std::string | name | ) |
Definition at line 570 of file CocoaToDDLMgr.cc.
References filename_, and newSectPre().
Referenced by writeRotations().
{ newSectPre(filename_,std::string("RotationSection")); }
void CocoaToDDLMgr::newSectPre_so | ( | std::string | name | ) |
Definition at line 268 of file CocoaToDDLMgr.cc.
References gather_cfg::cout, filename_, and newSectPre().
Referenced by writeSolids().
{ #ifdef gdebug cout << " sect-so-pre:" << name << '-' << std::endl; #endif newSectPre(filename_,std::string("SolidSection")); }
void CocoaToDDLMgr::newSectPre_specPar | ( | std::string | name | ) |
Definition at line 611 of file CocoaToDDLMgr.cc.
References gather_cfg::cout, file_, and filename_.
Referenced by writeSpecPars().
void CocoaToDDLMgr::pv | ( | OpticalObject * | opto | ) |
Definition at line 519 of file CocoaToDDLMgr.cc.
References buildRotationNumber(), OpticalObject::centreLocal(), gather_cfg::cout, file_, OpticalObject::name(), OpticalObject::parent(), OpticalObject::shortName(), lumiQTWidget::t, and UC.
Referenced by writePhysicalVolumes().
{ #ifdef gdebug_v cout << " pv:" << opto->name() << ':' << opto->parent()->name() << std::endl; #endif // file_ << " <PosPart copyNumber=\"" << pv->GetCopyNo() << "\">" << std::endl; file_ << " <PosPart copyNumber=\"" << "1" << "\">" << std::endl; file_ << " <rParent name=\""; //t if (file!=filename_) file_ << file << ":"; file_ << opto->parent()->shortName() << "\"/>" << std::endl; file_ << " <rChild name=\""; //t if (file_d != filename_) file_<< file_d << ":"; file_ << opto->shortName(); file_ << "\"/>" << std::endl; int rotNumber = buildRotationNumber( opto ); //CocoaDDLRotation* rot = buildRotationNotRepeated( opto ); if( rotNumber != -1 ) file_ << " <rRotation name=\"R" << rotNumber << "\"/>" << std::endl; CLHEP::Hep3Vector t = opto->centreLocal(); if(t != CLHEP::Hep3Vector()) { //if (0,0,0) write nothing const CLHEP::Hep3Vector t = opto->centreLocal(); file_ << " <Translation x=\"" << UC(t[0],"Length") << "\"" << " y=\"" << UC(t[1],"Length") << "\"" << " z=\"" << UC(t[2],"Length")<< "\" />" << std::endl; } file_ << " </PosPart>" << std::endl; }
void CocoaToDDLMgr::ro | ( | const CLHEP::HepRotation & | ro, |
int | n | ||
) |
Definition at line 577 of file CocoaToDDLMgr.cc.
References file_, GlobalPosition_Frontier_DevDB_cff::tag, and UC.
Referenced by writeRotations().
{ CLHEP::HepRotation roinv = inverseOf(ro); //- G4ThreeVector v(1.,1.,1.); //- G4ThreeVector a; //- a = (*ro)*v; bool identity = false; ALIstring tag = " <Rotation name=\"R"; identity=roinv.isIdentity(); //---- DDD convention is to use the inverse matrix, COCOA is the direct one!!! if (! identity) { file_ << tag << n << "\""; file_ << " phiX=\"" << UC(roinv.phiX(),"Angle") << "\"" << " thetaX=\"" << UC(roinv.thetaX(),"Angle") << "\"" << " phiY=\"" << UC(roinv.phiY(),"Angle") << "\"" << " thetaY=\"" << UC(roinv.thetaY(),"Angle") << "\"" << " phiZ=\"" << UC(roinv.phiZ(),"Angle") << "\"" << " thetaZ=\"" << UC(roinv.thetaZ(),"Angle") << "\"" //<< " angleUnit=\"degree\"/>" << " />" << std::endl; } }
std::string CocoaToDDLMgr::scrubString | ( | const std::string & | s | ) |
Definition at line 790 of file CocoaToDDLMgr.cc.
References run_regression::ret.
{ std::string::const_iterator ampat; static const std::string amp = "_"; //"&"; std::string ret = ""; for (ampat = s.begin(); ampat != s.end(); ampat++) { if (*ampat == '&') ret = ret + amp; else if (*ampat == '/') ret = ret + ";"; else if (*ampat == ':') ret = ret + '_'; else ret = ret + *ampat; } // this works when used alone. when in this file it fails. i don't know why. //for (ampat = s.begin(); ampat != s.end(); ampat++) // { // if (*ampat == '&'){ // s.insert(ampat+1, amp.begin(), amp.end()); // } // } // replace(s.begin(), s.end(), '/', ';'); //return s; //cout << "AMP: " << ret << endl; return ret; }
void CocoaToDDLMgr::so | ( | OpticalObject * | opto | ) |
Definition at line 277 of file CocoaToDDLMgr.cc.
References dtNoiseDBValidation_cfg::cerr, gather_cfg::cout, exception, file_, CocoaSolidShapeTubs::getDeltaPhiAngle(), CocoaSolidShapeTubs::getInnerRadius(), CocoaSolidShapeTubs::getOuterRadius(), CocoaSolidShapeTubs::getStartPhiAngle(), CocoaSolidShape::getType(), CocoaSolidShapeBox::getXHalfLength(), CocoaSolidShapeBox::getYHalfLength(), CocoaSolidShapeBox::getZHalfLength(), CocoaSolidShapeTubs::getZHalfLength(), ALIFileOut::name(), mergeVDriftHistosByStation::name, and UC.
Referenced by writeSolids().
{ std::cout << " CocoaToDDLMgr::so( " << opto; std::cout << " " << opto->shortName() << std::endl; std::string name = opto->shortName(); if( opto->type() == "system" ){ // file_ << " <Box name=\"" << name << "\""; file_ << " <Box name=\"" << opto->name() << "\""; file_ << " dx=\"10.*m" << "\" dy=\"10.*m" << "\" dz=\"10.*m" << "\"/>" << std::endl; return; } CocoaSolidShape* so = opto->getSolidShape(); std::cout << " CocoaToDDLMgr::so( so " << so << std::endl; std::string solidType = so->getType(); if (solidType == "Box") { file_ << " <" << solidType << " name=\"" << name << "\""; CocoaSolidShapeBox * sb = dynamic_cast<CocoaSolidShapeBox*>(so); file_ << " dx=\"" << UC(sb->getXHalfLength(),"Length") << "\" dy=\"" << UC(sb->getYHalfLength(),"Length") << "\" dz=\"" << UC(sb->getZHalfLength(),"Length") << "\"/>" << std::endl; } else if (solidType == "Tubs") { CocoaSolidShapeTubs * tu = dynamic_cast < CocoaSolidShapeTubs * > (so); file_ << " <" << solidType << " name=\"" << name << "\"" << " rMin=\"" << UC(tu->getInnerRadius(),"Length") << "\"" << " rMax=\"" << UC(tu->getOuterRadius(),"Length") << "\"" << " dz=\"" << UC(tu->getZHalfLength(),"Length") << "\"" << " startPhi=\"" << UC(tu->getStartPhiAngle(),"Angle") << "\"" << " deltaPhi=\"" << UC(tu->getDeltaPhiAngle(),"Angle") << "\"" << "/>" << std::endl; } /* else if (solidType == "Cons") { G4Cons * cn = dynamic_cast < G4Cons * > (so); file_ << " <" << solidType << " name=\"" << name << "\"" << " dz=\"" << UC(cn->getZHalfLength(),"Length") << "\"" << " rMin1=\"" << UC(cn->getInnerRadiusMinusZ(),"Length") << "\"" << " rMax1=\"" << UC(cn->getOuterRadiusMinusZ(),"Length") << "\"" << " rMin2=\"" << UC(cn->getInnerRadiusPlusZ(),"Length") << "\"" << " rMax2=\"" << UC(cn->getOuterRadiusPlusZ(),"Length") << "\"" << " startPhi=\"" << UC(cn->getStartPhiAngle(),"Angle") << "\"" << " deltaPhi=\"" << UC(cn->getDeltaPhiAngle(),"Angle") << "\"" //<< " lengthUnit=\"mm\" angleUnit=\"degree\"/>" << " />" << std::endl; } else if (solidType == "Polycone") { G4Polycone * pc = dynamic_cast < G4Polycone * > (so); file_ << " <Polycone name=\"" << name<< "\""; bool isOpen = pc->IsOpen(); G4int numRZCorner = (dynamic_cast < G4Polycone * > (so))->getNumRZCorner(); file_ << " startPhi=\"" << UC(pc->getStartPhi(),"Angle") << "\"" //<< " deltaPhi=\"" << UC(fabs((pc->getEndPhi()/deg - pc->getStartPhi()/deg))*deg,"Angle") << "\"" //<< " deltaPhi=\"" << UC(pc->getEndPhi(),"Angle") << "\"" << " deltaPhi=\"" << UC(pc->original_parameters->Opening_angle,"Angle") << "\"" //<< " angleUnit=\"degree\">" << " >" << std::endl; G4PolyconeSideRZ rz; //liendl: FIXME put a switch which decides whether RZ or Rmin,Rmax,Z types should // by generated .... //outPolyZSections(rz, (dynamic_cast < G4Polycone * > (so)), numRZCorner); G4double * zVal; G4double * rmin; G4double * rmax; G4int zPlanes; zPlanes = pc->original_parameters->Num_z_planes; zVal = pc->original_parameters->Z_values; rmin = pc->original_parameters->Rmin; rmax = pc->original_parameters->Rmax; outPolySections(zPlanes, zVal, rmin, rmax); file_ << " </Polycone> " << std::endl; } else if (solidType == "Polyhedra") { // bool isOpen = (dynamic_cast < G4Polyhedra * > (so))->IsOpen(); G4Polyhedra * ph = (dynamic_cast < G4Polyhedra * > (so)); G4int numRZCorner = ph->getNumRZCorner(); file_ << " <Polyhedra name=\"" << name<< "\"" << " numSide=\"" << ph->getNumSide() << "\"" << " startPhi=\"" << UC(ph->getStartPhi(),"Angle") << "\"" //<< " deltaPhi=\"" << UC(fabs((ph->getEndPhi()/deg - ph->getStartPhi()/deg))*deg,"Angle") << "\"" << " deltaPhi=\"" << UC(ph->original_parameters->Opening_angle,"Angle") << "\"" << " >" << std::endl; G4PolyhedraSideRZ rz; //liendl: FIXME put a switch which decides whether RZ or Rmin,Rmax,Z types should // by generated .... // outPolyZSections(rz, (dynamic_cast < G4Polyhedra * > (so)), numRZCorner); G4double * zVal; G4double * rmin; G4double * rmax; // convertRad of ctor of G4Polyhedra(..) .... G4double strangeG3G4Factor = cos(0.5*ph->original_parameters->Opening_angle/G4double(ph->getNumSide())); G4int zPlanes; zPlanes = ph->original_parameters->Num_z_planes; zVal = ph->original_parameters->Z_values; rmin = ph->original_parameters->Rmin; rmax = ph->original_parameters->Rmax; for (int i=0; i<zPlanes;++i) { *(rmin+i) = *(rmin+i) * strangeG3G4Factor; *(rmax+i) = *(rmax+i) * strangeG3G4Factor; } outPolySections(zPlanes, zVal, rmin, rmax); file_ << " </Polyhedra>" << std::endl; } else if (solidType == "Trapezoid") { // DDL fields // ALP1, ALP2, Bl1, Bl2, Dz, H1, H2, Phi, Thet, TL1, TL2, lengthUnit, angleUnit // Phi and Theta are !NOT!optional. G4Trap * trp = dynamic_cast < G4Trap * > (so); G4ThreeVector symAxis(trp->getSymAxis()); double theta, phi; theta = symAxis.theta(); phi = symAxis.phi(); file_ << " <" << solidType << " name=\"" << name << "\"" << " dz=\"" << UC(trp->getZHalfLength(),"Length") << "\"" << " alp1=\"" << UC(atan(trp->getTanAlpha1()/rad),"Angle") << "\"" << " bl1=\"" << UC(trp->getXHalfLength1(),"Length") << "\"" << " tl1=\"" << UC(trp->getXHalfLength2(),"Length") << "\"" << " h1=\"" << UC(trp->getYHalfLength1(),"Length") << "\"" << " alp2=\"" << UC(atan(trp->getTanAlpha2()/rad),"Angle") << "\"" << " bl2=\"" << UC(trp->getXHalfLength3(),"Length") << "\"" << " tl2=\"" << UC(trp->getXHalfLength4(),"Length") << "\"" << " h2=\"" << UC(trp->getYHalfLength2(),"Length") << "\"" << " phi=\"" << UC(phi,"Angle") << "\"" << " theta=\"" << UC(theta,"Angle") << "\"" << " />" << std::endl ; } else if (solidType == "Trd1") { G4Trd * tr = dynamic_cast < G4Trd * > (so); file_ << " <" << solidType << " name=\"" << name << "\"" << " dz=\"" << UC(tr->getZHalfLength(),"Length") << "\"" << " dy1=\"" << UC(tr->getYHalfLength1(),"Length") << "\"" << " dy2=\"" << UC(tr->getYHalfLength2(),"Length")<< "\"" << " dx1=\"" << UC(tr->getXHalfLength1(),"Length") << "\"" << " dx2=\"" << UC(tr->getXHalfLength2(),"Length") << "\"" //<< " lengthUnit=\"mm\"/>" << " />" << std::endl; } */ else { std::cerr << " <!-- NOT HANDLED: " << solidType << " name=\"" << name<< "\"" << ">" << std::endl << " </" << solidType << "> -->" << std::endl; std::exception(); } }
void CocoaToDDLMgr::specPar | ( | OpticalObject * | opto | ) |
Definition at line 623 of file CocoaToDDLMgr.cc.
References OpticalObject::CoordinateEntryList(), OpticalObject::ExtraEntryList(), file_, OpticalObject::getCmsswID(), OpticalObject::name(), Entry::name(), Entry::quality(), Entry::sigma(), OpticalObject::type(), Entry::type(), UC, and Entry::value().
Referenced by writeSpecPars().
{ file_ << " <SpecPar name=\"" << opto->name() << "_PARAMS\">" << std::endl; file_ << " <PartSelector path=\"/" << opto->name() << "\"/> " << std::endl; file_ << " <Parameter name=\"cocoa_type\"" << " value=\"" << opto->type() << "\" eval=\"false\" /> " << std::endl; file_ << " <Parameter name=\"cmssw_ID\"" << " value=\"" << opto->getCmsswID() << "\" /> " << std::endl; const std::vector< Entry* > coord = opto->CoordinateEntryList(); for( int ii=3; ii<6; ii++ ){ Entry* ent = coord[ii]; file_ << " <Parameter name=\"" << ent->name()+std::string("_value") << "\" value=\""; file_ << UC(ent->value(),"Angle"); file_ << "\" /> " << std::endl; } for( int ii=0; ii<6; ii++ ){ Entry* ent = coord[ii]; file_ << " <Parameter name=\"" << ent->name()+std::string("_sigma") << "\" value=\""; if( ii < 3 ){ file_ << UC(ent->sigma(),"Length"); }else { file_ << UC(ent->sigma(),"Angle"); } file_ << "\" /> " << std::endl; file_ << " <Parameter name=\"" << ent->name()+std::string("_quality") << "\" value=\"" << ent->quality() << "\" /> " << std::endl; } const std::vector< Entry* > extraEnt = opto->ExtraEntryList(); for( ALIuint ii=0; ii<extraEnt.size(); ii++ ){ Entry* ent = extraEnt[ii]; file_ << " <Parameter name=\"extra_entry\" value=\"" << ent->name() << "\" eval=\"false\" /> " << std::endl; file_ << " <Parameter name=\"dimType\" value=\"" << ent->type() << "\" eval=\"false\" /> " << std::endl; file_ << " <Parameter name=\"value\" value=\""; if( ent->type() == "nodim" ) { file_ << ent->value(); }else if( ent->type() == "length" ) { file_ << UC(ent->value(),"Length"); }else if( ent->type() == "angle" ) { file_ << UC(ent->value(),"Angle"); } file_ << "\" eval=\"true\" /> " << std::endl; file_ << " <Parameter name=\"sigma\" value=\""; if( ent->type() == "nodim" ) { file_ << ent->sigma(); }else if( ent->type() == "length" ) { file_ << UC(ent->sigma(),"Length"); }else if( ent->type() == "angle" ) { file_ << UC(ent->sigma(),"Angle"); } file_ << "\" eval=\"true\" /> " << std::endl; file_ << " <Parameter name=\"quality\" value=\"" << ent->quality() << "\" eval=\"true\" /> " << std::endl; } file_ << " </SpecPar>" << std::endl; }
void CocoaToDDLMgr::writeDDDFile | ( | ALIstring | filename | ) |
Definition at line 34 of file CocoaToDDLMgr.cc.
References newPartPost(), writeHeader(), writeLogicalVolumes(), writeMaterials(), writePhysicalVolumes(), writeRotations(), writeSolids(), and writeSpecPars().
{ //---- Write header writeHeader( filename ); //---- Write materials writeMaterials(); //---- Write solids writeSolids(); //---- Write logical volumes writeLogicalVolumes(); //---- Write physical volumes writePhysicalVolumes(); //---- Write rotations writeRotations(); //---- Write SpecPar's writeSpecPars(); newPartPost( filename, "" ); }
void CocoaToDDLMgr::writeHeader | ( | ALIstring | filename | ) |
Definition at line 63 of file CocoaToDDLMgr.cc.
References newPartPre().
Referenced by writeDDDFile().
{ newPartPre( filename ); }
void CocoaToDDLMgr::writeLogicalVolumes | ( | ) |
Definition at line 110 of file CocoaToDDLMgr.cc.
References lv(), newSectPost_lv(), newSectPre_lv(), and Model::OptOList().
Referenced by writeDDDFile().
{ newSectPre_lv(""); static std::vector< OpticalObject* > optolist = Model::OptOList(); static std::vector< OpticalObject* >::const_iterator ite,ite2; for(ite = optolist.begin(); ite != optolist.end(); ite++ ){ bool alreadyWritten = false; for(ite2 = optolist.begin(); ite2 != ite; ite2++ ){ if( (*ite)->shortName() == (*ite2)->shortName() ) { alreadyWritten = true; } } if( !alreadyWritten ) lv( *ite ); } newSectPost_lv(""); }
void CocoaToDDLMgr::writeMaterials | ( | ) |
Definition at line 69 of file CocoaToDDLMgr.cc.
References ma(), materialIsRepeated(), newSectPost_ma(), newSectPre_ma(), and Model::OptOList().
Referenced by writeDDDFile().
{ newSectPre_ma(""); static std::vector< OpticalObject* > optolist = Model::OptOList(); static std::vector< OpticalObject* >::const_iterator ite; for(ite = optolist.begin(); ite != optolist.end(); ite++ ){ if( (*ite)->type() == "system" ) continue; CocoaMaterialElementary* mat = (*ite)->getMaterial(); //- std::cout << " mat of opto " << (*ite)->name() << " = " << mat->getName() << std::endl; if( mat ) { if( !materialIsRepeated( mat ) ) ma( mat ); } } newSectPost_ma(""); }
void CocoaToDDLMgr::writePhysicalVolumes | ( | ) |
Definition at line 131 of file CocoaToDDLMgr.cc.
References newSectPost_pv(), newSectPre_pv(), Model::OptOList(), and pv().
Referenced by writeDDDFile().
{ newSectPre_pv(""); static std::vector< OpticalObject* > optolist = Model::OptOList(); static std::vector< OpticalObject* >::const_iterator ite; for(ite = optolist.begin(); ite != optolist.end(); ite++ ){ if( (*ite)->type() == "system" ) continue; pv( *ite ); } newSectPost_pv(""); }
void CocoaToDDLMgr::writeRotations | ( | ) |
Definition at line 148 of file CocoaToDDLMgr.cc.
References newSectPost_ro(), newSectPre_ro(), ro(), and theRotationList.
Referenced by writeDDDFile().
{ newSectPre_ro(""); std::vector<CLHEP::HepRotation>::const_iterator ite; int nc = 0; for( ite = theRotationList.begin(); ite != theRotationList.end(); ite++) { //- std::cout << nc << " rot size " << theRotationList.size() << std::endl; ro( *ite, nc ); nc++; } newSectPost_ro(""); }
void CocoaToDDLMgr::writeSolids | ( | ) |
Definition at line 87 of file CocoaToDDLMgr.cc.
References gather_cfg::cout, newSectPost_so(), newSectPre_so(), Model::OptOList(), and so().
Referenced by writeDDDFile().
{ newSectPre_so(""); static std::vector< OpticalObject* > optolist = Model::OptOList(); static std::vector< OpticalObject* >::const_iterator ite,ite2; for(ite = optolist.begin(); ite != optolist.end(); ite++ ){ bool alreadyWritten = false; for(ite2 = optolist.begin(); ite2 != ite; ite2++ ){ if( (*ite)->shortName() == (*ite2)->shortName() ) { alreadyWritten = true; } } std::cout << " CocoaToDDLMgr::writeSolids() " << alreadyWritten << *ite; std::cout << (*ite)->name() << std::endl; if( !alreadyWritten ) so( *ite ); } newSectPost_so(""); }
void CocoaToDDLMgr::writeSpecPars | ( | ) |
Definition at line 163 of file CocoaToDDLMgr.cc.
References measurementsAsSpecPars(), newSectPost_specPar(), newSectPre_specPar(), Model::OptOList(), specPar(), and writeSpecParsCocoa().
Referenced by writeDDDFile().
{ newSectPre_specPar(""); static std::vector< OpticalObject* > optolist = Model::OptOList(); static std::vector< OpticalObject* >::const_iterator ite; for(ite = optolist.begin(); ite != optolist.end(); ite++ ){ if( (*ite)->type() == "system" ) continue; specPar( *ite ); } writeSpecParsCocoa(); //---- Write Measurements's measurementsAsSpecPars(); newSectPost_specPar(""); }
void CocoaToDDLMgr::writeSpecParsCocoa | ( | ) |
Definition at line 732 of file CocoaToDDLMgr.cc.
References file_, ALIFileOut::name(), and Model::OptOList().
Referenced by writeSpecPars().
{ file_ << "<!-- Define volumes as COCOA objects --> " << std::endl << " <SpecPar name=\"COCOA\"> " << std::endl; static std::vector< OpticalObject* > optolist = Model::OptOList(); static std::vector< OpticalObject* >::const_iterator ite; for(ite = optolist.begin(); ite != optolist.end(); ite++ ){ if( (*ite)->type() == "system" ) continue; file_ << " <PartSelector path=\"/" << (*ite)->name() << "\"/> " << std::endl; } file_ << " <String name=\"COCOA\" value=\"COCOA\"/> " << std::endl << " </SpecPar> " << std::endl; }
ALIFileOut CocoaToDDLMgr::file_ [private] |
Definition at line 76 of file CocoaToDDLMgr.h.
Referenced by lv(), ma(), measurementsAsSpecPars(), newPartPost(), newPartPre(), newSectPost(), newSectPre(), newSectPre_specPar(), pv(), ro(), so(), specPar(), and writeSpecParsCocoa().
std::string CocoaToDDLMgr::filename_ [private] |
Definition at line 77 of file CocoaToDDLMgr.h.
Referenced by newPartPre(), newSectPre_lv(), newSectPre_ma(), newSectPre_pv(), newSectPre_ro(), newSectPre_so(), and newSectPre_specPar().
CocoaToDDLMgr * CocoaToDDLMgr::instance = 0 [static, private] |
Definition at line 74 of file CocoaToDDLMgr.h.
Referenced by getInstance().
std::vector<CocoaMaterialElementary*> CocoaToDDLMgr::theMaterialList [private] |
Definition at line 79 of file CocoaToDDLMgr.h.
Referenced by ma(), and materialIsRepeated().
std::vector<CLHEP::HepRotation> CocoaToDDLMgr::theRotationList [private] |
Definition at line 80 of file CocoaToDDLMgr.h.
Referenced by buildRotationNumber(), and writeRotations().