CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
VolumeBasedMagneticFieldESProducer.cc
Go to the documentation of this file.
1 
7 
9 
13 
17 
18 #include <string>
19 #include <vector>
20 #include <iostream>
21 
22 #include <boost/algorithm/string/split.hpp>
23 #include <boost/algorithm/string/classification.hpp>
24 #include <boost/lexical_cast.hpp>
25 
26 using namespace std;
27 using namespace magneticfield;
28 
30 {
32 }
33 
34 // ------------ method called to produce the data ------------
35 std::auto_ptr<MagneticField> VolumeBasedMagneticFieldESProducer::produce(const IdealMagneticFieldRecord & iRecord)
36 {
37  bool debug = pset.getUntrackedParameter<bool>("debugBuilder", false);
38  if (debug) {
39  cout << "VolumeBasedMagneticFieldESProducer::produce() " << pset.getParameter<std::string>("version") << endl;
40  }
41 
43  iRecord.get("magfield",cpv );
45  pset.getParameter<int>("geometryVersion"),
46  debug);
47 
48  // Get scaling factors
49  vector<int> keys = pset.getParameter<vector<int> >("scalingVolumes");
50  vector<double> values = pset.getParameter<vector<double> >("scalingFactors");
51 
52  if (keys.size() != 0) {
53  builder.setScaling(keys, values);
54  }
55 
56  // Get specification for the grid tables to be used.
57  typedef vector<edm::ParameterSet> VPSet;
58  {
59  VPSet fileSpec = pset.getParameter<VPSet>("gridFiles");
60  if (fileSpec.size()!=0) {
61  auto_ptr<TableFileMap> gridFiles(new TableFileMap);
62  for(VPSet::const_iterator rule = fileSpec.begin(); rule != fileSpec.end(); ++rule){
63  string s_volumes = rule->getParameter<string>("volumes");
64  string s_sectors = rule->getParameter<string>("sectors"); // 0 means all volumes
65  int master = rule->getParameter<int>("master");
66  string path = rule->getParameter<string>("path");
67 
68  vector<unsigned> volumes = expandList(s_volumes);
69  vector<unsigned> sectors = expandList(s_sectors);
70 
71  if (debug) {
72  cout << s_volumes << endl;
73  copy(volumes.begin(), volumes.end(), ostream_iterator<unsigned>(cout, " "));
74  cout << endl;
75  cout << s_sectors << endl;
76  copy(sectors.begin(), sectors.end(), ostream_iterator<unsigned>(cout, " "));
77  cout << endl;
78  }
79 
80  for (vector<unsigned>::iterator i = volumes.begin(); i!=volumes.end(); ++i){
81  for (vector<unsigned>::iterator j = sectors.begin(); j!=sectors.end(); ++j){
82  unsigned vpacked = (*i)*100+(*j);
83  if (gridFiles->find(vpacked)==gridFiles->end()) {
84  (*gridFiles)[vpacked] = make_pair(path, master);
85  } else {
86  edm::LogError("BADconfiguration") << "ERROR: VolumeBasedMagneticFieldESProducer: malformed gridFiles config parameter";
87  abort();
88  }
89  }
90  }
91  }
92  builder.setGridFiles(gridFiles); // gridFiles passed by reference, which is required to exist until
93  }
94  }
95 
96  builder.build(*cpv);
97 
98 
99  // Get slave field
100  edm::ESHandle<MagneticField> paramField;
101  if (pset.getParameter<bool>("useParametrizedTrackerField")) {;
102  iRecord.get(pset.getParameter<string>("paramLabel"),paramField);
103  }
104  std::auto_ptr<MagneticField> s(new VolumeBasedMagneticField(pset,builder.barrelLayers(), builder.endcapSectors(), builder.barrelVolumes(), builder.endcapVolumes(), builder.maxR(), builder.maxZ(), paramField.product(), false));
105  return s;
106 }
107 
108 vector<unsigned> VolumeBasedMagneticFieldESProducer::expandList(const string& list) {
109  typedef vector<string> vstring;
110  vector<unsigned> values;
111  vstring v1;
112  boost::split(v1, list, boost::is_any_of(","));
113  for (vstring::const_iterator i= v1.begin(); i!=v1.end(); ++i){
114  vstring v2;
115  boost::split(v2, *i, boost::is_any_of("-"));
116  unsigned start = boost::lexical_cast<unsigned>(v2.front());
117  unsigned end = boost::lexical_cast<unsigned>(v2.back());
118  if ((v2.size()>2) || (start>end)) {
119  edm::LogError("BADconfiguration") << "VolumeBasedMagneticFieldESProducer: malformed configuration" << list << endl;
120  abort();
121  }
122  for (unsigned k = start; k<=end; ++k){
123  values.push_back(k);
124  }
125  }
126  return values;
127 }
128 
129 
130 
131 
132 
133 
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
int i
Definition: DBlmapReader.cc:9
tuple start
Check for commandline option errors.
Definition: dqm_diff.py:58
vector< string > vstring
Definition: ExoticaDQM.cc:75
std::vector< MagBLayer * > barrelLayers() const
Get barrel layers.
void setWhatProduced(T *iThis, const es::Label &iLabel=es::Label())
Definition: ESProducer.h:115
std::vector< MagVolume6Faces * > barrelVolumes() const
std::auto_ptr< MagneticField > produce(const IdealMagneticFieldRecord &iRecord)
virtual void build(const DDCompactView &cpv)
tuple path
else: Piece not in the list, fine.
void get(HolderT &iHolder) const
int j
Definition: DBlmapReader.cc:9
std::vector< unsigned > expandList(const std::string &list)
std::vector< MagESector * > endcapSectors() const
Get endcap layers.
#define end
Definition: vmac.h:37
int k[5][pyjets_maxn]
#define debug
Definition: HDRShower.cc:19
T const * product() const
Definition: ESHandle.h:62
#define DEFINE_FWK_EVENTSETUP_MODULE(type)
Definition: ModuleFactory.h:60
void setScaling(const std::vector< int > &keys, const std::vector< double > &values)
std::vector< MagVolume6Faces * > endcapVolumes() const
tuple cout
Definition: gather_cfg.py:121
void setGridFiles(const std::auto_ptr< magneticfield::TableFileMap > gridFiles)
double split
Definition: MVATrainer.cc:139
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger list("!*","!HLTx*"if it matches 2 triggers or more) will accept the event if all the matching triggers are FAIL.It will reject the event if any of the triggers are PASS or EXCEPTION(this matches the behavior of"!*"before the partial wildcard feature was incorporated).Triggers which are in the READY state are completely ignored.(READY should never be returned since the trigger paths have been run
std::map< unsigned, std::pair< std::string, int > > TableFileMap