21 virtual void AddInputVectors(
const std::vector<fastjet::PseudoJet>& vecs,
Int_t offsetIndex = -99999);
23 virtual const char *
ClassName()
const {
return "AliFJWrapper"; }
54 Double32_t
NSubjettinessDerivativeSub(
Int_t N,
Int_t Algorithm,
Double_t Radius,
Double_t Beta,
Double_t JetR, fastjet::PseudoJet jet,
Int_t Option=0,
Int_t Measure=0,
Double_t Beta_SD=0.0,
Double_t ZCut=0.1,
Int_t SoftDropOn=0);
55 #ifdef FASTJET_VERSION
56 const std::vector<fastjet::contrib::GenericSubtractorInfo> GetGenSubtractorInfoJetMass()
const {
return fGenSubtractorInfoJetMass ; }
57 const std::vector<fastjet::contrib::GenericSubtractorInfo> GetGenSubtractorInfoJetAngularity()
const {
return fGenSubtractorInfoJetAngularity ; }
58 const std::vector<fastjet::contrib::GenericSubtractorInfo> GetGenSubtractorInfoJetpTD()
const {
return fGenSubtractorInfoJetpTD ; }
59 const std::vector<fastjet::contrib::GenericSubtractorInfo> GetGenSubtractorInfoJetCircularity()
const {
return fGenSubtractorInfoJetCircularity ; }
60 const std::vector<fastjet::contrib::GenericSubtractorInfo> GetGenSubtractorInfoJetSigma2()
const {
return fGenSubtractorInfoJetSigma2 ; }
61 const std::vector<fastjet::contrib::GenericSubtractorInfo> GetGenSubtractorInfoJetConstituent()
const {
return fGenSubtractorInfoJetConstituent ; }
62 const std::vector<fastjet::contrib::GenericSubtractorInfo> GetGenSubtractorInfoJetLeSub()
const {
return fGenSubtractorInfoJetLeSub ; }
63 const std::vector<fastjet::contrib::GenericSubtractorInfo> GetGenSubtractorInfoJet1subjettiness_kt()
const {
return fGenSubtractorInfoJet1subjettiness_kt ; }
64 const std::vector<fastjet::contrib::GenericSubtractorInfo> GetGenSubtractorInfoJet2subjettiness_kt()
const {
return fGenSubtractorInfoJet2subjettiness_kt ; }
65 const std::vector<fastjet::contrib::GenericSubtractorInfo> GetGenSubtractorInfoJet3subjettiness_kt()
const {
return fGenSubtractorInfoJet3subjettiness_kt ; }
66 const std::vector<fastjet::contrib::GenericSubtractorInfo> GetGenSubtractorInfoJetOpeningAngle_kt()
const {
return fGenSubtractorInfoJetOpeningAngle_kt ; }
67 const std::vector<fastjet::contrib::GenericSubtractorInfo> GetGenSubtractorInfoJet1subjettiness_ca()
const {
return fGenSubtractorInfoJet1subjettiness_ca ; }
68 const std::vector<fastjet::contrib::GenericSubtractorInfo> GetGenSubtractorInfoJet2subjettiness_ca()
const {
return fGenSubtractorInfoJet2subjettiness_ca ; }
69 const std::vector<fastjet::contrib::GenericSubtractorInfo> GetGenSubtractorInfoJetOpeningAngle_ca()
const {
return fGenSubtractorInfoJetOpeningAngle_ca ; }
70 const std::vector<fastjet::contrib::GenericSubtractorInfo> GetGenSubtractorInfoJet1subjettiness_akt02()
const {
return fGenSubtractorInfoJet1subjettiness_akt02 ; }
71 const std::vector<fastjet::contrib::GenericSubtractorInfo> GetGenSubtractorInfoJet2subjettiness_akt02()
const {
return fGenSubtractorInfoJet2subjettiness_akt02 ; }
72 const std::vector<fastjet::contrib::GenericSubtractorInfo> GetGenSubtractorInfoJetOpeningAngle_akt02()
const {
return fGenSubtractorInfoJetOpeningAngle_akt02 ; }
73 const std::vector<fastjet::contrib::GenericSubtractorInfo> GetGenSubtractorInfoJet1subjettiness_casd()
const {
return fGenSubtractorInfoJet1subjettiness_casd ; }
74 const std::vector<fastjet::contrib::GenericSubtractorInfo> GetGenSubtractorInfoJet2subjettiness_casd()
const {
return fGenSubtractorInfoJet2subjettiness_casd ; }
75 const std::vector<fastjet::contrib::GenericSubtractorInfo> GetGenSubtractorInfoJetOpeningAngle_casd()
const {
return fGenSubtractorInfoJetOpeningAngle_casd ; }
76 const std::vector<fastjet::PseudoJet> GetConstituentSubtrJets()
const {
return fConstituentSubtrJets ; }
77 const std::vector<fastjet::PseudoJet> GetGroomedJets()
const {
return fGroomedJets ; }
79 Int_t CreateConstituentSub();
80 Int_t CreateEventConstituentSub();
81 Int_t CreateSoftDrop();
92 virtual void DoGenericSubtraction(
const fastjet::FunctionOfPseudoJet<Double32_t>& jetshape, std::vector<fastjet::contrib::GenericSubtractorInfo>& output);
164 #ifndef FASTJET_VERSION
167 fastjet::Selector *
fRange;
196 #ifdef FASTJET_VERSION
197 fastjet::JetMedianBackgroundEstimator *fBkrdEstimator;
199 fastjet::contrib::GenericSubtractor *fGenSubtractor;
200 fastjet::contrib::ConstituentSubtractor *fConstituentSubtractor;
201 fastjet::contrib::ConstituentSubtractor *fEventConstituentSubtractor;
202 fastjet::contrib::SoftDrop *fSoftDrop;
203 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJetMass;
204 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoGRNum;
205 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoGRDen;
206 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJetAngularity;
207 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJetpTD;
208 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJetCircularity;
209 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJetSigma2;
210 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJetConstituent;
211 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJetLeSub;
212 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJet1subjettiness_kt;
213 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJet2subjettiness_kt;
214 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJet3subjettiness_kt;
215 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJetOpeningAngle_kt;
216 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJet1subjettiness_ca;
217 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJet2subjettiness_ca;
218 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJetOpeningAngle_ca;
219 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJet1subjettiness_akt02;
220 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJet2subjettiness_akt02;
221 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJetOpeningAngle_akt02;
222 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJet1subjettiness_casd;
223 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJet2subjettiness_casd;
224 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJetOpeningAngle_casd;
248 #ifdef AliFJWrapper_CXX
249 #undef AliFJWrapper_CXX
252 #pragma GCC system_header
255 namespace fj = fastjet;
263 , fEventSubInputVectors ( )
264 , fEventSubCorrectedVectors ( )
269 , fSubtractedJetsPt ( )
270 , fConstituentSubtrJets ( )
274 , fGhostedAreaSpec (0)
281 , fClustSeqActGhosts (0)
282 , fStrategy (fj::Best)
283 , fAlgor (fj::kt_algorithm)
284 , fScheme (fj::BIpt_scheme)
285 , fAreaType (fj::active_area)
292 , fMeanGhostKt (1e-100)
294 , fMedUsedForBgSub (0)
295 , fUseArea4Vector (kFALSE)
299 , fUseMaxDelR (kFALSE)
301 #ifdef FASTJET_VERSION
304 , fConstituentSubtractor (0)
305 , fEventConstituentSubtractor (0)
306 , fGenSubtractorInfoJetMass ( )
307 , fGenSubtractorInfoGRNum ( )
308 , fGenSubtractorInfoGRDen ( )
309 , fGenSubtractorInfoJetAngularity ( )
310 , fGenSubtractorInfoJetpTD ( )
311 , fGenSubtractorInfoJetCircularity( )
312 , fGenSubtractorInfoJetSigma2()
313 , fGenSubtractorInfoJetConstituent ( )
314 , fGenSubtractorInfoJetLeSub ( )
315 , fGenSubtractorInfoJet1subjettiness_kt ( )
316 , fGenSubtractorInfoJet2subjettiness_kt ( )
317 , fGenSubtractorInfoJet3subjettiness_kt ( )
318 , fGenSubtractorInfoJetOpeningAngle_kt ( )
319 , fGenSubtractorInfoJet1subjettiness_ca ( )
320 , fGenSubtractorInfoJet2subjettiness_ca ( )
321 , fGenSubtractorInfoJetOpeningAngle_ca ( )
322 , fGenSubtractorInfoJet1subjettiness_akt02 ( )
323 , fGenSubtractorInfoJet2subjettiness_akt02 ( )
324 , fGenSubtractorInfoJetOpeningAngle_akt02 ( )
325 , fGenSubtractorInfoJet1subjettiness_casd ( )
326 , fGenSubtractorInfoJet2subjettiness_casd ( )
327 , fGenSubtractorInfoJetOpeningAngle_casd ( )
330 , fDoFilterArea (false)
331 , fLegacyMode (false)
332 , fUseExternalBkg (false)
340 , fGRDenominatorSub()
366 #ifdef FASTJET_VERSION
367 if (fBkrdEstimator) {
delete fBkrdEstimator; fBkrdEstimator = NULL; }
368 if (fGenSubtractor) {
delete fGenSubtractor; fGenSubtractor = NULL; }
369 if (fConstituentSubtractor) {
delete fConstituentSubtractor; fConstituentSubtractor = NULL; }
370 if (fSoftDrop) {
delete fSoftDrop; fSoftDrop = NULL;}
432 fastjet::PseudoJet inVec(px, py, pz, E);
436 inVec.set_user_index(index);
452 fj::PseudoJet inVec = vec;
456 inVec.set_user_index(index);
471 for (
UInt_t i = 0; i < vecs.size(); ++i) {
472 fj::PseudoJet inVec = vecs[i];
473 if (offsetIndex > -99999)
495 fastjet::PseudoJet inVec(px, py, pz, E);
497 if (index > -99999) {
498 inVec.set_user_index(index);
517 AliError(Form(
"[e] ::GetJetArea wrong index: %d",idx));
531 AliError(Form(
"[e] ::GetJetArea wrong index: %d",idx));
544 AliError(Form(
"[e] ::GetFilteredJetArea wrong index: %d",idx));
553 fastjet::PseudoJet retval;
557 AliError(Form(
"[e] ::GetJetArea wrong index: %d",idx));
566 fastjet::PseudoJet retval;
570 AliError(Form(
"[e] ::GetJetArea wrong index: %d",idx));
579 fastjet::PseudoJet retval;
583 AliError(Form(
"[e] ::GetFilteredJetArea wrong index: %d",idx));
595 if (kTRUE == sorted) {
614 std::vector<fastjet::PseudoJet>
619 std::vector<fastjet::PseudoJet> retval;
624 AliError(Form(
"[e] ::GetJetConstituents wrong index: %d",idx));
631 std::vector<fastjet::PseudoJet>
636 std::vector<fastjet::PseudoJet> retval;
641 AliError(Form(
"[e] ::GetJetConstituents wrong index: %d",idx));
648 std::vector<fastjet::PseudoJet>
653 std::vector<fastjet::PseudoJet> retval;
659 AliError(Form(
"[e] ::GetFilteredJetConstituents wrong index: %d",idx));
672 AliError(
"[e] Run the jfinder first.");
681 std::vector<fastjet::PseudoJet> input_jets = sorted_by_pt(
fClustSeq->inclusive_jets());
682 input_jets.erase(input_jets.begin(), input_jets.begin() +
remove);
686 }
catch (fj::Error) {
687 AliError(
" [w] FJ Exception caught.");
715 #ifndef FASTJET_VERSION
721 if (
fAlgor == fj::plugin_algorithm) {
741 AliError(
"[e] Unrecognized plugin number!");
753 }
catch (fj::Error) {
754 AliError(
" [w] FJ Exception caught.");
759 #ifdef FASTJET_VERSION
760 fBkrdEstimator =
new fj::JetMedianBackgroundEstimator(fj::SelectorAbsRapMax(
fMaxRap));
790 }
catch (fj::Error) {
791 AliError(
" [w] FJ Exception caught.");
803 }
catch (fj::Error) {
804 AliError(
" [w] FJ Exception caught.");
819 #ifdef FASTJET_VERSION
820 std::cout <<
"WARNING! Setting FastJet in legacy mode" << std::endl;
822 if (fBkrdEstimator) {
823 fBkrdEstimator->set_provide_fj2_sigma(kTRUE);
824 fBkrdEstimator->set_use_area_4vector(kFALSE);
851 AliError(
" [w] FJ Exception caught.");
861 if (0.0 == median_pt) {
890 #ifdef FASTJET_VERSION
896 fj::contrib::GenericSubtractorInfo info_jetshape;
898 double subtracted_shape = (*fGenSubtractor)(jetshape,
fInclusiveJets[i], info_jetshape);
899 output.push_back(info_jetshape);
907 #ifdef FASTJET_VERSION
911 AliJetShapeMass shapeMass;
914 fGenSubtractorInfoJetMass.clear();
916 fj::contrib::GenericSubtractorInfo info;
918 double subtracted_shape = (*fGenSubtractor)(shapeMass,
fInclusiveJets[i], info);
919 fGenSubtractorInfoJetMass.push_back(info);
928 #ifdef FASTJET_VERSION
940 AliJetShapeGRNum shapeGRNum(r,
fDRStep);
941 AliJetShapeGRDen shapeGRDen(r,
fDRStep);
944 fGenSubtractorInfoGRNum.clear();
945 fGenSubtractorInfoGRDen.clear();
946 fj::contrib::GenericSubtractorInfo infoNum;
947 fj::contrib::GenericSubtractorInfo infoDen;
949 double sub_num = (*fGenSubtractor)(shapeGRNum,
fInclusiveJets[ijet], infoNum);
950 double sub_den = (*fGenSubtractor)(shapeGRDen, fInclusiveJets[ijet], infoDen);
952 fGenSubtractorInfoGRNum.push_back(infoNum);
953 fGenSubtractorInfoGRDen.push_back(infoDen);
965 #ifdef FASTJET_VERSION
969 AliJetShapeAngularity shapeAngularity;
972 fGenSubtractorInfoJetAngularity.clear();
974 fj::contrib::GenericSubtractorInfo infoAng;
976 double subtracted_shape = (*fGenSubtractor)(shapeAngularity,
fInclusiveJets[i], infoAng);
977 fGenSubtractorInfoJetAngularity.push_back(infoAng);
985 #ifdef FASTJET_VERSION
989 AliJetShapepTD shapepTD;
992 fGenSubtractorInfoJetpTD.clear();
994 fj::contrib::GenericSubtractorInfo infopTD;
996 double subtracted_shape = (*fGenSubtractor)(shapepTD,
fInclusiveJets[i], infopTD);
997 fGenSubtractorInfoJetpTD.push_back(infopTD);
1005 #ifdef FASTJET_VERSION
1009 AliJetShapeCircularity shapecircularity;
1012 fGenSubtractorInfoJetCircularity.clear();
1014 fj::contrib::GenericSubtractorInfo infoCirc;
1016 double subtracted_shape = (*fGenSubtractor)(shapecircularity,
fInclusiveJets[i], infoCirc);
1017 fGenSubtractorInfoJetCircularity.push_back(infoCirc);
1025 #ifdef FASTJET_VERSION
1029 AliJetShapeSigma2 shapesigma2;
1032 fGenSubtractorInfoJetSigma2.clear();
1034 fj::contrib::GenericSubtractorInfo infoSigma;
1036 double subtracted_shape = (*fGenSubtractor)(shapesigma2,
fInclusiveJets[i], infoSigma);
1037 fGenSubtractorInfoJetSigma2.push_back(infoSigma);
1045 #ifdef FASTJET_VERSION
1049 AliJetShapeConstituent shapeconst;
1052 fGenSubtractorInfoJetConstituent.clear();
1054 fj::contrib::GenericSubtractorInfo infoConst;
1056 double subtracted_shape = (*fGenSubtractor)(shapeconst,
fInclusiveJets[i], infoConst);
1057 fGenSubtractorInfoJetConstituent.push_back(infoConst);
1066 #ifdef FASTJET_VERSION
1070 AliJetShapeLeSub shapeLeSub;
1073 fGenSubtractorInfoJetLeSub.clear();
1075 fj::contrib::GenericSubtractorInfo infoLeSub;
1077 double subtracted_shape = (*fGenSubtractor)(shapeLeSub,
fInclusiveJets[i], infoLeSub);
1078 fGenSubtractorInfoJetLeSub.push_back(infoLeSub);
1087 #ifdef FASTJET_VERSION
1089 AliJetShape1subjettiness_kt shape1subjettiness_kt;
1098 #ifdef FASTJET_VERSION
1100 AliJetShape2subjettiness_kt shape2subjettiness_kt;
1109 #ifdef FASTJET_VERSION
1111 AliJetShape3subjettiness_kt shape3subjettiness_kt;
1120 #ifdef FASTJET_VERSION
1122 AliJetShapeOpeningAngle_kt shapeOpeningAngle_kt;
1131 #ifdef FASTJET_VERSION
1133 AliJetShape1subjettiness_ca shape1subjettiness_ca;
1142 #ifdef FASTJET_VERSION
1144 AliJetShape2subjettiness_ca shape2subjettiness_ca;
1153 #ifdef FASTJET_VERSION
1155 AliJetShapeOpeningAngle_ca shapeOpeningAngle_ca;
1164 #ifdef FASTJET_VERSION
1166 AliJetShape1subjettiness_akt02 shape1subjettiness_akt02;
1175 #ifdef FASTJET_VERSION
1177 AliJetShape2subjettiness_akt02 shape2subjettiness_akt02;
1186 #ifdef FASTJET_VERSION
1188 AliJetShapeOpeningAngle_akt02 shapeOpeningAngle_akt02;
1197 #ifdef FASTJET_VERSION
1199 AliJetShape1subjettiness_casd shape1subjettiness_casd;
1208 #ifdef FASTJET_VERSION
1210 AliJetShape2subjettiness_casd shape2subjettiness_casd;
1220 #ifdef FASTJET_VERSION
1222 AliJetShapeOpeningAngle_casd shapeOpeningAngle_casd;
1231 #ifdef FASTJET_VERSION
1232 CreateConstituentSub();
1239 fj::PseudoJet subtracted_jet(0.,0.,0.,0.);
1244 if(fConstituentSubtractor) {
delete fConstituentSubtractor; fConstituentSubtractor = NULL; }
1253 #ifdef FASTJET_VERSION
1254 CreateEventConstituentSub();
1258 if(fEventConstituentSubtractor) {
delete fEventConstituentSubtractor; fEventConstituentSubtractor = NULL; }
1267 #ifdef FASTJET_VERSION
1277 fj::PseudoJet groomed_jet(0.,0.,0.,0.);
1280 groomed_jet.set_user_index(i);
1281 if(groomed_jet!=0)
fGroomedJets.push_back(groomed_jet);
1285 if(fSoftDrop) {
delete fSoftDrop; fSoftDrop = NULL; }
1292 Int_t AliFJWrapper::CreateSoftDrop() {
1294 #ifdef FASTJET_VERSION
1295 if (fSoftDrop) {
delete fSoftDrop; }
1297 fSoftDrop =
new fj::contrib::SoftDrop(
fBeta,
fZcut);
1298 fSoftDrop->set_verbose_structure(kTRUE);
1306 Int_t AliFJWrapper::CreateGenSub() {
1308 #ifdef FASTJET_VERSION
1309 if (fGenSubtractor) {
delete fGenSubtractor; }
1312 { fGenSubtractor =
new fj::contrib::GenericSubtractor(
fRho,
fRhom); }
1315 fGenSubtractor =
new fj::contrib::GenericSubtractor(fBkrdEstimator);
1316 #if FASTJET_VERSION_NUMBER >= 30100
1317 fGenSubtractor->set_common_bge_for_rho_and_rhom();
1326 Int_t AliFJWrapper::CreateConstituentSub() {
1328 #ifdef FASTJET_VERSION
1329 if (fConstituentSubtractor) {
delete fConstituentSubtractor; }
1334 else { fConstituentSubtractor =
new fj::contrib::ConstituentSubtractor(fBkrdEstimator); }
1341 Int_t AliFJWrapper::CreateEventConstituentSub() {
1343 #ifdef FASTJET_VERSION
1344 if (fEventConstituentSubtractor) {
delete fEventConstituentSubtractor; }
1348 else fEventConstituentSubtractor =
new fj::contrib::ConstituentSubtractor(fBkrdEstimator);
1359 std::string opt(option);
1361 if (!opt.compare(
"kt"))
fAlgor = fj::kt_algorithm;
1362 if (!opt.compare(
"antikt"))
fAlgor = fj::antikt_algorithm;
1363 if (!opt.compare(
"cambridge"))
fAlgor = fj::cambridge_algorithm;
1364 if (!opt.compare(
"genkt"))
fAlgor = fj::genkt_algorithm;
1365 if (!opt.compare(
"cambridge_passive"))
fAlgor = fj::cambridge_for_passive_algorithm;
1366 if (!opt.compare(
"genkt_passive"))
fAlgor = fj::genkt_for_passive_algorithm;
1367 if (!opt.compare(
"ee_kt"))
fAlgor = fj::ee_kt_algorithm;
1368 if (!opt.compare(
"ee_genkt"))
fAlgor = fj::ee_genkt_algorithm;
1369 if (!opt.compare(
"plugin"))
fAlgor = fj::plugin_algorithm;
1377 std::string opt(option);
1379 if (!opt.compare(
"active"))
fAreaType = fj::active_area;
1380 if (!opt.compare(
"invalid"))
fAreaType = fj::invalid_area;
1381 if (!opt.compare(
"active_area_explicit_ghosts"))
fAreaType = fj::active_area_explicit_ghosts;
1382 if (!opt.compare(
"one_ghost_passive"))
fAreaType = fj::one_ghost_passive_area;
1383 if (!opt.compare(
"passive"))
fAreaType = fj::passive_area;
1384 if (!opt.compare(
"voronoi"))
fAreaType = fj::voronoi_area;
1394 std::string opt(option);
1396 if (!opt.compare(
"BIpt"))
fScheme = fj::BIpt_scheme;
1397 if (!opt.compare(
"BIpt2"))
fScheme = fj::BIpt2_scheme;
1398 if (!opt.compare(
"E"))
fScheme = fj::E_scheme;
1399 if (!opt.compare(
"pt"))
fScheme = fj::pt_scheme;
1400 if (!opt.compare(
"pt2"))
fScheme = fj::pt2_scheme;
1401 if (!opt.compare(
"Et"))
fScheme = fj::Et_scheme;
1402 if (!opt.compare(
"Et2"))
fScheme = fj::Et2_scheme;
1410 std::string opt(option);
1412 if (!opt.compare(
"Best"))
fStrategy = fj::Best;
1413 if (!opt.compare(
"N2MinHeapTiled"))
fStrategy = fj::N2MinHeapTiled;
1414 if (!opt.compare(
"N2Tiled"))
fStrategy = fj::N2Tiled;
1415 if (!opt.compare(
"N2PoorTiled"))
fStrategy = fj::N2PoorTiled;
1416 if (!opt.compare(
"N2Plain"))
fStrategy = fj::N2Plain;
1417 if (!opt.compare(
"N3Dumb"))
fStrategy = fj::N3Dumb;
1418 if (!opt.compare(
"NlnN"))
fStrategy = fj::NlnN;
1419 if (!opt.compare(
"NlnN3pi"))
fStrategy = fj::NlnN3pi;
1420 if (!opt.compare(
"NlnN4pi"))
fStrategy = fj::NlnN4pi;
1421 if (!opt.compare(
"NlnNCam4pi"))
fStrategy = fj::NlnNCam4pi;
1422 if (!opt.compare(
"NlnNCam2pi2R"))
fStrategy = fj::NlnNCam2pi2R;
1423 if (!opt.compare(
"NlnNCam"))
fStrategy = fj::NlnNCam;
1424 if (!opt.compare(
"plugin"))
fStrategy = fj::plugin_strategy;
1437 }
catch (fj::Error) {
1438 AliError(
" [w] FJ Exception caught.");
1445 std::vector<fastjet::PseudoJet> SubJet_Axes;
1446 fj::PseudoJet SubJet1_Axis;
1447 fj::PseudoJet SubJet2_Axis;
1448 std::vector<fastjet::PseudoJet> SubJets;
1449 fj::PseudoJet SubJet1;
1450 fj::PseudoJet SubJet2;
1453 if (Option==3 || Option==4 || SoftDropOn==1){
1457 fj::contrib::SoftDrop Soft_Drop(Beta_SD,ZCut);
1460 if (Soft_Dropped_Jet==0) Result_SoftDrop=-3;
1462 if (Soft_Dropped_Jet.constituents().size()>1){
1463 if (Option==3) Result_SoftDrop=Soft_Dropped_Jet.structure_of<fj::contrib::SoftDrop>().delta_R();
1464 else if (Option==4) Result_SoftDrop=Soft_Dropped_Jet.structure_of<fj::contrib::SoftDrop>().symmetry();
1466 if (SoftDropOn==1 && Soft_Dropped_Jet.constituents().size()>=N)
fFilteredJets[0]=Soft_Dropped_Jet;
1467 else if (SoftDropOn==1 && Soft_Dropped_Jet.constituents().size()<N)
return -1;
1476 fj::contrib::Nsubjettiness nSub(N, fj::contrib::KT_Axes(), fj::contrib::NormalizedMeasure(Beta,
fR));
1478 SubJet_Axes=nSub.currentAxes();
1479 SubJets=nSub.currentSubjets();
1481 else if (Measure==1){
1482 fj::contrib::Nsubjettiness nSub(N, fj::contrib::KT_Axes(), fj::contrib::UnnormalizedMeasure(Beta));
1484 SubJet_Axes=nSub.currentAxes();
1485 SubJets=nSub.currentSubjets();
1488 else if (Algorithm==1) {
1489 fj::contrib::Nsubjettiness nSub(N, fj::contrib::CA_Axes(), fj::contrib::NormalizedMeasure(Beta,
fR));
1491 SubJet_Axes=nSub.currentAxes();
1492 SubJets=nSub.currentSubjets();
1494 else if (Algorithm==2){
1495 fj::contrib::Nsubjettiness nSub(N, fj::contrib::AntiKT_Axes(Radius), fj::contrib::NormalizedMeasure(Beta,
fR));
1497 SubJet_Axes=nSub.currentAxes();
1498 SubJets=nSub.currentSubjets();
1500 else if (Algorithm==3) {
1501 fj::contrib::Nsubjettiness nSub(N, fj::contrib::WTA_KT_Axes(), fj::contrib::NormalizedMeasure(Beta,
fR));
1503 SubJet_Axes=nSub.currentAxes();
1504 SubJets=nSub.currentSubjets();
1506 else if (Algorithm==4) {
1507 fj::contrib::Nsubjettiness nSub(N, fj::contrib::WTA_CA_Axes(), fj::contrib::NormalizedMeasure(Beta,
fR));
1509 SubJet_Axes=nSub.currentAxes();
1510 SubJets=nSub.currentSubjets();
1512 else if (Algorithm==5){
1513 fj::contrib::Nsubjettiness nSub(N, fj::contrib::OnePass_KT_Axes(), fj::contrib::NormalizedMeasure(Beta,
fR));
1515 SubJet_Axes=nSub.currentAxes();
1516 SubJets=nSub.currentSubjets();
1518 else if (Algorithm==6){
1519 fj::contrib::Nsubjettiness nSub(N, fj::contrib::OnePass_CA_Axes(), fj::contrib::NormalizedMeasure(Beta,
fR));
1521 SubJet_Axes=nSub.currentAxes();
1522 SubJets=nSub.currentSubjets();
1524 else if (Algorithm==7){
1525 fj::contrib::Nsubjettiness nSub(N, fj::contrib::OnePass_AntiKT_Axes(Radius), fj::contrib::NormalizedMeasure(Beta,
fR));
1527 SubJet_Axes=nSub.currentAxes();
1528 SubJets=nSub.currentSubjets();
1530 else if (Algorithm==8){
1531 fj::contrib::Nsubjettiness nSub(N, fj::contrib::OnePass_WTA_KT_Axes(), fj::contrib::NormalizedMeasure(Beta,
fR));
1533 SubJet_Axes=nSub.currentAxes();
1534 SubJets=nSub.currentSubjets();
1536 else if (Algorithm==9){
1537 fj::contrib::Nsubjettiness nSub(N, fj::contrib::OnePass_WTA_CA_Axes(), fj::contrib::NormalizedMeasure(Beta,
fR));
1539 SubJet_Axes=nSub.currentAxes();
1540 SubJets=nSub.currentSubjets();
1542 else if (Algorithm==10){
1543 fj::contrib::Nsubjettiness nSub(N, fj::contrib::MultiPass_Axes(100), fj::contrib::NormalizedMeasure(Beta,
fR));
1545 SubJet_Axes=nSub.currentAxes();
1546 SubJets=nSub.currentSubjets();
1551 SubJet1_Axis=SubJet_Axes[0];
1552 Double_t SubJet1_Eta=SubJet1_Axis.pseudorapidity();
1554 Double_t SubJet1_Phi=SubJet1_Axis.phi();
1555 if(SubJet1_Phi < -1*TMath::Pi()) SubJet1_Phi += (2*TMath::Pi());
1556 else if (SubJet1_Phi > TMath::Pi()) SubJet1_Phi -= (2*TMath::Pi());
1559 if (SubJet_Axes.size()>1){
1560 SubJet2_Axis=SubJet_Axes[1];
1561 SubJet2_Eta=SubJet2_Axis.pseudorapidity();
1562 SubJet2_Phi=SubJet2_Axis.phi();
1563 if(SubJet2_Phi < -1*TMath::Pi()) SubJet2_Phi += (2*TMath::Pi());
1564 else if (SubJet2_Phi > TMath::Pi()) SubJet2_Phi -= (2*TMath::Pi());
1565 DeltaPhi=SubJet1_Phi-SubJet2_Phi;
1566 if(DeltaPhi < -1*TMath::Pi()) DeltaPhi += (2*TMath::Pi());
1567 else if (DeltaPhi > TMath::Pi()) DeltaPhi -= (2*TMath::Pi());
1572 Double_t SubJet1Eta=SubJet1.pseudorapidity();
1575 if(SubJet1Phi < -1*TMath::Pi()) SubJet1Phi += (2*TMath::Pi());
1576 else if (SubJet1Phi > TMath::Pi()) SubJet1Phi -= (2*TMath::Pi());
1579 Double_t SubJet1LeadingTrackPt=-3.0;
1580 Double_t SubJet2LeadingTrackPt=-3.0;
1581 std::vector<fj::PseudoJet> SubJet1Tracks = SubJet1.constituents();
1582 for (
Int_t i=0; i<SubJet1Tracks.size(); i++){
1583 if (SubJet1Tracks[i].perp() > SubJet1LeadingTrackPt) SubJet1LeadingTrackPt=SubJet1Tracks[i].perp();
1585 if (SubJet_Axes.size()>1){
1587 SubJet2Eta=SubJet2.pseudorapidity();
1588 SubJet2Phi=SubJet2.phi();
1589 if(SubJet2Phi < -1*TMath::Pi()) SubJet2Phi += (2*TMath::Pi());
1590 else if (SubJet2Phi > TMath::Pi()) SubJet2Phi -= (2*TMath::Pi());
1591 DeltaPhiSubJets=SubJet1Phi-SubJet2Phi;
1592 if(DeltaPhiSubJets < -1*TMath::Pi()) DeltaPhiSubJets += (2*TMath::Pi());
1593 else if (DeltaPhiSubJets > TMath::Pi()) DeltaPhiSubJets -= (2*TMath::Pi());
1594 std::vector<fj::PseudoJet> SubJet2Tracks = SubJet2.constituents();
1595 for (
Int_t i=0; i<SubJet2Tracks.size(); i++){
1596 if (SubJet2Tracks[i].perp() > SubJet2LeadingTrackPt) SubJet2LeadingTrackPt=SubJet2Tracks[i].perp();
1603 if (Option==0)
return Result;
1604 else if (Option==1 && SubJet_Axes.size()>1 && N==2)
return TMath::Sqrt(TMath::Power(SubJet1_Eta-SubJet2_Eta,2)+TMath::Power(DeltaPhi,2));
1605 else if (Option==2 && SubJet_Axes.size()>1 && N==2)
return TMath::Sqrt(TMath::Power(SubJet1_Eta-SubJet2_Eta,2)+TMath::Power(DeltaPhi,2));
1606 else if ((Option==3 || Option==4) && N==2)
return Result_SoftDrop;
1607 else if (Option==5 && SubJets.size()>1 && N==2)
return SubJet1.perp();
1608 else if (Option==6 && SubJets.size()>1 && N==2)
return SubJet2.perp();
1609 else if (Option==7 && SubJets.size()>1 && N==2)
return TMath::Sqrt(TMath::Power(SubJet1Eta-SubJet2Eta,2)+TMath::Power(DeltaPhiSubJets,2));
1610 else if (Option==8 && SubJets.size()>1 && N==2)
return SubJet1LeadingTrackPt;
1611 else if (Option==9 && SubJets.size()>1 && N==2)
return SubJet2LeadingTrackPt;
1617 Double32_t
AliFJWrapper::NSubjettinessDerivativeSub(
Int_t N,
Int_t Algorithm,
Double_t Radius,
Double_t Beta,
Double_t JetR, fastjet::PseudoJet jet,
Int_t Option,
Int_t Measure,
Double_t Beta_SD,
Double_t ZCut,
Int_t SoftDropOn){
1620 std::vector<fastjet::PseudoJet> SubJet_Axes;
1621 fj::PseudoJet SubJet1_Axis;
1622 fj::PseudoJet SubJet2_Axis;
1628 fj::contrib::SoftDrop Soft_Drop(Beta_SD,ZCut);
1630 fj::PseudoJet Soft_Dropped_Jet=Soft_Drop(jet);
1631 if (Soft_Dropped_Jet==0)
return -3;
1633 if (Soft_Dropped_Jet.constituents().size()>=N) jet=Soft_Dropped_Jet;
1634 else if (Soft_Dropped_Jet.constituents().size()<N)
return -1;
1640 fj::contrib::Nsubjettiness nSub(N, fj::contrib::KT_Axes(), fj::contrib::NormalizedMeasure(Beta,JetR));
1641 Result= nSub.result(jet);
1642 SubJet_Axes=nSub.currentAxes();
1644 else if (Algorithm==1) {
1645 fj::contrib::Nsubjettiness nSub(N, fj::contrib::CA_Axes(), fj::contrib::NormalizedMeasure(Beta,JetR));
1646 Result= nSub.result(jet);
1647 SubJet_Axes=nSub.currentAxes();
1649 else if (Algorithm==2){
1650 fj::contrib::Nsubjettiness nSub(N, fj::contrib::AntiKT_Axes(Radius), fj::contrib::NormalizedMeasure(Beta,JetR));
1651 Result= nSub.result(jet);
1652 SubJet_Axes=nSub.currentAxes();
1654 else if (Algorithm==3) {
1655 fj::contrib::Nsubjettiness nSub(N, fj::contrib::WTA_KT_Axes(), fj::contrib::NormalizedMeasure(Beta,JetR));
1656 Result= nSub.result(jet);
1657 SubJet_Axes=nSub.currentAxes();
1659 else if (Algorithm==4) {
1660 fj::contrib::Nsubjettiness nSub(N, fj::contrib::WTA_CA_Axes(), fj::contrib::NormalizedMeasure(Beta,JetR));
1661 Result= nSub.result(jet);
1662 SubJet_Axes=nSub.currentAxes();
1664 else if (Algorithm==5){
1665 fj::contrib::Nsubjettiness nSub(N, fj::contrib::OnePass_KT_Axes(), fj::contrib::NormalizedMeasure(Beta,JetR));
1666 Result= nSub.result(jet);
1667 SubJet_Axes=nSub.currentAxes();
1669 else if (Algorithm==6){
1670 fj::contrib::Nsubjettiness nSub(N, fj::contrib::OnePass_CA_Axes(), fj::contrib::NormalizedMeasure(Beta,JetR));
1671 Result= nSub.result(jet);
1672 SubJet_Axes=nSub.currentAxes();
1674 else if (Algorithm==7){
1675 fj::contrib::Nsubjettiness nSub(N, fj::contrib::OnePass_AntiKT_Axes(Radius), fj::contrib::NormalizedMeasure(Beta,JetR));
1676 Result= nSub.result(jet);
1677 SubJet_Axes=nSub.currentAxes();
1679 else if (Algorithm==8){
1680 fj::contrib::Nsubjettiness nSub(N, fj::contrib::OnePass_WTA_KT_Axes(), fj::contrib::NormalizedMeasure(Beta,JetR));
1681 Result= nSub.result(jet);
1682 SubJet_Axes=nSub.currentAxes();
1684 else if (Algorithm==9){
1685 fj::contrib::Nsubjettiness nSub(N, fj::contrib::OnePass_WTA_CA_Axes(), fj::contrib::NormalizedMeasure(Beta,JetR));
1686 Result= nSub.result(jet);
1687 SubJet_Axes=nSub.currentAxes();
1689 else if (Algorithm==10){
1690 fj::contrib::Nsubjettiness nSub(N, fj::contrib::MultiPass_Axes(100), fj::contrib::NormalizedMeasure(Beta,JetR));
1691 Result= nSub.result(jet);
1692 SubJet_Axes=nSub.currentAxes();
1695 SubJet1_Axis=SubJet_Axes[0];
1696 Double_t SubJet1_Eta=SubJet1_Axis.pseudorapidity();
1698 Double_t SubJet1_Phi=SubJet1_Axis.phi();
1699 if(SubJet1_Phi < -1*TMath::Pi()) SubJet1_Phi += (2*TMath::Pi());
1700 else if (SubJet1_Phi > TMath::Pi()) SubJet1_Phi -= (2*TMath::Pi());
1703 if (SubJet_Axes.size()>1){
1704 SubJet2_Axis=SubJet_Axes[1];
1705 SubJet2_Eta=SubJet2_Axis.pseudorapidity();
1706 SubJet2_Phi=SubJet2_Axis.phi();
1707 if(SubJet2_Phi < -1*TMath::Pi()) SubJet2_Phi += (2*TMath::Pi());
1708 else if (SubJet2_Phi > TMath::Pi()) SubJet2_Phi -= (2*TMath::Pi());
1709 DeltaPhi=SubJet1_Phi-SubJet2_Phi;
1710 if(DeltaPhi < -1*TMath::Pi()) DeltaPhi += (2*TMath::Pi());
1711 else if (DeltaPhi > TMath::Pi()) DeltaPhi -= (2*TMath::Pi());
1715 if (Option==0)
return Result;
1716 else if (Option==1 && SubJet_Axes.size()>1 && N==2)
return TMath::Sqrt(TMath::Power(SubJet1_Eta-SubJet2_Eta,2)+TMath::Power(DeltaPhi,2));
1717 else if (Option==2 && SubJet_Axes.size()>1 && N==2)
return TMath::Sqrt(TMath::Power(SubJet1_Eta-SubJet2_Eta,2)+TMath::Power(DeltaPhi,2));
std::vector< fastjet::PseudoJet > fEventSubInputVectors
fastjet::PseudoJet GetJetAreaVector(UInt_t idx) const
fastjet::PseudoJet GetEventSubJetAreaVector(UInt_t idx) const
std::vector< double > fGRNumeratorSub
void SetRMaxAndStep(Double_t rmax, Double_t dr)
void SetUseExternalBkg(Bool_t b, Double_t rho, Double_t rhom)
Double_t GetFilteredJetArea(UInt_t idx) const
std::vector< fastjet::PseudoJet > fInputVectors
virtual std::vector< double > GetSubtractedJetsPts(Double_t median_pt=-1, Bool_t sorted=kFALSE)
fastjet::ClusterSequence * fClustSeqSA
virtual Int_t DoEventConstituentSubtraction()
virtual Int_t DoSoftDrop()
fastjet::ClusterSequenceActiveAreaExplicitGhosts * fClustSeqActGhosts
virtual Int_t DoGenericSubtractionJetOpeningAngle_kt()
virtual Int_t DoGenericSubtractionJetpTD()
Double_t GetMedianUsedForBgSubtraction() const
virtual void AddInputVectors(const std::vector< fastjet::PseudoJet > &vecs, Int_t offsetIndex=-99999)
std::vector< fastjet::PseudoJet > fInclusiveJets
fastjet::JetAlgorithm fAlgor
const char * GetTitle() const
fastjet::RecombinationScheme fScheme
std::vector< fastjet::PseudoJet > GetEventSubJetConstituents(UInt_t idx) const
virtual void CopySettingsFrom(const AliFJWrapper &wrapper)
virtual Int_t DoGenericSubtractionJetOpeningAngle_ca()
void SetupAlgorithmfromOpt(const char *option)
virtual Int_t DoGenericSubtractionJetAngularity()
virtual Int_t DoGenericSubtractionGR(Int_t ijet)
virtual Int_t DoGenericSubtractionJetMass()
void SetMinJetPt(Double_t MinPt)
void SetMaxRap(Double_t maxrap)
Double_t GetJetSubtractedPt(UInt_t idx) const
fastjet::PseudoJet GetFilteredJetAreaVector(UInt_t idx) const
void SetRecombScheme(const fastjet::RecombinationScheme &scheme)
fastjet::RangeDefinition * fRange
fastjet::ClusterSequenceActiveAreaExplicitGhosts * GetClusterSequenceGhosts() const
fastjet::ClusterSequence * GetClusterSequenceSA() const
void SetStrategy(const fastjet::Strategy &strat)
Double_t GetEventSubJetArea(UInt_t idx) const
virtual Int_t DoGenericSubtractionJet2subjettiness_casd()
std::vector< fastjet::PseudoJet > fFilteredJets
void SetupAreaTypefromOpt(const char *option)
virtual void ClearMemory()
fastjet::AreaType fAreaType
fastjet::ClusterSequenceArea * GetClusterSequence() const
virtual Int_t DoGenericSubtractionJetOpeningAngle_akt02()
const std::vector< fastjet::PseudoJet > & GetInclusiveJets() const
virtual Int_t DoGenericSubtractionJetOpeningAngle_casd()
fastjet::ClusterSequenceArea * fClustSeqES
AliFJWrapper & operator=(const AliFJWrapper &wrapper)
Double_t GetJetArea(UInt_t idx) const
std::vector< double > fSubtractedJetsPt
fastjet::JetDefinition::Plugin * fPlugin
const std::vector< fastjet::PseudoJet > & GetEventSubInputVectors() const
void SetLegacyMode(Bool_t mode)
void SetAlgorithm(const fastjet::JetAlgorithm &algor)
virtual Int_t DoGenericSubtractionJetCircularity()
void SetupSchemefromOpt(const char *option)
const std::vector< fastjet::PseudoJet > & GetInputGhosts() const
std::vector< fastjet::PseudoJet > fGroomedJets
void SetUseArea4Vector(Bool_t useA4v)
fastjet::ClusterSequenceArea * fClustSeq
void SetName(const char *name)
virtual void SubtractBackground(const Double_t median_pt=-1)
std::vector< fastjet::PseudoJet > fInputGhosts
virtual void Clear(const Option_t *="")
fastjet::VoronoiAreaSpec * fVorAreaSpec
std::vector< double > fGRDenominatorSub
fastjet::GhostedAreaSpec * fGhostedAreaSpec
void SetNRepeats(Int_t nrepeat)
const std::vector< fastjet::PseudoJet > & GetEventSubJets() const
virtual std::vector< double > GetGRNumeratorSub() const
std::vector< double > fGRDenominator
virtual Int_t DoGenericSubtractionJet1subjettiness_kt()
virtual Int_t DoGenericSubtractionJet1subjettiness_casd()
virtual void GetMedianAndSigma(Double_t &median, Double_t &sigma, Int_t remove=0) const
void SetGhostArea(Double_t gharea)
virtual Int_t DoGenericSubtractionJet2subjettiness_ca()
virtual Int_t DoGenericSubtractionJet1subjettiness_akt02()
Double_t fMedUsedForBgSub
std::vector< fastjet::PseudoJet > GetJetConstituents(UInt_t idx) const
fastjet::JetDefinition * fJetDef
virtual Int_t DoGenericSubtractionJetSigma2()
void SetupStrategyfromOpt(const char *option)
const std::vector< fastjet::PseudoJet > & GetInputVectors() const
fastjet::AreaDefinition * fAreaDef
virtual Int_t DoGenericSubtractionJet2subjettiness_akt02()
virtual std::vector< double > GetGRDenominatorSub() const
void SetMaxDelR(Double_t r)
virtual void DoGenericSubtraction(const fastjet::FunctionOfPseudoJet< Double32_t > &jetshape, std::vector< fastjet::contrib::GenericSubtractorInfo > &output)
void SetTitle(const char *title)
void SetPluginAlgor(Int_t plugin)
virtual Int_t DoConstituentSubtraction()
virtual std::vector< double > GetGRDenominator() const
void SetRhoRhom(Double_t rho, Double_t rhom)
void SetGridScatter(Double_t gridSc)
std::vector< fastjet::PseudoJet > fConstituentSubtrJets
Double_t NSubjettiness(Int_t N, Int_t Algorithm, Double_t Radius, Double_t Beta, Int_t Option=0, Int_t Measure=0, Double_t Beta_SD=0.0, Double_t ZCut=0.1, Int_t SoftDropOn=0)
std::vector< fastjet::PseudoJet > fEventSubJets
std::vector< fastjet::PseudoJet > fEventSubCorrectedVectors
void SetMeanGhostKt(Double_t meankt)
virtual void AddInputVector(Double_t px, Double_t py, Double_t pz, Double_t E, Int_t index=-99999)
virtual void AddInputGhost(Double_t px, Double_t py, Double_t pz, Double_t E, Int_t index=-99999)
Double32_t NSubjettinessDerivativeSub(Int_t N, Int_t Algorithm, Double_t Radius, Double_t Beta, Double_t JetR, fastjet::PseudoJet jet, Int_t Option=0, Int_t Measure=0, Double_t Beta_SD=0.0, Double_t ZCut=0.1, Int_t SoftDropOn=0)
virtual Int_t DoGenericSubtractionJet3subjettiness_kt()
void SetEventSub(Bool_t b)
std::vector< fastjet::PseudoJet > GetFilteredJetConstituents(UInt_t idx) const
virtual Int_t DoGenericSubtractionJet1subjettiness_ca()
void SetKtScatter(Double_t ktSc)
virtual std::vector< double > GetGRNumerator() const
virtual const char * ClassName() const
virtual void RemoveLastInputVector()
void SetAreaType(const fastjet::AreaType &atype)
virtual Int_t DoGenericSubtractionJetLeSub()
virtual Int_t DoGenericSubtractionJetConstituent()
const char * GetName() const
const std::vector< fastjet::PseudoJet > & GetFilteredJets() const
virtual Int_t DoGenericSubtractionJet2subjettiness_kt()
std::vector< double > fGRNumerator
fastjet::Strategy fStrategy