@@ -33,12 +33,11 @@ using namespace o2;
3333using namespace o2 ::framework;
3434using namespace o2 ::framework::expressions;
3535
36- template <typename JetTableData, typename JetTableMCD, typename JetTableMCP, typename JetTaggingTableData, typename JetTaggingTableMCD, typename JetTaggingTableMCP >
36+ template <typename JetTableData, typename JetTableMCD, typename JetTaggingTableData, typename JetTaggingTableMCD>
3737struct JetTaggerHFTask {
3838
3939 Produces<JetTaggingTableData> taggingTableData;
4040 Produces<JetTaggingTableMCD> taggingTableMCD;
41- Produces<JetTaggingTableMCP> taggingTableMCP;
4241
4342 // configuration topological cut for track and sv
4443 Configurable<float > trackDcaXYMax{" trackDcaXYMax" , 1 , " minimum DCA xy acceptance for tracks [cm]" };
@@ -51,11 +50,6 @@ struct JetTaggerHFTask {
5150 Configurable<float > prongChi2PCAMax{" prongChi2PCAMax" , 100 , " maximum Chi2 PCA of decay length of prongs" };
5251 Configurable<float > svDispersionMax{" svDispersionMax" , 1 , " maximum dispersion of sv" };
5352
54- // jet flavour definition
55- Configurable<float > maxDeltaR{" maxDeltaR" , 0.25 , " maximum distance of jet axis from flavour initiating parton" };
56- Configurable<bool > removeGluonShower{" removeGluonShower" , true , " find jet origin removed gluon spliting" }; // true:: remove gluon spliting
57- Configurable<bool > searchUpToQuark{" searchUpToQuark" , true , " Finding first mother in particles to quark" };
58-
5953 // configuration about IP method
6054 Configurable<bool > useJetProb{" useJetProb" , false , " fill table for track counting algorithm" };
6155 Configurable<bool > trackProbQA{" trackProbQA" , false , " fill track probability histograms separately for geometric positive and negative tracks for QA" };
@@ -76,17 +70,10 @@ struct JetTaggerHFTask {
7670
7771 // axis spec
7872 ConfigurableAxis binTrackProbability{" binTrackProbability" , {100 , 0 .f , 1 .f }, " " };
79- ConfigurableAxis binJetFlavour{" binJetFlavour" , {6 , -0.5 , 5.5 }, " " };
8073
8174 using JetTagTracksData = soa::Join<aod::JetTracks, aod::JTrackExtras, aod::JTrackPIs>;
8275 using JetTagTracksMCD = soa::Join<aod::JetTracksMCD, aod::JTrackExtras, aod::JTrackPIs>;
8376
84- std::vector<float > vecParamsData;
85- std::vector<float > vecParamsIncJetMC;
86- std::vector<float > vecParamsCharmJetMC;
87- std::vector<float > vecParamsBeautyJetMC;
88- std::vector<float > vecParamsLfJetMC;
89- std::vector<float > jetProb;
9077 bool useResoFuncFromIncJet = false ;
9178 int maxOrder = -1 ;
9279 int resoFuncMatch = 0 ;
@@ -96,6 +83,13 @@ struct JetTaggerHFTask {
9683 std::unique_ptr<TF1> fSignImpXYSigBeautyJetMC = nullptr ;
9784 std::unique_ptr<TF1> fSignImpXYSigLfJetMC = nullptr ;
9885
86+ std::vector<int8_t > decisionIPs;
87+ std::vector<int8_t > decisionIPs3D;
88+ std::vector<int8_t > decisionSV;
89+ std::vector<int8_t > decisionSV3D;
90+ std::vector<float > scoreML;
91+ std::vector<float > jetProb;
92+
9993 template <typename T, typename U>
10094 void calculateJetProbability (int origin, T const & jet, U const & jtracks, std::vector<float >& jetProb, bool const & isMC = true )
10195 {
@@ -164,6 +158,12 @@ struct JetTaggerHFTask {
164158 HistogramRegistry registry{" registry" , {}, OutputObjHandlingPolicy::AnalysisObject};
165159 void init (InitContext const &)
166160 {
161+ std::vector<float > vecParamsData;
162+ std::vector<float > vecParamsIncJetMC;
163+ std::vector<float > vecParamsCharmJetMC;
164+ std::vector<float > vecParamsBeautyJetMC;
165+ std::vector<float > vecParamsLfJetMC;
166+
167167 maxOrder = numCount + 1 ; // 0: untagged, >1 : N ordering
168168
169169 // Set up the resolution function
@@ -257,7 +257,7 @@ struct JetTaggerHFTask {
257257 if (jettaggingutilities::isGreaterThanTaggingPoint (jet, jtracks, trackDcaXYMax, trackDcaZMax, tagPointForIP, minIPCount, true ))
258258 flagtaggedjetIPxyz = true ;
259259
260- taggingTableData (0 , jetProb, flagtaggedjetIP, flagtaggedjetIPxyz, flagtaggedjetSV, flagtaggedjetSVxyz);
260+ taggingTableData (jetProb, flagtaggedjetIP, flagtaggedjetIPxyz, flagtaggedjetSV, flagtaggedjetSVxyz);
261261 }
262262 }
263263 PROCESS_SWITCH (JetTaggerHFTask, processData, " Fill tagging decision for data jets" , false );
@@ -281,24 +281,19 @@ struct JetTaggerHFTask {
281281 flagtaggedjetIPxyz = true ;
282282 flagtaggedjetSV = jettaggingutilities::isTaggedJetSV (jet, prongs, prongChi2PCAMin, prongChi2PCAMax, prongsigmaLxyMax, svDispersionMax, false , tagPointForSV);
283283 flagtaggedjetSVxyz = jettaggingutilities::isTaggedJetSV (jet, prongs, prongChi2PCAMin, prongChi2PCAMax, prongsigmaLxyzMax, svDispersionMax, true , tagPointForSV);
284- taggingTableData (0 , jetProb, flagtaggedjetIP, flagtaggedjetIPxyz, flagtaggedjetSV, flagtaggedjetSVxyz);
284+ taggingTableData (jetProb, flagtaggedjetIP, flagtaggedjetIPxyz, flagtaggedjetSV, flagtaggedjetSVxyz);
285285 }
286286 }
287287 PROCESS_SWITCH (JetTaggerHFTask, processDataWithSV, " Fill tagging decision for data jets" , false );
288288
289- void processMCD (aod::JetCollision const & /* collision*/ , JetTableMCD const & mcdjets, JetTagTracksMCD const & jtracks, aod::JetParticles const & particles)
289+ void processMCD (aod::JetCollision const & /* collision*/ , soa::Join< JetTableMCD, aod::ChargedMCDetectorLevelJetFlavourDef> const & mcdjets, JetTagTracksMCD const & jtracks, aod::JetParticles const & particles)
290290 {
291291 for (auto & mcdjet : mcdjets) {
292292 bool flagtaggedjetIP = false ;
293293 bool flagtaggedjetIPxyz = false ;
294294 bool flagtaggedjetSV = false ;
295295 bool flagtaggedjetSVxyz = false ;
296- typename JetTagTracksMCD::iterator hftrack;
297- int origin = 0 ;
298- if (removeGluonShower)
299- origin = jettaggingutilities::mcdJetFromHFShower (mcdjet, jtracks, particles, maxDeltaR, searchUpToQuark);
300- else
301- origin = jettaggingutilities::jetTrackFromHFShower (mcdjet, jtracks, particles, hftrack, searchUpToQuark);
296+ int origin = mcdjet.origin ();
302297 if (useJetProb) {
303298 calculateJetProbability (origin, mcdjet, jtracks, jetProb);
304299 if (trackProbQA) {
@@ -309,24 +304,19 @@ struct JetTaggerHFTask {
309304 flagtaggedjetIP = true ;
310305 if (jettaggingutilities::isGreaterThanTaggingPoint (mcdjet, jtracks, trackDcaXYMax, trackDcaZMax, tagPointForIP, minIPCount, true ))
311306 flagtaggedjetIPxyz = true ;
312- taggingTableMCD (origin, jetProb, flagtaggedjetIP, flagtaggedjetIPxyz, flagtaggedjetSV, flagtaggedjetSVxyz);
307+ taggingTableMCD (jetProb, flagtaggedjetIP, flagtaggedjetIPxyz, flagtaggedjetSV, flagtaggedjetSVxyz);
313308 }
314309 }
315310 PROCESS_SWITCH (JetTaggerHFTask, processMCD, " Fill tagging decision for mcd jets" , false );
316311
317- void processMCDWithSV (aod::JetCollision const & /* collision*/ , soa::Join<JetTableMCD, aod::MCDSecondaryVertex3ProngIndices> const & mcdjets, JetTagTracksMCD const & jtracks, aod::MCDSecondaryVertex3Prongs const & prongs, aod::JetParticles const & particles )
312+ void processMCDWithSV (aod::JetCollision const & /* collision*/ , soa::Join<JetTableMCD, aod::ChargedMCDetectorLevelJetFlavourDef, aod:: MCDSecondaryVertex3ProngIndices> const & mcdjets, JetTagTracksMCD const & jtracks, aod::MCDSecondaryVertex3Prongs const & prongs)
318313 {
319314 for (auto & mcdjet : mcdjets) {
320315 bool flagtaggedjetIP = false ;
321316 bool flagtaggedjetIPxyz = false ;
322317 bool flagtaggedjetSV = false ;
323318 bool flagtaggedjetSVxyz = false ;
324- typename JetTagTracksMCD::iterator hftrack;
325- int origin = 0 ;
326- if (removeGluonShower)
327- origin = jettaggingutilities::mcdJetFromHFShower (mcdjet, jtracks, particles, maxDeltaR, searchUpToQuark);
328- else
329- origin = jettaggingutilities::jetTrackFromHFShower (mcdjet, jtracks, particles, hftrack, searchUpToQuark);
319+ int origin = mcdjet.origin ();
330320 if (useJetProb) {
331321 calculateJetProbability (origin, mcdjet, jtracks, jetProb);
332322 if (trackProbQA) {
@@ -339,67 +329,34 @@ struct JetTaggerHFTask {
339329 flagtaggedjetIPxyz = true ;
340330 flagtaggedjetSV = jettaggingutilities::isTaggedJetSV (mcdjet, prongs, prongChi2PCAMin, prongChi2PCAMax, prongsigmaLxyMax, prongIPxyMin, prongIPxyMax, svDispersionMax, false , tagPointForSV);
341331 flagtaggedjetSVxyz = jettaggingutilities::isTaggedJetSV (mcdjet, prongs, prongChi2PCAMin, prongChi2PCAMax, prongsigmaLxyzMax, prongIPxyMin, prongIPxyMax, svDispersionMax, true , tagPointForSV);
342- taggingTableMCD (origin, jetProb, flagtaggedjetIP, flagtaggedjetIPxyz, flagtaggedjetSV, flagtaggedjetSVxyz);
332+ taggingTableMCD (jetProb, flagtaggedjetIP, flagtaggedjetIPxyz, flagtaggedjetSV, flagtaggedjetSVxyz);
343333 }
344334 }
345335 PROCESS_SWITCH (JetTaggerHFTask, processMCDWithSV, " Fill tagging decision for mcd jets with sv" , false );
346336
347- void processMCP (aod::JetMcCollision const & /* collision*/ , JetTableMCP const & mcpjets, aod::JetParticles const & particles )
337+ void processDataAlgorithmML (aod::JetCollision const & /* collision*/ , soa::Join<JetTableData, aod::DataSecondaryVertex3ProngIndices> const & /* allJets */ , JetTagTracksData const & /* allTracks */ , aod::DataSecondaryVertex3Prongs const & allSVs )
348338 {
349- for (auto & mcpjet : mcpjets) {
350- bool flagtaggedjetIP = false ;
351- bool flagtaggedjetIPxyz = false ;
352- bool flagtaggedjetSV = false ;
353- bool flagtaggedjetSVxyz = false ;
354- typename aod::JetParticles::iterator hfparticle;
355- int origin = 0 ;
356- // TODO
357- if (removeGluonShower) {
358- if (jettaggingutilities::mcpJetFromHFShower (mcpjet, particles, maxDeltaR, searchUpToQuark))
359- origin = jettaggingutilities::mcpJetFromHFShower (mcpjet, particles, maxDeltaR, searchUpToQuark);
360- else
361- origin = 0 ;
362- } else {
363- if (jettaggingutilities::jetParticleFromHFShower (mcpjet, particles, hfparticle, searchUpToQuark))
364- origin = jettaggingutilities::jetParticleFromHFShower (mcpjet, particles, hfparticle, searchUpToQuark);
365- else
366- origin = 0 ;
367- }
368- jetProb.clear ();
369- jetProb.reserve (maxOrder);
370- jetProb.push_back (-1 );
371- taggingTableMCP (origin, jetProb, flagtaggedjetIP, flagtaggedjetIPxyz, flagtaggedjetSV, flagtaggedjetSVxyz);
372- }
339+ // To create table for ML
373340 }
374- PROCESS_SWITCH (JetTaggerHFTask, processMCP , " Fill tagging decision for mcp jets with sv " , false );
341+ PROCESS_SWITCH (JetTaggerHFTask, processDataAlgorithmML , " Fill ML evaluation score for data jets" , false );
375342
376- void processTraining (aod::JetCollision const & /* collision*/ , JetTableMCD const & /* mcdjets */ , JetTagTracksMCD const & /* tracks */ )
343+ void processMCDAlgorithmML (aod::JetCollision const & /* collision*/ , soa::Join< JetTableMCD, aod::ChargedMCDetectorLevelJetFlavourDef, aod::MCDSecondaryVertex3ProngIndices> const & /* allJets */ , JetTagTracksMCD const & /* allTracks */ , aod::MCDSecondaryVertex3Prongs const & allSVs )
377344 {
378345 // To create table for ML
379346 }
380- PROCESS_SWITCH (JetTaggerHFTask, processTraining , " Fill tagging decision for mcd jets" , false );
347+ PROCESS_SWITCH (JetTaggerHFTask, processMCDAlgorithmML , " Fill ML evaluation score for MCD jets" , false );
381348};
382349
383- using JetTaggerChargedJets = JetTaggerHFTask<soa::Join<aod::ChargedJets, aod::ChargedJetConstituents>, soa::Join<aod::ChargedMCDetectorLevelJets, aod::ChargedMCDetectorLevelJetConstituents>, soa::Join<aod::ChargedMCParticleLevelJets, aod::ChargedMCParticleLevelJetConstituents>, aod::ChargedJetTags, aod::ChargedMCDetectorLevelJetTags, aod::ChargedMCParticleLevelJetTags>;
384- using JetTaggerFullJets = JetTaggerHFTask<soa::Join<aod::FullJets, aod::FullJetConstituents>, soa::Join<aod::FullMCDetectorLevelJets, aod::FullMCDetectorLevelJetConstituents>, soa::Join<aod::FullMCParticleLevelJets, aod::FullMCParticleLevelJetConstituents>, aod::FullJetTags, aod::FullMCDetectorLevelJetTags, aod::FullMCParticleLevelJetTags>;
385- // using JetTaggerNeutralJets = JetTaggerHFTask<soa::Join<aod::NeutralJets, aod::NeutralJetConstituents>,soa::Join<aod::NeutralMCDetectorLevelJets, aod::NeutralMCDetectorLevelJetConstituents>, aod::NeutralJetTags, aod::NeutralMCDetectorLevelJetTags>;
350+ using JetTaggerChargedJets = JetTaggerHFTask<soa::Join<aod::ChargedJets, aod::ChargedJetConstituents>, soa::Join<aod::ChargedMCDetectorLevelJets, aod::ChargedMCDetectorLevelJetConstituents>, aod::ChargedJetTags, aod::ChargedMCDetectorLevelJetTags>;
351+ using JetTaggerFullJets = JetTaggerHFTask<soa::Join<aod::FullJets, aod::FullJetConstituents>, soa::Join<aod::FullMCDetectorLevelJets, aod::FullMCDetectorLevelJetConstituents>, aod::FullJetTags, aod::FullMCDetectorLevelJetTags>;
386352
387353WorkflowSpec defineDataProcessing (ConfigContext const & cfgc)
388354{
389355
390356 std::vector<o2::framework::DataProcessorSpec> tasks;
391357
392- tasks.emplace_back (
393- adaptAnalysisTask<JetTaggerChargedJets>(cfgc,
394- SetDefaultProcesses{}, TaskName{" jet-taggerhf-charged" }));
395-
396- tasks.emplace_back (
397- adaptAnalysisTask<JetTaggerFullJets>(cfgc,
398- SetDefaultProcesses{}, TaskName{" jet-taggerhf-full" }));
399- /*
400- tasks.emplace_back(
401- adaptAnalysisTask<JetTaggerNeutralJets>(cfgc,
402- SetDefaultProcesses{}, TaskName{"jet-taggerhf-neutral"}));
403- */
358+ tasks.emplace_back (adaptAnalysisTask<JetTaggerChargedJets>(cfgc, SetDefaultProcesses{}, TaskName{" jet-taggerhf-charged" }));
359+ tasks.emplace_back (adaptAnalysisTask<JetTaggerFullJets>(cfgc, SetDefaultProcesses{}, TaskName{" jet-taggerhf-full" }));
360+
404361 return WorkflowSpec{tasks};
405362}
0 commit comments