Jpp - the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Public Types | Public Member Functions | Public Attributes | List of all members
JSUPPORT::JWeightFileScannerSet< JFileScanner_t, JComparator_t > Struct Template Reference

Auxiliary class for organising Monte Carlo file scanners. More...

#include <JWeightFileScannerSet.hh>

Inheritance diagram for JSUPPORT::JWeightFileScannerSet< JFileScanner_t, JComparator_t >:
std::vector< JWeightFileScanner< JFileScanner_t > >

Public Types

typedef JWeightFileScanner
< JFileScanner_t > 
value_type
 
typedef std::vector
< value_type >::const_iterator 
const_iterator
 
typedef std::vector
< value_type >::iterator 
iterator
 
typedef std::vector
< value_type >
::const_reverse_iterator 
const_reverse_iterator
 
typedef std::vector
< value_type >
::reverse_iterator 
reverse_iterator
 

Public Member Functions

 JWeightFileScannerSet ()
 Default constructor. More...
 
 JWeightFileScannerSet (JMultipleFileScanner_t &input, JLimit &limit=JLimit())
 Constructor. More...
 
void put (JMultipleFileScanner_t &input)
 Put file. More...
 
void put (const std::string &input)
 Put file. More...
 
const JWeightFileScanner
< JFileScanner_t > & 
find (const JHead &head) const
 Find file scanner compatible with a given header. More...
 
size_t setFlux (const int type, const JFlux &function)
 Set flux function for all MC-files corresponding to a given PDG code. More...
 
size_t setFlux (const std::set< int > &types, const JFlux &function)
 Set flux function of all MC-files corresponding to a given set of PDG codes. More...
 
size_t setFlux (const JMultiParticleFlux &multiFlux)
 Set flux function of all MC-files corresponding to a given multi-particle flux. More...
 
void setLimit (const JLimit &limit)
 Set limit. More...
 

Public Attributes

JComparator_t compare
 Function object for comparison of headers. More...
 

Detailed Description

template<class JFileScanner_t = JMultipleFileScanner<Evt>, class JComparator_t = std::less<JHead>>
struct JSUPPORT::JWeightFileScannerSet< JFileScanner_t, JComparator_t >

Auxiliary class for organising Monte Carlo file scanners.

Definition at line 42 of file JWeightFileScannerSet.hh.

Member Typedef Documentation

template<class JFileScanner_t = JMultipleFileScanner<Evt>, class JComparator_t = std::less<JHead>>
typedef JWeightFileScanner<JFileScanner_t> JSUPPORT::JWeightFileScannerSet< JFileScanner_t, JComparator_t >::value_type

Definition at line 45 of file JWeightFileScannerSet.hh.

template<class JFileScanner_t = JMultipleFileScanner<Evt>, class JComparator_t = std::less<JHead>>
typedef std::vector<value_type>::const_iterator JSUPPORT::JWeightFileScannerSet< JFileScanner_t, JComparator_t >::const_iterator

Definition at line 47 of file JWeightFileScannerSet.hh.

template<class JFileScanner_t = JMultipleFileScanner<Evt>, class JComparator_t = std::less<JHead>>
typedef std::vector<value_type>::iterator JSUPPORT::JWeightFileScannerSet< JFileScanner_t, JComparator_t >::iterator

Definition at line 48 of file JWeightFileScannerSet.hh.

template<class JFileScanner_t = JMultipleFileScanner<Evt>, class JComparator_t = std::less<JHead>>
typedef std::vector<value_type>::const_reverse_iterator JSUPPORT::JWeightFileScannerSet< JFileScanner_t, JComparator_t >::const_reverse_iterator

Definition at line 49 of file JWeightFileScannerSet.hh.

template<class JFileScanner_t = JMultipleFileScanner<Evt>, class JComparator_t = std::less<JHead>>
typedef std::vector<value_type>::reverse_iterator JSUPPORT::JWeightFileScannerSet< JFileScanner_t, JComparator_t >::reverse_iterator

Definition at line 50 of file JWeightFileScannerSet.hh.

Constructor & Destructor Documentation

template<class JFileScanner_t = JMultipleFileScanner<Evt>, class JComparator_t = std::less<JHead>>
JSUPPORT::JWeightFileScannerSet< JFileScanner_t, JComparator_t >::JWeightFileScannerSet ( )
inline

Default constructor.

Definition at line 56 of file JWeightFileScannerSet.hh.

57  {}
template<class JFileScanner_t = JMultipleFileScanner<Evt>, class JComparator_t = std::less<JHead>>
JSUPPORT::JWeightFileScannerSet< JFileScanner_t, JComparator_t >::JWeightFileScannerSet ( JMultipleFileScanner_t input,
JLimit limit = JLimit() 
)
inline

Constructor.

Parameters
inputfile list
limitlimit

Definition at line 66 of file JWeightFileScannerSet.hh.

68  {
69  put (input);
70  setLimit(limit);
71  }
void setLimit(const JLimit &limit)
Set limit.
void put(JMultipleFileScanner_t &input)
Put file.

Member Function Documentation

template<class JFileScanner_t = JMultipleFileScanner<Evt>, class JComparator_t = std::less<JHead>>
void JSUPPORT::JWeightFileScannerSet< JFileScanner_t, JComparator_t >::put ( JMultipleFileScanner_t input)
inline

Put file.

Parameters
inputfile list

Definition at line 79 of file JWeightFileScannerSet.hh.

80  {
81  for (JMultipleFileScanner_t::const_iterator i = input.begin(); i != input.end(); ++i) {
82  this->put(*i);
83  }
84  }
void put(JMultipleFileScanner_t &input)
Put file.
template<class JFileScanner_t = JMultipleFileScanner<Evt>, class JComparator_t = std::less<JHead>>
void JSUPPORT::JWeightFileScannerSet< JFileScanner_t, JComparator_t >::put ( const std::string &  input)
inline

Put file.

Parameters
inputfile name

Definition at line 92 of file JWeightFileScannerSet.hh.

93  {
94  using namespace std;
95  using namespace JPP;
96 
97  const JHead head = getHeader(input);
98 
99  iterator i = lower_bound(this->begin(), this->end(), head,
101 
102  if (i == this->end() || !i->getHeader().match(head)) {
103  i = this->insert(i, value_type(getEventWeighter(head)));
104  }
105 
106  i->put(input);
107  }
JComparator< JResult_t T::*, JComparison::lt > make_comparator(JResult_t T::*member)
Helper method to create comparator between values of data member.
Definition: JComparator.hh:185
JWeightFileScanner< JFileScanner_t > value_type
const JHead & getHeader() const
Get header.
Definition: JHead.hh:1146
Head getHeader(const JMultipleFileScanner_t &file_list)
Get Monte Carlo header.
JEventWeighter getEventWeighter
Function object for mapping header to event weighter.
Monte Carlo run header.
Definition: JHead.hh:1113
JComparator_t compare
Function object for comparison of headers.
template<class JFileScanner_t = JMultipleFileScanner<Evt>, class JComparator_t = std::less<JHead>>
const JWeightFileScanner<JFileScanner_t>& JSUPPORT::JWeightFileScannerSet< JFileScanner_t, JComparator_t >::find ( const JHead head) const
inline

Find file scanner compatible with a given header.

Parameters
headheader
Returns
file scanner

Definition at line 116 of file JWeightFileScannerSet.hh.

117  {
118  for (const_iterator i = this->begin(); i != this->end(); ++i) {
119  if (i->match(head)) {
120  return *i;
121  }
122  }
123 
124  THROW(JValueOutOfRange, "JWeightFileScannerSet::get(): No corresponding scanner found for given header.");
125  }
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
Definition: JException.hh:670
std::vector< value_type >::const_iterator const_iterator
Exception for accessing a value in a collection that is outside of its range.
Definition: JException.hh:162
template<class JFileScanner_t = JMultipleFileScanner<Evt>, class JComparator_t = std::less<JHead>>
size_t JSUPPORT::JWeightFileScannerSet< JFileScanner_t, JComparator_t >::setFlux ( const int  type,
const JFlux function 
)
inline

Set flux function for all MC-files corresponding to a given PDG code.

Note that only the given flux function will only be assigned to those files
whose header exclusively lists the given PDG code as primary.

Parameters
typePDG code
functionflux function
Returns
number of modified event weighters

Definition at line 138 of file JWeightFileScannerSet.hh.

140  {
141  using namespace std;
142  using namespace JPP;
143 
144  size_t n = 0;
145 
146  for (iterator i = this->begin(); i != this->end(); ++i) {
147 
148  const JHead& header = i->getHeader();
149 
150  vector<JAANET::flux>::const_iterator j = find_if(header.flux.cbegin(),
151  header.flux.cend(),
152  make_predicate(&flux::type, type));
153 
154  if (header.primary.type == type || (header.flux.size() == 1 && j != header.flux.end())) {
155 
156  JFluxHelper* helper = dynamic_cast<JFluxHelper*>(i->get());
157 
158  if (helper != NULL) {
159 
160  helper->configure(function);
161  ++n;
162  }
163  }
164  }
165 
166  return n;
167  }
JPredicate< JResult_t T::*, JComparison::eq > make_predicate(JResult_t T::*member, const JResult_t value)
Helper method to create predicate for data member.
Definition: JPredicate.hh:128
std::vector< JAANET::flux > flux
Definition: JHead.hh:1419
void configure(const JFlux &function)
Flux configuration.
Definition: JFluxHelper.hh:51
const JHead & getHeader() const
Get header.
Definition: JHead.hh:1146
int type
Particle type.
Definition: JHead.hh:1083
Helper class for event weighing.
Definition: JFluxHelper.hh:23
JAANET::primary primary
Definition: JHead.hh:1418
Monte Carlo run header.
Definition: JHead.hh:1113
alias put_queue eval echo n
Definition: qlib.csh:19
int j
Definition: JPolint.hh:666
template<class JFileScanner_t = JMultipleFileScanner<Evt>, class JComparator_t = std::less<JHead>>
size_t JSUPPORT::JWeightFileScannerSet< JFileScanner_t, JComparator_t >::setFlux ( const std::set< int > &  types,
const JFlux function 
)
inline

Set flux function of all MC-files corresponding to a given set of PDG codes.

Note that the given flux function will only be assigned to those files
whose header lists < b>all< /b> of the specified PDG codes as primaries.

Parameters
typesset of PDG codes
functionflux function
Returns
number of modified event weighters

Definition at line 180 of file JWeightFileScannerSet.hh.

182  {
183  using namespace std;
184  using namespace JPP;
185 
186  size_t n = 0;
187 
188  for (iterator i = this->begin(); i != this->end(); ++i) {
189 
190  bool matching = (!types.empty());
191 
192  const JHead& header = i->getHeader();
193 
194  for (set<int>::const_iterator j = types.cbegin(); j != types.cend() && matching; ++j) {
195 
196  vector<JAANET::flux>::const_iterator flux = find_if(header.flux.cbegin(),
197  header.flux.cend(),
198  make_predicate(&flux::type, *j));
199 
200  matching = (flux != header.flux.cend());
201  }
202 
203  if (matching) {
204 
205  JFluxHelper* helper = dynamic_cast<JFluxHelper*>(i->get());
206 
207  if (helper != NULL) {
208 
209  helper->configure(function);
210  ++n;
211  }
212  }
213  }
214 
215  return n;
216  }
JPredicate< JResult_t T::*, JComparison::eq > make_predicate(JResult_t T::*member, const JResult_t value)
Helper method to create predicate for data member.
Definition: JPredicate.hh:128
std::vector< JAANET::flux > flux
Definition: JHead.hh:1419
void configure(const JFlux &function)
Flux configuration.
Definition: JFluxHelper.hh:51
const JHead & getHeader() const
Get header.
Definition: JHead.hh:1146
Neutrino flux.
Definition: JHead.hh:839
Helper class for event weighing.
Definition: JFluxHelper.hh:23
Monte Carlo run header.
Definition: JHead.hh:1113
alias put_queue eval echo n
Definition: qlib.csh:19
int j
Definition: JPolint.hh:666
template<class JFileScanner_t = JMultipleFileScanner<Evt>, class JComparator_t = std::less<JHead>>
size_t JSUPPORT::JWeightFileScannerSet< JFileScanner_t, JComparator_t >::setFlux ( const JMultiParticleFlux multiFlux)
inline

Set flux function of all MC-files corresponding to a given multi-particle flux.

Note that the given flux functions will only be assigned to those files
whose header lists < b>all< /b> of the PDG codes associated with the multi-particle flux as primaries.

Parameters
multiFluxmulti-particle flux object
Returns
number of modified event weighters

Definition at line 228 of file JWeightFileScannerSet.hh.

229  {
230  using namespace std;
231  using namespace JPP;
232 
233  size_t n = 0;
234 
235  for (iterator i = this->begin(); i != this->end(); ++i) {
236 
237  bool matching = (!multiFlux.empty());
238 
239  const JHead& header = i->getHeader();
240 
241  for (JMultiParticleFlux::const_iterator j = multiFlux.cbegin(); j != multiFlux.cend() && matching; ++j) {
242 
243  vector<JAANET::flux>::const_iterator flux = find_if(header.flux.cbegin(),
244  header.flux.cend(),
245  make_predicate(&flux::type, j->first));
246 
247  matching = (flux != header.flux.cend());
248  }
249 
250  if (matching) {
251 
252  JFluxHelper* helper = dynamic_cast<JFluxHelper*>(i->get());
253 
254  if (helper != NULL) {
255 
256  helper->configure(multiFlux);
257  ++n;
258  }
259  }
260  }
261 
262  return n;
263  }
JPredicate< JResult_t T::*, JComparison::eq > make_predicate(JResult_t T::*member, const JResult_t value)
Helper method to create predicate for data member.
Definition: JPredicate.hh:128
std::vector< JAANET::flux > flux
Definition: JHead.hh:1419
void configure(const JFlux &function)
Flux configuration.
Definition: JFluxHelper.hh:51
const JHead & getHeader() const
Get header.
Definition: JHead.hh:1146
Neutrino flux.
Definition: JHead.hh:839
Helper class for event weighing.
Definition: JFluxHelper.hh:23
Monte Carlo run header.
Definition: JHead.hh:1113
alias put_queue eval echo n
Definition: qlib.csh:19
int j
Definition: JPolint.hh:666
template<class JFileScanner_t = JMultipleFileScanner<Evt>, class JComparator_t = std::less<JHead>>
void JSUPPORT::JWeightFileScannerSet< JFileScanner_t, JComparator_t >::setLimit ( const JLimit limit)
inline

Set limit.

Parameters
limitlimit

Definition at line 271 of file JWeightFileScannerSet.hh.

272  {
273  for (iterator i = this->begin(); i != this->end(); ++i) {
274  i->setLimit(limit);
275  }
276  }

Member Data Documentation

template<class JFileScanner_t = JMultipleFileScanner<Evt>, class JComparator_t = std::less<JHead>>
JComparator_t JSUPPORT::JWeightFileScannerSet< JFileScanner_t, JComparator_t >::compare

Function object for comparison of headers.

Definition at line 282 of file JWeightFileScannerSet.hh.


The documentation for this struct was generated from the following file: