Marlin  1.17.1
 All Classes Namespaces Functions Variables Enumerations Friends Pages
ProcessorParameter.h
1 #ifndef ProcessorParameter_h
2 #define ProcessorParameter_h 1
3 
4 #include "lcio.h"
5 
6 #include <iostream>
7 #include <string>
8 #include <sstream>
9 #include "LCIOSTLTypes.h"
10 #include "StringParameters.h"
11 #include <typeinfo>
12 
13 // typedef std::map< std::string , std::vector< std::string > > ParametersMap ;
14 
15 
16 using namespace lcio ;
17 
18 namespace marlin{
19 
28 
29  friend std::ostream& operator<< ( std::ostream& , ProcessorParameter& ) ;
30 
31  public:
32 
34  _description(""), _name(""),
35  _setSize(0), _optional(false), _valueSet(false) {}
36 
37  virtual ~ProcessorParameter() {}
38 
39  virtual const std::string& name() { return _name ; }
40  virtual const std::string& description() { return _description ; }
41  virtual int setSize() { return _setSize ; } ;
42  virtual bool isOptional() { return _optional ; }
43  virtual bool valueSet() { return _valueSet ; }
44 
45  virtual const std::string type()=0 ;
46  virtual const std::string value()=0 ;
47  virtual const std::string defaultValue()=0 ;
48 
49 
50 
51  virtual void setValue( StringParameters* params )=0 ;
52 
53  protected:
54 
55  std::string _description ;
56  std::string _name ;
57  int _setSize ;
58  bool _optional ;
59  bool _valueSet ;
60  };
61 
62 
63  std::ostream& operator<< ( std::ostream& s, ProcessorParameter& p ) ;
64 
65 
68 // template< class T>
69 // std::ostream& operator<< ( std::ostream& s, const std::vector<T>& v ) {
70 
71 // typename std::vector<T>::const_iterator it ;
72 
73 // for( it = v.begin() ; it != v.end() ; it++) {
74 // s << (*it) << " " ;
75 // }
76 // return s ;
77 // }
78 
79  void toStream( std::ostream& s, int i , int N) ;
80  void toStream( std::ostream& s, float f , int N) ;
81  void toStream( std::ostream& s, double d , int N) ;
82  void toStream( std::ostream& s, const std::string& str , int N) ;
83  void toStream( std::ostream& s, bool b , int N) ;
84 
85  template< class T>
86  std::ostream& toStream( std::ostream& s, const std::vector<T>& v , int N) {
87 
88  typename std::vector<T>::const_iterator it ;
89 
90  unsigned count = 0 ;
91  for( it = v.begin() ; it != v.end() ; it++) {
92 
93  if( count && N && ! (count % N) ) // start a new line after N parameters
94  s << "\n\t\t" ;
95 
96  s << (*it) << " " ;
97  count ++ ;
98 
99 
100  }
101  return s ;
102  }
103 
104 
105  template< class T>
107 
108  template < class T1>
109  void setProcessorParameter( ProcessorParameter_t<T1>* procParam , StringParameters* params );
110 
111 
112 
115  template< class T>
117 
118  friend void setProcessorParameter<>(ProcessorParameter_t<T>* , StringParameters* ) ;
119 
120  public:
121 
122  ProcessorParameter_t( const std::string& parameterName,
123  const std::string& parameterDescription,
124  T& parameter ,
125  const T& parameterDefaultValue,
126  bool optional,
127  int parameterSetSize=0) :
128 
129  _parameter( parameter ),
130  _defaultValue( parameterDefaultValue )
131  {
132  _name = parameterName ;
133  _parameter = parameterDefaultValue ;
134  _description = parameterDescription ;
135  _optional = optional ;
136  _valueSet = false ;
137  _setSize = parameterSetSize ;
138  }
139 
140  virtual ~ProcessorParameter_t() {}
141 
142 
143 
144  // virtual const std::string name() { return _name ; }
145 
146  virtual const std::string type() {
147 
148  // return typeid( _parameter ).name() ; }
149 
150  // make this human readable
151  if ( typeid( _parameter ) == typeid( IntVec )) return "IntVec" ;
152  else if( typeid( _parameter ) == typeid( FloatVec )) return "FloatVec" ;
153  else if( typeid( _parameter ) == typeid( StringVec )) return "StringVec" ;
154  else if( typeid( _parameter ) == typeid( int )) return "int" ;
155  else if( typeid( _parameter ) == typeid( float )) return "float" ;
156  else if( typeid( _parameter ) == typeid( double )) return "double" ;
157  else if( typeid( _parameter ) == typeid(std::string) ) return "string" ;
158  else if( typeid( _parameter ) == typeid( bool ) ) return "bool";
159 
160  else
161  return typeid( _parameter ).name() ;
162  }
163 
164  virtual const std::string defaultValue() {
165 
166  std::stringstream def ;
167 
168  //def << _defaultValue ;
169  toStream( def, _parameter , setSize() ) ;
170 
171  return def.str() ;
172  }
173 
174  virtual const std::string value() {
175 
176  std::stringstream def ;
177 
178  // def << _parameter ;
179  toStream( def, _parameter , setSize() ) ;
180 
181  return def.str() ;
182  }
183 
184  void setValue( StringParameters* params ) {
185 
186  setProcessorParameter< T >( this , params ) ;
187 
188  }
189 
190  protected:
191  T& _parameter ;
192  T _defaultValue ;
193 
194  };
195 
196 } // end namespace marlin
197 #endif
198 
199 
200 //#include "ProcessorParameter.icc"
Templated implementation of ProcessorParameter - automatically created by Processor::registerProcesso...
Definition: ProcessorParameter.h:106
Class that holds a steering variable for a marlin processor - automatically created by Processor::reg...
Definition: ProcessorParameter.h:27
void toStream(std::ostream &s, int i, int N)
Helper function for printing parameter vectors.
Definition: ProcessorParameter.cc:17
Simple parameters class for Marlin.
Definition: StringParameters.h:34