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);
165 #ifndef FASTJET_VERSION
168 fastjet::Selector *
fRange;
197 #ifdef FASTJET_VERSION
198 fastjet::JetMedianBackgroundEstimator *fBkrdEstimator;
200 fastjet::contrib::GenericSubtractor *fGenSubtractor;
201 fastjet::contrib::ConstituentSubtractor *fConstituentSubtractor;
202 fastjet::contrib::ConstituentSubtractor *fEventConstituentSubtractor;
203 fastjet::contrib::SoftDrop *fSoftDrop;
204 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJetMass;
205 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoGRNum;
206 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoGRDen;
207 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJetAngularity;
208 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJetpTD;
209 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJetCircularity;
210 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJetSigma2;
211 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJetConstituent;
212 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJetLeSub;
213 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJet1subjettiness_kt;
214 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJet2subjettiness_kt;
215 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJet3subjettiness_kt;
216 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJetOpeningAngle_kt;
217 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJet1subjettiness_ca;
218 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJet2subjettiness_ca;
219 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJetOpeningAngle_ca;
220 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJet1subjettiness_akt02;
221 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJet2subjettiness_akt02;
222 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJetOpeningAngle_akt02;
223 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJet1subjettiness_casd;
224 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJet2subjettiness_casd;
225 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJetOpeningAngle_casd;
249 #ifdef AliFJWrapper_CXX
250 #undef AliFJWrapper_CXX
253 #pragma GCC system_header
256 namespace fj = fastjet;
264 , fEventSubInputVectors ( )
265 , fEventSubCorrectedVectors ( )
270 , fSubtractedJetsPt ( )
271 , fConstituentSubtrJets ( )
275 , fGhostedAreaSpec (0)
282 , fClustSeqActGhosts (0)
283 , fStrategy (fj::Best)
284 , fAlgor (fj::kt_algorithm)
285 , fScheme (fj::BIpt_scheme)
286 , fAreaType (fj::active_area)
293 , fMeanGhostKt (1e-100)
295 , fMedUsedForBgSub (0)
296 , fUseArea4Vector (kFALSE)
302 #ifdef FASTJET_VERSION
305 , fConstituentSubtractor (0)
306 , fEventConstituentSubtractor (0)
307 , fGenSubtractorInfoJetMass ( )
308 , fGenSubtractorInfoGRNum ( )
309 , fGenSubtractorInfoGRDen ( )
310 , fGenSubtractorInfoJetAngularity ( )
311 , fGenSubtractorInfoJetpTD ( )
312 , fGenSubtractorInfoJetCircularity( )
313 , fGenSubtractorInfoJetSigma2()
314 , fGenSubtractorInfoJetConstituent ( )
315 , fGenSubtractorInfoJetLeSub ( )
316 , fGenSubtractorInfoJet1subjettiness_kt ( )
317 , fGenSubtractorInfoJet2subjettiness_kt ( )
318 , fGenSubtractorInfoJet3subjettiness_kt ( )
319 , fGenSubtractorInfoJetOpeningAngle_kt ( )
320 , fGenSubtractorInfoJet1subjettiness_ca ( )
321 , fGenSubtractorInfoJet2subjettiness_ca ( )
322 , fGenSubtractorInfoJetOpeningAngle_ca ( )
323 , fGenSubtractorInfoJet1subjettiness_akt02 ( )
324 , fGenSubtractorInfoJet2subjettiness_akt02 ( )
325 , fGenSubtractorInfoJetOpeningAngle_akt02 ( )
326 , fGenSubtractorInfoJet1subjettiness_casd ( )
327 , fGenSubtractorInfoJet2subjettiness_casd ( )
328 , fGenSubtractorInfoJetOpeningAngle_casd ( )
331 , fDoFilterArea (false)
332 , fLegacyMode (false)
333 , fUseExternalBkg (false)
341 , fGRDenominatorSub()
367 #ifdef FASTJET_VERSION
368 if (fBkrdEstimator) {
delete fBkrdEstimator; fBkrdEstimator = NULL; }
369 if (fGenSubtractor) {
delete fGenSubtractor; fGenSubtractor = NULL; }
370 if (fConstituentSubtractor) {
delete fConstituentSubtractor; fConstituentSubtractor = NULL; }
371 if (fSoftDrop) {
delete fSoftDrop; fSoftDrop = NULL;}
433 fastjet::PseudoJet inVec(px, py, pz, E);
437 inVec.set_user_index(index);
453 fj::PseudoJet inVec = vec;
457 inVec.set_user_index(index);
472 for (
UInt_t i = 0; i < vecs.size(); ++i) {
473 fj::PseudoJet inVec = vecs[i];
474 if (offsetIndex > -99999)
496 fastjet::PseudoJet inVec(px, py, pz, E);
498 if (index > -99999) {
499 inVec.set_user_index(index);
518 AliError(Form(
"[e] ::GetJetArea wrong index: %d",idx));
532 AliError(Form(
"[e] ::GetJetArea wrong index: %d",idx));
545 AliError(Form(
"[e] ::GetFilteredJetArea wrong index: %d",idx));
554 fastjet::PseudoJet retval;
558 AliError(Form(
"[e] ::GetJetArea wrong index: %d",idx));
567 fastjet::PseudoJet retval;
571 AliError(Form(
"[e] ::GetJetArea wrong index: %d",idx));
580 fastjet::PseudoJet retval;
584 AliError(Form(
"[e] ::GetFilteredJetArea wrong index: %d",idx));
596 if (kTRUE == sorted) {
615 std::vector<fastjet::PseudoJet>
620 std::vector<fastjet::PseudoJet> retval;
625 AliError(Form(
"[e] ::GetJetConstituents wrong index: %d",idx));
632 std::vector<fastjet::PseudoJet>
637 std::vector<fastjet::PseudoJet> retval;
642 AliError(Form(
"[e] ::GetJetConstituents wrong index: %d",idx));
649 std::vector<fastjet::PseudoJet>
654 std::vector<fastjet::PseudoJet> retval;
660 AliError(Form(
"[e] ::GetFilteredJetConstituents wrong index: %d",idx));
673 AliError(
"[e] Run the jfinder first.");
682 std::vector<fastjet::PseudoJet> input_jets = sorted_by_pt(
fClustSeq->inclusive_jets());
683 input_jets.erase(input_jets.begin(), input_jets.begin() +
remove);
687 }
catch (fj::Error) {
688 AliError(
" [w] FJ Exception caught.");
716 #ifndef FASTJET_VERSION
722 if (
fAlgor == fj::plugin_algorithm) {
742 AliError(
"[e] Unrecognized plugin number!");
754 }
catch (fj::Error) {
755 AliError(
" [w] FJ Exception caught.");
760 #ifdef FASTJET_VERSION
761 fBkrdEstimator =
new fj::JetMedianBackgroundEstimator(fj::SelectorAbsRapMax(
fMaxRap));
791 }
catch (fj::Error) {
792 AliError(
" [w] FJ Exception caught.");
804 }
catch (fj::Error) {
805 AliError(
" [w] FJ Exception caught.");
820 #ifdef FASTJET_VERSION
821 std::cout <<
"WARNING! Setting FastJet in legacy mode" << std::endl;
823 if (fBkrdEstimator) {
824 fBkrdEstimator->set_provide_fj2_sigma(kTRUE);
825 fBkrdEstimator->set_use_area_4vector(kFALSE);
852 AliError(
" [w] FJ Exception caught.");
862 if (0.0 == median_pt) {
891 #ifdef FASTJET_VERSION
897 fj::contrib::GenericSubtractorInfo info_jetshape;
899 double subtracted_shape = (*fGenSubtractor)(jetshape,
fInclusiveJets[i], info_jetshape);
900 output.push_back(info_jetshape);
908 #ifdef FASTJET_VERSION
912 AliJetShapeMass shapeMass;
915 fGenSubtractorInfoJetMass.clear();
917 fj::contrib::GenericSubtractorInfo info;
919 double subtracted_shape = (*fGenSubtractor)(shapeMass,
fInclusiveJets[i], info);
920 fGenSubtractorInfoJetMass.push_back(info);
929 #ifdef FASTJET_VERSION
941 AliJetShapeGRNum shapeGRNum(r,
fDRStep);
942 AliJetShapeGRDen shapeGRDen(r,
fDRStep);
945 fGenSubtractorInfoGRNum.clear();
946 fGenSubtractorInfoGRDen.clear();
947 fj::contrib::GenericSubtractorInfo infoNum;
948 fj::contrib::GenericSubtractorInfo infoDen;
950 double sub_num = (*fGenSubtractor)(shapeGRNum,
fInclusiveJets[ijet], infoNum);
951 double sub_den = (*fGenSubtractor)(shapeGRDen, fInclusiveJets[ijet], infoDen);
953 fGenSubtractorInfoGRNum.push_back(infoNum);
954 fGenSubtractorInfoGRDen.push_back(infoDen);
966 #ifdef FASTJET_VERSION
970 AliJetShapeAngularity shapeAngularity;
973 fGenSubtractorInfoJetAngularity.clear();
975 fj::contrib::GenericSubtractorInfo infoAng;
977 double subtracted_shape = (*fGenSubtractor)(shapeAngularity,
fInclusiveJets[i], infoAng);
978 fGenSubtractorInfoJetAngularity.push_back(infoAng);
986 #ifdef FASTJET_VERSION
990 AliJetShapepTD shapepTD;
993 fGenSubtractorInfoJetpTD.clear();
995 fj::contrib::GenericSubtractorInfo infopTD;
997 double subtracted_shape = (*fGenSubtractor)(shapepTD,
fInclusiveJets[i], infopTD);
998 fGenSubtractorInfoJetpTD.push_back(infopTD);
1006 #ifdef FASTJET_VERSION
1010 AliJetShapeCircularity shapecircularity;
1013 fGenSubtractorInfoJetCircularity.clear();
1015 fj::contrib::GenericSubtractorInfo infoCirc;
1017 double subtracted_shape = (*fGenSubtractor)(shapecircularity,
fInclusiveJets[i], infoCirc);
1018 fGenSubtractorInfoJetCircularity.push_back(infoCirc);
1026 #ifdef FASTJET_VERSION
1030 AliJetShapeSigma2 shapesigma2;
1033 fGenSubtractorInfoJetSigma2.clear();
1035 fj::contrib::GenericSubtractorInfo infoSigma;
1037 double subtracted_shape = (*fGenSubtractor)(shapesigma2,
fInclusiveJets[i], infoSigma);
1038 fGenSubtractorInfoJetSigma2.push_back(infoSigma);
1046 #ifdef FASTJET_VERSION
1050 AliJetShapeConstituent shapeconst;
1053 fGenSubtractorInfoJetConstituent.clear();
1055 fj::contrib::GenericSubtractorInfo infoConst;
1057 double subtracted_shape = (*fGenSubtractor)(shapeconst,
fInclusiveJets[i], infoConst);
1058 fGenSubtractorInfoJetConstituent.push_back(infoConst);
1067 #ifdef FASTJET_VERSION
1071 AliJetShapeLeSub shapeLeSub;
1074 fGenSubtractorInfoJetLeSub.clear();
1076 fj::contrib::GenericSubtractorInfo infoLeSub;
1078 double subtracted_shape = (*fGenSubtractor)(shapeLeSub,
fInclusiveJets[i], infoLeSub);
1079 fGenSubtractorInfoJetLeSub.push_back(infoLeSub);
1088 #ifdef FASTJET_VERSION
1090 AliJetShape1subjettiness_kt shape1subjettiness_kt;
1099 #ifdef FASTJET_VERSION
1101 AliJetShape2subjettiness_kt shape2subjettiness_kt;
1110 #ifdef FASTJET_VERSION
1112 AliJetShape3subjettiness_kt shape3subjettiness_kt;
1121 #ifdef FASTJET_VERSION
1123 AliJetShapeOpeningAngle_kt shapeOpeningAngle_kt;
1132 #ifdef FASTJET_VERSION
1134 AliJetShape1subjettiness_ca shape1subjettiness_ca;
1143 #ifdef FASTJET_VERSION
1145 AliJetShape2subjettiness_ca shape2subjettiness_ca;
1154 #ifdef FASTJET_VERSION
1156 AliJetShapeOpeningAngle_ca shapeOpeningAngle_ca;
1165 #ifdef FASTJET_VERSION
1167 AliJetShape1subjettiness_akt02 shape1subjettiness_akt02;
1176 #ifdef FASTJET_VERSION
1178 AliJetShape2subjettiness_akt02 shape2subjettiness_akt02;
1187 #ifdef FASTJET_VERSION
1189 AliJetShapeOpeningAngle_akt02 shapeOpeningAngle_akt02;
1198 #ifdef FASTJET_VERSION
1200 AliJetShape1subjettiness_casd shape1subjettiness_casd;
1209 #ifdef FASTJET_VERSION
1211 AliJetShape2subjettiness_casd shape2subjettiness_casd;
1221 #ifdef FASTJET_VERSION
1223 AliJetShapeOpeningAngle_casd shapeOpeningAngle_casd;
1232 #ifdef FASTJET_VERSION
1233 CreateConstituentSub();
1240 fj::PseudoJet subtracted_jet(0.,0.,0.,0.);
1245 if(fConstituentSubtractor) {
delete fConstituentSubtractor; fConstituentSubtractor = NULL; }
1254 #ifdef FASTJET_VERSION
1255 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){
1544 fj::contrib::Nsubjettiness nSub(N, fj::contrib::MultiPass_Axes(100), fj::contrib::NormalizedCutoffMeasure(Beta,
fR,10.0));
1546 SubJet_Axes=nSub.currentAxes();
1547 SubJets=nSub.currentSubjets();
1553 SubJet1_Axis=SubJet_Axes[0];
1554 Double_t SubJet1_Eta=SubJet1_Axis.pseudorapidity();
1556 Double_t SubJet1_Phi=SubJet1_Axis.phi();
1557 if(SubJet1_Phi < -1*TMath::Pi()) SubJet1_Phi += (2*TMath::Pi());
1558 else if (SubJet1_Phi > TMath::Pi()) SubJet1_Phi -= (2*TMath::Pi());
1561 if (SubJet_Axes.size()>1){
1562 SubJet2_Axis=SubJet_Axes[1];
1563 SubJet2_Eta=SubJet2_Axis.pseudorapidity();
1564 SubJet2_Phi=SubJet2_Axis.phi();
1565 if(SubJet2_Phi < -1*TMath::Pi()) SubJet2_Phi += (2*TMath::Pi());
1566 else if (SubJet2_Phi > TMath::Pi()) SubJet2_Phi -= (2*TMath::Pi());
1567 DeltaPhi=SubJet1_Phi-SubJet2_Phi;
1568 if(DeltaPhi < -1*TMath::Pi()) DeltaPhi += (2*TMath::Pi());
1569 else if (DeltaPhi > TMath::Pi()) DeltaPhi -= (2*TMath::Pi());
1574 Double_t SubJet1Eta=SubJet1.pseudorapidity();
1577 if(SubJet1Phi < -1*TMath::Pi()) SubJet1Phi += (2*TMath::Pi());
1578 else if (SubJet1Phi > TMath::Pi()) SubJet1Phi -= (2*TMath::Pi());
1581 Double_t SubJet1LeadingTrackPt=-3.0;
1582 Double_t SubJet2LeadingTrackPt=-3.0;
1583 std::vector<fj::PseudoJet> SubJet1Tracks = SubJet1.constituents();
1584 for (
Int_t i=0; i<SubJet1Tracks.size(); i++){
1585 if (SubJet1Tracks[i].perp() > SubJet1LeadingTrackPt) SubJet1LeadingTrackPt=SubJet1Tracks[i].perp();
1587 if (SubJet_Axes.size()>1){
1589 SubJet2Eta=SubJet2.pseudorapidity();
1590 SubJet2Phi=SubJet2.phi();
1591 if(SubJet2Phi < -1*TMath::Pi()) SubJet2Phi += (2*TMath::Pi());
1592 else if (SubJet2Phi > TMath::Pi()) SubJet2Phi -= (2*TMath::Pi());
1593 DeltaPhiSubJets=SubJet1Phi-SubJet2Phi;
1594 if(DeltaPhiSubJets < -1*TMath::Pi()) DeltaPhiSubJets += (2*TMath::Pi());
1595 else if (DeltaPhiSubJets > TMath::Pi()) DeltaPhiSubJets -= (2*TMath::Pi());
1596 std::vector<fj::PseudoJet> SubJet2Tracks = SubJet2.constituents();
1597 for (
Int_t i=0; i<SubJet2Tracks.size(); i++){
1598 if (SubJet2Tracks[i].perp() > SubJet2LeadingTrackPt) SubJet2LeadingTrackPt=SubJet2Tracks[i].perp();
1605 if (Option==0)
return Result;
1606 else if (Option==1 && SubJet_Axes.size()>1 && N==2)
return TMath::Sqrt(TMath::Power(SubJet1_Eta-SubJet2_Eta,2)+TMath::Power(DeltaPhi,2));
1607 else if (Option==2 && SubJet_Axes.size()>1 && N==2)
return TMath::Sqrt(TMath::Power(SubJet1_Eta-SubJet2_Eta,2)+TMath::Power(DeltaPhi,2));
1608 else if ((Option==3 || Option==4) && N==2)
return Result_SoftDrop;
1609 else if (Option==5 && SubJets.size()>1 && N==2)
return SubJet1.perp();
1610 else if (Option==6 && SubJets.size()>1 && N==2)
return SubJet2.perp();
1611 else if (Option==7 && SubJets.size()>1 && N==2)
return TMath::Sqrt(TMath::Power(SubJet1Eta-SubJet2Eta,2)+TMath::Power(DeltaPhiSubJets,2));
1612 else if (Option==8 && SubJets.size()>1 && N==2)
return SubJet1LeadingTrackPt;
1613 else if (Option==9 && SubJets.size()>1 && N==2)
return SubJet2LeadingTrackPt;
1619 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){
1622 std::vector<fastjet::PseudoJet> SubJet_Axes;
1623 fj::PseudoJet SubJet1_Axis;
1624 fj::PseudoJet SubJet2_Axis;
1630 fj::contrib::SoftDrop Soft_Drop(Beta_SD,ZCut);
1632 fj::PseudoJet Soft_Dropped_Jet=Soft_Drop(jet);
1633 if (Soft_Dropped_Jet==0)
return -3;
1635 if (Soft_Dropped_Jet.constituents().size()>=N) jet=Soft_Dropped_Jet;
1636 else if (Soft_Dropped_Jet.constituents().size()<N)
return -1;
1642 fj::contrib::Nsubjettiness nSub(N, fj::contrib::KT_Axes(), fj::contrib::NormalizedMeasure(Beta,JetR));
1643 Result= nSub.result(jet);
1644 SubJet_Axes=nSub.currentAxes();
1646 else if (Algorithm==1) {
1647 fj::contrib::Nsubjettiness nSub(N, fj::contrib::CA_Axes(), fj::contrib::NormalizedMeasure(Beta,JetR));
1648 Result= nSub.result(jet);
1649 SubJet_Axes=nSub.currentAxes();
1651 else if (Algorithm==2){
1652 fj::contrib::Nsubjettiness nSub(N, fj::contrib::AntiKT_Axes(Radius), fj::contrib::NormalizedMeasure(Beta,JetR));
1653 Result= nSub.result(jet);
1654 SubJet_Axes=nSub.currentAxes();
1656 else if (Algorithm==3) {
1657 fj::contrib::Nsubjettiness nSub(N, fj::contrib::WTA_KT_Axes(), fj::contrib::NormalizedMeasure(Beta,JetR));
1658 Result= nSub.result(jet);
1659 SubJet_Axes=nSub.currentAxes();
1661 else if (Algorithm==4) {
1662 fj::contrib::Nsubjettiness nSub(N, fj::contrib::WTA_CA_Axes(), fj::contrib::NormalizedMeasure(Beta,JetR));
1663 Result= nSub.result(jet);
1664 SubJet_Axes=nSub.currentAxes();
1666 else if (Algorithm==5){
1667 fj::contrib::Nsubjettiness nSub(N, fj::contrib::OnePass_KT_Axes(), fj::contrib::NormalizedMeasure(Beta,JetR));
1668 Result= nSub.result(jet);
1669 SubJet_Axes=nSub.currentAxes();
1671 else if (Algorithm==6){
1672 fj::contrib::Nsubjettiness nSub(N, fj::contrib::OnePass_CA_Axes(), fj::contrib::NormalizedMeasure(Beta,JetR));
1673 Result= nSub.result(jet);
1674 SubJet_Axes=nSub.currentAxes();
1676 else if (Algorithm==7){
1677 fj::contrib::Nsubjettiness nSub(N, fj::contrib::OnePass_AntiKT_Axes(Radius), fj::contrib::NormalizedMeasure(Beta,JetR));
1678 Result= nSub.result(jet);
1679 SubJet_Axes=nSub.currentAxes();
1681 else if (Algorithm==8){
1682 fj::contrib::Nsubjettiness nSub(N, fj::contrib::OnePass_WTA_KT_Axes(), fj::contrib::NormalizedMeasure(Beta,JetR));
1683 Result= nSub.result(jet);
1684 SubJet_Axes=nSub.currentAxes();
1686 else if (Algorithm==9){
1687 fj::contrib::Nsubjettiness nSub(N, fj::contrib::OnePass_WTA_CA_Axes(), fj::contrib::NormalizedMeasure(Beta,JetR));
1688 Result= nSub.result(jet);
1689 SubJet_Axes=nSub.currentAxes();
1691 else if (Algorithm==10){
1693 fj::contrib::Nsubjettiness nSub(N, fj::contrib::MultiPass_Axes(100), fj::contrib::NormalizedCutoffMeasure(Beta,JetR,10.0));
1694 Result= nSub.result(jet);
1695 SubJet_Axes=nSub.currentAxes();
1698 SubJet1_Axis=SubJet_Axes[0];
1699 Double_t SubJet1_Eta=SubJet1_Axis.pseudorapidity();
1701 Double_t SubJet1_Phi=SubJet1_Axis.phi();
1702 if(SubJet1_Phi < -1*TMath::Pi()) SubJet1_Phi += (2*TMath::Pi());
1703 else if (SubJet1_Phi > TMath::Pi()) SubJet1_Phi -= (2*TMath::Pi());
1706 if (SubJet_Axes.size()>1){
1707 SubJet2_Axis=SubJet_Axes[1];
1708 SubJet2_Eta=SubJet2_Axis.pseudorapidity();
1709 SubJet2_Phi=SubJet2_Axis.phi();
1710 if(SubJet2_Phi < -1*TMath::Pi()) SubJet2_Phi += (2*TMath::Pi());
1711 else if (SubJet2_Phi > TMath::Pi()) SubJet2_Phi -= (2*TMath::Pi());
1712 DeltaPhi=SubJet1_Phi-SubJet2_Phi;
1713 if(DeltaPhi < -1*TMath::Pi()) DeltaPhi += (2*TMath::Pi());
1714 else if (DeltaPhi > TMath::Pi()) DeltaPhi -= (2*TMath::Pi());
1718 if (Option==0)
return Result;
1719 else if (Option==1 && SubJet_Axes.size()>1 && N==2)
return TMath::Sqrt(TMath::Power(SubJet1_Eta-SubJet2_Eta,2)+TMath::Power(DeltaPhi,2));
1720 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)
void SetAlpha(Double_t a)
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