CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
MuonTrackAnalyzer.cc
Go to the documentation of this file.
1 
8 
9 // Collaborating Class Header
14 
16 
20 
22 
24 
28 
31 
32 #include "TFile.h"
33 #include "TH1F.h"
34 #include "TH2F.h"
35 
36 using namespace std;
37 using namespace edm;
38 
41 
42  // service parameters
43  ParameterSet serviceParameters = pset.getParameter<ParameterSet>("ServiceParameters");
44  // the services
45  theService = new MuonServiceProxy(serviceParameters);
46 
47  theSimTracksLabel = edm::InputTag("g4SimHits");
48  theSimTracksToken = consumes<edm::SimTrackContainer>(theSimTracksLabel);
49 
50  theTracksLabel = pset.getParameter<InputTag>("Tracks");
51  theTracksToken = consumes<reco::TrackCollection>(theTracksLabel);
52  doTracksAnalysis = pset.getUntrackedParameter<bool>("DoTracksAnalysis",true);
53 
54  doSeedsAnalysis = pset.getUntrackedParameter<bool>("DoSeedsAnalysis",false);
55  if(doSeedsAnalysis){
56  theSeedsLabel = pset.getParameter<InputTag>("MuonSeed");
57  theSeedsToken = consumes<TrajectorySeedCollection>(theSeedsLabel);
58  ParameterSet updatorPar = pset.getParameter<ParameterSet>("MuonUpdatorAtVertexParameters");
59  theSeedPropagatorName = updatorPar.getParameter<string>("Propagator");
60 
61  theUpdator = new MuonUpdatorAtVertex(updatorPar,theService);
62  }
63 
64  theCSCSimHitLabel = pset.getParameter<InputTag>("CSCSimHit");
65  theDTSimHitLabel = pset.getParameter<InputTag>("DTSimHit");
66  theRPCSimHitLabel = pset.getParameter<InputTag>("RPCSimHit");
67  theCSCSimHitToken = consumes<std::vector<PSimHit> >(theCSCSimHitLabel);
68  theDTSimHitToken = consumes<std::vector<PSimHit> >(theDTSimHitLabel);
69  theRPCSimHitToken = consumes<std::vector<PSimHit> >(theRPCSimHitLabel);
70 
71  theEtaRange = (EtaRange) pset.getParameter<int>("EtaRange");
72 
73  // number of sim tracks
74  numberOfSimTracks=0;
75  // number of reco tracks
76  numberOfRecTracks=0;
77 
79  out = pset.getUntrackedParameter<string>("rootFileName");
80  dirName_ = pset.getUntrackedParameter<std::string>("dirName");
81 
82 }
83 
86  if (theService) delete theService;
87 }
88 
90 
91  //theFile->cd();
92 }
95 
96  dbe_->cd();
97  InputTag algo = theTracksLabel;
98  string dirName=dirName_;
99  if (algo.process()!="")
100  dirName+=algo.process()+"_";
101  if(algo.label()!="")
102  dirName+=algo.label()+"_";
103  if(algo.instance()!="")
104  dirName+=algo.instance()+"";
105  if (dirName.find("Tracks")<dirName.length()){
106  dirName.replace(dirName.find("Tracks"),6,"");
107  }
108  std::replace(dirName.begin(), dirName.end(), ':', '_');
109  dbe_->setCurrentFolder(dirName.c_str());
110 
111  //dbe_->goUp();
112  std::string simName = dirName;
113  simName+="/SimTracks";
114  hSimTracks = new HTrackVariables(simName.c_str(),"SimTracks");
115 
116  dbe_->cd();
117  dbe_->setCurrentFolder(dirName.c_str());
118 
119  // Create the root file
120  //theFile = new TFile(theRootFileName.c_str(), "RECREATE");
121 
122  if(doSeedsAnalysis){
123  dbe_->cd();
124  dbe_->setCurrentFolder(dirName.c_str());
125  hRecoSeedInner = new HTrack(dirName.c_str(),"RecoSeed","Inner");
126  hRecoSeedPCA = new HTrack(dirName.c_str(),"RecoSeed","PCA");
127  }
128 
129  if(doTracksAnalysis){
130  dbe_->cd();
131  dbe_->setCurrentFolder(dirName.c_str());
132  hRecoTracksPCA = new HTrack(dirName.c_str(),"RecoTracks","PCA");
133  hRecoTracksInner = new HTrack(dirName.c_str(),"RecoTracks","Inner");
134  hRecoTracksOuter = new HTrack(dirName.c_str(),"RecoTracks","Outer");
135 
136  dbe_->cd();
137  dbe_->setCurrentFolder(dirName.c_str());
138 
139  // General Histos
140 
141 
142  hChi2 = dbe_->book1D("chi2","#chi^2",200,0,200);
143  hChi2VsEta = dbe_->book2D("chi2VsEta","#chi^2 VS #eta",120,-3.,3.,200,0,200);
144 
145  hChi2Norm = dbe_->book1D("chi2Norm","Normalized #chi^2",400,0,100);
146  hChi2NormVsEta = dbe_->book2D("chi2NormVsEta","Normalized #chi^2 VS #eta",120,-3.,3.,400,0,100);
147 
148  hHitsPerTrack = dbe_->book1D("HitsPerTrack","Number of hits per track",55,0,55);
149  hHitsPerTrackVsEta = dbe_->book2D("HitsPerTrackVsEta","Number of hits per track VS #eta",
150  120,-3.,3.,55,0,55);
151 
152  hDof = dbe_->book1D("dof","Number of Degree of Freedom",55,0,55);
153  hDofVsEta = dbe_->book2D("dofVsEta","Number of Degree of Freedom VS #eta",120,-3.,3.,55,0,55);
154 
155  hChi2Prob = dbe_->book1D("chi2Prob","#chi^2 probability",200,0,1);
156  hChi2ProbVsEta = dbe_->book2D("chi2ProbVsEta","#chi^2 probability VS #eta",120,-3.,3.,200,0,1);
157 
158  hNumberOfTracks = dbe_->book1D("NumberOfTracks","Number of reconstructed tracks per event",200,0,200);
159  hNumberOfTracksVsEta = dbe_->book2D("NumberOfTracksVsEta",
160  "Number of reconstructed tracks per event VS #eta",
161  120,-3.,3.,10,0,10);
162 
163  hChargeVsEta = dbe_->book2D("ChargeVsEta","Charge vs #eta gen",120,-3.,3.,4,-2.,2.);
164  hChargeVsPt = dbe_->book2D("ChargeVsPt","Charge vs P_{T} gen",250,0,200,4,-2.,2.);
165  hPtRecVsPtGen = dbe_->book2D("PtRecVsPtGen","P_{T} rec vs P_{T} gen",250,0,200,250,0,200);
166 
167  hDeltaPtVsEta = dbe_->book2D("DeltaPtVsEta","#Delta P_{t} vs #eta gen",120,-3.,3.,500,-250.,250.);
168  hDeltaPt_In_Out_VsEta = dbe_->book2D("DeltaPt_In_Out_VsEta_","P^{in}_{t} - P^{out}_{t} vs #eta gen",120,-3.,3.,500,-250.,250.);
169  }
170 
171 }
172 
174 
175 }
177  LogInfo("MuonTrackAnalyzer")<< "Number of Sim tracks: " << numberOfSimTracks;
178 
179  LogInfo("MuonTrackAnalyzer") << "Number of Reco tracks: " << numberOfRecTracks;
180 
181 
182  if(doTracksAnalysis){
183  double eff = hRecoTracksPCA->computeEfficiency(hSimTracks);
184  LogInfo("MuonTrackAnalyzer") <<" *Track Efficiency* = "<< eff <<"%";
185  }
186 
187  if(doSeedsAnalysis){
188  double eff = hRecoSeedInner->computeEfficiency(hSimTracks);
189  LogInfo("MuonTrackAnalyzer")<<" *Seed Efficiency* = "<< eff <<"%";
190  }
191  if ( out.size() != 0 && dbe_ ) dbe_->save(out);
192 }
193 void MuonTrackAnalyzer::analyze(const Event & event, const EventSetup& eventSetup){
194 
195  LogDebug("MuonTrackAnalyzer") << "Run: " << event.id().run() << " Event: " << event.id().event();
196 
197  // Update the services
198  theService->update(eventSetup);
199 
200  Handle<SimTrackContainer> simTracks;
201  event.getByToken(theSimTracksToken,simTracks);
202  fillPlots(event,simTracks);
203 
204 
205  if(doTracksAnalysis)
206  tracksAnalysis(event,eventSetup,simTracks);
207 
208  if(doSeedsAnalysis)
209  seedsAnalysis(event,eventSetup,simTracks);
210 
211 
212 }
213 
214 void MuonTrackAnalyzer::seedsAnalysis(const Event & event, const EventSetup& eventSetup,
215  Handle<SimTrackContainer> simTracks){
216 
218 
219  // Get the RecTrack collection from the event
221  event.getByToken(theSeedsToken, seeds);
222 
223  LogTrace("MuonTrackAnalyzer")<<"Number of reconstructed seeds: " << seeds->size()<<endl;
224 
225  for(TrajectorySeedCollection::const_iterator seed = seeds->begin();
226  seed != seeds->end(); ++seed){
227  TrajectoryStateOnSurface seedTSOS = getSeedTSOS(*seed);
228  pair<SimTrack,double> sim = getSimTrack(seedTSOS,simTracks);
229  fillPlots(seedTSOS, sim.first,
230  hRecoSeedInner, debug);
231 
232  std::pair<bool,FreeTrajectoryState> propSeed =
233  theUpdator->propagateToNominalLine(seedTSOS);
234  if(propSeed.first)
235  fillPlots(propSeed.second, sim.first,
236  hRecoSeedPCA, debug);
237  else
238  LogTrace("MuonTrackAnalyzer")<<"Error in seed propagation"<<endl;
239 
240  }
241 }
242 
243 
244 void MuonTrackAnalyzer::tracksAnalysis(const Event & event, const EventSetup& eventSetup,
245  Handle<SimTrackContainer> simTracks){
247 
248 
249  // Get the RecTrack collection from the event
251  event.getByToken(theTracksToken, tracks);
252 
253  LogTrace("MuonTrackAnalyzer")<<"Reconstructed tracks: " << tracks->size() << endl;
254  hNumberOfTracks->Fill(tracks->size());
255 
256  if(tracks->size()) numberOfRecTracks++;
257 
258  // Loop over the Rec tracks
259  for(reco::TrackCollection::const_iterator t = tracks->begin(); t != tracks->end(); ++t) {
260 
261  reco::TransientTrack track(*t,&*theService->magneticField(),theService->trackingGeometry());
262 
263  TrajectoryStateOnSurface outerTSOS = track.outermostMeasurementState();
264  TrajectoryStateOnSurface innerTSOS = track.innermostMeasurementState();
265  TrajectoryStateOnSurface pcaTSOS = track.impactPointState();
266 
267  pair<SimTrack,double> sim = getSimTrack(pcaTSOS,simTracks);
268  SimTrack simTrack = sim.first;
269  hNumberOfTracksVsEta->Fill(simTrack.momentum().eta(), tracks->size());
270  fillPlots(track,simTrack);
271 
272  LogTrace("MuonTrackAnalyzer") << "State at the outer surface: " << endl;
273  fillPlots(outerTSOS,simTrack,hRecoTracksOuter,debug);
274 
275  LogTrace("MuonTrackAnalyzer") << "State at the inner surface: " << endl;
276  fillPlots(innerTSOS,simTrack,hRecoTracksInner,debug);
277 
278  LogTrace("MuonTrackAnalyzer") << "State at PCA: " << endl;
279  fillPlots(pcaTSOS,simTrack,hRecoTracksPCA,debug);
280 
281  double deltaPt_in_out = innerTSOS.globalMomentum().perp()-outerTSOS.globalMomentum().perp();
282  hDeltaPt_In_Out_VsEta->Fill(simTrack.momentum().eta(),deltaPt_in_out);
283 
284  double deltaPt_pca_sim = pcaTSOS.globalMomentum().perp()-sqrt(simTrack.momentum().Perp2());
285  hDeltaPtVsEta->Fill(simTrack.momentum().eta(),deltaPt_pca_sim);
286 
287  hChargeVsEta->Fill(simTrack.momentum().eta(),pcaTSOS.charge());
288 
289  hChargeVsPt->Fill(sqrt(simTrack.momentum().perp2()),pcaTSOS.charge());
290 
291  hPtRecVsPtGen->Fill(sqrt(simTrack.momentum().perp2()),pcaTSOS.globalMomentum().perp());
292  }
293  LogTrace("MuonTrackAnalyzer")<<"--------------------------------------------"<<endl;
294 }
295 
296 
297 
298 
300 
301  if(!checkMuonSimHitPresence(event,simTracks)) return;
302 
303  // Loop over the Sim tracks
304  SimTrackContainer::const_iterator simTrack;
305  LogTrace("MuonTrackAnalyzer")<<"Simulated tracks: "<<simTracks->size()<<endl;
306 
307  for (simTrack = simTracks->begin(); simTrack != simTracks->end(); ++simTrack)
308  if (abs((*simTrack).type()) == 13) {
309 
310  if( !isInTheAcceptance( (*simTrack).momentum().eta()) ) continue; // FIXME!!
311 
312  numberOfSimTracks++;
313 
314  LogTrace("MuonTrackAnalyzer")<<"Simualted muon:"<<endl;
315  LogTrace("MuonTrackAnalyzer")<<"Sim pT: "<<sqrt((*simTrack).momentum().perp2())<<endl;
316  LogTrace("MuonTrackAnalyzer")<<"Sim Eta: "<<(*simTrack).momentum().eta()<<endl; // FIXME
317 
318  hSimTracks->Fill((*simTrack).momentum().mag(),
319  sqrt((*simTrack).momentum().perp2()),
320  (*simTrack).momentum().eta(),
321  (*simTrack).momentum().phi(),
322  -(*simTrack).type()/ abs((*simTrack).type()) ); // Double FIXME
323  LogTrace("MuonTrackAnalyzer") << "hSimTracks filled" << endl;
324  }
325 
326  LogTrace("MuonTrackAnalyzer") << endl;
327 }
328 
329 
331 
332  LogTrace("MuonTrackAnalyzer")<<"Analizer: New track, chi2: "<<track.chi2()<<" dof: "<<track.ndof()<<endl;
333  hChi2->Fill(track.chi2());
334  hDof->Fill(track.ndof());
335  hChi2Norm->Fill(track.normalizedChi2());
336  hHitsPerTrack->Fill(track.recHitsSize());
337 
338  hChi2Prob->Fill( ChiSquaredProbability(track.chi2(),track.ndof()) );
339 
340  hChi2VsEta->Fill(simTrack.momentum().eta(),track.chi2());
341  hChi2NormVsEta->Fill(simTrack.momentum().eta(),track.normalizedChi2());
342  hChi2ProbVsEta->Fill(simTrack.momentum().eta(),ChiSquaredProbability(track.chi2(),track.ndof()));
343  hHitsPerTrackVsEta->Fill(simTrack.momentum().eta(),track.recHitsSize());
344  hDofVsEta->Fill(simTrack.momentum().eta(),track.ndof());
345 }
346 
347 
350 
351  LogTrace("MuonTrackAnalyzer") << debug.dumpTSOS(recoTSOS)<<endl;
352  histo->Fill(recoTSOS);
353 
354  GlobalVector tsosVect = recoTSOS.globalMomentum();
355  math::XYZVectorD reco(tsosVect.x(), tsosVect.y(), tsosVect.z());
356  double deltaRVal = deltaR<double>(reco.eta(),reco.phi(),
357  simTrack.momentum().eta(),simTrack.momentum().phi());
358  histo->FillDeltaR(deltaRVal);
359 
360  histo->computeResolutionAndPull(recoTSOS,simTrack);
361 }
362 
363 
366 
367  LogTrace("MuonTrackAnalyzer") << debug.dumpFTS(recoFTS)<<endl;
368  histo->Fill(recoFTS);
369 
370  GlobalVector ftsVect = recoFTS.momentum();
371  math::XYZVectorD reco(ftsVect.x(), ftsVect.y(), ftsVect.z());
372  double deltaRVal = deltaR<double>(reco.eta(),reco.phi(),
373  simTrack.momentum().eta(),simTrack.momentum().phi());
374  histo->FillDeltaR(deltaRVal);
375 
376  histo->computeResolutionAndPull(recoFTS,simTrack);
377 }
378 
380  Handle<SimTrackContainer> simTracks){
381 
382 // // Loop over the Sim tracks
383 // SimTrackContainer::const_iterator simTrack;
384 
385 // SimTrack result;
386 // int mu=0;
387 // for (simTrack = simTracks->begin(); simTrack != simTracks->end(); ++simTrack)
388 // if (abs((*simTrack).type()) == 13) {
389 // result = *simTrack;
390 // ++mu;
391 // }
392 
393 // if(mu != 1) LogTrace("MuonTrackAnalyzer") << "WARNING!! more than 1 simulated muon!!" <<endl;
394 // return result;
395 
396 
397  // Loop over the Sim tracks
398  SimTrackContainer::const_iterator simTrack;
399 
401 
402  double bestDeltaR = 10e5;
403  for (simTrack = simTracks->begin(); simTrack != simTracks->end(); ++simTrack){
404  if (abs((*simTrack).type()) != 13) continue;
405 
406  // double newDeltaR = tsos.globalMomentum().basicVector().deltaR(simTrack->momentum().vect());
407  GlobalVector tsosVect = tsos.globalMomentum();
408  math::XYZVectorD vect(tsosVect.x(), tsosVect.y(), tsosVect.z());
409  double newDeltaR = deltaR<double>(vect.eta(),vect.phi(),
410  simTrack->momentum().eta(),simTrack->momentum().phi());
411 
412  if ( newDeltaR < bestDeltaR ) {
413  LogTrace("MuonTrackAnalyzer") << "Matching Track with DeltaR = " << newDeltaR<<endl;
414  bestDeltaR = newDeltaR;
415  result = *simTrack;
416  }
417  }
418  return pair<SimTrack,double>(result,bestDeltaR);
419 }
420 
421 
423  switch(theEtaRange){
424  case all:
425  return ( abs(eta) <= 2.4 ) ? true : false;
426  case barrel:
427  return ( abs(eta) < 1.1 ) ? true : false;
428  case endcap:
429  return ( abs(eta) >= 1.1 && abs(eta) <= 2.4 ) ? true : false;
430  default:
431  {LogTrace("MuonTrackAnalyzer")<<"No correct Eta range selected!! "<<endl; return false;}
432  }
433 }
434 
437 
438  // Get the SimHit collection from the event
439  Handle<PSimHitContainer> dtSimHits;
440  event.getByToken(theDTSimHitToken, dtSimHits);
441  // event.getByToken(theDTSimHitLabel.instance(),theDTSimHitLabel.label(), dtSimHits);
442 
443  Handle<PSimHitContainer> cscSimHits;
444  event.getByToken(theCSCSimHitToken, cscSimHits);
445 
446  Handle<PSimHitContainer> rpcSimHits;
447  event.getByToken(theRPCSimHitToken, rpcSimHits);
448 
449  map<unsigned int, vector<const PSimHit*> > mapOfMuonSimHits;
450 
451  for(PSimHitContainer::const_iterator simhit = dtSimHits->begin();
452  simhit != dtSimHits->end(); ++simhit) {
453  if (abs(simhit->particleType()) != 13) continue;
454  mapOfMuonSimHits[simhit->trackId()].push_back(&*simhit);
455  }
456 
457  for(PSimHitContainer::const_iterator simhit = cscSimHits->begin();
458  simhit != cscSimHits->end(); ++simhit) {
459  if (abs(simhit->particleType()) != 13) continue;
460  mapOfMuonSimHits[simhit->trackId()].push_back(&*simhit);
461  }
462 
463  for(PSimHitContainer::const_iterator simhit = rpcSimHits->begin();
464  simhit != rpcSimHits->end(); ++simhit) {
465  if (abs(simhit->particleType()) != 13) continue;
466  mapOfMuonSimHits[simhit->trackId()].push_back(&*simhit);
467  }
468 
469  bool presence = false;
470 
471  for (SimTrackContainer::const_iterator simTrack = simTracks->begin();
472  simTrack != simTracks->end(); ++simTrack){
473 
474  if (abs(simTrack->type()) != 13) continue;
475 
476  map<unsigned int, vector<const PSimHit*> >::const_iterator mapIterator =
477  mapOfMuonSimHits.find(simTrack->trackId());
478 
479  if (mapIterator != mapOfMuonSimHits.end())
480  presence = true;
481  }
482 
483  return presence;
484 }
485 
487 
488  // Get the Trajectory State on Det (persistent version of a TSOS) from the seed
489  PTrajectoryStateOnDet pTSOD = seed.startingState();
490 
491  // Transform it in a TrajectoryStateOnSurface
492 
493 
494  DetId seedDetId(pTSOD.detId());
495 
496  const GeomDet* gdet = theService->trackingGeometry()->idToDet( seedDetId );
497 
498  TrajectoryStateOnSurface initialState = trajectoryStateTransform::transientState(pTSOD, &(gdet->surface()), &*theService->magneticField());
499 
500  // Get the layer on which the seed relies
501  const DetLayer *initialLayer = theService->detLayerGeometry()->idToLayer( seedDetId );
502 
504 
505  // ask for compatible layers
506  vector<const DetLayer*> detLayers;
507  detLayers = initialLayer->compatibleLayers( *initialState.freeState(),detLayerOrder);
508 
509  TrajectoryStateOnSurface result = initialState;
510  if(detLayers.size()){
511  const DetLayer* finalLayer = detLayers.back();
512  const TrajectoryStateOnSurface propagatedState = theService->propagator(theSeedPropagatorName)->propagate(initialState, finalLayer->surface());
513  if(propagatedState.isValid())
514  result = propagatedState;
515  }
516 
517  return result;
518 }
#define LogDebug(id)
virtual void beginJob()
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
virtual const BoundSurface & surface() const =0
The surface of the GeometricSearchDet.
void computeResolutionAndPull(TrajectoryStateOnSurface &vtx, SimTrack &simTrack)
Definition: HTrack.cc:152
T perp() const
Definition: PV3DBase.h:72
virtual ~MuonTrackAnalyzer()
Destructor.
std::pair< SimTrack, double > getSimTrack(TrajectoryStateOnSurface &tsos, edm::Handle< edm::SimTrackContainer > simTracks)
MonitorElement * book1D(const char *name, const char *title, int nchX, double lowX, double highX)
Book 1D histogram.
Definition: DQMStore.cc:872
bool checkMuonSimHitPresence(const edm::Event &event, edm::Handle< edm::SimTrackContainer > simTracks)
void cd(void)
go to top directory (ie. root)
Definition: DQMStore.cc:561
T y() const
Definition: PV3DBase.h:63
size_t recHitsSize() const
number of RecHits
PropagationDirection
TrajectoryStateOnSurface getSeedTSOS(const TrajectorySeed &seed)
T eta() const
void seedsAnalysis(const edm::Event &event, const edm::EventSetup &eventSetup, edm::Handle< edm::SimTrackContainer > simTracks)
Definition: sim.h:19
double chi2() const
chi-squared of the fit
MuonTrackAnalyzer(const edm::ParameterSet &pset)
Constructor.
std::string dumpFTS(const FreeTrajectoryState &fts) const
std::string dumpTSOS(const TrajectoryStateOnSurface &tsos) const
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > XYZVectorD
spatial vector with cartesian internal representation
Definition: Vector3D.h:8
T sqrt(T t)
Definition: SSEVec.h:48
bool isInTheAcceptance(double eta)
FreeTrajectoryState const * freeState(bool withErrors=true) const
T z() const
Definition: PV3DBase.h:64
tuple result
Definition: query.py:137
virtual void beginRun()
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
float ChiSquaredProbability(double chiSquared, double nrDOF)
void save(const std::string &filename, const std::string &path="", const std::string &pattern="", const std::string &rewrite="", const uint32_t run=0, SaveReferenceTag ref=SaveWithReference, int minStatus=dqm::qstatus::STATUS_OK, const std::string &fileupdate="RECREATE")
Definition: DQMStore.cc:2296
unsigned int detId() const
TH1F * hChi2
virtual void endRun()
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
void Fill(TrajectoryStateOnSurface &)
Definition: HTrack.cc:129
GlobalVector momentum() const
#define LogTrace(id)
DQMStore * dbe_
tuple out
Definition: dbtoconf.py:99
Definition: DetId.h:18
PTrajectoryStateOnDet const & startingState() const
#define debug
Definition: HDRShower.cc:19
TrajectoryStateOnSurface transientState(const PTrajectoryStateOnDet &ts, const Surface *surface, const MagneticField *field)
tuple tracks
Definition: testEve_cfg.py:39
double normalizedChi2() const
chi-squared divided by n.d.o.f.
std::string const & label() const
Definition: InputTag.h:42
double ndof() const
number of degrees of freedom of the fit
std::string const & process() const
Definition: InputTag.h:46
virtual void endJob()
void tracksAnalysis(const edm::Event &event, const edm::EventSetup &eventSetup, edm::Handle< edm::SimTrackContainer > simTracks)
GlobalVector globalMomentum() const
void analyze(const edm::Event &event, const edm::EventSetup &eventSetup)
const math::XYZTLorentzVectorD & momentum() const
particle info...
Definition: CoreSimTrack.h:36
void showDirStructure(void) const
Definition: DQMStore.cc:2961
void FillDeltaR(double)
Definition: HTrack.cc:142
MonitorElement * book2D(const char *name, const char *title, int nchX, double lowX, double highX, int nchY, double lowY, double highY)
Book 2D histogram.
Definition: DQMStore.cc:1000
T x() const
Definition: PV3DBase.h:62
Definition: HTrack.h:12
std::string const & instance() const
Definition: InputTag.h:43
void fillPlots(const edm::Event &event, edm::Handle< edm::SimTrackContainer > &simTracks)
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:584