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  // event.getByLabel(src_,TruthVertexContainer);
93  // std::cout << "Using Collection " << src_ << std::endl;
94 
95  const TrackingParticleCollection *tPC = TruthTrackContainer.product();
96  // const TrackingVertexCollection *tVC = TruthVertexContainer.product();
97 
98  /*
99  // Get and print HepMC event for comparison
100  edm::Handle<edm::HepMCProduct> hepMC;
101  event.getByLabel("source",hepMC);
102  const edm::HepMCProduct *mcp = hepMC.product();
103  // const HepMC::GenEvent *genEvent = mcp -> GetEvent();
104  */
105  // cout << "Found " << tPC -> size() << " tracks and " << tVC -> size() << " vertices." <<endl;
106 
107 
108 // Loop over TrackingParticle's
109 
110  for (TrackingParticleCollection::const_iterator t = tPC -> begin(); t != tPC -> end(); ++t) {
111  //if(t -> trackerPSimHit().size() ==0) cout << " Track with 0 SimHit " << endl;
112 
113  meTPMass->Fill(t->mass());
114  meTPCharge->Fill(t->charge() );
115  meTPId->Fill(t->pdgId());
116  meTPPt->Fill(sqrt(t->momentum().perp2()));
117  meTPEta->Fill(t->momentum().eta());
118  meTPPhi->Fill(t->momentum().Phi());
119  //#warning "This file has been modified just to get it to compile without any regard as to whether it still functions as intended"
120  //#ifdef REMOVED_JUST_TO_GET_IT_TO_COMPILE__THIS_CODE_NEEDS_TO_BE_CHECKED
121  // std::vector<PSimHit> trackerPSimHit( t->trackPSimHit(DetId::Tracker) );
122  //#endif
123  meTPAllHits->Fill(t->numberOfTrackerHits());
124  //get the process of the first hit
125  //#warning "This file has been modified just to get it to compile without any regard as to whether it still functions as intended"
126  //#ifdef REMOVED_JUST_TO_GET_IT_TO_COMPILE__THIS_CODE_NEEDS_TO_BE_CHECKED
127  // if(trackerPSimHit.size() !=0) meTPProc->Fill( trackerPSimHit.front().processType());
128  //#endif
129 
130  // there is no more the PSimHits collection !!! how to deal w/ the processType ?
131  // if(t->numberOfTrackerHits() !=0) meTPProc->Fill( trackerPSimHit.front().processType());
132 
133  meTPMatchedHits->Fill(t->numberOfTrackerLayers());
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:59
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:2118
TrackingParticleRefVector::iterator tp_iterator
TrackingParticle::genp_iterator genp_iterator
TrackingVertex::genv_iterator genv_iterator
T sqrt(T t)
Definition: SSEVec.h:48
#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