CMS 3D CMS Logo

Public Member Functions | Private Member Functions | Private Attributes

PFV0Producer Class Reference

#include <PFV0Producer.h>

Inheritance diagram for PFV0Producer:
edm::EDProducer edm::ProducerBase edm::ProductRegistryHelper

List of all members.

Public Member Functions

 PFV0Producer (const edm::ParameterSet &)
 Constructor.
 ~PFV0Producer ()
 Destructor.

Private Member Functions

virtual void beginRun (edm::Run &, const edm::EventSetup &)
virtual void endRun ()
virtual void produce (edm::Event &, const edm::EventSetup &)
 Produce the PFRecTrack collection.

Private Attributes

PFTrackTransformerpfTransformer_
 PFTrackTransformer.
std::vector< edm::InputTagV0list_

Detailed Description

Definition at line 12 of file PFV0Producer.h.


Constructor & Destructor Documentation

PFV0Producer::PFV0Producer ( const edm::ParameterSet iConfig) [explicit]

Constructor.

Definition at line 17 of file PFV0Producer.cc.

References edm::ParameterSet::getParameter(), and V0list_.

                                                     :
  pfTransformer_(0)
{

  produces<reco::PFV0Collection>();
  produces<reco::PFRecTrackCollection>();

  V0list_ = 
    iConfig.getParameter< vector < InputTag > >("V0List");
}
PFV0Producer::~PFV0Producer ( )

Destructor.

Definition at line 28 of file PFV0Producer.cc.

References pfTransformer_.

{
  delete pfTransformer_;
}

Member Function Documentation

void PFV0Producer::beginRun ( edm::Run run,
const edm::EventSetup iSetup 
) [private, virtual]

Reimplemented from edm::EDProducer.

Definition at line 90 of file PFV0Producer.cc.

References edm::EventSetup::get(), PFTrackTransformer::OnlyProp(), and pfTransformer_.

{
  ESHandle<MagneticField> magneticField;
  iSetup.get<IdealMagneticFieldRecord>().get(magneticField);
  pfTransformer_= new PFTrackTransformer(math::XYZVector(magneticField->inTesla(GlobalPoint(0,0,0))));
  pfTransformer_->OnlyProp();
}
void PFV0Producer::endRun ( void  ) [private, virtual]

Definition at line 102 of file PFV0Producer.cc.

References pfTransformer_.

                     {
  delete pfTransformer_;
}
void PFV0Producer::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
) [private, virtual]

Produce the PFRecTrack collection.

Implements edm::EDProducer.

Definition at line 34 of file PFV0Producer.cc.

References PFTrackTransformer::addPoints(), edm::EventID::event(), edm::Event::getByLabel(), edm::Event::getRefBeforePut(), edm::EventBase::id(), edm::Ref< C, T, F >::key(), reco::PFRecTrack::KF, LogDebug, pfTransformer_, edm::Event::put(), edm::EventID::run(), V0list_, and TrackValidation_HighPurity_cff::valid.

{
  LogDebug("PFV0Producer")<<"START event: "<<iEvent.id().event()
                          <<" in run "<<iEvent.id().run();
  //create the empty collections 
  auto_ptr< PFV0Collection > pfV0Coll (new PFV0Collection);

  auto_ptr<reco::PFRecTrackCollection> pfV0RecTrackColl(new reco::PFRecTrackCollection);


  reco::PFRecTrackRefProd pfTrackRefProd = iEvent.getRefBeforePut<reco::PFRecTrackCollection>();
  int idx = 0;

  for (unsigned int il=0; il<V0list_.size(); il++){
    Handle<VertexCompositeCandidateCollection> V0coll;
    iEvent.getByLabel(V0list_[il],V0coll);
    LogDebug("PFV0Producer")<<V0list_[il]<<" contains "<<V0coll->size()<<" V0 candidates ";
    for (unsigned int iv=0;iv<V0coll->size();iv++){
      VertexCompositeCandidateRef V0(V0coll, iv);
      vector<TrackRef> Tracks;
      vector<PFRecTrackRef> PFTracks;
      for( unsigned int ndx = 0; ndx < V0->numberOfDaughters(); ndx++ ) {
        
        Tracks.push_back( (dynamic_cast<const RecoChargedCandidate*>(V0->daughter(ndx)))->track() );
        TrackRef trackRef = (dynamic_cast<const RecoChargedCandidate*>(V0->daughter(ndx)))->track();

        reco::PFRecTrack pfRecTrack( trackRef->charge(), 
                                   reco::PFRecTrack::KF, 
                                   trackRef.key(), 
                                   trackRef );


        Trajectory FakeTraj;
        bool valid = pfTransformer_->addPoints( pfRecTrack, *trackRef, FakeTraj);
        if(valid) {
          PFTracks.push_back(reco::PFRecTrackRef( pfTrackRefProd, idx++));
          pfV0RecTrackColl->push_back(pfRecTrack);
          
        }
      }
      if ((PFTracks.size()==2)&&(Tracks.size()==2)){
        pfV0Coll->push_back(PFV0(V0,PFTracks,Tracks));
      }
        
      

    }
  }
  
  
  iEvent.put(pfV0Coll);
  iEvent.put(pfV0RecTrackColl);
}

Member Data Documentation

PFTrackTransformer.

Definition at line 29 of file PFV0Producer.h.

Referenced by beginRun(), endRun(), produce(), and ~PFV0Producer().

std::vector< edm::InputTag > PFV0Producer::V0list_ [private]

Definition at line 30 of file PFV0Producer.h.

Referenced by PFV0Producer(), and produce().