diff --git a/Configuration/PyReleaseValidation/README.md b/Configuration/PyReleaseValidation/README.md index 04f5abe43f6ba..ef50a51ea34d4 100644 --- a/Configuration/PyReleaseValidation/README.md +++ b/Configuration/PyReleaseValidation/README.md @@ -67,7 +67,8 @@ The offsets currently in use are: * 0.756 HLT phase-2 timing menu trimmed tracking * 0.757: HLT phase-2 timing menu mkFitFit variant * 0.758 HLT phase-2 timing menu ticl_barrel variant -* 0.759: HLT phase-2 timing menu, with NANO:@Phase2HLT +* 0.759: HLT phase-2 menu, with NANO:@Phase2HLT +* 0.7591: HLT phase-2 menu, with NANO:@Phase2HLTVal * 0.76: HLT phase-2 reduced menu, with DIGI step * 0.77: HLT phase-2 NGT Scouting menu * 0.771: HLT phase-2 NGT Scouting menu, Alpaka, TICL-v5, TICL-Barrel diff --git a/Configuration/PyReleaseValidation/python/relval_Run4.py b/Configuration/PyReleaseValidation/python/relval_Run4.py index d650cf1d1533f..62b24cfc76e54 100644 --- a/Configuration/PyReleaseValidation/python/relval_Run4.py +++ b/Configuration/PyReleaseValidation/python/relval_Run4.py @@ -70,7 +70,8 @@ numWFIB.extend([prefixDet+34.756]) # HLTTiming75e33, phase2_hlt_vertexTrimming numWFIB.extend([prefixDet+34.757]) # HLTTiming75e33, MkFitFit numWFIB.extend([prefixDet+34.758]) # HLTTiming75e33, ticl_barrel -numWFIB.extend([prefixDet+34.759]) # HLTTiming75e33 + NANO +numWFIB.extend([prefixDet+34.759]) # HLT75e33 + NANO +numWFIB.extend([prefixDet+34.7591]) # HLT75e33 + NANO (including validation) numWFIB.extend([prefixDet+34.77]) # NGTScouting numWFIB.extend([prefixDet+34.771]) # NGTScouting + alpaka + TICL-v5 + TICL-Barrel numWFIB.extend([prefixDet+34.772]) # NGTScouting + NANO diff --git a/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py b/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py index ba76d044bb352..81752b99d3147 100644 --- a/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py +++ b/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py @@ -2185,6 +2185,15 @@ def condition(self, fragment, stepList, key, hasHarvest): '--eventcontent':'FEVTDEBUGHLT,NANOAODSIM' } +upgradeWFs['HLTPhase2WithNanoValid'] = deepcopy(upgradeWFs['HLTPhase2WithNano']) +upgradeWFs['HLTPhase2WithNanoValid'].suffix = '_HLTPhase2WithNanoValid' +upgradeWFs['HLTPhase2WithNanoValid'].offset = 0.7591 +upgradeWFs['HLTPhase2WithNanoValid'].step2 = { + '-s':'DIGI:pdigi_valid,L1TrackTrigger,L1,L1P2GT,DIGI2RAW,HLT:75e33,VALIDATION:@hltValidation,NANO:@Phase2HLTVal', + '--datatier':'GEN-SIM-DIGI-RAW,NANOAODSIM', + '--eventcontent':'FEVTDEBUGHLT,NANOAODSIM' +} + upgradeWFs['NGTScoutingWithNano'] = deepcopy(upgradeWFs['HLTPhase2WithNano']) upgradeWFs['NGTScoutingWithNano'].suffix = '_NGTScoutingWithNano' upgradeWFs['NGTScoutingWithNano'].offset = 0.772 diff --git a/Configuration/PyReleaseValidation/scripts/runTheMatrix.py b/Configuration/PyReleaseValidation/scripts/runTheMatrix.py index 19a2d550b74ee..a193472b562c4 100755 --- a/Configuration/PyReleaseValidation/scripts/runTheMatrix.py +++ b/Configuration/PyReleaseValidation/scripts/runTheMatrix.py @@ -170,7 +170,8 @@ def runSelected(opt): prefixDet+34.756, # HLT phase-2 timing menu trimmed tracking prefixDet+34.757, # HLT phase-2 timing menu mkFit fitting variant prefixDet+34.758, # HLT phase-2 timing menu ticl_barrel variant - prefixDet+34.759, # HLT phase-2 timing menu, with NANO:@Phase2HLT + prefixDet+34.759, # HLT phase-2 menu, with NANO:@Phase2HLT + prefixDet+34.7591, # HLT phase-2 menu, with NANO:@Phase2HLTVal prefixDet+34.77, # HLT phase-2 NGT Scouting menu prefixDet+34.771, # HLT phase-2 NGT Scouting menu, Alpaka, TICL-v5, TICL-Barrel prefixDet+34.772, # HLT phase-2 NGT Scouting menu, with NANO:@NGTScouting diff --git a/HLTrigger/NGTScouting/plugins/SimTracksterTableProducer.cc b/HLTrigger/NGTScouting/plugins/SimTracksterTableProducer.cc index ecac37718a63a..03134e1c0d065 100644 --- a/HLTrigger/NGTScouting/plugins/SimTracksterTableProducer.cc +++ b/HLTrigger/NGTScouting/plugins/SimTracksterTableProducer.cc @@ -41,12 +41,10 @@ class SimTracksterTableProducer : public edm::global::EDProducer<> { private: void produce(edm::StreamID id, edm::Event& event, const edm::EventSetup& setup) const override { const auto simTrackstersHandle = event.getHandle(simTrackstersToken_); - const auto& simTracksters = *simTrackstersHandle; const auto caloParticlesHandle = event.getHandle(caloParticlesToken_); - const auto& caloParticles = *caloParticlesHandle; const auto simClustersHandle = event.getHandle(simClustersToken_); - const auto& simClusters = *simClustersHandle; - const auto cpToSCMap = event.get(caloParticleToSimClustersMap_token_); + const auto cpToSCMapHandle = event.getHandle(caloParticleToSimClustersMap_token_); + const size_t nSimTracksters = simTrackstersHandle.isValid() ? simTrackstersHandle->size() : 0; static constexpr float default_value = std::numeric_limits::quiet_NaN(); @@ -64,29 +62,36 @@ class SimTracksterTableProducer : public edm::global::EDProducer<> { std::vector genPt(nSimTracksters, default_value); std::vector mass(nSimTracksters, default_value); - //utility lambda for filling vectors - auto fillVectors = [&](const auto& obj, size_t iSim, float time) { - const auto& simTrack = obj.g4Tracks()[0]; - const auto caloPt = obj.pt(); - const auto simHitSumEnergy = obj.simEnergy(); - const auto caloMass = obj.mass(); - - boundaryX[iSim] = simTrack.getPositionAtBoundary().x(); - boundaryY[iSim] = simTrack.getPositionAtBoundary().y(); - boundaryZ[iSim] = simTrack.getPositionAtBoundary().z(); - boundaryEta[iSim] = simTrack.getPositionAtBoundary().eta(); - boundaryPhi[iSim] = simTrack.getPositionAtBoundary().phi(); - boundaryPx[iSim] = simTrack.getMomentumAtBoundary().x(); - boundaryPy[iSim] = simTrack.getMomentumAtBoundary().y(); - boundaryPz[iSim] = simTrack.getMomentumAtBoundary().z(); - - simTime[iSim] = time; - simEnergy[iSim] = simHitSumEnergy; - genPt[iSim] = caloPt; - mass[iSim] = caloMass; - }; - - if (simTrackstersHandle.isValid() || !(this->skipNonExistingSrc_)) { + if ((simTrackstersHandle.isValid() && caloParticlesHandle.isValid() && simClustersHandle.isValid() && + cpToSCMapHandle.isValid()) || + !(this->skipNonExistingSrc_)) { + const auto& simTracksters = *simTrackstersHandle; + const auto& caloParticles = *caloParticlesHandle; + const auto& simClusters = *simClustersHandle; + const auto& cpToSCMap = *cpToSCMapHandle; + + //utility lambda for filling vectors + auto fillVectors = [&](const auto& obj, size_t iSim, float time) { + const auto& simTrack = obj.g4Tracks()[0]; + const auto caloPt = obj.pt(); + const auto simHitSumEnergy = obj.simEnergy(); + const auto caloMass = obj.mass(); + + boundaryX[iSim] = simTrack.getPositionAtBoundary().x(); + boundaryY[iSim] = simTrack.getPositionAtBoundary().y(); + boundaryZ[iSim] = simTrack.getPositionAtBoundary().z(); + boundaryEta[iSim] = simTrack.getPositionAtBoundary().eta(); + boundaryPhi[iSim] = simTrack.getPositionAtBoundary().phi(); + boundaryPx[iSim] = simTrack.getMomentumAtBoundary().x(); + boundaryPy[iSim] = simTrack.getMomentumAtBoundary().y(); + boundaryPz[iSim] = simTrack.getMomentumAtBoundary().z(); + + simTime[iSim] = time; + simEnergy[iSim] = simHitSumEnergy; + genPt[iSim] = caloPt; + mass[iSim] = caloMass; + }; + for (size_t iSim = 0; iSim < simTracksters.size(); ++iSim) { const auto& simT = simTracksters[iSim]; float time = default_value; @@ -108,6 +113,7 @@ class SimTracksterTableProducer : public edm::global::EDProducer<> { } } } + auto simTrackstersTable = std::make_unique(nSimTracksters, tableName_, /*singleton*/ false, /*extension*/ true); simTrackstersTable->addColumn( diff --git a/HLTrigger/NGTScouting/plugins/TICLCandidateExtraTableProducer.cc b/HLTrigger/NGTScouting/plugins/TICLCandidateExtraTableProducer.cc index 83e1f60ce6e96..58694b9c57e76 100644 --- a/HLTrigger/NGTScouting/plugins/TICLCandidateExtraTableProducer.cc +++ b/HLTrigger/NGTScouting/plugins/TICLCandidateExtraTableProducer.cc @@ -34,6 +34,36 @@ class TICLCandidateExtraTableProducer : public SimpleFlatTableProducerBasesrc_); + // Check if handle is valid + if (!prod.isValid() && this->skipNonExistingSrc_) { + // Still book and write empty FlatTables + auto out = std::make_unique(0, this->name_, /*singleton*/ false, /*extension*/ false); + + for (const auto& coltable : this->coltables_) { + std::vector emptyCounts; + std::vector emptyOffsets; + + if (coltable.useCount) { + out->addColumn("n" + coltable.name, emptyCounts, "Count for " + coltable.name); + } + if (coltable.useOffset) { + out->addColumn("o" + coltable.name, emptyOffsets, "Offset for " + coltable.name); + } + + auto outcoltable = std::make_unique(0, coltable.name, false, false); + std::vector emptyTracksterKeys; + outcoltable->addColumn("tracksterIndex", emptyTracksterKeys, "Index of associated Trackster"); + outcoltable->setDoc(coltable.doc); + iEvent.put(std::move(outcoltable), coltable.name + "Table"); + } + + if (out->nColumns() > 0) { + out->setDoc(this->doc_); + iEvent.put(std::move(out)); + } + return; + } + const auto& candidates = *prod; const size_t table_size = candidates.size(); diff --git a/HLTrigger/NGTScouting/python/hltTICLCandidates_cfi.py b/HLTrigger/NGTScouting/python/hltTICLCandidates_cfi.py index 71e3cc48d1d43..a2ef1d80e11b8 100644 --- a/HLTrigger/NGTScouting/python/hltTICLCandidates_cfi.py +++ b/HLTrigger/NGTScouting/python/hltTICLCandidates_cfi.py @@ -99,6 +99,7 @@ "TICLCandidateExtraTableProducer", src = cms.InputTag("hltTiclTrackstersMerge"), name = cms.string("Candidate2Tracksters"), + skipNonExistingSrc = cms.bool(True), doc = cms.string("TICLCandidates extra table with linked Tracksters"), collectionVariables = cms.PSet( tracksters = cms.PSet( @@ -115,6 +116,7 @@ "TICLCandidateExtraTableProducer", src = cms.InputTag("hltTiclSimTracksters"), name = cms.string("SimCandidate2Tracksters"), + skipNonExistingSrc = cms.bool(True), doc = cms.string("TICLCandidates extra table with linked Tracksters"), collectionVariables = cms.PSet( tracksters = cms.PSet( diff --git a/HLTrigger/NGTScouting/python/hltTracksters_cfi.py b/HLTrigger/NGTScouting/python/hltTracksters_cfi.py index 9196b67d9fadb..f8e75737ae0df 100644 --- a/HLTrigger/NGTScouting/python/hltTracksters_cfi.py +++ b/HLTrigger/NGTScouting/python/hltTracksters_cfi.py @@ -4,8 +4,7 @@ from Validation.HGCalValidation.HLT_TICLIterLabels_cff import hltTiclIterLabels hltUpgradeNanoTask = cms.Task(nanoMetadata) -hltSimTrackstersLabels = [ - 'hltTiclSimTracksters', 'hltTiclSimTrackstersfromCPs'] +hltSimTrackstersLabels = ['hltTiclSimTracksters', 'hltTiclSimTrackstersfromCPs'] # Tracksters hltTrackstersTable = [] hltSimTrackstersTable = [] @@ -21,39 +20,24 @@ doc=cms.string(iterLabel), singleton=cms.bool(False), # the number of entries is variable variables=cms.PSet( - raw_energy=Var("raw_energy", "float", - doc="Raw Energy of the trackster [GeV]"), - raw_em_energy=Var("raw_em_energy", "float", - doc="EM raw Energy of the trackster [GeV]"), - raw_pt=Var( - "raw_pt", "float", doc="Trackster raw pT, computed from trackster raw energy and direction [GeV]"), + raw_energy=Var("raw_energy", "float", doc="Raw Energy of the trackster [GeV]"), + raw_em_energy=Var("raw_em_energy", "float", doc="EM raw Energy of the trackster [GeV]"), + raw_pt=Var("raw_pt", "float", doc="Trackster raw pT, computed from trackster raw energy and direction [GeV]"), regressed_energy=Var("regressed_energy", "float", doc="Regressed Energy of the trackster, for the SimTrackster it corresponds to the GEN-energy"), - barycenter_x=Var("barycenter.x", "float", - doc="Trackster barycenter x [cm]"), - barycenter_y=Var("barycenter.y", "float", - doc="Trackster barycenter y [cm]"), - barycenter_z=Var("barycenter.z", "float", - doc="Trackster barycenter z [cm]"), - barycenter_eta=Var("barycenter.eta", "float", - doc="Trackster barycenter pseudorapidity"), - barycenter_phi=Var("barycenter.phi", "float", - doc="Trackster barycenter phi"), - EV1=Var("eigenvalues()[0]", "float", - doc="Trackster PCA eigenvalues 0"), - EV2=Var("eigenvalues()[1]", "float", - doc="Trackster PCA eigenvalues 1"), - EV3=Var("eigenvalues()[2]", "float", - doc="Trackster PCA eigenvalues 2"), - eVector0_x=Var( - "eigenvectors()[0].x", "float", doc="Trackster PCA principal axis, x component"), - eVector0_y=Var( - "eigenvectors()[0].z", "float", doc="Trackster PCA principal axis, y component"), - eVector0_z=Var( - "eigenvectors()[0].y", "float", doc="Trackster PCA principal axis, z component"), + barycenter_x=Var("barycenter.x", "float", doc="Trackster barycenter x [cm]"), + barycenter_y=Var("barycenter.y", "float", doc="Trackster barycenter y [cm]"), + barycenter_z=Var("barycenter.z", "float", doc="Trackster barycenter z [cm]"), + barycenter_eta=Var("barycenter.eta", "float", doc="Trackster barycenter pseudorapidity"), + barycenter_phi=Var("barycenter.phi", "float", doc="Trackster barycenter phi"), + EV1=Var("eigenvalues()[0]", "float", doc="Trackster PCA eigenvalues 0"), + EV2=Var("eigenvalues()[1]", "float", doc="Trackster PCA eigenvalues 1"), + EV3=Var("eigenvalues()[2]", "float", doc="Trackster PCA eigenvalues 2"), + eVector0_x=Var("eigenvectors()[0].x", "float", doc="Trackster PCA principal axis, x component"), + eVector0_y=Var("eigenvectors()[0].z", "float", doc="Trackster PCA principal axis, y component"), + eVector0_z=Var("eigenvectors()[0].y", "float", doc="Trackster PCA principal axis, z component"), time=Var("time", "float", doc="Trackster HGCAL time"), - timeError=Var("timeError", "float", - doc="Trackster HGCAL time error") + timeError=Var("timeError", "float", doc="Trackster HGCAL time error") ), collectionVariables=cms.PSet( tracksterVertices=cms.PSet( @@ -62,12 +46,9 @@ useCount=cms.bool(True), useOffset=cms.bool(True), variables=cms.PSet( - vertices=Var("vertices", "uint", - doc="Layer clusters indices."), - vertex_mult=Var( - "vertex_multiplicity", - "float", - doc="Fraction of Layer cluster energy used by the Trackster.", + vertices=Var("vertices", "uint", doc="Layer clusters indices."), + vertex_mult=Var("vertex_multiplicity", "float", + doc="Fraction of Layer cluster energy used by the Trackster.", ), ), ) @@ -80,28 +61,19 @@ CP_SC_label = "CP" if "CP" in iterLabelSim else "SC" trackstersAssociationOneToManyS2RTable = cms.EDProducer( "TracksterTracksterEnergyScoreFlatTableProducer", - src=cms.InputTag( - f"hltAllTrackstersToSimTrackstersAssociationsByHits:{iterLabelSim}To{iterLabel}" - ), + src=cms.InputTag(f"hltAllTrackstersToSimTrackstersAssociationsByHits:{iterLabelSim}To{iterLabel}"), + skipNonExistingSrc=cms.bool(True), name=cms.string(f"Sim{CP_SC_label}2{iterLabel}ByHits"), - doc=cms.string( - f"Association between SimTracksters and {iterLabel}, by hits."), + doc=cms.string(f"Association between SimTracksters and {iterLabel}, by hits."), collectionVariables=cms.PSet( links=cms.PSet( - name=cms.string( - f"Sim{CP_SC_label}2{iterLabel}ByHitsLinks"), + name=cms.string(f"Sim{CP_SC_label}2{iterLabel}ByHitsLinks"), doc=cms.string("Association links."), useCount=cms.bool(True), useOffset=cms.bool(True), - variables=cms.PSet( - index=Var("index", "uint", - doc="Index of the associated Trackster."), - sharedEnergy=Var( - "sharedEnergy", - "float", - doc="Shared energy with associated Trackster.", - ), - score=Var("score", "float", doc="Sim2Reco Association score."), + variables=cms.PSet(index=Var("index", "uint", doc="Index of the associated Trackster."), + sharedEnergy=Var("sharedEnergy", "float", doc="Shared energy with associated Trackster."), + score=Var("score", "float", doc="Sim2Reco Association score."), ), ) ), @@ -111,29 +83,20 @@ hltTrackstersAssociationOneToManyTableProducers.append( globals()[labelAssociation]) - trackstersAssociationOneToManyR2STable = cms.EDProducer( - "TracksterTracksterEnergyScoreFlatTableProducer", - src=cms.InputTag( - f"hltAllTrackstersToSimTrackstersAssociationsByHits:{iterLabel}To{iterLabelSim}" - ), + trackstersAssociationOneToManyR2STable = cms.EDProducer("TracksterTracksterEnergyScoreFlatTableProducer", + src=cms.InputTag(f"hltAllTrackstersToSimTrackstersAssociationsByHits:{iterLabel}To{iterLabelSim}"), + skipNonExistingSrc=cms.bool(True), name=cms.string(f"Reco{iterLabel}2Sim{CP_SC_label}ByHits"), - doc=cms.string( - f"Association between {iterLabel} and SimTracksters, by hits."), + doc=cms.string(f"Association between {iterLabel} and SimTracksters, by hits."), collectionVariables=cms.PSet( links=cms.PSet( name=cms.string(f"Reco{iterLabel}2Sim{CP_SC_label}ByHitsLinks"), doc=cms.string("Association links."), useCount=cms.bool(True), useOffset=cms.bool(False), - variables=cms.PSet( - index=Var("index", "uint", - doc="Index of the associated SimTrackster."), - sharedEnergy=Var( - "sharedEnergy", - "float", - doc="Shared energy with associated SimTrackster.", - ), - score=Var("score", "float", doc="Reco2Sim Association score."), + variables=cms.PSet(index=Var("index", "uint",doc="Index of the associated SimTrackster."), + sharedEnergy=Var("sharedEnergy", "float", doc="Shared energy with associated SimTrackster."), + score=Var("score", "float", doc="Reco2Sim Association score."), ), ) ), @@ -143,18 +106,15 @@ hltTrackstersAssociationOneToManyTableProducers.append( globals()[labelAssociation]) -hltTrackstersTableSequence = cms.Sequence( - sum(tracksterTableProducers, cms.Sequence())) -hltTiclAssociationsTableSequence = cms.Sequence( - sum(hltTrackstersAssociationOneToManyTableProducers, cms.Sequence())) +hltTrackstersTableSequence = cms.Sequence(sum(tracksterTableProducers, cms.Sequence())) +hltTiclAssociationsTableSequence = cms.Sequence(sum(hltTrackstersAssociationOneToManyTableProducers, cms.Sequence())) simTracksterTableProducers = [] for iterLabel in hltSimTrackstersLabels: label = iterLabel objName = "" if ("CP" in iterLabel): label, objName = iterLabel.split("hltTiclSimTracksters") - hltSimTracksterTable = cms.EDProducer( - "TracksterCollectionTableProducer", + hltSimTracksterTable = cms.EDProducer("TracksterCollectionTableProducer", skipNonExistingSrc=cms.bool(True), src=cms.InputTag(f"hltTiclSimTracksters", objName), cut=cms.string(""), @@ -162,39 +122,23 @@ doc=cms.string(f"{iterLabel}"), singleton=cms.bool(False), # the number of entries is variable variables=cms.PSet( - raw_energy=Var("raw_energy", "float", - doc="Raw Energy of the trackster [GeV]"), - raw_em_energy=Var("raw_em_energy", "float", - doc="EM raw Energy of the trackster [GeV]"), - raw_pt=Var( - "raw_pt", "float", doc="Trackster raw pT, computed from trackster raw energy and direction [GeV]"), - regressed_energy=Var("regressed_energy", "float", - doc="Regressed Energy of the trackster, for the SimTrackster it corresponds to the GEN-energy"), - barycenter_x=Var("barycenter.x", "float", - doc="Trackster barycenter x [cm]"), - barycenter_y=Var("barycenter.y", "float", - doc="Trackster barycenter y [cm]"), - barycenter_z=Var("barycenter.z", "float", - doc="Trackster barycenter z [cm]"), - barycenter_eta=Var("barycenter.eta", "float", - doc="Trackster barycenter pseudorapidity"), - barycenter_phi=Var("barycenter.phi", "float", - doc="Trackster barycenter phi"), - EV1=Var("eigenvalues()[0]", "float", - doc="Trackster PCA eigenvalues 0"), - EV2=Var("eigenvalues()[1]", "float", - doc="Trackster PCA eigenvalues 1"), - EV3=Var("eigenvalues()[2]", "float", - doc="Trackster PCA eigenvalues 2"), - eVector0_x=Var( - "eigenvectors()[0].x", "float", doc="Trackster PCA principal axis, x component"), - eVector0_y=Var( - "eigenvectors()[0].z", "float", doc="Trackster PCA principal axis, y component"), - eVector0_z=Var( - "eigenvectors()[0].y", "float", doc="Trackster PCA principal axis, z component"), + raw_energy=Var("raw_energy", "float", doc="Raw Energy of the trackster [GeV]"), + raw_em_energy=Var("raw_em_energy", "float", doc="EM raw Energy of the trackster [GeV]"), + raw_pt=Var("raw_pt", "float", doc="Trackster raw pT, computed from trackster raw energy and direction [GeV]"), + regressed_energy=Var("regressed_energy", "float", doc="Regressed Energy of the trackster, for the SimTrackster it corresponds to the GEN-energy"), + barycenter_x=Var("barycenter.x", "float", doc="Trackster barycenter x [cm]"), + barycenter_y=Var("barycenter.y", "float", doc="Trackster barycenter y [cm]"), + barycenter_z=Var("barycenter.z", "float", doc="Trackster barycenter z [cm]"), + barycenter_eta=Var("barycenter.eta", "float", doc="Trackster barycenter pseudorapidity"), + barycenter_phi=Var("barycenter.phi", "float", doc="Trackster barycenter phi"), + EV1=Var("eigenvalues()[0]", "float", doc="Trackster PCA eigenvalues 0"), + EV2=Var("eigenvalues()[1]", "float", doc="Trackster PCA eigenvalues 1"), + EV3=Var("eigenvalues()[2]", "float", doc="Trackster PCA eigenvalues 2"), + eVector0_x=Var("eigenvectors()[0].x", "float", doc="Trackster PCA principal axis, x component"), + eVector0_y=Var("eigenvectors()[0].z", "float", doc="Trackster PCA principal axis, y component"), + eVector0_z=Var("eigenvectors()[0].y", "float", doc="Trackster PCA principal axis, z component"), time=Var("time", "float", doc="Trackster HGCAL time"), - timeError=Var("timeError", "float", - doc="Trackster HGCAL time error") + timeError=Var("timeError", "float", doc="Trackster HGCAL time error") ), collectionVariables=cms.PSet( tracksterVertices=cms.PSet( @@ -203,13 +147,8 @@ useCount=cms.bool(True), useOffset=cms.bool(True), variables=cms.PSet( - vertices=Var("vertices", "uint", - doc="Layer clusters indices."), - vertex_mult=Var( - "vertex_multiplicity", - "float", - doc="Fraction of Layer cluster energy used by the Trackster.", - ), + vertices=Var("vertices", "uint", doc="Layer clusters indices."), + vertex_mult=Var("vertex_multiplicity", "float", doc="Fraction of Layer cluster energy used by the Trackster."), ), ) ), @@ -219,18 +158,12 @@ simTracksterTableProducers.append(globals()[label]) hltTiclSimTrackstersExtraTable = cms.EDProducer("SimTracksterTableProducer", - tableName=cms.string( - f"{iterLabel}"), - skipNonExistingSrc=cms.bool( - True), - simTracksters=cms.InputTag( - "hltTiclSimTracksters", objName), - caloParticles=cms.InputTag( - "mix", "MergedCaloTruth"), - simClusters=cms.InputTag( - "mix", "MergedCaloTruth"), - caloParticleToSimClustersMap=cms.InputTag( - "hltTiclSimTracksters"), + tableName=cms.string(f"{iterLabel}"), + skipNonExistingSrc=cms.bool(True), + simTracksters=cms.InputTag("hltTiclSimTracksters", objName), + caloParticles=cms.InputTag("mix", "MergedCaloTruth"), + simClusters=cms.InputTag("mix", "MergedCaloTruth"), + caloParticleToSimClustersMap=cms.InputTag("hltTiclSimTracksters"), precision=cms.int32(7), ) labelExtra = f"{iterLabel}TableExtraProducer" @@ -242,14 +175,13 @@ # Tracksters Associators hltSimCl2CPOneToOneFlatTable = cms.EDProducer( "SimClusterCaloParticleFractionFlatTableProducer", - src=cms.InputTag( - "SimClusterToCaloParticleAssociation:simClusterToCaloParticleMap"), + src=cms.InputTag("SimClusterToCaloParticleAssociation:simClusterToCaloParticleMap"), name=cms.string("SimCl2CPWithFraction"), + skipNonExistingSrc=cms.bool(True), doc=cms.string("Association between SimClusters and CaloParticles."), variables=cms.PSet( index=Var("index", "int", doc="Index of linked CaloParticle."), - fraction=Var("fraction", "float", - doc="Fraction of linked CaloParticle."), + fraction=Var("fraction", "float",doc="Fraction of linked CaloParticle."), ), ) hltTiclAssociationsTableSequence += hltSimCl2CPOneToOneFlatTable diff --git a/PhysicsTools/NanoAOD/interface/AssociationMapFlatTableProducer.h b/PhysicsTools/NanoAOD/interface/AssociationMapFlatTableProducer.h index 5558c017cfd11..623d1831288a5 100644 --- a/PhysicsTools/NanoAOD/interface/AssociationMapFlatTableProducer.h +++ b/PhysicsTools/NanoAOD/interface/AssociationMapFlatTableProducer.h @@ -32,7 +32,12 @@ class AssociationOneToOneFlatTableProducer : public SimpleFlatTableProducerBase< std::unique_ptr fillTable(const edm::Event &iEvent, const edm::Handle &prod) const override { // First unroll the Container inside the associator map. - auto table_size = prod->getMap().size(); + // Determine the table size safely + size_t table_size = 0; + if (prod.isValid()) { + table_size = prod->getMap().size(); + } + auto out = std::make_unique(table_size, this->name_, false); std::vector selobjs; @@ -104,21 +109,27 @@ class AssociationOneToManyFlatTableProducer : public SimpleFlatTableProducerBase void produce(edm::Event &iEvent, const edm::EventSetup &iSetup) override { // same as SimpleFlatTableProducer - edm::Handle prod; - iEvent.getByToken(SimpleFlatTableProducerBase::src_, prod); + edm::Handle prod = iEvent.getHandle(SimpleFlatTableProducerBase::src_); // First unroll the Container inside the associator map. - auto table_size = prod->getMap().size(); + // Determine the table size safely + size_t table_size = 0; + if (prod.isValid()) { + table_size = prod->getMap().size(); + } + auto out = std::make_unique(table_size, this->name_, false); // Now proceed with the variable-sized linked objects. unsigned int coltablesize = 0; std::vector counts; counts.reserve(table_size); - for (auto const &links : prod->getMap()) { - counts.push_back(links.size()); - coltablesize += counts.back(); + if (prod.isValid() || !(this->skipNonExistingSrc_)) { + for (auto const &links : prod->getMap()) { + counts.push_back(links.size()); + coltablesize += counts.back(); + } } std::vector selobjs;