While calling the Tree.Project method, is there a way to also call/read external .root files that would read for instance scale factors “dynamically” that can be then applied on a per-event case on the values filled histo called by the Tree.Project ?
For instance, I have the tree, that I want to apply a series of cuts, but also apply weights at the same time from an external source.
and the cuts has all the info/applied selection acting on the mytree of course. But then, for each of the events that is “projected” I would need for instance to know the exact value like the pT/eta (that are branches in the myTree) of the events that are selected/projected, and then use those as input to another fuction that would open another .root histo to extract the corresponding scale factor from a histo.
So the sequence should be like
.- project using a predifined set of cuts from the mytree
.- for each projected event, extract info from a TBranch and use it as input to another function
.- apply also the result of the previous function per event on the projection
I know I can loop go through all the events in the tree sequentially, and then extracting whatever variable that is the input to another function is trivial, but this is way too slow vs projecting.
create someHistogram;
for (factors_file in all_files_with_factors) {
open factors_file;
retrieve histo_with_factors;
set pt_eta_specific_factor;
current_cuts = "pt_eta_specific_factor * (pt/Eta in range_valid_for_current_factors_file && cuts)";
mytree.Project("someHitogram+", varName, current_cuts); // note the "+"
close factors_file;
}