CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
ZToLLEdmNtupleDumper.cc
Go to the documentation of this file.
1 /* \class ZToLLEdmNtupleDumper
2  *
3  * \author Luca Lista, INFN
4  *
5  */
14 //#include "DataFormats/Common/interface/AssociationVector.h"
19 
26 
28 
29 #include <vector>
30 
31 using namespace edm;
32 using namespace std;
33 using namespace reco;
34 using namespace isodeposit;
35 //using namespace pat;
36 
38 public:
41 
42 private:
43  void produce( edm::Event &, const edm::EventSetup & ) override;
44  std::vector<std::string> zName_;
45  std::vector<edm::EDGetTokenT<CandidateView> > zTokens_;
46  std::vector<edm::EDGetTokenT<GenParticleMatch> > zGenParticlesMatchTokens_ ;
49 
50  std::vector<double> ptThreshold_, etEcalThreshold_, etHcalThreshold_ ,dRVetoTrk_, dRTrk_, dREcal_ , dRHcal_, alpha_, beta_;
51  std::vector<double> relativeIsolation_;
52  std::vector<string> hltPath_;
53  int counter;
54 
55 
56 };
57 
58 template<typename T>
59  double isolation(const T * t, double ptThreshold, double etEcalThreshold, double etHcalThreshold , double dRVetoTrk, double dRTrk, double dREcal , double dRHcal, double alpha, double beta, bool relativeIsolation) {
60  // on 34X:
61 const pat::IsoDeposit * trkIso = t->isoDeposit(pat::TrackIso);
62 // const pat::IsoDeposit * trkIso = t->trackerIsoDeposit();
63  // on 34X
64 const pat::IsoDeposit * ecalIso = t->isoDeposit(pat::EcalIso);
65 // const pat::IsoDeposit * ecalIso = t->ecalIsoDeposit();
66 // on 34X
67 const pat::IsoDeposit * hcalIso = t->isoDeposit(pat::HcalIso);
68 // const pat::IsoDeposit * hcalIso = t->hcalIsoDeposit();
69 
70  Direction dir = Direction(t->eta(), t->phi());
71 
73  vetosTrk.push_back(new ConeVeto( dir, dRVetoTrk ));
74  vetosTrk.push_back(new ThresholdVeto( ptThreshold ));
75 
76  pat::IsoDeposit::AbsVetos vetosEcal;
77  vetosEcal.push_back(new ConeVeto( dir, 0.));
78  vetosEcal.push_back(new ThresholdVeto( etEcalThreshold ));
79 
80  pat::IsoDeposit::AbsVetos vetosHcal;
81  vetosHcal.push_back(new ConeVeto( dir, 0. ));
82  vetosHcal.push_back(new ThresholdVeto( etHcalThreshold ));
83 
84  double isovalueTrk = (trkIso->sumWithin(dRTrk,vetosTrk));
85  double isovalueEcal = (ecalIso->sumWithin(dREcal,vetosEcal));
86  double isovalueHcal = (hcalIso->sumWithin(dRHcal,vetosHcal));
87 
88 
89  double iso = alpha*( ((1+beta)/2*isovalueEcal) + ((1-beta)/2*isovalueHcal) ) + ((1-alpha)*isovalueTrk) ;
90  if(relativeIsolation) iso /= t->pt();
91  return iso;
92  }
93 
94 
95 double candIsolation( const reco::Candidate* c, double ptThreshold, double etEcalThreshold, double etHcalThreshold , double dRVetoTrk, double dRTrk, double dREcal , double dRHcal, double alpha, double beta, bool relativeIsolation) {
96  const pat::Muon * mu = dynamic_cast<const pat::Muon *>(c);
97  if(mu != 0) return isolation(mu, ptThreshold, etEcalThreshold, etHcalThreshold ,dRVetoTrk, dRTrk, dREcal , dRHcal, alpha, beta, relativeIsolation);
98  const pat::GenericParticle * trk = dynamic_cast<const pat::GenericParticle*>(c);
99  if(trk != 0) return isolation(trk, ptThreshold, etEcalThreshold, etHcalThreshold ,dRVetoTrk, dRTrk, dREcal , dRHcal, alpha, beta, relativeIsolation);
101  << "Candidate daughter #0 is neither pat::Muons nor pat::GenericParticle\n";
102  return -1;
103  }
104 
105 
106 
108  string alias;
109  vector<ParameterSet> psets = cfg.getParameter<vector<ParameterSet> > ( "zBlocks" );
110  for( std::vector<edm::ParameterSet>::const_iterator i = psets.begin(); i != psets.end(); ++ i ) {
111  string zName = i->getParameter<string>( "zName" );
112  edm::EDGetTokenT<CandidateView> zToken = consumes<CandidateView>( i->getParameter<InputTag>( "z" ) );
113  edm::EDGetTokenT<GenParticleMatch> zGenParticlesMatchToken = consumes<GenParticleMatch>( i->getParameter<InputTag>( "zGenParticlesMatch" ) );
114  beamSpotToken_ = consumes<BeamSpot>( i->getParameter<InputTag>( "beamSpot" ) );
115  primaryVerticesToken_= consumes<VertexCollection>( i->getParameter<InputTag>( "primaryVertices" ) ) ;
116  double ptThreshold = i->getParameter<double>("ptThreshold");
117  double etEcalThreshold = i->getParameter<double>("etEcalThreshold");
118  double etHcalThreshold= i->getParameter<double>("etHcalThreshold");
119  double dRVetoTrk=i->getParameter<double>("deltaRVetoTrk");
120  double dRTrk=i->getParameter<double>("deltaRTrk");
121  double dREcal=i->getParameter<double>("deltaREcal");
122  double dRHcal=i->getParameter<double>("deltaRHcal");
123  double alpha=i->getParameter<double>("alpha");
124  double beta=i->getParameter<double>("beta");
125  bool relativeIsolation = i->getParameter<bool>("relativeIsolation");
126  string hltPath = i ->getParameter<std::string >("hltPath");
127  zName_.push_back( zName );
128  zTokens_.push_back( zToken );
129  zGenParticlesMatchTokens_.push_back( zGenParticlesMatchToken );
130  ptThreshold_.push_back( ptThreshold );
131  etEcalThreshold_.push_back(etEcalThreshold);
132  etHcalThreshold_.push_back(etHcalThreshold);
133  dRVetoTrk_.push_back(dRVetoTrk);
134  dRTrk_.push_back(dRTrk);
135  dREcal_.push_back(dREcal);
136  dRHcal_.push_back(dRHcal);
137  alpha_.push_back(alpha);
138  beta_.push_back(beta);
139  relativeIsolation_.push_back(relativeIsolation);
140  hltPath_.push_back(hltPath);
141  produces<vector<unsigned int> >( alias = zName + "EventNumber" ).setBranchAlias( alias );
142  produces<vector<unsigned int> >( alias = zName + "RunNumber" ).setBranchAlias( alias );
143  produces<vector<unsigned int> >( alias = zName + "LumiBlock" ).setBranchAlias( alias );
144  produces<vector<float> >( alias = zName + "Mass" ).setBranchAlias( alias );
145  produces<vector<float> >( alias = zName + "MassSa" ).setBranchAlias( alias );
146  produces<vector<float> >( alias = zName + "Pt" ).setBranchAlias( alias );
147  produces<vector<float> >( alias = zName + "Eta" ).setBranchAlias( alias );
148  produces<vector<float> >( alias = zName + "Phi" ).setBranchAlias( alias );
149  produces<vector<float> >( alias = zName + "Y" ).setBranchAlias( alias );
150  produces<vector<float> >( alias = zName + "Dau1Pt" ).setBranchAlias( alias );
151  produces<vector<float> >( alias = zName + "Dau2Pt" ).setBranchAlias( alias );
152  produces<vector<float> >( alias = zName + "Dau1SaPt" ).setBranchAlias( alias );
153  produces<vector<float> >( alias = zName + "Dau2SaPt" ).setBranchAlias( alias );
154  produces<vector<unsigned int> >( alias = zName + "Dau1HLTBit" ).setBranchAlias( alias );
155  produces<vector<unsigned int> >( alias = zName + "Dau2HLTBit" ).setBranchAlias( alias );
156  produces<vector<int> >( alias = zName + "Dau1Q" ).setBranchAlias( alias );
157  produces<vector<int> >( alias = zName + "Dau2Q" ).setBranchAlias( alias );
158  produces<vector<float> >( alias = zName + "Dau1Eta" ).setBranchAlias( alias );
159  produces<vector<float> >( alias = zName + "Dau2Eta" ).setBranchAlias( alias );
160  produces<vector<float> >( alias = zName + "Dau1SaEta" ).setBranchAlias( alias );
161  produces<vector<float> >( alias = zName + "Dau2SaEta" ).setBranchAlias( alias );
162  produces<vector<float> >( alias = zName + "Dau1Phi" ).setBranchAlias( alias );
163  produces<vector<float> >( alias = zName + "Dau2Phi" ).setBranchAlias( alias );
164  produces<vector<float> >( alias = zName + "Dau1SaPhi" ).setBranchAlias( alias );
165  produces<vector<float> >( alias = zName + "Dau2SaPhi" ).setBranchAlias( alias );
166  produces<vector<float> >( alias = zName + "Dau1Iso" ).setBranchAlias( alias );
167  produces<vector<float> >( alias = zName + "Dau2Iso" ).setBranchAlias( alias );
168  produces<vector<float> >( alias = zName + "Dau1TrkIso" ).setBranchAlias( alias );
169  produces<vector<float> >( alias = zName + "Dau2TrkIso" ).setBranchAlias( alias );
170  produces<vector<float> >( alias = zName + "Dau1EcalIso" ).setBranchAlias( alias );
171  produces<vector<float> >( alias = zName + "Dau2EcalIso" ).setBranchAlias( alias );
172  produces<vector<float> >( alias = zName + "Dau1HcalIso" ).setBranchAlias( alias );
173  produces<vector<float> >( alias = zName + "Dau2HcalIso" ).setBranchAlias( alias );
174  produces<vector<float> >( alias = zName + "Dau1MuEnergyEm" ).setBranchAlias( alias );
175  produces<vector<float> >( alias = zName + "Dau1MuEnergyHad" ).setBranchAlias( alias );
176  produces<vector<float> >( alias = zName + "Dau2MuEnergyEm" ).setBranchAlias( alias );
177  produces<vector<float> >( alias = zName + "Dau2MuEnergyHad" ).setBranchAlias( alias );
178 
179  produces<vector<float> >( alias = zName + "VtxNormChi2" ).setBranchAlias( alias );
180  produces<vector<unsigned int> >( alias = zName + "Dau1NofHit" ).setBranchAlias( alias );
181  produces<vector<unsigned int> >( alias = zName + "Dau2NofHit" ).setBranchAlias( alias );
182  produces<vector<unsigned int> >( alias = zName + "Dau1NofHitTk" ).setBranchAlias( alias );
183  produces<vector<unsigned int> >( alias = zName + "Dau1NofHitSta" ).setBranchAlias( alias );
184  produces<vector<unsigned int> >( alias = zName + "Dau2NofHitTk" ).setBranchAlias( alias );
185  produces<vector<unsigned int> >( alias = zName + "Dau2NofHitSta" ).setBranchAlias( alias );
186  produces<vector<unsigned int> >( alias = zName + "Dau1NofMuChambers" ).setBranchAlias( alias );
187  produces<vector<unsigned int> >( alias = zName + "Dau2NofMuChambers" ).setBranchAlias( alias );
188  produces<vector<unsigned int> >( alias = zName + "Dau1NofMuMatches" ).setBranchAlias( alias );
189  produces<vector<unsigned int> >( alias = zName + "Dau2NofMuMatches" ).setBranchAlias( alias );
190  produces<vector<float> >( alias = zName + "Dau1Chi2" ).setBranchAlias( alias );
191  produces<vector<float> >( alias = zName + "Dau2Chi2" ).setBranchAlias( alias );
192  produces<vector<float> >( alias = zName + "Dau1TrkChi2" ).setBranchAlias( alias );
193  produces<vector<float> >( alias = zName + "Dau2TrkChi2" ).setBranchAlias( alias );
194  produces<vector<float> >( alias = zName + "Dau1dxyFromBS" ).setBranchAlias( alias );
195  produces<vector<float> >( alias = zName + "Dau2dxyFromBS" ).setBranchAlias( alias );
196  produces<vector<float> >( alias = zName + "Dau1dzFromBS" ).setBranchAlias( alias );
197  produces<vector<float> >( alias = zName + "Dau2dzFromBS" ).setBranchAlias( alias );
198  produces<vector<float> >( alias = zName + "Dau1dxyFromPV" ).setBranchAlias( alias );
199  produces<vector<float> >( alias = zName + "Dau2dxyFromPV" ).setBranchAlias( alias );
200  produces<vector<float> >( alias = zName + "Dau1dzFromPV" ).setBranchAlias( alias );
201  produces<vector<float> >( alias = zName + "Dau2dzFromPV" ).setBranchAlias( alias );
202  produces<vector<float> >( alias = zName + "TrueMass" ).setBranchAlias( alias );
203  produces<vector<float> >( alias = zName + "TruePt" ).setBranchAlias( alias );
204  produces<vector<float> >( alias = zName + "TrueEta" ).setBranchAlias( alias );
205  produces<vector<float> >( alias = zName + "TruePhi" ).setBranchAlias( alias );
206  produces<vector<float> >( alias = zName + "TrueY" ).setBranchAlias( alias );
207  }
208 }
209 
210 
211 
213  Handle<reco::BeamSpot> beamSpotHandle;
214  if (!evt.getByToken(beamSpotToken_, beamSpotHandle)) {
215  std::cout << ">>> No beam spot found !!!"<<std::endl;
216  }
217  Handle<reco::VertexCollection> primaryVertices; // Collection of primary Vertices
218  if (!evt.getByToken(primaryVerticesToken_, primaryVertices)){
219  std::cout << ">>> No primary verteces found !!!"<<std::endl;
220  }
221 
222  unsigned int size = zTokens_.size();
223  for( unsigned int c = 0; c < size; ++ c ) {
224  Handle<CandidateView> zColl;
225  evt.getByToken( zTokens_[c], zColl );
226  bool isMCMatchTrue = false;
227  //if (zGenParticlesMatchTokens_[c] != "") isMCMatchTrue = true;
228  Handle<GenParticleMatch> zGenParticlesMatch;
229  if (evt.getByToken( zGenParticlesMatchTokens_[c], zGenParticlesMatch )) {
230  isMCMatchTrue=true;
231  }
232  unsigned int zSize = zColl->size();
233  auto_ptr<vector<unsigned int> > event( new vector<unsigned int> );
234  auto_ptr<vector<unsigned int> > run( new vector<unsigned int> );
235  auto_ptr<vector<unsigned int> > lumi( new vector<unsigned int > );
236  auto_ptr<vector<float> > zMass( new vector<float> );
237  auto_ptr<vector<float> > zMassSa( new vector<float> );
238  auto_ptr<vector<float> > zPt( new vector<float> );
239  auto_ptr<vector<float> > zEta( new vector<float> );
240  auto_ptr<vector<float> > zPhi( new vector<float> );
241  auto_ptr<vector<float> > zY( new vector<float> );
242  auto_ptr<vector<float> > zDau1Pt( new vector<float> );
243  auto_ptr<vector<float> > zDau2Pt( new vector<float> );
244  auto_ptr<vector<float> > zDau1SaPt( new vector<float> );
245  auto_ptr<vector<float> > zDau2SaPt( new vector<float> );
246  auto_ptr<vector<unsigned int> > zDau1HLTBit( new vector<unsigned int> );
247  auto_ptr<vector<unsigned int> > zDau2HLTBit( new vector<unsigned int> );
248  auto_ptr<vector<int> > zDau1Q( new vector<int> );
249  auto_ptr<vector<int> > zDau2Q( new vector<int> );
250  auto_ptr<vector<float> > zDau1Eta( new vector<float> );
251  auto_ptr<vector<float> > zDau2Eta( new vector<float> );
252  auto_ptr<vector<float> > zDau1SaEta( new vector<float> );
253  auto_ptr<vector<float> > zDau2SaEta( new vector<float> );
254  auto_ptr<vector<float> > zDau1Phi( new vector<float> );
255  auto_ptr<vector<float> > zDau2Phi( new vector<float> );
256  auto_ptr<vector<float> > zDau1SaPhi( new vector<float> );
257  auto_ptr<vector<float> > zDau2SaPhi( new vector<float> );
258  auto_ptr<vector<float> > zDau1Iso( new vector<float> );
259  auto_ptr<vector<float> > zDau2Iso( new vector<float> );
260  auto_ptr<vector<float> > zDau1TrkIso( new vector<float> );
261  auto_ptr<vector<float> > zDau2TrkIso( new vector<float> );
262  auto_ptr<vector<float> > zDau1EcalIso( new vector<float> );
263  auto_ptr<vector<float> > zDau2EcalIso( new vector<float> );
264  auto_ptr<vector<float> > zDau1HcalIso( new vector<float> );
265  auto_ptr<vector<float> > zDau2HcalIso( new vector<float> );
266  auto_ptr<vector<float> > zDau1MuEnergyEm( new vector<float> );
267  auto_ptr<vector<float> > zDau2MuEnergyEm( new vector<float> );
268  auto_ptr<vector<float> > zDau1MuEnergyHad( new vector<float> );
269  auto_ptr<vector<float> > zDau2MuEnergyHad( new vector<float> );
270  auto_ptr<vector<float> > vtxNormChi2( new vector<float> );
271  auto_ptr<vector<unsigned int> > zDau1NofHit( new vector<unsigned int> );
272  auto_ptr<vector<unsigned int> > zDau2NofHit( new vector<unsigned int> );
273  auto_ptr<vector<unsigned int> > zDau1NofHitTk( new vector<unsigned int> );
274  auto_ptr<vector<unsigned int> > zDau2NofHitTk( new vector<unsigned int> );
275  auto_ptr<vector<unsigned int> > zDau1NofHitSta( new vector<unsigned int> );
276  auto_ptr<vector<unsigned int> > zDau2NofHitSta( new vector<unsigned int> );
277  auto_ptr<vector<unsigned int> > zDau1NofMuChambers( new vector<unsigned int> );
278  auto_ptr<vector<unsigned int> > zDau2NofMuChambers( new vector<unsigned int> );
279  auto_ptr<vector<unsigned int> > zDau1NofMuMatches( new vector<unsigned int> );
280  auto_ptr<vector<unsigned int> > zDau2NofMuMatches( new vector<unsigned int> );
281  auto_ptr<vector<float> > zDau1Chi2( new vector<float> );
282  auto_ptr<vector<float> > zDau2Chi2( new vector<float> );
283  auto_ptr<vector<float> > zDau1TrkChi2( new vector<float> );
284  auto_ptr<vector<float> > zDau2TrkChi2( new vector<float> );
285  auto_ptr<vector<float> > zDau1dxyFromBS( new vector<float> );
286  auto_ptr<vector<float> > zDau2dxyFromBS( new vector<float> );
287  auto_ptr<vector<float> > zDau1dzFromBS( new vector<float> );
288  auto_ptr<vector<float> > zDau2dzFromBS( new vector<float> );
289  auto_ptr<vector<float> > zDau1dxyFromPV( new vector<float> );
290  auto_ptr<vector<float> > zDau2dxyFromPV( new vector<float> );
291  auto_ptr<vector<float> > zDau1dzFromPV( new vector<float> );
292  auto_ptr<vector<float> > zDau2dzFromPV( new vector<float> );
293  auto_ptr<vector<float> > trueZMass( new vector<float> );
294  auto_ptr<vector<float> > trueZPt( new vector<float> );
295  auto_ptr<vector<float> > trueZEta( new vector<float> );
296  auto_ptr<vector<float> > trueZPhi( new vector<float> );
297  auto_ptr<vector<float> > trueZY( new vector<float> );
298  event -> push_back(evt.id().event());
299  run -> push_back(evt.id().run());
300  lumi -> push_back(evt.luminosityBlock());
301  for( unsigned int i = 0; i < zSize; ++ i ) {
302  const Candidate & z = (*zColl)[ i ];
303  CandidateBaseRef zRef = zColl->refAt(i);
304  zMass->push_back( z.mass() );
305  zPt->push_back( z.pt() );
306  zEta->push_back( z.eta() );
307  zPhi->push_back( z.phi() );
308  zY->push_back( z.rapidity() );
309  vtxNormChi2->push_back(z.vertexNormalizedChi2() );
310  const Candidate * dau1 = z.daughter(0);
311  const Candidate * dau2 = z.daughter(1);
312  zDau1Pt->push_back( dau1->pt() );
313  zDau2Pt->push_back( dau2->pt() );
314  zDau1Q->push_back( dau1->charge() );
315  zDau2Q->push_back( dau2->charge() );
316  zDau1Eta->push_back( dau1->eta() );
317  zDau2Eta->push_back( dau2->eta() );
318  zDau1Phi->push_back( dau1->phi() );
319  zDau2Phi->push_back( dau2->phi() );
320  if(!(dau1->hasMasterClone()&&dau2->hasMasterClone()))
322  << "Candidate daughters have no master clone\n";
323  const CandidateBaseRef & mr1 = dau1->masterClone(), & mr2 = dau2->masterClone();
324 
325  const Candidate * m1 = &*mr1, * m2 = &*mr2;
326 
327  // isolation as defined by us into the analyzer
328  double iso1 = candIsolation(m1,ptThreshold_[c], etEcalThreshold_[c], etHcalThreshold_[c] ,dRVetoTrk_[c], dRTrk_[c], dREcal_[c] , dRHcal_[c], alpha_[c], beta_[c], relativeIsolation_[c]);
329  double iso2 = candIsolation(m2,ptThreshold_[c], etEcalThreshold_[c], etHcalThreshold_[c] ,dRVetoTrk_[c], dRTrk_[c], dREcal_[c] , dRHcal_[c], alpha_[c], beta_[c], relativeIsolation_[c] );
330  // tracker isolation : alpha =0
331  double trkIso1 = candIsolation(m1,ptThreshold_[c], etEcalThreshold_[c], etHcalThreshold_[c] ,dRVetoTrk_[c], dRTrk_[c], dREcal_[c] , dRHcal_[c], 0.0, beta_[c], relativeIsolation_[c]);
332  double trkIso2 = candIsolation(m2,ptThreshold_[c], etEcalThreshold_[c], etHcalThreshold_[c] ,dRVetoTrk_[c], dRTrk_[c], dREcal_[c] , dRHcal_[c], 0.0, beta_[c], relativeIsolation_[c] );
333  // ecal isolation : alpha =1, beta =1
334  double ecalIso1 = candIsolation(m1,ptThreshold_[c], etEcalThreshold_[c], etHcalThreshold_[c] ,dRVetoTrk_[c], dRTrk_[c], dREcal_[c] , dRHcal_[c], 1.0, 1.0, relativeIsolation_[c]);
335  double ecalIso2 = candIsolation(m2,ptThreshold_[c], etEcalThreshold_[c], etHcalThreshold_[c] ,dRVetoTrk_[c], dRTrk_[c], dREcal_[c] , dRHcal_[c], 1.0, 1.0, relativeIsolation_[c] );
336  // hcal isolation : alpha =1, beta =-1
337  double hcalIso1 = candIsolation(m1,ptThreshold_[c], etEcalThreshold_[c], etHcalThreshold_[c] ,dRVetoTrk_[c], dRTrk_[c], dREcal_[c] , dRHcal_[c], 1.0, -1.0, relativeIsolation_[c]);
338  double hcalIso2 = candIsolation(m2,ptThreshold_[c], etEcalThreshold_[c], etHcalThreshold_[c] ,dRVetoTrk_[c], dRTrk_[c], dREcal_[c] , dRHcal_[c], 1.0, -1.0, relativeIsolation_[c] );
339 
340  zDau1Iso->push_back( iso1 );
341  zDau2Iso->push_back( iso2 );
342  zDau1TrkIso->push_back( trkIso1 );
343  zDau2TrkIso->push_back( trkIso2 );
344  zDau1EcalIso->push_back( ecalIso1 );
345  zDau2EcalIso->push_back( ecalIso2 );
346  zDau1HcalIso->push_back( hcalIso1 );
347  zDau2HcalIso->push_back( hcalIso2 );
348  if (isMCMatchTrue){
349  GenParticleRef trueZRef = (*zGenParticlesMatch)[zRef];
350  //CandidateRef trueZRef = trueZIter->val;
351  if( trueZRef.isNonnull() ) {
352  const Candidate & z = * trueZRef;
353  trueZMass->push_back( z.mass() );
354  trueZPt->push_back( z.pt() );
355  trueZEta->push_back( z.eta() );
356  trueZPhi->push_back( z.phi() );
357  trueZY->push_back( z.rapidity() );
358  } else {
359  trueZMass->push_back( -100 );
360  trueZPt->push_back( -100 );
361  trueZEta->push_back( -100 );
362  trueZPhi->push_back( -100 );
363  trueZY->push_back( -100 );
364  }
365  }
366  // quality variables
367  const pat::Muon * mu1 = dynamic_cast<const pat::Muon*>(m1);
368  // protection for standalone and trackerMuon
369  if (mu1->isGlobalMuon() == true){
370  zDau1NofHit->push_back(mu1->numberOfValidHits());
371  zDau1NofHitTk->push_back(mu1->innerTrack()->numberOfValidHits());
372  zDau1NofHitSta->push_back(mu1->outerTrack()->numberOfValidHits());
373  zDau1Chi2->push_back(mu1->normChi2());
374  TrackRef mu1TrkRef = mu1->innerTrack();
375  zDau1TrkChi2->push_back( mu1TrkRef->normalizedChi2());
376  zDau1dxyFromBS->push_back(mu1TrkRef->dxy(beamSpotHandle->position()));
377  zDau1dzFromBS->push_back(mu1TrkRef->dz(beamSpotHandle->position()));
378  zDau1dxyFromPV->push_back(mu1TrkRef->dxy(primaryVertices->begin()->position() ));
379  zDau1dzFromPV->push_back(mu1TrkRef->dz(primaryVertices->begin()->position() ));
380  zDau1MuEnergyEm->push_back( mu1->calEnergy().em);
381  zDau1MuEnergyHad->push_back( mu1->calEnergy().had);
382 
383  } else if (mu1->isStandAloneMuon() == true) {
384  // the muon is a standalone
385  TrackRef mu1StaRef = mu1->outerTrack();
386  zDau1NofHit->push_back(mu1StaRef->numberOfValidHits());
387  zDau1NofHitTk->push_back(0);
388  zDau1NofHitSta->push_back(mu1StaRef->numberOfValidHits());
389  zDau1Chi2->push_back(mu1StaRef->normalizedChi2());
390  zDau1TrkChi2->push_back(0);
391  zDau1dxyFromBS->push_back(mu1StaRef->dxy(beamSpotHandle->position()));
392  zDau1dzFromBS->push_back(mu1StaRef->dz(beamSpotHandle->position()));
393  zDau1dxyFromPV->push_back(mu1StaRef->dxy(primaryVertices->begin()->position() ));
394  zDau1dzFromPV->push_back(mu1StaRef->dz(primaryVertices->begin()->position() ));
395  zDau1MuEnergyEm->push_back( -1);
396  zDau1MuEnergyHad->push_back( -1);
397  } else if (mu1->isTrackerMuon() == true) {
398  // the muon is a trackerMuon
399  TrackRef mu1TrkRef = mu1->innerTrack();
400  zDau1NofHit->push_back(mu1TrkRef->numberOfValidHits());
401  zDau1NofHitTk->push_back(mu1TrkRef->numberOfValidHits());
402  zDau1NofHitSta->push_back(0);
403  zDau1Chi2->push_back(mu1TrkRef->normalizedChi2());
404  zDau1TrkChi2->push_back(mu1TrkRef->normalizedChi2());
405  zDau1dxyFromBS->push_back(mu1TrkRef->dxy(beamSpotHandle->position()));
406  zDau1dzFromBS->push_back(mu1TrkRef->dz(beamSpotHandle->position()));
407  zDau1dxyFromPV->push_back(mu1TrkRef->dxy(primaryVertices->begin()->position() ));
408  zDau1dzFromPV->push_back(mu1TrkRef->dz(primaryVertices->begin()->position() ));
409  zDau1MuEnergyEm->push_back( mu1->calEnergy().em);
410  zDau1MuEnergyHad->push_back( mu1->calEnergy().had);
411  }
412  zDau1NofMuChambers->push_back(mu1->numberOfChambers());
413  zDau1NofMuMatches->push_back(mu1->numberOfMatches());
414 
415  // would we like to add another variables???
416  // HLT trigger bit
417  const pat::TriggerObjectStandAloneCollection mu1HLTMatches = mu1->triggerObjectMatchesByPath( hltPath_[c] );
418 
419  int dimTrig1 = mu1HLTMatches.size();
420  if(dimTrig1 !=0 ){
421  zDau1HLTBit->push_back(1);
422  } else {
423  zDau1HLTBit->push_back(0);
424  }
425  const pat::Muon * mu2 = dynamic_cast<const pat::Muon*>(m2);
426  if (mu2!=0 ) {
427  if (mu2->isGlobalMuon() == true) {
428  zDau2NofHit->push_back(mu2->numberOfValidHits());
429  zDau2NofHitTk->push_back(mu2->innerTrack()->numberOfValidHits());
430  zDau2NofHitSta->push_back(mu2->outerTrack()->numberOfValidHits());
431  zDau2Chi2->push_back(mu2->normChi2());
432  TrackRef mu2TrkRef = mu2->innerTrack();
433  zDau1TrkChi2->push_back( mu2TrkRef->normalizedChi2());
434  zDau2dxyFromBS->push_back(mu2TrkRef->dxy(beamSpotHandle->position()));
435  zDau2dzFromBS->push_back(mu2TrkRef->dz(beamSpotHandle->position()));
436  zDau2dxyFromPV->push_back(mu2TrkRef->dxy(primaryVertices->begin()->position() ));
437  zDau2dzFromPV->push_back(mu2TrkRef->dz(primaryVertices->begin()->position() ));
438  zDau2MuEnergyEm->push_back( mu2->calEnergy().em);
439  zDau2MuEnergyHad->push_back( mu2->calEnergy().had);
440  } else if (mu2->isStandAloneMuon() == true){
441  // its' a standalone
442  zDau2HLTBit->push_back(0);
443  TrackRef mu2StaRef = mu2->outerTrack();
444  zDau2NofHit->push_back(mu2StaRef->numberOfValidHits());
445  zDau2NofHitTk->push_back(0);
446  zDau2NofHitSta->push_back(mu2StaRef->numberOfValidHits());
447  zDau2Chi2->push_back(mu2StaRef->normalizedChi2());
448  zDau2TrkChi2->push_back(0);
449  zDau2dxyFromBS->push_back(mu2StaRef->dxy(beamSpotHandle->position()));
450  zDau2dzFromBS->push_back(mu2StaRef->dz(beamSpotHandle->position()));
451  zDau2dxyFromPV->push_back(mu2StaRef->dxy(primaryVertices->begin()->position() ));
452  zDau2dzFromPV->push_back(mu2StaRef->dz(primaryVertices->begin()->position() ));
453  zDau1MuEnergyEm->push_back( -1);
454  zDau1MuEnergyHad->push_back( -1);
455  } else if (mu2->isTrackerMuon() == true) {
456  // the muon is a trackerMuon
457  TrackRef mu2TrkRef = mu2->innerTrack();
458  zDau2NofHit->push_back(mu2TrkRef->numberOfValidHits());
459  zDau2NofHitSta->push_back(0);
460  zDau2NofHitTk->push_back(mu2TrkRef->numberOfValidHits());
461  zDau2Chi2->push_back(mu2TrkRef->normalizedChi2());
462  zDau2TrkChi2->push_back(mu2TrkRef->normalizedChi2());
463  zDau2dxyFromBS->push_back(mu2TrkRef->dxy(beamSpotHandle->position()));
464  zDau2dzFromBS->push_back(mu2TrkRef->dz(beamSpotHandle->position()));
465  zDau2dxyFromPV->push_back(mu2TrkRef->dxy(primaryVertices->begin()->position() ));
466  zDau2dzFromPV->push_back(mu2TrkRef->dz(primaryVertices->begin()->position() ));
467  zDau2MuEnergyEm->push_back( mu2->calEnergy().em);
468  zDau2MuEnergyHad->push_back( mu2->calEnergy().had);
469  }
470 
471  // HLT trigger bit
472  const pat::TriggerObjectStandAloneCollection mu2HLTMatches = mu2->triggerObjectMatchesByPath( hltPath_[c] );
473  int dimTrig2 = mu2HLTMatches.size();
474  if(dimTrig2 !=0 ){
475  zDau2HLTBit->push_back(1);
476  }
477  else {
478  zDau2HLTBit->push_back(0);
479  }
481  if ( mu1->isGlobalMuon() && mu2->isGlobalMuon() ) {
482  TrackRef stAloneTrack1;
483  TrackRef stAloneTrack2;
484  Vector momentum;
486  double mu_mass;
487  stAloneTrack1 = dau1->get<TrackRef,reco::StandAloneMuonTag>();
488  stAloneTrack2 = dau2->get<TrackRef,reco::StandAloneMuonTag>();
489  zDau1SaEta->push_back(stAloneTrack1->eta());
490  zDau2SaEta->push_back(stAloneTrack2->eta());
491  zDau1SaPhi->push_back(stAloneTrack1->phi());
492  zDau2SaPhi->push_back(stAloneTrack2->phi());
493  if(counter % 2 == 0) {
494  momentum = stAloneTrack1->momentum();
495  p4_1 = dau2->polarP4();
496  mu_mass = dau1->mass();
498  zDau1SaPt->push_back(stAloneTrack1 ->pt());
499  zDau2SaPt->push_back(- stAloneTrack2->pt());
500  }else{
501  momentum = stAloneTrack2->momentum();
502  p4_1= dau1->polarP4();
503  mu_mass = dau2->mass();
505  zDau1SaPt->push_back( - stAloneTrack1->pt());
506  zDau2SaPt->push_back( stAloneTrack2->pt());
507  }
508 
509  Candidate::PolarLorentzVector p4_2(momentum.rho(), momentum.eta(),momentum.phi(), mu_mass);
510  double mass = (p4_1+p4_2).mass();
511  zMassSa->push_back(mass);
512  ++counter;
513  }
514 
515 
516  zDau2NofMuChambers->push_back(mu2->numberOfChambers());
517  zDau2NofMuMatches->push_back(mu2->numberOfMatches());
518  } else{
519  // for ZMuTk case...
520  // it's a track......
521  const pat::GenericParticle * trk2 = dynamic_cast<const pat::GenericParticle*>(m2);
522  TrackRef mu2TrkRef = trk2->track();
523  zDau2NofHit->push_back(mu2TrkRef->numberOfValidHits());
524  zDau2NofHitTk->push_back( mu2TrkRef->numberOfValidHits());
525  zDau2NofHitSta->push_back( 0);
526  zDau2NofMuChambers->push_back(0);
527  zDau2NofMuMatches->push_back(0);
528  zDau2Chi2->push_back(mu2TrkRef->normalizedChi2());
529  zDau2dxyFromBS->push_back(mu2TrkRef->dxy(beamSpotHandle->position()));
530  zDau2dzFromBS->push_back(mu2TrkRef->dz(beamSpotHandle->position()));
531  zDau2dxyFromPV->push_back(mu2TrkRef->dxy(primaryVertices->begin()->position() ));
532  zDau2dzFromPV->push_back(mu2TrkRef->dz(primaryVertices->begin()->position() ));
533  zDau1MuEnergyEm->push_back( -1);
534  zDau1MuEnergyHad->push_back( -1);
535  }
536  }
537  const string & zName = zName_[c];
538  evt.put( event,zName + "EventNumber" );
539  evt.put( run, zName + "RunNumber" );
540  evt.put( lumi,zName + "LumiBlock" );
541  evt.put( zMass, zName + "Mass" );
542  evt.put( zMassSa, zName + "MassSa" );
543  evt.put( zPt, zName + "Pt" );
544  evt.put( zEta, zName + "Eta" );
545  evt.put( zPhi, zName + "Phi" );
546  evt.put( zY, zName + "Y" );
547  evt.put( zDau1Pt, zName + "Dau1Pt" );
548  evt.put( zDau2Pt, zName + "Dau2Pt" );
549  evt.put( zDau1SaPt, zName + "Dau1SaPt" );
550  evt.put( zDau2SaPt, zName + "Dau2SaPt" );
551  evt.put( zDau1HLTBit, zName + "Dau1HLTBit" );
552  evt.put( zDau2HLTBit, zName + "Dau2HLTBit" );
553  evt.put( zDau1Q, zName + "Dau1Q" );
554  evt.put( zDau2Q, zName + "Dau2Q" );
555  evt.put( zDau1Eta, zName + "Dau1Eta" );
556  evt.put( zDau2Eta, zName + "Dau2Eta" );
557  evt.put( zDau1SaEta, zName + "Dau1SaEta" );
558  evt.put( zDau2SaEta, zName + "Dau2SaEta" );
559  evt.put( zDau1Phi, zName + "Dau1Phi" );
560  evt.put( zDau2Phi, zName + "Dau2Phi" );
561  evt.put( zDau1SaPhi, zName + "Dau1SaPhi" );
562  evt.put( zDau2SaPhi, zName + "Dau2SaPhi" );
563  evt.put( zDau1Iso, zName + "Dau1Iso" );
564  evt.put( zDau2Iso, zName + "Dau2Iso" );
565  evt.put( zDau1TrkIso, zName + "Dau1TrkIso" );
566  evt.put( zDau2TrkIso, zName + "Dau2TrkIso" );
567  evt.put( zDau1EcalIso, zName + "Dau1EcalIso" );
568  evt.put( zDau2EcalIso, zName + "Dau2EcalIso" );
569  evt.put( zDau1HcalIso, zName + "Dau1HcalIso" );
570  evt.put( zDau2HcalIso, zName + "Dau2HcalIso" );
571  evt.put( zDau1MuEnergyEm, zName + "Dau1MuEnergyEm" );
572  evt.put( zDau2MuEnergyEm, zName + "Dau2MuEnergyEm" );
573  evt.put( zDau1MuEnergyHad, zName + "Dau1MuEnergyHad" );
574  evt.put( zDau2MuEnergyHad, zName + "Dau2MuEnergyHad" );
575  evt.put( vtxNormChi2, zName + "VtxNormChi2" );
576  evt.put( zDau1NofHit, zName + "Dau1NofHit" );
577  evt.put( zDau2NofHit, zName + "Dau2NofHit" );
578  evt.put( zDau1NofHitTk, zName + "Dau1NofHitTk" );
579  evt.put( zDau2NofHitTk, zName + "Dau2NofHitTk" );
580  evt.put( zDau1NofHitSta, zName + "Dau1NofHitSta" );
581  evt.put( zDau2NofHitSta, zName + "Dau2NofHitSta" );
582  evt.put( zDau1NofMuChambers, zName + "Dau1NofMuChambers" );
583  evt.put( zDau1NofMuMatches, zName + "Dau1NofMuMatches" );
584  evt.put( zDau2NofMuChambers, zName + "Dau2NofMuChambers" );
585  evt.put( zDau2NofMuMatches, zName + "Dau2NofMuMatches" );
586  evt.put( zDau1Chi2, zName + "Dau1Chi2" );
587  evt.put( zDau2Chi2, zName + "Dau2Chi2" );
588  evt.put( zDau1TrkChi2, zName + "Dau1TrkChi2" );
589  evt.put( zDau2TrkChi2, zName + "Dau2TrkChi2" );
590  evt.put( zDau1dxyFromBS, zName + "Dau1dxyFromBS" );
591  evt.put( zDau2dxyFromBS, zName + "Dau2dxyFromBS" );
592  evt.put( zDau1dxyFromPV, zName + "Dau1dxyFromPV" );
593  evt.put( zDau2dxyFromPV, zName + "Dau2dxyFromPV" );
594  evt.put( zDau1dzFromBS, zName + "Dau1dzFromBS" );
595  evt.put( zDau2dzFromBS, zName + "Dau2dzFromBS" );
596  evt.put( zDau1dzFromPV, zName + "Dau1dzFromPV" );
597  evt.put( zDau2dzFromPV, zName + "Dau2dzFromPV" );
598  evt.put( trueZMass, zName + "TrueMass" );
599  evt.put( trueZPt, zName + "TruePt" );
600  evt.put( trueZEta, zName + "TrueEta" );
601  evt.put( trueZPhi, zName + "TruePhi" );
602  evt.put( trueZY, zName + "TrueY" );
603 }
604 }
605 
607 
609 
RunNumber_t run() const
Definition: EventID.h:42
const double beta
std::vector< std::string > zName_
double normChi2() const
Norm chi2 gives the normalized chi2 of the global track.
Definition: Muon.cc:384
T getParameter(std::string const &) const
EventNumber_t event() const
Definition: EventID.h:44
int i
Definition: DBlmapReader.cc:9
unsigned int numberOfValidHits() const
numberOfValidHits returns the number of valid hits on the global track.
Definition: Muon.cc:397
float alpha
Definition: AMPTWrapper.h:95
reco::TrackRef innerTrack() const
reference to Track reconstructed in the tracker only (reimplemented from reco::Muon) ...
Definition: Muon.h:73
virtual const Candidate * daughter(size_type i) const =0
return daughter at a given position, i = 0, ... numberOfDaughters() - 1 (read only mode) ...
edm::EDGetTokenT< VertexCollection > primaryVerticesToken_
virtual float mass() const =0
mass
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:434
edm::EDGetTokenT< BeamSpot > beamSpotToken_
virtual float eta() const =0
momentum pseudorapidity
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
tuple lumi
Definition: fjr2json.py:35
bool isTrackerMuon() const
Definition: Muon.h:219
std::vector< double > ptThreshold_
void produce(edm::Event &, const edm::EventSetup &) override
stand alone muon component tag
Definition: RecoCandidate.h:72
bool isGlobalMuon() const
Definition: Muon.h:218
edm::LuminosityBlockNumber_t luminosityBlock() const
Definition: EventBase.h:59
virtual float phi() const =0
momentum azimuthal angle
virtual double rapidity() const =0
rapidity
std::vector< TriggerObjectStandAlone > TriggerObjectStandAloneCollection
Collection of TriggerObjectStandAlone.
bool isStandAloneMuon() const
Definition: Muon.h:220
reco::TrackRef outerTrack() const
reference to Track reconstructed in the muon detector only (reimplemented from reco::Muon) ...
Definition: Muon.h:77
virtual const PolarLorentzVector & polarP4() const =0
four-momentum Lorentz vector
float float float z
double sumWithin(double coneSize, const AbsVetos &vetos=AbsVetos(), bool skipDepositVeto=false) const
Definition: IsoDeposit.cc:138
std::vector< edm::EDGetTokenT< GenParticleMatch > > zGenParticlesMatchTokens_
bool isNonnull() const
Checks for non-null.
Definition: Ref.h:250
Analysis-level Generic Particle class (e.g. for hadron or muon not fully reconstructed) ...
virtual bool hasMasterClone() const =0
virtual float pt() const =0
transverse momentum
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:116
ZToLLEdmNtupleDumper(const edm::ParameterSet &)
virtual int charge() const =0
electric charge
virtual reco::TrackRef track() const
const int mu
Definition: Constants.h:22
const TriggerObjectStandAloneCollection triggerObjectMatchesByPath(const std::string &namePath, const bool pathLastFilterAccepted=false, const bool pathL3FilterAccepted=true) const
Definition: PATObject.h:596
double candIsolation(const reco::Candidate *c, double ptThreshold, double etEcalThreshold, double etHcalThreshold, double dRVetoTrk, double dRTrk, double dREcal, double dRHcal, double alpha, double beta, bool relativeIsolation)
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
virtual double vertexNormalizedChi2() const =0
chi-squared divided by n.d.o.f.
int numberOfMatches(ArbitrationType type=SegmentAndTrackArbitration) const
get number of chambers with matched segments
Definition: Muon.cc:60
MuonEnergy calEnergy() const
get energy deposition information
Definition: Muon.h:111
std::vector< string > hltPath_
std::vector< double > relativeIsolation_
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:30
int numberOfChambers() const
Definition: Muon.h:184
edm::Ref< TrackCollection > TrackRef
persistent reference to a Track
Definition: TrackFwd.h:14
edm::EventID id() const
Definition: EventBase.h:56
static std::atomic< unsigned int > counter
T get() const
get a component
Definition: Candidate.h:219
std::vector< edm::EDGetTokenT< CandidateView > > zTokens_
tuple cout
Definition: gather_cfg.py:121
dbl *** dir
Definition: mlp_gen.cc:35
isodeposit::AbsVetos AbsVetos
Definition: IsoDeposit.h:51
long double T
Analysis-level muon class.
Definition: Muon.h:50
tuple size
Write out results.
virtual const CandidateBaseRef & masterClone() const =0
math::PtEtaPhiMLorentzVector PolarLorentzVector
Lorentz vector.
Definition: Candidate.h:43