CMS 3D CMS Logo

Public Types | Public Member Functions | Private Member Functions | Private Attributes

TopProjector< Top, Bottom > Class Template Reference

#include <TopProjector.h>

Inheritance diagram for TopProjector< Top, Bottom >:
edm::EDProducer edm::ProducerBase edm::ProductRegistryHelper

List of all members.

Public Types

typedef std::vector< Bottom > BottomCollection
typedef edm::Handle
< std::vector< Bottom > > 
BottomHandle
typedef edm::Ptr< Bottom > BottomPtr
typedef std::vector< Top > TopCollection
typedef edm::Handle
< std::vector< Top > > 
TopHandle

Public Member Functions

void produce (edm::Event &, const edm::EventSetup &)
 TopProjector (const edm::ParameterSet &)
 ~TopProjector ()

Private Member Functions

void maskAncestors (const reco::CandidatePtrVector &ancestors, std::vector< bool > &masked) const
void printAncestors (const reco::CandidatePtrVector &ancestors, const edm::Handle< std::vector< Bottom > > &allPFCandidates) const
void processCollection (const edm::Handle< std::vector< Top > > &handle, const edm::Handle< std::vector< Bottom > > &allPFCandidates, std::vector< bool > &masked, const char *objectName, const edm::Event &iEvent) const
void ptrToAncestor (reco::CandidatePtr candRef, reco::CandidatePtrVector &ancestors, const edm::ProductID &ancestorsID, const edm::Event &iEvent) const

Private Attributes

bool enable_
 enable? if not, all candidates in the bottom collection are copied to the output collection
edm::InputTag inputTagBottom_
 input tag for the masked collection.
edm::InputTag inputTagTop_
 input tag for the top (masking) collection
std::string name_
 name of the top projection
bool verbose_
 verbose ?

Detailed Description

template<class Top, class Bottom>
class TopProjector< Top, Bottom >

Author:
Colin Bernet
Date:
february 2008

Definition at line 37 of file TopProjector.h.


Member Typedef Documentation

template<class Top , class Bottom >
typedef std::vector<Bottom> TopProjector< Top, Bottom >::BottomCollection

Definition at line 43 of file TopProjector.h.

template<class Top , class Bottom >
typedef edm::Handle< std::vector<Bottom> > TopProjector< Top, Bottom >::BottomHandle

Definition at line 44 of file TopProjector.h.

template<class Top , class Bottom >
typedef edm::Ptr<Bottom> TopProjector< Top, Bottom >::BottomPtr

Definition at line 45 of file TopProjector.h.

template<class Top , class Bottom >
typedef std::vector<Top> TopProjector< Top, Bottom >::TopCollection

Definition at line 41 of file TopProjector.h.

template<class Top , class Bottom >
typedef edm::Handle< std::vector<Top> > TopProjector< Top, Bottom >::TopHandle

Definition at line 42 of file TopProjector.h.


Constructor & Destructor Documentation

template<class Top , class Bottom >
TopProjector< Top, Bottom >::TopProjector ( const edm::ParameterSet iConfig)

Definition at line 103 of file TopProjector.h.

References edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), TopProjector< Top, Bottom >::inputTagBottom_, TopProjector< Top, Bottom >::inputTagTop_, TopProjector< Top, Bottom >::name_, and TopProjector< Top, Bottom >::verbose_.

                                                                        : 
  enable_(iConfig.getParameter<bool>("enable")) {

  verbose_ = iConfig.getUntrackedParameter<bool>("verbose",false);
  name_ = iConfig.getUntrackedParameter<std::string>("name","No Name");
  inputTagTop_ = iConfig.getParameter<edm::InputTag>("topCollection");
  inputTagBottom_ = iConfig.getParameter<edm::InputTag>("bottomCollection");

  // will produce a collection of the unmasked candidates in the 
  // bottom collection 
  produces< std::vector<Bottom> >();
}
template<class Top , class Bottom >
TopProjector< Top, Bottom >::~TopProjector ( ) [inline]

Definition at line 49 of file TopProjector.h.

{};

Member Function Documentation

template<class Top , class Bottom >
void TopProjector< Top, Bottom >::maskAncestors ( const reco::CandidatePtrVector ancestors,
std::vector< bool > &  masked 
) const [private]

ancestors is a RefToBase vector. For each object in this vector get the index and set the corresponding slot to true in the masked vector

Definition at line 321 of file TopProjector.h.

References i, getHLTprescales::index, and edm::PtrVectorBase::size().

                                                                         {
  
  for(unsigned i=0; i<ancestors.size(); i++) {
    unsigned index = ancestors[i].key();
    assert( index<masked.size() );
    
    //     if(verbose_) {
    //       ProductID id = ancestors[i].id();
    //       std::cout<<"\tmasking "<<index<<", ancestor "<<id<<"/"<<index<<std::endl;
    //     }
    masked[index] = true;
  }
}
template<class Top , class Bottom >
void TopProjector< Top, Bottom >::printAncestors ( const reco::CandidatePtrVector ancestors,
const edm::Handle< std::vector< Bottom > > &  allPFCandidates 
) const [private]

Definition at line 260 of file TopProjector.h.

References gather_cfg::cout, i, edm::PtrVectorBase::id(), getHLTprescales::index, and edm::PtrVectorBase::size().

                                                                                                    {
  

  std::vector<Bottom> pfs = *allPFCandidates;

  for(unsigned i=0; i<ancestors.size(); i++) {

    edm::ProductID id = ancestors[i].id();
    assert( id == allPFCandidates.id() );
 
    unsigned index = ancestors[i].key();
    assert( index < pfs.size() );
    
    std::cout<<"\t\t"<<pfs[index]<<std::endl;
  }
}
template<class Top , class Bottom >
void TopProjector< Top, Bottom >::processCollection ( const edm::Handle< std::vector< Top > > &  handle,
const edm::Handle< std::vector< Bottom > > &  allPFCandidates,
std::vector< bool > &  masked,
const char *  objectName,
const edm::Event iEvent 
) const [private]

Definition at line 215 of file TopProjector.h.

References gather_cfg::cout, i, edm::PtrVectorBase::id(), iEvent, and benchmark_cfg::topCollection.

                                                                                   {

  if( tops.isValid() && bottoms.isValid() ) {
    const std::vector<Top>& topCollection = *tops;
    
    if(verbose_) 
      std::cout<<"******* TopProjector "<<objectName
               <<" size = "<<topCollection.size()<<" ******** "<<std::endl;
    
    for(unsigned i=0; i<topCollection.size(); i++) {
      
      
      edm::Ptr<Top>   ptr( tops, i);
      reco::CandidatePtr basePtr( ptr );
 
      
      reco::CandidatePtrVector ancestors;
      ptrToAncestor( basePtr,
                     ancestors,
                     bottoms.id(), 
                     iEvent );
      
      if(verbose_) {
/*      std::cout<<"\t"<<objectName<<" "<<i */
/*               <<" pt,eta,phi = " */
/*               <<basePtr->pt()<<"," */
/*               <<basePtr->eta()<<"," */
/*               <<basePtr->phi()<<std::endl; */
        
        std::cout<<"\t"<<topCollection[i]<<std::endl;
        printAncestors( ancestors, bottoms );
      }
  
      maskAncestors( ancestors, masked );
    }
  }

}
template<class Top , class Bottom >
void TopProjector< Top, Bottom >::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
) [virtual]

Implements edm::EDProducer.

Definition at line 118 of file TopProjector.h.

References edm::Provenance::branchDescription(), gather_cfg::cout, edm::EventID::event(), edm::Event::getByLabel(), edm::Event::getProvenance(), i, edm::HandleBase::id(), edm::EventBase::id(), iEvent, and edm::Event::put().

                                                                       {
  
  if( verbose_)
    std::cout<<"Event -------------------- "<<iEvent.id().event()<<std::endl;
  
  // get the various collections

  // Access the masking collection
  TopHandle tops;
  iEvent.getByLabel(  inputTagTop_, tops );


/*   if( !tops.isValid() ) { */
/*     std::ostringstream  err; */
/*     err<<"The top collection must be supplied."<<std::endl */
/*        <<"It is now set to : "<<inputTagTop_<<std::endl; */
/*     edm::LogError("PFPAT")<<err.str(); */
/*     throw cms::Exception( "MissingProduct", err.str()); */
/*   } */

  edm::ProductID topsID = tops.id();

  

  // Access the collection to
  // be masked by the other ones
  BottomHandle bottoms;
  iEvent.getByLabel(  inputTagBottom_, bottoms );

/*   if( !bottoms.isValid() ) { */
/*     std::ostringstream  err; */
/*     err<<"The bottom collection must be supplied."<<std::endl */
/*        <<"It is now set to : "<<inputTagBottom_<<std::endl; */
/*     edm::LogError("PFPAT")<<err.str(); */
/*     throw cms::Exception( "MissingProduct", err.str()); */
/*   } */

  edm::ProductID bottomsID = bottoms.id();

 
  if(verbose_) {
    const edm::Provenance& topProv = iEvent.getProvenance(tops.id());
    const edm::Provenance& bottomProv = iEvent.getProvenance(bottoms.id());

    std::cout<<"Top projector: event "<<iEvent.id().event()<<std::endl;
    std::cout<<"Inputs --------------------"<<std::endl;
    std::cout<<"Top      :  "
        <<tops.id()<<"\t"<<tops->size()<<std::endl
        <<topProv.branchDescription()<<std::endl
        <<"Bottom   :  "
        <<bottoms.id()<<"\t"<<bottoms->size()<<std::endl
        <<bottomProv.branchDescription()<<std::endl;
  }


  // output collection of objects,
  // selected from the Bottom collection

  std::auto_ptr< BottomCollection >
    pBottomOutput( new BottomCollection );
  
  // mask for each bottom object.
  // at the beginning, all bottom objects are unmasked.
  std::vector<bool> masked( bottoms->size(), false);
    
  if( enable_ )
    processCollection( tops, bottoms, masked, name_.c_str(), iEvent );

  const BottomCollection& inCands = *bottoms;

  if(verbose_)
    std::cout<<" Remaining candidates in the bottom collection ------ "<<std::endl;
  
  for(unsigned i=0; i<inCands.size(); i++) {
    
    if(masked[i]) {
      if(verbose_)
        std::cout<<"X "<<i<<" "<<inCands[i]<<std::endl;
      continue;
    }
    else {
      if(verbose_)
        std::cout<<"O "<<i<<" "<<inCands[i]<<std::endl;

      pBottomOutput->push_back( inCands[i] );
      BottomPtr motherPtr( bottoms, i );
      pBottomOutput->back().setSourceCandidatePtr(motherPtr); 
    }
  }

  iEvent.put( pBottomOutput );
}
template<class Top , class Bottom >
void TopProjector< Top, Bottom >::ptrToAncestor ( reco::CandidatePtr  candRef,
reco::CandidatePtrVector ancestors,
const edm::ProductID ancestorsID,
const edm::Event iEvent 
) const [private]

fills ancestors with ptrs to the PFCandidates that in one way or another contribute to the candidate pointed to by candPtr

Definition at line 282 of file TopProjector.h.

References edm::Provenance::branchDescription(), gather_cfg::cout, edm::Event::getProvenance(), i, edm::Ptr< T >::id(), edm::Ptr< T >::key(), and edm::PtrVector< T >::push_back().

                                                                       {

  
  unsigned nSources = candPtr->numberOfSourceCandidatePtrs();

  if(verbose_) {
    const edm::Provenance& hereProv = iEvent.getProvenance(candPtr.id());

    std::cout<<"going down from "<<candPtr.id()
        <<"/"<<candPtr.key()<<" #mothers "<<nSources
        <<" ancestor id "<<ancestorsID<<std::endl
        <<hereProv.branchDescription()<<std::endl;
  }  

  for(unsigned i=0; i<nSources; i++) {
    
    reco::CandidatePtr mother = candPtr->sourceCandidatePtr(i);
    if( verbose_ ) {
/*       const Provenance& motherProv = iEvent.getProvenance(mother.id()); */
      std::cout<<"  mother id "<<mother.id()<<std::endl;
    }
    if(  mother.id() != ancestorsID ) {
      // the mother is not yet at lowest level
      ptrToAncestor( mother, ancestors, ancestorsID, iEvent );
    }
    else {
      // adding mother to the list of ancestors
      ancestors.push_back( mother ); 
    }
  }
}

Member Data Documentation

template<class Top , class Bottom >
bool TopProjector< Top, Bottom >::enable_ [private]

enable? if not, all candidates in the bottom collection are copied to the output collection

Definition at line 84 of file TopProjector.h.

template<class Top , class Bottom >
edm::InputTag TopProjector< Top, Bottom >::inputTagBottom_ [private]

input tag for the masked collection.

Definition at line 96 of file TopProjector.h.

Referenced by TopProjector< Top, Bottom >::TopProjector().

template<class Top , class Bottom >
edm::InputTag TopProjector< Top, Bottom >::inputTagTop_ [private]

input tag for the top (masking) collection

Definition at line 93 of file TopProjector.h.

Referenced by TopProjector< Top, Bottom >::TopProjector().

template<class Top , class Bottom >
std::string TopProjector< Top, Bottom >::name_ [private]

name of the top projection

Definition at line 90 of file TopProjector.h.

Referenced by TopProjector< Top, Bottom >::TopProjector().

template<class Top , class Bottom >
bool TopProjector< Top, Bottom >::verbose_ [private]

verbose ?

Definition at line 87 of file TopProjector.h.

Referenced by TopProjector< Top, Bottom >::TopProjector().