CMS 3D CMS Logo

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

ZMuMuUserData Class Reference

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

List of all members.

Public Types

typedef math::XYZVector Vector

Public Member Functions

 ZMuMuUserData (const edm::ParameterSet &)

Private Member Functions

void produce (edm::Event &, const edm::EventSetup &)

Private Attributes

double alpha_
InputTag beamSpot_
double beta_
int counter
string hltPath_
InputTag primaryVertices_
InputTag src_
InputTag zGenParticlesMatch_

Detailed Description

Definition at line 29 of file ZMuMuUserData.cc.


Member Typedef Documentation

Definition at line 32 of file ZMuMuUserData.cc.


Constructor & Destructor Documentation

ZMuMuUserData::ZMuMuUserData ( const edm::ParameterSet cfg)

Definition at line 46 of file ZMuMuUserData.cc.

                                                      :
  src_( cfg.getParameter<InputTag>( "src" ) ),
  beamSpot_(cfg.getParameter<InputTag>( "beamSpot" ) ),
  primaryVertices_(cfg.getParameter<InputTag>( "primaryVertices" ) ),
  zGenParticlesMatch_(cfg.getParameter<InputTag>( "zGenParticlesMatch" ) ),
  alpha_(cfg.getParameter<double>("alpha") ),
  beta_(cfg.getParameter<double>("beta") ), 
  hltPath_(cfg.getParameter<std::string >("hltPath") ){
  produces<vector<pat::CompositeCandidate> >();
}

Member Function Documentation

void ZMuMuUserData::produce ( edm::Event evt,
const edm::EventSetup  
) [private, virtual]

I fill the dau1 with positive and dau2 with negatove values for the pt, in order to flag the muons used for building zMassSa

I fill the dau1 with negatove and dau2 with positive values for the pt

Implements edm::EDProducer.

Definition at line 57 of file ZMuMuUserData.cc.

References pat::PATObject< ObjectType >::addUserFloat(), beamSpot_, counter, reco::CompositeCandidate::daughter(), WZMuSkim_cff::dimuons, reco::Candidate::eta(), reco::Candidate::get(), edm::Event::getByLabel(), i, reco::Muon::isGlobalMuon(), edm::Ref< C, T, F >::isNonnull(), scaleCards::mass, reco::Candidate::mass(), reco::Candidate::masterClone(), reco::Candidate::phi(), reco::Candidate::polarP4(), primaryVertices_, reco::Candidate::pt(), edm::Event::put(), reco::Candidate::rapidity(), src_, z, and zGenParticlesMatch_.

                                                             {
  Handle<std::vector<reco::CompositeCandidate> > dimuons;
  evt.getByLabel(src_,dimuons);

  Handle<BeamSpot> beamSpotHandle;
  evt.getByLabel(beamSpot_, beamSpotHandle);
  
  Handle<VertexCollection> primaryVertices;  // Collection of primary Vertices
  evt.getByLabel(primaryVertices_, primaryVertices);

  
  bool isMCMatchTrue=false;
   
  Handle<GenParticleMatch> zGenParticlesMatch;
  if(evt.getByLabel( zGenParticlesMatch_, zGenParticlesMatch )){
    isMCMatchTrue=true;
  }
  
  //cout<<"isMCMatchTrue"<<isMCMatchTrue <<endl;
  auto_ptr<vector<pat::CompositeCandidate> > dimuonColl( new vector<pat::CompositeCandidate> () );


  for (unsigned int i = 0; i< dimuons->size();++i){
    const CompositeCandidate & z = (*dimuons)[i];
    //CandidateBaseRef zRef = dimuons ->refAt(i);
    edm::Ref<std::vector<reco::CompositeCandidate> > zRef(dimuons, i);
    pat::CompositeCandidate dimuon(z);
    
    float trueMass,truePt,trueEta,truePhi,trueY;
    if (isMCMatchTrue){
    GenParticleRef trueZRef  = (*zGenParticlesMatch)[zRef];
    //CandidateRef trueZRef = trueZIter->val;
    if( trueZRef.isNonnull() ) {
      const Candidate & z = * trueZRef;
      trueMass = z.mass();
      truePt   = z.pt();
      trueEta  = z.eta();
      truePhi  = z.phi();
      trueY    = z.rapidity();
    } else {
      trueMass = -100; 
      truePt   = -100;
      trueEta  = -100;
      truePhi  = -100;
      trueY    = -100;  
    }
   
    dimuon.addUserFloat("TrueMass",trueMass);
    dimuon.addUserFloat("TruePt",truePt);
    dimuon.addUserFloat("TrueEta",trueEta);
    dimuon.addUserFloat("TruePhi",truePhi);
    dimuon.addUserFloat("TrueY",trueY);

    }
    const Candidate * dau1 = z.daughter(0); 
    const Candidate * dau2 = z.daughter(1); 
    const pat::Muon & mu1 = dynamic_cast<const pat::Muon&>(*dau1->masterClone());
    const pat::Muon & mu2 = dynamic_cast<const pat::Muon&>(*dau2->masterClone());
    
    /*cout<<"mu1 is null? "<<mu1.isMuon()<<endl;
    cout<<"mu2 is null? "<<mu2.isMuon()<<endl;
    cout<<"mu1 is global?"<<mu1.isGlobalMuon()<<endl;
    cout<<"mu2 is global?"<<mu2.isGlobalMuon()<<endl;
    */

    if(mu1.isGlobalMuon()==true && mu2.isGlobalMuon()==true){
      TrackRef stAloneTrack1;
      TrackRef stAloneTrack2;
      Vector momentum;
      Candidate::PolarLorentzVector p4_1;
      double mu_mass;
      stAloneTrack1 = dau1->get<TrackRef,reco::StandAloneMuonTag>();
      stAloneTrack2 = dau2->get<TrackRef,reco::StandAloneMuonTag>();
      float zDau1SaEta = stAloneTrack1->eta();
      float zDau2SaEta = stAloneTrack2->eta();
      float zDau1SaPhi = stAloneTrack1->phi();
      float zDau2SaPhi = stAloneTrack2->phi();
      float zDau1SaPt,zDau2SaPt;
      if(counter % 2 == 0) {
        momentum = stAloneTrack1->momentum();
        p4_1 = dau2->polarP4();
        mu_mass = dau1->mass();
        zDau1SaPt = stAloneTrack1->pt();
        zDau2SaPt = - stAloneTrack2->pt();
      }else{
        momentum = stAloneTrack2->momentum();
        p4_1= dau1->polarP4();
        mu_mass = dau2->mass();
        zDau1SaPt = - stAloneTrack1->pt();
        zDau2SaPt =  stAloneTrack2->pt();
      }
      
      Candidate::PolarLorentzVector p4_2(momentum.rho(), momentum.eta(),momentum.phi(), mu_mass);
      double mass = (p4_1+p4_2).mass();
      float zMassSa = mass;
      //cout<<"zMassSa "<<zMassSa;
      dimuon.addUserFloat("MassSa",zMassSa);    
      dimuon.addUserFloat("Dau1SaPt",zDau1SaPt);        
      dimuon.addUserFloat("Dau2SaPt",zDau2SaPt);        
      dimuon.addUserFloat("Dau1SaPhi",zDau1SaPhi);      
      dimuon.addUserFloat("Dau2SaPhi",zDau2SaPhi);      
      dimuon.addUserFloat("Dau1SaEta",zDau1SaEta);      
      dimuon.addUserFloat("Dau2SaEta",zDau2SaEta);      
      ++counter;
    }
    dimuonColl->push_back(dimuon);
    
  }
  

  evt.put( dimuonColl);
}

Member Data Documentation

double ZMuMuUserData::alpha_ [private]

Definition at line 37 of file ZMuMuUserData.cc.

Definition at line 36 of file ZMuMuUserData.cc.

Referenced by produce().

double ZMuMuUserData::beta_ [private]

Definition at line 37 of file ZMuMuUserData.cc.

int ZMuMuUserData::counter [private]

Definition at line 39 of file ZMuMuUserData.cc.

Referenced by produce().

string ZMuMuUserData::hltPath_ [private]

Definition at line 38 of file ZMuMuUserData.cc.

Definition at line 36 of file ZMuMuUserData.cc.

Referenced by produce().

Definition at line 36 of file ZMuMuUserData.cc.

Referenced by produce().

Definition at line 36 of file ZMuMuUserData.cc.

Referenced by produce().