Skip to content

Commit 6d55f14

Browse files
committed
jetTaggerHF.cxx :
- Added support for the 24g4 dataset in CCDB. - Enabled loading of resolution function parameters from CCDB. JetTaggingUtilities.h : - Modified to allow overloading of the getJetProbability function. - Adjusted to apply different resolution functions based on the track p_T range.
1 parent bb2e8e9 commit 6d55f14

File tree

2 files changed

+127
-2
lines changed

2 files changed

+127
-2
lines changed

PWGJE/Core/JetTaggingUtilities.h

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -641,6 +641,55 @@ float getJetProbability(T const& fResoFuncjet, U const& jet, V const& /*tracks*/
641641
return jetProb;
642642
}
643643

644+
// overloading for the case of using resolution function for each pt range
645+
template <typename T, typename U, typename V>
646+
float getJetProbability(std::vector<std::unique_ptr<T>> const& fResoFuncjets, U const& jet, V const& /*tracks*/, float trackDcaXYMax, float trackDcaZMax, float minSignImpXYSig = -10)
647+
{
648+
std::vector<float> jetTracksPt;
649+
float trackjetProb = 1.;
650+
651+
for (auto const& track : jet.template tracks_as<V>()) {
652+
if (!trackAcceptanceWithDca(track, trackDcaXYMax, trackDcaZMax))
653+
continue;
654+
655+
float probTrack = -1;
656+
// jtrack.pt() 범위에 따라 적절한 fResoFuncjet 선택
657+
if (track.pt() >= 0.0 && track.pt() < 0.5) {
658+
probTrack = getTrackProbability(fResoFuncjets.at(0), track, minSignImpXYSig);
659+
} else if (track.pt() >= 0.5 && track.pt() < 1.0) {
660+
probTrack = getTrackProbability(fResoFuncjets.at(1), track, minSignImpXYSig);
661+
} else if (track.pt() >= 1.0 && track.pt() < 2.0) {
662+
probTrack = getTrackProbability(fResoFuncjets.at(2), track, minSignImpXYSig);
663+
} else if (track.pt() >= 2.0 && track.pt() < 4.0) {
664+
probTrack = getTrackProbability(fResoFuncjets.at(3), track, minSignImpXYSig);
665+
} else if (track.pt() >= 4.0 && track.pt() < 6.0) {
666+
probTrack = getTrackProbability(fResoFuncjets.at(4), track, minSignImpXYSig);
667+
} else if (track.pt() >= 6.0 && track.pt() < 9.0) {
668+
probTrack = getTrackProbability(fResoFuncjets.at(5), track, minSignImpXYSig);
669+
} else if (track.pt() >= 9.0) {
670+
probTrack = getTrackProbability(fResoFuncjets.at(6), track, minSignImpXYSig);
671+
}
672+
673+
auto geoSign = getGeoSign(jet, track);
674+
if (geoSign > 0) { // only take positive sign track for JP calculation
675+
trackjetProb *= probTrack;
676+
jetTracksPt.push_back(track.pt());
677+
}
678+
}
679+
680+
float jetProb = -1.;
681+
if (jetTracksPt.size() < 2)
682+
return -1;
683+
684+
float sumjetProb = 0.;
685+
for (std::vector<float>::size_type i = 0; i < jetTracksPt.size(); i++) {
686+
sumjetProb += (std::pow(-1 * std::log(trackjetProb), static_cast<int>(i)) / TMath::Factorial(i));
687+
}
688+
689+
jetProb = trackjetProb * sumjetProb;
690+
return jetProb;
691+
}
692+
644693
// For secaondy vertex method utilites
645694
template <typename ProngType, typename JetType>
646695
typename ProngType::iterator jetFromProngMaxDecayLength(const JetType& jet, float const& prongChi2PCAMin, float prongChi2PCAMax, float prongsigmaLxyMax, float prongIPxyMin, float prongIPxyMax, bool doXYZ = false, bool* checkSv = nullptr)

PWGJE/TableProducer/jetTaggerHF.cxx

Lines changed: 78 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,10 @@ struct JetTaggerHFTask {
9393
Configurable<int64_t> timestampCCDB{"timestampCCDB", -1, "timestamp of the ONNX file for ML model used to query in CCDB"};
9494
Configurable<bool> loadModelsFromCCDB{"loadModelsFromCCDB", false, "Flag to enable or disable the loading of models from CCDB"};
9595

96+
Configurable<std::string> IPparameterPathsCCDB{"IPparameterPathsCCDB", "Users/l/leehy/LHC24g4/", "Paths for fitting parameters of resolution functions for IP method on CCDB"};
97+
Configurable<std::vector<int64_t>> IPtimestampCCDB{"IPtimestampCCDB", std::vector<int64_t>{1737027389227, 1737027391774, 1737027393668, 1737027395548, 1737027397505, 1737027399396, 1737027401294}, "timestamp of the resolution function for IP method used to query in CCDB"};
98+
Configurable<bool> usepTcategorize{"usepTcategorize", false, "p_T categorize TF1 function with Inclusive jet"};
99+
96100
// axis spec
97101
ConfigurableAxis binTrackProbability{"binTrackProbability", {100, 0.f, 1.f}, ""};
98102
ConfigurableAxis binJetFlavour{"binJetFlavour", {6, -0.5, 5.5}, ""};
@@ -105,13 +109,31 @@ struct JetTaggerHFTask {
105109
bool useResoFuncFromIncJet = false;
106110
int maxOrder = -1;
107111
int resoFuncMatch = 0;
108-
std::vector<float> jetProb;
112+
109113
std::unique_ptr<TF1> fSignImpXYSigData = nullptr;
110114
std::unique_ptr<TF1> fSignImpXYSigIncJetMC = nullptr;
111115
std::unique_ptr<TF1> fSignImpXYSigCharmJetMC = nullptr;
112116
std::unique_ptr<TF1> fSignImpXYSigBeautyJetMC = nullptr;
113117
std::unique_ptr<TF1> fSignImpXYSigLfJetMC = nullptr;
114118

119+
std::vector<float> vecParamsIncJetMC_CCDB_0;
120+
std::vector<float> vecParamsIncJetMC_CCDB_1;
121+
std::vector<float> vecParamsIncJetMC_CCDB_2;
122+
std::vector<float> vecParamsIncJetMC_CCDB_3;
123+
std::vector<float> vecParamsIncJetMC_CCDB_4;
124+
std::vector<float> vecParamsIncJetMC_CCDB_5;
125+
std::vector<float> vecParamsIncJetMC_CCDB_6;
126+
127+
std::unique_ptr<TF1> fSignImpXYSigIncJetMC_CCDB_0 = nullptr;
128+
std::unique_ptr<TF1> fSignImpXYSigIncJetMC_CCDB_1 = nullptr;
129+
std::unique_ptr<TF1> fSignImpXYSigIncJetMC_CCDB_2 = nullptr;
130+
std::unique_ptr<TF1> fSignImpXYSigIncJetMC_CCDB_3 = nullptr;
131+
std::unique_ptr<TF1> fSignImpXYSigIncJetMC_CCDB_4 = nullptr;
132+
std::unique_ptr<TF1> fSignImpXYSigIncJetMC_CCDB_5 = nullptr;
133+
std::unique_ptr<TF1> fSignImpXYSigIncJetMC_CCDB_6 = nullptr;
134+
135+
std::vector<std::unique_ptr<TF1>> fSignImpXYSigIncJetMC_CCDB_vec;
136+
115137
std::vector<uint16_t> decisionNonML;
116138
std::vector<float> scoreML;
117139

@@ -123,7 +145,11 @@ struct JetTaggerHFTask {
123145
jetProb = jettaggingutilities::getJetProbability(fSignImpXYSigData, jet, tracks, trackDcaXYMax, trackDcaZMax, minSignImpXYSig);
124146
} else {
125147
if (useResoFuncFromIncJet) {
126-
jetProb = jettaggingutilities::getJetProbability(fSignImpXYSigIncJetMC, jet, tracks, trackDcaXYMax, trackDcaZMax, minSignImpXYSig);
148+
if (usepTcategorize) {
149+
jetProb = jettaggingutilities::getJetProbability(fSignImpXYSigIncJetMC_CCDB_vec, jet, tracks, trackDcaXYMax, trackDcaZMax, minSignImpXYSig);
150+
} else {
151+
jetProb = jettaggingutilities::getJetProbability(fSignImpXYSigIncJetMC, jet, tracks, trackDcaXYMax, trackDcaZMax, minSignImpXYSig);
152+
}
127153
} else {
128154
if (origin == JetTaggingSpecies::charm) {
129155
jetProb = jettaggingutilities::getJetProbability(fSignImpXYSigCharmJetMC, jet, tracks, trackDcaXYMax, trackDcaZMax, minSignImpXYSig);
@@ -206,6 +232,27 @@ struct JetTaggerHFTask {
206232
std::vector<float> vecParamsBeautyJetMC;
207233
std::vector<float> vecParamsLfJetMC;
208234

235+
TF1* CCDB_ResoFunc_0 = nullptr;
236+
TF1* CCDB_ResoFunc_1 = nullptr;
237+
TF1* CCDB_ResoFunc_2 = nullptr;
238+
TF1* CCDB_ResoFunc_3 = nullptr;
239+
TF1* CCDB_ResoFunc_4 = nullptr;
240+
TF1* CCDB_ResoFunc_5 = nullptr;
241+
TF1* CCDB_ResoFunc_6 = nullptr;
242+
243+
ccdbApi.init(ccdbUrl);
244+
if (usepTcategorize) {
245+
std::map<std::string, std::string> metadata; // dummy meta data (will be updated)
246+
// fill the timestamp directly of each TF1 according to p_T track range
247+
CCDB_ResoFunc_0 = ccdbApi.retrieveFromTFileAny<TF1>(IPparameterPathsCCDB, metadata, IPtimestampCCDB->at(0)); // 0 < p_T < 0.5
248+
CCDB_ResoFunc_1 = ccdbApi.retrieveFromTFileAny<TF1>(IPparameterPathsCCDB, metadata, IPtimestampCCDB->at(1)); // 0.5 < p_T < 1
249+
CCDB_ResoFunc_2 = ccdbApi.retrieveFromTFileAny<TF1>(IPparameterPathsCCDB, metadata, IPtimestampCCDB->at(2)); // 1 < p_T < 2
250+
CCDB_ResoFunc_3 = ccdbApi.retrieveFromTFileAny<TF1>(IPparameterPathsCCDB, metadata, IPtimestampCCDB->at(3)); // 2 < p_T < 4
251+
CCDB_ResoFunc_4 = ccdbApi.retrieveFromTFileAny<TF1>(IPparameterPathsCCDB, metadata, IPtimestampCCDB->at(4)); // 4 < p_T < 6
252+
CCDB_ResoFunc_5 = ccdbApi.retrieveFromTFileAny<TF1>(IPparameterPathsCCDB, metadata, IPtimestampCCDB->at(5)); // 6 < p_T < 9
253+
CCDB_ResoFunc_6 = ccdbApi.retrieveFromTFileAny<TF1>(IPparameterPathsCCDB, metadata, IPtimestampCCDB->at(6)); // 9 < p_T
254+
}
255+
209256
maxOrder = numCount + 1; // 0: untagged, >1 : N ordering
210257

211258
// Set up the resolution function
@@ -250,6 +297,19 @@ struct JetTaggerHFTask {
250297
LOG(info) << "defined parameters of resolution function: PYTHIA8, JJ, weighted, LHC24g4 & use inclusive distribution";
251298
useResoFuncFromIncJet = true;
252299
break;
300+
case 6: // TODO
301+
vecParamsData = (std::vector<float>)paramsResoFuncData;
302+
for (int i = 0; i < 9; i++) {
303+
vecParamsIncJetMC_CCDB_0.emplace_back(CCDB_ResoFunc_0->GetParameter(i));
304+
vecParamsIncJetMC_CCDB_1.emplace_back(CCDB_ResoFunc_1->GetParameter(i));
305+
vecParamsIncJetMC_CCDB_2.emplace_back(CCDB_ResoFunc_2->GetParameter(i));
306+
vecParamsIncJetMC_CCDB_3.emplace_back(CCDB_ResoFunc_3->GetParameter(i));
307+
vecParamsIncJetMC_CCDB_4.emplace_back(CCDB_ResoFunc_4->GetParameter(i));
308+
vecParamsIncJetMC_CCDB_5.emplace_back(CCDB_ResoFunc_5->GetParameter(i));
309+
vecParamsIncJetMC_CCDB_6.emplace_back(CCDB_ResoFunc_6->GetParameter(i));
310+
}
311+
LOG(info) << "defined parameters of resolution function from CCDB";
312+
useResoFuncFromIncJet = true;
253313
default:
254314
LOG(fatal) << "undefined parameters of resolution function. Fix it!";
255315
break;
@@ -261,6 +321,22 @@ struct JetTaggerHFTask {
261321
fSignImpXYSigBeautyJetMC = jettaggingutilities::setResolutionFunction(vecParamsBeautyJetMC);
262322
fSignImpXYSigLfJetMC = jettaggingutilities::setResolutionFunction(vecParamsLfJetMC);
263323

324+
fSignImpXYSigIncJetMC_CCDB_0 = jettaggingutilities::setResolutionFunction(vecParamsIncJetMC_CCDB_0);
325+
fSignImpXYSigIncJetMC_CCDB_1 = jettaggingutilities::setResolutionFunction(vecParamsIncJetMC_CCDB_1);
326+
fSignImpXYSigIncJetMC_CCDB_2 = jettaggingutilities::setResolutionFunction(vecParamsIncJetMC_CCDB_2);
327+
fSignImpXYSigIncJetMC_CCDB_3 = jettaggingutilities::setResolutionFunction(vecParamsIncJetMC_CCDB_3);
328+
fSignImpXYSigIncJetMC_CCDB_4 = jettaggingutilities::setResolutionFunction(vecParamsIncJetMC_CCDB_4);
329+
fSignImpXYSigIncJetMC_CCDB_5 = jettaggingutilities::setResolutionFunction(vecParamsIncJetMC_CCDB_5);
330+
fSignImpXYSigIncJetMC_CCDB_6 = jettaggingutilities::setResolutionFunction(vecParamsIncJetMC_CCDB_6);
331+
332+
fSignImpXYSigIncJetMC_CCDB_vec.emplace_back(std::move(fSignImpXYSigIncJetMC_CCDB_0));
333+
fSignImpXYSigIncJetMC_CCDB_vec.emplace_back(std::move(fSignImpXYSigIncJetMC_CCDB_1));
334+
fSignImpXYSigIncJetMC_CCDB_vec.emplace_back(std::move(fSignImpXYSigIncJetMC_CCDB_2));
335+
fSignImpXYSigIncJetMC_CCDB_vec.emplace_back(std::move(fSignImpXYSigIncJetMC_CCDB_3));
336+
fSignImpXYSigIncJetMC_CCDB_vec.emplace_back(std::move(fSignImpXYSigIncJetMC_CCDB_4));
337+
fSignImpXYSigIncJetMC_CCDB_vec.emplace_back(std::move(fSignImpXYSigIncJetMC_CCDB_5));
338+
fSignImpXYSigIncJetMC_CCDB_vec.emplace_back(std::move(fSignImpXYSigIncJetMC_CCDB_6));
339+
264340
// Use QA for effectivness of track probability
265341
if (trackProbQA) {
266342
AxisSpec trackProbabilityAxis = {binTrackProbability, "Track proability"};

0 commit comments

Comments
 (0)