CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
TrackingTruthValid.cc
Go to the documentation of this file.
9 
12 
17 
19 
20 using namespace std;
21 using namespace ROOT::Math;
22 using namespace edm;
23 
25 typedef std::vector<TrackingParticle> TrackingParticleCollection;
26 
32 
33 
35 
37 
38  outputFile = conf.getParameter<std::string>("outputFile");
39  src_ = conf.getParameter<edm::InputTag>( "src" );
40 
42  dbe_->setCurrentFolder("Tracking/TrackingMCTruth/TrackingParticle");
43 
44 
45  meTPMass = dbe_->book1D("TPMass","Tracking Particle Mass",100, -1,+5.);
46  meTPCharge = dbe_->book1D("TPCharge","Tracking Particle Charge",10, -5, 5);
47  meTPId = dbe_->book1D("TPId","Tracking Particle Id",500, -5000, 5000);
48  meTPProc = dbe_->book1D("TPProc","Tracking Particle Proc",20, -0.5, 19.5);
49  meTPAllHits = dbe_->book1D("TPAllHits", "Tracking Particle All Hits", 200, -0.5, 199.5);
50  meTPMatchedHits = dbe_->book1D("TPMatchedHits", "Tracking Particle Matched Hits", 100, -0.5, 99.5);
51  meTPPt = dbe_->book1D("TPPt", "Tracking Particle Pt",100, 0, 100.);
52  meTPEta = dbe_->book1D("TPEta", "Tracking Particle Eta",100, -7., 7.);
53  meTPPhi = dbe_->book1D("TPPhi", "Tracking Particle Phi",100, -4., 4);
54  meTPVtxX = dbe_->book1D("TPVtxX", "Tracking Particle VtxX",100, -100, 100.);
55  meTPVtxY = dbe_->book1D("TPVtxY", "Tracking Particle VtxY",100, -100, 100.);
56  meTPVtxZ = dbe_->book1D("TPVtxZ", "Tracking Particle VtxZ",100, -100, 100.);
57  meTPtip = dbe_->book1D("TPtip", "Tracking Particle tip",100, 0, 1000.);
58  meTPlip = dbe_->book1D("TPlip", "Tracking Particle lip",100, 0, 100.);
59 
60 
61  // Prepare Axes Labels for Processes
62  meTPProc->setBinLabel( 1,"Undefined"); // value = 0
63  meTPProc->setBinLabel( 2,"Unknown"); // value = 1
64  meTPProc->setBinLabel( 3,"Primary"); // value = 2
65  meTPProc->setBinLabel( 4,"Hadronic"); // value = 3
66  meTPProc->setBinLabel( 5,"Decay"); // value = 4
67  meTPProc->setBinLabel( 6,"Compton"); // value = 5
68  meTPProc->setBinLabel( 7,"Annihilation"); // value = 6
69  meTPProc->setBinLabel( 8,"EIoni"); // value = 7
70  meTPProc->setBinLabel( 9,"HIoni"); // value = 8
71  meTPProc->setBinLabel(10,"MuIoni"); // value = 9
72  meTPProc->setBinLabel(11,"Photon"); // value = 10
73  meTPProc->setBinLabel(12,"MuPairProd"); // value = 11
74  meTPProc->setBinLabel(13,"Conversions"); // value = 12
75  meTPProc->setBinLabel(14,"EBrem"); // value = 13
76  meTPProc->setBinLabel(15,"SynchrotronRadiation"); // value = 14
77  meTPProc->setBinLabel(16,"MuBrem"); // value = 15
78  meTPProc->setBinLabel(17,"MuNucl"); // value = 16
79  meTPProc->setBinLabel(18,"");
80  meTPProc->setBinLabel(19,"");
81  meTPProc->setBinLabel(20,"");
82 }
83 
85  using namespace std;
86 
87  edm::Handle<TrackingParticleCollection> TruthTrackContainer ;
88  // edm::Handle<TrackingVertexCollection> TruthVertexContainer;
89 
90 
91  event.getByLabel(src_,TruthTrackContainer );
92 
93  // event.getByLabel(src_,TruthVertexContainer);
94 
95  // std::cout << "Using Collection " << src_ << std::endl;
96 
97  const TrackingParticleCollection *tPC = TruthTrackContainer.product();
98 
99  // const TrackingVertexCollection *tVC = TruthVertexContainer.product();
100 
101  /*
102  // Get and print HepMC event for comparison
103  edm::Handle<edm::HepMCProduct> hepMC;
104  event.getByLabel("source",hepMC);
105  const edm::HepMCProduct *mcp = hepMC.product();
106  // const HepMC::GenEvent *genEvent = mcp -> GetEvent();
107  */
108 
109  // cout << "Found " << tPC -> size() << " tracks and " << tVC -> size() << " vertices." <<endl;
110 
111 
112 // Loop over TrackingParticle's
113 
114  for (TrackingParticleCollection::const_iterator t = tPC -> begin(); t != tPC -> end(); ++t) {
115  //if(t -> trackerPSimHit().size() ==0) cout << " Track with 0 SimHit " << endl;
116 
117 
118  meTPMass->Fill(t->mass());
119 
120  meTPCharge->Fill(t->charge() );
121 
122  meTPId->Fill(t->pdgId());
123 
124  meTPPt->Fill(sqrt(t->momentum().perp2()));
125 
126  meTPEta->Fill(t->momentum().eta());
127 
128  meTPPhi->Fill(t->momentum().Phi());
129  std::vector<PSimHit> trackerPSimHit( t->trackPSimHit(DetId::Tracker) );
130  meTPAllHits->Fill(trackerPSimHit.size());
131  //get the process of the first hit
132  if(trackerPSimHit.size() !=0) meTPProc->Fill( trackerPSimHit.front().processType());
133  meTPMatchedHits->Fill(t->matchedHit());
134  meTPVtxX->Fill(t->vx());
135  meTPVtxY->Fill(t->vy());
136  meTPVtxZ->Fill(t->vz());
137  meTPtip->Fill(sqrt(t->vertex().perp2()));
138  meTPlip->Fill(t->vz());
139 
140  /*
141  // Compare momenta from sources
142  cout << "T.P. Track mass, Momentum, q , ID, & Event # "
143  << t -> mass() << " "
144  << t -> p4() << " " << t -> charge() << " "
145  << t -> pdgId() << " "
146  << t -> eventId().bunchCrossing() << "." << t -> eventId().event() << endl;
147 
148  if(t->mass() < 0) cout << "======= WARNING, this particle has negative mass: " << t->mass()
149  << " and pdgId: " << t->pdgId() << endl;
150  if(t->pdgId() == 0) cout << "======= WARNING, this particle has pdgId = 0: " << t->pdgId() << endl;
151  cout << " Hits for this track: " << t -> trackerPSimHit().size() << endl;
152  */
153 
154  /*
155  std::cout << std::endl << "### Tracking Particle ###" << std::endl;
156  std::cout << (*t) << std::endl;
157  std::cout << "\t Tracker: " << t->trackerPSimHit().size() << std::endl;
158  std::cout << "\t Muon: " << t->muonPSimHit().size() << std::endl;
159  std::cout << (*t) << std::endl;
160  */
161  } // End loop over TrackingParticle
162 
163  // Loop over TrackingVertex's
164  /*
165  cout << "Dumping sample vertex info" << endl;
166  for (TrackingVertexCollection::const_iterator v = tVC -> begin(); v != tVC -> end(); ++v) {
167  cout << " Vertex Position & Event #" << v -> position() << " " << v -> eventId().bunchCrossing() << "." << v -> eventId().event() << endl;
168  cout << " Associated with " << v -> daughterTracks().size() << " tracks" << endl;
169  // Get Geant and HepMC positions
170  for (genv_iterator genV = v -> genVertices_begin(); genV != v -> genVertices_end(); ++genV) {
171  cout << " HepMC vertex position " << (*(*genV)).position() << endl;
172  }
173  for (g4v_iterator g4V = v -> g4Vertices_begin(); g4V != v -> g4Vertices_end(); ++g4V) {
174  cout << " Geant vertex position " << (*g4V).position() << endl;
175  // Probably empty all the time, currently
176  }
177 
178  // Loop over daughter track(s)
179  for (tp_iterator iTP = v -> daughterTracks_begin(); iTP != v -> daughterTracks_end(); ++iTP) {
180  cout << " Daughter starts: " << (*(*iTP)).vertex();
181  for (g4t_iterator g4T = (*(*iTP)).g4Track_begin(); g4T != (*(*iTP)).g4Track_end(); ++g4T) {
182  cout << " p " << g4T->momentum();
183  }
184  cout << endl;
185  }
186 
187  // Loop over source track(s) (can be multiple since vertices are collapsed)
188  for (tp_iterator iTP = v -> sourceTracks_begin(); iTP != v -> sourceTracks_end(); ++iTP) {
189  cout << " Source starts: " << (*(*iTP)).vertex();
190  for (g4t_iterator g4T = (*iTP)->g4Track_begin(); g4T != (*iTP)->g4Track_end(); ++g4T) {
191  cout << ", p " << g4T ->momentum();
192  }
193  cout << endl;
194  }
195  } // End loop over TrackingVertex
196  */
197 
198 
199 }
200 
202 
203  if ( outputFile.size() != 0 && dbe_ ) dbe_->save(outputFile);
204 
205 }
T getParameter(std::string const &) const
virtual void beginJob()
Definition: EDAnalyzer.h:58
std::vector< TrackingParticle > TrackingParticleCollection
TrackingVertex::g4v_iterator g4v_iterator
std::vector< SimVertex >::const_iterator g4v_iterator
void save(const std::string &filename, const std::string &path="", const std::string &pattern="", const std::string &rewrite="", SaveReferenceTag ref=SaveWithReference, int minStatus=dqm::qstatus::STATUS_OK, const std::string &fileupdate="RECREATE")
Definition: DQMStore.cc:2113
TrackingParticleRefVector::iterator tp_iterator
TrackingParticle::genp_iterator genp_iterator
TrackingVertex::genv_iterator genv_iterator
T sqrt(T t)
Definition: SSEVec.h:46
#define end
Definition: vmac.h:38
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
edm::RefVector< TrackingParticleCollection > TrackingParticleContainer
DQMStore * dbe_
tuple conf
Definition: dbtoconf.py:185
std::vector< SimTrack >::const_iterator g4t_iterator
virtual void analyze(const edm::Event &, const edm::EventSetup &)
T const * product() const
Definition: Handle.h:74
#define begin
Definition: vmac.h:31
TrackingTruthValid(const edm::ParameterSet &conf)
TrackingParticle::g4t_iterator g4t_iterator