ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitProd/TreeFiller/src/FillerMCVertexes.cc
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
Log Message:
Fix beginrun,beginjob mess

File Contents

# User Rev Content
1 bendavid 1.2 // $Id: FillerMCVertexes.cc,v 1.1 2009/09/25 08:42:42 loizides Exp $
2 loizides 1.1
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 bendavid 1.2 void FillerMCVertexes::BookDataBlock(TreeWriter &tws)
33 loizides 1.1 {
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     }