Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-12-12 23:19:25

0001 //#define EDM_ML_DEBUG
0002 
0003 #include "RecoMTD/DetLayers/interface/BTLDetLayerGeometryBuilder.h"
0004 
0005 #include <DataFormats/ForwardDetId/interface/BTLDetId.h>
0006 #include <Geometry/CommonDetUnit/interface/GeomDet.h>
0007 #include <RecoMTD/DetLayers/interface/MTDTrayBarrelLayer.h>
0008 #include <RecoMTD/DetLayers/interface/MTDDetTray.h>
0009 
0010 #include <Utilities/General/interface/precomputed_value_sort.h>
0011 #include <Geometry/CommonDetUnit/interface/DetSorting.h>
0012 
0013 #include <FWCore/MessageLogger/interface/MessageLogger.h>
0014 
0015 #include <iostream>
0016 
0017 using namespace std;
0018 
0019 BTLDetLayerGeometryBuilder::BTLDetLayerGeometryBuilder() {}
0020 
0021 BTLDetLayerGeometryBuilder::~BTLDetLayerGeometryBuilder() {}
0022 
0023 vector<DetLayer*> BTLDetLayerGeometryBuilder::buildLayers(const MTDGeometry& geo, const MTDTopology& topo) {
0024   vector<DetLayer*> detlayers;
0025   vector<MTDTrayBarrelLayer*> result;
0026 
0027   vector<const DetRod*> btlDetTrays;
0028 
0029   vector<const GeomDet*> geomDets;
0030 
0031   // logical tracking trays are now rows along z of modules, 3 per each mechanical tray, running from -z to z
0032   // MTDGeometry is already built with the proper ordering, it is enough to exploit that
0033   geomDets.reserve(topo.btlModulesPerRod());
0034 
0035   uint32_t index(0);
0036   for (const auto& det : geo.detsBTL()) {
0037     index++;
0038     geomDets.emplace_back(det);
0039     if (index == topo.btlModulesPerRod()) {
0040       btlDetTrays.emplace_back(new MTDDetTray(geomDets));
0041       LogTrace("MTDDetLayers") << "  New BTLDetTray with " << geomDets.size()
0042                                << " modules at R=" << btlDetTrays.back()->position().perp()
0043                                << ", phi=" << btlDetTrays.back()->position().phi();
0044       index = 0;
0045       geomDets.clear();
0046     }
0047   }
0048 
0049   result.emplace_back(new MTDTrayBarrelLayer(btlDetTrays));
0050   LogTrace("MTDDetLayers") << "BTLDetLayerGeometryBuilder: new MTDTrayBarrelLayer with " << btlDetTrays.size()
0051                            << " rods, at R " << result.back()->specificSurface().radius();
0052 
0053   for (vector<MTDTrayBarrelLayer*>::const_iterator it = result.begin(); it != result.end(); it++)
0054     detlayers.push_back((DetLayer*)(*it));
0055 
0056   return detlayers;
0057 }