CMS 3D CMS Logo

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

BdecayFilter Class Reference

#include <BdecayFilter.h>

Inheritance diagram for BdecayFilter:
edm::EDFilter edm::ProducerBase edm::ProductRegistryHelper

List of all members.

Classes

struct  CutStruct

Public Member Functions

 BdecayFilter (const edm::ParameterSet &)
virtual bool filter (edm::Event &, const edm::EventSetup &)
 ~BdecayFilter ()

Private Types

typedef std::vector
< HepMC::GenParticle * > 
GenPartVect
typedef std::vector
< HepMC::GenParticle * >
::const_iterator 
GenPartVectIt

Private Member Functions

bool cuts (const HepMC::GenParticle *jpsi, const CutStruct cut)
bool etaInRange (float eta, float etamin, float etamax)
HepMC::GenParticle * findParticle (HepMC::GenVertex *, const int requested_id)
HepMC::GenEvent::particle_const_iterator getNextBs (const HepMC::GenEvent::particle_const_iterator start, const HepMC::GenEvent::particle_const_iterator end)

Private Attributes

CutStruct firstDaughter
std::string label_
int motherParticle
int noAccepted
CutStruct secondDaughter

Detailed Description

Definition at line 27 of file BdecayFilter.h.


Member Typedef Documentation

typedef std::vector< HepMC::GenParticle * > BdecayFilter::GenPartVect [private]

Definition at line 45 of file BdecayFilter.h.

typedef std::vector< HepMC::GenParticle * >::const_iterator BdecayFilter::GenPartVectIt [private]

Definition at line 46 of file BdecayFilter.h.


Constructor & Destructor Documentation

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

Definition at line 9 of file BdecayFilter.cc.

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

{
  label_ = iConfig.getUntrackedParameter("moduleLabel",std::string("generator"));
  motherParticle = iConfig.getParameter< int >("motherParticle");

  firstDaughter.type = iConfig.getParameter< int >("firstDaughter");
  firstDaughter.decayProduct   = iConfig.getParameter< vector<int> >("firstDaughterDecay");
  firstDaughter.etaMin = iConfig.getParameter<double>("firstDaughterDecayEtaMin");
  firstDaughter.etaMax = iConfig.getParameter<double>("firstDaughterDecayEtaMax");
  firstDaughter.ptMin = iConfig.getParameter<double>("firstDaughterDecayPtMin");

  secondDaughter.type = iConfig.getParameter< int >("secondDaughter");
  secondDaughter.decayProduct   = iConfig.getParameter< vector<int> >("secondDaughterDecay");
  secondDaughter.etaMin = iConfig.getParameter<double>("secondDaughterDecayEtaMin");
  secondDaughter.etaMax = iConfig.getParameter<double>("secondDaughterDecayEtaMax");
  secondDaughter.ptMin = iConfig.getParameter<double>("secondDaughterDecayPtMin");

  noAccepted = 0;
}
BdecayFilter::~BdecayFilter ( )

Definition at line 30 of file BdecayFilter.cc.

References gather_cfg::cout.

{  
  std::cout << "Total number of accepted events = " << noAccepted << std::endl;
}

Member Function Documentation

bool BdecayFilter::cuts ( const HepMC::GenParticle *  jpsi,
const CutStruct  cut 
) [private]
bool BdecayFilter::etaInRange ( float  eta,
float  etamin,
float  etamax 
) [private]

Definition at line 159 of file BdecayFilter.cc.

{
  return ( (etamin < eta) && (eta < etamax) );
}
bool BdecayFilter::filter ( edm::Event iEvent,
const edm::EventSetup iSetup 
) [virtual]

Implements edm::EDFilter.

Definition at line 76 of file BdecayFilter.cc.

References gather_cfg::cout, configurableAnalysis::GenParticle, edm::Event::getByLabel(), and phi.

{
  edm::Handle<HepMCProduct> evt;
  iEvent.getByLabel(label_, evt);
  
  const HepMC::GenEvent * generated_event = evt->GetEvent();
  //cout << "Start\n";

  bool event_passed = false;
  HepMC::GenEvent::particle_const_iterator bs = getNextBs(generated_event->particles_begin(), generated_event->particles_end());
  while (bs!=  generated_event->particles_end() ) {

    // vector< GenParticle * > bsChild = (*bs)->listChildren();

    //***
    HepMC::GenVertex* outVertex = (*bs)->end_vertex();
    //***
    
    GenParticle * jpsi = 0;
    GenParticle * phi = 0;
    // cout << "bs size "<<bsChild.size()<<endl;
    //***
    int numChildren = outVertex->particles_out_size();
    cout<< "B children "<<numChildren<<endl;
    //***
    
    /*    if ((bsChild.size()==2) && ((jpsi = findParticle(bsChild, 443))!=0) && 
          ((phi = findParticle(bsChild, 333))!=0)) {
          cout << bsChild[0]->momentum()<<" "<<bsChild[0]->momentum().eta()
          <<" "<<bsChild[1]->momentum()<<" "<<bsChild[1]->momentum().eta()<<endl;
    */
    
    //***
    if( (numChildren==2) && ((jpsi = findParticle(outVertex, firstDaughter.type))!=0) && 
        ((phi = findParticle(outVertex, secondDaughter.type))!=0)) {
      
      cout << jpsi->momentum().rho() <<" "<<jpsi->momentum().eta() <<" "<<phi->momentum().rho()<<" "<<phi->momentum().eta()<<endl;
      //cout <<"bs dec trouve"<<endl;
      if (cuts(phi, secondDaughter) && cuts(jpsi, firstDaughter)) {
        cout <<"decay found"<<endl;
        event_passed = true;
        break;
      }
    }
    bs = getNextBs(++bs, generated_event->particles_end());
  }
  
  if (event_passed) noAccepted++;
  cout << "End filter\n";
  
  delete generated_event; 
  
  return event_passed;
}
HepMC::GenParticle * BdecayFilter::findParticle ( HepMC::GenVertex *  vertex,
const int  requested_id 
) [private]

Definition at line 49 of file BdecayFilter.cc.

References abs, gather_cfg::cout, and L1TEmulatorMonitor_cff::p.

{
  // for(std::set<GenParticle*>::const_iterator p = vertex->particles_out_const_begin(); 
  for(GenVertex::particles_out_const_iterator  p = vertex->particles_out_const_begin(); 
      p != vertex->particles_out_const_end(); p++)
    {
      int event_particle_id = abs( (*p)->pdg_id() );
      cout << "particle Id: "<<event_particle_id<<"\n";
      if (requested_id == event_particle_id) return *p;
    }
  return 0;
}
HepMC::GenEvent::particle_const_iterator BdecayFilter::getNextBs ( const HepMC::GenEvent::particle_const_iterator  start,
const HepMC::GenEvent::particle_const_iterator  end 
) [private]

Definition at line 63 of file BdecayFilter.cc.

References abs, end, and L1TEmulatorMonitor_cff::p.

{
  HepMC::GenEvent::particle_const_iterator p;
  for (p = start; p != end; p++) 
    {
      int event_particle_id = abs( (*p)->pdg_id() );
//   cout << "search "<<event_particle_id<<"\n";
      if (event_particle_id == motherParticle) return p;
    }
  return p;  
}

Member Data Documentation

Definition at line 61 of file BdecayFilter.h.

std::string BdecayFilter::label_ [private]

Definition at line 63 of file BdecayFilter.h.

Definition at line 65 of file BdecayFilter.h.

int BdecayFilter::noAccepted [private]

Definition at line 64 of file BdecayFilter.h.

Definition at line 61 of file BdecayFilter.h.