Public Member Functions | Private Member Functions | Private Attributes | List of all members
reco::shower::ShowerProducedPtrsHolder Class Reference

#include <ShowerProducedPtrsHolder.hh>

Public Member Functions

template<class T >
int SetShowerUniqueProduerPtr (type< T >, const std::string &Name, const std::string &Instance="")
 
template<class T >
int SetShowerUniqueProduerPtr (type< std::vector< T > >, const std::string &Name, const std::string &Instance="")
 
bool CheckUniqueProduerPtr (const std::string &Name) const
 
void reset ()
 
void AddDataProducts (const reco::shower::ShowerElementHolder &selement_holder)
 
void MoveAllToEvent (art::Event &evt)
 
bool CheckAllProducedElements (reco::shower::ShowerElementHolder &selement_holder) const
 
template<class T >
T & GetPtr (const std::string &Name)
 
template<class T , class A , class B >
void AddSingle (A &a, B &b, const std::string &Name)
 
void SetPtrMakers (art::Event &evt)
 
template<class T >
art::PtrMaker< T > & GetPtrMaker (const std::string &Name)
 
template<class T >
art::Ptr< T > GetArtPtr (const std::string &Name, const int &iter) const
 
void ResetPtrMakers ()
 
int GetVectorPtrSize (const std::string &Name) const
 
void PrintPtr (const std::string &Name) const
 
void PrintPtrs () const
 

Private Member Functions

template<class T >
bool CheckForMultipleTypes (type< T >, const std::string &Name, const std::string &Instance) const
 
template<class T >
bool CheckForMultipleTypes (type< std::vector< T > >, const std::string &Name, const std::string &Instance) const
 

Private Attributes

std::map< std::string, std::unique_ptr< reco::shower::ShowerUniqueProduerPtrBase > > showerproductPtrs
 
std::map< std::string, std::unique_ptr< reco::shower::ShowerUniqueProduerPtrBase > > showerassnPtrs
 
std::map< std::string, std::unique_ptr< reco::shower::ShowerPtrMakerBase > > showerPtrMakers
 

Detailed Description

Definition at line 290 of file ShowerProducedPtrsHolder.hh.

Member Function Documentation

void reco::shower::ShowerProducedPtrsHolder::AddDataProducts ( const reco::shower::ShowerElementHolder selement_holder)
inline

Definition at line 361 of file ShowerProducedPtrsHolder.hh.

361  {
362  for(auto const& showerproductPtr: showerproductPtrs){
363  (showerproductPtr.second)->AddDataProduct(selement_holder, showerproductPtr.first);
364  }
365  }
std::map< std::string, std::unique_ptr< reco::shower::ShowerUniqueProduerPtrBase > > showerproductPtrs
template<class T , class A , class B >
void reco::shower::ShowerProducedPtrsHolder::AddSingle ( A a,
B b,
const std::string Name 
)
inline

Definition at line 408 of file ShowerProducedPtrsHolder.hh.

408  {
409  auto const showerassnPtrsIt = showerassnPtrs.find(Name);
410  if(showerassnPtrsIt == showerassnPtrs.end()){
411  throw cet::exception("ShowerProducedPtrsHolder") << "Trying to get the association: " << Name << "Element does not exist" << std::endl;
412  }
413  if(!is_assn<T>::value){
414  throw cet::exception("ShowerProducedPtrsHolder") << "Element type is not an assoication please only use this for assocations" << std::endl;
415  }
416  reco::shower::ShowerUniqueAssnPtr<T>* assnptr = dynamic_cast<reco::shower::ShowerUniqueAssnPtr<T> *>(showerassnPtrsIt->second.get());
417  if(assnptr == nullptr){
418  throw cet::exception("ShowerProducedPtrsHolder") << "Failed to cast back. Maybe you got the type wrong or you are accidently accessing a differently named product" << std::endl;
419  }
420 
421  T* assn = dynamic_cast<T*>(assnptr->GetPtr().get());
422  if(assn == nullptr){
423  throw cet::exception("ShowerProducedPtrsHolder") << "Something went wrong trying to cast tothe assn. Maybe the name: " << Name << " exists but its not an assn" << std::endl;
424  }
425 
426  assn->addSingle(a,b);
427  return;
428  }
ChannelGroupService::Name Name
std::map< std::string, std::unique_ptr< reco::shower::ShowerUniqueProduerPtrBase > > showerassnPtrs
cet::coded_exception< error, detail::translate > exception
Definition: exception.h:33
QTextStream & endl(QTextStream &s)
bool reco::shower::ShowerProducedPtrsHolder::CheckAllProducedElements ( reco::shower::ShowerElementHolder selement_holder) const
inline

Definition at line 377 of file ShowerProducedPtrsHolder.hh.

377  {
378  bool checked = true;
379  for(auto const& showerproductPtr: showerproductPtrs){
380  if(showerproductPtr.first == "shower"){continue;}
381  checked *= selement_holder.CheckElement(showerproductPtr.first);
382  }
383  return checked;
384  }
std::map< std::string, std::unique_ptr< reco::shower::ShowerUniqueProduerPtrBase > > showerproductPtrs
bool CheckElement(const std::string &Name) const
template<class T >
bool reco::shower::ShowerProducedPtrsHolder::CheckForMultipleTypes ( type< T >  ,
const std::string Name,
const std::string Instance 
) const
inlineprivate

Definition at line 585 of file ShowerProducedPtrsHolder.hh.

585  {
586 
587  //Check the a product of the same does not exist without a different instance name
588  for(auto const& assn: showerassnPtrs){
589  reco::shower::ShowerUniqueAssnPtr<T>* assnptr = dynamic_cast<reco::shower::ShowerUniqueAssnPtr<T> *>(assn.second.get());
590  if(assnptr != nullptr){
591  if(assnptr->GetInstanceName() == Instance){return false;}
592  }
593  }
594  return true;
595  }
std::map< std::string, std::unique_ptr< reco::shower::ShowerUniqueProduerPtrBase > > showerassnPtrs
std::string GetInstanceName() const override
template<class T >
bool reco::shower::ShowerProducedPtrsHolder::CheckForMultipleTypes ( type< std::vector< T > >  ,
const std::string Name,
const std::string Instance 
) const
inlineprivate

Definition at line 599 of file ShowerProducedPtrsHolder.hh.

599  {
600 
601  //Check the a product of the same does not exist without a different instance name
602  for(auto const& product: showerproductPtrs){
604  if(prod != nullptr){
605  if(prod->GetInstanceName() == Instance){return false;}
606  }
607  }
608  return true;
609  }
std::map< std::string, std::unique_ptr< reco::shower::ShowerUniqueProduerPtrBase > > showerproductPtrs
bool reco::shower::ShowerProducedPtrsHolder::CheckUniqueProduerPtr ( const std::string Name) const
inline

Definition at line 338 of file ShowerProducedPtrsHolder.hh.

338  {
339  if(showerproductPtrs.find(Name) != showerproductPtrs.end()){
340  return true;
341  }
342  if(showerassnPtrs.find(Name) != showerassnPtrs.end()){
343  return true;
344  }
345  return false;
346  }
ChannelGroupService::Name Name
std::map< std::string, std::unique_ptr< reco::shower::ShowerUniqueProduerPtrBase > > showerproductPtrs
std::map< std::string, std::unique_ptr< reco::shower::ShowerUniqueProduerPtrBase > > showerassnPtrs
template<class T >
art::Ptr<T> reco::shower::ShowerProducedPtrsHolder::GetArtPtr ( const std::string Name,
const int &  iter 
) const
inline

Definition at line 458 of file ShowerProducedPtrsHolder.hh.

458  {
459  auto const showerPtrMakersIt = showerPtrMakers.find(Name);
460  if(showerPtrMakersIt == showerPtrMakers.end()){
461  throw cet::exception("ShowerProducedPtrsHolder") << "PtrMaker does not exist for " << Name << " Did you initialise this? " << std::endl;
462  }
463  else{
464  if(!showerPtrMakersIt->second->CheckPtrMaker()){
465  throw cet::exception("ShowerProducedPtrsHolder") << "PtrMaker is not set. This is an issue for the devlopment team me. Contact Dom Barker" << std::endl;
466  }
467  reco::shower::ShowerPtrMaker<T>* ptrmaker = dynamic_cast<reco::shower::ShowerPtrMaker<T> *>(showerPtrMakersIt->second.get());
468  if(ptrmaker == nullptr){
469  throw cet::exception("ShowerProducedPtrsHolder") << "Failed to cast back. Maybe you got the type wrong or you are accidently accessing a differently named product" << std::endl;
470  }
471  return ptrmaker->GetArtPtr(iter);
472  }
473  }
art::Ptr< T > GetArtPtr(int iter) const
ChannelGroupService::Name Name
std::map< std::string, std::unique_ptr< reco::shower::ShowerPtrMakerBase > > showerPtrMakers
cet::coded_exception< error, detail::translate > exception
Definition: exception.h:33
QTextStream & endl(QTextStream &s)
template<class T >
T& reco::shower::ShowerProducedPtrsHolder::GetPtr ( const std::string Name)
inline

Definition at line 389 of file ShowerProducedPtrsHolder.hh.

389  {
390  auto const showerproductPtrsIt = showerproductPtrs.find(Name);
391  if(showerproductPtrsIt != showerproductPtrs.end()){
392  reco::shower::ShowerUniqueProductPtr<T>* prod = dynamic_cast<reco::shower::ShowerUniqueProductPtr<T> *>(showerproductPtrsIt->second.get());
393  return prod->GetPtr();
394  }
395 
396  auto const showerassnPtrsIt = showerassnPtrs.find(Name);
397  if(showerassnPtrsIt != showerassnPtrs.end()){
398  reco::shower::ShowerUniqueAssnPtr<T>* assn = dynamic_cast<reco::shower::ShowerUniqueAssnPtr<T> *>(showerassnPtrsIt->second.get());
399  return assn->GetPtr();
400  }
401 
402  throw cet::exception("ShowerProducedPtrsHolder") << "Trying to get Ptr for: " << Name << " but Element does not exist" << std::endl;
403  }
ChannelGroupService::Name Name
std::map< std::string, std::unique_ptr< reco::shower::ShowerUniqueProduerPtrBase > > showerproductPtrs
std::map< std::string, std::unique_ptr< reco::shower::ShowerUniqueProduerPtrBase > > showerassnPtrs
cet::coded_exception< error, detail::translate > exception
Definition: exception.h:33
QTextStream & endl(QTextStream &s)
template<class T >
art::PtrMaker<T>& reco::shower::ShowerProducedPtrsHolder::GetPtrMaker ( const std::string Name)
inline

Definition at line 442 of file ShowerProducedPtrsHolder.hh.

442  {
443  auto const showerPtrMakersIt = showerPtrMakers.find(Name);
444  if(showerPtrMakersIt == showerPtrMakers.end()){
445  throw cet::exception("ShowerProducedPtrsHolder") << "PtrMaker does not exist" << std::endl;
446  }
447  else{
448  if(!showerPtrMakersIt->second->CheckPtrMaker()){
449  throw cet::exception("ShowerProducedPtrsHolder") << "PtrMaker is not set" << std::endl;
450  }
452  return ptrmaker->GetPtrMaker();
453  }
454  }
ChannelGroupService::Name Name
std::map< std::string, std::unique_ptr< reco::shower::ShowerUniqueProduerPtrBase > > showerassnPtrs
std::map< std::string, std::unique_ptr< reco::shower::ShowerPtrMakerBase > > showerPtrMakers
cet::coded_exception< error, detail::translate > exception
Definition: exception.h:33
QTextStream & endl(QTextStream &s)
int reco::shower::ShowerProducedPtrsHolder::GetVectorPtrSize ( const std::string Name) const
inline

Definition at line 483 of file ShowerProducedPtrsHolder.hh.

483  {
484  auto const showerproductPtrsIt = showerproductPtrs.find(Name);
485  if(showerproductPtrsIt != showerproductPtrs.end()){
486  return showerproductPtrsIt->second->GetVectorPtrSize();
487  }
488  throw cet::exception("ShowerProducedPtrsHolder") << "Product: " << Name << " has not been set in the producers map" << std::endl;
489  }
ChannelGroupService::Name Name
std::map< std::string, std::unique_ptr< reco::shower::ShowerUniqueProduerPtrBase > > showerproductPtrs
cet::coded_exception< error, detail::translate > exception
Definition: exception.h:33
QTextStream & endl(QTextStream &s)
void reco::shower::ShowerProducedPtrsHolder::MoveAllToEvent ( art::Event evt)
inline

Definition at line 368 of file ShowerProducedPtrsHolder.hh.

368  {
369  for(auto const& showerproductPtr: showerproductPtrs){
370  (showerproductPtr.second)->MoveToEvent(evt);
371  }
372  for(auto const& showerassnPtr: showerassnPtrs){
373  (showerassnPtr.second)->MoveToEvent(evt);
374  }
375  }
std::map< std::string, std::unique_ptr< reco::shower::ShowerUniqueProduerPtrBase > > showerproductPtrs
std::map< std::string, std::unique_ptr< reco::shower::ShowerUniqueProduerPtrBase > > showerassnPtrs
void reco::shower::ShowerProducedPtrsHolder::PrintPtr ( const std::string Name) const
inline

Definition at line 492 of file ShowerProducedPtrsHolder.hh.

492  {
493  auto const showerproductPtrsIt = showerproductPtrs.find(Name);
494  if(showerproductPtrsIt != showerproductPtrs.end()){
495  const std::string Type = showerproductPtrsIt->second->GetType();
496  const std::string InstanceName = showerproductPtrsIt->second->GetInstanceName();
497  std::cout << "Element Name: " << Name << " Instance Name: " << InstanceName << " Type: " << Type << std::endl;
498  return;
499  }
500  auto const showerassnPtrsIt = showerassnPtrs.find(Name);
501  if(showerassnPtrsIt != showerassnPtrs.end()){
502  const std::string Type = showerassnPtrsIt->second->GetType();
503  const std::string InstanceName = showerassnPtrsIt->second->GetInstanceName();
504  std::cout << "Element Name: " << Name << " Instance Name: " << InstanceName << " Type: " << Type << std::endl;
505  return;
506  }
507  mf::LogError("ShowerProducedPtrsHolder") << "Trying to print Element: " << Name << ". This element does not exist in the element holder" << std::endl;
508  return;
509  }
int Type
Definition: 018_def.c:12
std::string string
Definition: nybbler.cc:12
ChannelGroupService::Name Name
MaybeLogger_< ELseverityLevel::ELsev_error, false > LogError
std::map< std::string, std::unique_ptr< reco::shower::ShowerUniqueProduerPtrBase > > showerproductPtrs
std::map< std::string, std::unique_ptr< reco::shower::ShowerUniqueProduerPtrBase > > showerassnPtrs
QTextStream & endl(QTextStream &s)
void reco::shower::ShowerProducedPtrsHolder::PrintPtrs ( ) const
inline

Definition at line 513 of file ShowerProducedPtrsHolder.hh.

513  {
514 
515  unsigned int maxname = 0;
516  for(auto const& showerprodPtr: showerproductPtrs){
517  if(showerprodPtr.first.size() > maxname){
518  maxname = showerprodPtr.first.size();
519  }
520  }
521  for(auto const& showerassnPtr: showerassnPtrs){
522  if(showerassnPtr.first.size() > maxname){
523  maxname = showerassnPtr.first.size();
524  }
525  }
526 
527  std::map<std::string,std::pair<std::string,std::string> > Type_showerprodPtrs;
528  std::map<std::string,std::pair<std::string,std::string> > Type_showerassnPtrs;
529  for(auto const& showerprodPtr: showerproductPtrs){
530  const std::string Type = (showerprodPtr.second)->GetType();
531  const std::string InstanceName = (showerprodPtr.second)->GetInstanceName();
532  Type_showerprodPtrs[showerprodPtr.first] = std::make_pair(InstanceName,Type);
533  }
534  for(auto const& showerassnPtr: showerassnPtrs){
535  const std::string Type = (showerassnPtr.second)->GetType();
536  const std::string InstanceName = (showerassnPtr.second)->GetInstanceName();
537  Type_showerassnPtrs[showerassnPtr.first] = std::make_pair(InstanceName,Type);
538  }
539 
540  unsigned int maxtype = 0;
541  unsigned int maxinstname = 0;
542  for(auto const& Type_showerprodPtr: Type_showerprodPtrs){
543  if(Type_showerprodPtr.second.second.size() > maxtype){
544  maxtype = Type_showerprodPtr.second.second.size();
545  }
546  if(Type_showerprodPtr.second.first.size() > maxinstname){
547  maxinstname = Type_showerprodPtr.second.first.size();
548  }
549  }
550  for(auto const& Type_showerassnPtr: Type_showerassnPtrs){
551  if(Type_showerassnPtr.second.second.size() > maxtype){
552  maxtype = Type_showerassnPtr.second.second.size();
553  }
554  if(Type_showerassnPtr.second.first.size() > maxinstname){
555  maxinstname = Type_showerassnPtr.second.first.size();
556  }
557  }
558 
559  unsigned int n = maxname + maxtype + maxinstname + 51;
560  std::cout << std::left << std::setfill('*') << std::setw(n-1) << "**" <<std::endl;
561  std::cout << "Unique Ptrs that are added to the event" << std::endl;
562  std::cout << std::left << std::setfill('*') << std::setw(n-1) << "**" <<std::endl;
563  for(auto const& Type_showerprodPtr: Type_showerprodPtrs){
564  std::cout << std::left << std::setfill(' ') << std::setw(21) << "* Data Product Name: " << std::setw(maxname) << Type_showerprodPtr.first;
565  std::cout << std::left << std::setfill(' ') << " * Instance Name: " << std::setw(maxinstname) << Type_showerprodPtr.second.first;
566  std::cout << std::left << std::setfill(' ') << " * Type: " << std::setw(maxtype) << Type_showerprodPtr.second.second << " *" << std::endl;
567  }
568  for(auto const& Type_showerassnPtr: Type_showerassnPtrs){
569  std::cout << std::left << std::setfill(' ') << std::setw(maxname) << std::setw(21) << "* Association Name: " << std::setw(maxname) << Type_showerassnPtr.first;
570  std::cout << std::left << std::setfill(' ') << " * Instance Name: " << std::setw(maxinstname) << Type_showerassnPtr.second.first;
571  std::cout << std::left << std::setfill(' ') << " * Type: " << std::setw(maxtype) << Type_showerassnPtr.second.second<< " *" << std::endl;
572  }
573  std::cout << std::left << std::setfill('*') << std::setw(n-1) << "**" <<std::endl;
574  std::cout << std::setfill(' ');
575  std::cout << std::setw(0);
576  return;
577  }
int Type
Definition: 018_def.c:12
std::string string
Definition: nybbler.cc:12
std::map< std::string, std::unique_ptr< reco::shower::ShowerUniqueProduerPtrBase > > showerproductPtrs
std::map< std::string, std::unique_ptr< reco::shower::ShowerUniqueProduerPtrBase > > showerassnPtrs
std::void_t< T > n
Q_EXPORT QTSManip setw(int w)
Definition: qtextstream.h:331
Q_EXPORT QTSManip setfill(int f)
Definition: qtextstream.h:337
QTextStream & endl(QTextStream &s)
void reco::shower::ShowerProducedPtrsHolder::reset ( )
inline

Definition at line 349 of file ShowerProducedPtrsHolder.hh.

349  {
350  for(auto const& showerptr: showerproductPtrs){
351  (showerptr.second)->reset();
352  }
353  for(auto const& showerptr: showerassnPtrs){
354  (showerptr.second)->reset();
355  }
356  }
std::map< std::string, std::unique_ptr< reco::shower::ShowerUniqueProduerPtrBase > > showerproductPtrs
std::map< std::string, std::unique_ptr< reco::shower::ShowerUniqueProduerPtrBase > > showerassnPtrs
void reco::shower::ShowerProducedPtrsHolder::ResetPtrMakers ( )
inline

Definition at line 476 of file ShowerProducedPtrsHolder.hh.

476  {
477  for(auto const& showerPtrMaker: showerPtrMakers){
478  (showerPtrMaker.second)->Reset();
479  }
480  }
std::map< std::string, std::unique_ptr< reco::shower::ShowerPtrMakerBase > > showerPtrMakers
void reco::shower::ShowerProducedPtrsHolder::SetPtrMakers ( art::Event evt)
inline

Definition at line 431 of file ShowerProducedPtrsHolder.hh.

431  {
432  for(auto const& showerPtrMaker: showerPtrMakers){
433  if(showerPtrMakers.find(showerPtrMaker.first) == showerPtrMakers.end()){
434  throw cet::exception("ShowerProducedPtrsHolder") << "PtrMaker was empty. This is concerning" << std::endl;
435  }
436  showerPtrMakers[showerPtrMaker.first]->SetPtrMaker(evt);
437  }
438  }
std::map< std::string, std::unique_ptr< reco::shower::ShowerPtrMakerBase > > showerPtrMakers
cet::coded_exception< error, detail::translate > exception
Definition: exception.h:33
QTextStream & endl(QTextStream &s)
template<class T >
int reco::shower::ShowerProducedPtrsHolder::SetShowerUniqueProduerPtr ( type< T >  ,
const std::string Name,
const std::string Instance = "" 
)
inline

Definition at line 296 of file ShowerProducedPtrsHolder.hh.

296  {
297 
298  //Add to the assns
299  if(showerassnPtrs.find(Name) != showerassnPtrs.end()){
300  mf::LogWarning("ShowerProducedPtrsHolder") << "Trying to set Element: " << Name << ". This element has already been set. Please check." << std::endl;
301  return 1;
302  }
303 
304  //Check the same type has not already been set.
305  if(!CheckForMultipleTypes(type<T>(), Name, Instance)){
306  throw cet::exception("ShowerProducedPtrsHolder") << "Trying to set multiple objects with same type with no instance name or same instance name" << std::endl;
307  }
308 
309  showerassnPtrs[Name] = std::make_unique<ShowerUniqueAssnPtr<T> >(Instance);
310  return 0;
311  }
ChannelGroupService::Name Name
std::map< std::string, std::unique_ptr< reco::shower::ShowerUniqueProduerPtrBase > > showerassnPtrs
MaybeLogger_< ELseverityLevel::ELsev_warning, false > LogWarning
bool CheckForMultipleTypes(type< T >, const std::string &Name, const std::string &Instance) const
cet::coded_exception< error, detail::translate > exception
Definition: exception.h:33
QTextStream & endl(QTextStream &s)
template<class T >
int reco::shower::ShowerProducedPtrsHolder::SetShowerUniqueProduerPtr ( type< std::vector< T > >  ,
const std::string Name,
const std::string Instance = "" 
)
inline

Definition at line 315 of file ShowerProducedPtrsHolder.hh.

315  {
316 
317  //Then add the products
318  if(showerproductPtrs.find(Name) != showerproductPtrs.end()){
319  mf::LogWarning("ShowerProducedPtrsHolder") << "Trying to set Element: " << Name << ". This element has already been set. Please check." << std::endl;
320  return 1;
321  }
322 
323  //Check the same type has not already been set.
324  if(!CheckForMultipleTypes(type<std::vector<T> >(), Name, Instance)){
325  throw cet::exception("ShowerProducedPtrsHolder") << "Trying to set multiple objects with same type with no instance name or same instance name" << std::endl;
326  }
327 
328  if(showerPtrMakers.find(Name) != showerPtrMakers.end()){
329  throw cet::exception("ShowerProducedPtrsHolder") << "PtrMaker already exist. It should not be set again" << std::endl;
330  }
331  showerPtrMakers[Name] = std::make_unique<ShowerPtrMaker<T> >(Instance);
332  showerproductPtrs[Name] = std::make_unique<ShowerUniqueProductPtr<std::vector<T > > >(Instance);
333  return 0;
334  }
ChannelGroupService::Name Name
std::map< std::string, std::unique_ptr< reco::shower::ShowerUniqueProduerPtrBase > > showerproductPtrs
MaybeLogger_< ELseverityLevel::ELsev_warning, false > LogWarning
std::map< std::string, std::unique_ptr< reco::shower::ShowerPtrMakerBase > > showerPtrMakers
bool CheckForMultipleTypes(type< T >, const std::string &Name, const std::string &Instance) const
cet::coded_exception< error, detail::translate > exception
Definition: exception.h:33
QTextStream & endl(QTextStream &s)

Member Data Documentation

std::map<std::string,std::unique_ptr<reco::shower::ShowerUniqueProduerPtrBase > > reco::shower::ShowerProducedPtrsHolder::showerassnPtrs
private

Definition at line 617 of file ShowerProducedPtrsHolder.hh.

std::map<std::string,std::unique_ptr<reco::shower::ShowerUniqueProduerPtrBase > > reco::shower::ShowerProducedPtrsHolder::showerproductPtrs
private

Definition at line 614 of file ShowerProducedPtrsHolder.hh.

std::map<std::string,std::unique_ptr<reco::shower::ShowerPtrMakerBase> > reco::shower::ShowerProducedPtrsHolder::showerPtrMakers
private

Definition at line 620 of file ShowerProducedPtrsHolder.hh.


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