Fork me on GitHub

source: git/display/DelphesBranchElement.h@ b3c42d3

ImprovedOutputFile Timing dual_readout llp
Last change on this file since b3c42d3 was 115298d, checked in by Christophe Delaere <christophe.delaere@…>, 10 years ago

Working classes for automatic parsing of branches

Slightly less elegant, but it works.
The code in geometry.C is able to call the new methods and classes but
doesn't use it yet.

  • Property mode set to 100644
File size: 6.3 KB
Line 
1/*
2 * Delphes: a framework for fast simulation of a generic collider experiment
3 * Copyright (C) 2012-2014 Universite catholique de Louvain (UCL), Belgium
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef DelphesBranchElement_h
20#define DelphesBranchElement_h
21
22#include "TColor.h"
23#include "TString.h"
24#include <exception>
25#include "display/DelphesCaloData.h"
26#include "TEveElement.h"
27#include "TEveTrack.h"
28
29// virtual class to represent objects from a Delphes-tree branch
30class DelphesBranchBase
31{
32 public:
33 DelphesBranchBase():color_(kBlack) {}
34 DelphesBranchBase(const char* name, const char*type, const enum EColor color):name_(name),type_(type),color_(color) {}
35 virtual ~DelphesBranchBase() {};
36 const char* GetName() const { return (const char*)name_; }
37 const char* GetType() const { return (const char*)type_; }
38 enum EColor GetColor() const { return color_; }
39 virtual const char* GetClassName() = 0;
40 virtual void Reset() = 0;
41
42 protected:
43 TString name_;
44 TString type_; // needed for parsing the branch later on
45 const enum EColor color_;
46};
47
48// concrete implementations. EveContainer can be a TrackList, ElementList or CaloData.
49template<typename EveContainer> class DelphesBranchElement: public DelphesBranchBase
50{
51 public:
52 // constructor
53 DelphesBranchElement():DelphesBranchBase() {}
54 DelphesBranchElement(const char* name, const char*type, const enum EColor color):DelphesBranchBase(name, type, color) {}
55
56 // destructor
57 virtual ~DelphesBranchElement() { delete data_; }
58
59 // get the container (ElementList, TrackList, or CaloData)
60 EveContainer* GetContainer() { return data_; }
61
62 // resets the collection (before moving to the next event)
63 virtual void Reset() = 0;
64
65 // template class name
66 virtual const char* GetClassName() { return data_->ClassName(); }
67
68 private:
69 EveContainer* data_;
70};
71
72// special case for calo towers
73template<> class DelphesBranchElement<DelphesCaloData>: public DelphesBranchBase
74{
75 public:
76 // constructor
77 DelphesBranchElement():DelphesBranchBase() {}
78 DelphesBranchElement(const char* name, const char*type, const enum EColor color):DelphesBranchBase(name, type, color) {
79 if(TString(type)=="tower") {
80 data_ = new DelphesCaloData(2);
81 data_->RefSliceInfo(0).Setup("ECAL", 0.1, kRed);
82 data_->RefSliceInfo(1).Setup("HCAL", 0.1, kBlue);
83 data_->IncDenyDestroy();
84 } else {
85 throw std::exception();
86 }
87 }
88
89 // destructor
90 virtual ~DelphesBranchElement() { delete data_; }
91
92 // get the container (ElementList, TrackList, or CaloData)
93 DelphesCaloData* GetContainer() { return data_; }
94
95 // resets the collection (before moving to the next event)
96 virtual void Reset() { data_->ClearTowers(); }
97
98 // template class name
99 virtual const char* GetClassName() { return data_->ClassName(); }
100
101 private:
102 DelphesCaloData* data_;
103};
104//template<> DelphesBranchElement<DelphesCaloData>::DelphesBranchElement(const char* name, const char*type, const enum EColor color);
105//template<> void DelphesBranchElement<DelphesCaloData>::Reset();
106
107// special case for element lists
108template<> class DelphesBranchElement<TEveElementList>: public DelphesBranchBase
109{
110 public:
111 // constructor
112 DelphesBranchElement():DelphesBranchBase() {}
113 DelphesBranchElement(const char* name, const char*type, const enum EColor color):DelphesBranchBase(name, type, color) {
114 if(TString(type)=="vector" || TString(type)=="jet") {
115 data_ = new TEveElementList(name);
116 data_->SetMainColor(color_);
117 } else {
118 throw std::exception();
119 }
120 }
121
122 // destructor
123 virtual ~DelphesBranchElement() { delete data_; }
124
125 // get the container (ElementList, TrackList, or CaloData)
126 TEveElementList* GetContainer() { return data_; }
127
128 // resets the collection (before moving to the next event)
129 virtual void Reset() { data_->DestroyElements(); }
130
131 // template class name
132 virtual const char* GetClassName() { return data_->ClassName(); }
133
134 private:
135 TEveElementList* data_;
136};
137//template<> DelphesBranchElement<TEveElementList>::DelphesBranchElement(const char* name, const char*type, const enum EColor color);
138//template<> void DelphesBranchElement<TEveElementList>::Reset();
139
140// special case for track lists
141template<> class DelphesBranchElement<TEveTrackList>: public DelphesBranchBase
142{
143 public:
144 // constructor
145 DelphesBranchElement():DelphesBranchBase() {}
146 DelphesBranchElement(const char* name, const char*type, const enum EColor color):DelphesBranchBase(name, type, color) {
147 if(TString(type)=="track") {
148 data_ = new TEveTrackList(name);
149 data_->SetMainColor(color_);
150 data_->SetMarkerColor(color_);
151 data_->SetMarkerStyle(kCircle);
152 data_->SetMarkerSize(0.5);
153 } else if(TString(type)=="photon") {
154 data_ = new TEveTrackList(name);
155 data_->SetMainColor(color_);
156 data_->SetMarkerColor(color_);
157 data_->SetMarkerStyle(kCircle);
158 data_->SetMarkerSize(0.5);
159 } else {
160 throw std::exception();
161 }
162 }
163
164 // destructor
165 virtual ~DelphesBranchElement() { delete data_; }
166
167 // get the container (ElementList, TrackList, or CaloData)
168 TEveTrackList* GetContainer() { return data_; }
169
170 // resets the collection (before moving to the next event)
171 virtual void Reset() { data_->DestroyElements(); }
172
173 // template class name
174 virtual const char* GetClassName() { return data_->ClassName(); }
175
176 private:
177 TEveTrackList* data_;
178};
179//template<> DelphesBranchElement<TEveTrackList>::DelphesBranchElement(const char* name, const char*type, const enum EColor color);
180//template<> void DelphesBranchElement<TEveTrackList>::Reset();
181
182#endif //DelphesBranchElement_h
Note: See TracBrowser for help on using the repository browser.