Automatic jet grooming in FastJets
Adds a list of fastjet::Transformer to FastJets, to be applied in order.
Please review the API: I've created addTrf
, addTrfs
and clearTrfs
methods, and a clearArea
function for consistency, but these can be reviewed. Do we need a setTrfs
? Is anyone really going to apply more than one groomer?
I'd also appreciate better takes on the pointer stuff going on here: it would be much nicer to avoid those entirely, but FJ is designed to expect heap-allocation of these things, which introduces a world of pain. Could maybe be refined in 3.2.x, using templates & SFINAE and all that to call the copy constructor for the appropriate concrete type.
Transformers don't currently have a comparison operator, so if this list is non-empty, we have to report the projection as non-equivalent and recompute duplicates -- for now -- but it works, and we can feed back that improvement (again) to fastjet: I think movement will only happen if we supply an explicit patch (and maybe patches for the filter, softdrop etc. implementations, too)