ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitProd/TreeFiller/src/FillerConversions.cc
Revision: 1.22
Committed: Mon Nov 22 16:54:13 2010 UTC (14 years, 5 months ago) by bendavid
Content type: text/plain
Branch: MAIN
CVS Tags: 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
Branch point for: Mit_025c_branch
Changes since 1.21: +5 -4 lines
Log Message:
adapt to conversion data format changes in 39

File Contents

# Content
1 // $Id: FillerConversions.cc,v 1.21 2010/10/22 00:05:38 bendavid Exp $
2
3 #include "MitProd/TreeFiller/interface/FillerConversions.h"
4 #include "DataFormats/Common/interface/RefToPtr.h"
5 #include "MitEdm/DataFormats/interface/RefToBaseToPtr.h"
6 #include "MitAna/DataTree/interface/ConversionCol.h"
7 #include "MitAna/DataTree/interface/Names.h"
8 #include "MitProd/ObjectService/interface/ObjectService.h"
9
10 using namespace std;
11 using namespace edm;
12 using namespace mithep;
13
14 //--------------------------------------------------------------------------------------------------
15 FillerConversions::FillerConversions(const ParameterSet &cfg, const char *name, bool active) :
16 BaseFiller(cfg,name,active),
17 edmName_(Conf().getUntrackedParameter<string>("edmName","conversions")),
18 mitName_(Conf().getUntrackedParameter<string>("mitName","Conversions")),
19 stablePartMapNames_(Conf().exists("stablePartMaps") ?
20 Conf().getUntrackedParameter<vector<string> >("stablePartMaps") :
21 vector<string>()),
22 conversionMapName_(Conf().getUntrackedParameter<string>("conversionMapName",
23 Form("%sMapName",mitName_.c_str()))),
24 conversions_(new mithep::ConversionArr(16)),
25 conversionMap_(new mithep::ConversionMap)
26 {
27 // Constructor.
28 }
29
30 //--------------------------------------------------------------------------------------------------
31 FillerConversions::~FillerConversions()
32 {
33 // Destructor.
34
35 delete conversions_;
36 delete conversionMap_;
37 }
38
39 //--------------------------------------------------------------------------------------------------
40 void FillerConversions::BookDataBlock(TreeWriter &tws)
41 {
42 // Add conversions to tree. Publish and get our objects.
43
44 tws.AddBranch(mitName_,&conversions_);
45 OS()->add<mithep::ConversionArr>(conversions_,mitName_);
46
47 if (!convElectronMapName_.empty()) {
48 conversionMap_->SetBrName(mitName_);
49 OS()->add(conversionMap_,conversionMapName_);
50 }
51
52 for (std::vector<std::string>::const_iterator bmapName = stablePartMapNames_.begin();
53 bmapName!=stablePartMapNames_.end(); ++bmapName) {
54 if (!bmapName->empty()) {
55 const TrackPartMap *map = OS()->get<TrackPartMap>(*bmapName);
56 if (map) {
57 stablePartMaps_.push_back(map);
58 AddBranchDep(mitName_,map->GetBrName());
59 }
60 }
61 }
62 }
63
64 //--------------------------------------------------------------------------------------------------
65 void FillerConversions::FillDataBlock(const edm::Event &event,
66 const edm::EventSetup &setup)
67 {
68 // Fill conversions data structure and maps.
69
70 conversions_->Delete();
71 conversionMap_->Reset();
72
73 Handle<reco::ConversionCollection> hConversionProduct;
74 GetProduct(edmName_, hConversionProduct, event);
75
76 conversionMap_->SetEdmProductId(hConversionProduct.id().id());
77
78 const reco::ConversionCollection inConversions = *(hConversionProduct.product());
79
80 for (reco::ConversionCollection::const_iterator inConversion = inConversions.begin();
81 inConversion != inConversions.end(); ++inConversion) {
82
83 mithep::Vertex vertex(inConversion->conversionVertex().x(),
84 inConversion->conversionVertex().y(),
85 inConversion->conversionVertex().z(),
86 inConversion->conversionVertex().xError(),
87 inConversion->conversionVertex().yError(),
88 inConversion->conversionVertex().zError());
89 vertex.SetChi2(inConversion->conversionVertex().chi2());
90 vertex.SetNdof(inConversion->conversionVertex().ndof());
91 vertex.SetNTracksFit(inConversion->conversionVertex().tracksSize());
92
93 mithep::Conversion *outConversion = conversions_->Allocate();
94 new (outConversion) mithep::Conversion(vertex);
95 outConversion->SetDCotTheta(inConversion->pairCotThetaSeparation());
96 outConversion->SetEOverP(inConversion->EoverP());
97 outConversion->SetPairMass(inConversion->pairInvariantMass());
98 outConversion->SetPairMomentum(inConversion->pairMomentum().x(),
99 inConversion->pairMomentum().y(),
100 inConversion->pairMomentum().z());
101
102 if (stablePartMaps_.size()) {
103 std::vector<reco::TrackBaseRef> trackRefs = inConversion->tracks();
104 for (std::vector<reco::TrackBaseRef>::const_iterator trackRef = trackRefs.begin();
105 trackRef != trackRefs.end(); ++trackRef) {
106 outConversion->AddDaughter(GetMitParticle(mitedm::refToBaseToPtr(*trackRef)));
107 }
108 }
109
110 reco::ConversionRef theRef(hConversionProduct, inConversion-inConversions.begin());
111 conversionMap_->Add(theRef, outConversion);
112 }
113
114 conversions_->Trim();
115 }
116
117 //--------------------------------------------------------------------------------------------------
118 mithep::Particle *FillerConversions::GetMitParticle(edm::Ptr<reco::Track> ptr) const
119 {
120 // Return our particle referenced by the edm pointer.
121
122 mithep::Particle *mitPart = 0;
123 for (std::vector<const mithep::TrackPartMap*>::const_iterator bmap = stablePartMaps_.begin();
124 bmap!=stablePartMaps_.end(); ++bmap) {
125 const mithep::TrackPartMap *theMap = *bmap;
126 if (theMap->HasMit(ptr)) {
127 mitPart = theMap->GetMit(ptr);
128 return mitPart;
129 }
130 }
131
132 if (!mitPart)
133 throw edm::Exception(edm::errors::Configuration, "FillerConversions::FillDataBlock()\n")
134 << "Error! MITHEP Object "
135 << "not found in AssociationMaps (" << typeid(*this).name() << ")." << std::endl;
136
137 return mitPart;
138 }