Revision: | 1.2 |
Committed: | Thu Mar 18 20:21:00 2010 UTC (15 years, 1 month ago) by bendavid |
Content type: | text/plain |
Branch: | MAIN |
CVS Tags: | Mit_032, Mit_031, Mit_025c_branch2, Mit_025c_branch1, Mit_030, Mit_029c, Mit_029b, Mit_030_pre1, Mit_029a, Mit_029, Mit_029_pre1, Mit_028a, Mit_025c_branch0, Mit_028, Mit_027a, Mit_027, Mit_026, Mit_025e, Mit_025d, Mit_025c, Mit_025b, Mit_025a, Mit_025, Mit_025pre2, Mit_024b, Mit_025pre1, Mit_024a, Mit_024, Mit_023, Mit_022a, Mit_022, Mit_020d, TMit_020d, Mit_020c, Mit_021, Mit_021pre2, Mit_021pre1, Mit_020b, Mit_020a, Mit_020, Mit_020pre1, Mit_018, Mit_017, Mit_017pre3, Mit_017pre2, Mit_017pre1, Mit_016, Mit_015b, Mit_015a, Mit_015, Mit_014e, Mit_014d, Mit_014c, Mit_014b, Mit_014a, Mit_014, Mit_014pre3, Mit_014pre2, Mit_014pre1, Mit_013d, Mit_013c, Mit_013b, Mit_013a, Mit_013, HEAD |
Branch point for: | Mit_025c_branch |
Changes since 1.1: | +2 -2 lines |
Error occurred while calculating annotation data. | |
Log Message: | Fix beginrun,beginjob mess |
# | Content |
---|---|
1 | // $Id: FillerMCVertexes.cc,v 1.1 2009/09/25 08:42:42 loizides Exp $ |
2 | |
3 | #include "MitProd/TreeFiller/interface/FillerMCVertexes.h" |
4 | #include "MitAna/DataTree/interface/Names.h" |
5 | #include "MitAna/DataTree/interface/VertexCol.h" |
6 | #include "MitProd/ObjectService/interface/ObjectService.h" |
7 | |
8 | using namespace std; |
9 | using namespace edm; |
10 | using namespace mithep; |
11 | |
12 | //-------------------------------------------------------------------------------------------------- |
13 | FillerMCVertexes::FillerMCVertexes(const ParameterSet &cfg, const char *name, bool active) : |
14 | BaseFiller(cfg, name, active), |
15 | useAodGen_(Conf().getUntrackedParameter<bool>("useAodGen",true)), |
16 | edmName_(Conf().getUntrackedParameter<string>("edmName","genParticles")), |
17 | mitName_(Conf().getUntrackedParameter<string>("mitName","MCVertexes")), |
18 | vertexes_(new mithep::VertexArr(1)) |
19 | { |
20 | // Constructor. |
21 | } |
22 | |
23 | //-------------------------------------------------------------------------------------------------- |
24 | FillerMCVertexes::~FillerMCVertexes() |
25 | { |
26 | // Destructor. |
27 | |
28 | delete vertexes_; |
29 | } |
30 | |
31 | //-------------------------------------------------------------------------------------------------- |
32 | void FillerMCVertexes::BookDataBlock(TreeWriter &tws) |
33 | { |
34 | // Add branch to tree. |
35 | |
36 | tws.AddBranch(mitName_,&vertexes_); |
37 | OS()->add<VertexArr>(vertexes_,mitName_); |
38 | } |
39 | |
40 | //-------------------------------------------------------------------------------------------------- |
41 | void FillerMCVertexes::FillDataBlock(const edm::Event &event, |
42 | const edm::EventSetup &setup) |
43 | { |
44 | // Loop over generated or simulated particles and fill their information. |
45 | |
46 | vertexes_->Delete(); |
47 | |
48 | Double_t vtx=0, vty=0, vtz=0; |
49 | |
50 | if (!useAodGen_) { |
51 | Handle<edm::HepMCProduct> hHepMCProduct; |
52 | GetProduct(edmName_, hHepMCProduct, event); |
53 | const HepMC::GenEvent &GenEvent = hHepMCProduct->getHepMCData(); |
54 | |
55 | for (HepMC::GenEvent::particle_const_iterator pgen = GenEvent.particles_begin(); |
56 | pgen != GenEvent.particles_end(); ++pgen) { |
57 | HepMC::GenParticle *mcPart = (*pgen); |
58 | if(!mcPart) |
59 | continue; |
60 | HepMC::GenVertex *dvtx = mcPart->end_vertex(); |
61 | if (dvtx) { |
62 | vtx = dvtx->point3d().x()/10.0; |
63 | vty = dvtx->point3d().y()/10.0; |
64 | vtz = dvtx->point3d().z()/10.0; |
65 | break; |
66 | } |
67 | } |
68 | } else { /*useAodGen_*/ |
69 | Handle<reco::GenParticleCollection> hGenPProduct; |
70 | GetProduct(edmName_, hGenPProduct, event); |
71 | const reco::GenParticleCollection genParticles = *(hGenPProduct.product()); |
72 | for (reco::GenParticleCollection::const_iterator pgen = genParticles.begin(); |
73 | pgen != genParticles.end(); ++pgen) { |
74 | |
75 | int found = 0; |
76 | for (unsigned int i=0; i<pgen->numberOfDaughters(); ++i) { |
77 | const reco::Candidate *dau = pgen->daughter(i); |
78 | if (dau) { |
79 | vtx = dau->vx(); |
80 | vty = dau->vy(); |
81 | vtz = dau->vz(); |
82 | found = 1; |
83 | break; |
84 | } |
85 | } |
86 | if (found) |
87 | break; |
88 | } |
89 | } |
90 | |
91 | mithep::Vertex *newvtx = vertexes_->Allocate(); |
92 | new (newvtx) mithep::Vertex(vtx, vty, vtz); |
93 | vertexes_->Trim(); |
94 | } |