Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:15:29

0001 #include "CondDBCmsTrackerConstruction.h"
0002 #include "DetectorDescription/Core/interface/DDFilteredView.h"
0003 #include "DetectorDescription/Core/interface/DDCompactView.h"
0004 #include "CondFormats/GeometryObjects/interface/PGeometricDet.h"
0005 #include "Geometry/TrackerNumberingBuilder/interface/GeometricDet.h"
0006 #include "Geometry/TrackerNumberingBuilder/plugins/ExtractStringFromDDD.h"
0007 #include "Geometry/TrackerNumberingBuilder/plugins/CmsTrackerBuilder.h"
0008 #include "Geometry/TrackerNumberingBuilder/plugins/CmsTrackerDetIdBuilder.h"
0009 
0010 using namespace cms;
0011 
0012 std::unique_ptr<GeometricDet> CondDBCmsTrackerConstruction::construct(const PGeometricDet& pgd) {
0013   //std::cout << "In CondDBCmsTrackerConstruction::construct with pgd.pgeomdets_.size() == " << pgd.pgeomdets_.size() << std::endl;
0014   auto tracker = std::make_unique<GeometricDet>(pgd.pgeomdets_[0], GeometricDet::Tracker);
0015 
0016   size_t detMax = pgd.pgeomdets_.size();
0017   size_t tri = 1;
0018   std::vector<GeometricDet*> hier;
0019   GeometricDet* subdet = tracker.get();
0020   hier.emplace_back(subdet);
0021   while (tri < detMax && pgd.pgeomdets_[tri]._level == 1) {
0022     subdet = new GeometricDet(pgd.pgeomdets_[tri], GeometricDet::GDEnumType(pgd.pgeomdets_[tri]._type));
0023     //std::cout << lev << " type " << pgd.pgeomdets_[tri]._type << " " << subdet->geographicalId() << std::endl;
0024     ++tri;
0025     hier.back()->addComponent(subdet);
0026     hier.emplace_back(subdet);
0027     while (tri < detMax && pgd.pgeomdets_[tri]._level == 2) {
0028       subdet = new GeometricDet(pgd.pgeomdets_[tri], GeometricDet::GDEnumType(pgd.pgeomdets_[tri]._type));
0029       //std::cout << lev << "\ttype " << pgd.pgeomdets_[tri]._type << " " << subdet->geographicalId() << std::endl;
0030       ++tri;
0031       hier.back()->addComponent(subdet);
0032       hier.emplace_back(subdet);
0033       while (tri < detMax && pgd.pgeomdets_[tri]._level == 3) {
0034         subdet = new GeometricDet(pgd.pgeomdets_[tri], GeometricDet::GDEnumType(pgd.pgeomdets_[tri]._type));
0035         //std::cout << lev << "\t\ttype " << pgd.pgeomdets_[tri]._type << " " << subdet->geographicalId() << std::endl;
0036         ++tri;
0037         hier.back()->addComponent(subdet);
0038         hier.emplace_back(subdet);
0039         while (tri < detMax && pgd.pgeomdets_[tri]._level == 4) {
0040           subdet = new GeometricDet(pgd.pgeomdets_[tri], GeometricDet::GDEnumType(pgd.pgeomdets_[tri]._type));
0041           //std::cout << lev << "\t\t\ttype " << pgd.pgeomdets_[tri]._type << " " << subdet->geographicalId() << std::endl;
0042           ++tri;
0043           hier.back()->addComponent(subdet);
0044           hier.emplace_back(subdet);
0045           while (tri < detMax && pgd.pgeomdets_[tri]._level == 5) {
0046             subdet = new GeometricDet(pgd.pgeomdets_[tri], GeometricDet::GDEnumType(pgd.pgeomdets_[tri]._type));
0047             //std::cout << lev << "\t\t\t\ttype " << pgd.pgeomdets_[tri]._type << " " << subdet->geographicalId() << std::endl;
0048             ++tri;
0049             hier.back()->addComponent(subdet);
0050             hier.emplace_back(subdet);
0051             while (tri < detMax && pgd.pgeomdets_[tri]._level == 6) {
0052               subdet = new GeometricDet(pgd.pgeomdets_[tri], GeometricDet::GDEnumType(pgd.pgeomdets_[tri]._type));
0053               //std::cout << lev << "\t\t\t\t\ttype " << pgd.pgeomdets_[tri]._type << " " << subdet->geographicalId() << std::endl;
0054               ++tri;
0055               hier.back()->addComponent(subdet);
0056             }
0057             hier.pop_back();
0058           }
0059           hier.pop_back();
0060         }
0061         hier.pop_back();
0062       }
0063       hier.pop_back();
0064     }
0065     hier.pop_back();
0066   }
0067   //     std::cout << "Before \"deep components\" test I want to see if I can iterate to 6 layers by myself..." << std::endl;
0068   //     std::vector<const GeometricDet*> l0 = tracker->components();
0069   //     std::vector<const GeometricDet*>::const_iterator i0 = l0.begin();
0070   //     std::vector<const GeometricDet*>::const_iterator e0 = l0.end();
0071   //     int count=0; // count only the leaves.
0072   //     for ( ; i0 != e0 ; ++i0) {
0073   //       std::cout << lev << " type " << (*i0)->type() << " " << int((*i0)->geographicalId()) << std::endl;
0074   //       std::vector<const GeometricDet*> l1 = (*i0)->components();
0075   //       if ( l1.size() == 0 )  ++count;
0076   //       std::vector<const GeometricDet*>::const_iterator i1 = l1.begin();
0077   //       std::vector<const GeometricDet*>::const_iterator e1 = l1.end();
0078   //       ++lev;
0079   //       for ( ; i1 != e1 ; ++i1) {
0080   //    std::cout << lev << "\ttype " << (*i1)->type() << " " << int((*i1)->geographicalId()) << std::endl;
0081   //    std::vector<const GeometricDet*> l2 = (*i1)->components();
0082   //    if ( l2.size() == 0 )  ++count;
0083   //    std::vector<const GeometricDet*>::const_iterator i2 = l1.begin();
0084   //    std::vector<const GeometricDet*>::const_iterator e2 = l1.end();
0085   //    ++lev;
0086   //    for ( ; i2 != e2 ; ++i2) {
0087   //      std::cout << lev << "\t\ttype " << (*i2)->type() << " " << int((*i2)->geographicalId()) << std::endl;
0088   //      std::vector<const GeometricDet*> l3 = (*i2)->components();
0089   //      if ( l3.size() == 0 )  ++count;
0090   //      std::vector<const GeometricDet*>::const_iterator i3 = l3.begin();
0091   //      std::vector<const GeometricDet*>::const_iterator e3 = l3.end();
0092   //      ++lev;
0093   //      for ( ; i3 != e3 ; ++i3) {
0094   //        std::cout << lev << "\t\t\ttype " << (*i3)->type() << " " << int((*i3)->geographicalId()) << std::endl;
0095   //        std::vector<const GeometricDet*> l4 = (*i3)->components();
0096   //        if ( l4.size() == 0 )  ++count;
0097   //        std::vector<const GeometricDet*>::const_iterator i4 = l4.begin();
0098   //        std::vector<const GeometricDet*>::const_iterator e4 = l4.end();
0099   //        ++lev;
0100   //        for ( ; i4 != e4 ; ++i4) {
0101   //          std::cout << lev << "\t\t\t\ttype " << (*i4)->type() << " " << int((*i4)->geographicalId()) << std::endl;
0102   //          std::vector<const GeometricDet*> l5 = (*i4)->components();
0103   //          if ( l5.size() == 0 )  ++count;
0104   //          std::vector<const GeometricDet*>::const_iterator i5 = l5.begin();
0105   //          std::vector<const GeometricDet*>::const_iterator e5 = l5.end();
0106   //          ++lev;
0107   //          for ( ; i5 != e5 ; ++i5) {
0108   //        std::cout << lev << "\t\t\t\t\ttype " << (*i5)->type() << " " << int((*i5)->geographicalId()) << std::endl;
0109   //        ++count;
0110   //        //       std::vector<const GeometricDet*> l6 = (*i0)->components();
0111   //        //       std::vector<const GeometricDet*>::const_iterator i6 = l6.begin();
0112   //        //       std::vector<const GeometricDet*>::const_iterator e6 = l6.end();
0113   //        //     for ( ; i6 != e6 ; ++i6) {
0114   //        //       std::cout << lev << " type " << (*i6)->type() << " " << int((*i6)->geographicalId()) << std::endl;
0115   //        //       std::vector<const GeometricDet*> l1 = (*i0)->components();
0116   //        //       std::vector<const GeometricDet*>::const_iterator i1 = l1.begin();
0117   //        //       std::vector<const GeometricDet*>::const_iterator e1 = l1.end();
0118   //        //     }
0119   //          }
0120   //          --lev;
0121   //        }
0122   //        --lev;
0123   //      }
0124   //      --lev;
0125   //    }
0126   //    --lev;
0127   //       }
0128   //       --lev;
0129   //     }
0130   //     std::cout << "done... count = " << count << std::endl;
0131   //     std::cout << "about to try to see what the \"deep components\" are" << std::endl;
0132   //    std::cout << "done with the \"deep components\" check, there are: " << tracker->deepComponents().size() << std::endl;
0133   return tracker;
0134 }