CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Types | Public Member Functions | Protected Member Functions | Protected Attributes
DDI::Specific Class Reference

#include <Specific.h>

Public Types

typedef std::vector
< DDPartSelection
partsel_type
 
typedef std::vector< std::string > selectors_type
 

Public Member Functions

std::pair< bool, DDExpandedViewnode () const
 gives the geometrical history of a fully specified PartSelector More...
 
bool nodes (DDNodes &) const
 CURRENTLY NOT IMPLEMENTED! More...
 
const std::vector
< DDPartSelection > & 
selection () const
 
 Specific (const std::vector< std::string > &selections, const DDsvalues_type &specs, bool doRegex=true)
 
 Specific (const std::vector< DDPartSelection > &selections, const DDsvalues_type &specs)
 
const DDsvalues_typespecifics () const
 
void stream (std::ostream &) const
 
void tokenize ()
 
void updateLogicalPart (std::vector< std::pair< DDLogicalPart, std::pair< DDPartSelection *, DDsvalues_type * > > > &) const
 
 ~Specific ()
 

Protected Member Functions

void addSelectionLevel (std::vector< DDLogicalPart > &lpv, int copyno, ddselection_type st, std::vector< DDPartSelection > &selv)
 
void createPartSelections (const std::string &selString)
 

Protected Attributes

bool doRegex_
 
partsel_type partSelections_
 
DDsvalues_type specifics_
 
bool valid_
 

Detailed Description

Definition at line 19 of file Specific.h.

Member Typedef Documentation

Definition at line 22 of file Specific.h.

typedef std::vector<std::string> DDI::Specific::selectors_type

Definition at line 23 of file Specific.h.

Constructor & Destructor Documentation

DDI::Specific::Specific ( const std::vector< std::string > &  selections,
const DDsvalues_type specs,
bool  doRegex = true 
)

Definition at line 12 of file Specific.cc.

References createPartSelections().

15  : specifics_(specs),
16  partSelections_(0),
17  valid_(false),
18  doRegex_(doRegex)
19 {
20  std::vector<std::string>::const_iterator it = selections.begin();
21  for(; it != selections.end(); ++it) {
23  }
24 }
bool valid_
Definition: Specific.h:56
DDsvalues_type specifics_
Definition: Specific.h:54
bool doRegex_
Definition: Specific.h:57
void createPartSelections(const std::string &selString)
Definition: Specific.cc:31
partsel_type partSelections_
Definition: Specific.h:55
DDI::Specific::Specific ( const std::vector< DDPartSelection > &  selections,
const DDsvalues_type specs 
)

Definition at line 26 of file Specific.cc.

28  : specifics_(specs), partSelections_(selections), valid_(false), doRegex_(false)
29 { }
bool valid_
Definition: Specific.h:56
DDsvalues_type specifics_
Definition: Specific.h:54
bool doRegex_
Definition: Specific.h:57
partsel_type partSelections_
Definition: Specific.h:55
DDI::Specific::~Specific ( )

Definition at line 207 of file Specific.cc.

208 {
209 // DDsvalues_type::iterator it = specifics_.begin();
210 // for (; it != specifics_.end(); ++it) {
211 // it->second.clear();
212 // }
213 }

Member Function Documentation

void DDI::Specific::addSelectionLevel ( std::vector< DDLogicalPart > &  lpv,
int  copyno,
ddselection_type  st,
std::vector< DDPartSelection > &  selv 
)
protected

Definition at line 66 of file Specific.cc.

References query::result.

Referenced by createPartSelections().

68 {
69  //static int count =0;
70  //++count;
71  //edm::LogInfo ("Specific") << "count=" << count << " " << flush;
72  if (!selv.size()) { // create one, no entry yet!
73  selv.push_back(DDPartSelection());
74  }
75  typedef std::vector<DDLogicalPart>::size_type lpv_sizetype;
76  typedef std::vector<DDPartSelection>::size_type ps_sizetype;
77  ps_sizetype ps_sz = selv.size();
78  lpv_sizetype lpv_sz = lpv.size();
79  //edm::LogInfo ("Specific") << "lpv_sz=" << lpv_sz << std::endl;
80  lpv_sizetype lpv_i = 0;
81  std::vector<DDPartSelection> result;
82  for (; lpv_i < lpv_sz; ++lpv_i) {
83  std::vector<DDPartSelection>::const_iterator ps_it = selv.begin();
84  for (; ps_it != selv.end(); ++ps_it) {
85  result.push_back(*ps_it);
86  }
87  }
88  //edm::LogInfo ("Specific") << "result-size=" << result.size() << std::endl;
89  //ps_sizetype ps_sz = result.size();
90  ps_sizetype ps_i = 0;
91  for(lpv_i=0; lpv_i < lpv_sz; ++lpv_i) {
92  for(ps_i = ps_sz*lpv_i; ps_i < ps_sz*(lpv_i+1); ++ps_i) {
93  result[ps_i].push_back(DDPartSelectionLevel(lpv[lpv_i],copyno,st));
94  }
95  }
96  selv = result;
97 }
uint16_t size_type
tuple result
Definition: query.py:137
void DDI::Specific::createPartSelections ( const std::string &  selString)
protected

Definition at line 31 of file Specific.cc.

References addSelectionLevel(), DDIsValid(), DDTokenize2(), doRegex_, runTheMatrix::msg, partSelections_, and cond::rpcobtemp::temp.

Referenced by Specific().

32 {
33 
34  std::vector<DDPartSelRegExpLevel> regv;
35  std::vector<DDPartSelection> temp;
36  DDTokenize2(selString,regv);
37 
38  if (!regv.size()) throw DDException("Could not evaluate the selection-std::string ->" + selString + "<-");
39  std::vector<DDPartSelRegExpLevel>::const_iterator it = regv.begin();
40  std::pair<bool,std::string> res;
41  for (; it != regv.end(); ++it) {
42  std::vector<DDLogicalPart> lpv;
43  res = DDIsValid(it->ns_,it->nm_,lpv,doRegex_);
44  if (!res.first) {
45  std::string msg("Could not process q-name of a DDLogicalPart, reason:\n"+res.second);
46  msg+="\nSpecPar selection is:\n" + selString + "\n";
47  //throw DDException("Could not process q-name of a DDLogicalPart, reason:\n"+res.second);
48  edm::LogError("Specific") << msg;
49  break; //EXIT for loop
50  }
51  //edm::LogInfo ("Specific") << "call addSelectionLevel" << std::endl;
52  addSelectionLevel(lpv,it->copyno_,it->selectionType_,temp);
53  }
54  if ( res.first ) { // i.e. it wasn't "thrown" out of the loop
55  std::vector<DDPartSelection>::const_iterator iit = temp.begin();
56  partSelections_.reserve(temp.size() + partSelections_.size());
57  for (; iit != temp.end(); ++iit) {
58  partSelections_.push_back(*iit);
59  //edm::LogInfo ("Specific") << *iit << std::endl;
60  }
61  }
62 }
void addSelectionLevel(std::vector< DDLogicalPart > &lpv, int copyno, ddselection_type st, std::vector< DDPartSelection > &selv)
Definition: Specific.cc:66
An exception for DDD errors.
Definition: DDException.h:23
bool doRegex_
Definition: Specific.h:57
partsel_type partSelections_
Definition: Specific.h:55
void DDTokenize2(const std::string &selectionString, std::vector< DDPartSelRegExpLevel > &result)
std::pair< bool, std::string > DDIsValid(const std::string &ns, const std::string &name, std::vector< DDLogicalPart > &result, bool doRegex=true)
std::pair< bool, DDExpandedView > DDI::Specific::node ( ) const

gives the geometrical history of a fully specified PartSelector

node() will only work, if

  • there is only one PartSelection std::string
  • the PartSelection std::string specifies exactly one full path concatenating always direct children including their copy-number and will return (true,const DDGeoHistory&) if the std::string matches an expanded-part in the ExpandedView, else it will return (false, xxx), whereas xxx is a history which is not valid.

Definition at line 162 of file Specific.cc.

References trackerHits::c, DDExpandedView::copyno(), ddanyposp, ddchildposp, ExpressReco_HICollisions_FallBack::e, DDExpandedView::firstChild(), DDExpandedView::logicalPart(), DDExpandedView::nextSibling(), partSelections_, and query::result.

163 {
165  DDExpandedView e(c);
166 
167  if (partSelections_.size() != 1) {
168  edm::LogError("Specific") << " >> more or less than one part-selector, currently NOT SUPPORTED! <<" << std::endl;
169  return std::make_pair(false,e);
170  }
171  const DDPartSelection & ps = partSelections_[0];
172 
173  DDPartSelection::const_iterator it = ps.begin();
174  DDPartSelection::const_iterator ed = ps.end();
175  if ( (it != ed) && ( it->selectionType_ != ddanyposp) ) {
176  edm::LogError("Specific") << " >> part-selector must start with //Name[no] ! << " << std::endl;
177  return std::make_pair(false,e);
178  }
179  ++it;
180  for (; it != ps.end(); ++it) {
181  if ( it->selectionType_ != ddchildposp ) {
182  edm::LogError("Specific") << " >> part-selector must be a concatenation of direct children\n"
183  << " including their copy-number only, CURRENT LIMITATION! <<" << std::endl;
184  return std::make_pair(false,e);
185  }
186  }
187 
188  it = ps.begin();
189  bool result = true;
190  for (; it != ed; ++it) {
191  while(result) {
192  if( (it->copyno_ == e.copyno()) && (it->lp_ == e.logicalPart())) {
193  break;
194  }
195  else {
196  result = e.nextSibling();
197  }
198  }
199  if ((ed-it)>1) {
200  result = e.firstChild();
201  }
202  }
203  return std::make_pair(result,e);
204 }
type of data representation of DDCompactView
Definition: DDCompactView.h:81
tuple result
Definition: query.py:137
partsel_type partSelections_
Definition: Specific.h:55
Provides an exploded view of the detector (tree-view)
bool DDI::Specific::nodes ( DDNodes ) const
inline

CURRENTLY NOT IMPLEMENTED!

Definition at line 43 of file Specific.h.

43 { return false; }
const std::vector< DDPartSelection > & DDI::Specific::selection ( ) const
const DDsvalues_type& DDI::Specific::specifics ( ) const
inline

Definition at line 40 of file Specific.h.

References specifics_.

40 { return specifics_; }
DDsvalues_type specifics_
Definition: Specific.h:54
void DDI::Specific::stream ( std::ostream &  os) const

Definition at line 105 of file Specific.cc.

References i, DDValue::isEvaluated(), DDValue::name(), partSelections_, asciidump::s, DDValue::size(), specifics_, DDValue::strings(), and v.

106 {
107  // os << " no output available yet, sorry. ";
108  os << " Size: " << specifics_.size() << std::endl;
109  os << "\tSelections:" << std::endl;
110  partsel_type::const_iterator pit(partSelections_.begin()), pend(partSelections_.end());
111  for (;pit!=pend;++pit) {
112  os << *pit << std::endl;
113  }
114 
115  DDsvalues_type::const_iterator vit(specifics_.begin()), ved(specifics_.end());
116  for (;vit!=ved;++vit) {
117  const DDValue & v = vit->second;
118  os << "\tParameter name= \"" << v.name() << "\" " << std::endl;
119  os << "\t\t Value pairs: " << std::endl;
120  size_t s=v.size();
121  size_t i=0;
122  if ( v.isEvaluated() ) {
123  for (; i<s; ++i) {
124  os << "\t\t\t\"" << v[i].first << "\"" << ", " << v[i].second << std::endl;
125  }
126  } else { // v is not evaluated
127  const std::vector<std::string>& vs = v.strings();
128  for (; i<s; ++i) {
129  os << "\t\t\t\"" << vs[i] << "\"" << ", not evaluated" << std::endl;
130  }
131  }
132  }
133 }
int i
Definition: DBlmapReader.cc:9
DDsvalues_type specifics_
Definition: Specific.h:54
bool isEvaluated() const
true, if values are numerical evaluated; else false.
Definition: DDValue.cc:207
const std::vector< std::string > & strings() const
a reference to the std::string-valued values stored in the given instance of DDValue ...
Definition: DDValue.h:76
partsel_type partSelections_
Definition: Specific.h:55
unsigned int size() const
the size of the stored value-pairs (std::string,double)
Definition: DDValue.h:83
string s
Definition: asciidump.py:422
const std::string & name() const
the name of the DDValue
Definition: DDValue.h:69
mathSSE::Vec4< T > v
void DDI::Specific::tokenize ( )
void DDI::Specific::updateLogicalPart ( std::vector< std::pair< DDLogicalPart, std::pair< DDPartSelection *, DDsvalues_type * > > > &  result) const

Definition at line 135 of file Specific.cc.

References partSelections_, query::result, and specifics_.

136 {
137  if (partSelections_.size()) {
138  partsel_type::const_iterator it = partSelections_.begin();
139  DDsvalues_type* sv = const_cast<DDsvalues_type*>(&specifics_);
140  for (; it != partSelections_.end(); ++it) {
141  DDLogicalPart logp = it->back().lp_;
142  /*if (!logp.isDefined().second) {
143  throw DDException("Specific::updateLogicalPart(..): LogicalPart not defined, name=" + std::string(logp.ddname()));
144  }*/
145  DDPartSelection * ps = const_cast<DDPartSelection*>(&(*it));
146  assert(ps);
147  assert(sv);
148  std::pair<DDPartSelection*,DDsvalues_type*> pssv(ps,sv);
149  result.push_back(std::make_pair(logp,pssv));
150  }
151  }
152 }
DDsvalues_type specifics_
Definition: Specific.h:54
tuple result
Definition: query.py:137
std::vector< std::pair< unsigned int, DDValue > > DDsvalues_type
std::maps an index to a DDValue. The index corresponds to the index assigned to the name of the std::...
Definition: DDsvalues.h:19
A DDLogicalPart aggregates information concerning material, solid and sensitveness ...
Definition: DDLogicalPart.h:95
partsel_type partSelections_
Definition: Specific.h:55

Member Data Documentation

bool DDI::Specific::doRegex_
protected

Definition at line 57 of file Specific.h.

Referenced by createPartSelections().

partsel_type DDI::Specific::partSelections_
protected

Definition at line 55 of file Specific.h.

Referenced by createPartSelections(), node(), selection(), stream(), and updateLogicalPart().

DDsvalues_type DDI::Specific::specifics_
protected

Definition at line 54 of file Specific.h.

Referenced by specifics(), stream(), and updateLogicalPart().

bool DDI::Specific::valid_
protected

Definition at line 56 of file Specific.h.