32 #ifndef __FASTJET_COMPOSITEJET_STRUCTURE_HH__
33 #define __FASTJET_COMPOSITEJET_STRUCTURE_HH__
35 #include <fastjet/PseudoJet.hh>
36 #include <fastjet/PseudoJetStructureBase.hh>
39 #include <fastjet/JetDefinition.hh>
41 FASTJET_BEGIN_NAMESPACE
62 if (_area_4vector_ptr)
delete _area_4vector_ptr;
66 virtual std::string description()
const;
72 virtual bool has_constituents()
const;
80 virtual std::vector<PseudoJet> constituents(
const PseudoJet &jet)
const;
89 virtual std::vector<PseudoJet> pieces(
const PseudoJet &jet)
const;
95 virtual bool has_area()
const;
98 virtual double area(
const PseudoJet &reference)
const;
104 virtual double area_error(
const PseudoJet &reference)
const;
112 virtual bool is_pure_ghost(
const PseudoJet &reference)
const;
133 if (_area_4vector_ptr)
delete _area_4vector_ptr;
134 _area_4vector_ptr = 0;
155 template<
typename T>
PseudoJet join(
const std::vector<PseudoJet> & pieces){
157 for (
unsigned int i=0; i<pieces.size(); i++){
162 T *cj_struct =
new T(pieces);
171 template<
typename T> PseudoJet join(
const PseudoJet & j1){
172 return join<T>(std::vector<PseudoJet>(1,j1));
177 template<
typename T> PseudoJet join(
const PseudoJet & j1,
const PseudoJet & j2){
178 std::vector<PseudoJet> pieces;
179 pieces.push_back(j1);
180 pieces.push_back(j2);
181 return join<T>(pieces);
186 template<
typename T> PseudoJet join(
const PseudoJet & j1,
const PseudoJet & j2,
187 const PseudoJet & j3){
188 std::vector<PseudoJet> pieces;
189 pieces.push_back(j1);
190 pieces.push_back(j2);
191 pieces.push_back(j3);
192 return join<T>(pieces);
197 template<
typename T> PseudoJet join(
const PseudoJet & j1,
const PseudoJet & j2,
198 const PseudoJet & j3,
const PseudoJet & j4){
199 std::vector<PseudoJet> pieces;
200 pieces.push_back(j1);
201 pieces.push_back(j2);
202 pieces.push_back(j3);
203 pieces.push_back(j4);
204 return join<T>(pieces);
218 template<
typename T>
PseudoJet join(
const std::vector<PseudoJet> & pieces,
221 if (pieces.size()>0){
223 for (
unsigned int i=1; i<pieces.size(); i++){
228 T *cj_struct =
new T(pieces, &recombiner);
236 template<
typename T> PseudoJet join(
const PseudoJet & j1,
237 const JetDefinition::Recombiner & recombiner){
238 return join<T>(std::vector<PseudoJet>(1,j1), recombiner);
243 template<
typename T> PseudoJet join(
const PseudoJet & j1,
const PseudoJet & j2,
244 const JetDefinition::Recombiner & recombiner){
245 std::vector<PseudoJet> pieces;
246 pieces.push_back(j1);
247 pieces.push_back(j2);
248 return join<T>(pieces, recombiner);
253 template<
typename T> PseudoJet join(
const PseudoJet & j1,
const PseudoJet & j2,
254 const PseudoJet & j3,
255 const JetDefinition::Recombiner & recombiner){
256 std::vector<PseudoJet> pieces;
257 pieces.push_back(j1);
258 pieces.push_back(j2);
259 pieces.push_back(j3);
260 return join<T>(pieces, recombiner);
265 template<
typename T> PseudoJet join(
const PseudoJet & j1,
const PseudoJet & j2,
266 const PseudoJet & j3,
const PseudoJet & j4,
267 const JetDefinition::Recombiner & recombiner){
268 std::vector<PseudoJet> pieces;
269 pieces.push_back(j1);
270 pieces.push_back(j2);
271 pieces.push_back(j3);
272 pieces.push_back(j4);
273 return join<T>(pieces, recombiner);
277 FASTJET_END_NAMESPACE
279 #endif // __FASTJET_MERGEDJET_STRUCTURE_HH__