ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitProd/TreeFiller/src/FillerConversions.cc
Revision: 1.16
Committed: Thu Jun 18 23:07:14 2009 UTC (15 years, 10 months ago) by bendavid
Content type: text/plain
Branch: MAIN
Changes since 1.15: +46 -9 lines
Log Message:
Changed FillerConversions to use StableParts instead of Electrons, first step in more major changes

File Contents

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