CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
CosmicHitTripletGeneratorFromLayerTriplet.cc
Go to the documentation of this file.
11 
12 #include <cmath>
13 
15 
18  const LayerWithHits* middle,
19  const LayerWithHits* outer,
20  const edm::EventSetup& iSetup)
21  : TTRHbuilder(0),trackerGeometry(0),
22  //theLayerCache(*layerCache),
23  theOuterLayer(outer),theMiddleLayer(middle), theInnerLayer(inner)
24 {
25 
27  iSetup.get<TrackerDigiGeometryRecord>().get(tracker);
28  trackerGeometry = tracker.product();
29 }
32  const edm::EventSetup& iSetup)
33 {
34 
35  if (theInnerLayer->recHits().empty()) return;
36  if (theMiddleLayer->recHits().empty()) return;
37  if (theOuterLayer->recHits().empty()) return;
38  float radius1 =dynamic_cast<const BarrelDetLayer*>(theInnerLayer->layer())->specificSurface().radius();
39  float radius2 =dynamic_cast<const BarrelDetLayer*>(theMiddleLayer->layer())->specificSurface().radius();
40  float radius3 =dynamic_cast<const BarrelDetLayer*>(theOuterLayer->layer())->specificSurface().radius();
41  bool seedfromoverlaps=((std::abs(radius1-radius2)<0.1)|| (std::abs(radius3-radius2)<0.1))? true : false;
42  std::vector<const TrackingRecHit*>::const_iterator ohh;
43  std::vector<const TrackingRecHit*>::const_iterator mhh;
44  std::vector<const TrackingRecHit*>::const_iterator ihh;
45 
46  std::string builderName = "WithTrackAngle";
48  iSetup.get<TransientRecHitRecord>().get(builderName, builder);
49 
50  if(!seedfromoverlaps){
51  for(ohh=theOuterLayer->recHits().begin();ohh!=theOuterLayer->recHits().end();ohh++){
52  auto oh= (BaseTrackerRecHit const *)(&*ohh);
53  for(mhh=theMiddleLayer->recHits().begin();mhh!=theMiddleLayer->recHits().end();mhh++){
54  auto mh= (BaseTrackerRecHit const *)(&*mhh);
55  float z_diff =mh->globalPosition().z()-oh->globalPosition().z();
56  float midy=mh->globalPosition().y();
57  float outy=oh->globalPosition().y();
58  float midx=mh->globalPosition().x();
59  float outx=oh->globalPosition().x();
60  float dxdy=std::abs((outx-midx)/(outy-midy));
61  if((std::abs(z_diff)<30) && (outy*midy>0) &&(dxdy<2))
62  {
63  for(ihh=theInnerLayer->recHits().begin();ihh!=theInnerLayer->recHits().end();ihh++){
64  auto ih= (BaseTrackerRecHit const *)(&*ihh);
65  float z_diff =mh->globalPosition().z()-ih->globalPosition().z();
66  float inny=ih->globalPosition().y();
67  float innx=ih->globalPosition().x();
68  float dxdy=std::abs((innx-midx)/(inny-midy));
69  if ((std::abs(z_diff)<30) && (inny*midy>0) &&(dxdy<2)&&(!seedfromoverlaps))
70  {
71  result.push_back( OrderedHitTriplet(ih,mh,oh) );
72  }
73  }
74  }
75  }
76  }
77  } else {
78  for(ohh=theOuterLayer->recHits().begin();ohh!=theOuterLayer->recHits().end();ohh++){
79  auto oh= (BaseTrackerRecHit const *)(&*ohh);
80  for(mhh=theMiddleLayer->recHits().begin();mhh!=theMiddleLayer->recHits().end();mhh++){
81  auto mh= (BaseTrackerRecHit const *)(&*mhh);
82  float z_diff =mh->globalPosition().z()-oh->globalPosition().z();
83  float midy=mh->globalPosition().y();
84  float outy=oh->globalPosition().y();
85  float midx=mh->globalPosition().x();
86  float outx=oh->globalPosition().x();
87  float dxdy=std::abs((outx-midx)/(outy-midy));
88  float DeltaR=oh->globalPosition().perp()-mh->globalPosition().perp();
89  if((std::abs(z_diff)<18) && (std::abs(oh->globalPosition().phi()-mh->globalPosition().phi())<0.05) &&(DeltaR<0)&&(dxdy<2)){
90  for(ihh=theInnerLayer->recHits().begin();ihh!=theInnerLayer->recHits().end();ihh++){
91  auto ih= (BaseTrackerRecHit const *)(&*ihh);
92  float z_diff =mh->globalPosition().z()-ih->globalPosition().z();
93  float inny=ih->globalPosition().y();
94  float innx=ih->globalPosition().x();
95  float dxdy=std::abs((innx-midx)/(inny-midy));
96  if ((std::abs(z_diff)<30) && (inny*midy>0) &&(dxdy<2))
97  {
98  result.push_back( OrderedHitTriplet(ih,mh,oh));
99  }
100  }
101  }
102  }
103  }
104  }
105 }
106 
const DetLayer * layer() const
Definition: LayerWithHits.h:40
Definition: deltaR.h:57
CosmicHitTripletGeneratorFromLayerTriplet(const LayerWithHits *inner, const LayerWithHits *middle, const LayerWithHits *outer, const edm::EventSetup &iSetup)
tuple result
Definition: mps_fire.py:84
TransientTrackingRecHit::ConstRecHitPointer TkHitPairsCachedHit
std::shared_ptr< TrackingRecHit const > ConstRecHitPointer
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
const T & get() const
Definition: EventSetup.h:56
T const * product() const
Definition: ESHandle.h:86
const std::vector< const TrackingRecHit * > & recHits() const
return the recHits of the Layer
Definition: LayerWithHits.h:37
void hitTriplets(const TrackingRegion &ar, OrderedHitTriplets &ap, const edm::EventSetup &iSetup)