57 double tolerance = 1.0e-3;
59 std::string physicalPartsTreeFileName(
"PHYSICALPARTSTREE.dat");
60 std::string logicalPartTypesFileName(
"LOGICALPARTTYPES.dat");
61 std::string nominalPlacementsFileName(
"NOMINALPLACEMENTS.dat");
62 std::string detectorPartsFileName(
"DETECTORPARTS.dat");
63 std::string pospartsGraphFileName(
"POSPARTSGRAPH.dat");
65 std::ofstream physicalPartsTreeOS(physicalPartsTreeFileName.c_str());
66 std::ofstream logicalPartTypesOS(logicalPartTypesFileName.c_str());
67 std::ofstream nominalPlacementsOS(nominalPlacementsFileName.c_str());
68 std::ofstream detectorPartsOS(detectorPartsFileName.c_str());
69 std::ofstream pospartsGraphOS(pospartsGraphFileName.c_str());
73 std::string scategory;
74 std::vector<std::string> lpname_vec;
77 std::cout <<
"PhysicalPartsTree Analyzer..." << std::endl;
90 std::ostringstream
parent,
child,logicalpartid,parentid;
91 child << epv.logicalPart().name();
93 parent << hist[hist.size()-2].logicalPart().name();
94 logicalpartid << epv.geoHistory();
95 parentid<<hist[hist.size()-2];
96 lgname=logicalpartid.str();
97 lastfound=lgname.find_last_of(
"/\\");
98 lgname=lgname.substr(lastfound+1,lgname.size());
99 physicalPartsTreeOS<<lgname<<
","<< parentid.str() <<
"," << child.str()<<std::endl;
103 bool reflection =
false;
106 epv.rotation().GetComponents(x, y, z);
113 if ( (1.0 + (x.Cross(y)).Dot(z)) <= tolerance ) {
116 std::vector<double> comps(9);
117 epv.rotation().GetComponents(comps.begin(), comps.end());
118 nominalPlacementsOS<< logicalpartid.str()<<
","
119 << epv.translation().X() <<
","
120 << epv.translation().Y() <<
","
121 << epv.translation().Z()<<
","
145 detectorPartsOS <<epv.logicalPart().solid().toString() <<
","
146 <<epv.logicalPart().material().toString() <<
","
147 <<logicalpartid.str()
152 pospartsGraphOS<<++pospartid<<
","<<epv.copyno()<<
","
153 <<parent.str() <<
"," << child.str()<<std::endl;
163 slpname=epv.logicalPart().toString();
165 std::vector<std::string>::iterator it =
find(lpname_vec.begin(), lpname_vec.end(), slpname);
167 if (it==lpname_vec.end()){
171 scategory=category.str();
172 std::string unspec=
"unspecified";
173 if(scategory==unspec){
174 lpname_vec.push_back(slpname);
175 logicalPartTypesOS <<slpname<<
","
176 <<
"DETECTORPARTS"<<std::endl;
179 lpname_vec.push_back(slpname);
180 logicalPartTypesOS <<slpname<<
","<<scategory<<std::endl;
185 lpname_vec.push_back(slpname);
186 logicalPartTypesOS <<slpname<<
","
187 <<
"DETECTORPARTS"<<std::endl;
197 physicalPartsTreeOS.close();
198 logicalPartTypesOS.close();
199 nominalPlacementsOS.close();
200 detectorPartsOS.close();
201 pospartsGraphOS.close();
static const char * categoryName(Category s)
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
type of data representation of DDCompactView
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DD3Vector
A DD Translation is currently implemented with Root Vector3D.
std::vector< DDExpandedNode > DDGeoHistory
Geometrical 'path' of the current node up to the root-node.
Provides an exploded view of the detector (tree-view)