@@ -64,7 +64,11 @@ struct JetTaggerHFTask {
6464 Configurable<bool > trackProbQA{" trackProbQA" , false , " fill track probability histograms separately for geometric positive and negative tracks for QA" };
6565 Configurable<int > numCount{" numCount" , 3 , " number of track counting" };
6666 Configurable<int > resoFuncMatching{" resoFuncMatching" , 0 , " matching parameters of resolution function as MC samble (0: custom, 1: custom & inc, 2: MB, 3: MB & inc, 4: JJ, 5: JJ & inc)" };
67- Configurable<std::vector<std::string>> pathsCCDBforIPparamer{" pathsCCDBforIPparamer" , std::vector<std::string>{" Users/l/leehy/LHC24g4/f_inclusive_0" }, " Paths for fitting parameters of resolution functions for IP method on CCDB" };
67+ Configurable<std::vector<std::string>> pathsCCDBforIPDataparameter{" pathsCCDBforIPDataparameter" , std::vector<std::string>{" Users/l/leehy/LHC24g4/f_inclusive_0" }, " Paths for fitting parameters of resolution functions of data for IP method on CCDB" };
68+ Configurable<std::vector<std::string>> pathsCCDBforIPIncparameter{" pathsCCDBforIPIncparameter" , std::vector<std::string>{" Users/l/leehy/LHC24g4/f_inclusive_0" }, " Paths for fitting parameters of resolution functions of inclusive for IP method on CCDB" };
69+ Configurable<std::vector<std::string>> pathsCCDBforIPBeautyparameter{" pathsCCDBforIPBeautyparameter" , std::vector<std::string>{" Users/l/leehy/LHC24g4/f_inclusive_0" }, " Paths for fitting parameters of resolution functions of beauty for IP method on CCDB" };
70+ Configurable<std::vector<std::string>> pathsCCDBforIPCharmparameter{" pathsCCDBforIPCharmparameter" , std::vector<std::string>{" Users/l/leehy/LHC24g4/f_inclusive_0" }, " Paths for fitting parameters of resolution functions of charm for IP method on CCDB" };
71+ Configurable<std::vector<std::string>> pathsCCDBforIPLfparameter{" pathsCCDBforIPLfparameter" , std::vector<std::string>{" Users/l/leehy/LHC24g4/f_inclusive_0" }, " Paths for fitting parameters of resolution functions of light flavour for IP method on CCDB" };
6872 Configurable<bool > usepTcategorize{" usepTcategorize" , false , " p_T categorize TF1 function with Inclusive jet" };
6973 Configurable<std::vector<float >> paramsResoFuncData{" paramsResoFuncData" , std::vector<float >{-1.0 }, " parameters of gaus(0)+expo(3)+expo(5)+expo(7))" };
7074 Configurable<std::vector<float >> paramsResoFuncIncJetMC{" paramsResoFuncIncJetMC" , std::vector<float >{-1.0 }, " parameters of gaus(0)+expo(3)+expo(5)+expo(7)))" };
@@ -135,8 +139,17 @@ struct JetTaggerHFTask {
135139 std::unique_ptr<TF1> fSignImpXYSigBeautyJetMC = nullptr ;
136140 std::unique_ptr<TF1> fSignImpXYSigLfJetMC = nullptr ;
137141
142+ std::vector<std::vector<float >> vecParamsDataJetCCDB;
138143 std::vector<std::vector<float >> vecParamsIncJetMcCCDB;
144+ std::vector<std::vector<float >> vecParamsBeautyJetMcCCDB;
145+ std::vector<std::vector<float >> vecParamsCharmJetMcCCDB;
146+ std::vector<std::vector<float >> vecParamsLfJetMcCCDB;
147+
148+ std::vector<std::unique_ptr<TF1>> vecfSignImpXYSigDataJetCCDB;
139149 std::vector<std::unique_ptr<TF1>> vecfSignImpXYSigIncJetMcCCDB;
150+ std::vector<std::unique_ptr<TF1>> vecfSignImpXYSigCharmJetMcCCDB;
151+ std::vector<std::unique_ptr<TF1>> vecfSignImpXYSigBeautyJetMcCCDB;
152+ std::vector<std::unique_ptr<TF1>> vecfSignImpXYSigLfJetMcCCDB;
140153
141154 std::vector<uint16_t > decisionNonML;
142155 std::vector<float > scoreML;
@@ -148,7 +161,11 @@ struct JetTaggerHFTask {
148161 {
149162 float jetProb = -1.0 ;
150163 if (!isMC) {
151- jetProb = jettaggingutilities::getJetProbability (fSignImpXYSigData , jet, tracks, trackDcaXYMax, trackDcaZMax, minSignImpXYSig);
164+ if (usepTcategorize) {
165+ jetProb = jettaggingutilities::getJetProbability (vecfSignImpXYSigDataJetCCDB, jet, tracks, trackDcaXYMax, trackDcaZMax, minSignImpXYSig);
166+ } else {
167+ jetProb = jettaggingutilities::getJetProbability (fSignImpXYSigData , jet, tracks, trackDcaXYMax, trackDcaZMax, minSignImpXYSig);
168+ }
152169 } else {
153170 if (useResoFuncFromIncJet) {
154171 if (usepTcategorize) {
@@ -158,11 +175,23 @@ struct JetTaggerHFTask {
158175 }
159176 } else {
160177 if (origin == JetTaggingSpecies::charm) {
161- jetProb = jettaggingutilities::getJetProbability (fSignImpXYSigCharmJetMC , jet, tracks, trackDcaXYMax, trackDcaZMax, minSignImpXYSig);
178+ if (usepTcategorize) {
179+ jetProb = jettaggingutilities::getJetProbability (vecfSignImpXYSigCharmJetMcCCDB, jet, tracks, trackDcaXYMax, trackDcaZMax, minSignImpXYSig);
180+ } else {
181+ jetProb = jettaggingutilities::getJetProbability (fSignImpXYSigCharmJetMC , jet, tracks, trackDcaXYMax, trackDcaZMax, minSignImpXYSig);
182+ }
162183 } else if (origin == JetTaggingSpecies::beauty) {
163- jetProb = jettaggingutilities::getJetProbability (fSignImpXYSigBeautyJetMC , jet, tracks, trackDcaXYMax, trackDcaZMax, minSignImpXYSig);
184+ if (usepTcategorize) {
185+ jetProb = jettaggingutilities::getJetProbability (vecfSignImpXYSigBeautyJetMcCCDB, jet, tracks, trackDcaXYMax, trackDcaZMax, minSignImpXYSig);
186+ } else {
187+ jetProb = jettaggingutilities::getJetProbability (fSignImpXYSigBeautyJetMC , jet, tracks, trackDcaXYMax, trackDcaZMax, minSignImpXYSig);
188+ }
164189 } else {
165- jetProb = jettaggingutilities::getJetProbability (fSignImpXYSigLfJetMC , jet, tracks, trackDcaXYMax, trackDcaZMax, minSignImpXYSig);
190+ if (usepTcategorize) {
191+ jetProb = jettaggingutilities::getJetProbability (vecfSignImpXYSigLfJetMcCCDB, jet, tracks, trackDcaXYMax, trackDcaZMax, minSignImpXYSig);
192+ } else {
193+ jetProb = jettaggingutilities::getJetProbability (fSignImpXYSigLfJetMC , jet, tracks, trackDcaXYMax, trackDcaZMax, minSignImpXYSig);
194+ }
166195 }
167196 }
168197 }
@@ -215,12 +244,12 @@ struct JetTaggerHFTask {
215244 }
216245 if (useJetProb) {
217246 if constexpr (isMC) {
218- jetProb = calculateJetProbability (origin, jet, tracks);
247+ jetProb = calculateJetProbability (origin, jet, tracks, isMC );
219248 if (trackProbQA) {
220249 evaluateTrackProbQA (origin, jet, tracks, isMC);
221250 }
222251 } else {
223- jetProb = calculateJetProbability (0 , jet, tracks);
252+ jetProb = calculateJetProbability (0 , jet, tracks, isMC );
224253 if (trackProbQA) {
225254 evaluateTrackProbQA (0 , jet, tracks, isMC);
226255 }
@@ -256,21 +285,59 @@ struct JetTaggerHFTask {
256285 std::vector<float > vecParamsCharmJetMC;
257286 std::vector<float > vecParamsBeautyJetMC;
258287 std::vector<float > vecParamsLfJetMC;
259- std::vector<TF1*> resoFuncCCDB;
288+
289+ std::vector<TF1*> resoFuncDataCCDB;
290+ std::vector<TF1*> resoFuncIncCCDB;
291+ std::vector<TF1*> resoFuncBeautyCCDB;
292+ std::vector<TF1*> resoFuncCharmCCDB;
293+ std::vector<TF1*> resoFuncLfCCDB;
260294
261295 ccdbApi.init (ccdbUrl);
296+
297+ std::map<std::string, std::string> metadata;
298+ resoFuncMatch = resoFuncMatching;
299+
300+ const int IPmethodResolutionFunctionSize = 7 ;
301+
302+ auto loadCCDBforIP = [&](const std::vector<std::string>& paths, std::vector<TF1*>& targetVec, const std::string& name) {
303+ if (paths.size () != IPmethodResolutionFunctionSize) {
304+ usepTcategorize.value = false ;
305+ LOG (info) << name << " does not have 7 entries. Disabling pT categorization (usepTcategorize = false)." ;
306+ resoFuncMatch = 0 ;
307+ return ;
308+ }
309+ for (int i = 0 ; i < IPmethodResolutionFunctionSize; i++) {
310+ targetVec.push_back (ccdbApi.retrieveFromTFileAny <TF1>(paths[i], metadata, -1 ));
311+ }
312+ };
313+
262314 if (usepTcategorize) {
263- std::map<std::string, std::string> metadata; // dummy meta data (will be updated)
264- // fill the timestamp directly of each TF1 according to p_T track range (0, 0.5, 1, 2, 4, 6, 9)
265- for (int i = 0 ; i < 7 ; i++) {
266- resoFuncCCDB.push_back (ccdbApi.retrieveFromTFileAny <TF1>(pathsCCDBforIPparamer->at (i), metadata, -1 ));
315+ switch (resoFuncMatch) {
316+ case 6 :
317+ loadCCDBforIP (pathsCCDBforIPIncparameter, resoFuncIncCCDB, " pathsCCDBforIPIncparameter" );
318+ break ;
319+
320+ case 7 :
321+ loadCCDBforIP (pathsCCDBforIPBeautyparameter, resoFuncBeautyCCDB, " pathsCCDBforIPBeautyparameter" );
322+ loadCCDBforIP (pathsCCDBforIPCharmparameter, resoFuncCharmCCDB, " pathsCCDBforIPCharmparameter" );
323+ loadCCDBforIP (pathsCCDBforIPLfparameter, resoFuncLfCCDB, " pathsCCDBforIPLfparameter" );
324+ break ;
325+
326+ case 8 :
327+ loadCCDBforIP (pathsCCDBforIPDataparameter, resoFuncDataCCDB, " pathsCCDBforIPDataparameter" );
328+ break ;
329+
330+ default :
331+ LOG (info) << " resoFuncMatching is neither 6 nor 7, although usepTcategorize is set to true. Resetting resoFuncMatching to 0." ;
332+ resoFuncMatch = 0 ;
333+ break ;
267334 }
268335 }
269336
270337 maxOrder = numCount + 1 ; // 0: untagged, >1 : N ordering
338+ const int IPmethodNumOfParameters = 9 ;
271339
272340 // Set up the resolution function
273- resoFuncMatch = resoFuncMatching;
274341 switch (resoFuncMatch) {
275342 case 0 :
276343 vecParamsData = (std::vector<float >)paramsResoFuncData;
@@ -313,19 +380,61 @@ struct JetTaggerHFTask {
313380 break ;
314381 case 6 : // TODO
315382 vecParamsData = (std::vector<float >)paramsResoFuncData;
316- vecParamsIncJetMC = (std::vector<float >)paramsResoFuncData;
317- for (size_t j = 0 ; j < resoFuncCCDB.size (); j++) {
383+ for (size_t j = 0 ; j < resoFuncIncCCDB.size (); j++) {
318384 std::vector<float > params;
319- if (resoFuncCCDB [j]) {
320- for (int i = 0 ; i < 9 ; i++) {
321- params.emplace_back (resoFuncCCDB [j]->GetParameter (i));
385+ if (resoFuncIncCCDB [j]) {
386+ for (int i = 0 ; i < IPmethodNumOfParameters ; i++) {
387+ params.emplace_back (resoFuncIncCCDB [j]->GetParameter (i));
322388 }
323389 }
324390 vecParamsIncJetMcCCDB.emplace_back (params);
325391 }
326392 LOG (info) << " defined parameters of resolution function from CCDB" ;
327393 useResoFuncFromIncJet = true ;
328394 break ;
395+ case 7 : // TODO
396+ vecParamsData = (std::vector<float >)paramsResoFuncData;
397+ for (size_t j = 0 ; j < resoFuncBeautyCCDB.size (); j++) {
398+ std::vector<float > params;
399+ if (resoFuncBeautyCCDB[j]) {
400+ for (int i = 0 ; i < IPmethodNumOfParameters; i++) {
401+ params.emplace_back (resoFuncBeautyCCDB[j]->GetParameter (i));
402+ }
403+ }
404+ vecParamsBeautyJetMcCCDB.emplace_back (params);
405+ }
406+ for (size_t j = 0 ; j < resoFuncCharmCCDB.size (); j++) {
407+ std::vector<float > params;
408+ if (resoFuncCharmCCDB[j]) {
409+ for (int i = 0 ; i < IPmethodNumOfParameters; i++) {
410+ params.emplace_back (resoFuncCharmCCDB[j]->GetParameter (i));
411+ }
412+ }
413+ vecParamsCharmJetMcCCDB.emplace_back (params);
414+ }
415+ for (size_t j = 0 ; j < resoFuncLfCCDB.size (); j++) {
416+ std::vector<float > params;
417+ if (resoFuncLfCCDB[j]) {
418+ for (int i = 0 ; i < IPmethodNumOfParameters; i++) {
419+ params.emplace_back (resoFuncLfCCDB[j]->GetParameter (i));
420+ }
421+ }
422+ vecParamsLfJetMcCCDB.emplace_back (params);
423+ }
424+ LOG (info) << " defined parameters of resolution function from CCDB for each flavour" ;
425+ break ;
426+ case 8 :
427+ for (size_t j = 0 ; j < resoFuncDataCCDB.size (); j++) {
428+ std::vector<float > params;
429+ if (resoFuncDataCCDB[j]) {
430+ for (int i = 0 ; i < IPmethodNumOfParameters; i++) {
431+ params.emplace_back (resoFuncDataCCDB[j]->GetParameter (i));
432+ }
433+ }
434+ vecParamsDataJetCCDB.emplace_back (params);
435+ }
436+ LOG (info) << " defined parameters of resolution function from CCDB for data" ;
437+ break ;
329438 default :
330439 LOG (fatal) << " undefined parameters of resolution function. Fix it!" ;
331440 break ;
@@ -337,9 +446,21 @@ struct JetTaggerHFTask {
337446 fSignImpXYSigBeautyJetMC = jettaggingutilities::setResolutionFunction (vecParamsBeautyJetMC);
338447 fSignImpXYSigLfJetMC = jettaggingutilities::setResolutionFunction (vecParamsLfJetMC);
339448
449+ for (const auto & params : vecParamsDataJetCCDB) {
450+ vecfSignImpXYSigDataJetCCDB.emplace_back (jettaggingutilities::setResolutionFunction (params));
451+ }
340452 for (const auto & params : vecParamsIncJetMcCCDB) {
341453 vecfSignImpXYSigIncJetMcCCDB.emplace_back (jettaggingutilities::setResolutionFunction (params));
342454 }
455+ for (const auto & params : vecParamsBeautyJetMcCCDB) {
456+ vecfSignImpXYSigBeautyJetMcCCDB.emplace_back (jettaggingutilities::setResolutionFunction (params));
457+ }
458+ for (const auto & params : vecParamsCharmJetMcCCDB) {
459+ vecfSignImpXYSigCharmJetMcCCDB.emplace_back (jettaggingutilities::setResolutionFunction (params));
460+ }
461+ for (const auto & params : vecParamsLfJetMcCCDB) {
462+ vecfSignImpXYSigLfJetMcCCDB.emplace_back (jettaggingutilities::setResolutionFunction (params));
463+ }
343464
344465 // Use QA for effectivness of track probability
345466 if (trackProbQA) {
0 commit comments