30 #ifndef __FASTJET_COMPOSITEJET_STRUCTURE_HH__
31 #define __FASTJET_COMPOSITEJET_STRUCTURE_HH__
33 #include <fastjet/PseudoJet.hh>
34 #include <fastjet/PseudoJetStructureBase.hh>
37 #include <fastjet/JetDefinition.hh>
39 FASTJET_BEGIN_NAMESPACE
60 if (_area_4vector_ptr)
delete _area_4vector_ptr;
64 virtual std::string description()
const;
70 virtual bool has_constituents()
const;
78 virtual std::vector<PseudoJet> constituents(
const PseudoJet &jet)
const;
87 virtual std::vector<PseudoJet> pieces(
const PseudoJet &jet)
const;
92 virtual bool has_area()
const;
95 virtual double area(
const PseudoJet &reference)
const;
101 virtual double area_error(
const PseudoJet &reference)
const;
109 virtual bool is_pure_ghost(
const PseudoJet &reference)
const;
114 void set_area_information(
PseudoJet *area_4vector_ptr){
115 _area_4vector_ptr = area_4vector_ptr;
135 template<
typename T>
PseudoJet join(
const std::vector<PseudoJet> & pieces){
137 for (
unsigned int i=0; i<pieces.size(); i++){
142 T *cj_struct =
new T(pieces);
151 template<
typename T> PseudoJet join(
const PseudoJet & j1){
152 return join<T>(std::vector<PseudoJet>(1,j1));
157 template<
typename T> PseudoJet join(
const PseudoJet & j1,
const PseudoJet & j2){
158 std::vector<PseudoJet> pieces;
159 pieces.push_back(j1);
160 pieces.push_back(j2);
161 return join<T>(pieces);
166 template<
typename T> PseudoJet join(
const PseudoJet & j1,
const PseudoJet & j2,
167 const PseudoJet & j3){
168 std::vector<PseudoJet> pieces;
169 pieces.push_back(j1);
170 pieces.push_back(j2);
171 pieces.push_back(j3);
172 return join<T>(pieces);
177 template<
typename T> PseudoJet join(
const PseudoJet & j1,
const PseudoJet & j2,
178 const PseudoJet & j3,
const PseudoJet & j4){
179 std::vector<PseudoJet> pieces;
180 pieces.push_back(j1);
181 pieces.push_back(j2);
182 pieces.push_back(j3);
183 pieces.push_back(j4);
184 return join<T>(pieces);
198 template<
typename T>
PseudoJet join(
const std::vector<PseudoJet> & pieces,
201 if (pieces.size()>0){
203 for (
unsigned int i=1; i<pieces.size(); i++){
208 T *cj_struct =
new T(pieces, &recombiner);
216 template<
typename T> PseudoJet join(
const PseudoJet & j1,
217 const JetDefinition::Recombiner & recombiner){
218 return join<T>(std::vector<PseudoJet>(1,j1), recombiner);
223 template<
typename T> PseudoJet join(
const PseudoJet & j1,
const PseudoJet & j2,
224 const JetDefinition::Recombiner & recombiner){
225 std::vector<PseudoJet> pieces;
226 pieces.push_back(j1);
227 pieces.push_back(j2);
228 return join<T>(pieces, recombiner);
233 template<
typename T> PseudoJet join(
const PseudoJet & j1,
const PseudoJet & j2,
234 const PseudoJet & j3,
235 const JetDefinition::Recombiner & recombiner){
236 std::vector<PseudoJet> pieces;
237 pieces.push_back(j1);
238 pieces.push_back(j2);
239 pieces.push_back(j3);
240 return join<T>(pieces, recombiner);
245 template<
typename T> PseudoJet join(
const PseudoJet & j1,
const PseudoJet & j2,
246 const PseudoJet & j3,
const PseudoJet & j4,
247 const JetDefinition::Recombiner & recombiner){
248 std::vector<PseudoJet> pieces;
249 pieces.push_back(j1);
250 pieces.push_back(j2);
251 pieces.push_back(j3);
252 pieces.push_back(j4);
253 return join<T>(pieces, recombiner);
257 FASTJET_END_NAMESPACE
259 #endif // __FASTJET_MERGEDJET_STRUCTURE_HH__