CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
PrimaryVertexProducer.cc
Go to the documentation of this file.
2 
9 
12 
17 
18 //using namespace reco;
19 
20 //
21 // constants, enums and typedefs
22 //
23 
24 //
25 // static data member definitions
26 //
27 
28 //
29 // constructors and destructor
30 //
32  : theAlgo(conf), theConfig(conf)
33 {
34  edm::LogInfo("PVDebugInfo")
35  << "Initializing PV producer " << "\n";
36  fVerbose=conf.getUntrackedParameter<bool>("verbose", false);
37  trackLabel = conf.getParameter<edm::InputTag>("TrackLabel");
38  beamSpotLabel = conf.getParameter<edm::InputTag>("beamSpotLabel");
39 
40  produces<reco::VertexCollection>();
41 
42 }
43 
44 
46 
47 //
48 // member functions
49 //
50 
51 // ------------ method called to produce the data ------------
52 void
54 {
55  using namespace edm;
56 
57  std::auto_ptr<reco::VertexCollection> result(new reco::VertexCollection);
59 
60  // get the BeamSpot, it will alwys be needed, even when not used as a constraint
61  reco::BeamSpot vertexBeamSpot;
62  edm::Handle<reco::BeamSpot> recoBeamSpotHandle;
63  iEvent.getByLabel(beamSpotLabel,recoBeamSpotHandle);
64  if (recoBeamSpotHandle.isValid()){
65  vertexBeamSpot = *recoBeamSpotHandle;
66  }else{
67  edm::LogError("UnusableBeamSpot") << "No beam spot available from EventSetup";
68  }
69 
70 
71 
72  // get RECO tracks from the event
73  // `tks` can be used as a ptr to a reco::TrackCollection
75  iEvent.getByLabel(trackLabel, tks);
76 
77 
78  // interface RECO tracks to vertex reconstruction
80  iSetup.get<TransientTrackRecord>().get("TransientTrackBuilder",theB);
81  std::vector<reco::TransientTrack> t_tks = (*theB).build(tks, vertexBeamSpot);
82  if(fVerbose) {std::cout << "RecoVertex/PrimaryVertexProducer"
83  << "Found: " << t_tks.size() << " reconstructed tracks" << "\n";
84  }
85 
86 
87  // call vertex reconstruction
88  std::vector<TransientVertex> t_vts = theAlgo.vertices(t_tks, vertexBeamSpot);
89  if(fVerbose){
90  std::cout <<"RecoVertex/PrimaryVertexProducer: "
91  << " found " << t_vts.size() << " reconstructed vertices" << "\n";
92  }
93 
94  // convert transient vertices returned by the theAlgo to (reco) vertices
95  for (std::vector<TransientVertex>::const_iterator iv = t_vts.begin();
96  iv != t_vts.end(); iv++) {
97  reco::Vertex v = *iv;
98  vColl.push_back(v);
99  }
100 
101  if (vColl.empty()) {
102  GlobalError bse(vertexBeamSpot.rotatedCovariance3D());
103  if ( (bse.cxx() <= 0.) ||
104  (bse.cyy() <= 0.) ||
105  (bse.czz() <= 0.) ) {
107  we(0,0)=10000; we(1,1)=10000; we(2,2)=10000;
108  vColl.push_back(reco::Vertex(vertexBeamSpot.position(), we,0.,0.,0));
109  if(fVerbose){
110  std::cout <<"RecoVertex/PrimaryVertexProducer: "
111  << "Beamspot with invalid errors "<<bse.matrix()<<std::endl;
112  std::cout << "Will put Vertex derived from dummy-fake BeamSpot into Event.\n";
113  }
114  } else {
115  vColl.push_back(reco::Vertex(vertexBeamSpot.position(),
116  vertexBeamSpot.rotatedCovariance3D(),0.,0.,0));
117  if(fVerbose){
118  std::cout <<"RecoVertex/PrimaryVertexProducer: "
119  << " will put Vertex derived from BeamSpot into Event.\n";
120  }
121  }
122  }
123 
124  if(fVerbose){
125  int ivtx=0;
126  for(reco::VertexCollection::const_iterator v=vColl.begin();
127  v!=vColl.end(); ++v){
128  std::cout << "recvtx "<< ivtx++
129  << "#trk " << std::setw(3) << v->tracksSize()
130  << " chi2 " << std::setw(4) << v->chi2()
131  << " ndof " << std::setw(3) << v->ndof()
132  << " x " << std::setw(6) << v->position().x()
133  << " dx " << std::setw(6) << v->xError()
134  << " y " << std::setw(6) << v->position().y()
135  << " dy " << std::setw(6) << v->yError()
136  << " z " << std::setw(6) << v->position().z()
137  << " dz " << std::setw(6) << v->zError()
138  << std::endl;
139  }
140  }
141 
142 
143  *result = vColl;
144  // iEvent.put(result, "PrimaryVertex");
145  iEvent.put(result);
146 
147 }
148 
149 
150 //define this as a plug-in
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
std::vector< Vertex > VertexCollection
collection of Vertex objects
Definition: VertexFwd.h:9
virtual std::vector< TransientVertex > vertices(const std::vector< reco::TransientTrack > &tracks) const
int iEvent
Definition: GenABIO.cc:243
ROOT::Math::SMatrix< double, 3, 3, ROOT::Math::MatRepSym< double, 3 > > AlgebraicSymMatrix33
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:84
tuple result
Definition: query.py:137
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:359
tuple conf
Definition: dbtoconf.py:185
virtual void produce(edm::Event &, const edm::EventSetup &)
const T & get() const
Definition: EventSetup.h:55
PrimaryVertexProducerAlgorithm theAlgo
PrimaryVertexProducer(const edm::ParameterSet &)
tuple cout
Definition: gather_cfg.py:41
mathSSE::Vec4< T > v