CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Classes | Public Member Functions | Private Member Functions | Private Attributes
SeedingLayerSetsBuilder Class Reference

#include <SeedingLayerSetsBuilder.h>

Classes

struct  LayerSpec
 

Public Member Functions

ctfseeding::SeedingLayerSets layers (const edm::EventSetup &es) const
 
 SeedingLayerSetsBuilder ()
 
 SeedingLayerSetsBuilder (const edm::ParameterSet &cfg)
 

Private Member Functions

edm::ParameterSet layerConfig (const std::string &nameLayer, const edm::ParameterSet &cfg) const
 
std::vector< std::vector
< std::string > > 
layerNamesInSets (const std::vector< std::string > &namesPSet)
 

Private Attributes

std::vector< std::vector
< LayerSpec > > 
theLayersInSets
 

Detailed Description

Definition at line 14 of file SeedingLayerSetsBuilder.h.

Constructor & Destructor Documentation

SeedingLayerSetsBuilder::SeedingLayerSetsBuilder ( )
inline

Definition at line 18 of file SeedingLayerSetsBuilder.h.

18 {}
SeedingLayerSetsBuilder::SeedingLayerSetsBuilder ( const edm::ParameterSet cfg)

Definition at line 51 of file SeedingLayerSetsBuilder.cc.

References edm::ParameterSet::exists(), edm::ParameterSet::getParameter(), SeedingLayerSetsBuilder::LayerSpec::hitBuilder, SeedingLayerSetsBuilder::LayerSpec::hitErrorRPhi, SeedingLayerSetsBuilder::LayerSpec::hitErrorRZ, SeedingLayerSetsBuilder::LayerSpec::matchedRecHits, SeedingLayerSetsBuilder::LayerSpec::maxRing, SeedingLayerSetsBuilder::LayerSpec::minRing, SeedingLayerSetsBuilder::LayerSpec::name, SeedingLayerSetsBuilder::LayerSpec::pixelHitProducer, SeedingLayerSetsBuilder::LayerSpec::rphiRecHits, SeedingLayerSetsBuilder::LayerSpec::stereoRecHits, SeedingLayerSetsBuilder::LayerSpec::useErrorsFromParam, SeedingLayerSetsBuilder::LayerSpec::useMatchedRecHits, SeedingLayerSetsBuilder::LayerSpec::usePixelHitProducer, SeedingLayerSetsBuilder::LayerSpec::useRingSelector, SeedingLayerSetsBuilder::LayerSpec::useRPhiRecHits, SeedingLayerSetsBuilder::LayerSpec::useSimpleRphiHitsCleaner, and SeedingLayerSetsBuilder::LayerSpec::useStereoRecHits.

52 {
53  std::vector<std::string> namesPset = cfg.getParameter<std::vector<std::string> >("layerList");
54  std::vector<std::vector<std::string> > layerNamesInSets = this->layerNamesInSets(namesPset);
55 
56  // debug printout of layers
57  typedef std::vector<std::string>::const_iterator IS;
58  typedef std::vector<std::vector<std::string> >::const_iterator IT;
59  std::ostringstream str;
60  // The following should not be set to cout
61 // for (IT it = layerNamesInSets.begin(); it != layerNamesInSets.end(); it++) {
62 // str << "SET: ";
63 // for (IS is = it->begin(); is != it->end(); is++) str << *is <<" ";
64 // str << std::endl;
65 // }
66 // std::cout << str.str() << std::endl;
67 
68  map<string,LayerSpec> mapConfig; // for debug printout only!
69 
70  for (IT it = layerNamesInSets.begin(); it != layerNamesInSets.end(); it++) {
71  vector<LayerSpec> layersInSet;
72  for (IS is = it->begin(); is != it->end(); is++) {
73  LayerSpec layer;
74 
75  layer.name = *is;
76  //std::cout << "layer name in config: " << *is << std::endl;
77  edm::ParameterSet cfgLayer = layerConfig(layer.name, cfg);
78 
79  layer.usePixelHitProducer = true;
80  layer.useMatchedRecHits = true;
81  layer.useRPhiRecHits = true;
82  layer.useStereoRecHits = true;
83  if (cfgLayer.exists("HitProducer")) {
84  layer.pixelHitProducer = cfgLayer.getParameter<string>("HitProducer");
85  }else{
86  layer.usePixelHitProducer = false;
87  }
88  if (cfgLayer.exists("matchedRecHits")) {
89  layer.matchedRecHits = cfgLayer.getParameter<edm::InputTag>("matchedRecHits");
90  }else{
91  layer.useMatchedRecHits = false;
92  }
93  if (cfgLayer.exists("rphiRecHits")) {
94  layer.rphiRecHits = cfgLayer.getParameter<edm::InputTag>("rphiRecHits");
95  }else{
96  layer.useRPhiRecHits = false;
97  }
98  if (cfgLayer.exists("stereoRecHits")) {
99  layer.stereoRecHits= cfgLayer.getParameter<edm::InputTag>("stereoRecHits");
100  }else{
101  layer.useStereoRecHits = false;
102  }
103 
104  layer.hitBuilder = cfgLayer.getParameter<string>("TTRHBuilder");
105 
106  layer.useErrorsFromParam = cfgLayer.exists("useErrorsFromParam") ? cfgLayer.getParameter<bool>("useErrorsFromParam") : false;
107  if(layer.useErrorsFromParam) {
108  layer.hitErrorRPhi = cfgLayer.getParameter<double>("hitErrorRPhi");
109  layer.hitErrorRZ = cfgLayer.getParameter<double>("hitErrorRZ");
110  }
111 
112  layer.useRingSelector = cfgLayer.exists("useRingSlector") ? cfgLayer.getParameter<bool>("useRingSlector") : false;
113  if (layer.useRingSelector) {
114  layer.minRing = cfgLayer.getParameter<int>("minRing");
115  layer.maxRing = cfgLayer.getParameter<int>("maxRing");
116  }
117 
118  layer.useSimpleRphiHitsCleaner = cfgLayer.exists("useSimpleRphiHitsCleaner") ? cfgLayer.getParameter<bool>("useSimpleRphiHitsCleaner") : true;
119 
120  layersInSet.push_back(layer);
121  mapConfig[layer.name]=layer;
122  }
123  theLayersInSets.push_back(layersInSet);
124  }
125 
126  // debug printout
127  // The following should not be set to cout
128 // for (map<string,LayerSpec>::const_iterator im = mapConfig.begin(); im != mapConfig.end(); im++) {
129 // std::cout << (*im).second.print() << std::endl;
130 // }
131 }
T getParameter(std::string const &) const
bool exists(std::string const &parameterName) const
checks if a parameter exists
std::vector< LinkConnSpec >::const_iterator IT
std::vector< std::vector< LayerSpec > > theLayersInSets
edm::ParameterSet layerConfig(const std::string &nameLayer, const edm::ParameterSet &cfg) const
std::vector< std::vector< std::string > > layerNamesInSets(const std::vector< std::string > &namesPSet)

Member Function Documentation

edm::ParameterSet SeedingLayerSetsBuilder::layerConfig ( const std::string &  nameLayer,
const edm::ParameterSet cfg 
) const
private

Definition at line 133 of file SeedingLayerSetsBuilder.cc.

References gather_cfg::cout, edm::ParameterSet::exists(), edm::ParameterSet::getParameter(), AlCaRecoCosmics_cfg::name, and query::result.

134 {
136 
137  for (string::size_type iEnd=nameLayer.size(); iEnd > 0; --iEnd) {
138  string name = nameLayer.substr(0,iEnd);
139  if (cfg.exists(name)) return cfg.getParameter<edm::ParameterSet>(name);
140  }
141  cout <<"configuration for layer: "<<nameLayer<<" not found, job will probably crash!"<<endl;
142  return result;
143 }
T getParameter(std::string const &) const
bool exists(std::string const &parameterName) const
checks if a parameter exists
uint16_t size_type
tuple result
Definition: query.py:137
tuple cout
Definition: gather_cfg.py:41
vector< vector< string > > SeedingLayerSetsBuilder::layerNamesInSets ( const std::vector< std::string > &  namesPSet)
private

Definition at line 145 of file SeedingLayerSetsBuilder.cc.

References geometryCSVtoXML::line, pos, and query::result.

146 {
147  std::vector<std::vector<std::string> > result;
148  for (std::vector<std::string>::const_iterator is=namesPSet.begin(); is < namesPSet.end(); ++is) {
149  vector<std::string> layersInSet;
150  string line = *is;
152  while (pos != string::npos ) {
153  pos=line.find("+");
154  string layer = line.substr(0,pos);
155  layersInSet.push_back(layer);
156  line=line.substr(pos+1,string::npos);
157  }
158  result.push_back(layersInSet);
159  }
160  return result;
161 }
uint16_t size_type
tuple result
Definition: query.py:137
SeedingLayerSets SeedingLayerSetsBuilder::layers ( const edm::EventSetup es) const

Definition at line 163 of file SeedingLayerSetsBuilder.cc.

References ctfseeding::SeedingLayer::Barrel, ctfseeding::HitExtractorSTRP::clone(), edm::EventSetup::get(), SeedingLayerSetsBuilder::LayerSpec::hitBuilder, SeedingLayerSetsBuilder::LayerSpec::hitErrorRPhi, SeedingLayerSetsBuilder::LayerSpec::hitErrorRZ, SeedingLayerSetsBuilder::LayerSpec::matchedRecHits, SeedingLayerSetsBuilder::LayerSpec::maxRing, SeedingLayerSetsBuilder::LayerSpec::minRing, AlCaRecoCosmics_cfg::name, SeedingLayerSetsBuilder::LayerSpec::name, ctfseeding::SeedingLayer::NegEndcap, GeomDetEnumerators::PixelBarrel, GeomDetEnumerators::PixelEndcap, SeedingLayerSetsBuilder::LayerSpec::pixelHitProducer, ctfseeding::SeedingLayer::PosEndcap, edm::ESHandle< class >::product(), query::result, SeedingLayerSetsBuilder::LayerSpec::rphiRecHits, SeedingLayerSetsBuilder::LayerSpec::stereoRecHits, DetLayer::subDetector(), patCandidatesForDimuonsSequences_cff::tracker, SeedingLayerSetsBuilder::LayerSpec::useErrorsFromParam, ctfseeding::HitExtractorSTRP::useMatchedHits(), SeedingLayerSetsBuilder::LayerSpec::useMatchedRecHits, ctfseeding::HitExtractorSTRP::useRingSelector(), SeedingLayerSetsBuilder::LayerSpec::useRingSelector, ctfseeding::HitExtractorSTRP::useRPhiHits(), SeedingLayerSetsBuilder::LayerSpec::useRPhiRecHits, ctfseeding::HitExtractorSTRP::useSimpleRphiHitsCleaner(), SeedingLayerSetsBuilder::LayerSpec::useSimpleRphiHitsCleaner, ctfseeding::HitExtractorSTRP::useStereoHits(), and SeedingLayerSetsBuilder::LayerSpec::useStereoRecHits.

Referenced by GenericPairGenerator::init(), GenericTripletGenerator::init(), and SimpleCosmicBONSeeder::triplets().

164 {
165  typedef std::vector<SeedingLayer> Set;
167 
169  es.get<TrackerRecoGeometryRecord>().get( tracker );
170 
171  std::vector<BarrelDetLayer*> bpx = tracker->barrelLayers();
172  std::vector<BarrelDetLayer*> tib = tracker->tibLayers();
173  std::vector<BarrelDetLayer*> tob = tracker->tobLayers();
174 
175  std::vector<ForwardDetLayer*> fpx_pos = tracker->posForwardLayers();
176  std::vector<ForwardDetLayer*> tid_pos = tracker->posTidLayers();
177  std::vector<ForwardDetLayer*> tec_pos = tracker->posTecLayers();
178 
179  std::vector<ForwardDetLayer*> fpx_neg = tracker->negForwardLayers();
180  std::vector<ForwardDetLayer*> tid_neg = tracker->negTidLayers();
181  std::vector<ForwardDetLayer*> tec_neg = tracker->negTecLayers();
182 
183  typedef std::vector<std::vector<LayerSpec> >::const_iterator IT;
184  typedef std::vector<LayerSpec>::const_iterator IS;
185 
186  for (IT it = theLayersInSets.begin(); it != theLayersInSets.end(); it++) {
187  Set set;
188  bool setOK = true;
189  for (IS is = it->begin(), isEnd = it->end(); is < isEnd; ++is) {
190  const LayerSpec & layer = (*is);
191  std::string name = layer.name;
192  const DetLayer * detLayer =0;
194  int idLayer = 0;
195  bool nameOK = true;
196  HitExtractor * extractor = 0;
197 
198  //
199  // BPIX
200  //
201  if (name.substr(0,4) == "BPix") {
202  idLayer = atoi(name.substr(4,1).c_str());
204  detLayer=bpx[idLayer-1];
205  }
206  //
207  // FPIX
208  //
209  else if (name.substr(0,4) == "FPix") {
210  idLayer = atoi(name.substr(4,1).c_str());
211  if ( name.find("pos") != string::npos ) {
212  side = SeedingLayer::PosEndcap;
213  detLayer = fpx_pos[idLayer-1];
214  } else {
215  side = SeedingLayer::NegEndcap;
216  detLayer = fpx_neg[idLayer-1];
217  }
218  }
219  //
220  // TIB
221  //
222  else if (name.substr(0,3) == "TIB") {
223  idLayer = atoi(name.substr(3,1).c_str());
225  detLayer=tib[idLayer-1];
226  }
227  //
228  // TID
229  //
230  else if (name.substr(0,3) == "TID") {
231  idLayer = atoi(name.substr(3,1).c_str());
232  if ( name.find("pos") != string::npos ) {
233  side = SeedingLayer::PosEndcap;
234  detLayer = tid_pos[idLayer-1];
235  } else {
236  side = SeedingLayer::NegEndcap;
237  detLayer = tid_neg[idLayer-1];
238  }
239  }
240  //
241  // TOB
242  //
243  else if (name.substr(0,3) == "TOB") {
244  idLayer = atoi(name.substr(3,1).c_str());
246  detLayer=tob[idLayer-1];
247  }
248  //
249  // TEC
250  //
251  else if (name.substr(0,3) == "TEC") {
252  idLayer = atoi(name.substr(3,1).c_str());
253  if ( name.find("pos") != string::npos ) {
254  side = SeedingLayer::PosEndcap;
255  detLayer = tec_pos[idLayer-1];
256  } else {
257  side = SeedingLayer::NegEndcap;
258  detLayer = tec_neg[idLayer-1];
259  }
260  }
261  else {
262  nameOK = false;
263  setOK = false;
264  }
265 
266  if(nameOK) {
267  if ( detLayer->subDetector() == GeomDetEnumerators::PixelBarrel ||
269  extractor = new HitExtractorPIX(side,idLayer,layer.pixelHitProducer);
270  } else {
271  HitExtractorSTRP extSTRP(detLayer,side,idLayer);
272  if (layer.useMatchedRecHits) extSTRP.useMatchedHits(layer.matchedRecHits);
273  if (layer.useRPhiRecHits) extSTRP.useRPhiHits(layer.rphiRecHits);
274  if (layer.useStereoRecHits) extSTRP.useStereoHits(layer.stereoRecHits);
275  if (layer.useRingSelector) extSTRP.useRingSelector(layer.minRing,layer.maxRing);
276  extSTRP.useSimpleRphiHitsCleaner(layer.useSimpleRphiHitsCleaner);
277  extractor = extSTRP.clone();
278  }
279 
281  es.get<TransientRecHitRecord>().get(layer.hitBuilder, builder);
282 
283  if (layer.useErrorsFromParam) {
284  set.push_back( SeedingLayer( name, detLayer, builder.product(),
285  extractor, true, layer.hitErrorRPhi,layer.hitErrorRZ));
286  } else {
287  set.push_back( SeedingLayer( name, detLayer, builder.product(), extractor));
288  }
289  }
290 
291  }
292  if(setOK) result.push_back(set);
293  }
294  return result;
295 }
virtual SubDetector subDetector() const =0
The type of detector (PixelBarrel, PixelEndcap, TIB, TOB, TID, TEC, CSC, DT, RPCBarrel, RPCEndcap)
tuple result
Definition: query.py:137
std::vector< LinkConnSpec >::const_iterator IT
const T & get() const
Definition: EventSetup.h:55
T const * product() const
Definition: ESHandle.h:62
std::vector< std::vector< LayerSpec > > theLayersInSets
std::vector< std::vector< SeedingLayer > > SeedingLayerSets

Member Data Documentation

std::vector<std::vector<LayerSpec> > SeedingLayerSetsBuilder::theLayersInSets
private

Definition at line 39 of file SeedingLayerSetsBuilder.h.